JASON's LOW-BUDGET SURVEY PROGRAMS for the HP-48GX
version 6.15
(shareware) (DEFINITELY NOT LOW-QUALITY)

Last Rev. 04/22/2003

PREFACE
This package is meant to be a 2-D COGO package with useful routines for construction and engineering. The coordinate file format incorporates an elevation, but only two programs take advantage of it. All calculations are plane geometry and do NOT take into account things like earth's curvature, or refraction.

The thing that makes this package useful and unique is that it takes a scratch pad approach. You can use the stack as your scratch pad to hold answers, enter variables, and do arithmetic. This is great for working plans or checking things in the field. I find that I work and think more like a scratch pad than like a well structured, rigid surveying program. I bet you do too.

NICHE, this program set has a definite niche and it is not meant to replace or show-up commercial software. It is different from commercial software and has different goals in mind. In it, has been created a strategy of operation that is unique and good for calculating, working plans, and quickie field checks. There are many simple operations that surveyors tend to carry a second calculator for. Many who use commercial hp-48 software platforms also carry a second calculator to do simpler tasks or to check complex tasks. It is this niche of "the second calculator" that this program hopes to fill.

Please note that this manual was written entirely with WordPad and so the hypertext is purely human driven, so if something looks funny, that's why. Yeh, no spell check either. Hey, it's LOW-BUDGET!!!!!

CONTENTS

LEGAL STUFF
COPYRIGHT AGREEMENT (shareware version only)
This is shareware and you are free to distribute it as long as it is distributed unchanged and in its entirety. And hey, NO DISTRIBUTING THIS FOR PROFIT!!!!!!!!

(C)COPYRIGHT 2002 JASON LOOK All rights reserved.

SHAREWARE VS. NON-SHAREWARE
What is the difference between the shareware version and the non-shareware version? Well, aside from you may NOT distribute the non-shareware version, the point number range. The shareware version can do almost everything the non-shareware version can, except you can only use point numbers 1 thru 13. On the non-shareware version you can use point numbers 1 thru 999999. This is not to say you can have nearly a million points, but you can use point numbers that high. The shareware version has a 13 leg restriction on the LOT corners program, the non-shareware version does not. Also, the Import/Export routines are not available with the shareware versions. That's about it.

PURCHASING
If you have already purchased ANY version of my surveying programs prior to the year 2003, just email me and if I can verify your patronage, I'll email you the update.

If you are a new customer to me and you are interested in the non-shareware versions, please contact me for pricing as well as availability of the overlays. Included in the price are all ten configurations of the program. I have had lots of hardware problems lately and don't know how much longer the Toshiba will survive, so you may wish to use snail mail if I don't respond to your email.

Contact me at:

CUSTOMER SUPPORT
There is NO CUSTOMER SUPPORT. However, if you find bugs or need a little help, please contact me.

WARRANTY
There is NO WARRANTY. These programs and documents are not guaranteed to be free from defects. Use them at you own risk. The author of these programs shall not be held responsible for any loss caused by these programs or their use, incidental or otherwise. Use of these programs constitutes your agreement to accept these terms.

INSTALLATION
If you have another version of this program loaded, please remove it before installing this one. See section on REMOVING PROGRAM.

You are provided this file:

*****LESS EDITIONS*****

Previously, I provided shareware versions of all five editions, however, because of lack of interest, I have only provided the most popular edition with this posting. It is for the Medium Lite edition. The instruction details what's covered in all the editions so you have an idea of what you get with the FULL NON-SHAREWARE versions.

Indeed, again because of lack of interest, this will probably be the final posting of the LOW-BUDGET line of programs. I may begin a new project eventually, but unless a substantial blunder is found, this is likely the last posting of the LOW-BUDGET project. Updates to this will only be available to those who have paid for the FULL version.

*********************

WARNING: Jason has determined that using this in a HP-48SX will corrupt it's memory. These programs are intended for use in the HP-48GX, and DO NOT WORK in the HP-49G. Although I have not tested the programs in the HP-48G+, one user has reported success with it.

  1. Transfer the file JSURVML.SW To your calculator's HOME directory. See your HP-48 owner's manual (chapter 27) for more and better details on how to do this. I use KERMIT if I'm using DOS and I use HYPERTERMINAL if I'm using Windows. There is other software available that makes this task easier if you do transfers often. HPCOMM is one of them, and it's free and can be found on www.hpcalc.org. And there is lots of additional reading to be found at http://www.columbia.edu/kermit/ and http://www.area48.com/hppc.html.

  2. Press [VAR] to display the variable menu to reveal the menu key of the file you just transferred.

  3. Press the menu key that corresponds to the file you just transferred to the 48. It should be |JSURV|.

  4. Enter onto the stack the number of the port in which you wish to store the program. So, if you wish to store the program file to the on-board memory, then you'd put it in port 0. If you want to run it from a RAM card (unmerged) in slot one of your calculator, then it would be port 1. If you want to put it in a RAM card in slot two of your calculator, then it would be 2 or greater depending on what RAM card you have and which bank you wish to use. If you're not sure, use 0 (zero). So say we want to load it to our on-board memory, you'd press [0].

  5. Now, with the port number sitting on the stack, press the softkey |INSTA|. The 48 should power off.

  6. Power the 48 back on again. The screen should blink when powered up again.

  7. Type [alpha] J2000 [ENTER] to run the installation program.

Installation should now be complete, and your screen should look something like this:

At this point, there are five settings you should change to suit your situation: azimuth, station display, quadrant numbers, coordinate entry/display, and bearing entry style. The menu to change these is showing now, but don't worry you can always come back and change them later. They are on the third menu page of the Utilities menu.

HOW TO USE
The concept is simple. You press [CST] to get to the main menu, then press one of the softkeys to change to the program's sub-menu, enter your variables, then solve for whatever it is you're solving for. To get back to the main menu, just press [CST] again.

Most times, numbers are entered from the stack. That's what makes this fast and easy to use. You can use your calculator as a calculator then enter your calculated values to these programs. There are times when your calculator is taken over by a program and it won't act like a calculator, for example, when you start up the file selector. This should be evident, but a sure clue that you are in a program which has taken over control of the calculator is the appearance of |EXIT| or |CANC| or |QUIT| on the softkeys.

Many of the programs leave an answer on the stack for possible use elsewhere. These are ordinary HP variables and can be manipulated in the usual way. You can press [ENTER] and push more copies on the stack. You can press [DEL] and delete them. Some have tags on them to help you remember what the solution was for. Treat these tagged items just as you would untagged ones.

EXAMPLE ON HOW TO USE
Please note that if you have loaded the Experimental edition, this example and perhaps some of the others will not apply because that edition doesn't have some of the programs like Vertical Curve which is used in the example.

Before we begin, let's change the display on the calculator. Let's change it to 4 decimal places, any more than that, and there's just too many numbers to look at. This will not change the display of most of the programs. Changing the decimal display is normally a pain to do, so I've assigned FIX to the [EEX] key (EEX and FIX kind of look similar.) So key in

to change the display to 4 decimal places.

Now, the softkeys are those labels above the top six keys of the keyboard. The labels correspond to the keys below them, and pressing the key will do what is indicated by the label.

When you press [CST], you access the main menu for the surveying programs. There are more than six programs available in the pack, but there are only six softkeys, thus there are several menu pages, and you press [NXT] to get to the NeXT page. When you run out of pages pressing [NXT], it returns to the first page, like a circle.

So, how do we apply this? This is where our example really starts. Let's solve for a vertical curve. Press

to get to the main menu. If |VC| isn't one of the softkeys, you repeatedly press [NXT] until it is. You shouldn't need too many presses, afterall, there are only two or three pages in the main menu depending on which edition you are using. Once, it's showing as one of the softkeys, press (the button below, not the screen.) The softkeys will change, and the title of the program is displayed at the top of the screen. The softkeys now are set to the vertical curve program. Just like the main menu, there is more than one menu page to this program, and you use [NXT] to shuffle through them. The softkeys you use to define your vertical curve are on the second menu page, so press and the softkeys become: You use these keys to enter the variables that define your curve. Let's say we have a vertical curve like this: You could key it in like this: You do not need to enter the variables in any particular order, and the variables remain in force until you change them. This means that if you make a mistake, you don't need to re-enter all the variables, only the wrong ones. You can also define your curve for future use because they aren't shared with other programs like is often done with HP-41 programs. They don't go away when you turn off the machine either. Now, press to get back to the first menu page. |VIEW| should be one of the softkeys. Whenever you see |VIEW| or |>VIEW| as one of the softkeys, its meaning is this: "VIEW the SETUP" for the sub-menu you are at. Pressing it will show you the status. It is useful for verifying that you entered things correctly, or just to see what the setup is so that you don't needlessly re-enter. For those seldom used programs, it can help you remember what the softkeys mean. So, now press to review what you've entered. Since you've undoubtedly entered everything correctly, you can now solve for elevations along the curve or even the sag/crest (turning) point if there is one. Let's solve for the sag first. Press and the answer is displayed. In addition to the sag point station, the grade in, grade out, length, and elevation at the sag point are displayed. In this case, the sag point station is 2+63.64. Now, let's solve for the elevation at station 4+00. Key in and the solution is displayed and left on the stack. It is most likely you will want to know these elevations at regular intervals along this curve, maybe every 25, and over several stations that can get tiring. So there's a shortcut. Let's try it with 25. Enter which sets the increment to 25. This is the increment the stations will be advanced by with |STA+| or retarded by with |STA-|. Unlike, the variables used to define your curve, the increment, and station are global. So, changing them here changes them anywhere they are used. So, try it out. Press Cool, huh?

Some of these programs generate information which could be useful in other places or with other programs or for additional calculations, thus some of the programs leave answers on the stack. This "scratch pad" approach is surprisingly useful. Press

to update the display and you'll see the answers we generated sitting on the stack. In this case, the numbers are tagged with the station, but that's okay. You can still do math or enter them in another program. To demonstrate this, press which adds two numbers on the stack. Keep in mind that the stack is NOT limited to four levels like previous calculators, so you need to clear it out regularly or else you'll run out of memory. Press to clear off the stack. Right about now, you're going to ask "How do I get out of this?" Well, you're not really in anything. There's no running program to get out of. However, you could change the menu to something more appealing. But anyway, press to get back to the main menu. Let's go to the Linear Baseline program so that we can do an example with coordinates. The softkey for this program is |LINEA|, and since we just solved for a vertical curve, you'll have to use [NXT] to get to the menu page that has |LINEA| on it. So press to get to the next menu page. Then press to get to the Linear Baseline menu. This program solves for coordinates along or offset to a horizontal alignment which is a line. Like the with the vertical curve, you need to define your alignment. So, press to get to second menu page. The softkeys should look like: You use these keys to enter the variables that define your alignment. Let's say our baseline is defined like this: You could key it in like this: From this we learn one way to enter coordinates, that you enter angles and azimuths in d.mmss format, and that stationing is entered in the unit rather than station plus unit (feet in our example.) Keep in mind that if you have the program set to E N format, you would have entered the coordinate East component first.

Where a coordinate is expected, they are taken from the stack in one of two forms. You can have two real (regular) numbers in levels 1 and 2 of the stack or you can have a complex (n,e) in level 1. The form using the two reals also depends on the way you set the settings. If it's set to E N, then easting would be in level 2 and northing would be in level 1. This example is for when the setting is set to N E.

