Site hosted by Build your free website today!


FreeDS is an attempt at creating an open source land surveying application
for the HP 48. It is also an attempt at promoting a concept diametrically opposed
to the ubiqitious window, menu list, 'choose box' paradigm.

FreeDS is command line and stack oriented. All user functions are accessed from
the first three pages of the VAR Menu and from the keyboard.

A keyboard template image is included. You have to supply your own printer,
x-acto knife and protective spray and/or tape.

My MSDOS program SkiVert is used to convert comma-delimited coordinate
files to the HP48 directory type file used by FreeDS, and vice versa, as
well as producing dxf's.

I use Ripterm or Kermit for file transfer.

Also included is Freeds.E48, KMLs and bitmaps for Emu48.

Thanks to Mike Morris for the Topcon communications source. And, regarding the
Emu48 version of FreeDS, thanks to Casey Patterson for the Float_GX files;
I based my FreeDSsmall files on them. Thanks to Jeffery L. McMahon for the
Jemac files.I based my full scale graphic on them.

This document is not as complete as I would like at this time. Additional
explanations, examples, etc. will be provided with updates.


Make sure your IO settings are as follows:

For PC to 48GX: wire, ascii, 9600, 0, 3, 1

For 48GX to 48GX: IR, binary, 9600, 0, 3, 1

Send the 'Kogo' file to your HP using Kermit. This can be done with
the Kermit program, Ripterm, or any serial communications program
which supports the Kermit protocol. Insure that the filename as saved
on the calculator is uppercase "K", lowercase "ogo".

After the transfer is done, switch to the Kogo subdirectory on your HP.
Type U K S . (Include the period at the end.) A list will appear on the
stack. This is the "User" key assignment list.
Press [Left-Shift] [CST] [KEYS] [STOK] . The list is now saved in
memory, and will be referred to when "User" Mode is active.
Next, type 4 [ENTER] [alpha] [alpha] F I X .
If you prefer the date and time display, press
[Right-Shift] [CST] [ ^] [ CHECK ] [OK] .
Finally, set "User" Mode by typing 62 [+/-] [alpha] [alpha] S F .

The Kogo Subdirectory

This program exists as User RPL coded program and data variables in
the Kogo subdirectory, accessed via the VAR Menu. The VAR key is
labeled MAIN on the keyboard template @ key 24.1. Pressing it will
return you to the first page of the VAR Menu. All functions are designed
to be used from the Kogo directory. Although it's possible to use some
functions from job subdirectories or elsewhere without generating error
messages or spurious output, FreeDS has not been completely idiot-
proofed at this time. Idiot-proofing has been implemented in areas where
errors would be fatal.

The Keyboard Template

Function locations were designed with preservation of useful native
commands in mind. Certain functions are grouped by usage context.
They occupy a common key, or if spanning multiple keys, are
bordered in black. At four locations function names lie on a red
background. These are associated with instrument communications.

Creating (or Switching) Job Directories

VAR Menu
Page 2 

