DOC 1.1 -- UTILS directory documentation NOTE! This is a plain ASCII text file containing multiple documents. You may find it most convenient to view or print this file by running the DOC.EXE program (supplied on this disk) on your PC. This is the first Goodies Disk to do it this way. Hope you like it. :GD9 :Utilities :-jkh- @@BEAN11 -G (Comp.sys.hp48) Item: 2147 by bawa@eecs.nwu.edu [Sanjiv Bawa] Subj: The Bean Counter Ver 1.1 Date: 09 Oct 1993 The Bean Counter Version 1.1 (C) 1993 Sanjiv Bawa bawa@eecs.nwu.edu GX GX GX GX GX Version ONLY. This is a NEW VERSION of THE BEAN COUNTER. Finally !! Here is a post of The Bean Counter - a money manager program. This is version 1.1. If you want to track where your money is going this is what you want to use. Following is a description of the features of this program. Have fun ! Noncommercial distribution allowed, provided that this copyright message is preserved, and any modified versions are clearly marked as such. THIS SOFTWARE IS PROVIDED "AS IS" AND WITHOUT ANY EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. VERSION 1.1 SPECIFIC COMMENTS 1. Fixed a bug that caused the program to crash when expense types were being changed. 2. Instead of - signs showing a credit in the statements a + sign is used. This is more intuitive. A C or CR is normally used but a C is not as visible in the smallest font mode as a +. 3. Separated TRANSACTIONS into INCOME and EXPENSES. There are now separate INCOME TYPES which can be created and modified using the MODIFY EXPENSE TYPES and MODIFY INCOME TYPES in the main menu. The program will now create new two new files in your BEAN directory when you first run it. They are TYPES and INTYPES and hold information about the EXPENSE and INCOME TYPES. The filename of the version is BEAN11.LIB The file formats are the same as version 1.0 VERSION 1.0 release documentation (unmodified) After looking through ftp sites everywhere for a program that helps manage ones money (an "Expense Manager" I believe is what they are called) I decided to write a program to help me keep track of my expenses. It turned out to be quite a reasonably polished program so, happily, I am going to release it to the rest of the world - if, of course, anybody wants it ..... WHO WOULD FIND IT USEFUL ? If you are a normal person who does not have a gazillion bucks, you will find the program quite useful in keeping track of all your money. Version 1.0 of this program does slightly more than a normal personal organizer. 2.0 will probably do way more (provided there is any kind of interest in the program). FEATURES: This program is capable of handling multiple accounts (limited only by memory). They can be of two types, Credit and Checking. The Credit account type is designed for transactions done with credit cards. The Checking account type, on the other hand, can be used for checking, savings and cash accounts. You can open and close accounts at will. The program allows you to enter simple transactions (Say, you spent money on clothes, or deposited a paycheck). It also allows you to transfer money between accounts (Say you got a cash advance from your VISA and deposited it in your checking account). Each transaction has a date, Expense type (explained later), Amount and Remarks attached to it. The program allows you to create several different EXPENSE TYPES, so you can easily categorize your expenses, to figure out exactly where your money is going. The program also allows you to archive old transactions, so that thousands of old transactions do not slow down the program. The number of transactions that you keep is configurable (can be different for each account). It creates mini statements that you can look at any time. You can view 7 transactions at a time (limited by size of screen), complete with current balances. This is a GX version. It will NOT work on an SX. It will NOT crash your SX, however, since it has been written in usr RPL. SETUP If you are running the program for the first time SETUP and BEAN do the same thing. If you have old files SETUP will delete them. To run the program you must have at least ONE account and the program really will not let you do anything unless you create one. Choose CREATE from the first menu that you see, which will be ACCOUNT MANAGEMENT. Then, before you edit anything, read the following, especially the paragraph subtitled "CREATING AN ACCOUNT". (The form is a little tricky because the people at HP simply ignored every piece of mail that I sent them, so I could not get a hold of the full format of the INFORM command) HOW TO USE THIS PROGRAM This program uses the menu systems that are new to the GX. It makes the program a lot easier to use. The main menu (you will not see it when you run the program for the very first time) has the following entries, TRANSACTION, TRANSFER, ACCOUNTS, EXPENSE TYPES, ARCHIVE, STATEMENT, QUIT. The paragraphs below will explain each option. BASIC PREMISE OF ACCOUNTING When money changes hands, a TRANSACTION happens. This transaction always happens between two ACCOUNTS. One account received money the other loses it. Generally, you only keep track of accounts that you own. So, when you spend money, say by using your VISA to buy a pizza you only care about what happens to your VISA account. In this case, the balance goes up and you suddenly owe VISA more money. ORGANIZING THIS PROGRAM Assuming you want to keep track of all your expenses etc., you want to create several accounts. Most people will get away with just creating accounts in the program named after their bank accounts and credit cards and one or two CASH accounts. Every time you spend money, use a credit card, cash a check, or get money from an ATM etc. you should record it (assuming you want to keep track of things). You can do this by using the TRANSACTION and TRANSFER options. Read on to find out how .... ACCOUNTS (Create, Modify, Close and Reopen) Creating an account is the FIRST thing you have to do. It is just a little bit tricky, but if you read the instructions, you should have no problems. When you choose the Create Accounts, or Modify Accounts option, you will see a screen with 7 items. NAME, TYPE, DATE, BALANCE, ARCH ON, KEEP MTHS, OPEN. There is a default for all except NAME. You have to enter a NAME. NAME is the name of the account. Example VISA, AMEX, BANKONE, CASH etc. TYPE: There are two types of accounts, credit and checking. Basically, when you look at your statement for the account and see a balance; if you owe that balance it is a credit account (such is the case for credit cards), and if you have that balance is a checking type account (which is the case for checking, savings and CASH accounts). To select a checking type account enter "-" (the default) or enter "+" for a credit type account. DATE is the first date that you are going to ever going to enter a transaction for. It does not have to be the date you opened the account, just the very first day, that you want to record in your GX. See BALANCE BALANCE is the starting balance on the DATE that you just entered (see above). The final balance will be computed using this starting BALANCE and the transactions that you enter. ARCH ON: When you run ARCHIVE it will attempt to archive transactions so that the very first transaction left in the account is the day *after* ARCH ON. Obviously, if your bank always sends to statements at the end of the month you should enter 31. If, say, statements are from the 16th of the previous month to the 15th of this month, enter 15. This helps keeping things in sync, so you do not have haphazard beginning dates when you ARCHIVE transactions. KEEP MTHS is the numbers of months that it will keep online when you do an ARCHIVE. The higher this number, the slower things will get, since you will have too many transactions in the list. Too small a number will mean that you do not have enough transactions online. OPEN? is if this account is open for business. If you creating it, it probably is. No transactions are allowed on closed accounts. CLOSE closes an open account. NOTHING is deleted REOPEN reopens a closed account TRANSACTION Self explanatory. Every time you spend money, receive a paycheck etc., you should select this option. See TRANSFER. Remember to use NEGATIVE numbers for any money that you receive. This may be confusing at first, but if you think about it, it makes sense. If a positive number is money outflow, a negative number would be inflow. Thus, your paycheck would, for example, be recorded as -800. Future versions, will fix this. TRANSFER Do not use the TRANSACTION option if you transfer money between accounts. Say if you get a cash advance from you VISA and deposit it in your checking account, except for bank fees, you have not spent any money. EXPENSE TYPES To categorize your transactions you can create, modify or delete EXPENSE TYPES. There are a few created for you already. You can make more. Try not to delete any. I have not really put in the code to delete a type, so it just creates a space in the menu..... ARCHIVE Puts old transactions in an archive. The archive filename is the account filename + .CL. The starting balance is adjusted properly. Note, that in this version, nothing can be done with this archive file. STATEMENT Creates a statement, with balance for you to see. It starts off the very bottom, i.e. the very last transaction to happen in displayed at the very bottom. Use the up arrow and down arrow to go up and down. Any other key get you out. Yes, it is slow, but Version 2.0 will have this part written in sys RPL so it will be faster. **Special Instructions** This is not a 100% perfect program. It is on the slowish side with obvious defects in the ACCOUNT create/modify part. You can get it to crash by doing things that should not be done, i.e creating two accounts with the same name, creating an account with the name ACCTS etc. There will be many more checks etc. in the next version, and it will be faster with more functionality. If you have any comments on the program, its functionality or its documentation, please let me know at bawa@eecs.nwu.edu. Please put "The Bean Counter" in the subject line. Thank you for your support. @CD21 Change Directory Version 2.1, January 1993 by Dan Kirkland CD (Change Directory) is a library that allows you to view, change, create, and destroy directories graphicly. INSTALLING THE CD LIBRARY Transfer the CD library to your HP48. Put the library on the stack. Enter the port number were you want to store the CD library and press STO . Turn the HP48 off and back on again to allow the CD library to attach. Purge the variable with the original copy of the CD library. REMOVING THE CD LIBRARY Go to the HOME directory. Enter 1122 and execute DETACH . Enter 1122 tagged with the port number which the CD library is stored and execute PURGE. ( or :&:1122 PURGE) USING THE CD LIBRARY Go to the library menu and press the CD menu key. This will give you a menu with following keys. CD - The main program. ABOUT.CD - Title screen. You can run CD by entering this menu and pressing the CD key or by just entering the letters CD. The first time you run CD it will scan for all your directories and store them in a variable in your HOME directory called 'CD.Data'. 'CD.Data' is used for faster drawing of the tree. If you create or destroy any directories outside of the CD program, you will need to SCAN the directories again to have an accurate picture of your directories. CD MENU KEYS HOME - Highlights the HOME directory. SCAN - Scans the directories and updates 'CD.Data'. CRDIR - Create a subdirectory in the highlighted directory. PGDIR - Purge the highlighted subdirectory. OTHER ACTIVE KEYS THE ARROW KEYS - Move highlight from one directory to another. ENTER - Exit CD into highlighted directory. ON (ATTN) - Exit CD without changing directory. +/- - Toggle menu on/off (menu keys stay active). Dan Kirkland Email: kirkland@ee.utah.edu @@CGENERIC SG CGENERIC - used by FONEMAN. @@COMPRESS SG (Comp.sys.hp48) Item: 2923 by ftg0673@tamsun.tamu.edu [Rick Grevelle] Subj: High Performance Data Compression Date: 08 Dec 1993 [Note: This is an updated version of the RF (Redundancy Fighter) programs which have been on this and on previous Goodies Disks. Although the compression logic is the same as RF's, the memory handling is much safer, and the decompression is much faster. Also, it creates Library Objects instead of strings. Which should you use: RF, or COMPRESS? Try both, and decide which you like better. -jkh-] These two routines are the first stage of a multipass high performance data compression scheme. The run length oriented algorithm is a variation of the one originally implemented by Lutz Vieweg. For the compression routine the final 'BYTES COMPRESSED' readout pertains to the actual number of bytes saved. I am interested in expanding the base of beta testers on a project nearing completion at this time, and as a consequence I shall be prereleasing segments of the main library but without most of their documents, and lacking full functionality. For example, the multiple pass feature has been disabled here. I would be indebted to any individual who might discover, and report, any bugs to me. Particularly if you could explain to me how I could recreate the anomalies. Future versions are being discussed and may even be self evaluating in order to obtain maximum compression for the varying data structures within the 48's environment. Rick Grevelle (409) 774-1169 ftg0673@tamsun.tamu.edu @@CROLDX SG CROLDX - used by FONEMAN. @@DBASE -G (Comp.sys.hp48) Item: 1387 by _mtodd@hpcvbbs.external.hp.com [Matthew Todd Eckrich] Subj: HP48GX Database Application BYTES: # CE11h, 4654.5 Date: 24 February 1993 The following are prominent features of this database application for an HP48G/GX: * Written completely in System RPL. * Allows multiple databases. * Allows browsing titles using the internal browser. * Entries exceeding the display boundaries can be scrolled. * Repeat key features. * All entries are sorted. * Databases accessible from any directory. Each database consists of a number of records. Each record consists of a set number of fields determined when the database is created. The physical structure of each database is a list of list(s) of strings(s). Linefeeds are allowed in strings. The databases are stored in the hidden directory ( #640BEh SYSEVAL to enter -- caution: careless use of SYSEVAL can cause a memory loss). To use, install the library and execute XQDB. It will first prompt to define a new database. When the browser is active to view the records in a database the keyboard is defined as follows: 11.1 DB Browses databases and brings up database menu 12.1 FIND-> Brings up menu for search of next record(s). Note that a key search matches strings in just the first field of each record. 13.1 FLD-> Browses records by the next field. 14.1 ADD Adds record. 15.1 DEL Deletes record. 16.1 EDIT Edits record. 25.1 UPARROW Advances highlight up one record. 25.2 Advances highlight up one page. (left-shifted UPARROW) 25.3 Advances highlight to top record. (right-shifted UPARROW) 35.1 DOWNARROW Advances highlight down one record 35.2 Advances highlight down one page. (left-shifted DOWNARROW) 35.3 Advances highlight to last record. (right-shifted DOWNARROW) 51.1 ENTER Views currently highlighted record in full-screen mode, redefining the keyboard as explained in next section. 61.1 ALPHA Allows search of records by first letter of current field. Thus, ALHPA N advances to first record beginning with the letter N. 91.1 CANCEL Exits. When a record is being viewed in the full screen mode, the keyboard is defined as follows: 11.1 FIND-> Brings up menu for search of next record(s). Note that a KEY search matches strings in just the first field of each record. 12.1 STK-> Places fields of current record on stack. Fields can then be entered into other records when editing by using the STK key. 13.1 COPY Creates duplicate of current record. 14.1 ADD Adds record. 15.1 DEL Deletes record. 16.1 EDIT Edits record. 25.1 UPARROW Advances to previous record. 25.3 Advances to top record. (right-shifted UPARROW) 35.1 DOWNARROW Advances to next record. 35.3 Advances to last record. (right-shifted DOWNARROW) 51.1 ENTER Starts Browser mode highlighting the current record. 91.1 CANCEL Exits. If the current record exceeds the display boundaries, (with repeat key feature) 24.1 VAR Scrolls display up 26.1 NXT Scrolls display down 34.1 LEFTARROW Scrolls display left 36.1 RIGHTARROW Scrolls display right. @@FALSECLR SG From: Jeoff Krontz Subject: FalseClear Shell v2.0 This is Rick Grevelle's famous falseclear routine put into a shell. It enables you to use your calculator just like normal until you want to press [ON]-[A]-[F]. Once you press thsee keys, the memory will be falsely cleared and your directory will appear empty. But the routine is still in memory and will catch the next [ON]-[A]-[F] and will continue to do so until you do an [ON]-[C]. I have also made the home directory clear (not really) upon falsely clearing the memory. This is so that a sneaky professor doesn't clear your memory and then press [VAR] so that he/she sees that it did not really clear. Press [ON]-[B] to instantly see your directory reappear. Note that you may still use your calc like normal when the directory is cleared. You may even run programs by typing their names in on the command line. They are simply "hidden". To see how this is done take a look at the source code that I have included. There are a few things to take note of: this program is not perfect. This program is limited in what it can do by the way HP does its key handling. 1. The [ON]-[A]-[F] trap will only work when you are on the command line or when the stack is visible. (It will not work in the interactive stack) 2. Therefore, it will not work while running another program or using one of the multi-line (5,6,7) stack programs out there. 3. If you type keys real fast and then hit [ON]-[A]-[F] then your memory will be cleared. You are actually hitting [ON]-[A]-[F] while the key buffer is being handled and not while my program is trapping your keypresses. 4. To do an [ON]-[C] or [ON]-[Anything], press the key first, and then [ON]. Note that this will not work with [ON]-[A]-[F]. Also note that [ON]-[C], [ON]-[D], and [ON]-[Space] will abort FalseClear. This is a complete re-write of the version Rick posted three weeks ago which had some shortcomings. This version will work on both the SX and GX (or S,G). I have also included the source code so that people can see how it's all done. I have commented the machine language part heavily for those unfamiliar with ML key handling. @@FONEMAN SG From: "Jeoffrey M. Krontz" Subject: Fone Manager v1.0 Date: Tue, 5 Oct 93 The Fone Manager v1.0 I wrote this program over a period of 6 months, constantly improving it and making it the best phone number and address manager ever. It is definitely the fastest program of its type that I have ever seen, and I looked at every one I could find to get ideas from them and to learn their weaknesses so that this program would make the same mistakes. All of the graphical routines and display routines are written in machine language. The rest is entirely system-rpl. The Fone Manager works on any G or S series Hp48 up through revision "M". The Fone Manager is called that because I originally started it out to be just that. However, it is actually a database program that can store information of any type. Here are a list of the main features this program has that others don't or that are much better than others: * Wonderful user interface that makes the program easy to use, not complicated and complex like most others. * Lets you use any editor you like. It has automatic presets for QED or Stringwriter, but it will also let you use any editor you might have. I have never seen this option in any other program and to me it is the worst aspect of other programs data entry is too slow. * Lightning quick display routines. You can hold down an arrow key and scroll through a list of fifty names in about 11 seconds. This is a display of the entire record, not just a one line title. * Has a search routine which scans the entirety of each record for the search string, not just a specific line of each record. This takes under one second to scan through a fifty-record list for a string that appears in the last record (worst-case). That's quick! * The find routine has its own quick command line that doesn't interfere with the rest of the screen. In other words, it doesn't use the ugly HP command line. * Uses the small font to display 7 lines of data with about 25 characters to a line. This is a lot more than other programs which use a bigger font which makes you unable to display the last line of your address without it wrapping off the screen. * Under 3500 bytes!! Just to see how fast Fone Manager really is, check out these stats. Below are comparison times of the time it takes to scroll through every entry in a 56 person fone list: Roldx v6.0 23 seconds (highlight-bar mode) 43 seconds (full screen mode) Fone Manager / Database 12 seconds (full-screen mode) This package contains the following HP binaries foneman.lib: the fone manager library cgeneric: a program to convert other fone-lists to this format croldx: a program to convert roldx format fone-lists to this format Conversion Programs I have included two programs to convert fone-lists made with other programs to the format used in this program which is simply a list of strings. The generic program goes through a list made by another program and takes out any strings it finds, putting them into individual records to be used by this fone-manager. The roldx converter takes a list made with roldx and converts it to my format. If your fone-list is already a list of strings then don't worry, it will work here. Just put your list on the stack and then run the appropriate conversion program. Then use the STO command explained below to store your list into the Fone Manager. Notes on Inner Workings Fone Manager stores your fone list out of site in the Hidden directory. There are also no unsightly parameter files to get stored in you directories. It uses user flags 40-42 to keep track of your personal editor. The Fdata variable, stored in the Hidden directory, is a list of strings. Each record is stored as a string in this list. Commands in the Library Fone Manager is distributed in library form, taking up slightly less than 3500 bytes. This library contains four programs: FONE runs Fone Manager RCL recalls phone list so that you can back it up STO stores a new phone list into the Manager DEL deletes your phone lists from the Hidden Directory. This is used to free up space or so that you may create a new phone list. (simple enough) Inside the Fone Manager Fone Manager contains 6 commands: ADD add a record EDIT edit a record DEL delete a record (can also use the DEL key) FIND find a record (search for a string) SETUP choose your editor (QED/other, StringWriter, HP48 editor) EXIT exit Fone Manager ADD: This command will let you enter the editor of you choice and create a new record. This record will be inserted into the main file in alphabetical order automatically. The first line of the record determines the order. You may have as many lines of data as you wish, however only 7 will show up on the main screen of Fone Manager. When using the HP48 editor, use right-shift "." (right-shift period) to go to the next line. If you press on from the HP48 editor, the record will be aborted and not saved. EDIT: This command lets you edit the current record you are on. You will be put into the editor of your choice. Your record will be re-alphabetized automatically when you are through editing. DEL: This deletes the current record from the file. You will be prompted to make absolutely sure that you want to delete it. The DEL key on the Hp48 keyboard does the same thing this command does. FIND: This command enables you to search records for a string. When pressed, a special miniature command line comes up in place of the menu labels and you are prompted to enter the search string. Enter the search string and press enter. Fone Manager will jump to the first record and start searching from that point. It searches the entire record for the search string, not just the first line. It will search through the records until the string is found, and then it will make the record containing the string the new current record. If the string is not found you will be returned to the record from which you started the search. Pressing the NXT key will find the next occurrence of the string after the record you are currently on. SETUP: This command shows you a screen of information to allow you to choose the editor to use with Fone Manager. Your choices are QED, StringWriter, and the Hp48 editor. Pick the number of the choice you want to use. This setting will be saved using using user flags 40-42. It will remain until the calculator is warmstarted or you run Setup again to change the editor. DO NOT change these flags yourself. Fone Manager has precautions built in to handle this, but don't press your luck. If this is a problem for anyone, let me know and I can change the flags used. When QED is selected as the editor to be used, setup will look for a variable named "QED.o" before it will let you select it as your editor. If this variable does not exist then you will get an error message. This is the normal name for the QED executable to have. If you have QED in a library, have the QED.o variable named something else, or want to use a different editor with Fone Manager, then put the name of the file to run in the variable "QED.o". For instance, to use an editor named FOO, store 'FOO' in "QED.o". Fone Manager runs whatever is in this file when it goes to an editor. So, putting a global variable or xlib in this variable will cause it to execute when QED.o is called. Once this is done, QED can be selected from the setup menu. If you have the normal QED installed, everything will be done automatically. When StringWriter is selected, Fone Manager looks to see if library 1303 (StringWriter) is stored in a port. If not, you will see an error message. Install StringWriter into your Hp before using SETUP. If you select the Hp48 editor, then you will be using the built-in editor of the Hp48. EXIT: Exits Fone Manager Hard Key Assignments arrow keys scroll through the records of your phone list (keys may be held down for lightning-quick repeat action) left-shift / arrow keys jump to first or last record depending on which right shift / arrow keys arrow key was pressed. (up, right : last record) (down, left : first record) DEL deletes current record. you WILL get an "Are you Sure?" prompt. NXT searches for next occurence of search string EVAL redraws screen if necessary. (Very wide strings could possibly mess up the screen border I have set up) ON leaves Fone Manager OFF turns calculator off **Note: When you first run Fone Manager, the record you see will be a help screen telling you the hardkey assignments. Once you enter a record, however, you will not see this record again if you use a right/left shifted arrow to jump to the last record. This record is actually the last record + 1. If you ever need help again, jump to the last record and then press the right or up arrow key. This will advance you the the VERY last record, the help screen. You could change this record if you wanted, but it would not be accessible by jumping to the last record. This record is also not searched when using FIND. So don't change it, there is no need. This program is freeware. I don't expect any $ for it, just the comments of those who enjoy it. Anyone with suggestions for improvements or just general comments, may reach me at the following email address: jeoff@tamsun.tamu.edu Enjoy Fone Manager and let me hear your comments. I will be supporting this program, so any comments or bugs, etc will be fixed ASAP. @@GPRT SG IMPROVED PRINTING OF OBJECTS ON THE HP 82240A by Joe Horn Mini-Instructions: Either (a) Run GPRT alone, for normal-width printing, or (b) run ->STW first and then GPRT, for full-width printing. gibbonscr@yvax.byu.edu [Carl Robert Gibbons] writes: > It [the HP 82240A printer] still won't print most of > the greek letters, though (except for alpha, beta, and > mu.) I wonder if anyone has written a program which > will print _any_ of the HP48's characters to the > HP82240A printer. It would have to use the "print > graphics data" printer commands... Good idea! And it works great. Here's my first go at it. 3 GPRT 3 Graphically PRinT. Works like PR1 but uses graphic mode. Handles newline characters correctly, unlike ->GROB PR1. Especially useful for printers OTHER than the 82240B, e.g. the older 82240A, or Epson & LaserJet printers (with the appropriate EPSPRINT or PCLPRINT library installed in the HP48). INPUT: Any object. OUTPUT: Printer: Object is printed as it would look on the HP48. Stack: None (object is dropped, unlike PR1) Although you could more easily use Brian Maguire's ->GRB command from his UITL library (GD8), it uses too much memory to turn a long program into a huge graphic object. Warning: If you use this to print a program that contains any object wider than 27 characters, such as a long string or complex number, the printer will break up the line in the way wide *graphics* are broken into multiple sections, since GRPT is printing entirely in graphics mode. You could change the two occurrences of 2 ->GROB in the program to 1 ->GROB, and then objects could be very long, since they'd be printed in the tiny menu-size font. But then you'd lose all your lower-case letters, as well as the ability to read the printout! Of course, if you change the two occurrences of 2 ->GROB to 3 ->GROB, then the results will be larger characters and an equivalent of double spacing. Although cute, it eats thermal paper. Matter of fact, being a frugal sort, and hating to waste thermal paper, I wrote the following program to force the decompiler to use a line width of 27, which is the most that the thermal printer can handle. So if you want to use GPRT to list programs, and if you want to use the full width of the thermal printer, run the following ->STW ("to string, wide") *first*, and then run GPRT. Unfortunately, it's in System RPL. Fortunately, it works on any HP48 version to date. 3 ->STW 3 (called TOSTW on this disk) INPUT: Any object OUTPUT: Same as would be obtained from "" +, except newlines are inserted to create 27-char lines, not the usual 19-char lines. -Joseph K. Horn- EQU akcs.joehorn@hpcvbbs.cv.hp.com @@INFO48 S- INFO48, an informator for the HP48sx by felson_adj@csusys.ctstateu.edu [For S/SX only; use Memory Browser on G/GX instead] This is my first attempt at system rpl programming... but I think it turned out pretty usefull. function keys: up, down arrow move cursor line left shift up, down move by screenfulls right shift up, down go to first or last line alpha alphanumeric search enter for directory, go into it for link, dereference and go there for anything else, call HP editor backspace go back one directory. can only return to directory info48 was started from, (see updir, home) leftshift updir go to parrent of current rightshift home go to root directory menu commands CREAT create object, initialy with a null string CRDIR create dir leftshift CRDIR convert object to a directory rightshift CRDIR convert single item directory to an object CRLN create link go to target, hit CRLIN menu key or ON/abort to abort leftshift CRLN edit link COPY copy current object elsewhere... go to destination and hit COPY menukey leftCOPY reverse.... current object receives contents of selected object MOVE move current object elsewhere... go to other location and hit put/^ to put object above cursorline, or put \v to put object below cursorline. left-shift MOVE get object from elsewhere and put above cursor right-shift MOVE get object from elsewhere and put below cursor RENAME just like it sounds { move menu keys on second line } SORT SORT, thanks to Joe Horn's quicksort, 99% of time spent doing XEQORDER EXIT not really needed. ON/ABORT does same thing reorder operations are really really really slow. Please be patient... "REORDERING" message displayed to let you know INFO48 hasn't crashed. @@LASER66 PC LASER66.COM, a little Laser Printer utility. Many documents (including SMTK.DOC on this disk!) are formatted for 66 lines per page. But the HP LaserJet (and other printers, I suppose) default to 60 lines per page. It can be changed from the front panel, but that's a hassle. Just run LASER66 on your PC, and your laser printer will be set to 66 lines per page until the next RESET or power down. Try it: LASER66 TYPE SMTK.DOC > PRN Ahh, beautiful. -jkh- @@MEMU S- (Comp.sys.hp48) Item: 48 by kevin@moon.wustl.edu [Kevin Ruland] Subj: MEMU now works on rev J's [but not G/GX] Date: 19 Feb 1993 The bad pointer that caused the bomb in rev J calcs was found by Mika. I made the correction and had it tested. It works now. It reportedly works on rev D and J calcs and does not cause warm starts with QED nor [GRAPH]. Thanks for helping me find the problems. [But time marches on... MEMU crashes the G/GX! -jkh-] MEMU - not just another memory program. Yes, I too wrote a graphic display of memory usage. Actually I combined the best of MEMVIEW by Dan Kirkland and the PBYTES by Detlef Mueller. I call it MEMU for memory usage. It displays a bar graph representing system ram useage, including any merged ram cards, as well as free and used bytes, and a status line for both ports. The port status line will display any of "EMPTY", "size MERGED", "size RAM free", or "size ROM free". Here "RAM" and "ROM" indicate both the r/w status and that the memory is "free". MEMU is slightly larger that MEMVIEW (576 bytes compaired to 374), but I find it much more informative. I'd be happy to send the source to anyone interested. Thanks Detlef for making sysRPL enjoyable. Kevin Ruland kevin@rodin.wustl.edu @@PCT.LIB S- "PC TOOLS LIBRARY" Documentations will follow, because I think that hacking stuff should be provided with some. Anyway, it's seem they'ra safer than the ones on horn7/FRANCE. P.C.T : pctools lib, ID 986. Essential if you got a 128 card or two, just manage libs from ports to mem,IO... Have fun !!! [To date, no documentation has followed. You are on your own with this one! -jkh-] souiry@ismea.imt-mrs.fr or souiry@147.94.33.1 @@PIM100 SG (User.programs) Item: 372 by _nortaneous at hpcvbbs.cv.hp.com Author: [Jason Christopher Emery] Subj: Personal Information Manager Keyw: address information data phone Date: Tue Mar 24 1992 20:27 Lines: 17 Here's a quick, small graphical PIM. (Personal Information Manager) It's designed to allow for entry of phone numbers, addresses, names, and brief notes. The main point to the program is to provide a quick, easy way to store and retrieve information. There's a very remote possibility there's still some bug out there but the again, there always is. A small TXT file is included in the directory to show some information on the PIM. If you ever need to backup data, all you have to do is copy the DATA variable to wherever you need it. That's the only place user information is stored. Remember, as with most programs, only run the intended startup program(s). Running something else could result in some big problems. I don't expect anything possibly could happen, since I've tried it myself, but it could scare you there for a moment. :-) Anyways, I hope you can find this useful. That's what it's here for. @@RFP -G RFP: An HP48G/GX version of RF by Lutz Vieweg. An object packer. (RFU is the unpacker). Like PKZIP for the HP48G/GX. This version is for the G Series. If you have an HP48S/SX, then use RF as it has appeared on GD5, 7, or 8. If you want an object packer that works on BOTH the SX and the GX, then see COMPRESS.LIB above. RFP shortens RPL programs typically to about 60% of their size, ML programs about 70-80%, and graphics become smaller approximately like when you use the "GraphicObject compresser" published in the past. [Note: Lutz is referring to PGROB and UPGROB by Erik Bryntse, available on GD6. -jkh-] The instructions are rather brief: RFP . . . compresses an object in level one; if compression is impossible, the object is left unchanged on level 1. RFU . . . uncompresses a string created by RFP That's the whole thing! [Note: Do not be alarmed if the display turns off and the annunciators blink fitfully while RF is running. RF turns the display off on purpose (it can run faster that way) and uses the annunciators for scratch memory (which also provides you with something to look at while waiting). -jkh-] It's a good idea to put RFU in your HOME directory, so any program can unpack itself without problems. Hope to stay in contact, Lutz Vieweg. @@RFU -G RFU, a G/GX version of RFU by Lutz Vieweg. Unpacks objects packed by RFP; see RFP for complete details. @@SCH48v20 SG SCH48 VERSION 2.0 A SCHEDULER FOR THE HP48 by William J. Levenson AUTHOR'S NOTE I am very pleased with the way SCH48 has turned out, thanks to the many valuable suggestions I have received from users. Version 2.0 should be the last revision, barring any bugs which, of course, I will fix. It has been both an enjoyable and educational project and I am working on a few more. I hope SCH48 proves useful to you! UPDATES CHANGES FROM VERSION 1.2: * The TakeOver commands that were removed in version 1.2 have been put back. It turns out they are needed if SCHED is executed from the command line. This should have only caused the calculator to hang forcing you to do ON-C (a warm-start) without any memory corruption. No one complained about this so I guess no one executes SCHED from the commandline. * Repeating alarm capabilities have been added. Repeating alarms show up on the future days to which they will be rescheduled. The repeat alarms on future days can be switched off to improve speed. An "R" in the upper part of the display is shown in reverse if future repeat alarms are displayed. The description of the alarm to the right will have a "(RPT)" added to it if it is a future position of a repeat alarm. SCH48 recognizes only repeat intervals greater than one day. To display repeat alarms with shorter intervals would be cumbersome and, in my opinion, of little use. SCH48 can set repeating alarms with repeat intervals that are an integral number of days. Again, shorter intervals would be better served by using the built-in HP ALARM function. * Control alarms are now supported and can be edited and set within SCH48. The prompt is a little different for setting alarms. For appointment alarms, a string delimiter (") is required so that the alarm EXEC will be interpretted as a string. For control alarms, the argument on the command line must evaluate to a single object or it will be considered invalid. This can be any object (e.g. program, list, etc.). The command line will be evaluated as it would if you were inputting to the stack so 1 2 3 + + would store the real number 6 as the alarm EXEC << 1 2 3 + + >> would store this as a program in the alarm EXEC 1 2 3 + would be invalid because it left two arg's on the stack "1 2 3 + +" would set an appointment alarm with the string as the EXEC Get it? * Marks in the form of one pixel to the right of each day indicate an alarm set for that day. This display can be turned off for the sake of speed. A pixel in the upper part of the display will be shown in reverse if date marks are on. * More key definitions for scrolling and moving months and years. In general, unshifted and right-shifted arrow keys move the date cursor; left-shifted arrow keys scroll the screen; right- shift-OFF turns the calc off; right-shift NXT moves the time and date cursors to the current time and date; +/- key toggles the future repeating alarm displays; EEX key toggles whether days with alarms are marked with a pixel. Other keys behave the same as before. CHANGES FROM VERSION 1.1: All the sys-RPL TakeOver commands were removed from the key definitions. This results in a savings of over 50 bytes. I have investigated whether the TakeOver commands are needed and came to the conclusion they are not for this application. This change has not given me any problems but no one has definitively explained the useage of TakeOver. If someone has a problem with this or can think of a possible problem, please let me know. Thanks! CHANGES FROM VERSION 1.0 (ORIGINAL VERSION): Two minor bugs were found and fixed. One involved the STD mode setting on the HP48. In version 1.0, the calender display was unless STD mode was used. This has been fixed. The other bug involved update of the appointments when keys were quickly pressed. Sometimes, the appointments would not match the day. Noone seems to have noticed this, but I did and it is fixed. Two features were added. A copy function copies an entire alarm to a different day. This is intended to compensate for the lack of repeating alarms in SCH48. Try this option to see if repeating alarms are still necessary. Let me know...Is this good enough or should I work on the repeating stuff? The scanning of repeating alarms to correctly indicate them on future dates might slow SCH48 down - how much, I don't know yet. An edit feature has also been added to allow you to change the alarm text without deleting and resetting. I found this handy. DESCRIPTION SCH48 is a library written entirely in system RPL and ML which allows the HP48 to function as an electronic "DAYTIMER". The intent is to replace the "ALARMS" catalog in the HP48 for a more useful and intuitive representation of appointments, events or blocks of time. SCH48 uses the existing ALARM functions built into the HP48. BUT...the user interface is improved (I hope). The SCH48 library contains two commands, D->CAL and SCHED. D->CAL merely takes a date from the stack and displays the calender for that month. The stack diagram is: ( date ) where "date" is in MM.DDYYYY or DD.MMYYYY format, depending on the HP48 setting. If YYYY is omitted, the current year is assumed. If a whole real number is input, it is interpreted as the month of the current year. SCHED is the primary function of the library. When this command is executed, a calender is displayed with the current day highlighted. To the right of the calender is a listing of the current ALARMs that are scheduled for the day. These alarms can be entered as a single point in time or as a block of time. The time or block of time is reflected in the listing of alarms. Below the calender is a 24 hour time-line which shows the times of the listed alarms blacked out. In this way, you can see graphically, how much of your day has been scheduled. I have attempted to present as much data as possible on a single screen for quick viewing, but the alarm text listings may extend beyond the window. Scrolling is provided for this. Once the SCHED is started, it is fairly self-explainatory. Alarms can be set, deleted (and acknowledged), moved, and edited. I have tried to make the functional keys intuitive. I thought about adding a help function but it seemed to be a waste of memory, so I'll leave it to you to read the documentation. KEY DEFINITIONS NO SHIFT KEYS: KEY DEFINITION {A} Scroll the screen fully to the left (JUMPLEFT) {F} scroll the screen fully to the right (JUMPRIGHT) {up arrow} {down arrow} {left arrow} {right arrow} Move the date cursor on the calender {NXT} Go to the next alarm {ENTER} Set the alarm - the user will be prompted for the alarm text. If a time has been marked (see {*} key), a block of time will be set; if not, a single time will be set. ATTN at the prompt will erase the contents of the command line if it is present. ATTN without a commandline, aborts the setting of the alarm. ENTER enters the alarm text. {DEL} Deletes the alarm if the time cursor is pointing at an alarm block on the timeline. If the time cursor is not pointing at an alarm, a error beep will be generated. {LEFT-SHIFT} Activates left shift mode {RIGHT-SHIFT} Activates right shift mode {*} (This is the "multiply" key) sets one end of a block of time on the time-line. {ENTER} determines the other end of the block of time. {-} Moves the time cursor 15 minutes to the left (hold down for repeat) {+} Moves the time cursor 15 minutes to the right (hold down for repeat) {+/-} Toggle the display of future repeat alarms {EEX} Toggle the display of marks on days with alarms ATTN Ends SCHED LEFT SHIFT KEYS: KEY DEFINITION {up arrow} {down arrow} Scrolls the screen up and down. This is necessary if a lot of alarms are set on a single day (the listing may extend beyond the bottom of the screen). Hold the key down to continue scrolling. {right arrow} {left arrow} Scrolls the screen left and right. Hold the key down to continue scrolling. {PREV} Go to the previous alarm {LEFT-SHIFT} Disables left shift mode {RIGHT-SHIFT} Activates right shift mode {-} Moves the time cursor 1 minutes to the left (hold down for repeat) {+} Moves the time cursor 1 minutes to the right (hold down for repeat) {EDIT} Edits the EXEC of the alarm that the time cursor is pointing to. ATTN at the prompt will erase the contents of the command line if it is present. ATTN without a commandline deletes the alarm. If you enter the EDIT function, and change your mind, ENTER will reset the alarm with the text indicated. Or, you can attention out of the EDIT and reset the alarm with the {LEFT SHIFT - ENTER} function. CONTROL alarms cannot be edited this way. If you accidentally try to edit a CONTROL alarm, ATTN out of the EDIT and reset the alarm using {LEFT SHIFT - ENTER}. {ENTER} Copies the alarm from the last DEL, NXT, PREV EDIT, or ENTER command to the current day. Use this feature to move, copy (repeat), an alarm by using one of the above commands to indicate the alarm of interest, move to a different day and set the alarm with the same time block and EXEC on that day. CONTROL alarms can use this too. RIGHT SHIFT KEYS: KEY DEFINITION {up arrow} {down arrow} Move the date cursor 4 weeks at a time {left arrow} {right arrow} Move the date cursor 1 year at a time {LEFT-SHIFT} Activates left shift mode {RIGHT-SHIFT} Disables right shift mode {NXT} Move time and date cursors to the current time and date {-} Moves the time cursor 1 hour to the left (hold down for repeat) {+} Moves the time cursor 1 hour to the right (hold down for repeat) {OFF} Turn calculator off FEATURES, LIMITATIONS, AND BUGS??? An alarm can be moved by first deleting it. The alarm text is copied and will be the default the next time an alarm is set. Use this method if the time needs to be adjusted. If you only want to change the day, use {LEFT SHIFT - ENTER} An alarm can be copied by going to it by means of {NXT} or {PREV}. Again, the text will be copied and offered as a default the next time an alarm is set. Again, if only the day is to be changed, use {LEFT SHIFT - ENTER} To delete an alarm, move the cursor to the alarm block or use {NXT} or {PREV} and press {DEL}. An alarm may not show up on the time-line of it is a block alarm which spans less than 7 minutes. It cannot be edited or removed in SCH48 either. I didn't think this was much of a limitation, but if you don't like it, I can fix it. CONTROL ALARMS can now be set using SCHED. Any alarm EXEC that is not a string is set as a control alarm, just as the HP internal alarms work. The alarm EXEC must be a single object. The input line is treated just as the command line is treated when in the stack display. If more that one object result from the input line contents, an invalid EXEC error will occur and you will be prompted to alter the input. In most cases, the EXEC will be either a string, which must be surrounded by double quotes, or as a program which must be surrounded by << >>. The default prompt starts with two double quotes so that appointment alarms can be input easily. Remember, if you start over with ATTN to erase the input line of an appointment alarm, you must add a double quote mark. REPEAT alarms with repeat intervals that are an integral number of days can also now be set in SCHED. To do this, you must use the * (or multiply key) to mark the day to set the repeating alarm on (this also sets the endpoint of the alarm span but if the time cursor is not moved, the time span will be zero). Now, move to the day you wish to have the first repeat alarm appear and press ENTER (you can also move backwards the number of days you wish the time interval to be). The copy function is still available using left-shift-ENTER if you prefer that over the repeat alarms. SCHED should operate correctly with any HP48 time/date settings. I primarily use a 24 hour clock and MM.DDYYYY settings and haven't experienced any problems. Alarms not set from inside SCHED should work fine with the following exception. In order to set block times, the alarm time is set with the "begin" time as the time of the alarm. The end time is indicated by the fractional seconds of the alarm time. That's not clear, how about an example: An alarm from 8:15 a.m. to 11:45 a.m. is set with an alarm time = 08.15001145 If an alarm is created with arbitrary fractional seconds, the time-line may end up looking a little strange but no damage will be done. This carries with it another minor limitation that the end time of the alarm will be rounded to the nearest 5 minute interval. This is necessary because of accuracy problems with those fractional seconds (trust me). I may be able to fix this if enough of you wish it. Past due alarms will be acknowledged when they are deleted from within SCHED. The alarms will behave just like the HP48 handbook describes for appointment alarms. If you don't want the beeper going off, set flag -57. The display of marks on the days with alarms can slow SCH48 quite a bit when moving from month to month. Also, the display of future repeating alarms can slow things. For instance, if you have a repeating alarm with an interval of one day, every day will have a mark by it indicating that this repeating alarm will show up each day. If you want the marks but don't want the future repeat alarms, hit the +/- key to toggle this function. Then, only the original alarms will be shown with marks by the day and on the right side of the screen where the current days alarms are listed. If you don't marks at all (a lot of alarms will also slow things down a bit), then toggle this function using the EEX key. Both function are indicated in the upper part of the screen with an inverse "R" for the repeat function and an inverse single pixel for the mark function. If these are not shown in reverse, then they are off. The start up state of the mark and repeat functions is set by the system flag -43 (reschedule unacknowledged repeating alarms - if set, alarms are not rescheduled) and system flag -59 (fast catalog display - set and the marks on the dates are not initially shown). So if you don't use repeating alarms, things will be a little faster in SCH48 if you set flag -43. And if you don't want the marks, set flag -59. If these functions are toggled from withing SCH48, the system flags will be unaffected. CREDITS SCH48 was written in system RPL and ML using the excellent RPL48 package written by Detlef Mueller and Raymond Hellstern. The SCH48 library was created using <-LIB->, again by Detlef Mueller, Raymond Hellstern, Rick Grevelle. THANKS to all of you for a tremendous contribution to the HP48 world!! Thanks also to HP for the RPL TOOLS and, especially, the RPLMAN documentation. And, of course, thanks to HP for such a versatile calculator. Thanks to Mika Heiskanen and other contributors to the entries lists that were posted at seq.uncwil.edu. Thanks to Jan Brittenson, whose MLDL was a great help. Thanks to Chris Spell for his tireless maintainance of comp.sources.hp48 and the archives. And thanks to all the helpful 48'ers who helped me get this far. I hope this will be a useful partial payback with, hopefully, more to come. DISCLAIMER I have not had any problems with SCH48 while using it on my HP48-D but...It does contain some unsupported entry points. Although they have appeared on several of the "entries" lists, that doesn't guarantee that they will work the same on other revisions of the HP48. With that in mind...Have fun SCHeduling and certainly let me know of any problems! COPYRIGHT NOTICE Copyright (c), 1992, W.J. Levenson. Permission to copy this article is granted provided that the copies are not made or distributed for resale (excepting nominal copying fees). Other permissions can be arranged by contacting W.J. Levenson via email at the following address: akcs.levenson@hpcvbbs.cv.hp.com or by U.S. Mail at 12558 Caminito Mira Del Mar San Diego, CA 92130 USA SCH48 is distributed in the hope that it will be useful, but WITHOUT *ANY* WARRANTY. This software is LET-ME-KNOW-WARE. Please let me know if you like it or not and any improvements you would like to see. But MONEY will be accepted in lieu of the above!! INSTALLATION To install SCH48, a) download the ASC version, execute ASC->, or b) download the uudecoded version and recall it into the stack. Purge the variable which contains the orginal copy. Enter the port number (0,1,2) where you want to store SCH48 and press STO. Switch the HP48 off, then on again. SCH48 will now be installed. SIZE = 4854.5 bytes HP48 CHECKSUM = # D4FBh @@SMTK S- SmartKeys version 1.59 by Simone Rapisarda. Upgrade from version 1.23 which was on GD7. This brief description written by Joe Horn. For S/SX only. G/GX version is not yet available. Facilitates the creation, management, and deletion of system-level key assignments and menus. Allows multiple custom menus. This is one of the libraries that is ALWAYS in my HP48 SX, it's so useful. The complete documentation is over 70K, and formatted to 66 lines per page (see LASER66 above), with table of contents. It's too big to fit in this DOC viewer. If you go into the UTILS subdirectory on this disk, and copy the SMTK.EXE program onto your hard disk and run it there, it'll create the document. Then you can view or print it with the LIST.COM program, also on this disk. @@TELE32 SG TELEPHONE LIBRARY V3.2 By David Bal 9/1/93 *** THIS PROGRAM WILL WORK ON THE HP48.GX ** This is another telephone library. It is a menu driven program that stores the data file as a backup object in any port you choose. This allows the user to keep the original 30k of RAM free of misc. files. One draw back from this format is that the program requires about two times the size of the data file ($TELE) in free RAM to run. This means that if your data file is 5K long you need >10k to fully use the library. The library will run all applications at lower memory levels but editing, adding, or purging from the data file will not be possible. I. Downloading the library 1. Run KERMIT on your PC and connect the calculator 2. Type SET PORT 1(or what ever port) 3. Type SET BAUD 9600 4. Put your calculator in KERMIT SERVER mode by pressing right-shift PRG on the S/SX, or right-shift right-arrow on the G/GX. 5. Send the library by typing SEND TELE.LIB 6. After a few seconds the transfer will be complete 7. Using the BYTES command check if the library is 4473 bytes with a checksum of # 5D05h II. Starting the library 1. After downloading recall 'TELE.LIB'. Your stack should Show 1: Library 1103: TEL... Type 0 STO to store it into port 0. 2. After storing the library in port 0 you can erase the other copy by typing 'TELE.LIB' PURGE. 3. Now shut the calculator off and turn it on. 4. The library will self-attach. 5. Press LIBRARY and TELE should appear named "TELE V3.2 (c)93 David Bal" 6. The only command in the library is TELE which activates the telephone directory. III. Creating a storage variable (named $TELE) 1. After activating the telephone directory the main menu should appear like: TELEPHONE DIRECTORY ->Browse All Add New Person Search By Last Name Search By First Name Search By Phone Numb.. Search By Street Add... EXIT 2. If you have never added anyone to the data list you will need to create a data file. By pressing enter from the main menu (it does not matter which element the arrow is pointing to) you will be asked where you want the empty data file to be stored. All available ports (0,1,2)will be options. Press 0 for port 0 (most people will do this) 1 for port 1 and so on. IV Active Keys 1. The up-arrow and down-arrow will move the pointer up or down one element. 2. Left-shift up or down arrow will move the pointer up or down six elements respectively (if the list size if < 12 The pointer will move to the top or bottom if the list.) 3. Right-shift up or down arrow will move the pointer to the top and bottom of the list respectively. 4. ENTER and [right-shift] [+/-] will view the current item. 5. ON will exit the program in all cases except when viewing an item. V Adding a new person to the list 1. There are two ways to add a new person. Adding from the main menu or adding from a browse screen by pressing NEW. 2. The input cursor is on alpha-lock. 3. After imputing the eight elements. Any or all can be left blank. The new file will be displayed as if being viewed. If it is acceptable press ENTER. If you wish to edit press any other key (ATTN will do). The same eight input questions will be asked with your old input already there. VI. Browsing All 1. After choosing browse all your entire list of names will be put onto the browser. If you have no files it will tell you so. 2. Six new hot keys will appear. EDIT, NEW, PURG, ->STK, PRINT, and UP. 3. EDIT will edit the file and replace the old one with your new one. This is just like Adding a new person. 4. NEW will add a new person 5. PURG will ask you if you really want to delete the person. Press [ENTER] to delete. Any other key to abort. 6. ->STK will ask you "SEND WHAT?" press ALL or ONE. If you press ALL the entire list will be sent to the stack displaying the % complete. 7. PRINT is much like ->STK. By pressing ONE will print the person at the pointer. ALL will print the entire list displaying the % complete. 8. UP will move you to the main menu. VII. Searching 1. When searching for a particular string the program looks for any element that has the same beginning characters. EX. Search By First Name First Name Je The program will find all people whose first names begin with "Je". "Jen", "Jennifer", even "Jeneseque" will be accepted. This current version does not except wild card characters. The program is caps sensitive. 2. While the program is searching the number found will be displayed along with the % complete. If you are satisfied with the # found you can press ATTN to abort further searching and browse the ones found. For example if you are searching for "Fred" and know that you only have one "Fred" and the program has displayed "1 found" you can press ATTN and browse the one found. The searching program searches in reverse alphabetical order (from Z to A). VIII.Last Words I, David Bal, express no warranty for this program. Even though I have thoroughly tested the program it might contain a devastating bug. Always keep a current backup of all memory before testing it. This program is released as FREEWARE. David Bal Smail: 514 SW 34th St #17 Gainesville, FL 32607 Email: yoda@ufcc.ufl.edu or yoda@hpcvbbs.cv.hp.com @@TIMEKEEP SG (Comp.sys.handhelds) Item: 532 by edp at deland.enet.dec.com Author: [Eric Postpischil] Date: Sun Jul 01 1990 [Note: The HP48's clock isn't terribly accurate. So HP wrote a program called 'CLK' (on Goodies Disk #8) which "kicks" the clock every so often to correct for the clock's drift. But 'CLK' is 2K in size and a tad unwieldy to use. So Eric wrote a better clock adjuster. -jkh-] Here's a set of timekeeping routines that compensate for inaccuracy in the 48's clock. (They could also be used to keep sidereal time.) In a list called CLKDAT (clock data), there are, in order: o The value of TICKS at the start of some reference period. o The cumulative number of ticks added to the clock since then. o The difference between true time and clock time as a fraction of the number of elapsed clock ticks (called "accuracy factor"). The following routines are provided: KICK Called with no arguments to update the clock by the correct number of ticks. ADJT Called with a unit object specifying an amount of time by which to change the time zone or system. E.g., call ADJT with -1_h on the stack to change from Daylight Savings to Standard Time. ADJC Called to adjust the clock by a specified number of ticks. Once the clock is set exactly with ADJC, EXACT should be called or the data will be lost when KICK is next called. EXACT Uses the cumulative number of ticks added to the clock, by KICK and by ADJC, to compute a new accuracy factor. SCHEDULE Schedules an alarm at 4 a.m. to call KICK daily. CANCEL Cancels the alarm. RESET Set a new reference time and discard cumulative ticks added. Keep the old accuracy factor until a new one is computed. To use these timekeeping routines: o Set the time with the built-in functions. o Make the clock as exact as desired with CLKADJ. o Execute RESET (no arguments). o After using RESET, do not use the built-in time adjustment commands. o Let time pass. o Make the clock as exact as desired with ADJC. (ADJC takes as an argument a number of ticks, just as CLKADJ does.) o Execute EXACT. o Execute SCHEDULE. Every night at 4 a.m., KICK will update the clock. After the initial setting, you can update the accuracy factor by again adjusting the clock with ADJC and executing EXACT. If your calculator's environment changes, you can establish a new reference time by making the clock exact and executing RESET. This keeps the current accuracy factor but resets the reference time, so the next execution of EXACT will base the new accuracy factor on the time elapsed since RESET. To change time zones or systems, use ADJT. o If you call ADJC by accident, call KICK to correct it. o If you call ADJT by accident, call it again with the negation of the argument. o If you call EXACT by accident, you are out of luck unless you have another copy of your accuracy factor. If so, replace it in CLKDAT. KICK makes the clock correct by computing the number of ticks to add to the clock to make it correct now: (accuracy factor)*(TICKS - reference time - added ticks) - added ticks Because this calculation is used rather than simply adding a fixed number of ticks at regular intervals, KICK can be called at any time, at frequent or infrequent intervals. Updating the clock daily keeps it close to the correct time. You can change the time of the alarm and the repeat interval in the SCHEDULE routine. (Be sure not to set a time that is skipped over. E.g., if you set the KICK alarm for 3 a.m. and also have an alarm that adds 1 hour to the clock at 2 a.m. for the change to Daylight Savings Time, then the clock will go from slightly after 2 a.m. to slightly after 3 a.m., and the KICK alarm will not be executed or scheduled for the next day.) SCHEDULE uses AO (alarm object) as the object for the alarm to execute. This object discards its argument, gets the current path, executes an object called JOB, restores the current path, and turns the calculator off. If an error occurs, the error message is left in the stack before shutting the calculator off. If a variable called JOB does not exist when SCHEDULE is executed, it is created as a list specifying the current directory and the KICK program. If you would like to add additional routines to be executed, add them to the list in JOB. JOB is created in the home directory but can be moved to any port. If you need to make more complicated changes, like removing the call to OFF, execute CANCEL, change the AO variable, and call SCHEDULE. KICK can be modified to adjust the clock so that it will be correct at some time in the future. E.g., you could arrange it so that KICK runs at 4 a.m. and adds the number of ticks needed to make the clock correct at 4 p.m. By doing this, the clock is early part of the day and late part of the day, instead of only early or only late. This cuts in half the frequency with which KICK must be executed to keep the clock within a specified distance of the correct time. To make this modification to KICK, add the number of ticks to the number in stack level one just after the call to PA. For example, to adjust KICK to prepare the clock to be correct in 12 hours, put 353894400 + after the call to PA in KICK. @@TOSTW SG TOSTW ( ->STW ) "To String, Wide" by Joe Horn Same as "" +, but inserts newlines at wider positions, especially useful with the HP 82240 thermal printer. Intended for use with GPRT. See GPRT above for full documentation. @@XYMODEM2 S- (Comp.sys.hp48) Item: 1841 by alou@elde1.epfl.ch [Maurice Alou] and westphal@elde.epfl.ch [Edouard Westphal] Subj: X&Y Modem v2.2 for Hp48S/SX Date: 05 Oct 1992 [For S/SX only; XMODEM is already built into the G/GX] X&Y Modem v2.2 for HP48 [Note: This obsoletes the XYMODEM.LIB on Goodies Disk #7. -jkh-] CHANGE FROM v2.0 : -The bug in ERRSET/ERRTRAP has been fixed. -The XLIB names have changed ! sorry. CHANGE FROM v2.1 : -The bug concerning the IOPAR has been fixed. [Namely, now you don't need to worry about IOPAR at all. -jkh-] -The program checks battery level before beginning the communication. SETUPXYM : CRC : toggle flag 57. If flag is true then CRC else CHK. Used only with XModem in reception (CRC is automaticaly choosen with YModem) REPL : toggle flag -36 (see manual) EXIT : do a lastmenu SENDM : Send with X or Ymodem depending on the first stack object : 1: global_name/local_name -> 1: list uses Ymodem Equivalent to SEND Kermit command example: 'ABC' 1: :IO:name -> 1: list uses Ymodem Equivalent to ARCHIVE example: :IO:Sep3 1: :port#:name -> 1: list uses Ymodem send a library or a Backup object example: i/ :0:1275 ii/ :&:ABC 1: list -> 1: list uses Ymodem send one or more objects listed above example: { :IO:Sep3 :0:1275 :0:1092 FFT } 1: any -> uses Xmodem if the object isn't of a type listed above, it will be sent with XModem protocol (see remark below). The output list contains the unsent objects (the files not found in the current path). RECX : Receive with XModem protocol. Flag 57 specify CRC or CHK. This command is usefull to receive a library on stack. -> 1: object RECY : Receive one or more files with YModem protocol. This command is equivalent to the RECV command of Kermit. -> REMARKS: (1) Sending an object from the HP48 to a PC with Xmodem protocol (not Ymodem protocol) is not a good idea: this object cannot be received from HP48 with the standard RECV Kermit command. Why? Because Xmodem doesn't send the file header which contains the size in bytes of the object. This information is used by Kermit's RECV command to check if the file has been corrupted. So a file sent with Xmodem can be received only with Xmodem and Ymodem, not Kermit. In conclusion: - a file sent with Ymodem is safe: you can receive it later with Kermit, Xmodem and Ymodem protocol. - a file sent with Xmodem is not safe: you can receive it with only Xmodem and Ymodem protocol. (2) X&Ymodem automatically selects the serial port for the communication, and transfers are made in binary mode. So flags -33 and -35 have no effect. You can choose the speed (9600, 4800, 2400, 1200) in the SETUP submenu of the IO menu. (3) You must set the size of a block to 128 bytes (short block) in the configuration of your comunication program in your PC. KNOWN BUG : None. CREDITS: Hewlett-Packard for their Tools. Alonzo Gariepy for his Saturn Processor Notes. Jan Brittenson for his Star and his MLDL library. Detlef Mueller, Raymond Hellstern and Rick Grevelle for their Library constructor. Chuck Forsberg for his notes on the protocols XModem and YModem. And to all people who gave us a lot information about Hp28, 48 on mail, news and FTP-server. Maurice Alou & Edouard Westphal alou@elde.epfl.ch westphal@elde.epfl.ch Do a backup with the standard ARCHIVE before using the library! Library name : X-Y Modem v2.2 Library ID : 1275 Size : 3550 Chk : # 65E9h [Note: Despite their warnings, I've never had the XYMODEM library cause me any grief, except that Ymodem sometimes seems to fail for no apparent reason. I use this library on all but the smallest files. -jkh-]