And, like with other things, if any of these variables on the stack have tags, it's okay, they will be accepted as well (let me know if they don't.) Now, press to verify you did enter everything correctly. Your screen might look something like this: Since you've undoubtedly entered everything correctly, let's try it out. |O/S?| will take a coordinate and solve for the station and offset relative to this baseline. Well, let's find out where the coordinate 4000.23N 3700.63E lies relative to the baseline. Key in and the solution is shown. Now let's do the opposite type of operation and solve for a coordinate given a station and offset. Press to get back to the first menu page and solve for 4+00 o/s 25 LT. Key in and the coordinates are displayed and left on the stack. Yes, you enter a negative number for the offset to solve for a left offset. You enter a positive one for an offset to the right of the baseline, and you enter 0 (that's zero) for a coordinate on the baseline. Now, let's see that coordinate that's left on the stack. Press to update the display. The coordinate is sitting there in the second format described earlier. It's a variable like any other, and can be pushed on the stack with [ENTER], or deleted, or stored, or whatever. You know, it's that scratch pad thing again. It's quick, it's easy, it's very flexible. Many surveyors find that coordinate files, jobs or whatever you want to call them, get in the way for quick calcs, quick checks, simple stuff.

Here, |INCR|, |STA-|, and |STA+| do the same thing here as they did for the vertical curve, except they solve for coordinates instead. See the section on HORIZONTAL ALIGNMENTS for more information.

Getting back on track, try out the coordinate we just generated with the |O/S?| program. Press

to get to the other menu page. Now press The coordinate is sucked off the stack and the same station and offset we solved for should be displayed.

From this, you should understand basically how to work the softkey programs, but what about the ones assigned to the buttons? Well, we already know one of them, [CST] gets you to the main menu. It was nearly seemless. You don't even realize something has been assigned to a key. Hopefully, the others are equally subtle. These keys are going to be discussed in more detail in another section, but let's try one out. Press the keys

and the message "INV first is ON" should be displayed. What happened here is that we toggled this feature on. Pressing that key combination again would toggle it off, but let's not do that yet. I've assigned it to this key combination because [1/x] being the inverse function, I thought it would be easier to remember. Let's see what this feature does. Press to get back to first menu page, then press and in addition to the coordinate, a direction and distance are displayed. This distance and direction is from the @POINT coordinate in the Traverse program to the newly calculated coordinate. This is useful for things like checking the data-collector or writing stake-out notes. Well, enough of that, let's turn it off. Press to toggle it off. By the way, the coordinate is still left on the stack, and you can verify this by pressing [ON] to update the display.

There is one new thing that I should demonstrate. I've assigned DUP2 to [/->] [ENTER]. It's one of the HP commands. It dups the first two levels of the stack. I wish I thought of this earlier. Many times, I enter a coordinate onto the stack which I know I will use at least twice, but I don't want to create a file just for that. Well, DUP2 takes care of that problem. For example let's put the coordinate 230.99N 339.09E on the stack twice.

As you may now realize, A COORDINATE FILE IS NOT NECESSARY to use this program pack. A coordinate file is very useful, but it's optional in all but the Traverse With Closure program. I have to stress this point because I find many surveyors raised on the HP-41 don't like to store coordinates, don't like computers, don't like complex "do-all" programs. Also, since the only difference between the shareware versions and the non-shareware versions, is the allowable point number range, the shareware version might be good enough for many folks.

Anyway, by now you should have gotten the idea on how to use the program. All you need to learn now is what each individual programs solves for and what variables it expects.

MENU MAPS
Now that you know how to navigate the program, you need to know what there is and where to find it. Here are five crude maps of the menus for the five editions. You read this as menu choices starting from the main menu and working your way in. For example, Arc/Line intersect is shown as INTER>AR/LI, and you would get to it by pressing [CST] |INTER| |AR/LI|. The maps are also broken up by pages of the main menu to help you navigate.

The Small edition(uses azimuth entry only)
MENU                      PROGRAM
====                      =======
INVER                     Inverse Azimuth
TRAV                      Traverse
LINEA                     Linear Baseline
RADIA                     Radial Baseline
INTER>AR/AR               Arc/Arc Intersect
INTER>AR/LI               Arc/Line Intersect
INTER>LI/LI               Line/Line Intersect
AREA                      End Area

UTIL                      Utilities
UTIL>TFR                  File Transfer
CDATA                     Curve Data
SUPER                     Superelevation
SLG                       Straight Line Grade
VC                        Vertical Curve
LEVEL                     Leveling

The Medium Lite edition
MENU                      PROGRAM
====                      =======
INVER                     Inverse Azimuth
TRAV                      Traverse
TRAV>AVG                  Observation Averaging
W/CL                      Traverse With Closure
W/CL>AVG                  Observation Averaging
LINEA                     Linear Baseline
RADIA                     Radial Baseline
INTER>AR/AR               Arc/Arc Intersect
INTER>AR/LI               Arc/Line Intersect
INTER>LI/LI               Line/Line Intersect

CONV                      Coordinate Conversion
AREA                      End Area
TRIAN>ASA                 Angle,Side,Angle
TRIAN>SAA                 Side,Angle,Angle
TRIAN>SSA                 Side,Side,Angle
TRIAN>SAS                 Side,Angle,Side
TRIAN>SSS                 Side,Side,Side
CURVE>FIT                 Fit A Curve
CURVE>DATA                Curve Data

UTIL                      Utilities
UTIL>TFR                  File Transfer
SUPER                     Superelevation
SLG                       Straight Line Grade
VC                        Vertical Curve
LEVEL                     Leveling

The Medium edition
MENU                      PROGRAM
====                      =======
INVER                     Inverse Azimuth
TRAV                      Traverse
TRAV>AVG                  Observation Averaging
W/CL                      Traverse With Closure
W/CL>AVG                  Observation Averaging
LINEA                     Linear Baseline
RADIA                     Radial Baseline
INTER>AR/AR               Arc/Arc Intersect
INTER>AR/LI               Arc/Line Intersect
INTER>LI/LI               Line/Line Intersect

CONV                      Coordinate Conversion
AREA                      End Area
TRIAN>ASA                 Angle,Side,Angle
TRIAN>SAA                 Side,Angle,Angle
TRIAN>SSA                 Side,Side,Angle
TRIAN>SAS                 Side,Angle,Side
TRIAN>SSS                 Side,Side,Side
CURVE>C PTS               Curve Points
CURVE>DEF<                Deflection Angle
CURVE>FIT                 Fit A Curve
CURVE>DATA                Curve Data

UTIL                      Utilities
UTIL>TFR                  File Transfer
GRADE                     Gradester
SUPER                     Superelevation
SLG                       Straight Line Grade
VC                        Vertical Curve
LEVEL                     Leveling

The Large edition
MENU                      PROGRAM
====                      =======
INVER                     Inverse Azimuth
TRAV                      Traverse
TRAV>AVG                  Observation Averaging
LINEA                     Linear Baseline
S-IN                      Spiral-IN Baseline
RADIA                     Radial Baseline
S-OUT                     Spiral-OUT Baseline

W/CL                      Traverse With Closure
W/CL>AVG                  Observation Averaging
INTER>AR/AR               Arc/Arc Intersect
INTER>AR/LI               Arc/Line Intersect
INTER>LI/LI               Line/Line Intersect
CONV                      Coordinate Conversion
AREA                      End Area
TRIAN>ASA                 Angle,Side,Angle
TRIAN>SAA                 Side,Angle,Angle
TRIAN>SSA                 Side,Side,Angle
TRIAN>SAS                 Side,Angle,Side
TRIAN>SSS                 Side,Side,Side
CURVE>?RAD                Radius Calculator
CURVE>S PTS               Spiral Points
CURVE>C PTS               Curve Points
CURVE>DEF<                Deflection Angle
CURVE>FIT                 Fit A Curve
CURVE>DATA                Curve Data

UTIL                      Utilities
UTIL>TFR                  File Transfer
GRADE                     Gradester
SUPER                     Superelevation
SLG                       Straight Line Grade
VC                        Vertical Curve
LEVEL                     Leveling

The Experimental edition
MENU                      PROGRAM
====                      =======
INVER                     Inverse Azimuth
TRAV                      Traverse
TRAV>AVG                  Observation Averaging
LOT                       LOT Corners, area
LINEA                     Linear Baseline
RADIA                     Radial Baseline
INTER>AR/AR               Arc/Arc Intersect
INTER>AR/LI               Arc/Line Intersect
INTER>LI/LI               Line/Line Intersect

UTIL                      Utilities
UTIL>TFR                  File Transfer
CONV                      Coordinate Conversion
AREA                      End Area
TRIAN>ASA                 Angle,Side,Angle
TRIAN>SAA                 Side,Angle,Angle
TRIAN>SSA                 Side,Side,Angle
TRIAN>SAS                 Side,Angle,Side
TRIAN>SSS                 Side,Side,Side
CURVE>FIT                 Fit A Curve
CURVE>DATA                Curve Data

It is recognized that with the Large edition, we've arrived at the point of too much. That is to say, there is just too much stuff in it. Most of us rarely need to work with spirals, and all the spiral stuff just gets in the way when not working with them. To combat this, you can change main menus like they do with cellular phones. On the Large edition ONLY, go to the Utilities menu, and on the second menu page is the softkey |MENU|. Press this and a window pops up to let you choose from three styles.

You are not committed to your choice. You can always change as desired.

USER DEFINED KEYS (Key assignments)
The user defined keys are very important to know about. This programming is heavily dependent on this feature. When the user keys are active, you'll see USER showing in the upper-right of the screen. Sometimes, you have to turn it off, or sometimes it gets turned off, like when you warm-start the 48. Anyway, with this in mind, you should know how to turn it on and off. You press [/->][alpha] to toggle it on or off. If flag -61 is clear, then you may need to key it an extra time.

The key assignments are:

 KEYSROKES      BRIEF DESCRIPTION
 =========      =================
      [MTH]     STO ELevation, expects elev. in level 2 and pt.#
                    in level 1.
[/->] [MTH]     PRINT mode, toggles IR print ON/OFF.
      [PRG]     RCL point, expects pt.# in level 1, recalls point
                    to stack.
[/->] [PRG]     Filer, starts up coordinate file selector.
      [CST]     Main menu, brings up main menu.
[/->] [CST]     your custom menu, brings up YOUR custom menu.
      [STO]     STO point, expects a coordinate, stores to
                    coordinate file.
[/->] [STO]     NEXT point (to sto), prompts you for next point to
                    store at.
      [EVAL]    bear<>azim, brings up conversion menu.
[/->] [ENTER]   DUP2, dups level 1 and 2.
      [y^x]     file EDITOR, starts up coordinate file editor.
      [EEX]     FIX, expects the number of fixed decimal places to set
                    the 48 to.
[/->] [1/x]     INV 1st, toggles INV 1st(for stake notes) mode ON/OFF.
[/->] [/]       DMS/
[/->] [x]       DMSx
[/->] [-]       DMS-
[/->] [+]       DMS+
[/->] [0]       ->DEC
[/->] [.]       ->HMS


Keyboard with template installed.

A keyboard template makes this easy, but HP stopped selling their write-on template kits, so I made some keyboard templates and they turned out as pictured above. They are not just useful for this set of programs, you can also pencil on them making them useful for your own programs as well. These templates are die cut from 0.010" thick vinyl and lettering is silk-screened with two colors. Contact me for pricing and availability.

Notes:

COORDINATE FILES AND THE FILE SELECTOR
Although not required, you can have coordinate files. All they do is store coordinates for possible use, examination, or revision. All you need to do is create a file with the file selector. The file selector is used for creating, deleting, and selecting (to use) these files. In addition, you can create, delete, and change directories with it. It is much better than the original file selector. It doesn't look as nice, but it operates much better.

You start it up by pressing [/->] [PRG]. When you start it up, at the very top of the screen you'll see the path in small letters between curly braces. For those of you who aren't computer people, your path is like your route of subdirectories. Your path always starts from HOME, and {HOME} is your minimum path. It may be a good idea to create a subdirectory for different projects so that you can break things up and have an easier time organizing your work. This program pack only works with what's in your current directory.

Next in the status area is the File which is currently active. The name in the curly braces after the word "File" is the currently active file. It may be empty which of course means there is no active file in this subdirectory.

If you are in a subdirectory, there should be an entry with two dots and UPDIR further to the right. This means move Up Directory or move to the parent directory. Just highlight this selection and press [ENTER] or |USE| to move up one directory.

If you create subdirectories, their names will appear in the list with DIR on the right of the screen. You can change to those subdirectories in the same manner as you move up a directory. You can also delete these directories by highlighting them and pressing |DEL| or [DEL]. You will be prompted for verification prior to deletion.

The same goes for any files you highlight. If you press [DEL] or |DEL| while a file is highlighted, you will prompted for verification and then the file will be deleted if okay.

To create a file, press |NEW|, and you will be prompted whether to create a file or a directory. If you choose |DIR|, then you will be prompted for a name. If you enter a valid name, the directory is created. If you enter a blank line, it cancels the operation. Nearly all the things you are prompted for will cancel if you enter a blank line.

If you choose to create a file, after you give it a name, you will be prompted for the starting point number. This is what you want the lowest point in the file to be. You cannot go below this point number. Next, you'll be prompted for a file size. This is the initial number of points you want the file to contain. When you store coordinates, if the point number you try to store at is within ten points of the last point in the file, the program figures you just need a little more space and enlarges the file. If you try to store point numbers more than ten points beyond the end of file, you will get an error. So, here's the strategy. If you just want to work a file in sequence and add points as you go, just type in a small number like 10 points for your file size. If you intend to have a wide range of points, and you jump around (some like to break things up by number ranges), then you should enter a number that will cover your range. For example, maybe some guys use points 800-899 for the west controls and points 900-999 for the controls on the main road, etc...

Okay, so you've entered your file size and the file is created. The file selector makes two assumptions here. One, it assumes that you are going to use this file next, so it makes it the current active file. And two, since this is the active file, the next point you wish to store at is probably the first point number of the file, so it makes the STONEXT point number the same as the first point in the file.

At this point, you can quit and begin using it. You press |EXIT| to quit. I know that sounds like a lot, but it's quite fast once you understand how it works.

EXAMPLE ON USING COORDINATE FILES
Learning by example seems to work well. So here we go again. First, start up the coordinate file selector. Press

Now, create a directory named 'GREENVILLE', press then choose to create the directory. You'll be prompted for a name so type in and then the directory is created. If it's not highlighted, then highlight it using the up-arrow, down-arrow, |PGUP|, or |PGDN|. Once you have it highlighted, press to move into the newly created directory. Now, let's create a coordinate file in this directory. Press and then choose at which point you will be prompted for a filename. Let's name our file 'CONTROLS', so type in at which point you will be prompted for the starting point number. For our example let's use point number 1. Key in Now you will be prompted for the file size. This is how big you want the coordinate file to be. For this example, let's make the file six points big, so key in Now, we've created the file and the file was made the current active file for this directory. By looking at what's between the curly braces after File, you see what the current active file is. In this case, it should look something like File{ CONTROLS }, not to be confused with the path which should be shown at the very top in tiny curly braces. We are done here, so press to quit the file selector, and your calculator should return to normal. Since we have just created the file, and since the first point in the file was 1, the point number to store at was set to 1. Let's verify that, press You will be prompted for the point number to store the next coordinate at, and what it is currently set to is sitting on the command line, and it should be 1. Since we aren't going to change it, just press and we're back. So, let's store some points. Let's store the coordinate 100N 200E, key in which stores it as point number 1 and increments the next point to store at. If you have the program set to E N, then you would have entered 200 then 100, but this example is for the N E format. Now let's store the coordinate 910N 750E, key in and it's stored as point number 2. Great, we've stored two points, and they were stored with a default elevation which you can change at the Utilities menu. If those point numbers already had elevations assigned to them, then they would not have been given new elevations because we were storing 2-dimensionally. Now let's say these points are major traverse points and you've just run level to them so now you want to annotate them with their elevations. Point 1 elevation is 234.09 and point 2 elevation is 309.23. So let's change them. Key in Yes, that's all. Okay, I know you must be asking about safeguards. No, there is no overwrite protection for this. I took a while trying to decide if it should or shouldn't have one. I went with shouldn't. This may change in the future. You can recall point numbers 1 and 2 to the stack to verify the elevation change or you could start up the editor to check it out, but for now let's continue on and do something useful with the coordinates we stored. Press to get to the main menu. If |TRAV| is not one of the choices, then use [NXT] until it's one of the menu choices. Now, press to get to the Traverse program menu. Unless you've changed modes, it should be the Azimuth Traverse program. If it's not, don't worry, the example should be close anyway. Okay, we have a coordinate stored as point number 1, and we want to use it as the point we start at, so we recall it to the stack. Key in To recall point 1 to the stack. Update the display so you can see it sitting there and you can grasp what is taking place. Press to update the display. It should look similar to: Let me explain a little about what it's showing us. First, it doesn't all fit on one line, so that's why level 1 is raised a line. The first 1: is telling us the object is in level 1. The second 1: is the tag. With RCLPT, recalling the points puts a tag of the point number on the coordinate. So the tag is telling us that this coordinate came from point number 1. Next, in the parenthesis is the north/east coordinate. Like any other variable, you can push as many of them on the stack as memory allows. You can also delete it from the stack too, but for this example, we're going to make it the @POINT. So, press and it is sucked off of the stack and stored as the @POINT. You can again update the display and see that it's now gone from the stack. Press to update the stack and see for yourself. Now, say we were in the field and you had setup on this same point you've entered as the @POINT. We want to check and see if our backsight is correct. Luckily we've stored our backsight point as point number 2. Recall point number 2 to the stack so that we can inverse to it. Key in to recall point 2 to the stack, and then press to "inverse to" that coordinate from the @POINT. The direction and distance are revealed and they are left on the stack for possible use elsewhere. Press to update the screen so you know I'm telling the truth. Well, let's say our numbers check out okay and now we shoot a point somewhere. Say it's 123-45-22 @ 450.02, key in and the resulting coordinate is generated and left on the stack. We want to save this coordinate for some other time, so we want to store it in our file. Since the coordinate is sitting on the stack, just press and it's stored as point 3. Now, I know you're saying to yourself, I wish it could automatically store for me instead of having to press [STO] all the time. Well, it can. Let's set it to store automatically as we generate points, just for this example. Press to get to the main menu. Then press as many time as needed to get to the page with |UTIL| on it. Then press to get to the Utilities menu. And then press to toggle AUTO-store on. It will say "MANUAL-store" when it's off. Now get back to the Traverse program. Press to get to the main menu. Then press as many times as needed to get |TRAV| to be one of the choices. Then press to get back to the Traverse menu. And all should be where we left off at. If there is still some garbage sitting on the stack, you can press [DEL] to clear everything off the stack. Now let's continue on and solve for another point. Let's say we shoot something at 89-09-07 @ 760.77, key in and in addition to solving, it was stored in the file (it's no longer on the stack.) Oh, but wait. That happened kind of quickly. I didn't see what the point number was. Well, we can check what the next point to store is and so the one before it must be what the last point was stored at. Press and it will prompt you for the next point to store at, with 5 sitting on the command line. This tells me that the last point was 4. You can change the 5 to something else if you want to start storing at a different point number, but we don't need to right now, just press to continue on. You probably should turn off the AUTO-store feature. You do it exactly the same way you turned it on. I'll wait while you do it.