The JOBS. directory
is reserved for subdirectories created
using ->JOB. If a subdirectory by the name submitted already
exists, that subdirectory becomes the target for computations
involving point data. ex: [alpha] [alpha] OAKSPRINGS ->JOB.
If you have trouble remembering a jobname, go to the JOBS.
subdirectory, press [ ' ] [ jobname ] MAIN NXT ->JOB.

Storing Point Data with STP.

Overwrite protection (Flag 23) is set or cleared using OwP on the
keyboard template @ key 62.3, in the "SETTINGS" group.
Point data exists as list objects stored in variables. Due to the
variable naming convention of the 48, these variables begin with
an alpha character, in this case "P", which is automatically
prefixed to the numeric part of the variable name when stored
using STP , found on the keyboard template @ key 32.1, or the
first page of the VAR menu ( MAIN ). Storing a northing and easting
or northing, easting, description as an unused P#, or existing P#
if OwP  is off is as follows:

          N  E  P#   STP
or   N  E  D  P#  STP

You'll notice that the point number is returned to the stack with a
P prefix. Point numbers are named in this fashion and used
for point data storage. Point data ( n e z d ) is saved as a
LIST object.

A default Z value ( 0 ) and description (as set w/ >Des on the
keyboard template) are saved along with the given N and E
when using the first example. The result might look
like this: {5000 5000 0 PROPCOR }.
The result using the second example might be like this:
{5000 5000 0 TRAV }. By including the description for storage,
the default description is ignored. If you wish to save coordinates and
are unconcerned about descriptions, use a single character for the
default description to save memory.

Storing elev. using exist point#. (OwP status disregarded.):


Storing description using exist point#. (OwP status disregarded):


The procedure for quickly storing all point data
using the above commands is as follows:


An efficient solution would be to store groups of points with
like descriptions, setting the default description with >Des
beforehand. The elevation would be stored as above, by entering
it last, then SWAP STE .

>Des comes in handy when saving groups of like descripted points,
though note that >P#, located left of>Des @ key 25.2, cannot be
used to manually store point data sequentially. These functions, along
with the others in their group, >MU("Measure Up") and >HR (Height of
Rod) are typically used prior to saving a point measurement w/ STP
during data collection. Sequential point numbering is done automatically
at this level, with the option of changing the next point number,
description or rod height.

Radial Stakeout by Point#

Use SO for radial stakeout by point#, SO+ and SO- for the same thing
w/ incremented or decremented point#'s. An angle right and distance is
generated and put on the stack. You can also recall this information via
the To SO screen.


Stakeout Measurement

MEAS can be used after a point stakeout using SO. If GUN is OFF,
manually keying in the measurement and pressing MEAS generates
a come or go value. No provision for vertical information exists if using
MEAS manually. If GUN is ON, pressing MEAS initiates an instrument
measurement, and generates the As So (As Staked out) screen.

Stack after manual MEAS

(By the way, if the numbers don't seem to work in the screen above, it's because
they don't! It was generated using Emu48 without the benefit of a total station,
and is intended for layout illustration only)

Radial Stakeout to a Line

BL is used to set up a line, using a beginning point# and ending point#,
azimuth or bearing/quadrant#. Subsequent use of BegSta, At Sta, DIST ,
->OS., or ->RAD. puts an angle right, distance, and N, E values on the
stack, and generates the To SO screen.

The coordinate can be saved with STP . Note that it is NOT necessary to
save coordinates prior to getting stakeout data.

BL needs help in telling whether the object on stack level 1 represents an
azimuth, quadrant or point#. Since the object at level 2 (if we're working with
an  azimuth or two point#'s) is by default a point#, we need only to distinguish
the second point# by prefixing it with a 'P '. This can be done with the alpha
function as in [alpha] P 200 [ENTER ], or more efficiently by keying in the
point# and pressing MkP#

Another line stakeout method is BLRef (Left-Shift MEAS). BLRef can use
a coordinate generated by manual SS, a point# (prefixed w/ MkP#), or the
measurement list produced by SS w/ GUN ON. BLRef then generates
reference information to guide the rodperson.


Saving Sideshot and Stakeout
Measurements with STP.

Enabling or disabling instrument communication is done w/ GUN ON/OFF.
Pressing Left-Shift [Alpha] toggles Topcon communications on and off.

With GUN OFF, the SS (Sideshot) routine takes an angle right and distance
as arguments, returning a northing and easting to the stack, ready for storage.
If GUN is ON, SS ignores the stack. Instead it gets the angle and distance
information from the Topcon.
When an observation is obtained from the instrument using SS or MEAS (after
a point stakeout using SO ), the pending P# is placed in a LIST object along with
the received slope distance, zenith angle and horizontal angle

{P123 100.7798 90.3015 310.1545 }

Afterwards, STP can be used to compute xyz coordinates and store the shot.
(w/ Notes ON, raw data is saved too.)

STP computes rectangular values based on the instrument data and the
values set by the functions listed below:

>MU      The "measure up" - from occupied point to instrument
>HI        Instrument Height - relative to sealevel - ( This is not accessed
              via the keyboard template, but can be used from the VAR Menu)
>HR       Rod Height
>P#        Pending Point#
>Des      Pending Description

At any time prior to or after using SS or MEAS, and prior to using STP ,
you can change the current rod height, point#, and description to modify the
point data. The point number is automatically incremented for the next shot.

Using STP after SS with the observation LIST at stack level 1 produces results
similar to using STP after MEAS, with the "Come" or "Go" string generated by
MEAS at stack level 1.


The instrument measurements LIST is put on the stack by SS; MEAS
returns a "Come:" or "Go:" string. STP tests for the data type and acts
accordingly. Why is the LIST not at level 1 in both cases?
Distinguishing SS and MEAS derived output is necessary so these procedures
can be properly formatted and appended to the string saved as the 'NOTES.'
variable. With Notes ON, measurements are recorded in a readable format,
analogous to hand written field notes, including enough information to serve
as a report file. The NOTES. variable contains a string (ie. text file) to which
measurements are appended by STP while Notes is ON.
Associated with Notes is Nt Elev , an ON\OFF toggle for vertical information
to NOTES., and PNte , a point lister.

Sample NOTES. string (w/ Nt Elev OFF):

Header:                                     %%HP: T(1)A(D)F(.);
Begin String:                              "
Title:                                          Morrison - Lot 64
Date:                                          02-02-02
Crew:                                         Smith Bruce

List point data:                            P5013{4899.6397 5485.3933 0.0000 TRAV }
List point data:                            P5001{4261.3976 5524.3426 0.0000 P }

Occupied & Backsight:                      T@ 5013 Bs 5001
Stakeout point# & description:      SO (5001) 'LOTCOR'
ARt and HD:                                          0.0000 639.4300
S/O pnt recorded:                        Rec as (5053) 'BSCHECK'
ARt and HD:                                          0.0001 639.4400
Sideshot point# & description:      (5054) 'HSECOR'
ARt and HD:                                          24.1033 52.8100
                                                  (5055) 'EPOLE'
                                                            166.2053 12.3100
                                                  (5056) 'WELL'
                                                            32.1043 162.4500
Stakeout point# & description:      SO (5014) 'LOTCOR'
ARt and HD:                                         294.0537 489.9800
S/O pnt recorded:                        Rec as (5057) 'CHK'
ARt and HD:                                         294.0545 490.0200
Sideshot point# & description:      (5058) 'FLY'
ARt                                                  1)112.0522
Rep                                                  2)224.1046
Mean ARt and HD                             M)112.0523 307.5500

