@database "Recall.guide" @width 77 ***************************************************************************** @node Main "Documentation for Recall " This document describes the usage of 'RecallPrefs' and 'Recall' - the ultimate utility for the absent-minded. @{" Description " link Description} @{" About and requirements " link About} @{" Copyrights " link Copyrights} @{" Installing " link Installing} @{" Running the programs " link Running} @{" Using RecallPrefs " link UsingRecallPrefs} @{" Using Recall " link UsingRecall} @{" Source " link Source} @{" Known bugs " link Bugs} @{" Things to do in the future " link ToDo} @{" Troubleshooting " link Troubleshooting} @{" Versions " link Versions} @{" Afterword " link Afterword} @{" Release-note " link Note} This program is Public Domain! @endnode ***************************************************************************** @node About "About and about we go..." NAME: Recall/RecallPrefs VERSION: V1.3 PROGRAMMER: Ketil Hunn, Molde 1993, Norway. USING: SAS/C V6.2 REQUIREMENTS: Any Amiga with WB2.0+ Reqtools V38.1022+ (included) SOURCE: The included source can be compiled with SAS/C V6.0+ (not included!) GENERAL: This package was developed on an A3000 25MHz with 6Mb RAM, 1950 multisync monitor, 100Mb harddrive, 3 drives and a Nec P20-printer. The Graphical User Interface (GUI) was generated with GadToolsBox V2.0b - Copyrighted 1992-93 by Jaba Development. This program also uses ReqTools.library which is a copyright of Nico François. @endnode ***************************************************************************** @node Description "Description" Do you keep forgetting about birthdays, anniversaries and other important events? Well, there are plenty of public domain products on the market that will prevent this from happening. But, do you also want to - keep track of the remaining days to important events? - keep track of the days since important events happened? - autostart certain programs depending on the date and time? - be reminded every # day (eg. every 14th day) ? - be reminded # days in advance or after the event - be reminded with requesters, alerts or practically anything that can be displayed on a Amiga-monitor? - display unlimited lines of text in the same requester/alert (only limited by the screen's resolution) - keep a simple database of the birthdays of family and friends? - let your Amiga keep track of how old people are by insterting the date of birth in the middle of the string where you want to display the age? (E.g. 'Adam is @{b}{080570}@{ub} years old' -> 'Adam is @{b}23@{ub} years old'.) - make advanced events which are displayed for example between 21:00 and 00:00 every 3rd day the first 7 days of every 2nd month the next 4 years? - combine all of the attributes mentioned above in the same event? - enter these events in an easy-to-use environment and without the need of programming-knowledge, just by entering the desired text and pressing a few buttons? you will find this program extremely useful, because Recall will do exactly that for you! It is an easy-to-use, intuition-based utility Šfor the absent-minded! @endnode ***************************************************************************** @node Copyrights "Copyrights" Recall and RecallPrefs is freely redistributable. The source is included, and you are permitted to modify it for personal use, but any modifications made must NOT be distributed. If you have made changes you think others may find useful, send them to me and I may include them in future versions. @{b}Think twice before you:@{ub} * SPREAD or DELETE parts of this program. Some people actually read the docs (you are, at the moment!) and others might want to study the source! All of the following files should be in the archive: InstallMe! : Installer-script for harddrive-users. InstallMe!.info : Icon, so the doc may be run from WB RecallPrefs : Preference-program RecallPrefs.info : An ugly icon Recall : Main program Recall.info : Yet another ugly icon Recall.guide : Documentation in the AmigaGuide-format Recall.guide.info : Icon, so the doc may be read from WB Recall.prefs : An example-project Source (dir) : All the sources, ready to be compiled! * CRUNCH this program and then spreads it. Some decrunchers use a lot of memory and not all of the endusers have all that memory available! Most of the Amiga-owners dislike colorcycling pointers and screens, and not all crunchers have available decrunchers, so the user may not be able to decrunch the program if she/he wants to! * SELL or INCLUDE this in a commercial package! This program is dedicated to the Amiga society and is placed in the Public Domain! If you charge more than a reasonable copy fee for this package, people are sure to find out about you sooner or later, and that will certainly be the end for you in the Amiga-scene! * BUY this program. You have been swindled! If you actually read this text, the seller must be pretty dumb not removing this text before selling it to you (he probably assumes you're just another lamer that can't read!). * USE this program. In spite of several test, no warranty is made that there's no more bugs in this package. You use this program at your own risks! I will not under any circumstances be liable for any damage, direct or indirect, resulting of the use of any programs in this package. * READ this document (I guess this should have been stated much earlier...) I will not be liable for any damage this document may have caused you; english is not my native language and I guess this document is full of misspellings and misunderstandings. You can either live with it and keep on reading, run this through a spellchecker or stop reading. The program is quite easy to use and need no explanations. * LIKE this program. You may want to send me a postcard if you do, just telling me how much you like it. Really, I wouldn't mind that at all, but it is no obligation. You may also drop me a note on the internet. The address will be at the end of this document. @endnode ***************************************************************************** @node Installing "Installing" Just doubleclick on the install-icon, and the program will install itself automatically. 'RecallPrefs' will be copied to 'SYS:Prefs'. 'Recall' will be copied will be copied to 'SYS:WBStartup', and the .prefs-files will be copied to 'ENVARC:'. The script needs Commodore's 'Amiga Application Installation Utility' (Installer) in order to run. This is not included in this package because it is copyrighted to Commodore. This utility is shipped with WB2.1 and higher, but there is however a free version available from Commodore that works fine under both 1.3 and 2.0. If not available, please copy the program to their corresponding drawers (as stated above). @endnode ***************************************************************************** @node Source "Source and comments" The source code is included and can be compiled with SAS/C V6.0 or later. I am sure a lot of the code could be implemented in a better way and bla. bla., but you must keep in mind that this is the very first executable program I have ever produced in C, and this package was produced with one purpose in mind only: learning to program in C (you may, by taking a quick glance at the source, argue that this goal has not yet been achieved, but I'm still learning, and hopefully the forthcoming versions will be faster and better programmed). I have unfortunately little comments in my sources (read: NONE), most because I understand the source myself, but also because I think comments destroy the 'look' of the source and make it appear complexer than it actually is. I will however put them there, if anyone are too upset about the thing and keep nagging me about it... @endnode ***************************************************************************** @node Running "Running the programs" Both programs may be run from Shell or by doubleclicking on their Šicons. If Recall is run with no parameters it will automatically look for the project 'ENVARC:Recall.prefs'. Any parameters will override this Šdefault project. 'Recall test.script' will run will tell Recall to open the script 'test.script' instead of 'ENVARC:Recall.prefs'. @endnode ***************************************************************************** @node UsingRecallPrefs "Using RecallPrefs" This is where all the work is done and where the project is set up. The program is quite easy to use and only a brief explanation will be given here: @{" Eventgadgets " link EventGadgets} @{" Textgadgets " link TextGadgets} @{" Setting date and time of an event " link DateTime} @{" Selecting the type of event " link Type} @{" Selecting how often the event will be displayed " link Show} @{" Counting the days or years " link Counting} @{" Using the projectmenu " link Projectmenu} @{" Using the editmenu " link Editmenu} @{" Using the settingsmenu " link Settingsmenu} @endnode ***************************************************************************** @node EventGadgets "Using the eventgadgets" @{b}Add@{ub} Adds an event to the listview. The user may now enter the name of the event in the listview's stringgadget. @{b}Copy@{ub} Copies the selected event and selects the destination as current event. @{b}Delete@{ub} Deletes the selected event. All attributes of the event will also be deleted. If the project has been previously saved, the deleted event may be restored by selecting @{"Edit->Last saved" link Editmenu} or @{"Edit->Restore" link Editmenu} from the menu. @{b}Up@{ub} Moves the selected event up one position. @{b}Down@{ub} Moves the selected event down one position. @{b}Top@{ub} Moves the selected event to the beginning of the list. @{b}Bottom@{ub} Moves the selected event to the end of the list. @{b}Purge@{ub} Removes all expired events from the list. This function has been implemented so user doesn't have to go through the entire project looking for events that is no longer needed. A requester will ask the user to verify the choice, and if the user selects OK, all expired events will be removed. @{b}Sort@{ub} Sorts all events either by the event's @{"name or date" link DateTime}. This can be set from the menu @{"Settings->Sort by" link Settingsmenu}. @endnode ***************************************************************************** @node DateTime " Setting date and time of an event " @{b}Date@{ub} Use this stringgadget to enter the date of the event. The format is currently DDMMYY. All three components can be replaced by '**' or '#?' to indicate that the component is of no importance. For example will '07**93' indicate an event displayed on the 7th of every month during 1993. To make the program as small as possible, I have not implemented any date- checking-routine. Entering '58**93' into the datestring will produce a 'non-existing' event, since 58 will always be greater than 31. The date will never reach this value... A very lazy user will soon discover that it is not necessary to enter the complete date into the string. If the user is only interested in the day of the month, he/she would normally enter '07****', but '07' will work just fine. NOTE! however, that '07**93' cannot be entered short as '0793'. An empty datestring indicates that the event will always be shown. @{b}Finetuning the date@{ub} Often the user wants to display the event before or after a specific date, and this can be done easily with the cyclebutton to the right of the date- string. @{b}Exact:@{ub} will display the event ONLY at the given date. If the is not turned on that day, you will never see the event! @{b}Before:@{ub} will display the event BEFORE the given date. Entering '07**93' would result in an event that would be displayed the first 6 days every month during 1993. @{b}After:@{ub} will display the event AFTER the given date. Entering '070693' would result in an event that would be displayed every day after the specified date. @{b}Even more finetuning of the date@{ub} When selecting 'Before' or 'After', two more gadgets become available: @{b}Days@{ub} will allow the user to set the interval of days, and the event will only be displayed during that interval. Let's say the date is set to '07**93', days set to value '2' and the cyclebutton selected is 'Before' - then the date will only be displayed on the 5th and 6th every month during 1993, in other words two days before the 7th day of that month. @{b}Repeat every@{ub} will allow the user to set the interval of repeating days. If for example the field contains the number '14', the event will be shown every 14th day before/after the specified date. @{b}Time@{ub} Use this stringgadget to enter the time of the event. The time must be given in the format HH:MM. NOTICE the colon between hour and minute! Either components can be replaced by '**'. An empty timestring indicates that Recall doesn't have to bother checking the time. As stated above, the user may select to show the event at the exact time, before or after. @endnode ***************************************************************************** @node TextGadgets "Using the textgadgets" @{b}Add@{ub} Adds a text to the event. The text may contain a calculation field. The format is currently {DDMMYY} and MUST be exactly in that format! Before displaying the event, Recall first searches all strings of the event and replaces such calculation fields with the result of the calculation. The calculation-method is set by selecting the @{"Count-cyclebutton" link Counting}. Counting years: If the text of the event is 'Adam is {080570} and Dick is {310165} years old today', it will be displayed as (assuming the year is 1993): @{b}'Adam is 23 and Dick 28 years old today'@{ub}. Counting days: Text containing '{020693} days to my exam in Discrete Mathematics' will for example be displayed as @{b}'4 days to my exam in Discrete Mathematics'@{ub}. @{b}Delete@{ub} Deletes the selected text. @{b}Up@{ub} Moves the selected text up one position. @{b}Down@{ub} Moves the selected text down one position. @endnode ***************************************************************************** @node Type " Selecting the type of event" This cyclegadget selects the type of the event. @{b}Requester@{ub} All texts will be shown using a standard reqtools- requester with an OK-button. Selecting OK will tell Recall to proceed to the next event. The requester may be centred on the screen or follow the mousepointer. This option is set by selecting the menu @{"Settings->Centre Requesters" link Settingsmenu}. The maximum number of lines which may be displayed is only limited by the screens resolution and font. The requester will automatically adjust to the currently selected font. @{b}Alert@{ub} All texts will be shown using a standard RECOVERY ALERT. The alert will be opened as a 640*200 on a NTSC-machine or 640*256 on a PAL-machine. The font opened will always be Topaz8. The frame of the alert will automatically adjust to fit the number of lines shown and all lines will be centred. Pressing either left or right mousebutton will continue. @{b}Execute@{ub} All texts will be run as if they were typed from Shell. If the requested program does not exists the system will pop up a shell-window to tell you so... If several programs is requested, they will be run after each other in priority from top to bottom. Running larger batch-programs can be done easily by entering 'execute '. Recall also accepts remarks and 'execute ; remark' will work without problems. @endnode ***************************************************************************** @node Show "Selecting how often the event will be displayed" The 'Show'-cyclegadget sets the frequency of the event. The user may select between to methods: @{b}Always@{ub} The event will be shown every time Recall is run. @{b}Once a day@{ub} The event will only be run the first time Recall is run that day, i.e. only once a day. @endnode ***************************************************************************** @node Counting "Counting days or years" If the text of the event contains any calculation fields, these fields will be replaced by the result of the calculation. Selecting Count days will return the number of days between the current date and the date of the event. Selecting Count years will return the number of years between the current date and the date of the event. See also @{"Adding text to an event" link TextGadgets} @endnode ***************************************************************************** @node Projectmenu "Using the Projectmenu" @{b}New@{ub} Selecting this item will reset the list of events and enabling you to start from scratch designing your new events. @{b}Open...@{ub} Brings up a filerequester and lets the user select a new project to be loaded. The new project will replace the current project. Remember to save you changes... @{b}Merge...@{ub} Brings up a filerequester and lets the user select a project to be merged with the current project. The merged project will appear at the end of the current project. @{b}Save as...@{ub} Lets the user save the project to a different name. @{b}Test project@{ub} Runs the current project. Recall must be located in the current directory or c:. @{b}About@{ub} A lot of very exiting information is listed here. Try it out immediately! @{b}Quit@{ub} Terminates the program. All edited events will be lost. Remember to save your changes... Other menus: @{"Edit" link Editmenu} and @{"Settings" link Settingsmenu} @endnode ***************************************************************************** @node Editmenu "Using the Editmenu" @{b}Last saved@{ub} Restores the last saved project to memory. All edited events will be lost! Other menus: @{"Project" link Projectmenu} and @{"Settings" link Settingsmenu} @endnode ***************************************************************************** @node Settingsmenu "Using the Settingsmenu" @{b}Centre requesters@{ub} When checked Recall centres its requesters on the screen. @{b}Sort by@{ub} Lets the user select the sort-criteria used by the @{"sort-gadget" link EventGadgets}. Currently two modes exists: Name and date. Other menus: @{"Project" link Projectmenu} and @{"Edit" link Editmenu} @endnode ***************************************************************************** @node UsingRecall "Using Recall" This is the main program. If started without any argument, the program will look automatically look for the project 'ENVARC:Recall.prefs'. Depending on the display-type chosen in the preference-program, the event will be shown on the screen in either three ways @{"Requester" link Type}, @{"Alert" link Type} or @{"Run program" link Type} @endnode ***************************************************************************** @node Bugs "Known bugs and other strange occurrences" Recall: * When running Recall from the WBStartup-drawer, some programs seem to cause an out of memory-guru. This is not a bug in Recall! I have only discovered this error while running ToolManager from WBStartup and Maxiplan V4.09 (started as an event within Recall) while running under WB3.0 (kickstart 39.105, workbench 39.29). Other programs might cause similar problems. The solution is however quite simple; run 'Wait 1' just before Maxiplan and the program will work just fine. * When testing a project from Recallprefs the program first run the project and THEN states that 'Recall' was not found and returns a returncode. This error occurred just before releasing V1.3 and has never Šoccurred in the earlier versions although I haven't touched the test-function since ŠV1.0 Running Recall from Shell works just fine... (Aaaaaaarrrgghhhhhhh!!!!) * Counting number of days does not always come out right, especially when the number of days exceeds 365... RecallPrefs: * The settings-menu is not updated when loading a project. (Is there an easy way of updating checked values in a menu? - let me know...) See also @{"Troubleshooting" link Troubleshooting} @endnode ***************************************************************************** @node Troubleshooting "Troubleshooting" @{b}The event does not show even if the date and time is set right@{ub} * Try setting 'Show' to 'Always' and try again. The event might have been run earlier that day... See also @{"Known bugs" link Bugs} @endnode ***************************************************************************** @node ToDo "Things to do in the future" * More CalcFields: {date} -> include the current date. {time} -> include the current time. {string1|string2} -> Recall will use the first string whenever the last calculated field was greater than 1. If not Recall will use the second string. Great for usage when calculating the remaining days to an event: '{020693} {days|day} left to my exam!' Will be displayed as either (depending on the date): '2 days left to my exam'/'1 day left to my exam'. * Count Years/Days should be disabled when the text don't contain any CalcFields. Could take some time checking, though... * Create Icons with the project. Not necessary, but since all other prefs-programs have this option... * A 'Delete when expired' checkbox-gadget to delete the event's date has expired. * A more intuition-based method of selecting the date and time of an event. A window should pop up and allow the user to select from a calendar (the look and feel of Commodore's Time-prefs). * Ability to print the project. * Icon-tooltypes. * Ability to start programs in 'Workbench-mode'. * New option in the settings-menu: Flash screen. When checked all requesters will flash screen and beep before displaying... * Cancel-button in requesters. Selecting Cancel will tell Recall not to nag you about that event for the rest of the day. @endnode ***************************************************************************** @node Versions "Versions" The Recall version follows the notation . (DD.MM.YY), meaning that V1.10 is greater than V1.1. The current version can be printed out using 'Version full Recall' or @{"Project->About" link Projectmenu} from RecallPrefs. 24.May.93 V1.0: First released version. 25.May.93 V1.1: RecallPrefs used to crash when it loaded an old project and the user selected 'Use'. Now fixed. 29.May.93 V1.2: RecallPrefs now tries to open its window using the current font set by the user. If this fails (usually when the window becomes too big for the screen), it settles for the standard Topaz8-font. RecallPrefs now uses NewLook-style in menus. 04.June.93 V1.3 Recall now only updates the project when it's absolutely necessary. This saves a lot of disk-access. Fixed a bug in the compare date & time header file. Fixed a bug in the purge-function which removed events with empty dates... Updating the attributes of the event is now speeded up. RecallPrefs disables the corresponding (Exact/Before/After)- cyclebutton if Datestring or Timestring are empty. Made more compliant with Commodore's Style Guide. @endnode ***************************************************************************** @node Afterword "Afterword" Send bug-reports, comments, suggestions, postcards etc. to: Between 15th of august and 5th of June I will be available at the Šfollowing address: Ketil Hunn Fabrikkveien 4-8 / Leil 107C N-6400 Molde NORWAY or by e-mail: hunn@dhmolde.no In the summer time however, I will @{b}O N L Y@{ub} be available at the following address and only by ordinary mail: Ketil Hunn Nabbetorpveien 35B N-1632 Gamle Fredrikstad NORWAY no e-mail Please check 'Things to do in the future', 'Known bugs' and 'Troubleshooting' before you report any bugs! Enjoy! Ketil Hunn Molde, May 1993 @endnode @node Note "Small release-note" As you may see, by taking a quick glance at the bugs-report, this version contains several bugs that may seem easy to fix. The reason why this version is rushed, is that I am going away for the summer and at my summerhouse I do not have the ability to communicate or use Internet. If I had not released this version now, it would not have been made available until mid-august... I simply ran out of time before the summer-holiday... The bugs are however only minor ones, and I think you can live with it... If any questions, I will be available at my @{"summer-address" link Afterword}. Have fun... Ketil Hunn, 4th of June 1993, Molde. @endnode