Organizer v1.0 Personal Organizer for the HP48 S/G/Sx/Gx calculator written in 85% SysRPL, 15% ML (c) 1996 by Jack Levy 0.0 INDEX ========= 1.0 Description 2.0 Disclaimer 2.1 Email-Ware 3.0 Installing the Library 3.1 Installing the Holidays Datafile 3.2 Library Information 4.0 Library Usage 4.1 The Calendar Display 4.2 Using the Calendar/Scheduler 4.3 Calendar/Scheduler Key Listings (Quick Reference) 4.4 Using the TODO Manager 4.5 Using the Phone Database 4.6 TODO/Phone Database Key Listings (Quick Reference) 4.7 Data Maintenance 4.8 Database Structure 5.0 Removing the Library 5.1 Credits 5.2 Version History 1.0 DESCRIPTION =============== Organizer is a library designed to act as a Personal Information Manager, or PIM. The goal is to create a high-speed, easy to use, compact, yet fully functional PIM for the HP48. Organizer provides the following capabilities: * Calendar: High speed calendar in natural form which displays any month in the year range of 1580 to 9999. Status area providing the current date, time, and several other statistics. MANY different forms of navigation. * Appointments: Edit and display appointments/daily TODOs of an unlimited length for any given day. Calendar modified to reflect appointments. * Annual Events: Edit and display annual events which will show up on any given day every year. Included annual holidays file. * TODOs: High speed browser with fast ML selector routines. Capable of holding an unlimited number of TODOs, each of an unlimited length. Both full screen and header navigation. * Phone Manager: Automatically sorted database of names, phone numbers, and addresses. View by name, or by full entries. * Fully integrated FIND features for all modes. * Support for external databases, including ROLDX, FONEMAN, and DBASE. * Commands for easy backup/restoration/purging of all data. * Intuitive interfaces for fast, easy usage. 2.0 DISCLAIMER ============== Organizer and its attached documentation are provided "as is", and are subject to change without prior notice. The author gives no warranty of any kind with regard to the software or documentation, either expressed or implied, including, but not limited to, the implied warranties of merchantability and fitness for a particular purpose. The author shall not be held liable for any damages, including any general, special, incidental, or consequential damages arising out of the use or inability to use any or all of the included programs. Use of any part of the Organizer library code is not allowed for any purpose, except, of course, when used directly from the Organizer library. You may not reproduce or modify any part of the Organizer library code without prior written permission from the author. Permission to copy the Organizer library as a whole, unmodified package is granted provided that the copies are not made or distributed for resale (excepting nominal copying fees). 2.1 EMAIL-WARE ============== The Organizer library is "Email-ware". What does this mean? If you like this program and use it regularly, you must send me an email message. (Not too steep, huh?) The idea is simple: If I know people are using this library, I will be more inclined to update it and write new programs. My internet address is jlevy@nyx.net. My CompuServe ID is 73267,235. 3.0 INSTALLING THE LIBRARY ========================== To install Organizer in your HP48, follow these steps: 1. Transfer the library to your HP48 using Kermit/Xmodem/etc. 2. Press the soft-key associated with the library file (ORG10.LIB). "Library 1144: Org..." should now be displayed on level1 of the stack. 3. Purge the ORG10.LIB variable, leaving the library on the stack. 4. Enter the port number you want to store the library into. Note: For S/G users, this number must be 0. For SX/GX users, the library can safely be stored in any port. However, for GX users, it is recommended that you store it in either port 0 or 1, as execution from a covered port is slower. 5. Press STO. 6. Turn the calculator off and then on again. To access the library, press right-shift-library (2), and then NXT until you see "ORGA". Press the corresponding soft-key to access the ORG menu. It is suggested that you assign Organizer to the RS-[4] (TIME) key, as Organizer provides alternative environments for changing the current Time/Date. You can do this by typing the following commands: { ORG } HEAD 72.3 ASN To use this key assignment, you MUST be in USER mode (changed by pressing LS-Alpha). Then, to run Organizer, all you have to do is press RS-[4]. 3.1 INSTALLING THE HOLIDAYS DATAFILE ==================================== Organizer comes with a data file of holidays which occur on the same day every year. You can optionally load this data into ORG two ways: As a New Datafile ----------------- If you haven't entered any data into ORG yet, you can simply use the holidays file as a new datafile. To do this: 1. Transfer ORG10.HOL to your 48. 2. Recall the ORG10.HOL data to your stack (by pressing the variable key). 3. Run ->DAT, either from the library menu or by typing it in. Confirm with the "YES" key. 4. Purge the ORG10.HOL file (it is no longer needed). Note that this will overwrite ALL data (Appointments, Annual Events, TODOs, Phones), so do not use this method unless you haven't entered anything. Replacing Your Current Annual Events ------------------------------------ If you have already entered Appointments/TODOs/Phones, you may OVERWRITE your current annual events with ORG10.HOL. To do this: 1. Transfer ORG10.HOL to your 48. 2. Recall the ORG10.HOL data to your stack (by pressing the variable key). 4. Run DAT->, either from the library menu or by typing it in. 5. Run the following program, or type/press the corresponding functions. << SWAP 2 GET 2 SWAP PUT >> 6. Run ->DAT, either from the library menu or by typing it in. Confirm with the "YES" key. 7. Purge the ORG10.HOL file (it is no longer needed). 3.2 LIBRARY INFORMATION ======================= Size : 9886 bytes Checksum : #40ACh [#16556d] Version : 1.0 Library Number : 1144 You can check these numbers by putting the library on the stack and pressing LS-[VAR] [BYTES]. The above statistics correspond to the distributed version, and if they do not match your results, your copy of the library may have been modified. Organizer has been tested on a G Revision R, GX Revision R, and SX Revision J. However, as always, you should BACKUP YOUR MEMORY before running this application. 4.0 LIBRARY USAGE ================= There are five commands in the Organizer library, each is described in detail throughout the documentation: [ORG] - Loads the main program and displays the calendar. [DAT->] - Recalls the data file to the stack. [->DAT] - Overwrites the current data file with one on the stack. [PDAT] - Erases ALL current data in your data file. [OINFO] - Informational screen with my name and email address. 4.1 THE CALENDAR DISPLAY ======================== When you first load Organizer, you are brought to the main calendar display screen with the current date selected. The screen looks something like this: DECEMBER '95 [-SU-MO-TU-WE-TH-FR-SA--------------] 1 2 12/21/95 <- Current date 3 4 5 6 7 8 9 09:37:07P <- Current time 10 11 12 13 14 15 16 17 18 19 20 21 22 23 APP ANN <- Scheduler indicators 24 25 26 27 28 29 30 31 [0] <- #Days from today [354/10] <- #Days past/#Days left in year Most of the information should be self-explanatory. At the top of the screen, you will see the current month/year, with the calendar below. In the "status area" to the right, there are a few bits of information, described above. Currently, ORG will only work with a MM/DD/YY date format. When ORG is run, the system flag is toggled to this mode, and all entries must be formatted in this manner. The flag is returned to its previous state when you exit ORG. All indicators are updated after each key press. The clock is therefore not running, in order to conserve battery power and increase speed. Because all keys repeat, the status area is not updated until a key is actually released. There are several ways to navigate the calendar. All four arrow keys will move accordingly. In addition, the ['] (HOME) key will return you to the current date. [4] [6] will move to the next/previous days in which you have appointments (within a month only). [+] [-] will go forward/back a month, and [*] [/] will go forward/back a year. If any of these four keys change to a non-existing day (i.e. going forward a month from january 30), the day will be set to the closest existing day in that month. This change is automatic and does not require display updates/redraws. NOTE: ALL NAVIGATIONAL KEYS REPEAT!! This makes quick navigation very easy. Simply hold down a key and watch your cursor fly across the screen. In addition, if you quickly single-press any of the arrow keys, the status area will not be updated until you stop pressing this key. This allows for fast movement, whether you prefer repeating keys or individual movements. The menuline also contains two navigational keys, which you can access with the [NXT] key: [JUMP] will move forward/back any number of days, and [GOTO] will goto a certain date. There are also a few miscellaneous functions in Calendar/Scheduler mode. For example, pressing [RS]-[4] (time) will adjust the HP internal clock. Pressing [LS]-[4] will adjust the internal date setting. [EVAL] will bring up an info screen with my name and email address. [RS]-[ON] will turn off the calculator, and [ON] will exit Organizer. 4.2 USING THE CALENDAR/SCHEDULER ================================ There are a few central ideas around how the Calendar/Scheduler is arranged. In Organizer, the two are closely integrated, with an almost identical set of navigation/functional keys. Almost anything that works on the calendar will also work on the scheduler, and vice versa. Therefore, all navigational keys which were just described are still functional in scheduler mode! The scheduler has the capability to handle the following two items: Appointments/Daily TODOs - Either timed appointments, or just bits of information/reminders for the current day. This could be anything you want, such as business meetings, homework, etc. Annual Events - Some kind of an anniversary, holiday, etc. If you enter something into this field for a given day, the scheduler will display that annual event on that day every year. This makes it easy to insert someone's birthday and have yearly reminders of it, without having to put them in the Appointments entry every year. To change between calendar and scheduler, use the [ENTER] key. The scheduler display looks something like this: [-------THU 12/21/95 10:11:30P------] -> Annual Event ------------------------------------- Appointments/Daily TODOs . . . . ------------------------------------- On the top of the screen is the title bar with the selected date and a clock. On the second line is where the annual events are displayed in smallfont. If there is no annual event, this line is left blank. There is then a divider line, and the rest of the screen is left open for user-created Appointments and TODOs. This part of the screen can be scrolled up and down with the [8] and [2] keys. In addition, the [LS]-['] (up) key will return you to the top of the appointments list. Creating Appointments and Annual Events is done via the menukeys [->APP] and [->ANN], respectively. The prompts will hold the current data for those fields, or a blank prompt if you are creating a new entry. Pressing [ON] at either of these prompts will abort. The annual event can only be one line long, but it is displayed in smallfont, so you can often fit a lot in the given space. The appointments, on the other hand, may be of an unlimited length, but only 22 characters in width. When in the editor, you may add a line to the appointments by pressing [RS]-[.] (the the newline key). You can add an unlimited amount of lines, as the appointments screen can be easily scrolled with the [8]/[2] keys. Once you have entered something into these fields, they will be displayed in their appropriate locations. If you press [ENTER] to return to the Calendar, you will see that tick marks are now located to the upper-right of some of the day numbers. Organizer will put tick marks next to any day with any appointments or annual events. This is where the APP/ANN indicators to the right come in. Move the selector to a day in which you have an appointment, and the APP indicator lights up. Move the selector to the day in which you an annual event, and the ANN indicator lights up. If you have both on one day, both indicators will light up, and if you have neither, they will stay off. This way, you can navigate the calendar screen with your selection box, move to a day with a tick mark, and quickly assess what you have have on that day. You can then use the [ENTER] key to "zoom in" on that day, and get more details. Maintenance of appointments/annual events is quite simple. Pressing the [DEL] key on any day will delete that day's appointments. Pressing [LS]-[DEL] (clear) will, after a confirmation prompt, delete all appointments in that month. Pressing [LS]-[EEX] (purge) will delete that day's annual event. There are two search functions in Calendar/Scheduler mode. You can search through your appointments for any string by pressing the [ALPHA] key or the [FIND] key in the menuline. This search is case sensitive. Note that FIND will start searching from the beginning of the month, and stop at the end of the month. Pressing [LS]-[ALPHA] or [LS]-[FIND] will act as a "FIND NEXT" and search for the next occurrence of a string. This search will always start from the current date. Note that "FIND NEXT" does not cycle through the month; if there are no more appointments after the current date, it will intentionally beep. Also using the FIND engine are the [4] and [6] navigational keys, which will skip to the previous/next days in this month which contain appointments. In the second page of the menuline (accessed by pressing the [NXT] key) there are three external support keys. [ROLDX] will load the Roldx Library, [FMAN] will load the Foneman Library, and [DBASE] will load the DBase Library. These keys are intended to provide the option of having another database, and will simply beep if the libraries do not exist. 4.3 CALENDAR/SCHEDULER KEY LISTINGS (QUICK REFERENCE) ===================================================== Here is a complete key listing for calendar/scheduler mode. [LS] = Left Shift, [RS] = Right Shift [LEFT] Move to the previous day [RIGHT] Move to the next day [UP] Move back a week [DOWN] Move forward a week [-] Move back a month [+] Move forward a month [/] Move back a year [*] Move forward a year [4] Move to the previous day with appointments (within a month) [6] Move to the next day with appointments (within a month) ['] Return to the current date [LS]-['] Scroll to the top of the appointments screen [8] Scroll the appointments screen up [2] Scroll the appointments screen down [ENTER] Toggle between Calendar/Scheduler mode All of the above keys are intended for quick usage, and therefore all of them will repeat when you hold them down. [DEL] Delete the appointments on the current day [LS]-[DEL] Delete all appointments in the current month [LS]-[EEX] Delete the annual event on the current day [LS]-[DEL] will provide a YES/NO confirmation prompt before deleting all appointments. [DEL] and [LS]-[EEX] do not. [ALPHA] Search through the appointments for a string - [FIND] [LS]-[ALPHA] Find the next occurrence of the same string - [LS]-[FIND] FIND and FIND NEXT are both case sensitive. FIND will begin searching from the first day in the month with appointments, NOT the current date. FIND NEXT will always begin searching from the current date. [RS]-[4] Adjust the current time [LS]-[4] Adjust the current date Changing the time and date both prompt with the current settings for those fields. The time must be entered in 24 hour format. There is full error checking for both of these modes. [EVAL] Program information [RS]-[ON] Turn the calculator OFF [ON] Exit Organizer In addition, the following keys are in the menuline: [->APP] Edit/create appointments for the current day [->ANN] Edit/create an annual event for the current day [TODO] Change to the TODO Manager [PHON] Change to the Phone Database [FIND] Same as [ALPHA] (finds a string in appointments) [LS]-[FIND] Same as [LS]-[ALPHA] (finds next occurrence of a string) [EXIT] Same as [ON] (exits Organizer) [RLDX] Load the Roldx library by James Weisbin [FMAN] Load the Foneman library by Jeoffry Krontz [DBASE] Load the DBase library by Todd Eckrich All three of these keys are intended to provide an optional database which can be quickly accessed. They will simply beep if the library does not exist. [JUMP] Jump forward or backward any number of days Entering a negative number will jump backwards. [GOTO] Go to any date. 4.4 USING THE TODO MANAGER ========================== The TODO Manager is accessed via the [TODO] menukey in the calendar/scheduler. Pressing this key will load the database in browser mode. The screen is structured fairly simply: There is a title bar on top of the screen, with a bar location indicator, and the rest of the screen is left for the browser. I will define "TODO"'s simply as notes and reminders. This can include anything from "Walk the dog!" to "Today's shopping list: ...". The TODO browser has the capability to manage an unlimited number of TODOs, each of an unlimited length. Therefore, the usage of this mode has the potential to vary greatly. It could simply be used for one line reminders and quick notes, or it could be used to hold a few long lists of items. In the initial display, the screen will be empty, and most of keys will be disabled. To add a TODO to your list, press the [ADD] key in the menuline. There is a simple prompt, and, as in the scheduler, you can use the newline key to create a long list of several lines. When you are done entering a TODO, press [ENTER] ([ON] will abort) and it will appear in your browser screen. Notice that there is now a bar on that entry. [ADD] a few others, and you can start using the database. Alternatively, you can add a new entry before the current location with [LS]-[ADD], or after the current location with [RS]-[ADD]. There is a menuline with five other commands: [EDIT] will edit/change the selected TODO. [ADD] will create a new TODO at the top of the datafile. [LS]/[RS]-[ADD] will insert a TODO at the current/next location. [DEL] will delete the selected TODO (there is a confirmation prompt first). [TOP] will move the selected TODO to the top of the list, to rearrange priorities. [FIND] / [LS]-[FIND] search for strings. Finally, [EXIT] returns you to the calendar/scheduler. Most of the keys for the TODO mode are almost identical to the keys for the calendar/scheduler, and therefore easy to remember. The [UP] and [DOWN] arrow keys will scroll the bar quickly up and down the list. [DEL] will delete the TODO which you are currently viewing. ['] returns you to the top of the TODO list, and [RS]-['] puts you at the bottom of the TODO list. [EVAL] displays an info screen, [RS]-[ON] (off) turns off the calculator, and [ON] acts as the [EXIT] key in the menuline. Pressing [ENTER] in the browser will toggle between browser mode and full- screen mode. When you see the selector bar, you are in the browser mode, which will only display the first line of each TODO. When you switch to full screen mode, the TODO you are on is expanded to the whole screen. When viewing the full view of the TODO, you can use the [8]/[2] keys to scroll it UP/DOWN. In addition, as in the scheduler, [LS]-['] (up) will return you to the top of the current TODO. Note that the full screen view still uses the same keys as the browser mode. Any key which works in the browser view will also work in the full screen view, so you can therefore still scroll up and down the list with the same keys. The TODO mode has a [FIND] function similar to the scheduler's FIND. Pressing [ALPHA] or [FIND] will search through the TODOs for a string. (Note that the search is case sensitive) There is a slight difference from the scheduler in that this [FIND] will search through the TODOs STARTING FROM THE CURRENT POSITION. [LS]-[ALPHA] or [LS]-[FIND] will act as a "FIND NEXT". 4.5 USING THE PHONE DATABASE ============================ The Phone Database is accessed via the [PHON] menukey in the calendar/scheduler. Pressing this key will load the database in browser mode. The keyboard definitions for the Phone Database are identical to those in the TODO Manager. As far as the interface is concerned, the only difference is that the Phone Database does not have a "TOP" key in the menuline. You can create a new entry in the database via the [ADD] key in the menuline. You will notice, however, that the prompts are different from the TODO [ADD] key. The first prompt asks for a name. Because the phone database is sorted, it is suggested, although not required, that you enter the name in the format "Last, First". The second prompt is for a phone number. You may enter this in any format, either including or excluding area code, with or without parentheses. If you do not know the person's phone number, simply press [ENTER]. If the person has multiple phone numbers, simply add a newline and write the second below. **Extra phone numbers indicated by a newline will automatically be formatted for the display** The third and final prompt is for an address. This is expected to be multiple lines, so you can use the newline key to enter it in its entirety. If you do not know the address or do not want to enter it, simply press [ENTER]. Note that you can abort the entire [ADD] process at any time by pressing [ON] at any of the prompts. After adding a phone entry, try adding a few more. The phone database is automatically alphabetically sorted, so as you [ADD] more entries, they will be automatically placed in their proper locations. This sorting makes locating a name very easy. ([FIND]'ing the first letter of the last name is a good way to jump to a section of names) Note that in browser mode, only the names are displayed. Pressing [ENTER] on a selection will change to full screen mode. In this mode, you will see a formatted display that looks something like this: [--------PHONE-MANAGER-[3/8]--------] Gingrich, Newt <- Name/Title #: 119-555-1212 <- Phone number #: 119-555-9876 <- Optional extra numbers 14 Cedarvue Terrace <- Address Killington, ZA 11132 ------------------------------------- All phone entries are formatted in this manner. If the person has an unusually long address, or you wish to put more information about that person, simply add more lines to the address item. The [8] [2] [LS]-['] scrolling keys are active just as in the TODOs. Other than these differences, usage of the Phone Database is similar to that of the TODO Manager. When you [EDIT] entries in the Phone Database, rather than editing three prompts, the strings are compiled into one, and you can simply edit the entire screen. All other functions still work, such as [DEL], [FIND], etc. 4.6 TODO/PHONE DATABASE KEY LISTINGS (QUICK REFERENCE) ====================================================== Here is a complete key listing for TODO/Phone Databases. [LS] = Left Shift, [RS] = Right Shift [UP] Move to the previous entry [DOWN] Move to the next entry ['] Move to the first entry [RS]-['] Move to the last entry [8] Scroll the full-screen view up [2] Scroll the full-screen view down [LS]-['] Return to the top of the full-screen view [ENTER] Toggle between browser and full-screen views [DEL] Delete the current entry (after a confirmation prompt) Selector is always left on entry following deleted item. [ALPHA] Search through the appointments for a string - [FIND] [LS]-[ALPHA] Find the next occurrence of the same string - [LS]-[FIND] [EVAL] Program information [RS]-[ON] Turn the calculator OFF [ON] Return to the calendar/scheduler In addition, the following keys are in the menuline: [EDIT] Edit the current entry [ADD] Create a new entry (TODO=top, PHON=sorted) [LS]-[ADD] *TODO* Insert a new entry before the current location [RS]-[ADD] *TODO* Insert a new entry after the current location [DEL] Same as [DEL] key (delete the current entry) [TOP] *TODO* Move the current entry to the top of the datafile [FIND] Same as [ALPHA] (finds a string in the datafile) [LS]-[FIND] Same as [LS]-[ALPHA] (finds next occurrence of a string) [EXIT] Same as [ON] (returns to calendar/scheduler) 4.7 DATABASE MAINTENANCE ======================== Database maintenance is provided via library commands. Locate the [ORG] library menu either through your library key (RS-2) or by typing << 1144 MENU >>. There are three maintenance commands which provide the following functions: [DAT->] Recall the data file to level 1 of the stack. [->DAT] Store a list created by [DAT->] on top of the current data. [PDAT] Purge ALL database files (Appointments, Annual Events, TODOs, and Phone Database) These simple commands can have a few functions. For one, this makes backing up and/or copying your entire database to/from your calculator very easy. Simply recall the data with [DAT->], store the data in a variable, and optionally send this variable to your computer. To restore the data, simply put the list on level1 and press [->DAT]. This also makes direct editing of data files easier, as you do not need to enter the hidden directory. In addition, if you want to write some type of conversion program which will convert files from an organizer on your computer, this enables you to import the data easily. The [->DAT] and [PDAT] commands both have a [YES]/[NO] "Are you sure?" prompt to prevent accidental loss of information. Note that using [->DAT] will overwrite ALL of your current data. 4.8 DATABASE STRUCTURE ====================== This section is for anyone who wants to directly edit and/or access the datafiles used by Organizer. ** NOTE: THERE IS NO ERROR CHECKING FOR THE DATA CONTAINED IN THE DATA FILES! IF YOU INCORRECTLY MODIFY YOUR DATA FILES, YOU MAY CAUSE A MEMORY CRASH! Organizer stores it's data in one file in the hidden directory. The file is called OrgDATA, and consists of four main sublists. The following is a structural diagram of each sublist. List #1 - Appointments Data --------------------------- { MM.YYYY { DD $ DD $ ... DD $ } ... MM.YYYY { DD $ DD $ ... DD $ } } This list is composed of sets of two items: One real number and one sublist. The real number is in the format MM.YYYY, and the sublist which follows corresponds to the appointments for that month. Each sublist is composed of sets of two more items: One real number and one string. Each real number must be in the form DD, and the string which follows corresponds to the appointments for that particular day. NOTE: These day/string pairs MUST be numerically sorted, or the FIND functions will NOT work correctly. List #2 - Annual Events Data ---------------------------- { MM.DD $ MM.DD $ MM.DD $ ... } This list is composed of sets of two items: One real number and one string. The real number is in the format MM.DD, and the string which follows corresponds to the annual event for that day. Lists #3/#4 - Browser Data Files -------------------------------- { $ $ $ $ ... $ } Lists #3 and #4 simply contain strings. Each string corresponds to one entry in the browser. List #3 holds data for the TODO Manager, and List #4 holds data for the Phone Manager. 5.0 REMOVING THE LIBRARY ======================== To remove Organizer from your HP48, do the following: 1. Optionally run [DAT->] to save a copy of the data file. 2. Run the PDAT command, either from the library menu or by typing it in. Confirm the deletion of your data file with the [YES] key. 3. Enter the port ID in the form :PORT:1144 and press ENTER *TWICE* Example: If Organizer is stored in port 0, enter :0:1144 DUP The port ID should now be on levels 1 and 2 of your stack. 4. Press the DETACH button (either by typing in by hand, or pressing left-shift-library, DETACH). 5. Press the PURGE key. Organizer should now be removed from your calculator. If you still get an "Object in use error", try turning off USER mode and switching to the HOME directory. Occasionally, if you have used Organizer extensively, you may have to do a warmboot (ON-C) before it will allow you to PURGE the library. 5.1 CREDITS =========== Many other people assisted in the creation of this library, and credit should be given where it is due. First and foremost, MANY thanks to Othniel Rawlins, who not only provided sample code from his Browser and Equation Library, but also spent much time testing the library and making excellent suggestions. Parts of the code, such as the FIND routines, the TODO browser, and the menuline confirmation prompts are based on the ideas and code of Othniel. Many thanks also go to Arnold Moy, who was kind enough to make several custom modifications to the calendar routines, and even rewrite some of them! In addition, he wrote ML routines to draw tick marks on the calendar. Thanks Arnold! Others who deserve thanks (in alphabetical order): Mika Heiskanen : Jazz, hacklib, and many of his other excellent programs which made this possible. Joe Horn : List sorting routines, date validity checking. Jerry Phillips : ML calendar generation routines. Andre Schoorl : Beta testing. Richard Steventon : ML box inversing routines, ML row inversing routines. 5.2 VERSION HISTORY =================== [ v1.0 01/27/96 ] - Initial release to the public. org10.lib [1144] code by jack levy [jlevy@nyx.net] dated 01/27/96, 10:31pm