More NOTES. examples can be viewed, one with NtElev ON,
and one with multiple angles (ARep).


Intersections and Resections

All of the routines listed in this section solve for the coordinate of one
unknown point.

2 RES ( 2 Point Resection)

Technically not employing 'resection' calculations but involving a bearing
rotation solution,  this procedure is sometimes referred to as 'free stationing'.
It uses two known points, a backsight distance, angle right and foresight
Enter two point#'s, a distance, an angle right, and a distance.

112  201  57  326.2318  302.0937  2 RES

3 RES (3 Point Resection)

(Collins Method) With 3 RES a all you need are three known points and two angles.
Since distances are not necessary, this eliminates the need for a
rodperson's presence at any of the points as long as they are visible.
Which pretty much means you'd be sighting building corners, radio towers,

Enter 3 point#'s and two angles in the order of observation.

112  201  57  326.2318  302.0937  3 RES

AAX ( Azimuth - Azimuth Intersection)

I saw no point in enabling the use of bearings and quadrants; It
seems a small thing to convert them yourself.
Enter the first point#, azimuth, second point#, and azimuth.

42  107.1829  44  05.1749 AAX

DDX ( Distance - Distance Intersection)

As you know, there are two solutions to any distance - distance
intersection problem. This routine returns one solution. You determine
which one by entering the known points and distances in sequence so
that the solution lies to the right, or clockwise (less than 180 degrees)
fromthe known points.
Enter the first point#, distance from it, second point#, and

109  32.67  111  50.00 DDX

ADX( Azimuth - Distance Intersection)

Enter the first point#, the azimuth, the second point# and the distance.

42  232.47  44  325.1209 ADX


Command List
Ordered by Menu and Template Position

Listed below are all of the FreeDS user functions and some
native keyboard functions preserved for convenience. Detailed
descriptions not already provided will be included with document

VAR Menu


R->P.                          Rect to Pol
P->R.                          Pol to Rect
INVERS.                      Point Inverse
->OS.                          Baseline Offset Distance
->RAD.                        Baseline Radius Distance
stp.                             Store point (calls STP.)

