Organizer v1.1 Personal Organizer for the HP48 S/G/Sx/Gx calculator written in 80% SysRPL, 20% ML (c) 1996 by Jack Levy 0.0 INDEX ========= 1.0 Description 2.0 Disclaimer 2.1 Email-Ware 3.0 Library Information 3.1 Installing the Library 3.2 Installing the Holidays Datafile 3.3 Converting Organizer v1.0 Data 4.0 Library Usage 4.1 The Calendar Display 4.2 Using the Calendar/Scheduler 4.3 Using the TODO Manager 4.4 Using the Phone Database 4.5 Using the Options Menu 4.6 Calendar/Scheduler Key Listings (Quick Reference) 4.7 Data Maintenance 4.8 Data Structure 4.9 Third-party Programs 5.0 Removing the Library 5.1 Credits 5.2 Known Bugs 5.3 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 responsive, easy-to-use, complete 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 1583 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 marked to show days with appointments. Easily set alarms to go off which will pull up the appointments screen at the designated time. * Annual Events: Edit and display annual events which will show up on any given day every year. Included annual holidays file for USA and Sweden. Calendar marked to show days with annual events. * Scribe Hooks: Complete hooks into the Scribe database to use Scribe as a TODO manager and Phone/Address database. * Fast assembly display routines for quick scrolling of an unlimited number of appointments. All speed-critical routines written in assembly for a quick interface, including calendar/status area updates and titlebars. All assembly display routines use and require the Universal Font Library. * FIND function to search appointments or annual events, either matching case or ignoring it. * Support for any external database, with presets for Scribe, Rolodex, Foneman, and Dbase. * Support for any external editor, with presets for StringWriter, ED, TED, and QED. * Automatic detection and compensation for date and time formats. * Commands for easy backup/restoration/purging of all data. * Stack importing/exporting, configurable starting view, custom full-screen editor, and more. 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 email address is levyj@engin.umich.edu. 3.0 LIBRARY INFORMATION ======================= Size : 12657.5 bytes Checksum : #420Bh [#16907h] Version : 1.1 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 or transferred incorrectly. Organizer has been tested on SX revisions E/J and GX revisions M/P/R. However, as always, you should BACKUP YOUR MEMORY before running this application. 3.1 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 (ORG11.LIB). "Library 1144: Org..." should now be displayed on level1 of the stack. 3. Purge the ORG11.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. Organizer also requires FNT1 from the Universal Font Library, also included in the Organizer archive. If you have no other applications loaded which require the UFL, you only need to load UFL1.LIB onto your calculator; If one of your current programs requires FNT2, you should load on UFL3.LIB instead. Organizer will work fine with either library loaded, but it will not run without one. A stripped down version of the UFL package is included with FNT1 replacement fonts. For UFL installation instructions, see the enclosed UFL101F1.ZIP file. 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 and setting alarms. 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.2 INSTALLING THE HOLIDAYS DATAFILE ==================================== Organizer comes with a datafile of holidays which occur on the same day every year for the USA and Sweden. 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 ORG11US.HOL or ORG11SW.HOL to your 48. 2. Recall the holiday 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 ORG file (it is no longer needed). Note that this will overwrite ALL data (Appointments and Annual Events), so do not use this method unless you haven't entered anything. Replacing Your Current Annual Events ------------------------------------ If you have already entered Appointments, you may OVERWRITE your current annual events with a holidays file. To do this: 1. Transfer ORG11US.HOL or ORG11SW.HOL to your 48. 2. Recall the holiday 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 holiday file (it is no longer needed). 3.3 CONVERTING ORGANIZER V1.0 DATA ================================== Organizer comes with a conversion program to convert version 1.0 format data to the new v1.1 format. To convert your old data: 1. Transfer ORG11CNV.BIN to your HP48. 2. Recall your old data to the stack via Organizer v1.0's [DAT->]. 3. Run ORG11CNV.BIN while the old data is on level1. The conversion program will prompt you to save your TODO and Phone Manager data. If you say yes, the converson program will save the data in the proper Scribe datafiles in Port0. (The data will be saved in a global variable if the datafiles already exist.) If you say no, the data will be lost. 4. Install the Organizer v1.1 library (see section 3.1). 5. Install the new data via Organizer v1.1's [->DAT], confirming [YES]. 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 data to the stack. [->DAT] - Overwrites the current data file with data on the stack. [PDAT] - Erases ALL current data in your data file. [ORGINFO] - 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 1995 [-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] <- Current Day#/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. When you load Organizer, it will detect your date format (MM/DD/YY or DD.MM.YY) and your time format (AM/PM or 24 hour). All displays and prompts will then be adjusted accordingly. Pressing the [MTH] key will toggle your time format, and pressing [PRG] will toggle your date format. 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). [+] [-] or [LS]-[DOWN/UP] will go forward/back a month. [*] [/] or [RS]-[DOWN/UP] will go forward/back a year. If any of these 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 that the year range of Organizer is 1583-9999; trying to move out of this range will result in a beep. 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 mode. For example, pressing [RS]-[4] (time) will adjust the HP internal clock. Pressing [LS]-[4] will adjust the internal date setting. [STO] will bring up the Organizer Options menu. [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. Alarms can be set based on the information entered in this field. 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:30PM------] -> 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. [LS]-[8]/[2] (or [9]/[3]) will act as a page up/down. [RS]-[8]/[2] (or [7]/[1]) will act as a home/end. These keys repeat when held down. Notice also two arrows that will appear in the titlebar to show you if there is more data to view above or below the screen. Creating Appointments is done via the [->APP] menukey. In this prompt, there is a menukey labeled [ALRM] which can be used to create alarms. (You can also create alarms by pressing [EEX] at any time in the calendar/scheduler.) When pressed, a prompt appears for a time to set an alarm at. (If the calculator is in 12-hour time mode, there is an [AM/PM] toggling menukey; otherwise, the time should be entered in 24-hour format. Note that in AM/PM mode, a numerator of either 0 or 12 will represent 12:00.) After given the time, ORG sets an alarm on the selected date. When the alarm goes off, the calculator will beep if flag -57 (Alarm Beep On) is clear. The alarm will beep in a loop until a key is pressed or the beep goes off five times. ORG will then be loaded in the Appointment view, with the intention that you can then view your appointments for the day. The system is quite flexible, and allows you to store your appointment information any way you want. (Note that if an external editor is used, there is a "Set an Alarm?" menuline prompt after the edit is complete instead.) Alarms can later be "maintained" (i.e. deleted) via the internal alarm handling system. Annual Events are created via the [->ANN] menukey, and done similar to the Appointments. The prompts will hold the current data for those fields, or a blank prompt if you are creating a new entry. If an external editor is defined in the Options Menu, it will be used to edit both of these items. Pressing [ON] at either of these prompts will abort changes. The annual event can only be one line long, a maximum of 31 characters. Appointments may be of an unlimited number of lines, with a maximum of 33 characters wide. 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 placed to the right of certain days. Organizer will put a tick mark to the upper right of any day with an appointment, and lower right of any day with an annual event. Note also that when you move the selector to any day with a tick mark, the APP/ANN indicators in the status area will light up to show you what is on the corresponding day. This allows you to quickly assess the events on any given day of the month. You can then use the [ENTER] key to "zoom in" on that day and get all the 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. Stack exporting/importing is provided to allow easy copying of appointments and annual events; this makes it easy to create an appointment that "repeats" itself. The two keys [->STK] and [STK->] are in the second page of the main menuline (accessible via [NXT]). Pressing [->STK] will put a copy of the day's appointments on the stack, while [LS]-[->STK] will put a copy of the day's annual event on the stack. Similarly, pressing [STK->] will take a string from the stack and append it to the day's appointments. [LS]-[->STK] will replace the day's annual event with a string from the stack. There are two search functions in Calendar/Scheduler mode. You can search through your appointments or annual events for any string by pressing the [ALPHA] key or the [FIND] key in the menuline. This search can be defined to search either the appointments of annual events by pressing the toggle key in the menuline of the FIND prompt. Likewise, the search can be defined as case sensitive or insensitive by the "CASE" menukey. 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 is no more data to search 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. Organizer will also allow you to call any external database for added data management. This is done via the [XDB] key in the main menuline; the database called by [XDB] is defined in the Options Menu (see section 4.5). There are presets to call Scribe, Rolodex, Foneman, and DBase, although [XDB] can be set to call any program you like. 4.3 USING THE TODO MANAGER ========================== The TODO Manager is accessed via the [TODO] menukey in the calendar/scheduler. To use the TODO Manager, you must have the Scribe database loaded. Pressing this key will load Scribe viewing a "Todo Manager" datafile in the headings view. When the TODO Manager is exited, Scribe's previous settings will be restored. 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. For complete details on the Scribe interface, refer to the Scribe documentation. 4.4 USING THE PHONE DATABASE ============================ The Phone Database is accessed via the [PHON] menukey in the calendar/scheduler. To use the Phone Manager, you must have the Scribe database loaded. Pressing this key will load Scribe viewing a "Phone Manager" datafile in headings view. Note also that the AutoSort option is turned on. When the Phone Manager is exited, Scribe's previous settings will be restored. You can create a new entry in the database via the [ADD] key in the menuline. Data entry is free-form, as in the TODO Manager, but it is suggested that you enter the heading in the "Last, First" name format so it is sorted accordingly. In the body of the data, you can then enter addresses, phone numbers, etc. For complete details on the Scribe interface, refer to the Scribe documentation. 4.5 USING THE OPTIONS MENU ========================== Pressing the [OPT] key in any menuline or [STO] in the calendar/scheduler will bring up Organizer's Options Menu. There are six options, which can be changed with their corresponding menukeys: [EXTED] [EXTDB] [ALPH] [CASE] [SRCH] [START] The descriptions of these options are: Editor : Define an external editor to be used when you edit your appointments and annual events. The menuline has keys to enter the correct command for StringWriter, ED, TED, or QED. Database : Define the external database to be loaded when you use the [XDB] key in the main menuline. The menuline has keys to enter the correct command for Scribe, Rolodex, Foneman, or DBase. Press the [NONE] key for no database selection. Initial Alpha : Defines whether the initial alpha lock in all editing prompts are lower case or upper case. Match Case : Defines whether the [FIND] function will, by default, match the case of the search string or ignore it. This can also be toggled via the [CASE] key in the FIND menuline. Search : Defines whether [FIND] should, by default, search the Appointments list or Annual Events list. This can also be toggled via the [APP/ANN] key in the FIND menuline. Start View : Defines whether Organizer should display the Calendar or Appointments/Annual Events screen when you initially load the library. Press [ENTER] or [ON] to leave the Options Menu and return to your previous screen. 4.6 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. [-], [LS]-[UP] Move back a month. [+], [LS]-[DOWN] Move forward a month. [/], [RS]-[UP] Move back a year. [*], [RS]-[DOWN] 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 - [HOME]. [8] Scroll the appointments screen up. [2] Scroll the appointments screen down. [9], [LS]-[UP] Scroll the appointments 6 lines up (Page Up). [3], [LS]-[DOWN] Scroll the appointments 6 lines down (Page Down). [7], [RS]-[UP] Jump to the top of the day's appointments (Home). [1], [RS]-[DOWN] Jump to the bottom of the day's appointments (End). [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. [LS]-[EDIT] Create/modify the day's appointments - [->APP]. Uses the external editor if one is defined in the [OPT]. [EEX] Create an alarm on the selected date. [DEL] Delete the appointments on the current day - [-APP]. [LS]-[DEL] Delete all appointments in the current month - [LS]-[-APP]. [LS]-[EEX] Delete the annual event on the current day - [-ANN]. [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 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. [MTH] Toggle the time format between AM/PM and 24Hour. [PRG] Toggle the date format between MM.DDYYYY and DD.MMYYYY. [RS]-[4] Adjust the current time - [TIME]. [LS]-[4] Adjust the current date - [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. [STO] Display the Organizer Options menu - [OPT]. [EVAL] Program information - [ORGINFO]. [RS]-[ON] Turn the calculator Off. [ON] Exit Organizer - [EXIT]. In addition, the following keys are in the menuline: [->APP] Create/modify appointments for the current day. Uses the external editor if one is defined in the [OPT]. [->ANN] Create/modify an annual event for the current day. Uses the external editor if one is defined in the [OPT]. [TODO] Load the TODO Manager (via Scribe). [PHON] Load the Phone Manager (via Scribe). [XDB] Load the external database defined in the Options Menu. [EXIT] Same as [ON] (exits Organizer). [OPT] Load the Options Menu - [STO]. [ALRM] Display the alarm setting prompt for the current day - [EEX]. [TIME] Adjust the current time - [RS]-[4]. [LS]-[TIME] Toggle the time format between AM/PM and 24Hour - [MTH]. [DATE] Adjust the current date - [LS]-[4]. [LS]-[TIME] Toggle the date format - [PRG]. [-APP] Delete the appointments on the current day - [DEL]. [LS]-[-APP] Delete all appointments in the current month - [LS]-[DEL]. [-ANN] Delete the annual event on the current day - [LS]-[EEX]. [FIND] Same as [ALPHA] (finds a string in appointments). [LS]-[FIND] Same as [LS]-[ALPHA] (finds next occurrence of a string). [HOME] Return to the current date - [']. [JUMP] Jump forward or backward any number of days Entering a negative number will jump backwards. [GOTO] Go to any date. [->STK] Export the day's appointments to the stack. [LS]-[->STK] Export the day's annual event to the stack. [STK->] Import appointments from the stack. If appointments already exist, the new appointments will be appended at the end. [LS]-[->STK] Import an annual event from the stack. If an annual event already exists, it will be overwritten. 4.7 DATA MAINTENANCE ==================== Data 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->] Extract Appointment/Annual Event data to level1. [->DAT] Store a list created by [DAT->] on top of the current data. [PDAT] Purge ALL data (Appointments and Annual Events) These simple commands can have a few functions. For one, this makes backing up and/or copying your data 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 allows for direct editing of your data, as this data is normally encoded in Library Data. In addition, if you want to write some type of conversion program which will convert files to/from an organizer on your computer, this enables you to keep the two in sync. 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 DATA 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 CLEAR! Organizer stores it's data in one file in the hidden directory. The file is called OrgDATA, and it is encoded into Library Data. The DAT-> and ->DAT commands will extract the Appointments and Annual Events data lists for modification; 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 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 $ DD $ ... DD $ } ... MM { DD $ DD $ ... DD $ } } This list is identical to the appointments list, except the real numbers are in the form MM, and simply represent one of the twelve months. Each sublist is composed of sets of two items: One real number and one string. Each real number must be in the form DD, and the string which follows corresponds to the annual event for that particular day. These day/string pairs must also be numerically sorted for the FIND function to work correctly. 4.9 THIRD-PARTY PROGRAMS ======================== Organizer provides two opportunities for third-party program integration. The first is the external editor support. When Organizer calls the external editor, it parses and executes the command defined in the Options Menu. This command can be and do anything, but there is one restriction: It must leave the stack in the same state as when it is executed. Organizer leaves the Appointments string on the stack with the intention that the called program will modify this string and leave the new copy on level1. If the level1 object is not a string, or the stack depth has changed, Organizer will beep and return an "Editor Not Found!" error message. Aside from this restriction, the external editor call can be used to call any program. The second is a bit more versatile: The [XDB] command. The [XDB] command is a blind call to whatever command is defined in the Options Menu. The string is simply parsed and EVAL'd. If the parsed object does nothing, then it is left on the stack as it normally would be. The [XDB] command does no checks on changes in depth of the stack or objects on the stack. This call can be used, theoretically, to load any external program, any library command, or any subprogram. One last note, two hidden XLIBs have been added to ORG: ORGCal and ORGApp. These XLIBs will load ORG as normal, but ignoring the Starting View flag and starting in their respective modes. ORGApp is used in the alarms ORG sets; there may be other uses for the hidden XLIBs. 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, spent much time testing the library and making excellent suggestions. Parts of the code, such as the FIND routines 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 the assembly routines to draw tick marks on the calendar. Thanks Arnold! Others who deserve thanks (in alphabetical order): Alex Chiang : Beta testing. Mika Heiskanen : Jazz, hacklib, and many of his other excellent programs which made this possible. Rodney Hess : Beta testing. Joe Horn : List sorting routines, date validity checking. Arnold Moy : Beta testing. Jerry Phillips : ML calendar generation routines. Othniel Rawlins : Beta testing. Andre Schoorl : Beta testing. Richard Steventon : ML box inversing routines. 5.2 KNOWN BUGS ============== There is currently one known bug in Organizer, known as the "31-bug". This is a bug in the calendar display engine which causes an extra day "31" to appear on the calendar whenever the 30th is on the 6th row sunday of that month. This bug has not been fixed yet because it will require a complete rewrite of the assembly calendar display engine. The bug is non-destructive, in that ORG won't actually let you move the cursor onto the invalid day; it is just "there". This bug will be fixed in a future version of ORG. 5.3 VERSION HISTORY =================== [ v1.1 01/08/97 ] - All input prompts now use a custom full-screen input replacement. This allows for a larger editng area, accelerated cursor repeats, and embedded input prompts. - System flags are no longer modified by ORG, and therefore can not be changed if there is an error (such as lowmem). - New UFL/FNT1 assembly display routines: Titlebar routines replaced with assembly TBAR. Status area now displayed with assembly display routines. Annual event line now displayed with assembly display routines. Appointments display completely rewritten with new assembly display routines which allow very fast up/down movement, page up/down, and home/end functions. Page up/down can be accessed via [9]/[3] or [LS]-[UP/DOWN], and home/end can be accessed via [7]/[1] or [RS]-[UP/DOWN]. - TODO and Phone Managers removed; Organizer now uses hooks into Scribe via the [TODO]/[PHON] menukeys. Scribe must be present for either of these to work. - New error handler; true error messages now returned, handles low memory errors more smoothly. - "Febuary" spelling error corrected. - OrgDATA format completely changed; now holds much more information, and is encoded in Library Data. [DAT->] and [->DAT] routines adjusted accordingly. Conversion program included to convert v1.0 data to the new v1.1 format. - Options menu added. Ability to configure external editor, external database, initial edit prompt alpha, find case sensitivity, find search list, and starting view. "Suggestions" put on menukeys of editor and database prompt. Options menu also available from calendar/schedular via [STO] key. - Repeat prompts removed from JUMP/GOTO and TIME/DATE; now simply beep if input is invalid. - OINFO renamed to ORGINFO. Now displays info in small FNT1. - Added hidden ORGCal and ORGApp XLIBs. ORGCal/App ignore the Starting View flag set in Options and load ORG in CAL or APP mode, respectively. - Annual Events data format changed; now similar to Appointments format: { MM { DD $ DD $ ... } ... } Makes tick mark drawing much faster, especially when there are a lot of annual events across different months. Also frees up a little memory while ORG is running. - Added support for any external editor, called by [->APP]. - Added support for any external database, called by [XDB]. - Added alarm support via the [EEX] key. In the appointments editor, there is also a menuline key marked [ALRM] which will pull up screen prompting for a time. In this screen, the user can est a control alarm at any time on the selected day. If in 24 hour mode, this is set in 24 hours, otherwise there is an [AM/PM] toggle key in the menuline. When the alarm goes off, the HP will beep and load ORG in the Appointments view so the person can see what appointments are at the alarm time. If an external editor is used, there is a "Set an Alarm?" menuline prompt instead. - Added european date support. Automatically detected via flag -42 and handled accordingly. In "european mode", all prompts for dates will take dates in european format, and all displays of the date will be shown in that format. - Adjust 24-hour time support. Automatically detected via flag -41 and handled accordingly. In 24-hour mode, all time displays and prompts are taken in 24-hours. - Stack exporting and importing added via two menukeys. Unshifted versions export/import Appointments. If data already exists for the current day, import appends the new data with a newline. Left-shifted versions export/import Annual Events. If there is already an annual event for the current day, import overwrites it. - Full year is now shown in calendar title line. - [FIND] is now much more powerful. You can now search either the Appointments or Annual Events, and the search can be case sensitive or insensitive. Both settings are determined by options set via the [OPT]ions menu or the menuline of [FIND]. - Days Past/Left indicator is now "Current Day/Days Left". In other words, the first day of the year now shows [1/364] instead of [0/364]. - [*]/[/] month movement keys now only let you move in the range 1583-9999; previously they locked up if you moved out. Protection added also for the other methods of movement. - [LS]-[UP/DOWN] are now assigned to [-]/[+]. [RS]-[UP/DOWN] are now assigned to [/]/[*]. - Tick marks moved. Appointment tick marks are now one pixel lower. Annual Event tick marks are now four pixels lower; when there is both an appointment and an annual event, the two form a "line" to the right of the day number. - Scrolling arrows added to appointments screen titlebar. These arrows will show you whether there is more data to scroll to above or below the screen. - Conversion program to convert v1.0 data to v1.1 data included. - New holidays files included for the US and Sweden. - Numerical decomp fixed so that the decimal mode does not mess up the display of the status area and some prompts. - [MTH] key now toggles time format on the fly. - [PRG] key now toggles date format on the fly. - Menuline changed; second page expanded into second and third pages. More functions are now on the ORG menuline. - Almost a complete rewrite of code, save the calendar display routines. [ v1.0 01/27/96 ] - Initial release to the public. org11.lib [1144] code by jack levy [levyj@engin.umich.edu] dated 01/08/97.