.............wait wait wait...........

Okay, now say that you want to review some of the coordinates you've stored, you could just recall them to the stack, or you could fire up the coordinate file editor. Let's use the editor. Press

and the coordinate file editor starts up using whatever the currently active file is. You can move through the points with |PT+| and |PT-|, or you can jump to a specific one with |GOTO|. This program is interactive and you need to exit it to return the calculator to its normal functioning. Press to quit the file editor.

You already know that if you try to store at a point number that is up to ten points beyond the end of file, it will automatically enlarge the file. So, I guess I should mention |BOOST|. Under the Utilities menu, there is the |BOOST| function. It is used for expanding the coordinate file. Just press |BOOST| and it prompts you for how many points to expand by, then it expands or "Boosts" the currently active file by however many points you specify (if it can.) This is useful if you want to jump around leaving gaps of unused points in the coordinate file. Oh, and don't try and cancel it once it's started, you could loose your entire file.

Lastly, when it comes to coordinate files, you can toggle the overwrite protection on and off. The overwrite protection is when you try to store to a point that has already been used, you get prompted for verification first. You can toggle this feature on and off at the Utilities menu.

HORIZONTAL ALIGNMENTS
These programs are for working with horizontal coordinates relative to baseline segments. There are up to four of these segments you can work with depending on which edition you are using. The Small and Medium editions have only the Linear and Radial baseline programs. The Large edition also has programs for ingoing-spirals and outgoing-spirals.

Basically, once you enter the variables which define your baseline segment, you can generate coordinates given a station and offset. The reverse of that is also available. Given a coordinate, you can solve for the station and offset.

On the first menu page of these programs are the action keys which generate the coordinates. The second page will be the one on which you enter the variables that define the baseline. Each of these programs will require different variables, see the individual program descriptions to find out what is expected for each. Please note though, that when a radius or spiral-angle is expected, entering a negative value means the curve curves to the left.

Once the variables that define the baseline are entered, you can solve for coordinates or stations. To solve for a coordinate, enter the station you want to solve for with |STA|. You enter the stationing in the unit you're using. So, say you want to solve for 4+00, you'd key in 400 |STA| and NOT 4 |STA|. Don't forget the offset. Enter the offset you want to solve for with |O/S|. If you enter a negative value, it will solve for the left offset. If you enter a positive value, it will solve for the right offset. If you enter 0 (zero), it'll generate coordinates on the baseline. Now to solve for the coordinate, just press |SOLVE|.

|STA+| and |STA-| will increment the last station solved for by the amount entered with |INCR|, then it solves for the coordinate of this new station. This saves a bit on keying in stations.

To solve for a station and offset given a coordinate, each of the baseline programs has an |O/S?| softkey. Just have a coordinate on the stack in either of the two forms and then press |O/S?| to calculate the station and offset of a coordinate. For example, 100 [ENTER] 200 |O/S?| would solve for the station and offset of coordinate 100N 200E. You can check it out. Generate a coordinate then use that coordinate to solve for the station.