Page 2

->HI.                           Height of Instrument
->HR.                          Height of Rod
TLEV.                         Trig Levels - VD; ( Uses HI. and HR. )
DLEV.                         Differential Levels; ( Uses HI. )
->JOB.                        Create / Switch Job
JOBS.                         JOBS. Subdirectory

Page 3

ABC.                          Area by Coordinates
RC>A.                        Radius, Chord; produces Area Under Arc, Arc Length
BEAM.                       (Used w/ Alidade and Plane Table) Distance,
                                   Beamon Arc Reading and Rod Reading for
                                   Ground Elev @ Rod
LEVL.                        (Used w/ Alidade and Plane Table) Rod Reading
                                   for Ground Elev @ Rod (when alidade is level)

User Keys
Label   ( Program Name )         Description

2 RES ( RESCT. )             Two Point Resection
3 RES ( TPRS. )               Three Point Resection ( Angles Only )
AAX ( BBINX. )                 Azimuth - Azimuth Intersection
RCP ( RCP. )                    Recall Point Northing & Easting
DDX ( NDDX. )                  Distance - Distance Intersection
ADX ( BDINX. )                 Azimuth - Distance Intersection

BL ( BL. )                         Establish Baseline by Point # - Point #,
                                       Point # - Azimuth or Point # - Bearing - Quadrant #
BegSta ( STA1. )             Beginning Baseline Station

MAIN ( S2M. )                  Default to 1st Page of VAR Menu
>MU ( MUPR. )                "Measure Up" ( For Height of Instrument )
>HR ( >HR. )                    Height of Rod

>P# ( >PNT. )                   Set Pending Point #
>Des ( >DESC. )              Set Pending Description

prev ( PREV )                  (Native Command) - PREVious Menu Page
SHI ( HIGET. )                  Establish Instr. Ht. by BM Shot

updir ( BUPDIR. )              UPDIRectory - Will not go above 'FReeDS' to HOME
PNte ( SPCTN. )                Write Point data to NOTES., and Display

STP ( STP. )                      Store N, E or N, E, Desc as Point #
STE ( STOEL. )                  Store Z to Ex. Point #
STD ( STOD. )                   Store Description to Ex. Point #

DIST ( DIST>. )                  Distance Interval along Baseline
To Sta ( STA2. )                Stake at Station Value along Baseline
UNDO ( UNDO )                 (Native Command)

SETUP ( MKPNSETUP. )    Establish Occupied and Backsight Point #'s
HSet ( TOPHSET.48G )      Set Instrument Hz Angle
Trv ( AHD>. )                     Occupy New Point# , Backsight
                                         previously occupied Point #

To So ( SHOWD. )              Displays "To be Staked Out" parameters
As So ( SHOWD2.)             Displays "As Staked Out" measurements
SS ( 27 SF RECSHT. VSTR. )Displays Sideshot measurements
Gen ( SETSHOW. )             The General Settings Info Screen

Label   ( Program Name )         Description

SO ( MKPNSO. )                 Stakeout Point #
SO+ ( INCRN. )                   Stakeout Next Point #
SO- ( INCRP. )                    Stakeout Prevous Point #

SS ( SS. )                           Sideshot
OSA  ( AOS. )                      Angle Offset
ARep ( ADBL. )                   Angle Repetition

DDeg ( HMS> )                    (Native Command)
HMS ( >HMS )                     (Native Command)
HMS+ ( HMS+ )                   (Native Command)
HMS- ( HMS- )                     (Native Command)

MkP# ( MKPN. )                   Mark Integer as Point # ( As Needed for BL., etc. )
HMSx ( HMSM. )                   HMS Multiply
HMS/ ( HMSD. )                   HMS Divide

MEAS ( SCD. )                     Measure Stakeout
BLref ( A2L. )                       Reference Point or Sideshot to Baseline

clear ( CLEAR )                   (Native Command) - Clear Entire Display

Gun ( GOGO. )                     Gun Comm On/Off
Notes ( NOTER. )                  NOTE. On/Off
Nte Elev ( ELO. )                  NOTE. Elevations On/Off
OwP ( OWPSET. )                Overwrite Protect On/Off
Mtol ( ATOLSET. )                 Set Mean Tolerance ( for ARep )