3GETDATE CPM6عGETDATE PRG GETTIME CPM:uGETTIME IBMSGETTIME PRGINSTALL PRG1READ ME )0tTRACK DBFTRACK FMT$ TRACK HLP(ЇTRACK PRGKTRACKADDPRGZVTRACKBU PRGL6TRACKDISFMT+TRACKED FMT TRACKLU PRGTRACKN PRG#TRACKNNOPRGnTRACKONEFMT TRACKPS PRG)ƨTRACKRPCPRG^9TRACKSCRFMT1GEMAIL ?Hj Telephone Number TRACKing System dBASE II Version -- 14 December 1985 by Shannon L. Jacobs The files in this library are used to keep track of basic telephone information, along with various other kinds of data that would be especially useful for working with a mailing list. The system has the following functions: Quick search, based on last name, company, type of business, or comments you've entered; Add new names to your database, adding just the telephone information at first or filling in more complete information to support mailing; Delete names from your database; Edit the record for a person, with options to edit all of the information, just the telephone information, or just the mail address information; Time stamping of creation and contact dates; and Display of more information about one individual or a brief one line display of information about several individuals (the TRACK.HLP file contains much more information about this). Once it is correctly installed on your computer, you simply access it by typing the command DO TRACK at the dot prompt or by having one of your own program files issue that command. When this system is finished control will return to the dot prompt or to the program that called it. All of the configurable information is in three of the files, to allow you to configure this system easily to run on various computers, as long as you have dBASE II. INSTALL.PRG contains terminal specific configuration information and your local defaults. The current set up of INSTALL.PRG is for a terminal which uses the ESCape + '(' and ESCape + ')' sequences for controlling high and low intensity. Also, it is set up to use Houston, TX, and area code 713 as the default information to be assigned to new records as they are created, and these values should be changed to your own city and area code. This is based on the assumption that most of the people you'll want to track will be local, but you can easily override these settings when you are adding or editing people from other areas. The other two files which contain machine dependent information are called GETDATE.PRG and GETTIME.PRG. I have included several versions of these programs, but the active versions are for machines without any kind of clock access, so they will ask the user for that information when it is required. GETTIME.IBM is a version for MSDOS, and GETTIME.CPM is a version for Concurrent CP/M, CP/M-86, and MP/M if the machine is equipped with a clock that supports the operating system function. GETDATE.CPM is a version of GETDATE for the same CP/M systems. To use one of these other versions of the program, you simply rename the version you want to use to be GETDATE.PRG or GETTIME.PRG. These program files are named with the MSDOS dBASE convention, using the .PRG extension instead of the .CMD extension. If your copy of dBASE II uses .CMD for command files, you may either rename all of the .PRG files to be .CMD files, or you can modify your copy of dBASE II to use .PRG files. The default extensions are easily found as a small table in DBASE.COM, and you simply change the CMD to PRG to control the file extension it uses. Also note that my usage of .FMT files is rather unusual here. They are being used as programs which are primarily used for display formats on the screen, but they are NOT used with the SET FORMAT command. They are simply accessed with DO commands that override the default .PRG (or .CMD) extension. If you have other versions of the GETDATE and GETTIME programs for other types of computers and operating systems, I would appreciate it if you could send them to me, either at the address below or via the GEnie computer system (my mailing address on GEnie is SJACOBS). Additional versions, with credits to the contributors, will be included with updated versions of this system, and will also be collected in a library file of dBASE II software tools. (It should be fairly easy to do an MSDOS version of GETDATE.PRG based on GETTIME.IBM, since there is a different function accessed by INTerrupt 21 which will return the system date in the variable "bytes". If you're making that version remember that dBASE pokes are of decimal values, not hex. Sorry, I don't have a copy of dBASE II for MSDOS now, or I'd take care of it....) Please send your comments, bug reports, alternate versions of GETDATE or GETTIME, or suggestions to: Shannon Jacobs c/o Knight Real Estate 307 E 2nd Street Austin, TX 78701 This software is being distributed as shareware, and you are allowed and even encouraged to copy it for yourself and your friends, and to post it in places where it may be copied. However, if you like and use the program, or find its approach instructive and helpful to your own programming style and understanding of dBASE II, then I'd ask you to send $10 to that address. * INSTALL.PRG -- INSTALL terminal dependent features * 12/12/85 - slj, copyright 1985 by Shannon L. Jacobs * Default phone and address information store '713' to defaultac store 'Houston' to defaultci store 'TX' to defaultst * sequences to turn terminal High Intensity ON & OFF store chr(27) + ')' to hion store chr(27) + '(' to hioff * Bell sequence, if desired store chr(7) to bell * Scroll LENgth -- controls number of lines displayed in scroll mode store 12 to slen return * end of INSTALL.PRG * GETDATE.PRG -- GET DATE for date() * 5/12/85 - slj, based on a file of dBASE II Enhancements, original source * not known * 12/12/85 - this routine will work for 8-bit MP/M or Concurrent CP/M * operating systems store str(peek(16)-6*int(peek(16)/16),2) to mm store str(peek(17)-6*int(peek(17)/16),2) to dd store str(peek(18)-6*int(peek(18)/16),2) to yy set date to &mm &dd &yy release mm,dd,yy return * end of GETDATE.PRG * GETTIME.PRG * 5/31/85 - slj, modified to return mtime * 12/12/85 - original source of this module is not known, but this routine * will access the clock for 8-bit implementations of MP/M and * Concurrent CP/M poke 32,14,155,17,48,0,195,5,0 set call to 32 call store str(peek(50)-6*int(peek(50)/16),2) to THOUR store str(peek(51)-6*int(peek(51)/16),2) to TMIN if $(THOUR,1,1)=" " store "0"+$(THOUR,2,1) to THOUR endif if $(TMIN,1,1)=" " store "0"+$(TMIN,2,1) to TMIN endif store thour + ':' + tmin to mtime release thour,tmin return * end of GETTIME.PRG  Here is a list of commands that can be done in GE Mail at the Command prompt. Following that, are the Sub-commands for the ENTER Command. After the list of Sub-commands for the ENTER Command, you will find instructions for using the GE Mail Command Mode. Experienced users will want to learn the commands to speed up the sending and receiving of GE Mail. There are also ways to search old mail for specific letters. Summary of Commands to use at the Command prompt: 1. ACCEPT - Accepts input from disks or tapes without processing line feeds, and is used for uploading from disk. 2. CANCEL nnnnnnn - Permits the sender to cancel a letter at any time. 3. CHANGE - Change terminal characteristics. 4. DEFER - Marks the specified letter(s) as listed without actually having listed. 5. DELEGATE addr - Redirects letters from the current address to the specified address. 6. DISPLAY - Provides status of all letters that are current. 7. DISPLAY nnnnnnn - Provides activity status of a specific letter. 8. ENTER - Used for preparing and/or sending letters. 9. EXIT/STOP - Returns user back to GEnie menu system. 10. FORWARD nnnnnnn - The letter is forwarded to designated address(es). 11. GROUP - Establishes group address codes. 12. HELP - Lists the available GE Mail commands. 13. LIST I - Used to list respondent's current GE Mail letters. 14. LIST nnnnnnn - Lists out a specific letter. 15. PUBLISH - Publish your address in the public directory. 16. RELEASE ALL - Purges all letters that have been listed by the user. 17. RELEASE nnnnnnn - Purges letter nnnnnnn provided that it has been listed. 18. REMIND nnnnnnn - Places a REQUIRED ACTION tag on a letter. 19. REPLY nnnnnnn - Same as ENTER, provides automatic addressing. 20. REQUE - Sets Queue status to be recognized with unlisted letters. 21. SCAN I - Same as LIST, except user will continue to be reminded about letters and will not be released as in LIST. 22. STATUS nnnnnnn - The letter will continually be shown in LOGON display until all recipients have listed it. 23. TBATCH - Same as ACCEPT except first 3 lines are taken as as To, Carbon Copy, and Subject. 24. TELEX - Plus (+) = Asterisk (*). 25. UNLIST - Remove your address from the public directory. 26. USERS - Directory inquiry. 27. USE COMMUNITY - Display cross-community aliases. 28. USE SYS - Display cross-community systems directory. The following Sub-commands are available within the GE Mail ENTER command. These allow for quick input and editing of your letters. 1. *ACC,addr - Adds addresses to the Carbon Copy list. 2. *ATO,addr - Adds addresses to the TO list. 3. *CC,addr - Changes the addresses in the Carbon Copy list. 4. *CHAVC - Editing command to change the text of the current letter. 5. *COPY,nnnnnnn - Copies an existing letter into the current letter. 6. *DELETE,n - Deletes line n from the current letter. 7. *HELP - Prints commands available to the ENTER command. 8. *INSERT,n - Inserts subsequent line text after linen. 9. *LIST - Lists the current entered letter. 10. *LOCATE - Editing command to locate text in the current letter. 11. *M - Same as *CHAVC. 12. *NEXT - Permits the current letter to authorized users and returns user to the ENTER mode. 13. *n,text - Replaces line n in the current letter with text. 14. ^n - Back up n lines in the current letter. 15. *PASS - Provides extra security protection to the current letter. 16. *RESEQUENCE - Resequences the line numbers in the current text. 17. *SEND - Permits the current letter to authorized users and returns user to the GE Mail command level. 18. *SO - Send the current letter with Telex options. 19. *SUB,desc - Changes the letter subject. 20. *TAB,/ch/n - Establishes a TAB character and positions. 21. *TO,addr - Changes the addresses in the TO list. 22. *WIPE - Erases the text of the current letter and returns to ENTER level. 23. *X - Erases the text of the current letter and returns to GE Mail command level. The following is a description of commands available when within the GE Mail GROUP command. 1. *ADD,addr - Adds addresses to the current group. 2. *AF,n - Adds function number addresses to the current group. 3. *DELETE,addr - Deletes addresses from the current group. 4. *DF,n - Deletes function number addresses from the current group. 5. *HELP - Prints a list of commands available to the GROUP command. 6. *LIST - Lists the contents of the current group. 7. *M,desc - Modifies the description of the current group. 8. *REMOVE,addr - Deletes addresses from the current group. 9. *STORE - Stores the current set of addresses for current group and returns to GE Mail command level. 10. *USERS - Describes the contents of the current group. 11. *X - Returns to the GE Mail command level without taking any action. Group names are established with the group command. A group consists of one or more addresses assigned to a group name. The following is a description of the options available through the GE Mail CHAnge Command. 1. BANner=string - sets up a banner string to be displayed at user address sign on 2. DEFault - resets all change command options back to their TTY default values 3. DISplay=value - sets the hold queue display formatting of unlisted messages displayed at initial address logon 4. HELp - gives a brief description of all available change command options 5. LENgth=value - sets the users page length to the specified value 6. LISt - displays all current change command settings 7. OPTion=value - sets the paging option to be used for printing output at the users terminal 8. PARity=value - sets the parity of ASCII characters that are transmitted between GEnie and the users terminal 9. PAUse=string - sets the pause character to be printed at the end of each page as defined by LENgth=value 10. POStpend=string - sets the postpend string to be displayed at the end of each GE Mail message 11. PREpend=string - sets the prepend string to be displayed at the very beginning of each GE Mail message 12. REPly=value - establishes or changes the business reply address; use 'SAVe' option to store permanently 13. RETurn=value - sets the return address for the session; use 'SAVe' option to store permanently 14. SAVe - makes all changes entered thus far on the current line permanent 15. SET=value - sets up GEnie control options to be used by the users terminal 16. TERminal=value - sets the change command options to the default values stored by the system for the terminal type specified 17. TYPe=value - sets the character delay processing to be used by the users terminal 18. WIDth=value - sets the users page width to the value specified General Examples of using the GE Mail Command Mode: DISPLAY - This gives a short display of all unlisted mail LIST - This displays the contents of all unlisted mail DISPLAY I>850801 - This displays all mail since 850801. LIST I>850801 - This lists all mail since 850801. If you do a display and have letters retrieved, you have created a Display List. You can then list specific letters by referencing their sequence number in the list. LIST 1 3 6 8 - lists letters 1 and 3 and 6 and 8, as found in the previous Display List. Command?display i>851125 Queue# Item From To Sent Subject 1 1792011 SJACOBS LOUDEN 85/11/26 Silence is Deafening 2 1792012 SJACOBS FEEDBACK 85/11/26 Feedback to GE 3 0006102 LOUDEN SJACOBS 85/11/27 Database Roundtable 4 0111603 FEEDBACK SJACOBS 85/11/27 Feedback Response Command?rea 3* GETTIME.PRG -- GET TIME PRoGram * 12/12/85 - slj, version for machines without clocks or access to clocks accept 'Please input time (HH:MM)' to mtime return * end of GETTIME.PRG * GETTIME.PRG -- GET TIME PRoGram * 12/12/85 - slj, based on code originally done on 1/8/85, this version * accesses the DOS clock on an IBM PC, using a call on * INTerrupt 21. Copyright 1985 by Shannon L. Jacobs. * (This version is original work.) poke 57501, 81, 82, 80,180, 44,205, 33,137, 15,136, 79, 2, 88, 90, 89,195 set call to 57501 store ' ' to bytes call bytes if rank(bytes) < 10 store '0' + str(rank(bytes),1) to mtime else store str(rank(bytes),2) to mtime endif store mtime + ':' to mtime store rank($(bytes,2,1)) to tmin if tmin < 10 store mtime + '0' + str(tmin,1) to mtime else store mtime + str(tmin,2) to mtime endif release bytes,tmin return * end of GETTIME.PRG * GETDATE.PRG -- GET DATE for date() * 12/12/85 - generic version of GETDATE for machines without clocks access if val(date()) = 0 store ' ' to mm,dd,yy do while val(mm) < 1 .or. val(mm) > 12 accept ' Month (1-12)' to mm enddo do while val(dd) < 1 .or. val(dd) > 31 accept 'Day of Month (1-31)' to dd enddo do while val(yy) < 75 .or. val(yy) > 99 accept ' Year (75-99)' to yy enddo set date to &mm &dd &yy release mm,dd,yy endif return * end of GETDATE.PRG f do trackrpc case tanswer = 'N' .and. .not. eof do trackn case tanswer $ '123456789' .and. .not. eof do tracknno case tanswer $ 'TMERN123456789' ? "Warning -- Can't do that yet. Press any key to continue" wait case tanswer = 'P' do trackbu case tanswer = 'D' delete store T to was:dele case tanswer = 'S' store .not. scroll to scroll case tanswe VLAST:NAMECpFIRST:NAMECpBUSINESSCpCOMPANYCpPREFIXC qJOB:TITLECqSTREET1C'qSTREET2CEqCITYCcqSTATECrqZIPC tqSALUTATIONC~qATTENTIONCqTRACKINGCFqCOMMENTSCdqPHONE1CUrPHONE2Chr r indexing of secondary indices). SLJ8507251402 of PROPCREA.PRG  -8.000 -22.00011- 0 0 0 231500 230868 0KYLE HA 0 0SJIWES06/25/85l Estate Academy 0.030 6.76751-12S 115 40 1100000 0 * TRACK.FMT -- keep TRACK system main menu ForMaT * 7/22/85 - slj * 8/9/85 - switched to "/" * 12/12/85 - Copyright 1985 by Shannon L. Jacobs @ 1,5 say ' Look for: Edit: Other Options ' @ 2,5 say 'L = Person A = Add new (/) N = Next (or #) R = Record Call' @ 3,5 say 'C = Company T = Phone info P = Previous S = Scroll Mode' @ 4,5 say 'B = Business M = Mail info D = Delete H = Help ' @ 5,5 say 'F = Phrase (+) E = All info U = Undelete Q = Quit ' @ 6,30 say 'Your Choice ' get tanswer picture '!' read return * end of TRACK.FMT * TRACK.PRG -- keep TRACK system for phone numbers * 7/22/85 - slj * 8/9/85 - switched to "/" * 12/12/85 - revisions for distribution set talk off store 1 to delay ? 'These programs are copyrighted 1985 by the author, Shannon L. Jacobs.' ? 'You are encouraged to use them and share them, and if you like them,' ? ' and find them useful and/or instructive, the author asks you to' ? ' send a shareware donation of $10 to:' ? ? ' Shannon Jacobs' ? ' c/o Knight Real Estate' ? ' 307 E 2nd Street' ? ' Austin, TX 78701' ? ? 'Bug reports and suggested modifications also requested.' do while delay <= 65 store delay + 1 to delay enddo do install if .not. file('mlphone.dbf') use track copy structure to mlphone use mlphone index on !($(last:name,1,9) + $(first:name,1,2)+$(company,1,1)) to mlphone index on !($(company,1,9) + $(last:name,1,2)+$(first:name,1,1)) to trackcom index on !(business + $(company,1,1) + $(last:name,1,1)) to trackbus set index to mlphone else use mlphone index mlphone endif store 'L' to tanswer store 'N' to disp:type store F to was:dele,scroll do while .not. tanswer $ 'QX' do trackdis.fmt do track.fmt do case case tanswer $ 'LCB' do tracklu case tanswer = 'F' do trackps case tanswer $ '+=' continue case tanswer $ 'A/' do trackadd case tanswer $ 'TME' .and. .not. eof do tracked.fmt case tanswer = 'R' .and. .not. eof do trackrpc case tanswer = 'N' .and. .not. eof do trackn case tanswer $ '123456789' .and. .not. eof do tracknno case tanswer $ 'TMERN123456789' ? "Warning -- Can't do that yet. Press any key to continue" wait case tanswer = 'P' do trackbu case tanswer = 'D' delete store T to was:dele case tanswer = 'S' store .not. scroll to scroll case tanswer = 'U' recall case tanswer $ 'QX' * do nothing and fall out case tanswer $ 'H?' do track.hlp otherwise ? 'Please select from the known options' ? 'Press any key to continue' wait endcase enddo if was:dele ? 'Massive reindexing required. Please stand by...' set talk on set index to mlphone,trackbus,trackcom pack set talk off endif use release tanswer,was:dele,scroll,disp:type,delay return * end of TRACK.PRG  .not. eof do trackrpc case tanswer = 'N' .and. .not. eof do trackn case tanswer $ '123456789' .and. .not. eof do tracknno case tanswer $ 'TMERN123456789' ? 'Warning -- Can't do that yet. Press any key to continue' wait case tanswer = 'P' do trackbu case tanswer = 'D' delete store T to was:dele case tanswer = 'S' store .not. scroll to scroll case tanswe* TRACKBU.PRG -- TRACK Back Up some records * 7/24/85 - slj * 12/12/85 - copyright 1985 by Shannon L. Jacobs if scroll skip -10 else skip -1 endif return * end of TRACKBU.PRG * TRACKDIS.FMT -- keep TRACK system DISplay current record/s ForMaT * 7/22/85 - slj, based on MAILLIST.FMT * 7/25/85 - mutated for scrolling (MAILLIST.FMT part went to TRACKONE) * 12/12/85 - copyright 1985 by Shannon L. Jacobs erase if .not. eof if .not. scroll do trackone.fmt else do trackscr.fmt endif endif return * end of TRACKDIS.FMT * TRACKLU.PRG -- keep TRACK system Look Up * 7/22/85 - slj * 7/25/85 - modified for symmetric indexing approach * 12/12/85 - copyright 1985 by Shannon L. Jacobs do case case tanswer = 'L' store 'N' to disp:type set index to mlphone case tanswer = 'C' store 'C' to disp:type set index to trackcom case tanswer = 'B' store 'B' to disp:type set index to trackbus endcase ? accept ' Looking for? ' to key store !(trim(key)) to key find &key if # = 0 ? 'Not found. Looking for best guess...' locate for $(key,1,len(key)/2) $ !(last:name+first:name+company+business) if eof ? 'REALLY not found. I give up!' ? 'Press any key to continue.' wait goto top endif endif release key return * end of TRACKLU.PRG * TRACKN.PRG -- TRACK Next record (or block) * 7/24/85 - slj * 7/25/85 - reduced jump to 10 for scroll mode * 12/12/85 - copyright 1985 by Shannon L. Jacobs if scroll store 10 to tn do while tn > 0 skip store tn - 1 to tn enddo else skip endif goto # release tn return * endof TRACKN.PRG * TRACKNNO.PRG -- TRACK Next given NO.(number) * 7/24/85 - slj * 12/12/85 - copyright 1985 by Shannon L. Jacobs store val(tanswer) to tnn do while tnn > 0 skip store tnn - 1 to tnn enddo goto # release tnn return * endof TRACKNNO.PRG * TRACKRPC.PRG -- keep TRACK system Record Phone Contact * 7/22/85 - slj, borrowing from TRACKED.FMT * 12/12/85 - copyright 1985 by Shannon L. Jacobs store $(comments, 1,50) to line1 store $(comments,51,50) to line2 do gettime do getdate replace tracking with $(date(),7,2) + $(date(),1,2) + $(date(),4,2) ; + ' ' + mtime + ' ' + tracking erase @ 8, 8 SAY trim(prefix) + ' ' + trim(first:name) + ' ' + last:name @ $+2,10 say 'Comments ' get line1 @ $+1,19 get line2 @ $+2, 0 say 'Activity Record:' @ $+1, 0 get tracking read replace comments with line1 + line2 release line1,line2 return * end of TRACKRPC.PRG * TRACKONE.FMT -- TRACK display ONE record * 7/25/85 - slj * 12/12/85 - copyright 1985 by Shannon L. Jacobs do case case disp:type = 'N' @ 7,15 say 'Sorted on Last Names' case disp:type = 'C' @ 7,15 say 'Sorted by Company Names' case disp:type = 'B' @ 7,15 say 'Sorted by type of Business' endcase if * @ 8,52 say bell + hion + 'RECORD TO BE DELETED' + hioff endif @ 9,40 say 'Business type: ' + business if trim(last:name) <> ' ' @ 10,10 say trim(prefix) + ' ' + trim(first:name) + ' ' + last:name endif if trim(company) <> ' ' @ 11,10 SAY company endif @ 12,10 SAY street1 if trim(street2) <> ' ' @ 13,10 SAY street2 endif if trim(city) <> ' ' @ 14,10 SAY trim(city) + ', ' + state + ' ' + zip endif @ 16, 1 say 'Activity Record:' @ 17, 1 say tracking @ 19,10 say 'Comments ' + $(comments, 1,50) @ 20,20 say $(comments,51,50) @ 10,55 say phone1 if $(phone2,7,3) <> ' ' @ 11,55 say phone2 endif return * end of TRACKONE.FMT * TRACKADD.PRG -- keep TRACK system ADD new name PRoGram * 7/22/85 - slj * 7/25/85 - modified and simplified (no checking) * 8/9/85 - reversed sense of 'A' and restored to add mode * 9/12/85 - changed index control (simplified), changed return from * add mode to N (next) mode, deleted null creations * 12/12/85 - copyright 1985 by Shannon L. Jacobs if tanswer <> 'A' store 'T' to tanswer else store 'E' to tanswer endif append blank if # = 1 set index to mlphone,trackcom,trackbus reindex endif replace phone1 with '(' + defaultac + ')' replace phone2 with phone1 replace city with defaultci replace state with defaultst do gettime do getdate replace tracking with $(date(),7,2) + $(date(),1,2) + $(date(),4,2) ; + ' ' + mtime * next statement prevents eof goto # do tracked.fmt if trim(last:name) + trim(first:name) + trim(company) = ' ' delete store T to was:dele endif store 'N' to tanswer return * end of TRACKADD.PRG * TRACK.HLP -- keep TRACK system HeLP file * 7/22/85 - slj * 8/9/85 - updated * 12/12/85 - updated, copyright 1985 by Shannon L. Jacobs erase text This system is designed to assist in maintaining a database of names, with associated information such as telephone numbers, company names, and addresses. It includes the following functions: SEARCH FUNCTIONS ("Look for" column): These functions are used to position the phone directory at a particular location. These functions also have two side effects: 1) After using one of these options the list will look like it has been sorted on that basis. After looking for a name, the entire list will be sorted by name, after a company search, the order will be based on companies, and after a business search, the listing will be by type of business. 2) The display in scroll mode will also reflect the sort order then active. Names will be the first column after a name search, and companies will be in the first column after a company or business search. The type of business will only be displayed in scroll mode after a business search, but that column will not be first. Press any key to continue or Q to quit endtext wait to th if th $ 'Qq' return endif erase text L)ook up a person--this routine does a quick check to see if a given last name is in the list. It returns the first individual having that name, if one is found, and the N)ext option can be used to skip forward if this is not the correct person. If no match is found, it will return with the first name after the given one, if available. C)ompany look up--this option searches for a given company. It will find only the first record associated with this company. B)usiness look up--look for any company or individual engaged in a given line of business. F)ind Phrase--search for a key phrase in the comment field, using the current search order. It is also possible to search for any entry which mentions ANY one of a group of key phrases. + --Continue searching for the next record containing the current phrase. Press any key to continue or Q to quit endtext wait to th if th $ 'Qq' return endif erase text EDIT FUNCTIONS ("Edit" column): These functions are used to add new names to the phone directory or edit existing ones. For editing, only the current record can be edited directly. A)dd a new entry--creates a new record. This option will immediately offer the opportunity to fill in all information. / --add a new record, but only fill in the phone information. T)elephone information editing--only edits the name and telephone data. M)ail information editing--edits everything except for phone information. E)dit the current entry--allows for detailed examination and editing of all of the information for the record currently displayed. Press any key to continue or Q to quit endtext wait to th if th $ 'Qq' return endif erase text N)ext entry--allows you to skip forward in the list. The list appears in order of last search. In scroll mode, "N" will jump forward 10 names or companies. Entering a number from 1 to 9 (represented on the main menu as "#", and as displayed on the left side of the first entries while in scroll mode) will jump forward that many entries. P)revious entry--goes backwards through the list. In scroll mode, the jump will be back 10 entries, if possible. D)elete this record--marks a record for deletion. Deletion will not actually take place until leaving the program. Deleted records will have a deletion marker on all displays and during editing. U)ndelete this record--can undo the effect of a deletion (until the program is finished, when the deletion becomes permanent). Press any key to continue or Q to quit endtext wait to th if th $ 'Qq' return endif erase text R)ecord a phone contact--uses the current time and date and puts them at the front of the history information, sliding the old information over to make room. Both the comment and history field are then opened for editing. S)croll Mode--this command is a toggle switch for the scroll mode. With scroll mode on the display shows partial information for many of the next records. When scroll mode is off the program only displays the current record, though more information is visible. Each time this command is selected the scroll mode changes from off to on or back. H)elp--displays this information. Q)uit--exits from the this program. Press any key to continue endtext wait release th return * end of TRACK.HLP any company or individual engaged in a given line of business. F)ind Phrase--search for a key phrase in the comment* TRACKED.FMT -- keep TRACK system EDiting ForMaT screen * 7/22/85 - slj, from MAILLIST.FMT & TRACKDIS.FMT * 7/25/85 - modified for conditional editing * 9/12/85 - adjusted to use controlled replacing instead of reindexing * 12/12/85 - copyright 1985 by Shannon L. Jacobs * 1/13/86 - removed relative screen coordinates store # to teloc store last:name to telast if trim(last:name) + trim(company) = ' ' replace last:name with chr(1) endif store first:name to tefirst store company to tecomp store business to tebus store $(phone1,1,5) to teac1 store $(phone2,1,5) to teac2 store $(phone1,7,8) to tep1 store $(phone2,7,8) to tep2 store $(phone1,16,4) to ext1 store $(comments, 1,50) to line1 store $(comments,51,50) to line2 erase if * @ 1,52 say bell + hion + 'RECORD TO BE DELETED ' + hioff endif @ 2, 1 SAY 'First Name ' get tefirst @ 3, 2 SAY "Last Name " get telast if .not. tanswer = 'M' set colon off @ 2,35 say 'Bus. Phone' get teac1 picture '(999)' @ 2,51 get tep1 picture '999-9999' @ 2,60 say 'ext. ' get ext1 picture '9999' @ 3,35 say 'Home Phone' get teac2 picture '(999)' @ 3,51 get tep2 picture '999-9999' set colon on @ 4, 0 say 'Type of Business' get tebus endif @ 5, 6 say 'Job Title ' get job:title @ 6, 8 say 'Company ' get tecomp if .not. tanswer = 'T' @ 7, 1 SAY "Address Line 1 " get street1 @ 8, 9 SAY "Line 2 " get street2 @ 9,11 SAY "City " get city @ 9,35 SAY 'State ' get state picture '!!' @ 9,50 SAY 'Zip Code ' get zip picture '99999' @ 11,30 SAY "Title (Mr./Ms.) " get prefix @ 12,24 SAY "Salutation (Dear ___) " get salutation @ 13,33 say "Attention of " get attention endif @ 15, 7 say 'Comments ' get line1 @ 16,16 get line2 @ 18, 0 say 'Activity Record:' @ 19, 0 get tracking read replace comments with line1 + line2 replace phone1 with teac1 + ' ' + tep1 + ext1 replace phone2 with teac2 + ' ' + tep2 if last:name <> telast .or. first:name <> tefirst .or. ; company <> tecomp .or. business <> tebus ? 'Index affected. Readjusting indexes....' do case case disp:type = 'N' set index to mlphone,trackcom,trackbus case disp:type = 'C' set index to trackcom,mlphone,trackbus case disp:type = 'B' set index to trackbus,mlphone,trackcom endcase goto teloc replace last:name with telast, first:name with tefirst ; company with tecomp, business with tebus endif do case case disp:type = 'N' set index to mlphone case disp:type = 'C' set index to trackcom case disp:type = 'B' set index to trackbus endcase goto teloc release line1,line2,teac1,tep1,teac2,tep2,teloc,telast,tefirst,tecomp,tebus return * end of TRACKED.FMT = 'B' set index to trackbus,mlphone,trackcom endcase goto teloc replace last:name with telast, first:name with tefirst ; company with tecomp, business with tebus endif do case case disp:type = 'N' set index to mlphone case disp:type = 'C' set index to trackcom case disp:type = 'B' set index to trackbus endcase goto teloc release line1,line2,teac1,tep1,teac2,tep2,teloc,* TRACKPS.PRG -- TRACK system Phrase Search routine * 10/14/85 - slj * 12/12/85 - copyright 1985 by Shannon L. Jacobs accept 'Phrase to search for ' to key store !(trim(key)) to key store "'&key.'$!(comments)" to phrasecond do while key <> ' ' accept 'Additional phrase? ( only to quit) ' to key if key <> ' ' store !(trim(key)) to key store phrasecond + ".or.'&key.'$!(comments)" to phrasecond endif enddo goto top if len(phrasecond) > 128 ? 'Error--Search phrase is too long. Press any key to continue' wait else locate for &phrasecond endif release key,phrasecond return * end of TRACKPS.PRG ATECrqZIPC tqSALUTATIONC~qATTENTIONCqIDC qTRACKINGCFqCOMMENTSCdqPHONE1C_rPHONE2Crr * TRACKSCR.FMT -- TRACK display SCRoll of 14 records * 7/25/85 - slj, loosely based on TRACKONE.FMT * 12/12/85 - copyright 1985 by Shannon L. Jacobs store 0 to tscount store # to tsloc do case case disp:type = 'N' @ 8, 4 say 'SORTED ON: Last Names' @ 8,57 say 'Company Name' case disp:type = 'C' @ 8, 5 say 'SORT FIELD: Company' @ 8,57 say 'Contact Name' case disp:type = 'B' @ 8,10 say 'Company Name' @ 8,53 say 'SORT: Bus.' @ 8,67 say 'Last Name' endcase @ 8,28 say 'Bus. Phone' @ 8,41 say 'Home Phone' @ 10,1 say 'At >' do while tscount <= slen .and. .not. eof @ 10+tscount,31 say $(phone1,7,8) if $(phone1,2,3) <> '512' .and. $(phone1,2,3) <> ' ' @ 10+tscount,27 say $(phone1,2,3) + '/' endif if tscount >=0 .and. tscount <= 9 @ 10+tscount,4 say str(tscount,1) endif if $(phone2,7,3) <> ' ' if $(phone2,2,3) <> '512' .and. $(phone2,2,3) <> ' ' @ 10+tscount,40 say $(phone2,2,3) + '/' endif @ 10+tscount,44 say $(phone2,7,8) endif do case case disp:type = 'N' @ 10+tscount, 6 say $(trim(first:name) + ' ' + trim(last:name),1,20) @ 10+tscount,53 say $(company,1,26) case disp:type = 'C' @ 10+tscount, 6 say $(company,1,20) @ 10+tscount,53 say $(trim(last:name) + ', ' + first:name,1,26) case disp:type = 'B' @ 10+tscount, 6 say $(company,1,20) @ 10+tscount,53 say $(business,1,11) @ 10+tscount,65 say $(last:name,1,14) endcase if * @ 10+tscount,65 say hion + 'DELETED' + hioff endif store tscount + 1 to tscount skip enddo goto tsloc release tscount,tsloc return * end of TRACKSCR.FMT