There is an additional feature, which for lack of a better name, I've named "Inverse First." What it does is, as coordinates are generated, it "inverses" the coordinate with the one stored as the @POINT with the Traverse program. That's the "Traverse" program, NOT the "Traverse With Closure" program. This could be useful for writing your stake-out notes or double-checking the data-collector. You toggle this feature on and off with [/->] [1/x]. It only works with the baseline programs. If the Traverse program was in Angle-Right mode, the direction will be given in angle-right using the setup of the Traverse program. When the traverse is in other modes, the direction will be given in azimuth.

I suspect you're wondering why these programs are broken up into line, curve, spiral-in and spiral-out instead of combinations. It is more effective to have a combination of something like tangent-curve-tangent or tangent-spiral-curve-spiral-tangent, but it has been my experience that construction projects that deal with upgrading old roads don't always encompass the entire change in direction. That is, sometimes the project will pick up part way through the curve and not give the delta. Sometimes, the project will end just past the PC but before the PT and not give the delta. Besides, this way, one can define thier curve or line from any point on the curve or any point on the line.

THE PROGRAM DESCRIPTIONS

  • Inverse Azimuth
    This program solves for the azimuth and distance from A to B. There are two menu pages to this. One page requires there be a current coordinate file. It takes a point number and then evaluates it and stores it. It does not dynamically reevaluate the point at the time you press |SOLVE|, so if you change your coordinate for that point after you've entered it here, it won't be reflected. This might sound like a bad thing, but this way, you can pull coordinates from different files. For example, you could keep all your controls in one file and then you have points you want stake in another file, you could pick up your setup point, then switch files and inverse to the point you want to stake.

    The other menu page takes only coordinates. It is sweet and simple, and much to my surprise, it's preferred by the folks who give me feedback. Because I have no way of telling which one is more important to you, the last page you use will be the first page next time you come back to this menu.

    |PT A| expects a point number.
    |PT B| expects a point number.
    |BEARI| toggles bearing display ON/OFF.
    |PT-| decrements point number and solves.
    |PT+| increments point number and solves.
    |SOLVE| solves for direction and distance from point A to B.

    |CRD A| expects a coordinate.
    |CRD B| expects a coordinate.
    |BEARI| toggles bearing display ON/OFF.
    |SOLVE| solves for direction and distance from coordinate A to B.

  • Traverse
    This program calculates coordinates given a direction and a distance. In all the editions except the Small edition, you have three modes to work in. In the Small edition, you only have Azimuth mode. Basically, you enter the coordinate you're at with |@POIN|. Then you enter your direction and distance with either |HD2TL| or |SIDE|. |HD2TL| "HeaD to TaiL" will calculate the resulting coordinate and make it the new "@POINT." |SIDE| will only calculate the resulting coordinate. See EXAMPLE ON USING COORDINATE FILES.

    |INV2| is in all three modes and what it does is it expects a coordinate and returns the direction and distance from the @POINT to the coordinate you just gave it. The azimuth will be displayed in all three mode, but if not in azimuth mode, the direction of the mode will also display. In Angle-right mode, the angle will be left on the stack, in bearing mode, the azimuth will be left on the stack. The distance is left on the stack in all three modes and will always be left in level 1. I suppose, it's easiest understood if you just try it.

    |SEG| is also in all three modes, and what it does is let you choose which baseline segment you want your shot to be related to. When you press it, it'll say something like "Segement is Linear." Which means that when you key in an direction and distance with |HD2TL| or |SIDE|, the station and offset for the resulting coordinate will be displayed. Don't worry, the coordinate will still be on the stack or stored depending on you're settings. Give it a try, press

    to get to the second menu page. Then press to change the segment. If it doesn't say "Segment is Linear" then press it a few times until it does. Now, press to get back to the first menu page and enter a side shot. Enter and after the coordinate displays, the station and offset will display over it.

    Forget what segment you had chosen? Press |VIEW| to remember.

    Finished with locating points to a baseline, use |SEG| to change it to "NONE." Just press it until the it says "Segment is NONE"

    This program pack is basically meant to be 2-Dimensional, but it's recognized that many times you're going to need to reduce down to two dimensions, so there is |Z&S->|. It takes a Zenith angle in level 2 and slope distance in level 1 and returns the HD and VD. It is straight trig and does NOT take into account things like curvature or refraction. Don't like my |Z&S->| function for reducing your zenith angle and slope distance? You can supply your own program for this. Just store your program with the variable name MYDIST, and if you are in a directory which will access it, your program will be launched by pressing |Z&S->|. I suggest putting it in the HOME directory if you use the same one for all cases.

    azimuth mode:
    This mode works in azimuth (0-360 degrees.) It's very useful. For computational purposes, it will take improper azimuths, but when the azimuth is displayed, it'll be displayed from zero to up to, but less than 360 degrees.

    |>VIEW| view current settings.
    |@POIN| expects a coordinate and makes it the point to calculate from.
    |Z&S->| expects a z-angle in level 2 and a slope dist. in level 1, returns HD and VD.
    |INV2| expects a coord. and returns the azimuth and dist. from @POINT to coordinate.
    |HD2TL| expects azimuth in level 2 and distance in level 1. Moves result to @POINT.
    |SIDE| expects azimuth in level 2 and distance in level 1.

    |>VIEW| view current settings.
    |SEG| used to choose baseline segment to locate points to.
    |AVG| takes you to the Observation Averaging program menu.
    |INV2| expects a coord., returns the azimuth and dist. from @POINT to coordinate.
    |TARG| expects a distance and stores it as the target distance.
    |@DIST| expects a distance and tells you to come or go.

    There are several useful functions on this menu. In azimuth mode on the second page, you have |TARG| and |@DIST|. These two functions work together. |TARG| takes a target distance and stores it. Then when you enter a distance with |@DIST|, it tells you how much to "COME" or "GO" from the instrument to the target distance. So if you entered

    it would tell you to go AWAY 24.910. Now say you take another shot and you're at 98.35, you'd enter and it'd tell you to go AWAY 1.90. Simple right? Maybe you have a point or two you want to stake, you could just use |INV2| to get the azimuth and distance, then with the distance sitting on the stack, just press |TARG|. Your azimuth will still be sitting there, so you can keep it there as a scratch pad type of reminder, while you're working your way to the correct distance.

    Now, keep in mind, I'm not advocating using this instead of a data-collector, just sometimes for a few quick ones, it's much easier than setting up the DC.

    I may be wrong about this, but |TARG| and |@DIST| only appear on the azimuth menu because I didn't think anyone uses four quadrant bearings to stake with, and it was getting too crowded on the angle-right menu. Besides, I have a preference for azimuth surveying. It's easier to catch mistakes and you have a frame of reference.

    angle-right mode:
    This mode is useful for times when you didn't set a correct backsight azimuth, or you just wanted to work with angles. What it needs to know, is what your backsight azimuth is and what you determine to be your plate angle at the backsight. If you move forward with |HD2TL|, then your forward azimuth is carried forward (unless you've entered a 0 distance) for you.

    |>VIEW| view current settings.
    |@POIN| expects a coordinate and makes it the point to calculate from.
    |Z&S->| expects a zenith angle in level 2 and a slope distance in level 1 and returns HD and VD.
    |INV2| expects a coordinate and returns the direction and distance from @POINT to coordinate.
    |HD2TL| expects angle in level 2 and distance in level 1. Moves result to @POINT.
    |SIDE| expects angle in level 2 and distance in level 1.

    |>VIEW| view current settings.
    |SEG| used to choose baseline segment to locate points relative to.
    |AVG| takes you to the Observation Averaging program menu.
    |BS PT| expects a coord. then calculates and stores the BS azimuth.
    |BS AZ| expects a backsight azimuth.
    |BS <| expects an angle, the actual plate angle to the backsight.

    bearing mode:
    This is useful for working plans and maps in four quadrant bearings. Depending on how the bearing entry style is set, you would enter side shots and head to tail with the same technique as the Traverse with Closure program in bearing mode. When your bearing entry style is set to Original, it'd be 3:bearing angle 2:quadrant number 1:distance. When you set the entry style to Composite, it's 2:bearing 1:distance, where bearing is a composite of the quadrant number and bearing angle.

    |>VIEW| view current settings.
    |@POIN| expects a coordinate and makes it the point to calculate from.
    |Z&S->| expects a zenith angle in level 2 and a slope distance in level 1 and returns HD and VD.
    |INV2| expects a coordinate and returns the direction and distance from @POINT to coordinate.
    |HD2TL| expects bearing angle in level 2 and distance in level 1. Moves result to @POINT.
    |SIDE| expects bearing angle in level 2 and distance in level 1.

    |>VIEW| view current settings.
    |SEG| used to choose baseline segment to locate points to.
    |AVG| takes you to the Observation Averaging program menu.
    |INV2| expects a coordinate and returns the direction and distance from @POINT to coordinate.

  • Traverse W/Closure
    This is a traverse with compass rule adjusment program. It breaks many of the rules adhered to in the rest of the program pack. First of all, it requires a coordinate file to work. Next, it doesn't leave coordinates on the stack for use elsewhere, instead it stores to the coordinate file. And, when you edit the traverse file and change something, it doesn't prompt you for overwriting the existing coordinates, it just does it.

    This program has changed from previous versions in that now you need to create a file to be used, just like you do with coordinates and Gradester, but this is a good thing, you can save a traverse for later review or revision. On the second menu page, you use the |FILER| to create and delete traverse files. It's the same filer as the one for coordinate files and Gradester files, except now it is only working with traverse files. You may wish to read the section on COORDINATE FILES AND THE FILE SELECTOR. Anyway, once you've created a traverse file (or just made an old one active) and you have a coordinate file currently active, you're ready to begin.

    Since, this program uses and requires a coordinate file, it works by point numbers. You need to have the starting coordinate stored before hand. Once you're ready to start, what you do is enter the point number of the start of the traverse with |START|. This not only makes this the start of the traverse, it clears out whatever you may have had in the traverse file. Then, you enter each leg (azimuth and distance) with |HD2TL|. Once you've entered each leg of the traverse, including the one you close with, you press |CLOSE|. At this point you can either close to the starting point, in which case you'd press |START|, or you can close to another point. If you want to close to a point and you haven't stored it yet, it's not too late. Go ahead and store it, you know how. And so to close to a point, just enter the point number of the point you're closing to with |PT#|.

    Now once you've closed with either of those options, the calculator will do some processing and generate a report. It will give you the misclosure, precision, and other good things to know. In addition, it will show you the unadjusted coordinates along side the adjusted ones for you to review and perhaps write in your book with a different colored pencil. At this point, you have the option of replacing the unadjusted coordinates in the coordinate file with the adjusted ones, or just cancelling the report. Also, if you wish, there is a |PRINT| menu choice which will send the print to the infrared printer.

    You can rerun the closure as many times as you wish. Maybe you made a mistake punching it in or something and you had to edit the traverse. Whatever the reason, you can keep rerunning the closure, even if you replaced the coordinates. You can even make a different coordinate file active and as long as all the points numbers are in the range of the coordinate file, it will accept it. This can be good if you want to run various scenarios, but it can also be dangerous in the case of accidental overwrites. Remember, if you edit the file and change something or pretend you changed something (edit a record with the same info), it WILL recalc and update the points in the file.

    |>VIEW| view status. [/->] |>VIEW| will switch between azimuth and bearing mode.
    |START| expects a pt.# to start your traverse from, and resets.
    |LAST| recalls to the stack, the last azimuth and distance in current traverse.
    |INV2| expects a point number to inverse to. Entering point number 0 inverses to the start of the traverse.
    |CLOSE| generates misclosure report as well as adjusted coordinates.
    |HD2TL| expects azimuth in level 2 and distance in level 1, add legs to traverse.

    |>VIEW| view status. [/->] |>VIEW| will switch between azimuth and bearing mode.
    |AVG| gets you to observation averaging menu.
    |Z&S->| same as in Traverse program.
    |EDIT| edits the current Traverse.
    |FILER| interactive, it creates, chooses, and deletes traverses or directories.
    |PLOT| plots current traverse to screen.

    Indeed, this is such a queer program that an example is in order. So here we go.
    Here is your traverse:

    Now first, let's create a directory to put our example in. Press to start the file selector. Now let's create a direcory named 'EXAMPLE2' then if EXAMPLE2 is not already highlighted, use the up-arrow or down-arrow to do so. Press to move into that directory. Now create a coordinate file named 'MYPOINTS' Make the file points 1 thru 10. Now exit the filer. Okay, we've created a new directory and a coordinate file in it. Great, now we need to create a traverse file. Press to get to the main menu. Then Press to get to the Traverse with closure program (might need to press [NXT] a couple times first.) Then get to the second menu page and start up the filer. You should still be in the subdirectory, so just create a traverse file named 'MYTRAV' and then quit the filer. Alright, now we're ready to put some info in there. Let's store our starting coordinate. Okay, that should have been stored as point 1. Now we begin the traverse. Press to get back to the first menu page. Then enter your start point number Now, enter each leg Made mistakes? No problem if you did. You can go in and edit the traverse with |EDIT| which is on the second menu page. It's interactive and should be reasonably self-explanitory. Well, perhaps there is one thing that I left out. There weren't enough softkeys to accomodate all the functions needed. Deleting an extra leg can be done with [DEL], the button not the softkey. When you add a leg, you need to provide a point number that is in the range of the file. No expansion of the coordinate file is done when adding a leg. ADDing and DELeting legs requires enough memory for a copy of the file. Low memory could cause the editor to crash.

    Assuming you did enter everything correctly, or even if you didn't, let's see how the thing closes. Press

    and since we are closing to the beginning, press The calculator does a little thinking and displays the misclosure results. You can page through the results with |PREV| and |NEXT|. At this point, the coordinates in the coordinate file are the unadjusted ones. But here we have the option of replacing them with the adjusted one. Let's do that. Press and you are prompted for verification. Press and the coordinates get replaced.

    You can also, print to the infrared printer, but for now just exit the report viewer.

    You are left at the CLOSE menu, and if you have time you can try closing to point 1 and see how that works, but we're finished with the example, so you press |BACK| and you'll get back to the Traverse With Clousure menu, or [CST] and get back to the main menu, or just do nothing at all.

    Note: When you run a closure, it doesn't change the coordinate file unless you do a replace.

  • Observation Averaging
    This is an unusual program. It averages obersevation readings. That's it, a simple average. So what's so unusual about that? Perhaps nothing, or perhaps that it's simple. It's merely an average, and it takes into account a 360 degree plate reading. Well actually, that's 0 <= reading < 360. So, averages that hover around the 0 region are no problem. Such a simple problem, but think about how you'd program it. It's only simple when you know the answer.

    Please test this against numbers you already know so as to be sure it does what you want it to do and not something similar. In fact, please test all these programs against known values and let me know of blunders anywhere.

    You have a choice of two modes, direct readings only, or direct and reverse readings. You switch between the two with [/->] |>VIEW|.

    What you do is this. Once you get to the menu and have decided whether you want to use, direct only or direct and reverse observations, you should set your tolerance if you haven't already done so. |>VIEW| will reveal what things are currently set at. The tolerance is the acceptable range of variation. Unlike a plus or minus value most folks would use, this program goes by the range of the highest and lowest values. This may be wrong, but my reasoning is that the first reading may not be the center-most value. Anyway, this value is taken in d.mmss so a value of 0.001 will allow a range of 10 seconds in readings.

    Next what you would do is press |RESET| to clear out any other readings that might be in there. Afterall, like most of the other programs, your work here is not volatile.

    Now, just enter your readings for one point with |OBS|. An average is displayed with each observation. Even if the values go above and below 0-00-00 it's okay. I know some will avoid setting zero for this very reason, but it's okay with this program.

    Once you've entered to your satisfaction, you can press |->STK| to push the average onto the stack for possible use elsewhere.

    |>VIEW| view your settings and current average.
    |BACK| returns you to back to the program it was called from.
    |TOL| expects a tolerance in d.mmss, someting like .001
    |RESET| resets values to get ready for new average.
    |->STK| pushes average onto stack.
    |OBS| expects a plate angle to average.

    Example:
    Say you had traverse notes like these

    First, if it's not set to Dir & Rev, then change the setting with [/->] |>VIEW|. Now, let's enter the tolerance as 20 seconds.

    Then, clear out whatever may have been there. Then enter your observations for the BS At this point the average is displayed, but you can also put it on the stack, just press Okay, now we want to average the FS observations, press to clear out previous readings. Then just enter the observation for the FS That's all folks. What you do with the averages is up to you.

  • Linear Baseline
    This program solves for horizontal coordinates relative to a baseline that is a straight line. Please read the section on HORIZONTAL ALIGNMENTS for more details on using it.

    |INCR| expects an increment to change station by.
    |STA-| retards by increment and solves.
    |STA+| advances by increment and solves.
    |O/S| expects an offset, the offset to be solved for, use a negative value for left.
    |STA| expects a station, the station to be solved for.
    |SOLVE| solves for coordinate.

    |VIEW| view variables.
    |P O L| expects the coordinate for the Point On Line.
    |@STA| expects the station at the point on line.
    |AZI^| expects the azimuth of the line pointing upstation.
    |O/S?| expects a coordinate, solves for the station and offset of the coordinate.

  • Radial Baseline
    This program solves for horizontal coordinates relative to a baseline that is an arc. Please read the section on HORIZONTAL ALIGNMENTS for more details on using it.

    This program gives you the choice of variables used to define your baseline. In one case, you provide radius point and radial azimuth. In the other case, you provide the Point On Curve and the tangential azimuth pointing forward. To switch between the two modes, press [/->]|>VIEW|.

    |INCR| expects an increment to change station by.
    |STA-| retards by increment and solves.
    |STA+| advances by increment and solves.
    |O/S| expects an offset (to be solved for), use negative for left.
    |STA| expects a station, the station to be solved for.
    |SOLVE| solves for coordinate.

    |>VIEW| view variables.
    |RD PT| expects the coordinate for the Radius Point.
    |RD/RO| expects the Radius/Rotation, use negative for left-hand curves.
    |POC.S| expects the station at the Point On Curve.
    |AZPOC| expects the radial azimuth to the point on curve.
    |O/S?| expects a coordinate, solves for the station and offset of the coordinate.

    or

    |INCR| expects an increment to change station by.
    |STA-| retards by increment and solves.
    |STA+| advances by increment and solves.
    |O/S| expects an offset (to be solved for), use a negative value for left.
    |STA| expects a station, the station to be solved for.
    |SOLVE| solves for coordinate.

    |>VIEW| view variables.
    |P O C| expects the coordinate for the Point On Curve.
    |RD/RO| expects the Radius/Rotation, use negative for left-hand curve.
    |POC.S| expects the station at the point on curve.
    |AZFW| expect the azimuth forward (tangential azimuth upstation.)
    |O/S?| expects a coordinate, solves for the station and offset of the coordinate.

  • Spiral-IN Baseline
    This program solves for horizontal coordinates relative to a baseline that is spiral TS to SC.

    Operation and concept is the similar to the Radial Baseline and Linear Baseline programs. One small difference is that there wasn't enough room for both |STA+| and |STA-| at the same time, so you have to use [/->] to switch between the two choices. See THINGS TO KNOW.

    |O/S?| expects a coordinate, solves for the station and offset of the coordinate.
    |INCR| expects an increment to change station by.
    |>STA+| advances by increment and solves.
    |O/S| expects an offset (to be solved for), use a negative value for left.
    |STA| expects a station, the station to be solved for.
    |SOLVE| solves for coordinate.

    |>VIEW| view variables.
    | TS | expects the coordinate for the TS.
    |TS ST| expects the station for the TS.
    |TS AZ| expects the tangential azimuth (upstation) at the TS.
    |LENG| expects the length of the spiral.
    |RD/RO| or expects a radius or spiral angle respectively (negative for LH.)

  • Spiral-OUT Baseline
    This program solves for horizontal coordinates relative to a baseline that is spiral CS to ST. Operation is the same as for Spiral-IN Baseline.

    |O/S?| expects a coordinate, solves for the station and offset of the coordinate.
    |INCR| expects an increment to change station by.
    |>STA+| advances by increment and solves.
    |O/S| expects an offset (to be solved for), use a negative value for left.
    |STA| expects a station, the station to be solved for.
    |SOLVE| solves for coordinate.

    |>VIEW| view variables.
    | CS | expects the CS coordinate.
    |CS ST| expects the CS station.
    |CS AZ| expects the tangential azimuth (upstation) at the CS.
    |LENG| expects the length of spiral.
    |RD/RO| or expects a radius or spiral angle respectively (negative for LH.)

  • Arc/Arc Intersect
    This program solves for the intersection points of two arcs. Once you've entered your variables, press |SOLVE| and a screen will appear to verify what you've entered and allow you to choose which solution you want. |LEFT| will give you the intersection on the left of the line from radius point 1 to radius point 2. |RIGHT| will give you the intersection to the left. And |BOTH| will give you both.

    |R.PT1| expects the coordinate of the radius point of the first arc.
    |RAD 1| expects the radius of the first arc.
    |R.PT2| expects the coordinate of the radius point of the second arc.
    |RAD 2| expects the radius of the second arc.
    |INTER| returns you to the intersection menu.
    |SOLVE| solves for intersection.

  • Arc/Line Intersect
    This program solves for the intersection points of a line and a curve. Once you've entered your variables, press |SOLVE| and a screen will appear to verify what you've entered and allow you to choose which solution you want. |NEAR| will give you the solution nearest the P O L, |FAR| will give you the farthest from the P O L, and |BOTH| will give you both solutions.

    |RD PT| expects the coordinate of the radius point.
    |RADIU| expects the radius.
    |P O L| expects the coordinate of the Point On Line.
    |AZI| expects the azimuth of the line.
    |INTER| returns you to the intersection menu.
    |SOLVE| solves for intersection.

    With all editions except the Small edition, you have the option of entering bearings instead of azimuth. Use the [/->] |>AZI| to switch to it and [/->] |>BR| to switch it back.

  • Line/Line Intersect
    This program solves for the intersection point of two lines. Each line is defined by the direction of the line and a coordinate on that line. Once you've entered your variables, press |SOLVE| and a screen will appear to verify what you've entered. If all's well, just press |MORE| to continue with the answer. The coordinate is left on the stack.

    |POL 1| expects the coordinate for the point on line 1.
    |AZ 1| expects the azimuth of line 1.
    |POL 2| expects the coordinate for the point on line 2
    |AZ 2| expects the azimuth of line 2.
    |INTER| returns you to the intersection menu.
    |SOLVE| solves for intersection.

    With all editions except the Small edition, you have the option of entering bearings instead of azimuth. Use the [/->] |>AZ 1| to switch to it and [/->] |>BR 1| to switch it back.

  • Coordinate Conversion
    When working with rectangular coordinate systems, I think they're called cartesian, this program converts coordinates in one system to coordinates in others. About 1993 or so, I was told we were going to be changing over to metric, so I wrote this program. We haven't started yet. I don't think it's going to happen, but I keep the program just in case. Sometimes I use it to do a poor man's resection.

    What you do is enter the coordinates for the same two points in both systems. If you have a scaling factor, you can enter it. If not, the program will figure one out for you, just enter 0(zero) as your scaling factor. Then you can convert coordinates either direction. Converting a block of points in a coordinate can be done using |BLOC|. |BLOC| will prompt you. It only converts OLD to NEW, and it doesn't convert unused points in the block.

    Now on the scaling factor. If the unit in the old system were the foot and the unit in the new system were a yard then the scaling factor would be 3. Setting the scaling factor to 0 will let the program figure out the scale itself. When automatically figuring the scale, the program NO longer forces a scale close to 1 to be 1. So, if you have a scale, better put it in.

    |VIEW| views settings.
    |BLOC| converts a block of coordinates (OLD to NEW), prompts you for Pt.#s.
    |N->O| expects a coordinate from NEW system and converts to OLD.
    |O->N| expects a coordinate from OLD system and converts to NEW.

    |VIEW| views settings.
    |OLD1| expects coordinate of point 1 in OLD system.
    |NEW1| expects coordinate of point 1 in NEW system.
    |OLD2| expects coordinate of point 2 in OLD system.
    |NEW2| expects coordinate of point 2 in NEW system.
    |SCALE| expects scaling factor, use 0 if unknown.

  • End Area
    This program calculates an area from coordinates using the coordinate method. What you do is enter the starting coordinate, be it North/East or Offset/Elevation, with |START|. Then you enter each subsequent point as you work your way around the perimeter with |NEXT|. When you enter the same coordinate you started with, the area is revealed. If you've stored them to a coordinate file in sequence, you have |BLOC| recall and enter them for you. You will be prompted for point numbers. |BLOC| is mindless and just recalls the point number and runs them through, then after reaching the last one, it recalls the first point to close out the perimeter. Useful for end areas.

    |START| expects the coordinate of your starting point.
    |NEXT| expects a coordinate and is used to enter each subsequent point along the perimeter.
    |BLOC| will prompt you for point numbers.
    |ST#| expects a point number.
    |CHNK| "CHUNK" expects "from" point number in level 2, "to" point number in level 1.
    |NXT#| expects a point number.

    Now for example, to figure the area of the figure shown above, you'd key in something like

    Don't forget, you can use a coordinate file to make this easier. Sometimes, it's easier to store the data in a coordinate file and fix your mistakes there than to flawlessly key it in.

    Okay, now say you have stored your coordinates or offset/elevation as coordinates in a coordinate file, and you stored them in order as you go around the perimeter. Well, if you set yourself up like this, as you might very well do with an end-area, you can use |BLOC|. Say you stored them as points 3 thru 13, you'd key in

    and you'd see the data run though on the screen, and the area would revealed at the end.

    Newly added to the End Area program are the |ST#| and |NXT#| and |CHNK| softkeys. It has come to my attention that it would be very useful to work this program using point numbers for stored coordinates as well as using coordinates on the stack. What these new softkeys do is take a point number and recall that point and then enter the coordinate to the End Area program. You use |ST#| and |NXT#| just as you would |START| and |NEXT|, except you use point numbers instead of coordinates. It is an entry aid. Actually, all it does is eliminate the need to press [PRG] in the process. So, you could mix using the keys that expect a coordinate and the ones that expect a point number. |CHNK| "CHUNK" takes two numbers from the stack, a "from" point number and a "to" point number and is another entry aid that will recall and enter a sequence of points as "next" points.

    Now, say you had stored your coordinates, but they aren't entirely in order. Say your sequence is 2,13,12,11,10,9,8,3,2. You could key in

  • Triangle Solutions
    This program solves for those five popular triangle programs. Choose the scenario that suits your needs. Enter the three knowns and press |SOLVE|. The answers are displayed. If you need the values, pressing |->STK| will push them on the stack. |TRIAN| gets you back to the Triangle Solution menu.

  • Curve Data
    This program solves for various aspects of a curve given the delta of the curve and the radius. Just enter the delta with and the radius with |RADIU|, then press one or more of the |SOLVE| buttons. You may have noticed that there are three |SOLVE| buttons. This is because each solves for different aspects of the curve. Not every aspect is of interest, so you can just solve for the solutions you want.

  • Fit a Curve
    Designing a curve, or reverse engineering a curve, this program lets you figure out what a curve might be. Once at the Fit a Curve menu, you are presented with a choice of three variables you might want to hold constant while you play with a second one. The first three variables are |CHORD|, |RADIU|, and . What you do is enter one of the three variables. Then your menu will change to one with choices for your second variable. You can try out one or more second variables, over and over until you've discovered your curve. |NEW| on the second variable menu brings you back to the first variable menu.

  • Deflection Angles
    This program calculates deflection angles and chords for a non-coordinate method of laying out curves. Generally, before the age of computers, this was a great way to layout curves because you didn't have to recalculate for each setup. The bad part is you need to set up on the curve itself. The short chords ( between stations staked ) are provided, as well as the distance from the instrument. On the 48 it's displayed as "Dist(gun)" because there's a lack of room on the screen.

    Even in modern times, this routine can be useful for times when you do have key points in place and coordinates would be impractical. Might be good for a fence or something like that. However, I have not personally used this method in several years, and I am a little hazy on how things should be. Please test it thoroughly, make sure it works out properly.

    There are several variations on how people do this, so I'll explain how it's done in this program. Some instruments measure left and right angles, some only measure to the right. If you are okay with going both directions, then left hand curves are no problem. If you can or are only comfortable turning to the right, then this program has a twist to make it easier for you.

    If you have a left hand curve, and you set the program RD/RO to a negative number, then it will generate the angles like this. The angle for the PT will be 0 degrees, the angle for the PC will be the full deflection. This is supposed to be easier on the human setting the angles than if you set 0 degrees at the PC and have those large "three-hundred something" numbers coming out.

    If you set the radius to a positive number, then the PC will be 0 degrees and the PT is the delta/2. I know this sounds just like turning to the left, but the angles are for an instrument turning to the right.

    Now regardless of whether you have a left hand curve or a right hand curve, you may need to move up on a staked station and backsight the previous setup. Well, some folks flip the telescope, sight the previous point with the angle for that point. If you do this, no further calcs are needed. However, some people don't like to flip and some instruments piggyback the EDM and don't like to be flipped. Whatever. If you can't or won't flip the telescope, you just add 180 degrees to the angle for that point, right? Okay, if you change the setup station in the program, it will add the 180 to your back stations. If you are setup at the PT, it will not add the 180 for the backstations, because you are only looking back, not forwards and back.

    The |BS T| "backsight tangent" button suggests a backsight angle for you when you are setup at the PC or PT.

    |BS T| suggests a BS when SET@ is the PC or PT station.
    |ARC->| expects an arc length and returns the chord.
    |INCR| expects the increment to advance or retard station by.
    |STA-| retards station and solves.
    |STA+| advances staion and solves.
    |STA->| expects a station and solves.

    |VIEW| views setup.
    expects an angle for the delta of the curve.
    |RD/RO| expects the radius of the curve, negative for LH.
    |PC ST| expects the PC station of the curve.
    |SET@| expects the station to setup on.
    |STA->| expects a station and solves.

    Example:
    Say you had the PC and PT already in place. Your curve delta is 35 degrees 10 minutes, your radius is 800, and it turns to the left. Let's make the PC station 0+00, and we're going setup there first. First let's put that info in the calculator. Get to the menu where you enter your variables. Key in

    Then press to verify you entered things correctly. Then press to get to the first menu page and see what to backsight. Well, it says to use 0-00-00 to backsight the PT. So you go and set up your instrument on the PC and backsight the PT with 0-00-00. Then you punch in the station you want to plug, say 1+00. Enter and it tells you the angle and distance. Now try 1+23 Now, say you moved up to 5+00, and want to sight 0+00 So then you set that angle and continue on.

  • Curve Points
    This program solves for the break points of a curve as well as the curve data. There are two options to this. The PI is known, solves for the PC, radius point, and PT. The PC is known, solves for the radius point and the PT. You switch by pressing [/->] |>PC| and [/->] |>PI|. You can tell the difference by what's on the menu, and when you press |SOLVE|, you get a chance to verify what you entered. You can also tell from that screen.

    In addition to the PI or PC, the azimuth going into the curve, the azimuth going out of the curve, and the radius need to known. Once you enter these things, press |SOLVE| and what you've entered is diplayed for verification. If it's okay, press |MORE| and it will continue on and display the curve data so you can check it against your plans or map. If that's okay, press |MORE| and it will produce the coordinates of the break points.

    |AZ IN| expects the azimuth going into the curve.
    |AZOUT| expects the azimuth going out of the curve.
    |>PC| or |>PI| expect a coordinate for the PC or PI.
    |RADIU| expects the radius of the curve.
    |SOLVE| solves for the break points and curve data.

  • Spiral Points
    This program is very similar to the Curve Points program. Instead of solving for only the break points of a simple curve, it solves for the break points of the spirals and simple curve if there is one. It assumes you are solving for symmetrical spiral-curve-spiral or spiral-spiral scenarios. You can start from the PI or TS, and you have a choice of using a radius or spiral angle as variables.

    You use it the same way as you use the Curve Points program. When you press |SOLVE|, you get a screen verifying you entered things correctly. Then, when you press |MORE|, it continues on and gives you spiral information so you can check it against what is shown on your plans. Then pressing |MORE| will continue on and provide you your solutions. The azimuths shown after the CS, SC, and SS coordinates are the tangential azimuths upstation.

    |AZ IN| expects the azimuth going into the curve.
    |AZOUT| expects the azimuth going out of the curve.
    |>TS| or |>PI| expect a coordinate for the TS or PI.
    |LENG| expects the length of the spiral.
    or |>RAD| expects the spiral angle or the radius respectively.
    |SOLVE| solves for the break points and curve data.

  • Radius Calculator
    This program calculates a radius given a degree of curve or spiral angle and length. |DC->| takes your degree of curve (100' arc) and converts it to a radius in feet. |DCC->| takes your degree of curve (100' chord) and converts it to a radius in feet. takes a spiral angle and length of spiral and converts it to a radius. The answers are left on the stack.

    |DCC->| expects the degree of curve in d.mmss format (100' chord.)
    |DC->| expects the degree of curve in d.mmss format (100' arc.)
    expects the spiral angle and the length of the spiral.

  • Utilities
    This has those little utility programs in it. You can change the system settings, do a file transfer, print out points, or even enlarge your coordinate file here.

    |VIEW| view settings.
    |PRTPT| prompts you for point range to print to infrared printer.
    |PROT| toggles overwite protection ON/OFF. With overwrite protection ON, you will be prompted before a used point is overwritten.
    |STORE| toggles you between auto-store and manual-store. Auto-store will store coordinates to file as they are generated.
    |TFR| brings you to File Transfer menu.
    |BOOST| prompts you for how many points to enlarge file by.

    |VIEW| view settings.
    |FILER| same as [/->] [PRG], coordinate file selector.
    |ELEV| expects an elevation and/or prompts you, changes the default elevation for storing points.
    |ABOUT| credits, series number.

    |VIEW| view settings.
    |QUAD| toggles you between quadrant styles, HP 1,2,3,4 or Corners 9,3,1,7.
    |N/S| toggles you between North oriented and South oriented azimuth.
    |STA| toggles you between English:0+00.00 and Metric:0+000.000 station format.
    |N&E| toggles N,E and E,N entry/display coordinate format.
    |BEAR| toggles between Original and Composite bearing entry format.

  • File Transfer
    This program helps you back up your files to a computer or just share them with another HP-48. It uses the built in kermit commands, but helps out by using the file selector to pick the files to send. Set both sides to the same port, baud and type. Then on the receiving side press |RECV|, and on the sending side press |SEND|. When you press |SEND| the file selector will start up and once you highlight the file you wish to send, press |USE| or [ENTER] to send the file.

    |VIEW| view settings.
    |PORT| toggles between IR and WIRE port.
    |BAUD| changes the baud choices.
    |TYPE| changes the type of files to send and receive.
    |RECV| initiate receive, waits for file.
    |SEND| initiates appropriate file selector to choose file and send.

    The COORD IMP/EXP type option is finally up and running. This is a rare feature to find outside of a commercial endeavor. The vast majority of shareware I have encountered don't have this feature, and after writing the routines myself, I understand why. Instead most will have you transfer your files in native form and then translate it on a PC or some other platform.

    What the EXPort portion does is take a coordinate file in your hp-48 and translate it to an ASCII format on the fly as it transmits it using my interpretation of the KERMIT file transfer protocol. The IMPort portion does the reverse. It receives a coordinate file in ASCII format and translates it on the fly as it gets it. Unfortunately, I am not an expert programmer nor an authority on Kermit, so as a result, the program runs somewhat slower than commercial software of this type. BUT, it works! And I have some thoughts on how to speed things up, but those things need to be done in assembler, so that's for another day.

    Note: Import runs too slowly from slot 2. It may not even maintain a connection. Import should be run from slot 1 until the routine is improved.

    What would you use this for? Well, you can use it to send coordinates to a PC or something, so you can review it in plain text. On the reverse side, you can create a coordinate file with some other software and send it to the calculator. You could also use the IMPort to add to your coordinate file. But most notably, you can exchange coordinate files with some commercial HP-48 surveying software directly via the IR port. This cross-platform ability might be most useful in the field when you want everyone on the same page.

    To use COORD IMP/EXP is almost like when sending and receiving other file types except for a few details. When you want to send a file and you press |SEND|, the file selector will start up. Then when you choose a file, it will stop and ask if you want to send the whole file or just a block of it. If you choose |BLOC|, you will be prompted for the point number range you want to send. The portion of the file will be sent upon entering a valid range.

    Don't forget, if you plan to export your coordinate files, you may have to adhere to a naming convention of the software you are exporting to. For example, the software I would export to, requires that you name your coordinate file with up to eight characters and with the extension .CR5, where CR are capital letters. Changing the file name can be a difficult task, I use FILER48 for this. It's also great for backing-up and restoring files on RAM cards. It's freely available on www.hpcalc.org.

    To import a file, there are some things to consider. If a coordinate file of the same name as you are trying to import already exists, then you will be prompted as to whether or not to write to that file. What will happen if you write to it is all the points received will be placed in the existing file over whatever coordinates may already be there. It is not replacing the entire file with a new one. If you are receiving a file with many points, this could be useful. Just create or boost the file to cover your point range before hand so that when receiving, the program doesn't need to pause and enlarge the file frequently.

    If for some reason you wish to cancel while importing a coordinate file. Let me warn you, if you hit the [ON] key while it's enlarging the file, conceivably you might lose the entire file. I have not been able to make this happen during testing (and I've tried,) however, it might be safer to cancel on the sending side then press [ON] while the 48 is waiting for a packet.

    IMPORTANT: The IMP/EXP ASCII format, both import and export, depends on how the N&E settings are set. If they are set to display North East, then the format will be like:

    Now, if you have it set to East North, then the format will be like:

    If this notation is too mysterious for you, you could create a coordinate file and export it using something like Hyperterminal(included with Windows,) then look at it with something like Notepad(also included with Windows.) It should then make sense.

    You may have noticed a description field. Well this software doesn't use a description field in the coordinate file, but to remain compatable with other software, one is required for importing. You aren't required to put a description in, but the comma seperator is required. Each line can be up to about 200 or so characters and must end with a carriage return line feed. No headers, trailers, or extra carriage return line feeds are accepted.

    If you are receiving a file that doesn't already exist, the first point needs to be the lowest number point, as this will be used as the lowest point in the coordinate file.

    These conditions will cause receiving a file to end:

    To use the IMPORT/EXPORT feature, communication settings must be set to:

    And while it probably will work anyway, you should also set the flow control to NONE.

    So why all the trouble of creating my own Kermit routine? I guess creating a temporary file and sending it with the built-in Kermit might work except for the lack of space in the HP-48 and the header the built-in Kermit would send. I guess I could send a stream to the serial port like some commercial software does for printing, but that would probably fill the buffer and require flow control and it lacks checking on the receiving end. Don't forget, you'll need some software on the receiving end to capture that stream, and that's not always available. Kermit has a stop and wait process, so it's unlikely it'll overflow the buffer. It checks each packet it receives, and has bad packets resent. Kermit is ubiquitous, so there is likely a free one for the system you use. And best of all, it allows this Low-Budget program to exchange coordinates directly with commercial software that has also adopted this strategy.

  • Gradester
    This program generates elevations along a vertical alignment. You can compose the alignment of straight line grades and vertical curves. Given a station Gradester will return the elevation at that station if possible.

    To begin, start up the filer with |FILER| on the Gradester menu. If you're in the desired directory, create a file. You may want to see the section on COORDINATE FILES AND THE FILE SELECTOR. Once you create the file and you verify it's the active file, quit the filer with |EXIT|.

    Next, you need to add some elements to the file, so you press |EDIT|. When the editor starts up, you press |ADD| to add an element. You choose which type of element you want to enter, then enter the variables that describe the element. Next, you'll enter the range the element is to be used over. The FROM station must be less than the TO station. When you add, it inserts the element right after the one you're looking at. Continue to enter as many elements as you need.

    When you're finished entering elements, quit the editor with |EXIT|. A file checker is provided, it's highly recommended you run the checker by pressing |CHEC|. If you find errors, hit |EDIT| and fix them. Once you've got everything correct, you use it just like you would the other two vertical alignment programs. Please note that |CHEC| only checks for continuity. It checks that there is zero gap in station and that there is no gap in elevation more than 0.0001. It does not check for tangents that match curves. So, it is good to check the PIVCs of the curves carefully for mistakes.

    The elements you enter have all the characteristics of the programs they are based on. For example, when you use the SLG program, sta 1 does not need to be lower than sta2, nor are you confined to solving between those stations. And when you use the VC program, for stations outside of the curve, elevations are returned as though on the tangent. Well anyway, that's how you are allowed to use each element in the gradester file. Another thing to be aware of, is that when you toggle on break points, the break points are determined by the range of use stations. This may be important for a grade setter. On the other hand, the more elements you have, the more memory it consumes, and potentially more things to search through when looking for a station. So depending on your needs, you can stategically plan what elements you use.

    A side note here. If you place elements out of sequence, or use bad ranges, there is a possiblity it may start searching endlessly. The previous version of this only searched in one direction, avoiding the problem, but this one will go up or down in hopes of speeding things up. So again, I must re-emphisize to use |CHEC| once you've completed entering your elements.

    |FILER| interactive, it creates, chooses, and deletes directories or Gradester files.
    |EDIT| edits currently selected grade file.
    |INCR| expects an increment to change station by.
    |STA-| retards by increment and solves.
    |STA+| advances by increment and solves.
    |STA->| expects a station and solve for elevation.

    |VIEW| view current conditions.
    |BRKS| toggles break points ON/OFF.
    |PRINT| prints to IR printer a range of stations.
    |CHEC| checks currently selected grade file for continuity (+/-.0001 elev.)

  • Superelevation
    Used for figuring along segments of a superelevation diagram. They usually can be broken down into sections of zero slope, vertical curve, slope, vertical curve, zero slope. You enter the PI stations, the elevations of the zero slopes and the lengths of the vertical curves. Note that STA 1 doesn't have to be lower than STA 2.

    |VIEW| views variables.
    |INCR| expects an increment to change station by.
    |STA-| retards by increment and solves.
    |STA+| advances by increment and solves.
    |STA->| expects a station and solve for elevation.

    |STA 1| expects a station.
    |ELV 1| expects an "elevation" actually the %superelevation.
    |LEN 1| expects the length of vertical curve 1. 0 is allowed (linear transition.)
    |STA 2| expects a station.
    |ELV 2| expect an "elevation" actually the %superelevation.
    |LEN 2| expects the length of vertical curve 2. 0 is allowed (linear transition.)

  • Straight Line Grade
    This program solves for elevations along a straight line grade. You define the line with two stations and the elevations at both stations. Note that station 1 does not need to be lower than station 2. The solution elevation is left on the stack with the station tagged to it to help you remember. Treat it as an ordinary number.

    |VIEW| views variables.
    |INCR| expects an increment to change station by.
    |STA-| retards by increment and solves.
    |STA+| advances by increment and solves.
    |STA->| expects a station and solves for elevation.

    |VIEW| views variables.
    |STA 1| expects a station.
    |EL 1| expects the elevation at station 1.
    |STA 2| expects a station.
    |EL 2| expects the elevation at station 2.
    |STA->| expects a station and solves for elevation.

  • Vertical Curve
    This program solves for elevations along a vertical curve as well as the "turning point." For stations outside of the curve, the elevation is calculated as though on the tangent section. The solution elevation is left on the stack with the station tagged to it to help you remember. Treat it as an ordinary number.

    |VIEW| views variables.
    |SAG| calculates sag or crest point and grade-in, grade-out, and length.
    |INCR| expects an increment to change station by.
    |STA-| retards by increment and solves.
    |STA+| advances by increment and solves.
    |STA->| expects a station and solve for elevation.

    |BVCST| expects BVC station.
    |BVCEL| expects BVC elevation.
    |PI ST| expects PI station.
    |PI EL| expects PI elevation.
    |EVCST| expects EVC station.
    |EVCEL| expects EVC elevation.

  • Leveling
    Leveling is just meant as an aid in reducing your level notes. You can pick up at whatever point you want to. You can enter an elevation and then a backsight rod reading to give you a new HI or you can just enter a HI. |FS| (foresight) will subtract the value entered from the HI and store it as the new value for elevation. That's all there is to it.

    There are two sets of options that go along with this routine and you switch between them with [/->] |>VIEW|.

    Option 1
    The first option has the softkeys |3WBS| and |3WFS| stand for "3-Wire BackSight" and "3-Wire ForeSight." You use these keys just like you would |BS| and |FS|, except you use readings from the two stadia lines as well as the center instead of just the center. It takes three values from the stack and does a three wire comparison if the value exceeds the tolerance specified, then it is flagged out with a beep and a star. In level 3 should be the upper wire reading, in level 2 should be the center wire reading, and the lower wire reading should be in level 1 before pressing these softkeys. Works with inverted rod.

    Keys:
    |3WBS| expects Upper in level 3, Center in level 2, Lower in level 1.
    |BS| expects a BackSight rod reading and calculates HI from current elevation.
    |HI| expects a Height of Instrument.
    |FS| expects a ForeSight rod reading and calculates a new elevation from current HI.
    |3WFS| expects Upper in level 3, Center in level 2, Lower in level 1.
    |ELEV| expects an Elevation.

    |>VIEW| view settings. [/->] |>VIEW| switches options.
    |+/-| enters the tolerance to be flagged if exceeded.(something like 0.01)
    |RND| decimal points to round to (for 3-wire and c/f.)

    Option 2
    The second option has the softkeys |PT#EL| and |TARG|. |PT#L| is used for recalling an elevation to the stack from your coordinate file. This is useful if you have your control points stored with elevations. |TARG| is used for entering a target elevation. With this option, when you enter a rod reading with |FS|, it calculates the cut or fill to the target elevation, which is useful for writing your C/F in your field book. |RND| on the second menu page will round the target elevation and the rod elevation to whatever decimal places you specified. This rounding takes place before the cut and fill is figured out. Please note, that the display is still going to display at whatever decimal places the calculator was set for.

    Keys:
    |PT#EL| expects a point number and recalls the elevation of that point.
    |BS| expects a Back Sight rod reading and calculates HI from current elevation.
    |HI| expects a Height of instrument.
    |FS| expects a Fore Sight rod reading and calculates a new elevation from current HI and C/F.
    |TARG| expects an elevation to calculate a cut or fill value to.
    |ELEV| expects an Elevation.

    |>VIEW| view settings. [/->] |>VIEW| switches options.
    |RND| decimal points to round to (for 3-wire and c/f.)

    Example:
    Say you had level notes like these

    You could use this program to reduce the notes. First, set your display to the appropriate decimal places since this program displays using what your calculator is set to. In this case, 2 decimal places would be appropriate.

    Next, enter the backsight elevation Next, you can enter your BS rod reading Your HI is calculated and displayed. Next, you can calculate the elevation on stations 2, 3, 4, and 5. Now, we're going to backsight and turn on station 5. Now, let's calculate our elevation on station 6 and turn back to station 1. That's basically it. You just have to play with the options to see what they do.

  • EDM note reduction
    This was an add-on program in previous versions, but at an overhead of only about 3600 bytes I just included it and left it as a hidden program. What this program does is reduce EDM notes 3-dimensionally. Again there is no correction for curvature or refraction, and of course there is no provision for descriptions.

    While one could use this for reducing topo notes, commercial software does this much better. A data-collector is better yet. I use it for checking raw file processing, and I know someone who checks edm leveling with it.

    If you change the settings to AUTO-Store, it will automatically store 3-dimensionally to file. If not, the results are left on the stack with the point in level 2 and elevation in level 1. So, you could just press [STO] and it will still store it 3-dimensionally.

    To get to this program submenu, at the main menu press [/->] |TRAV|. Since this actually goes beyond the scope of what the program pack is intended for, it's not openly included on the main menu. If you would like to add it to your own CST variable or assign it to a key, the library function name is EDMMENU.

    What you do is enter all the variables and press |SOLVE|. You have four modes to choose from and you move through them with [/->] |>VIEW|.

  • LOT Corners, area
    I did want to name this program "Parcel" something or other, but "LOT" is just so much shorter and fits all on one softkey, so that's why I went with it. Perhaps one day I'll change that. What this program does is to calculate the coordinates of the corners of a lot or parcel as you traverse your way around the perimeter. It also lets you include arcs as needed, in which case the radius point will be calculated too. In addition to calculating the coordinates, it also calculates the area using the DMD method as opposed to the coordinate method. There are three forms of output available for this program. You can store the coordinates to the currently active coordinate file, you can print it to the IR printer, or you can have it create a variable called OUT.TXT which you can send to your PC and print out (it's basically a coordinate file with descriptions.)

    So here's how it goes. You create or select a file just like you do with GRADESTER or the Traverse W/Closure program. Next, you enter your starting point with |START|. This works just like its Traverse W/Closure counterpart except you enter a coordinate instead of a point number. When you enter a coordinate with |START|, you clear out whatever perimeter information you may have entered in this file previously. Next you enter each "LEG" as you traverse around the perimeter. Pressing |ENTR| will run a program to let you enter each leg. Just |CANC| when finished entering your legs. Please note that the prior leg's values will remain in the boxes because sometimes you want to repeat a direction or distance or maybe even the radius. If you made some entry mistakes, you can fix them with the editor. When you think all's well, you can evaluate the file with |EVAL|. |EVAL| will process the file and then prompt you for an initial point number. This is the number you want to begin numbering your coordinates at. If you enter an empty line, it will just cancel the processing, if you enter a point number, then it will generate a report you can page through.

    At this point |OUTPU| will be one of the softkeys. Pressing it will let you choose how or if you want to produce output. If you choose |STORE|, it will try to store the points to the currently active coordinate file. Here's how it operates:

    Now, for any of this to work, I need to explain to you what I am calling a "LEG." I couldn't come up with a better name, so I just call it a "leg." In this case, a leg is a line segment defined by a distance and a direction and an arc on the end of it which is defined by the direction and radius. The direction defines the ingoing tangent of the arc, and the outgoing tangent is defined from the next leg in the circuit. If it's the last leg, then it picks it up from the first leg. You can have a leg that has a direction, a non-zero distance, and zero for radius which would make it just a straight line segment. You can have a leg that has a leg with a direction, zero distance, and a non-zero radius. This would be good as the start of an arc which doesn't come off of a straight part or doesn't follow the straight part. You could have leg with a direction, a zero distance, and zero radius. This would be good for ending an arc that doesn't follow the next tangent section. Anyway, this scheme seems to work so far. The 48 is limited, so checks are limited. There is no checking for crossing lines, extraneous legs (zero distance and radius and no purpose), or other bogus information.

    This program determines which way you are going around the perimeter by the change in directions. SO, if you have crossing lines or too many extraneous legs, you could get a bogus answer. Just to let you know.

    |>VIEW| views status. [/->] |>VIEW| toggles bearing and azimuth modes.
    |START| expects a coordinate. It clears out current entries and stores starting point.
    |FILER| creates, deletes, selects files and directories.
    |EVAL| processes the LOT file and allows you to produce output if desired.
    |EDIT| interactive file editor.
    |ENTR| activates program to enter each leg. Just fill in the boxes and press |OK|. |CANC| when done.

    Examples:
    Let's do the pretend-lot in this illustration.

    Now while a coordinate file is optional with this program, you do need a LOT file. So first, create a file. Let's call it LOT1. Press to start up the file selector. Then to create a new file named "LOT1" and exit the file selector. Now you are ready to make entries. You start off by entering your starting point. In this case, it's 1000N 1000E. Now you are ready to enter the legs. Press to start a program for entering the legs. And then enter the legs. Now, you've entered all the legs, just press to start the processing. It will eventually prompt you for an initial point number. Let start our numbering at 1, so key in and then it should continue on to a report which you can page through. That's about it. If you want to produce some output, maybe store the points, then press |OUTPU| and make one of the choices. Be careful, no prompting is done for verification. It will just do it. I may add in verification later. Back on track, let's see how we'd enter the lot going the other direction. So exit the report, press and we can now enter the lot going the other way. We will just use the same file again.
    Congratulations, you've just entered the lot going the other direction. Catching on? Now let's try this last example. In it are a few twists; there's curves that don't follow the tangent, the last leg has an arc that doesn't follow the tangent of the first leg. The curves are concentric.

    Here's how you'd enter it. Okay, now with entering that, you must have noticed several things. First, you had to do a lot of adding and subtracting angles to get the tangent azimuth, and second, we entered 428.4347 as the direction. Yes, maybe this is not the most perfect program design, but this is an experiment, I may scrap it entirely. Perhaps there is a better way to enter the curves, I don't know yet. I personally believe in using a pencil and paper and writing down the circuit before punching it in, but if you need to, you can also add and subtract these things while entering the legs. The number in excess of 360 is allowed to make these entries easier. You aren't as lucky in bearing mode. If the bearing angle is not reasonable, the defaults are put in. I may change this later.

    Back to doing math while entering your legs, when you are at the entry screen, you can press [NXT] and the menu keys change to of which |CALC| will let you use the calculator functions including the ones assigned to the keys like HMS+ and HMS-. Just press |OK| when you are finished and the result is entered in the box. You just have to play around with it to figure out how it works.

    THINGS TO KNOW

    FREQUENTLY ASKED QUESTIONS

    DESIGN FEATURES
    This is to point out some design features which make this program set special. While this probably has no impact on what you think about my programs, after spending like a gazillion hours on developing it, I felt compelled to point some of them out.

    TECHNICAL STUFF

    REMOVING PROGRAM
    There may come a time when you need to remove the Low-Budget Program. Explaining how to remove the libraries is perhaps frustrating, but reading my instructions on how to remove a library is probably even more frustrating. To help with the task of removing this or any of the Low-Budget programs, a program named UNJ is provided with this set.

    This program removes libraries with the ROMIDs 1005 1006 1013 1014 1015. If you have a library you don't want to remove with one of these ROMIDs, then you should either modify the program before use, or manually remove the libraries.

    1. Find the file included with this package named UNJ.

    2. Transfer the file UNJ to the HOME directory of your HP-48.

    3. Unlock any RAM cards that you loaded the program to that you wish to remove from.

    4. Warm start your calculator by pressing [ON] + [C].

    5. When your HP-48 comes back to life, press [VAR].

    6. Press the key that corresponds to the file you just transferred, should be |UNJ|.

    The program may not be able to remove the library file for some reason. Maybe the RAM card is write-protected or something like that. If so, correct the problem and perform steps 4 thru 6 again.

    Please note that if you are removing the program to upgrade, this DOES delete the JSETTINGS variable which contains the program settings.

    The UNJ program should be able to remove the library file from any of the RAM based survey programs I've distributed. However, if you are removing an early version, say versions prior to 3, or you've reassigned the keys, the key assignments may be different. This could cause a problem when using the current version of the survey package. I recommend you delete the key assignments if this is the case. All you would have to do is type in 0 DELKEYS into your HP-48. This will delete all the key assignments. By the way, that's a zero(0) not an O(oh.)

    If you're not sure if you have an early version, you may be better off just doing the 0 DELKEYS or better yet, do the three finger salute and blank your RAM by pressing [A] [F] [ON] at the same time. This is because launching some of the routines without the proper variables on the stack could cause a memory reset, some of the early key assignments could possibly do this. Changing the key assignments is not so much of a problem unless library function numbers change, which they shouldn't.