!" >- Ͷ Aګ ҫ _!7^#V~  \p Z z ů2[\͓͢1!~(OOE# =ʻf "=« ý> 2͐ f "]=f =« *]}o"_  *] Hello There! You have just tried to boot your computer on one of your RELOAD diskettes. You shouldn't attempt to boot on this diskette, but rather boot on the 1st reload disk. It contains the procedure to accomplish the reload. TEACH6U CMD  TEACH7 CMD< TEACH7P CMD, TEACH8 CMD8 TEACH8F CMD( TEACH8R CMD TEACH9 CMD< TEACHC CMD  TEACHI CMD@ TEACHXC CMD TUTMEM MEM TUTNABK DBF  WHITEHSECMD CB-BANK DBF CB-BOOK MEM CB-CANCLCMD!" CB-CHECKCMD6#$%& CB-CHECKDBF' CB-CLEARCMD() CB-DATE CMD* CB-DEPSTCMDM+,-./ CB-DEPSTDBF0 CB-HELP CMD12 CB-MAIN CMD34 CB-MASK CMD 5 CB-NBWD CMD'678 CB-RECONCMD:9:;< CB-REPRTCMDY=>?@AB ZIPIN COMkCDEFGHIJKLfghij DBASEMSGTXTMNOPQRSTUVWXYZ[\ DBASEMSGTXT]^_`abcde ZSCRN OVLklmnopqrstRELOAD 8 DGEN CMD{| DGEN OVL4}~ DSORT COM] FILEGEN CMD FORMGEN CMDO IN-ADD CMD IN-CHNG CMD IN-CLEANCMD IN-DATE CMD IN-DELTECMD IN-DTAILCMD IN-HELP CMD IN-INIT CMD IN-MAIN CMD IN-MAIN DBF IN-PDESCNDX IN-PNUM NDX IN-REODRCMD IN-RPT CMD IN-RPT1 FRM IN-RPT2 FRM IN-UPDTECMD IN-VIEW CMD IN-VWED CMD INSTALL COMp LABELGENCMD LB-NAMESDBF LB-PRINTCMD MENUGEN CMD& REV-OFF CMD REV-ON CMDERASE ?"Now you're ready to try UPDATE. Both the master and transaction files" ?"(EMPMAST and EMPTRANS) are in sequence by EMPNO on the files EMPMSRT and" ?"EMPTSRT. First, you have to USE EMPMSRT." STORE 'USE EMPMSRT' TO CHECK DO CHECKC ?"Type UPDATE FROM EMPTSRT ON EMPNO REPLACE LASTNAME ADD GROSSSAL " STORE 'UPDATE FROM EMPTSRT ON EMPNO REPLACE LASTNAME ADD GROSSSAL' TO CHECK DO CHECKC WAIT ERASE ?"To see what the UPDATE did, type REPORT FORM EMPMASTR " STORE 'REPORT FORM EMPMASTR' TO CHECK DO CHECKC ?"Notice that REDFORD (employee 2) lost his name, and that GROSSSAL has" ?"been changed in all three records that had transactions. REDFORD lost" ?"his name, because REPLACE was used for the LASTNAME field, and the" ?"LASTNAME field in the transaction file for his record was blank." ?"GROSSSAL was increased or decreased based on the amounts that were in" ?"the GROSSSAL field on the transaction file." WAIT ERASE ?"There are ways, using command procedures, to exercise complete control" ?"over updates to files. We'll see how that can be done, in lesson 10." WAIT DO TEACH6M ERASE ?"That's it for SORT, UPDATE, and dealing with memory variables. After" ?"you've QUIT, practice with these commands, so you'll be able to use them" ?"in the future." ? ?"Please QUIT now." STORE 'QUIT' TO CHECK DO CHECKC RETURN STORE 'REPORT FORM EMPMASTR' TO CHECK FORM EMPMASTR' TO CHECK ords on it. If you make a mistake, I'll tell you what to do, but I" ?"want you to try toERASE SET CONSOLE OFF USE EMP8 COPY TO EMPMAST SET CONSOLE ON ?"In lesson 6, &STUDENT, you learned how to use SORT and UPDATE commands" ?"to update master files from transaction files. You also covered" ?"memory variables and their use through STORE, DISPLAY MEMORY, SAVE," ?"RESTORE, RELEASE, and CLEAR." ? ?"In lesson 7, you're going to learn how to use the SELECT PRIMARY and" ?"SELECT SECONDARY commands, and also, how to JOIN files. The JOIN" ?"is a fundamental feature of relational systems (see the dBASE II" ?"LESSONS introduction for more details), and is, essentially, a match" ?"merge process that combines files into full-fledged data bases." WAIT ERASE ?"First, you're going to JOIN an employee name file (EMPNAME), with a job" ?"history file (JOBHIST), and produce a report that displays the job" ?"histories for all employees. You're using two files to do this, since it" ?"is possible that employees could have had many different job titles, and" ?"since relational systems do not permit repeating groups (repeating" ?"fields), you cannot permit multiple job history fields in the employee" ?"master file itself." ? ?"First, look at the file structures for EMPNAME, and JOBHIST, and" ?"produce reports that display the contents of each file." WAIT ERASE ?"Issue the commands to display the structure and print a report for" ?"EMPNAME, first. I have a report form called EMPNAME for you to use to" ?"generate the report." STORE 'USE EMPNAME' TO CHECK DO CHECKC STORE 'DISPLAY STRUCTURE' TO CHECK DO CHECKC STORE 'REPORT FORM EMPNAME' TO CHECK DO CHECKC WAIT ERASE ?"Now, issue the use, display structure, and report commands for" ?"JOBHIST. I have a report form called JOBHFRM you can use for the" ?"report." STORE 'USE JOBHIST' TO CHECK DO CHECKC STORE 'DISPLAY STRUCTURE' TO CHECK DO CHECKC STORE 'REPORT FORM JOBHFRM' TO CHECK DO CHECKC WAIT ERASE ?"Now JOIN the two files to produce a file that contains all job" ?"history information for all employees." ? ?"The JOIN command reads each record in the PRIMARY USE file, one at a" ?"time, and then interrogates every record in the SECONDARY USE file to see" ?"if the FOR expression is satisfied. If the FOR expression is satisfied," ?"a record is written to the file specified by the TO clause." ? ?"Let's go through the series of commands for the JOIN of EMPNAME and" ?"JOBHIST." WAIT ERASE ?"First, USE JOBHIST." STORE 'USE JOBHIST' TO CHECK DO CHECKC ?"Now, SELECT SECONDARY." STORE 'SELECT SECONDARY' TO CHECK DO CHECKC ?"Now, USE EMPNAME." STORE 'USE EMPNAME' TO CHECK DO CHECKC ?"Now SELECT PRIMARY to get back to the JOBHIST file." STORE 'SELECT PRIMARY' TO CHECK DO CHECKC ?"And now, JOIN TO JOINJOB FOR EMPNO = S.EMPNO (notice the S. preceding" ?"the second EMPNO). That indicates that dBASE II is to use EMPNO from" ?"the secondary file." STORE 'JOIN TO JOINJOB FOR EMPNO = S.EMPNO' TO CHECK DO CHECKC WAIT ERASE ?"Now, &STUDENT, let's use JOINJOB, display it's structure, and print a" ?"report using the report form JJFRM." STORE 'USE JOINJOB' TO CHECK DO CHECKC STORE 'DISPLAY STRUCTURE' TO CHECK DO CHECKC STORE 'REPORT FORM JJFRM' TO CHECK DO CHECKC WAIT DO TEACH7P ERASE ?"That's it for JOIN, SELECT, and Relational data base manipulation." ?"If you get involved in complex JOINS, with many files, make sure" ?"that you do not violate any of the relational data base normalization" ?"principles (see the dBASE II TUTOR introduction for more details)." ? ?"One more caution, when using JOIN. JOINs of larger files can take an" ?"extraordinary amount of time. If you find that run times for JOINs" ?"are becoming excessive, you may want to accomplish the results of a JOIN" ?"by using the UPDATE command, or by writing a command procedure." ? ?"And, speaking of command procedures, once you have all of your file" ?"structures defined and know the JOINs required to build your Relational" ?"Data Base, you can create a command procedure that contains all of the" ?"USE, SELECT, and JOIN commands, and let the command procedure do all of" ?"the work for you." ? ?"It's time to QUIT." STORE 'QUIT' TO CHECK DO CHECKC RETURN 'USE JOINJOB' TO CHECK DO CHECKC STORE 'DISPLAY STRUCTURE' TO CHECK DO CHECKC STORE 'REPORT FORM JJFRM' TO CHECK 'USE JOINJOB' TO CHECK DO CHECKC STORE 'DISPLAY STRUCTURE' TO CHECK DO CHECKC STORE 'REPORT FORM JJFRM' TO CHECKuired to build your Relational" ?"Data Base, you can create a command procedure that contains all of the" CCHECKuired to build your Relational" ?"Data Base, you can create a command procedure that contains all of the" C ORM JJFRM' TO CHECK DO CHECKC WAIT DO TEACH7P ERASE ?"That's it for JOIN, SELECT, and Relational data base manipulation." ?"If you get involved in complex JOINS, with many files, make sure" ?"that you do not violate any of the relational data base normalization" ?"principles (see the dBASE II TUTOR introduction for more details)." ? ?"One more caution, when using JOIN. JOINERASE ?"You'll be trying something a little more complicated this time. You're" ?"going to use an employee master file, join it to a tax code file to pick" ?"up deduction percentages, join that file to the employee name file, join" ?"that file to a department name file, and finally, using that final" ?"relational data base, compute tax and net salary amounts, and produce a" ?"payroll register report." WAIT ERASE ?"First, I'll show you the employee master file. It's called EMPMAST. Use" ?"it, display it's structure, and then produce a report using the report" ?"form EMPMAST." STORE 'USE EMPMAST' TO CHECK DO CHECKC STORE 'DISPLAY STRUCTURE' TO CHECK DO CHECKC STORE 'REPORT FORM EMPMAST' TO CHECK DO CHECKC WAIT ERASE ?"Now. &STUDENT, look at the file EMPMAST is going to be JOINed to." ?"It's called TAXMAST. Enter USE TAXMAST." STORE 'USE TAXMAST' TO CHECK DO CHECKC ?"Now, display it's structure." STORE 'DISPLAY STRUCTURE' TO CHECK DO CHECKC ?"Notice that it contains a TAXCODE field, which is also on the EMPMAST" ?"file, and that a tax % field is also present. After you have JOINed" ?"EMPMAST and TAXMAST, the JOINed file will have all the information" ?"needed to compute a tax, and net salary amount for every employee." WAIT ERASE ?"OK. Let's do the first JOIN. Enter, USE EMPMAST." STORE 'USE EMPMAST' TO CHECK DO CHECKC ?"Now, SELECT SECONDARY." STORE 'SELECT SECONDARY' TO CHECK DO CHECKC ?"Now, USE TAXMAST." STORE 'USE TAXMAST' TO CHECK DO CHECKC ?"Now, SELECT PRIMARY." STORE 'SELECT PRIMARY' TO CHECK DO CHECKC ?"And, finally, JOIN TO JOINPAY1 FOR TAXCODE = S.TAXCODE." STORE 'JOIN TO JOINPAY1 FOR TAXCODE = S.TAXCODE' TO CHECK DO CHECKC WAIT ERASE ?"Each record in JOINPAY1 now contains, for each employee that was on the" ?"EMPMAST file, a tax percentage amount. If you now use JOINPAY1, you can" ?"also include on our data base an employee name, by performing a JOIN to" ?"the EMPNAME file. which contains two fields, EMPNO, and EMPNAME." ? ?"First USE JOINPAY1, then SELECT SECONDARY, then USE EMPNAME, then" ?"SELECT PRIMARY, then JOIN TO JOINPAY2 FOR EMPNO = S.EMPNO." ? STORE 'USE JOINPAY1' TO CHECK DO CHECKC STORE 'SELECT SECONDARY' TO CHECK DO CHECKC STORE 'USE EMPNAME' TO CHECK DO CHECKC STORE 'SELECT PRIMARY' TO CHECK DO CHECKC STORE 'JOIN TO JOINPAY2 FOR EMPNO = S.EMPNO' TO CHECK DO CHECKC WAIT ERASE ?"Now, &STUDENT use and display the structure of JOINPAY2 to see what " ?"the data base has so far." STORE 'USE JOINPAY2' TO CHECK DO CHECKC STORE 'DISPLAY STRUCTURE' TO CHECK DO CHECKC ?"Notice that the fields EMPNO and TAXCODE appear twice. You could have" ?"removed the duplicates if you had used the FIELD specification in the" ?"JOINs, but since you're not nearing the 32 field limit for a file, the" ?"duplicates can exist, and the entry of the JOIN commands is easier" ?"without the FIELD specification." WAIT ERASE ?"Do a JOIN of JOINPAY2 and DEPTMAST, which has a DEPTNO and DEPTNAME" ?"field in it. Enter, USE JOINPAY2." STORE 'USE JOINPAY2' TO CHECK DO CHECKC ?"Now, enter SELECT SECONDARY." STORE 'SELECT SECONDARY' TO CHECK DO CHECKC ?"Now, USE DEPTMAST." STORE 'USE DEPTMAST' TO CHECK DO CHECKC ?"Now, SELECT PRIMARY." STORE 'SELECT PRIMARY' TO CHECK DO CHECKC ?"Now, JOIN TO JOINPAY3 FOR DEPTNO = S.DEPTNO." STORE 'JOIN TO JOINPAY3 FOR DEPTNO = S.DEPTNO' TO CHECK DO CHECKC ?"Now, the data base has department name data in it too, and you can" ?"compute tax and net salary amounts, and produce the payroll register." WAIT ERASE ?"Issue the commands to do all this. First, USE JOINPAY3." STORE 'USE JOINPAY3' TO CHECK DO CHECKC ?"Now, REPLACE ALL TAXES WITH GROSSSAL * TAXPCT." STORE 'REPLACE ALL TAXES WITH GROSSSAL * TAXPCT' TO CHECK DO CHECKC ?"Now REPLACE ALL NETSAL WITH GROSSSAL - TAXES." STORE 'REPLACE ALL NETSAL WITH GROSSSAL - TAXES' TO CHECK DO CHECKC ?"And, finally, ask for a REPORT using the report form REGFRM." STORE 'REPORT FORM REGFRM' TO CHECK DO CHECKC WAIT ERASE ?"If you change any of the structures for the files being used, by adding" ?"more fields or changing field lengths, the same commands that we used" ?"for this entire procedure will still work. Relational data base" ?"systems, like dBASE II, use this data independence or automatic" ?"navigation feature to make changes to file and data base structures" ?"transparent to the users of the system." WAIT RETURN ount for every employee." WAIT ERASE ?"OK. Let's do the first JOIN. Enter, USE EMPMAST." STORE 'USE ESET CONSOLE OFF DELETE FILE EMPMAST SET CONSOLE ON ERASE ?"In lesson 7, &STUDENT, you learned how simple files can be transformed" ?"into data bases through the JOIN command. Although the payroll" ?"system we used as an illustration was a rather simple example of the" ?"power of the relational JOIN, the power of such a tool is quite" ?"obvious." ? ?"In lesson 8, you're going to learn about some of functions that can be" ?"used in dBASE II. Functions, as we will see, permit near assembly" ?"operations to be performed, without having to call assembly language" ?"programs. I'm going to show you the functions available in the latest" ?"release of dBASE II. Most of them are available in earlier releases, but" ?"before you try them on your own, make sure that they are included in" ?"your release of dBASE II." ? ?"To illustrate the functions, I'm also going to cover some other" ?"commands. You'll look at ACCEPT, which is used to ACCEPT data from the" ?"keyboard. The INPUT statement can also be used to obtain data from the" ?"keyboard, but there are some differences, and ACCEPT is the generally" ?"favored method for keyboard data entry. We'll also be looking at the ?" ?"(question mark, or what is) command, which can be used to display data" ?"on the CRT." WAIT ERASE ?"First, you will look at the functions LEN, @, $, and !. You'll use ACCEPT" ?"to get the data for our illustration. Type ACCEPT 'ENTER A STATEMENT TO" ?"BE PARSED' TO STATEMENT first, then, when you are prompted, type" ?"NAME,N,20,5." ? ?"Type ACCEPT 'ENTER A STATEMENT TO BE PARSED' TO STATEMENT " STORE "ACCEPT 'ENTER A STATEMENT TO BE PARSED' TO STATEMENT" TO CHECK DO CHECKC1 STORE 0 TO OK DO WHILE OK = 0 ? ?"Now, type NAME,N,20,5 " ACCEPT 'ENTER A STATEMENT TO BE PARSED' TO STATEMENT STORE !(STATEMENT) TO STATEMENT IF STATEMENT = 'QUIT' QUIT ENDIF IF STATEMENT # 'NAME,N,20,5' ?"You didn't enter NAME,N,20,5. Please try again." LOOP ELSE STORE 1 TO OK ENDIF ENDDO WAIT ERASE ?"Now, &STUDENT, find where in STATEMENT, the first comma occurs, and STORE" ?"that location to a memory variable called COMMAL. The @ function (where" ?"is it at), does this. The field specified in the second parameter is" ?"scanned to see where the first parameter in the command occurs." ? ?"Type STORE @(',',STATEMENT) TO COMMAL " STORE "STORE @(',',STATEMENT) TO COMMAL" TO CHECK DO CHECKC ?"The first comma occurs in position 5 of STATEMENT. Now, take the" ?"characters preceding the comma, and STORE them to a memory variable" ?"called WORD1. You can use the $ (substring) function for this. The" ?"expression specified by the first parameter, starting at the position" ?"specfied by the second parameter, for a length of the third parameter is" ?"the result of the $ function." ? ?"Type STORE $(STATEMENT,1,COMMAL - 1) TO WORD1 " STORE 'STORE $(STATEMENT,1,COMMAL - 1) TO WORD1' TO CHECK DO CHECKC WAIT ERASE ?"The $ function can be used without the second and third parameters, in" ?"which case the first parameter will be analyzed to see if a substring" ?"occurs anywhere within it. For example, you could see if the string NAME" ?"occurs anywhere within STATEMENT." ? ?"Type ? 'NAME' $(STATEMENT) " STORE "? 'NAME' $(STATEMENT)" TO CHECK DO CHECKC ?"The .T. indicates that the substring NAME does occur within STATEMENT." ? ?"The $ function with the second and third parameters omitted is a very" ?"nice way to do keyword searching of files. For example, using the" ?"DISPLAY ALL or REPORT commands, a file of text could be searched like" ?"this:" ? ?"DISPLAY ALL FOR 'AGRICULTURE' $(ABSTRACT) .OR. 'PLANT' $(ABSTRACT)" ? ?"If you have textual data, and need a keyword searching facility for it," ?"the facility is already in dBASE II." WAIT ERASE ?"Whether you entered NAME in upper or lower case, I converted it to" ?"upper case. You may have noticed that I have performed this upper case" ?"conversion throughout these lessons. I've changed WORD1 (NAME) from" ?"upper to lower case, and I'm going to let you convert it back to upper" ?"case. You'll use the ! function to do this." ? ?"First, &STUDENT, make sure that WORD1 contains 'name'." STORE 'name' to WORD1 ? ?"Type ? WORD1 " STORE '? WORD1' TO CHECK DO CHECKC ? ?"Now, type STORE !(WORD1) TO WORD1U " STORE 'STORE !(WORD1) TO WORD1U' TO CHECK DO CHECKC ?"Consider that you have files with text in them, and want to break down" ?"the text into single words that are separated by blanks, commas, colons," ?"or something else, to produce an index. The preceding group of " ?"instructions does just that. When that sequence of instructions is put" ?"command procedure, it can be used to break down text on any file." WAIT DO TEACH8F DO TEACH8R ERASE ?"The functions can be most powerful when used in command procedures with" ?"IF's and DO LOOPS, but they do have value when being used from the" ?"keyboard." ? ?"I'm going to ask you to do something now that I have not asked you to do" ?"before, and will not ask you to do again. I'd like you to take the" ?"dBASE II reference card, which came with your system, and read about the" ?"the SET options. Once you've done that, try some of the dBASE II functions" ?"and experiment with the various SET commands." ? ?"Now, it's time to quit." STORE 'QUIT' TO CHECK DO CHECKC RETURN ASEII manual and R E A D (a dirty word) what it haASEII manual and R E A D (a dirty word) what it haASEII manual and R E A D (a dirty word) what it ha ENT,1,COMMAL - 1) TO WORD1' TO CHECK DO CHECKC WAIT ERASE ?"The $ funcERASE ?"Now, try the FILE, LEN, TRIM, #, EOF, *, and TYPE functions. The" ?"EMPMAST file from lesson 5 should be available. You'll use the FILE" ?"function, &STUDENT, to make sure it is." ? ?"I'll continue to use the ? (what is) command to show you how that works." ?"There is also a ?? command, which displays just like ?, but will not" ?"advance a line after the display. This is useful when you wish to print" ?"the results from several operations on one print line of a printer." WAIT ERASE ?"Type ? FILE('EMPMAST') " STORE "? FILE('EMPMAST')" TO CHECK DO CHECKC ?"That's not good. The .F. means that the file test was false, and" ?"EMPMAST is not around. Perhaps the back-up is still available." ? ?"Type ? FILE('EMPBAK1') " STORE "? FILE('EMPBAK1')" TO CHECK DO CHECKC ?"The .T. indicates true, so we can use that file." ? ?"Note - You could have STOREd the results of those tests (.T., or .F.)," ?"and used them to control the flow of a program. You'll see how that" ?"might be done in the last dBASE II LESSONS module." ? ?"Now, &STUDENT, use EMPBAK1, and try some other functions." STORE 'USE EMPBAK1' TO CHECK DO CHECKC ? ?"You're going to SKIP through EMPBAK1, looking for records that contain" ?"SMITH in them. When we are at a record that contains SMITH in the" ?"LASTNAME field, we want to STORE the record number of that record" ?"into a memory variable called RECNO, but only if the record is not" ?"flagged for deletion. I know this can be done easily in a DO LOOP," ?"but I'm going to wait until the last lesson to illustrate DO." ? ?"You're at the first record of EMPBAK1. See if LASTNAME is SMITH." WAIT ERASE ?"Enter ? LASTNAME" STORE '? LASTNAME' TO CHECK DO CHECKC ?"No, that one is not SMITH. Before you go to the next record though," ?"try the the LEN and TRIM functions." ? ?"Type ? LEN(LASTNAME) " STORE '? LEN(LASTNAME)' TO CHECK DO CHECKC ?"To remove trailing blanks in LASTNAME:" ? ?"type STORE TRIM(LASTNAME) TO TRIMNAME " STORE 'STORE TRIM(LASTNAME) TO TRIMNAME' TO CHECK DO CHECKC ?"Now, type ? LEN(TRIMNAME)" STORE '? LEN(TRIMNAME)' TO CHECK DO CHECKC STORE LEN(TRIMNAME) TO NL STORE STR(NL,2) TO NLX ?"TRIMNAME is only &NLX characters long, since trailing blanks were" ?"removed from &TRIMNAME.. Now, SKIP to the next record." STORE 'SKIP' TO CHECK DO CHECKC ?"You don't want to SKIP past the end of the file. Check for that." ? ?"Type ? EOF " STORE '? EOF' TO CHECK DO CHECKC ?"OK. You haven't hit end of file. See if this record has SMITH." ?"Type ? LASTNAME " STORE '? LASTNAME' TO CHECK DO CHECKC ?"There's SMITH. See if the record is flagged for deletion." ? ?"Type ? * " STORE '? *' TO CHECK DO CHECKC ?"No. It's not flagged for deletion. STORE The record number, so you" ?"can come back to this record later." ? ?"Type STORE # TO RECNO " STORE 'STORE # TO RECNO' TO CHECK DO CHECKC ?"OK, &STUDENT, see if there are any more SMITH records. SKIP" STORE 'SKIP' TO CHECK DO CHECKC ?"? EOF" STORE '? EOF' TO CHECK DO CHECKC ?"? LASTNAME" STORE '? LASTNAME' TO CHECK DO CHECKC ?"There's another SMITH. Is it flagged for deletion?" ?"? *" STORE '? *' TO CHECK DO CHECKC ?"Yes, it is flagged for deletion, so you don't want it. SKIP" STORE 'SKIP' TO CHECK DO CHECKC ?"? EOF" STORE '? EOF' TO CHECK DO CHECKC ?"That's end of file. Get back to the record that had SMITH, and was" ?"not flagged for deletion. Which one was it? That's right, you stored" ?"the record number in the memory variable RECNO." ? ?"Type GOTO RECNO " STORE 'GOTO RECNO' TO CHECK DO CHECKC ?"Now, DISPLAY" STORE 'DISPLAY' TO CHECK DO CHECKC ?"And there's the SMITH record that isn't flagged for deletion." WAIT RETURN DO CHECKC ?"? EOF EOF' TO CHEC" e e eEC" e EOF' TO CHEC" eC" e ed" ?"the record number in the memory in the memory ory HECK DO CHECKC ?"The .T. indicates true, so we can use that file." ? ?"Note - You could have STOREd the results of those tests (.T., or .F.)," ?"and used them to control the flow of a program. You'll see how that" ?"miERASE ?"There are only a few more functions. First let's look at the type" ?"function. It tells you whether an expression is C (character), N" ?"(numeric), or L (logical) type." ? ?"Type ? TYPE(EOF) " STORE '? TYPE(EOF)' TO CHECK DO CHECKC ?"Now, ? TYPE(LASTNAME) " STORE '? TYPE(LASTNAME)' TO CHECK DO CHECKC ?"NOW, ? TYPE(RECNO) " STORE '? TYPE(RECNO)' TO CHECK DO CHECKC ?"You can also see the date that was entered when dBASE II was started up." ?"? DATE() " STORE '? DATE()' TO CHECK DO CHECKC IF DATE() = '00/00/00' ?"You should have entered a date when you started dBASE II. Then it would" ?"have been displayed by the last command." ENDIF ?"You can convert numbers with decimals to integers." ? ?"Type ? INT(250.50) " STORE '? INT(250.50)' TO CHECK DO CHECKC ?"You can convert numbers and numeric expresions to characters and specify" ?"the length of the character field." ? ?"Type ? STR(234 + 123,3) " STORE '? STR(234 + 123,3)' TO CHECK DO CHECKC ?"And, finally, you can convert a numeric expression to an ASCII character" ?"(octal). You may find this function useful to control your printer to" ?"set it to compress mode, large type, etc.)." ? ?"I can't show you printer control characters, because they cannot be" ?"displayed on the screen. I can show you what an ASCII 41 is though." ? ?"Type ? CHR(41) " STORE '? CHR(41)' TO CHECK DO CHECKC ? ?"And, that's it for functions." WAIT RETURN 0/00' .50)" STORE '? INT(250.50)' TO CHECK DO CHECKC ?"You can convert numbers and numeric expresions to characters and specify" ?"the length of the character field. Enter ? STR(234 + 123,3)" STORE '? STR(234 + 123,3)' TO CHECK DO CHECERASE STORE; ' ' TO BLANKS ?"In lesson 8, &STUDENT, the dBASE II functions were reviewed. You also" ?"used ACCEPT to obtain input from the keyboard, and ? to display data" ?"on the CRT." ? ?"In lesson 9, you will learn how to format screens and print special" ?"reports or forms using the @ SAY command. This lesson will be rather" ?"brief, because a new feature called ZIP has been added to dBASE II, and" ?"it performs automatic generation of @ SAY commands based on 'painted'" ?"screens. Still, I am going to show you how the @ SAY command works." ?"By doing so, I will also demonstrate the functions available in ZIP." WAIT ERASE ?"With ZIP or @ SAY you have total flexibility in defining the screen" ?"layout. When used with SET FORMAT TO PRINT, @ SAY can be used to build" ?"custom forms or reports on the printer. For the lesson, I'm going to use" ?"@ SAY to keep my instructions and your responses on the bottom half of" ?"the screen. The results of the @ SAY commands will be displayed on the" ?"top half of the screen." WAIT ERASE @ 11,0 ?"Here I am down here, &STUDENT." ? ?"Using @ SAY or ZIP permits you to use the 24 rows and 80 columns of the" ?"screen any way you wish. When SET FORMAT TO PRINT is in effect, the" ?"printer can be viewed as a large piece of paper having 255 lines, and" ?"255 columns." ? ?"Let's try an example." WAIT DO CLEAR@ ?"In the example, you're going to use a file which contains, among other" ?"things, names and addresses that have to be updated from time to time." ?"We could use the standard screen formats provided by EDIT, APPEND, etc.," ?"but the user doesn't like the way these formats look on the screen, and" ?"the file being used contains a lot of other data on it that clutters the" ?"screen and makes it difficult for office personnel to make the changes." WAIT DO CLEAR@ ?"I have already issued the USE command for NAMEADDR and positioned it to" ?"the first record. NAMEADDR contains, among other fields, some fields" ?"called NAME, ADDR1, ADDR2, ADDR3, ADDR4, and ADDR5.These are the fields" ?"we will be using in our example. I'm going to start prompting you to" ?"enter commands, when I do, enter the command, and watch what happens in" ?"the upper portion of the screen." WAIT DO CLEAR@ USE NAMEADDR ?"Enter @ 1,0 SAY 'NAME OF PERSON' GET NAME" STORE "@ 1,0 SAY 'NAME OF PERSON' GET NAME" TO CHECK DO CHECKS DO CLEAR@ ?"Enter @ 3,5 SAY 'FIRST ADDRESS' GET ADDR1" STORE "@ 3,5 SAY 'FIRST ADDRESS' GET ADDR1" TO CHECK DO CHECKS DO CLEAR@ ?"Enter @ 4,5 SAY 'SECOND ADDRESS' GET ADDR2" STORE "@ 4,5 SAY 'SECOND ADDRESS' GET ADDR2" TO CHECK DO CHECKS DO CLEAR@ ?"Enter @ 6,5 SAY 'THIRD ADDRESS' GET ADDR3" STORE "@ 6,5 SAY 'THIRD ADDRESS' GET ADDR3" TO CHECK DO CHECKS DO CLEAR@ ?"Enter @ 7,5 SAY 'FOURTH ADDRESS' GET ADDR4" STORE "@ 7,5 SAY 'FOURTH ADDRESS' GET ADDR4" TO CHECK DO CHECKS DO CLEAR@ ?"Enter @ 8,5 SAY 'FIFTH ADDRESS' GET ADDR5" STORE "@ 8,5 SAY 'FIFTH ADDRESS' GET ADDR5" TO CHECK DO CHECKS DO CLEAR@ ?"Now that the screen is filled, if a READ command is issued, the cursor" ?"will be placed at the first outstanding GET (which is NAME for us). At" ?"this point, you can enter changes to the NAME field and press the " ?"key to go to the next field. Press after editing the last field," ?"to return to me. Try it &STUDENT.." ? ?"Type READ " STORE 'READ' TO CHECK DO CHECKS DO CLEAR@ ?"Obviously, this is a very simple illustration. In real life, the name" ?"and address file would probably be INDEXed on name or perhaps some other" ?"field or fields so FINDs could be issued randomly to position the file" ?"to the record to be changed. It does, however, illustrate the" ?"flexibility dBASE II provides for screen and printer formatting, and data" ?"entry from the screen." WAIT DO CLEAR@ ?"Don't forget to look at the ZIP package either. That makes screen" ?"building a snap." ? ?"It's time to quit again. After you have, try @ SAY and ZIP. I'll see" ?"you again in the final lesson, lesson 10. Enter QUIT." STORE 'QUIT' TO CHECK DO CHECKS RETURN field or fields so FINDs could be issued randomly to position the file" ?"to the recorfield or fields so FINDs could be issued randomly to position the file" ?"to the recorfield or fields so FINDs could be issued randomly to position the file" ?"to the recor 6,5 SAY 'THIRD ADDRESS' GET ADDR3" STORE "@ 6,5 SAY 'THIRD ADDRESS' GET ADDR3" TO CHECK DO CHECKS DO CLEAR@ ?"Enter @ 7,5 SAY 'FOURTH ADDRESS' GET ADDR4" STORE "@ 7,5 SAY 'FOURTH ADDRESS' GET ADDR4" TO CHECK DO CHECKS DO CLEAR@ ?"Enter @ 8,5 SAY 'FIFTH ADDRESS' GET ADDR5" STORE "@ 8,5 SAY 'FIFTH ADDRESS' GET ADDR5" TO CHECK DO CHECKS DO CLEAR@ ?"Now that the screen 6,5 SAY 'THIRD ADDRESS' GET ADDR3" STORE "@ 6,5 SAY 'THIRD ADDRESS' GET ADDR3" TO CHECK DO CHECKS DO CLEAR@ ?"Enter @ 7,5 SAY 'FOURTH ADDRESS' GET ADDR4" STORE "@ 7,5 SAY 'FOURTH ADDRESS' GET ADDR4" TO CHECK DO CHECKS DO CLEAR@ ?"Enter @ 8,5 SAY 'FIFTH ADDRESS' GET ADDR5" STORE "@ 8,5 SAY 'FIFTH ADDRESS' GET ADDR5" TO CHECK DO CHECKS DO CLEAR@ ?"Now that the screen . It does, however, illustrate the" ?"flexibility dBASEII provides for screen and printer formatting, and data" ?"entry from the screen." WAIT DO CLEAR@ ?"Don't forget to look at the ZIP package either. That makes screen" ?"building a snap." ? ?"It's time to quit again. After you have, try @ SAY and ZIP. I'll see" ?"you again in the final lesson, lesso. It does, however, illustrate the" ?"flexibility dBASEII provides for screen and printer formatting, and data" ?"entry from the screen." WAIT DO CLEAR@ ?"Don't forget to look at the ZIP package either. That makes screen" ?"building a snap." ? ?"It's time to quit again. After you have, try @ SAY and ZIP. I'll see" ?"you again in the final lesson, lessoADDR3" STORE "@ 6,5 SAY 'THIRD ADDRESS' GET ADDR3" TO CHECK DO CHECKS DO CLEAR@ ?"Enter @ 7,5 SAY 'FOURTH ADDRESS' GET ADDR4" STORE "@ 7,5 SAY 'FOURTH ADDRESS' GET ADDR4" TO CHECK DO CHECKS DO CLEAR@ ?"Enter @ 8,5 SAY 'FIFTH ADDRESS' GET ADDR5" STORE "@ 8,5 SAY 'FIFTH ADDRESS' GET ADDR5" TO CHECK DO ACCEPT 'CORRECT AND RETRY (Y/N)' TO CORRECT STORE !(CORRECT) TO CORRECT IF CORRECT = 'QUIT' QUIT ENDIF IF CORRECT = 'Y' STORE T TO OKC1 DO WHILE OKC1 STORE T TO OKC2 DO WHILE OKC2 ACCEPT 'CHANGE FROM' TO CFROM STORE !(CFROM) TO CFROM IF CFROM = 'QUIT' QUIT ENDIF STORE @(CFROM,COMMAND) TO LOC IF LOC # 0 STORE F TO OKC2 ELSE ?"&CFROM not found." ?"Please try again." ENDIF ENDDO ACCEPT 'CHANGE TO' TO CTO STORE !(CTO) TO CTO IF CTO = 'QUIT' QUIT ENDIF STORE LOC - 1 TO LENI STORE STR(LOC,2) TO LOCX STORE STR(LENI,2) TO LENIX STORE LEN(COMMAND) TO SLEN STORE LEN(CFROM) TO CFROMLEN STORE LOC + CFROMLEN TO SELOC STORE STR(SELOC,2) TO SELOCX STORE (SLEN - SELOC) + 1 TO ELEN STORE STR(ELEN,2) TO ELENX IF LENI # 0 STORE $(COMMAND,1,&LENIX) + CTO TO ISTATE ELSE STORE CTO TO ISTATE ENDIF IF ELEN # 0 STORE ISTATE + $(COMMAND,&SELOCX,&ELENX) TO COMMAND ELSE STORE ISTATE TO COMMAND ENDIF ? ?" &COMMAND" ACCEPT 'MORE CORRECTIONS (Y/N)' TO MOREC STORE !(MOREC) TO MOREC IF MOREC = 'QUIT' QUIT ENDIF IF MOREC = 'Y' LOOP ELSE STORE F TO OKC1 ENDIF ENDDO ENDIF RETURN  0 STORE $(COMMAND,1,LENIX) + CTO TOERASE ?"Throughout these lessons, I will pause to let you read items" ?"displayed on the screen. When I do, the message WAITING will" ?"appear on the screen. When it does, press the space bar to" ?"continue." ? ?"This is a test. Press the space bar when the WAITING message" ?"appears." WAIT ERASE ?" Table of Contents" ? ? ?" I Introduction" ? ?" II A Few New Words" ? ?" III More New Terms" ? ?" IV What Is A Relational Data Base?" ? ? WAIT ERASE ?"I Introduction" ? ?"There is something unusual about this product. There is no manual. Don't" ?"feel cheated. In keeping with the computer age, we have chosen to put" ?"information on magnetic disk, rather than on paper. We did this because" ?"we think that working interactively with a computer is a far better way" ?"to learn than by simply reading a manual." ? ?"In this course, you will be actively working with dBASE II. In many" ?"instances, you will decide the data to be used and the format of output." ?"Where data is supplied, you will have to issue the proper commands to act" ?"on the data. Don't worry though, the dBASE II Lessons give you a lot of" ?"help when you make errors, so if you make errors in dBASE II, you'll know" ?"how to correct them." WAIT ERASE ?"For the beginner, we believe you will find that the first four lessons will" ?"be all you need to really feel comfortable with dBASE II, and at that" ?"point, you will know all of the operations required to create files," ?"generate reports, change data on your files through editing, and perform" ?"computations on your data. Each lesson will probably not take more" ?"than a half hour to complete." ? ?"For the experienced programmer, you're in for a treat. If you think" ?"COBOL, PL/I, FORTRAN, PASCAL, or BASIC are nice programming languages," ?"wait until you try this. The combination of structured English, set" ?"processing, dBASE II functions, macros (substitutions within commands)," ?"stored command procedures (programs), nested DO and nested IF capability," ?"along with true relational data base capability is extremely powerful." ?"At the same time, dBASE II is very easy to use, and it runs on a " ?"microcomputer, which makes it even more attractive. We think you'll find" ?"lessons eight, nine, and ten most interesting." WAIT ERASE ?"II A Few New Words" ? ?"There are a few new terms that are essential to Data Base Management. You" ?"should become familiar with them before you begin the Lessons." ? ?" What Is A File?" ? ?"A file is a body of information about the same subject. Electronic files" ?"are a lot like the paper files in your file cabinet. For example, you" ?"might have a file folder labeled, 'Customers--Smith.' It holds all" ?"information you have on your customers named Smith. You may even have" ?"a personal file folder containing names and addresses of your friends" ?"and relatives." WAIT ERASE ?" What Is A Record?" ? ?"A record is a smaller unit of information within a file. An electronic" ?"record can be compared to a piece of paper which contains information" ?"pertinent to one of your customers. For example, David Smith's name," ?"address, phone number, and purchasing history." ? ?" What Is A Field?" ? ?"A field is a category or heading within a record. If the information" ?"you wanted in a record was NAME, ADDRESS, PHONE NUMBER, TITLE, PRODUCTS" ?"PURCHASED, BILLS OUTSTANDING, you would need to create a field for each" ?"item. The way you intend to use the file will help you to decide how " ?"many fields you have and what they are." WAIT ERASE ?" What Is Data?" ? ?"Data is what you get out of your computer from the information you have" ?"entered into your computer. For example, if you entered a customer's name" ?"as 'David Smith,' 'David Smith' is the data you would get out of your" ?"computer when you asked for that particular customer's name." ? ?"A FILE is the largest unit of information. A FILE contains RECORDS where" ?"DATA is stored under headings or categories called FIELDS." WAIT ERASE ?"III More New Terms" ? ?" Operating Systems" ? ?"The Operating System is essentially the software required to manage your" ?"computer. The most important function of a microcomputer operating system" ?"is to control the input of information and the output of data to computer-" ?"ized devices (such as, a printer, the terminal's display screen, and disk" ?"drives). All of your typed-in requests to print a document, display a" ?"report on the screen, or copy data to a disk pass through the Operating" ?"System. It knows the correct device addresses for requests and makes it" ?"easy for you to use these devices. The Operating System also performs" ?"input and output error checking and attempts error corrections whenever" ?"possible." ? ?"There are a few operating system facilities that you should become familiar" ?"with." WAIT ERASE ?"'DIR' is a command you give your computer to find out what files you have" ?"in a particular disk. When you enter the 'DIR' command at the B prompt" ?"('B>DIR'), you will get a screen display of all names of the files in your" ?"B drive (or on the disk in your B drive)." ? ?"'STAT' is a command that asks for the free space status of a particular" ?"drive (or disk inserted in that drive). When entered at a drive prompt," ?"(for example, 'A>STAT'), your computer will tell you in terms of BYTES" ?"(characters), how much room you have left to work with." WAIT ERASE ?"'PIP' is used to transfer data from one device (a disk, for example) to" ?"another device (another disk, for example). The command to transfer the" ?"file MYFILE from drive A to drive B looks like this:" ? ?" B>PIP B:=A:MYFILE" ? ?"One more command, 'ERA' is a command that should be used with caution." ?"'ERA' erases files you identify. Usually, this is used with text files" ?"you have written, like memos or letters, after they have been sent to the" ?"addressees, or data files that are no longer needed." ? ?"You will find more information on these operating system facilities and how" ?"they work on your computer in your computer operating manual." WAIT ERASE ?"IV What Is A Relational Data Base?" ? ?"First of all, a data base is a systemized organization of computer files" ?"for central access, retrieval, and editing. In a Relational data base," ?"the data base looks like a table. In other data base systems, the" ?"structures are rather complex, but dBASE II data bases all look something" ?"like this simplified example, which follows:" WAIT ERASE ?" Employee Roster" ? ?" EMPNAME EMPNO EMPDEPT EMPSAL EMPSTART" ? ?"REC1 Allen, F. G. 211 ACCT 18,000 01/23/79" ? ?"REC2 Brown, H. B. 354 ADMN 14,500 03/22/82" ? ?"REC3 Calendor, P. 134 PERS 21,000 12/17/77" ? ?"REC4 Calvin, J. 098 PRES 88,000 10/02/75" ? ?"The horizontal axis of this chart lists FIELD NAMES (EMPNAME, EMPNO," ?"EMPDEPT, EMPSAL, EMPSTRT), which read down each column. The vertical" ?"axis lists the records of this file, which read accross the page. With" ?"this type of organization, any or all data bases can be accessed by" ?"naming the coordinates of any particular cell of information. For" ?"example, you can find out the salary of P. Calendor by asking for the" ?"EMPSAL of Calendor, P.. We can also find out anything else about P." ?"Calendor if it is listed in the file. We could also ask for all EMPNAME" ?"(EMPloyees' NAMes) beginning with the letter 'C'." WAIT ERASE RETURN stem is essentially the software required to manage your" ?"computer. The most important function of a microcomputer operating system" ?"is to control the input of information and the output of data to computer-" ?"ized devices (such as, a printer, the terminal's display screen, and disk" ?"drives). All of your typed-inSTORE 0 TO T:NAMEOK STORE 0 TO COUNT STORE LEN(T:NAME) TO T:NAMELC DO WHILE COUNT < T:NAMELC STORE COUNT + 1 TO COUNT STORE STR(COUNT,2) TO COUNTX IF $(T:NAME,&COUNTX,1) < 'A' .OR. $(T:NAME,&COUNTX,1) > 'Z' IF $(T:NAME,&COUNTX,1) < '0' .OR. $(T:NAME,&COUNTX,1) > '9' STORE T:NAMELC TO COUNT STORE 0 TO T:NAMEOK LOOP ELSE STORE 1 TO T:NAMEOK ENDIF ELSE STORE 1 TO T:NAMEOK ENDIF ENDDO IF T:NAMEOK = 1 IF $(T:NAME,1,1) < 'A' .OR. $(T:NAME,1,1) > 'Z' STORE 0 TO T:NAMEOK ?"The first character in a name must be a letter." ?"Please try again." ? ENDIF ELSE ?"Although dBASE II permits some special characters in names, please" ?"use only letters and numbers now. Please try again." ? ENDIF RETURN  TO OK ENDDO ERASE ?"Immediately following the creation of a file, dBASE II asks:" ? ?"ENTER DATA NOW?" ? ?"To which you would reply Y if you wished to enter data intPROMPTd COUNT dBOK *d@STUDENTdKVJSPELLdYPRINTERdNLESSON d6LESSONN d@`OK1 8d@TDRIVE5dACHECKdSAVE TO TUTMEMCOMMANDdSAVE TO TUTMEMCORRECT'dNOKC1dOKC2dCFROMRdUTLOC VdACTO]dTLENI ydALOCX`d14LENIXd13SLEN dACFROMLEN d@ SELOC dASELOCXd16ELEN d@ ELENXd 2ISTATEdDISPLAY STRUCTMOREC?dNMEMNAMEIdREDFORD .NAMEClADDRCl JIM OVER THERE HAROLD RUSSIA GEORGE PENNSYLVANIA THROCKMORTON OUTER MONGOLIA GOD EVERYWHERE ITS OVER THERE SALLY RUSSIA LINDA PENNSYLVANIA HAROLD RUSSIA GEORGE PENNSYLVANIA 0 ITS OVER THERE 0.0 HAROLD RUSSIA 100.5 GEORGE PENNSYLVANIA 58.0DO WHILE OK = 0 ACCEPT TO COMMAND IF !(COMMAND = 'DISPLAY' STORE 1 TO OK ^COMMAND ELSE ?"Check your spelling, and try it again." ENDIF ENDDO ?"That's whSET TALK ON SET ECHO ON USE COMPUTE REPLACE ALL TAXES WITH ((SALCLASS * .06) * MONTHSAL) REPLACE ALL NETSALARY WITH MONTHSAL - TAXES REPLACE ALL YTDSALARY WITH YTDSALARY + NETSALARY WAIT REPORT FORM COMPUTE SET ECHO OFF SET TALK OFF RETURN etter name. Let's change the name of COMPBK" ?"to WHITEHSE. RENAME will do that for us." ?"Type RENAME COMPBK TO WHITEHSE (cr)" STORE 0 TO OK DO WHILE OK = 0 ACCEPT TO COMMAND IF !(COMMAND) # 'RENAME COMPBK TO WHITEHSE' ?"Check your spelling, and try again."  ACCEPT TO COMMAND IF !(COMMAND) # 'QUIT' ?"Check your spelling, and try again." LOOP ELSE STORE 1 TO OK ^COMMAND ENDIF ENDDO RETURN re on the same diskette," ?"and that diskette is unreadable, the back-up file" ?"is just as inaccessible as the original. Since " ?"we're just demonstrating the commands required to" ?"back-up a file, we'll put them on the samPOSITIONC lYTDSALARYNlMONTHSALNlSALCLASSNlTAXESNlNETSALARYNl DATECsAMTN sNUMNsCLEARLs 04/12/84 100000.00 1F mselect PICTURE "#" READ * reading user response STORE VAL(mselect) TO select ENDDO * process user's response DO CASE * test for exit condition CASE select = 0 RELEASE mselect,select * retain variables - 'balance', 'lastchk' and 'lastdep' SAVE TO Cb-book.mem * clear variables and return to calling program or dbase system CLEAR ERASE RETURN * test for new checBALANCE gDPLASTDEP g@LASTCHK g@FMENU.CMD (.PRG) TO loop2 ENDIF ENDDO loop2 IF !(answer)="Y" * data is correct - add to database APPEND BLANK REPLACE Chkno WITH mchkno REPLACE Date WITH mdate REPLACE Payto WITH mpayto REPLACE Amt WITH mamt REPLACE Memo WITH mmemo REPLACE Can WITH mcan * update balance and lastchk STORE balance - Amt TO ba* Program.: CB-CANCL.CMD (.PRG) * Author..: Anonymous * Date....: February 9, 1984 * Notice..: Copyright 1984, Ashton-Tate and RSP, Inc. * Notes...: Enter cancelled checks * Called from CB-MENU.CMD (.PRG) * enter cancelled check data * USE Cb-check * draw check mask DO Cb-mask @ 1,26 SAY "CHECK CANCELLATION ROUTINE" STORE T TO more DO WHILE more * more is designed for repeated check cancellations STORE 0 TO mcan * input check number to be cancelled @ 20, 0 @ 18,11 SAY "Enter Check Number to be cancelled (or 0 to exit)"; GET mcan PICTURE "####" READ * testing for exit condition IF mcan = 0 STORE F TO more LOOP ENDIF * search for cancelled check number LOCATE FOR Chkno = mcan IF .NOT. Can .AND. .NOT. EOF * if not already cancelled and not at end of file, display check data @ 4,71 SAY Chkno @ 6,68 SAY Date @ 8,25 SAY Payto @ 8,66 SAY Amt PICTURE "#######.##" @ 14,10 SAY Memo @ 18, 0 STORE " " TO answer @ 18,23 SAY "Is this the right check? [Y/N] " GET answer PICTURE "!" READ IF answer = "Y" REPLACE Can WITH T ENDIF ELSE * if not located, clear entry from previous check on screen @ 4,71 SAY " " @ 6,68 SAY " " @ 8,25 SAY " " @ 8,66 SAY " " @ 14,10 SAY " " IF EOF * check is not in file @ 20,21 SAY "Check "+STR(mcan,4)+" cannot be found." ELSE * check is already cancelled @ 20,19 SAY "Check "+STR(mcan,4)+" is already cancelled." ENDIF STORE " " TO wait @ 21,20 SAY "Press any key to continue " GET wait READ @ 20, 0 @ 21, 0 ENDIF CLEAR GETS ENDDO more ERASE * display to the screen a list of remaining uncleared checks ? " LIST OF REMAINING UNCLEARED CHECKS" ? ? "CHKNO PAID TO "+; "AMOUNT DATE MEMO" ? "----- ------------------------------- ---------- -------- --------------" DISPLAY OFF ALL FOR .NOT. Can Chkno, Payto, Amt, Date, TRIM(Memo) ? ? STORE " " TO answer @ 22,13 SAY "Press any key to return to the main menu " GET answer READ * close out open files and variables USE RELEASE mcan,answer,more,wait RETURN * EOF: CB-CANCL.CMD (.PRG) * Program.: CB-CHECK.CMD (.PRG) * Author..: Anonymous * Date....: February 9, 1984 * Notice..: Copyright 1984, Ashton-Tate and RSP, Inc. * Notes...: Enter checks * Called from CB-MAIN.CMD (.PRG) * enter new check data USE Cb-check * draw the check mask on the screen DO Cb-mask STORE T TO loop1 DO WHILE loop1 * loop1 is designed to continue entering checks into the database @ 1,60 SAY "LAST CHECK #"+STR(lastchk,4,0) * initialize memory variables STORE lastchk+1 TO mchkno STORE " " TO mdate STORE " " TO mpayto STORE 0 TO mamt STORE " " TO mmemo STORE F TO mcan STORE T TO loop2 DO WHILE loop2 * loop2 is designed to enter and reenter correct data STORE T TO loop3 DO WHILE loop3 * loop3 is designed to check for duplicate check numbers @ 4,42 SAY "(Enter 0 to exit)" @ 4,70 GET mchkno PICTURE "####" READ @ 4,42 SAY " " @ 18, 0 IF mchkno = 0 USE RELEASE loop1,loop2,loop3,answer,is:valid,valid,ans,taxchar,; mchkno,mdate,mpayto,mamt,mmemo,mcan,mtax,word1,word2 RELEASE amt:full,length,amt:word,is:error,count,true,string RETURN ENDIF * test for negative check number IF mchkno < 0 STORE lastchk+1 TO mchkno LOOP ENDIF * check for duplicate check number LOCATE FOR Chkno=mchkno IF .NOT. EOF @ 18,15 SAY "Check number already exists. Please reenter" ELSE STORE F TO loop3 @ 18,0 ENDIF ENDDO loop3 STORE F TO is:valid DO WHILE .NOT. is:valid @ 6,67 GET mdate PICTURE "##/##/##" READ * check for valid date DO Cb-date IF .NOT. is:valid @ 18,25 SAY "Invalid date - please reenter" ELSE @ 18, 0 ENDIF ENDDO STORE F TO valid DO WHILE .NOT. valid * test for name on check - no blank checks allowed @ 8,24 GET mpayto READ IF mpayto = " " @ 18,15 SAY "No blank checks allowed - please reenter" ELSE @ 18, 0 STORE T TO valid ENDIF ENDDO STORE F TO valid DO WHILE .NOT. valid * test for amount less than or equal to 0 @ 8,65 GET mamt PICTURE "#######.##" READ IF mamt = 0.00 @ 18,15 SAY "Check must have an amount - please reenter " ELSE IF mamt < 0.00 @ 18,15 SAY "Check must be a positive amount - "+; "please reenter" ELSE @ 18, 0 * put numbers into words!! STORE mamt TO amt:full DO Cb-nbwd IF is:error @ 20,20 SAY "Number is too large - please reenter" ELSE STORE T TO valid ENDIF ENDIF ENDIF ENDDO IF balance < mamt @ 18,10 SAY "There are not sufficient amount of funds "+; "to cover this check." * erase current check display @ 6,67 SAY " " @ 8,24 SAY " " @ 8,65 SAY " " STORE lastchk+1 TO mchkno STORE " " TO mdate STORE " " TO mpayto STORE 0.00 TO mamt LOOP ENDIF * display words on check STORE " "; TO string STORE LEN(amt:word) TO length IF length > 75 STORE 74 TO count STORE T TO true DO WHILE true IF $(amt:word,count,1)=" " .OR. $(amt:word,count,1)="-" STORE F TO true ELSE STORE count-1 TO count ENDIF ENDDO STORE $(amt:word,1,count)+$(string,1,75-count) TO word1 STORE $(amt:word,count+1,length-count) TO word2 @ 11,4 SAY word1 @ 12,10 SAY word2 ELSE STORE amt:word + $(string,1,75-length) TO word1 @ 11,4 SAY word1 @ 12,10 SAY " " ENDIF * enter memo data @ 14, 9 GET mmemo READ @ 18,0 STORE " " TO answer @ 18,10 SAY "IS THE ABOVE CHECK CORRECT? "+; "[ (Y)es / (N)o / (A)bort ] " GET answer PICTURE "!" READ CLEAR GETS @ 18,0 IF answer$"YA " STORE F TO loop2 ENDIF ENDDO loop2 IF answer $ "Y " APPEND BLANK REPLACE Chkno WITH mchkno,Date WITH mdate,Payto WITH mpayto,; Amt WITH mamt,Memo WITH mmemo,Can WITH mcan STORE balance - Amt TO balance STORE Chkno TO lastchk STORE " " TO answer @ 18,5 SAY "Do you need a record of this check for income"+; " tax purposes? [Y/N] " GET answer PICTURE "!" READ IF answer $ "Y " @ 18, 0 @ 18, 1 SAY "(1) Business expenses (4) Alimony" @ 18,55 SAY "(7) Contributions" @ 19, 1 SAY "(2) Medical or Dental (5) Child Care" @ 19,55 SAY "(8) Miscellaneous" @ 20, 1 SAY "(3) Medicine or Drugs (6) Automotive" STORE 9 TO mtax DO WHILE mtax < 0 .OR. mtax > 8 * enter respective tax deduction STORE " " TO taxchar @ 22, 5 SAY "Enter number which corresponds to tax "+; "deduction (or 0 for none) " GET taxchar READ STORE VAL(taxchar) TO mtax ENDDO ELSE STORE 0 TO mtax ENDIF REPLACE Tax WITH mtax @ 18,0 @ 19,0 @ 20,0 @ 22,0 ENDIF STORE " " TO answer @ 18,10 SAY "Would you like to enter another check? [Y/N] "; GET answer PICTURE "!" READ @ 18,0 IF answer = "N" STORE F TO loop1 ELSE @ 6,67 SAY " " @ 8,24 SAY " " @ 8,65 SAY " " @ 14, 9 SAY " " @ 11, 4 SAY "__________________________________________________" @ 11,54 SAY "_______________Dollars" @ 12,10 SAY " " ENDIF ENDDO loop1 USE RELEASE loop1,loop2,loop3,answer,is:valid,valid,ans,taxchar,mchkno,mdate,; mpayto,mamt,mmemo,mcan,mtax RELEASE amt:full,length,amt:word,is:error,count,true,word1,word2,string RETURN * EOF: CB-CHECK.CMD (.PRG)  SAY " " @ 14, 9 SAY " " @ 11, 4 SAY "__________________________________________________" @ 11,54 SAY "_______________Dollars" @ 12,10 SAY " " ENDIF ENDDO loPCHKNONsPAYTOCsAMTN sCANLtDATECtMEMOCtTAXN't 1JIM NOVAK 50000.00T04/12/84SERVICES 3ponse STORE VAL(mselect) TO select ENDDO * process user's response DO CASE * test for exit condition CASE select = 0 RELEASE mselect,select * retain variables - 'balance', 'lastchk' and 'lastdep' SAVE TO Cb-book.mem * clear variables and return to calling program or dbase system CLEAR ERASE RETURN * test for new chec* Program.: CB-CLEAR.CMD (.PRG) * Author..: Anonymous * Date....: February 9, 1984 * Notice..: Copyright 1984, Ashton-Tate and RSP, Inc. * Notes...: Clear deposits * Called from CB-MENU.CMD (.PRG) USE Cb-bank ERASE @ 1,20 SAY "Clear Deposits with Bank Statement" @ 2,20 SAY "----------------------------------" @ 3, 5 SAY " Date Amount " @ 4, 5 SAY "-------- ----------" IF lastdep>10 @ 3,45 SAY " Date Amount " @ 4,45 SAY "-------- ----------" ENDIF IF lastdep > 20 STORE 20 TO stop ELSE STORE lastdep TO stop ENDIF STORE 1 TO col,count STORE 5 TO row DO WHILE count <= stop LOCATE FOR Num=count @ row,col SAY Num @ row,col+4 SAY Date @ row,col+15 SAY Amt IF count = 10 STORE 41 TO col ENDIF STORE count+1 TO count IF count > 10 STORE count-6 TO row ELSE STORE count+4 TO row ENDIF ENDDO STORE T TO loop1 DO WHILE loop1 STORE -1 TO number DO WHILE number < 0 .OR. number > stop STORE " " TO mnumber @ 16,15 SAY "Enter number of corresponding deposit listed on" @ 17,21 SAY "bank statement (or 0 to exit) " GET mnumber READ STORE VAL(mnumber) TO number ENDDO @ 19,0 IF number = 0 STORE F TO loop1 LOOP ENDIF IF number > 10 STORE 39 TO col STORE number-6 TO row ELSE STORE 0 TO col STORE number+4 TO row ENDIF LOCATE FOR Num=number IF EOF @ 19,22 SAY "Already cleared - please reenter" ELSE STORE " " TO answer @ 19,25 SAY "Is this correct? [Y/N] " GET answer PICTURE "!" READ @ 19,0 IF answer $ "Y " REPLACE Clear WITH T,Num WITH 0 @ row,col SAY " " ELSE @ row,col SAY " " ENDIF ENDIF CLEAR GETS ENDDO STORE 0 TO count LOCATE FOR .NOT. Clear IF EOF @ 22,22 SAY "There are no deposits in transit" STORE 0 TO lastdep ELSE STORE T TO loop2 DO WHILE loop2 STORE count+1 TO count REPLACE Num WITH count CONTINUE IF EOF STORE count TO lastdep STORE F TO loop2 ENDIF ENDDO @ 22,22 SAY "There are "+STR(lastdep,2,0)+" deposits in transit" ENDIF USE * release memory variables RELEASE stop,col,row,count,loop1,number,mnumber,answer,loop2 * EOF: CB-CLEAR.CMD (.PRG) ar IF EOF @ 22,22 SAY "There are no deposits in transit" STORE 0 TO lastdep ELSE STORE T TO loop2 DO WHILE loo* Program.: CB-DATE.CMD (.PRG) * Author..: Luis A. Castro * Date....: 8/2/83, 11/20/83. * Notice..: Copyright 1983, ASHTON-TATE, All Rights Reserved. * May not be reproduced without permission. * Notes...: Subroutine to verify a date. * PARAMETERS------------------------------------------------+ * name typ len picture description * ========== === === ========== ======================= * mdate C 8 MM/DD/YY Calendar date * (or) mdate C 10 MM/DD/YYYY Calendar date * is:valid L 1 Validation flag. * ----------------------------------------------------------+ STORE F TO is:valid IF 0 = TEST(MDATE) .OR.; ( LEN(mdate) <> 8 .AND. LEN(mdate) <> 10 ) .OR.; @(" ",mdate) > 0 .OR. @("-",mdate) > 0 .OR.; @(".",mdate) > 0 .OR. @("+",mdate) > 0 * ---The memory variable "mdate" must exist and * ---must not contain special characters. RETURN ENDIF * STORE VAL( $(mdate,1,2) ) TO t:month STORE VAL( $(mdate,4,2) ) TO t:day IF LEN(mdate) = 8 STORE VAL( $(mdate,7,2) ) TO t:year ELSE STORE VAL( $(mdate,7,4) ) TO t:year ENDIF * DO CASE CASE t:month < 1 .OR. t:month > 12 .OR. t:day < 1 .OR.; t:day > VAL( $("312931303130313130313031",; ( t:month - 13*INT(t:month/13))*2 - 1, 2 ) ) * CASE LEN(mdate)= 8 .AND. t:month=2 .AND.; t:day > 28 .AND. t:year/4 > int(t:year/4) * CASE LEN(mdate)=10 .AND. t:month=2 .AND.; t:day > 28 .AND. ( (t:year/4 > INT(t:year/4) .AND.; t:year/100 = INT(t:year/100)) .OR.; t:year/400 > INT(t:year/400) ) * OTHERWISE STORE T TO is:valid ENDCASE * RELEASE t:month,t:day,t:year RETURN * EOF: CB-DATE.PRG (.CMD) * Program.: CB-DEPST.CMD (.PRG) * Author..: Anonymous * Date....: February 9, 1984 * Notice..: Copyright 1984, Ashton-Tate and RSP, Inc. * Notes...: Enter deposits * Called from CB-MAIN.CMD * enter new deposit data USE Cb-depst GO BOTTOM STORE #+1 TO firstdep * initialize logical memory variables STORE F TO special,again STORE T TO continue DO WHILE continue * continue loop is for continuing entering a deposit slip ERASE @ 3, 0 SAY "+--------------------------------------------+" @ 4, 0 SAY "|" @ 5, 0 SAY "|" @ 6, 0 SAY "|" @ 7, 0 SAY "|" @ 8, 0 SAY "|" @ 9, 0 SAY "|" @ 10, 0 SAY "|" @ 11, 0 SAY "|" @ 12, 0 SAY "|" @ 13, 0 SAY "|" @ 14, 0 SAY "|" @ 15, 0 SAY "|" @ 16, 0 SAY "|" @ 17, 0 SAY "|" @ 18, 0 SAY "|" @ 19, 0 SAY "|" @ 20, 0 SAY "+--------------------------------------------+" @ 19,45 SAY "|" @ 18,45 SAY "|" @ 17,45 SAY "|" @ 16,45 SAY "|" @ 15,45 SAY "|" @ 14,45 SAY "|" @ 13,45 SAY "|" @ 12,45 SAY "|" @ 11,45 SAY "|" @ 10,45 SAY "|" @ 9,45 SAY "|" @ 8,45 SAY "|" @ 7,45 SAY "|" @ 6,45 SAY "|" @ 5,45 SAY "|" @ 4,45 SAY "|" @ 6, 3 SAY "========================================" @ 7,30 SAY "|" @ 8,30 SAY "|" @ 9,30 SAY "|" @ 10,30 SAY "|" @ 11,30 SAY "|" @ 12,30 SAY "|" @ 13,30 SAY "|" @ 14,30 SAY "|" @ 2,18 SAY "DEPOSIT SLIP" @ 5, 9 SAY "RECEIVED FROM" @ 5,34 SAY "AMOUNT" @ 16,15 SAY "SUBTOTAL" * initialize memory variables STORE 0.00 TO subtotal,total,cash @ 16,32 SAY subtotal * enter date if first time through loop IF .NOT. again STORE F TO is:valid,c DO WHILE .NOT. is:valid STORE " " TO mdate @ 4,5 SAY "ENTER DATE OF DEPOSIT " GET mdate PICTURE "##/##/##" READ @ 4,48 IF mdate=" / / " @ 4,55 SAY "NO DATE ENTERED" STORE " " TO ans @ 5,48 SAY "Do you wish to abort? [Y/N] " GET ans PICTURE "!" READ IF ans = "Y" USE RELEASE firstdep,special,again,continue,subtotal,total,; cash,is:valid,mdate,ans RETURN ENDIF @ 4,48 @ 5,48 ELSE DO Cb-date IF .NOT. is:valid @ 4,48 SAY "Invalid Date - please reenter" ELSE STORE " " TO answer @ 4,48 SAY "Is this correct? [Y/N] " GET answer PICTURE "!" READ @ 4,48 IF answer = "N" STORE F TO is:valid ENDIF ENDIF ENDIF ENDDO is:valid ENDIF @ 4,4 SAY " Date of Deposit: " @ 4,25 SAY mdate STORE 7 TO line STORE F TO restart STORE T TO loop2 DO WHILE loop2 * loop2 is for updating incorrect deposit slip STORE T TO more DO WHILE more * more is for entering and updating individual deposit entries IF line > 14 @ 16,15 SAY " " @ 20, 0 @ 23, 0 @ 0, 0 @ 19, 0 SAY "|" @ 19,45 SAY "|" @ 20, 0 SAY "+--------------------------------------------+" @ 14,30 SAY "|" @ 16,15 SAY "SUBTOTAL" @ 16,32 SAY subtotal STORE 14 TO line ENDIF * if second time through loop IF again IF .NOT. special STORE Paidfrom TO mpayfrom STORE Amt TO mamt ENDIF * display deposit information @ line,4 SAY mpayfrom @ line,32 SAY mamt IF .NOT. special STORE " " TO ans @ line,48 SAY "Is this correct? [Y/N] " GET ans PICTURE "!" READ ENDIF @ line,48 CLEAR GETS IF ans = "N" .OR. special STORE " " TO an @ line,52 SAY "Do you wish to delete" @ line+1,50 SAY "this transaction? [Y/N] " GET an PICTURE "!" READ @ line,48 @ line+1,48 IF an = "Y" * erase current deposit from screen... @ line,3 SAY " " @ line,31 SAY " " DELETE SKIP IF EOF STORE F TO more ENDIF LOOP ELSE IF special REPLACE Paidfrom WITH mpayfrom,Amt WITH mamt ENDIF ENDIF ELSE STORE subtotal + mamt TO subtotal @ 16,32 SAY subtotal SKIP IF EOF STORE F TO more ENDIF STORE line+1 TO line LOOP ENDIF ELSE STORE " " TO mpayfrom STORE 0.00 TO mamt STORE F TO loopamt ENDIF STORE F TO special * this routine is to enter deposit data @ line,3 GET mpayfrom READ IF mpayfrom=" " @ line,3 SAY " " @ line,29 SAY " " @ line,31 SAY " " IF again STORE T TO special LOOP ENDIF STORE F TO more LOOP ENDIF STORE T TO loopamt DO WHILE loopamt * make sure a positive amount is inputted @ line,31 GET mamt READ IF mamt <= 0 STORE 0.00 TO mamt ELSE STORE F TO loopamt ENDIF ENDDO * display subtotal to screen STORE subtotal + mamt to test @ 16,32 SAY test STORE " " TO ans @ line,48 SAY "Is this correct? [Y/N] " GET ans PICTURE "!" READ @ line,48 CLEAR GETS IF ans = "N" @ 16,32 SAY subtotal @ line,31 SAY " " LOOP ENDIF * delete colons from the screen surrounding each input @ line,3 SAY " " @ line,29 SAY " " @ line,31 SAY " " @ line,42 SAY " " STORE subtotal + mamt TO subtotal * now add a record (if first time through)... IF .NOT. again APPEND BLANK ENDIF REPLACE Paidfrom WITH mpayfrom,Date WITH mdate,Amt WITH mamt IF again SKIP IF EOF STORE F TO more ENDIF ENDIF STORE line+1 TO line ENDDO more IF subtotal = 0 @ line,52 SAY "NO DEPOSITS ENTERED" STORE " " TO ans @ line+1,48 SAY "Do you wish to abort? [Y/N] " GET ans PICTURE "!" READ @ line,52 @ line+1,48 IF ans = "Y" PACK USE RELEASE firstdep,special,again,continue,subtotal,total,cash,c,; is:valid,mdate,line,restart,loop2,more,mpayfrom,mamt RELEASE loopamt,test,ans,answer,an RETURN ELSE IF again PACK STORE T TO restart STORE F TO loop2 ELSE LOOP ENDIF ENDIF ELSE STORE F TO loop2 ENDIF ENDDO loop2 IF restart STORE F TO again,special RELEASE line,restart,loop2,more,mpayfrom,mamt,loopamt,test,answer,an LOOP ENDIF @ 18,30 SAY "-------------" @ 17,15 SAY "LESS CHANGE" STORE 0.00 TO total DO WHILE total <= 0.00 @ 17,31 GET cash READ @ 22,0 STORE subtotal-cash TO total IF total <= 0.00 @ 22,10 SAY "Cash withdrawal exceeds deposit - please reenter" ENDIF ENDDO IF cash <> 0 @ 17,31 SAY "<" @ 17,42 SAY " >" ELSE @ 17,31 SAY " " @ 17,42 SAY " " ENDIF @ 19,15 SAY "TOTAL DEPOSIT" @ 19,32 SAY total STORE " " TO answer @ 22, 6 SAY "Is the above deposit slip correct? "+; "[ (Y)es / (N)o / (A)bort ] " GET answer PICTURE "!" READ IF answer = "N" GOTO firstdep STORE T TO again LOOP ENDIF IF answer = "A" @ 22,0 @ 22,12 SAY "ABORTING ABOVE DEPOSIT" GOTO firstdep DO WHILE .NOT. EOF DELETE SKIP ENDDO PACK ENDIF IF answer$"Y " STORE balance + total TO balance IF cash > 0 APPEND BLANK REPLACE Date WITH mdate,Amt WITH -cash,Paidfrom WITH "Cash Withdrawal" ENDIF IF again PACK STORE F TO again ENDIF STORE lastdep+1 TO lastdep USE Cb-bank APPEND BLANK REPLACE Date WITH mdate,Amt WITH total,Num WITH lastdep,Clear WITH F USE Cb-depst ENDIF STORE " " TO answer @ 22,0 @ 22, 3 SAY "Would you like to enter another deposit? [Y/N] "; GET answer PICTURE "!" READ IF answer = "N" STORE F TO continue ELSE GO BOTTOM STORE #+1 TO firstdep RELEASE line,restart,loop2,more,mpayfrom,mamt,loopamt,test,answer,an ENDIF CLEAR GETS ENDDO continue USE RELEASE firstdep,again,continue,subtotal,total,cash,c,is:valid,mdate,; line,more,mpayfrom,mamt,loopamt,test,ans,an,answer RELEASE special,loop2,restart RETURN * EOF: CB-DEPST.CMD (.PRG),DATECsAMTN sPAIDFROMCs 04/12/84 100000.00KAYPRO Y "||" @ 4,78 SAY "||" @ 5, 0 SAY "||" @ 5,78 SAY "||" @ 6, 0 SAY "||" @ 6,78 SAY "||" @ 7, 0 SAY "||" @ 7,78 SAY "||" @ 8, 0 SAY "||" @ 8,78 SAY "||" @ 9, 0 SAY "||" @ 9,78 SAY "||" @ 10, 0 SAY "||" @ 10,78 SAY "||" @ 11, 0 SAY "||" @ 11,78 SAY "||" @ 12, 0 SAY "========================================" @ 12,40 SAY "========================================" @ 5,29 SAY " 0. exit" @ 6,29 SAY " 1. mailing labels"* Program.: CB-HELP.CMD (.PRG) * Author..: Stephen Kurasch * Date....: February 9, 1984 * Notice..: Copyright 1984, Ashton-Tate and RSP, Inc. * Notes...: Help screens called from CB-MENU.CMD ERASE SET COLON OFF ? TEXT Welcome to the Checkbook Management System. This system is designed to keep track of your deposits, your checks, balancing your checkbook and print- ing reports of several combinations. Listed below are the menu selections and a description of each. (1) Enter new checks: This selection will allow the user to enter checks. The special features of this entry are checking for duplicate check numbers, checking for a valid date, not allowing a blank check, making sure that a positive, non-zero amount exists, and categorizing the check into 8 different tax deductible fields (if needed). (2) Enter deposits: This selection is for entering a deposit slip. The special features included here are keeping track of the individual deposits as well as the entire deposit slip itself. It checks for positive, non-zero amounts and provides a place to deduct cash withdrawals. ENDTEXT STORE " " TO continue @ 23,25 SAY "Press any key to continue " GET continue READ ERASE ? TEXT (3) Enter cancelled checks: This selection allows you to cancel the checks you received with your bank statement. It checks to make sure that the check has already been cancelled or that the check is on file. (4) Entered cleared deposits: This selection allows you to clear the deposits that are listed on the bank statement. (5) Reconcile bank statement: This selection is a bank reconciliation. Preparing a bank recon- ciliation means determining those items which make up the difference between the balance on the bank statement and the balance in the checkbook. We must deduct from our records any charges that been made by the bank. We must add to our records any amount that the bank has credited to our account. This includes interest earned, or if you are lucky enough, a bank note that has come due to you. As in (3) and (4) above, these must be taken into account on the banks records. ENDTEXT STORE " " TO continue @ 23,25 SAY "Press any key to continue " GET continue READ ERASE ? TEXT (6) Reports: This selection will print several combinations of reports. These include listings of all checks, of all taxable checks, and of all deposits between two dates. All reports can be listed on the screen or to the printer. Have fun!!! ENDTEXT STORE " " TO continue @ 23,17 SAY "Press any key to return to the main menu " GET continue READ SET COLON ON RELEASE continue RETURN * Program.: CB-MAIN.CMD (.PRG) * Author..: Anonymous * Date....: February 9, 1984 * Notice..: Copyright 1984, Ashton-Tate and RSP, Inc. * Notes...: Main menu for checkbook management system * Turn off display of commands to the screen SET TALK OFF SET BELL OFF SET INTENSITY OFF * Pull retained variables from memory file CHXBOOK.MEM RESTORE FROM Cb-book.mem DO WHILE T * DO WHILE T means DO WHILE TRUE i.e. DO FOREVER * The DO WHILE will be terminated by a RETURN command * clear the screen and display the main menu ERASE @ 1, 0 SAY "========================================" @ 1,40 SAY "========================================" @ 2, 0 SAY "||" @ 3, 0 SAY "========================================" @ 3,40 SAY "========================================" @ 4, 0 SAY "||" @ 5, 0 SAY "||" @ 6, 0 SAY "||" @ 7, 0 SAY "||" @ 8, 0 SAY "||" @ 9, 0 SAY "||" @ 10, 0 SAY "||" @ 11, 0 SAY "||" @ 12, 0 SAY "||" @ 13, 0 SAY "||" @ 14, 0 SAY "||" @ 15, 0 SAY "========================================" @ 15,40 SAY "========================================" @ 14,78 SAY "||" @ 13,78 SAY "||" @ 12,78 SAY "||" @ 11,78 SAY "||" @ 10,78 SAY "||" @ 9,78 SAY "||" @ 8,78 SAY "||" @ 7,78 SAY "||" @ 6,78 SAY "||" @ 5,78 SAY "||" @ 4,78 SAY "||" @ 2,78 SAY "||" @ 2,12 SAY "C H E C K B O O K M A N A G E M E N T S Y S T E M" @ 5,25 SAY " 0 - Exit" @ 6,25 SAY " 1 - Enter new checks" @ 7,25 SAY " 2 - Enter deposits" @ 8,25 SAY " 3 - Enter cancelled checks" @ 9,25 SAY " 4 - Enter cleared deposits" @ 10,25 SAY " 5 - Reconcile bank statement" @ 11,25 SAY " 6 - Reports" @ 12,25 SAY " 7 - Help" * display the current checkbook balance @ 18,20 SAY "Current Checkbook balance $ "+STR(balance,10,2) STORE 8 TO select * check for non-valid entry to menu DO WHILE select < 0 .OR. select > 7 STORE " " TO mselect @ 15,33 SAY " select : : " @ 15,41 GET mselect PICTURE "#" READ * reading user response STORE VAL(mselect) TO select ENDDO * process user's response DO CASE * test for exit condition CASE select = 0 RELEASE mselect,select * retain variables - 'balance', 'lastchk' and 'lastdep' SAVE TO Cb-book.mem * clear variables and return to calling program or dbase system CLEAR ERASE RETURN * test for new checks CASE select = 1 DO Cb-check * test for new deposits CASE select = 2 DO Cb-depst * test for cancelled checks CASE select = 3 DO Cb-cancl * test for clearing deposits in transit CASE select = 4 DO Cb-clear * test for reconcile with bank statement CASE select = 5 DO Cb-recon * test for reports CASE select = 6 DO Cb-reprt * test for help screens CASE select = 7 DO Cb-help OTHERWISE ENDCASE ENDDO RETURN * EOF: CB-MAIN.CMD (.PRG) * Program.: CB-MASK.CMD (.PRG) * Author..: Anonymous * Date....: February 9, 1984 * Notice..: Copyright 1984, Ashton-Tate and RSP, Inc. ERASE @ 2, 0 SAY "+-------------------------------------------------" @ 2,50 SAY "-----------------------------+" @ 3, 0 SAY "|" @ 4, 0 SAY "|" @ 5, 0 SAY "|" @ 6, 0 SAY "|" @ 7, 0 SAY "|" @ 8, 0 SAY "|" @ 9, 0 SAY "|" @ 10, 0 SAY "|" @ 11, 0 SAY "|" @ 12, 0 SAY "|" @ 13, 0 SAY "|" @ 14, 0 SAY "|" @ 15, 0 SAY "|" @ 16, 0 SAY "+-------------------------------------------------" @ 16,50 SAY "-----------------------------+" @ 15,79 SAY "|" @ 14,79 SAY "|" @ 13,79 SAY "|" @ 12,79 SAY "|" @ 11,79 SAY "|" @ 10,79 SAY "|" @ 9,79 SAY "|" @ 8,79 SAY "|" @ 7,79 SAY "|" @ 6,79 SAY "|" @ 5,79 SAY "|" @ 4,79 SAY "|" @ 3,79 SAY "|" @ 4,63 SAY "Number" @ 5,70 SAY "------" @ 6,63 SAY "Date" @ 7,68 SAY "--------" @ 8, 4 SAY "Pay To The Order Of" @ 8,64 SAY "$" @ 9,24 SAY "--------------------------------" @ 9,65 SAY "------------" @ 11, 4 SAY "__________________________________________________"+; "_______________Dollars" @ 14, 4 SAY "Memo" @ 14,51 SAY "_______________________" @ 15, 9 SAY "---------------------------" RETURN * EOF: CB-MASK.CMD (.PRG) * Program..: CB-NBWD.CMD (.PRG) * Author...: Tom Rettig * Date.....: August 26, 1983 * Revised..: January 11, 1984 * Notice...: Copyright 1983, ASHTON-TATE, All Rights Reserved. * May not be reproduced without written permission. * Notes....: Subroutine for converting a numeric dollar amount * (to $999,999.99) to words. * Parameters passed: * name type length description * ---------- ---- ------ --------------------------- * in: amt:full N 3 - 9 Including 2 decimal places. * out: amt:word C 23 -86 Depending on the amount. * is:error L 1 .T. if error in conversion. * Initialize memory variables... STORE "ONE TWO THREEFOUR FIVE SIX SEVENEIGHTNINE TEN " TO t:unit STORE "ELEVEN TWELVE THIRTEEN FOURTEEN FIFTEEN SIXTEEN "+; "SEVENTEEENEIGHTEEN NINETEEN " TO t:teen STORE "TEN TWENTY THIRTY FORTY FIFTY SIXTY SEVENTYEIGHTY NINETY"; TO t:decade STORE " " TO amt:word STORE F TO is:error * * Convert decimal places to a string containing cents amount... STORE STR((amt:full-INT(amt:full))*100,2) TO t:cent:str IF t:cent:str = " " STORE "0" + $(t:cent:str,2,1) TO t:cent:str ENDIF * Change tthe environment for upcoming branches... SET EXACT ON * Conditional branch... DO CASE * Branch for amounts too high or too low... CASE amt:full > 999999.99 .OR. amt:full < 0.00 STORE T TO is:error RELEASE ALL LIKE t:* SET EXACT OFF RETURN * Branch for zero dollars... CASE amt:full < 1.00 STORE " NO " TO amt:word * Branch for other conditions... OTHERWISE * Convert dollar amount to a character string... STORE STR(INT(amt:full),6) TO t:amt:str * Branch for hundred thousands... IF $(t:amt:str,1,1) > "0" STORE $(t:amt:str,1,1) TO t:hunthous STORE amt:word+TRIM($(t:unit,(VAL(t:hunthous)-1)*5+1,5))+; " HUNDRED " TO amt:word ENDIF * Branch for ten-thousands and thousands... IF $(t:amt:str,2,2) > " " STORE $(t:amt:str,2,1) TO t:tenthous STORE $(t:amt:str,3,1) TO t:thousand * Branch for combinations of ten-thousands and thousands... DO CASE CASE $(t:amt:str,1,1)>"0" .AND. VAL($(t:amt:str,2,2))=0 STORE amt:word + "THOUSAND" TO amt:word CASE t:tenthous=" " .OR. t:tenthous="0" STORE amt:word+TRIM($(t:unit,(VAL(t:thousand)-1)*5+1,5))+; " THOUSAND" TO amt:word CASE t:thousand="0" STORE amt:word+TRIM($(t:decade,(VAL(t:tenthous); -1)*7+1,7))+" THOUSAND" TO amt:word CASE t:tenthous="1" STORE amt:word+TRIM($(t:teen,(VAL(t:thousand)-1)*9+1,9))+; " THOUSAND" TO amt:word CASE t:tenthous>"1" STORE amt:word+TRIM($(t:decade,(VAL(t:tenthous); -1)*7+1,7))+"-"+TRIM($(t:unit,(VAL(t:thousand); -1)*5+1,5))+" THOUSAND" TO amt:word ENDCASE * Branch for comma or space after thousands... IF VAL($(t:amt:str,4,3)) > 0 STORE amt:word + ", " TO amt:word ELSE STORE amt:word + " " TO amt:word ENDIF ENDIF * Branch for hundreds... IF $(t:amt:str,4,1) > "0" STORE $(t:amt:str,4,1) TO t:hundred STORE amt:word+TRIM($(t:unit,(VAL(t:hundred)-1)*5+1,5))+; " HUNDRED " TO amt:word ENDIF * Branch for tens and ones... IF VAL($(t:amt:str,5,2)) > 0 STORE $(t:amt:str,5,1) TO t:tens STORE $(t:amt:str,6,1) TO t:ones * Branch for combinations of tens and ones... DO CASE CASE t:tens=" " .OR. t:tens="0" STORE amt:word+TRIM($(t:unit,(VAL(t:ones)-1)*5+1,5))+" "; TO amt:word CASE t:ones="0" STORE amt:word+TRIM($(t:decade,(VAL(t:tens)-1)*7+1,7))+" "; TO amt:word CASE t:tens="1" STORE amt:word+TRIM($(t:teen,(VAL(t:ones)-1)*9+1,9))+" "; TO amt:word CASE t:tens>"1" STORE amt:word+TRIM($(t:decade,(VAL(t:tens)-1)*7+1,7)); +"-"+TRIM($(t:unit,(VAL(t:ones)-1)*5+1,5))+" "; TO amt:word ENDCASE ENDIF ENDCASE * Branch for one dollar or more, and put the word string together IF amt:word = " ONE" STORE $(amt:word,2,LEN(TRIM(amt:word))+1) + "DOLLAR and " +; t:cent:str + "CENTS" TO amt:word ELSE STORE $(amt:word,2,LEN(TRIM(amt:word))+1) + "DOLLARS and " +; t:cent:str + " CENTS" TO amt:word ENDIF * Restore the environment and return to the calling program RELEASE ALL LIKE t:* SET EXACT OFF RETURN * EOF: CB-NBWD.CMD (.PRG) ENDCASE ENDIF ENDCASE * Branch for one dollar or more, and put the word string together IF amt:word = " ONE" ST* Program.: CB-RECON.CMD (.PRG) * Author..: Anonymous * Date....: February 9, 1984 * Notice..: Copyright 1984, Ashton-Tate and RSP, Inc. * Notes...: Reconcile the bank statement ERASE * total outstanding checks USE Cb-check SUM Amt TO outstand FOR .NOT. Can @ 2,15 SAY " PROGRAM TO RECONCILE WITH BANK STATEMENT" @ 3,15 SAY " ----------------------------------------" * total deposits in transit USE Cb-bank SUM Amt TO notclear FOR .NOT. Clear STORE -1.00 TO bank:bal STORE T TO loop1 DO WHILE loop1 DO WHILE bank:bal < 0.00 STORE 0.00 TO bank:bal @ 5,5 SAY "Enter ending balance from bank statement $ " GET bank:bal READ ENDDO STORE " " TO answer @ 7,25 SAY "Is this correct? [Y/N] " GET answer PICTURE "!" READ @ 7,0 IF answer $ "Y " STORE F TO loop1 ELSE STORE -1.00 TO bank:bal ENDIF ENDDO * erase colons surrounding bank:bal input @ 5,49 SAY " " @ 5,60 SAY " " @ 7,18 SAY "ADD: "+STR(lastdep,2,0)+" deposits in transit $" @ 7,50 SAY notclear @ 8,49 SAY "------------" @ 9,49 SAY bank:bal+notclear @ 11,11 SAY "SUBTRACT: Total outstanding checks $" @ 11,50 SAY outstand @ 12,49 SAY "------------" IF outstand > 0.00 @ 11,49 SAY "<" @ 11,61 SAY ">" ENDIF STORE bank:bal+notclear-outstand TO truebal @ 13,27 SAY "True cash balance = $" @ 13,50 SAY truebal @ 15,27 SAY "Checkbook balance = $" @ 15,50 SAY balance * initialize memory variables STORE F TO decision IF truebal = balance STORE T TO equal @ 19,14 SAY "Checkbook and bank statement exactly balance" STORE " " TO answer @ 21,16 SAY "Press any key to return to main menu " GET answer PICTURE "!" READ RELEASE outstand,notclear,bank:bal,loop1,answer,truebal,decision,equal USE RETURN ELSE STORE F TO equal @ 18,14 SAY "Bank Statement and Checkbook do not balance" USE Cb-depst IF truebal > balance STORE T TO greater ELSE STORE F TO greater ENDIF ENDIF STORE F TO is:valid DO WHILE .NOT. is:valid STORE " " TO mdate @ 20,17 SAY "Enter Bank Statement Date " GET mdate PICTURE "##/##/##" READ @ 21,20 DO Cb-date IF .NOT. is:valid @ 21,20 SAY "Invalid date - please reenter" ELSE STORE " " TO answer @ 21,22 SAY "Is this correct? [Y/N] " GET answer PICTURE "!" READ @ 21,20 IF answer = "N" STORE F TO is:valid ENDIF ENDIF ENDDO ERASE @ 2, 0 SAY "========================================" @ 2,40 SAY "========================================" @ 3, 0 SAY "||" @ 4, 0 SAY "========================================" @ 4,40 SAY "========================================" @ 5, 0 SAY "||" @ 6, 0 SAY "||" @ 7, 0 SAY "||" @ 8, 0 SAY "||" @ 9, 0 SAY "||" @ 10, 0 SAY "||" @ 11, 0 SAY "||" @ 12, 0 SAY "||" @ 13, 0 SAY "||" @ 14, 0 SAY "========================================" @ 14,40 SAY "========================================" @ 13,78 SAY "||" @ 12,78 SAY "||" @ 11,78 SAY "||" @ 10,78 SAY "||" @ 9,78 SAY "||" @ 8,78 SAY "||" @ 7,78 SAY "||" @ 6,78 SAY "||" @ 5,78 SAY "||" @ 3,78 SAY "||" @ 3,27 SAY "BANK CREDITS AND CHARGES" @ 5,17 SAY "Credits" @ 5,57 SAY "Charges" @ 6,17 SAY "-------" @ 6,57 SAY "-------" @ 12, 4 SAY "------------------------------------" @ 12,40 SAY "------------------------------------" @ 5,40 SAY "|" @ 6,40 SAY "|" @ 7,40 SAY "|" @ 8,40 SAY "|" @ 9,40 SAY "|" @ 10,40 SAY "|" @ 11,40 SAY "|" @ 13, 4 SAY "True cash balance" @ 13,43 SAY "Checkbook balance" @ 8, 4 SAY "Interest earned" @ 8,43 SAY "Service charges" @ 9, 4 SAY "Bank collections" @ 9,43 SAY "Collection fees" @ 10, 4 SAY "Miscellaneous addition" @ 10,43 SAY "Miscellaneous charge" @ 13,25 SAY truebal DO WHILE .NOT. equal .AND. .NOT. decision @ 13,65 SAY balance STORE balance TO test STORE 1 TO count STORE 8 TO row STORE 27 TO col STORE 0.00 TO n1,n2,n3,n4,n5,n6 STORE -1.00 TO amount DO WHILE count < 7 DO WHILE amount < 0.00 STORE 0.00 TO amount @ row,col GET amount READ ENDDO IF count = 1 STORE amount TO n1 ELSE IF count = 2 STORE amount TO n2 ELSE IF count = 3 STORE amount TO n3 ELSE IF count = 4 STORE amount TO n4 ELSE IF count = 5 STORE amount TO n5 ELSE STORE amount TO n6 ENDIF 5 ENDIF 4 ENDIF 3 ENDIF 2 ENDIF 1 IF count < 4 STORE test + amount TO test ELSE STORE test - amount TO test ENDIF IF amount > 0 @ 13,65 SAY test ENDIF STORE count+1 to count IF count = 4 STORE 8 TO row STORE 65 TO col ELSE STORE row + 1 TO row ENDIF STORE -1.00 TO amount CLEAR GETS ENDDO STORE " " TO answer @ 16,20 SAY "Are the above entries correct? [Y/N] "; GET answer PICTURE "!" READ IF answer = "N" @ 16, 0 @ 8,27 SAY " " @ 9,27 SAY " " @ 10,27 SAY " " @ 8,65 SAY " " @ 9,65 SAY " " @ 10,65 SAY " " LOOP ENDIF IF truebal = test @ 18,17 SAY "Checkbook and bank statement exactly balance" STORE T TO equal ELSE @ 18,15 SAY "Checkbook and bank statement still do not balance" IF truebal > test STORE truebal - test TO diff ELSE STORE test - truebal TO diff ENDIF @ 19,23 SAY "The difference is $"+STR(diff,10,2) STORE " " TO answer @ 21,11 SAY "Do you still want to include the above changes? [Y/N] "; GET answer PICTURE "!" READ IF answer = "N " USE RELEASE outstand,notclear,bank:bal,loop1,answer,truebal,decision,; equal,greater,is:valid,mdate,test,count,row,col,n1,n2,n3 RELEASE n4,n5,n6,amount,diff RETURN ELSE STORE T TO decision ENDIF ENDIF ENDDO IF n1 > 0 APPEND BLANK REPLACE Date WITH mdate,Amt WITH n1,Paidfrom WITH "Interest earned" ENDIF IF n2 > 0 APPEND BLANK REPLACE Date WITH mdate,Amt WITH n2,Paidfrom WITH "Bank Collections" ENDIF IF n3 > 0 APPEND BLANK REPLACE Date WITH mdate,Amt WITH n3,Paidfrom WITH "Miscellaneous addition" ENDIF IF n4 > 0 APPEND BLANK REPLACE Date WITH mdate,Amt WITH -n4,Paidfrom WITH "Service charge" ENDIF IF n5 > 0 APPEND BLANK REPLACE Date WITH mdate,Amt WITH -n5,Paidfrom WITH "Collection fees" ENDIF IF n6 > 0 APPEND BLANK REPLACE Date WITH mdate,Amt WITH -n6,Paidfrom WITH "Miscellaneous charges" ENDIF STORE test - balance TO mamt IF mamt <> 0 USE Cb-bank APPEND BLANK REPLACE Date WITH mdate,Amt WITH mamt,Num WITH 0,Clear WITH T ENDIF STORE test TO balance USE RELEASE outstand,notclear,bank:bal,loop1,answer,truebal,decision,equal,; greater,is:valid,mdate,test,count,row,col,n1,n2,n3,n4,n5,n6 RELEASE amount,mamt,diff RETURN * EOF: CB-RECON.CMD (.PRG) * Program.: CB-REPRT.CMD (.PRG) * Author..: Anonymous * Date....: February 9, 1984 * Notice..: Copyright 1984, Ashton-Tate and RSP, Inc. * Notes...: Print reports DO WHILE T ERASE @ 2, 0 SAY "========================================" @ 2,40 SAY "========================================" @ 3, 0 SAY "||" @ 4, 0 SAY "========================================" @ 4,40 SAY "========================================" @ 5, 0 SAY "||" @ 6, 0 SAY "||" @ 7, 0 SAY "||" @ 8, 0 SAY "||" @ 9, 0 SAY "||" @ 10, 0 SAY "||" @ 11, 0 SAY "========================================" @ 11,40 SAY "========================================" @ 10,78 SAY "||" @ 9,78 SAY "||" @ 8,78 SAY "||" @ 7,78 SAY "||" @ 6,78 SAY "||" @ 5,78 SAY "||" @ 3,78 SAY "||" @ 3,34 SAY "REPORTS MENU" @ 6,25 SAY " 0 - Exit" @ 7,25 SAY " 1 - Checks" @ 8,25 SAY " 2 - Bank Deposits" @ 9,25 SAY " 3 - Individual Deposits" STORE 4 TO choice DO WHILE choice < 0 .OR. choice > 3 STORE " " TO mchoice @ 11,33 SAY " select : : " @ 11,41 GET mchoice READ STORE VAL(mchoice) TO choice ENDDO STORE 6 TO row STORE 0 TO count DO WHILE count < 4 @ row+count,25 SAY " " STORE count+1 TO count ENDDO IF choice = 0 RELEASE choice,mchoice,row,count USE RETURN ENDIF @ 3,30 SAY " " IF choice = 1 STORE "Checks" TO option STORE 31 TO col STORE 5 TO ub @ 11,0 @ 11, 0 SAY "||" @ 11,78 SAY "||" @ 12, 0 SAY "||" @ 12,78 SAY "||" @ 13, 0 SAY "========================================" @ 13,40 SAY "========================================" @ 7,24 SAY " " ELSE IF choice = 2 STORE "Bank Deposits" TO option STORE 28 TO col STORE 4 TO ub @ 11,0 @ 11, 0 SAY "||" @ 11,78 SAY "||" @ 12, 0 SAY "========================================" @ 12,40 SAY "========================================" @ 8,24 SAY " " ELSE STORE "Individual Deposits" TO option STORE 25 TO col STORE 3 TO ub @ 9,24 SAY " " ENDIF ENDIF @ 3,col SAY !(option) + " SUB-MENU" @ row+choice,24 SAY " " @ 6,20 SAY "0 - Return to REPORTS MENU" @ 7,20 SAY "1 - List all "+option @ 8,20 SAY "2 - List all "+option+" between two dates" @ 9,20 SAY "3 - List all "+option+" over a certain amount" IF choice = 1 @ 10,20 SAY "4 - List all taxable checks" @ 11,20 SAY "5 - List certain taxable checks" USE Cb-check STORE " CHKNO DATE PAY TO THE ORDER OF AMOUNT"; TO command1 STORE " ----- -------- ------------------------------ ----------"; TO command2 STORE "' '+STR(Chkno,4,0)+' '+Date+' '+Payto+' '+STR(Amt,10,2)"; TO command ELSE IF choice = 2 @ 10,20 SAY "4 - List all deposits in transit" USE Cb-bank STORE " DATE AMOUNT" TO command1 STORE " -------- ----------" TO command2 STORE "' '+Date+' '+STR(Amt,10,2)" TO command ELSE USE Cb-depst STORE " DATE PAIDFROM AMOUNT" TO command1 STORE " -------- ------------------------- ----------"; TO command2 STORE "' '+Date+' '+Paidfrom+' '+STR(Amt,10,2)" TO command ENDIF ENDIF STORE 6 TO choice2 DO WHILE choice2 < 0 .OR. choice2 > ub STORE " " TO mchoice2 @ 8+ub,33 SAY " select : : " @ 8+ub,41 GET mchoice2 READ STORE VAL(mchoice2) TO choice2 ENDDO IF choice2 = 0 * release some memory variables and return to the REPORTS MENU RELEASE option,col,ub,command1,command2,command,choice2,mchoice2 LOOP ENDIF STORE " " TO printer @ 22,6 SAY "Do you want the output sent to the printer "+; "or the screen? (P/S) " GET printer PICTURE "!" READ @ 22,0 IF printer = "P" SET PRINT ON ELSE STORE "S" TO printer ENDIF STORE row+ub+4 TO newrow IF choice2 = 1 STORE "LIST ALL "+!(option) TO header ERASE ? ? " "+header ? command1 ? command2 GO TOP DO WHILE .NOT. EOF ? &command SKIP ENDDO ENDIF IF choice2 = 2 STORE T TO sandy DO WHILE sandy STORE F TO is:valid DO WHILE .NOT. is:valid STORE " " TO mdate @ newrow,23 SAY "Enter starting date "; GET mdate PICTURE "##/##/##" READ DO CB-DATE IF is:valid STORE mdate TO date1 STORE $(mdate,7,2)+$(mdate,1,2)+$(mdate,4,2) to begin ENDIF ENDDO is:valid STORE F TO is:valid DO WHILE .NOT. is:valid STORE " " TO mdate @ newrow+2,23 SAY "Enter ending date "; GET mdate PICTURE "##/##/##" READ DO CB-DATE IF is:valid STORE mdate to date2 STORE $(mdate,7,2)+$(mdate,1,2)+$(mdate,4,2) to ending ENDIF ENDDO is:valid IF begin > ending @ 20,13 SAY "Ending date occurs before starting date - "+; "please reenter" LOOP ENDIF STORE F TO sandy ERASE STORE 0.00 TO amount GO TOP STORE "LIST ALL "+!(option)+" BETWEEN "+date1+" AND "+date2; TO header ? ? " "+header ? command1 ? command2 DO WHILE .NOT. EOF STORE $(Date,7,2)+$(Date,1,2)+$(Date,4,2) TO mdate IF mdate > begin .AND. mdate < ending ? &command STORE amount + Amt TO amount ENDIF SKIP ENDDO IF choice = 1 STORE " " TO first ELSE IF choice = 2 STORE " " TO first ELSE STORE " " TO first ENDIF ENDIF ? ? first+"TOTAL $"+STR(amount,10,2) ENDDO sandy RELEASE sandy,is:valid,mdate,date1,begin,date2,ending,amount,first ENDIF IF choice2 = 3 STORE -1.00 TO amount DO WHILE amount < 0.00 STORE 0.00 TO amount @ newrow,20 SAY "Enter in amount " GET amount READ ENDDO STORE newrow+3 TO newrow ERASE GO TOP STORE "LIST ALL "+!(option)+" OVER $"+STR(amount,10,2) TO header ? ? " "+header ? command1 ? command2 DO WHILE .NOT. EOF IF Amt > amount ? &command ENDIF SKIP ENDDO RELEASE amount,answer ENDIF IF choice2 = 4 .AND. choice = 2 STORE "LIST ALL DEPOSITS IN TRANSIT" TO header GO TOP LOCATE FOR .NOT. Clear IF EOF @ newrow,30 SAY "No Deposits in transit" ELSE ERASE STORE 0.00 TO amount ? ? " "+header ? command1 ? command2 DO WHILE .NOT. EOF IF .NOT. Clear ? &command STORE amount + Amt TO amount ENDIF SKIP ENDDO ? ? " TOTAL $"+STR(amount,10,2) ENDIF RELEASE amount ENDIF IF choice = 1 .AND. choice2 > 3 STORE " Business expenses " TO m1 STORE " Medical or Dental expenses " TO m2 STORE "Payments for Medicine or Drugs" TO m3 STORE " Alimony payments " TO m4 STORE " Child Care expenses " TO m5 STORE " Automotive expenses " TO m6 STORE " Contributions " TO m7 STORE " Miscellaneous tax deductions " TO m8 IF choice2 = 5 @ newrow, 1 SAY "(1) Business expenses (4) Alimony" @ newrow,55 SAY "(7) Contributions" @ newrow+1,1 SAY "(2) Medical or Dental (5) Child Care" @ newrow+1,55 SAY "(8) Miscellaneous" @ newrow+2,1 SAY "(3) Medicine or Drugs (6) Automotive" STORE 9 TO mtax DO WHILE mtax < 0 .OR. mtax > 8 STORE " " TO taxchar @ newrow+4,6 SAY "Enter specific tax expense (or 0 to return "+; "to the REPORTS MENU) " GET taxchar READ STORE VAL(taxchar) TO mtax ENDDO IF mtax = 0 RELEASE option,col,ub,command1,command2,command,choice2,; mchoice2,newrow,m1,m2,m3,m4,m5,m6,m7,m8,mtax,taxchar LOOP ENDIF STORE "m"+taxchar TO string2 STORE "LIST ALL "+&string2 TO header ELSE STORE "LIST ALL TAXABLE CHECKS" TO header ENDIF ERASE ? ? " " + header ? IF choice2 = 4 ? " "+m1 ENDIF ? command1 ? command2 IF choice2 = 4 STORE 1 TO count STORE T TO again DO WHILE again STORE 0.00 TO amount GO TOP DO WHILE .NOT. EOF IF Tax = count ? &command STORE amount+Amt TO amount ENDIF SKIP ENDDO ? ? " TOTAL $" +; STR(amount,10,2) * need routine to keep track of totalling print out totals ? ? STORE count+1 TO count IF count > 8 STORE F TO again ELSE STORE "m"+STR(count,1) TO string1 ? " "+&string1 ? command1 ? command2 ENDIF ENDDO again ELSE STORE 0.00 TO amount GO TOP DO WHILE .NOT. EOF IF Tax = mtax ? &command STORE amount+Amt TO amount ENDIF SKIP ENDDO ? ? " TOTAL $"+; STR(amount,10,2) ENDIF RELEASE m1,m2,m3,m4,m5,m6,m7,m8,amount IF choice2 = 4 RELEASE again,string1 ELSE RELEASE mtax,taxchar,string2 ENDIF ENDIF IF printer = "P" SET PRINT OFF ELSE ? ? ENDIF STORE " " TO ret @ 23,15 SAY "Press any key to return to the REPORTS MENU " GET ret READ RELEASE option,col,ub,command1,command2,command,choice2,; mchoice2,newrow,header,printer,ret ENDDO T ÝZIP COMCOPYRIGHT 1982, PAWLUK CORPORATION5455 Wilshire BoulevardLos Angeles, CA 90036(213) 937-0551^#VN#F<%0  ZIP.COM NOT PRESENT ON DEFAULT DISK $:22!}~#z~!} w#z’s\!}:W"+^!hu>2Ra2Qa>2h:hog:QaogW7*+^3:Rao*+^*:Qaog~OUU!]:Qaog3ͩV>2]V*+^*:Qaog~!Ra2Ra!Qa42RaR]yB>C!`@!a>'V<[RyB>C!`@!a>#V<[RyB>C!`@!a>!V<[RyB>C[nV!h6:h!h6RyB>C!`@!b>VVVV VV(V%V$V$V%V!V V VVV<[!hJ:zR"_!_#*_ |u!_~#RyBC!`@!c>%V<[CP}*+^w*+^~$P!`a :V!`aUUV\P|2_!`aUUV\P|2_!`aUUV\P|2_a*+^36>2Qa>2h:hog:QaogW!]:Qaog3ͩVn&}*+^*:Qaogw!]:Qaog3ͩV*+^32͹U!Qa4g*+^~$P!`a :V:_$P:_$P:_$P!`aUUGUUU\P|*+^w(!h͉XRByB!`@!-^V<[>2Qa:Qaog |o32]V!`^d>2]V!^d>2]V!^d>2]V!^ d>2]V!,_!d>2]V!__6!_6!"d>1T*+^#>XT!$d>1T*+^>XT!&d>1T*+^>XT> CP}*+^wRByBC!`@!(d>'V<[þ>3>!OdU!-^2:V!`^Qd>2]V!^Ud>2]V!^d>2]V!^d>2]V!,_Vd>2]V!__6!_6!"d>1T*+^#>XT!$d>1T*+^>XT!&d>1T*+^>XTCP}*+^wR yBC!`@!Wd>'V<[þ>3>!dGU!-^2:V!`^Qd>2]V!^Ud>2]V!^d>2]V!^d>2]V!,_Vd>2]V!__6!_6!"d>1T*+^#>XT!$d>1T*+^>XT!&d>1T*+^>XTCP}*+^w*_+++|RyBC!`@!~d>'V<[ *_ | R yBC!`@!d>'V<[>CP}*+^wþ!-^d>2]V!`^d>2]V!^d>2]V!^d>2]V!^d>2]V!,_d>2]V!__d>2]V!_6!d>1T*+^#>XT!$d>1T*+^>XT!&d>1T*+^>XT>CP}*+^wR yBC!`@!d>'V<[þ!ua^#V*_ |2 !e>1T*+^>XTR/ yBC!`@!e>(V<[g !&d>1T*+^>XTRg yBC!`@!=e>(V<[!$d>1T*+^>XT>3>!eeU!-^2:V!`^Qd>2]V!^ge>2]V!^ie>2]V!^ke>2]V!,_me>2]V!__6!_6!"d>1T*+^#>XTCP}*+^wþ!-^oe>2]V!`^qe>2]V!^Ud>2]V!^d>2]V!^!d>2]V!,_Vd>2]V!__6!_6!te>1T*+^#>XT!$d>1T*+^>XT!&d>1T*+^>XTCP}*+^wR yBC!`@!ve>'V<[þ!-^e>2]V!`^d>2]V!^ke>2]V!^me>2]V!^ie>2]V!,_ge>2]V!__6!_6!"d>1T*+^#>XT!$d>1T*+^>XT!&d>1T*+^>XT> CP}*+^wRy yBC!`@!e>'V<[þ!-^e>2]V!`^e>2]V!^Od>2]V!^e>2]V!^e>2]V!,_e>2]V!__6!_6!"d>1T*+^#>XT!$d>1T*+^>XT!&d>1T*+^>XTCP}*+^wR9 yBC!`@!e>'V<[þ>3>!eeU!-^2:V!`^Qd>2]V!^e>2]V!^e>2]V!^e>2]V!,_e>2]V!__6!_6!"d>1T*+^#>XT!$d>1T*+^>XT!&d>1T*+^>XTCP}*+^wRyBC!`@!e>'V<[þ!-^%f>2]V!`^+f>2]V!^ke>2]V!^me>2]V!^ie>2]V!,_ge>2]V!__2f>2]V!_7f>2]V!te>1T*+^#>XT!$d>1T*+^>XT!&d>1T*+^>XT>CP}*+^wRyBC!a@!'V<[þ!-^cf>2]V!`^ef>2]V!^e>2]V!^e>2]V!^e>2]V!,_e>2]V!__6!_6!te>1T*+^#>XT!$d>1T*+^>XT!&d>1T*+^>XT>`CP}*+^wRyBC!a@!if>'V<[þ!-^f>2]V!`^d>2]V!^ke>2]V!^me>2]V!^ie>2]V!,_ge>2]V!__6!_6!"d>1T*+^#>XT!$d>1T*+^>XT!&d>1T*+^>XT> CP}*+^wRUyBC! a@!f>'V<[þ!-^f>2]V!`^d>2]V!^ke>2]V!^me>2]V!^ie>2]V!,_ge>2]V!__6!_6!"d>1T*+^#>XT!$d>1T*+^>XT!&d>1T*+^>XT> CP}*+^wRyBC!a@!f>'V<[þ!-^f>2]V!`^d>2]V!^Ud>2]V!^d>2]V!^ d>2]V!,_Vd>2]V!__6!_6!"d>1T*+^#>XT!$d>1T*+^>XT!&d>1T*+^>XTCP}*+^wRyBC!a@!f>'V<[þ>3>!eeU!-^2:V!`^Qd>2]V!^Ud>2]V!^d>2]V!^d>2]V!,_Vd>2]V!__6!_6!"d>1T*+^#>XT!$d>1T*+^>XT!&d>1T*+^>XTCP}*+^w*_ |®RyBC!a@! g>'V<[ *_ |RyBC!a@!4g>'V<[ *_ | R yBC!$a@![g>'V<[þ!oa^#V!a^#V>3>!dGU!-^2:V!`^Qd>2]V>3>!^2:V!^g>2]V!^g>2]V!,_g>2]V!__6!_6!"d>1T*+^#>XT!$d>1T*+^>XT!&d>1T*+^>XT> CP}*+^wRyBC!)a@!g>'V<[þ!-^d>2]V!`^d>2]V>3>!^2:V!^g>2]V!^g>2]V!,_g>2]V!__6!_6!"d>1T*+^#>XT!$d>1T*+^>XT!&d>1T*+^>XT> CP}*+^wRyBC!.a@!g>'V<[þ!a^#V>3>!eeU!-^2:V!`^Qd>2]V!^Ud>2]V!^g>2]V!^d>2]V!,_Vd>2]V!__6!_6!"d>1T*+^#>XT!$d>1T*+^>XT!&d>1T*+^>XTCP}*+^wRxyBC!3a@!g>'V<[þ!-^e>2]V!`^g>2]V!^!d>2]V!^g>2]V!^d>2]V!,_g>2]V!__6!_6!h>1T*+^#>XT!$d>1T*+^>XT!&d>1T*+^>XT> CP}*+^wR9yBC!8a@!h>'V<[þ!-^)h>2]V!`^d>2]V!^d>2]V!^d>2]V!^d>2]V!,_d>2]V!__6!_6!te>1T*+^#>XT!$d>1T*+^>XT!&d>1T*+^>XT>CP}*+^wRyBC!=a@!/h>'V<[þ!-^d>2]V!`^Qd>2]V!^Vh>2]V!^Wh>2]V!^Xh>2]V!,_e>2]V!__6!_6!"d>1T*+^#>XT!$d>1T*+^>XT!&d>1T*+^>XT> CP}*+^wRyBC!Ba@!Yh>'V<[þ^RyB>C!Ga@!h>$V<[VV<[!Sa>V!h>V!h>VMnVͼ]!m6:mRyB!h@!-^V<[>2 j: jog |322#j>2 j>2m:mog: jogW:#jog!]: jog3ͩVn&W}2#j! j4:#j!]*_3ͩV6ReyB>C!h@!1j>V<:#jog>͙SVV<[RvyB>C[!m͙"RyB>C!h@!oj>V<[:_RyB!h@!j>V<[RyB!h@!j>V<[RyB>C[!"_!`^"m!m͙"!"_R@yB>C!h@!j>V<*+^#>1T>R<[R]yB!h@!j>V<[:_RyB!i@!j> V<[áRyB!i@!j>V<[RyB>C! i@!j> V<[!^"m!m͙"RyB!i@!j> V<[!^"m!m͙"RyB>C!i@!j> V<[!^"m!m͙"RCyB!i@!j> V<[!,_"n!n͙"RqyB>C!"i@!j>V<[RyB>C[!__"n!n͙"RyB>C!'i@!j>V<[RyB>C[!_"n!n͙"RyB>C!,i@!k> V<*+^>1T!k>1TͱT>R<[RCyB!4i@!k> V<*+^>1T>R<[ReyB>C!>i@!k>V<[:_RyB!Ci@!0k>V<[éRyB!Hi@!7k>V<[RyB>C!Mi@!Fk>$V<[!nJ:zR"_RyBC!Ri@!mk>'V<[*_ |/*_+|!m6*_ |V!]*_3ͩV" n! n;$*_++|:mN!m6*_ |RyBC!Wi@!k>V<[! nJ:͡P*+^>XT*+^>1T!k>1TT*+^>XT*+^>1T!k>1TT!k>1T*+^>XT!k>1T*+^>1TT!k>1T*+^>XT*_ |RLyBC!\i@!k>V<[!nJ:͡P*+^>XT*+^>1T!k>1TT!k>1T*+^>XT!k>1T*+^>1TT!k>1T*+^>XT*_ |:_/2_fÖ"!m6RyB!ai@!-^V<[>2 j: jog |+3C!fi@!k>VV<[!`^"n!n͙"!m6:mP RyB>C!mi@!k>"V<[!nJ:zR}2 j: jog+|>2 j: jog |>22 jRyB>C!ri@!l>%V<[!nJ:zR}2!j:!jog+| >2!j" :!jog |" >22!j!`^: j_UUC!wi@!>l>V<[Þ R yB>C!|i@!Bl>V<[R yB!i@!Gl>!V<[V!hl>V!il>VMC!i@!jl>#V<*+^#>1T>R#V<[V!hl>V!il>VMC!i@!l>V<[!$nJ:͡P*+^#>XT!l>1T*+^#>1TT!!l>1T*+^#>XT"*+^#>1T!l>1TT"!l>1T*+^#>XT%(m!R"yB>C[:_>"R>"yB!i@!l>V<[R["yB!i@!l> V<[V!hl>V!il>VMnV*(nn&|"R"yB!i@!l>V<[7$>2 j*(nn&}2*n:*nog: jogW7$*(n: j_UUG!$j>nV!l$jx͋U $!l$jx͋UP#RM#yB!i@!l>V<[$!V<[$!=l$jx͋U*_++|#R#yB!i@!m>V<[$R$yB!i@!l>V!$jn&@ }3>>^3>UU<[0$R0$yB!i@!l>V!$jU<[! j4""(^#V"+nR]$yB!i@!-^V<[>2 j: jog |:_$3C[*+n"0n!0n͙"*_+|$R$yB>C!i@! m>V<[+&*_++| %R%yB>C!i@!m>V<[+&*_+++|9%R6%yB>C!i@!3m> V<[+&*_ |j%Rg%yB>C!i@!=m> V<[+&*_ |›%R%yB>C!i@!Im> V<[+&*_ |%R%yB>C!i@!Vm> V<[+&*_ |%R%yB>C!i@!bm> V<[+&*_ |+&R+&yB>C!i@!om> V<[RM&yB>C!i@!|m>V<[V!m>V!m>VM2 j*+n6!$jn& |'R&yB!i@!m>V<:#jog>͙S V<[R;'yB>C!i@!m> V<: jog>͙SV<[V<['R'yB! j@!$jn&@ }3>>^3>U<['R'yB!j@!$j>V<[!#j5! j4!$j*+n2>ͻUù&%(:m(:#jog*+nn&}2#j*+n6ã&(RG(yB>C!j@!m>V<[$V<[R(yBC[!$j>V!m>V!m>VMnV!n>1T*+^###>XT!n>1T*+^f>XT*+^ n>GnV*+^ n>GnV*+^n>GnV*+^n>GnV*+^n>GnV*+^n>GnV*+^n>GnV*+^n>GnV*+^n>GnV*+^n>GnV*+^n>GnV*+^n>GnV*+^n>GnV*+^n>GnV*+^n>GnV*+^n>GnV*+^n>GnV*+^n>GnV*+^n>GnV*+^n>GnV*+^ n>GnV*+^!n>GnV*+^"n>GnV*+^#n>GnV*+^$n>GnV*+^%n>GnV*+^&n>nV*+^'n>GnV!nn>nV!n>V!n>V!n>VM2n:nog |:_1+3C!7n@!n>V<[!no>nV!nnx͋U!nnx͋U+_w!nnx͋U!nnx͋U+>3>!rG$V!r V!n>V!n>VMnV!n>V!n>V!n>VM2n:nog |:_,3C!An@!n>V<[!no>nV!nnx͋U!nnx͋Ur-_w!nnx͋U!nnx͋Uo->3>!rG$V!r <,!n>V!n>V!n>VM#V<[R-yBC!Kn@!:o>%V<[!n6!nn>GnV!nnx͋U?!nn& |/!nnx͋U6._w!r <R.yB>C!Pn@!_o>V<[!nyo>nV!nnx͋U?!nn& |/!nnx͋U?/V<[!no>nV>3>!rG$V!r <Ô.!onx͋U?!nox͋U?h/!n>_w>2n>2r:rog:nogW/:n:n:n//*+^ :nog!nx͋U/*+^ :nogn>GnV>2n!n4r/9,X4R0yBC!o>$VͩA[%V<[!nV!n>V!o>VMVͩA[!nyo>GnV!yonx͋U!zonx͋U41VͩA[11!pnx͋U!npx͋U11*+^!n>GnVÉ0*+^n>GnVW4!nV!n>V!p>VMVͩA[!nyo>GnV!yonx͋U!zonx͋U?2VͩA[<2!pnx͋U!npx͋U<2*+^!n>GnVÔ1*+^n>GnVW4!nV!n>V!Hp>VM1T!Ip>1TT>R!n :V!n!nV!n>Vͫ ]VR2yBC!Kp>VͩA!nVͩA!\p>VͩA[!rJ:͡P*+^f>XT*+^f>1T!Ip>1TT:3!Ip>1T*+^f>XTÆ3*+^>1T!Ip>1TT*+^f>1TT3*+^>1T!Ip>1TT*+^f>XTW4!nV!n>V!bp>VM1T*+^###>XTR3yBC!cp>VͩA[!rJ:͡P*+^###>XT*+^###>1T!n>1TT+4!n>1T*+^###>XTW4!~p>1T*+^###>1TTW4!~p>1T*+^###>XT8R}4yB>C!_n@!p>V<[R4yB>C!dn@!p>V*+^>V!nUU V*+^>V!nUU<[R5yB>C!kn@!p>V V*+^ U<[R95yB>C!rn@*+^ >V<[*+^'!nx͋Um5Rj5yB!wn@!p>V<[Î5R5yB!|n@*+^'>V<[R5yB!n@!p>V V*+^$>V*+^ UU<[R76yB>C!n@!p>V*+^ >V*+^ UU V*+^>V*+^ UU<[R6yB>C!n@! q>V*+^>V*+^ UUV*+^>V*+^ UU<[R27yB>C!n@!>q>V*+^>V*+^ >V!4q> V*+^>V*+^ >V!+q> V*+^>V*+^ UUUUUUUU<[R7yB>C!n@!Yq>V*+^>V*+^ >V!Oq> V*+^>V*+^ >V!Fq> V*+^>V*+^ UUUUUUUU<[R^8yB>C!n@!zq> V*+^>V*+^ >V!pq> V*+^#>V*+^ >V!gq> V*+^">V*+^ UUUUUUUU<[R8yB>C!n@!q>V*+^>V*+^ >V!q> V*+^>V*+^ >V!q> V*+^>V*+^ UUUUUUUU<[I:RQ9yB>C!n@!q>V'V(V(VVV<[R9yB>C!n@*+^>V!DrU<[R9yB>C!n@*+^>V!\rU<[R:yB>C!n@!tr>V<*+^>1T!Ip>1TT>RV<*+^f>1T>R<[RH:yB>C!n@!r>V<*+^###>1T>R<[s~# O:!r>V!r4U!ssP:V*s~:*s^#V>ogH<*ss#r:*+^>1T! s>1TTjR*s^#VH<*ss#r!!s s>nV!"s!"s6!r6*s*s^#VW!!sn& |;V! s> Vͫ<|¡;!s#!!s>V!s>Vͫ<|:rq;>3>!sG$V!s <á;!s ͻU*s#"s!s!sx͋U¡;!r6;!!s>V!ssVͫ<|;!s ͻU*s#"s;>3>!sG$V!s <:!"s!"sVÍV^#V^;#V!<*3>;K* <@|A<|{z7 Ҟ<#~wf<~ <<#<#ü ͱ@=&9H=x2_y 5=2_"s ><8?*s=x2_=WA j=Aj=j=G:_=Wx2_"s >!_F6!_~#ʎ=x=2_8?>Eͱ@:_+=-/x2_y2_"s >z?:_!_?4!9~#ͱ@=*s>@2_2_2_<2_!9> !>+4>>A>-A>>2_>>Z>P> T> >>A>.q>>>q>>>b>e{>E¾>>+‹>>Ô>-”>>>WG>>Ҳ>xGGG>º>GyO> W>þ>:_>>>y2_>~#z0 0!__w!_~?4_!_sWW2_G:_<2_=W:_Wz?R?:_R?!_5!_4W:_G:_`?!_?>2_͝?ͱ@!_5l?:_!_<_!_>w w>+Ï?!_~5>.?G:_x0¼?:_> !_~?5!_4!_5-2_x!_^4{??!_~0>0@ @x=@Gy@? 1@:_@+@!_x?+@ͨ@?̓D? E@?> ͱ@7@ W@xQ@>ͨ@? b@y@?xl@>?=̓Dl@ʦ@x!_Ҏ@ͦ@y@:_ʙ@ڦ@:_> ͱ@Î@>2s!sC:_@!_@> @> @@2s!sÑD!sÎXLA͍A^͘A^#V%AALA@#FA#NA#^#r+s#^#V++r+s~@5@͍A5^͘Aq#p@O͍A4~ jA_͘As#r#s#r#q!pAÎXxAyA`zA|A Format Overflow*`-&&`!sAO:6`yA!9GA~#'ºAúAyAO:.`A(B[BA{A*_|Bj& *_*_W#W> cB> cB[B> cB{=>'cB!9JB=~#'CB{>'cBcB.B{=>'cB{>bcB*_++|2t!t͑DɯÀB>ÀB>2t"t"t`i"t!9"t!tÜBt ~# ¡B*t~C*t~B!t>VG3!!!7`iE!7`"u!u-G C!t>VG3!R.!!\`iE!\`" u! u-G"C*t" u! u-G!u͈E*t^#V!_s#r*u^#V!_s#r*t^#VDU|*`DU|GgC!uC*t^#V}*`}GʊC!uC:2`C*t^#V}*`}GʮC!uC:5`C*t^#V}C!uC^#V"u!`"!u*u"%u!u͎X2)u!'uC^#V".u:.`C:0`(D*.u%D*.u5!0u6:0u "DUDDDTD!1u͑D*.uTD*.u5!_6!3u͑D:_QD*.u6.D͏G20u:0u‚D!`"9u!"=u!5u͎X!_6#6!0u6 :6`D!@u͑D^#V"Fu!_"Lu*Fu"Ju!HusLD!`"Ru!"Vu!Nu͎XDhE:.`hE*Fu~ D*_#"_hE*Fu~ D!_6#6hE:6`hE*Fu~ E*_#"_!_6#6hE*Fu~ hE*_#"_!_#9E!_6#6*_*_#W|hE!`"\u!"`u!Xu͎XcE̓D!_6"bu!9"du!bu͈E! 9^lu~# E*lu^#V|ʢE*lu*nu JU*nu nbE*nu !qu>jVE!fu>V*luU!qu$V*lu~#F*lu^#V)))|F*lu6P#6*lu~#WF*lu^#V))|KF*lu6#6WF*lu6<#6*lu6#6*lu6#6*lu6#6*lu 6*lu^#V}CP}2pu*lu^#V}F!pu44*lu^#V}F>2pu*lu^#V}F*nu~#F*nu6#6*lu"u*nu"u*nu"u!uPK*lu^#V|,G*lu"u!"u!u͎X^#V^#VC\:`JG!oG͎X2`O!&`YG6^G +~#w!` s#r!`4[wGxG`yG{G I/O Stack Overflow:_¯G!_"u!u`LG!u6úG:_2u!_6:u G*_#"_:u G!_6#6:u"FN"HN*FN^#V#"FN^#VGG"LNG"PN|G|~GGya(HA =.:;<>[]y *JNH DHPHH$DHH1rH o&))))\xH  ʏH#w HDHJH*PN#ʾHAҾHGDHH:H 6Hp4DH+\HH#HH#*H6?HwDHHHIDHH#6 H.9IDH \H-IH9I#*%I6?)IwDHIH@IDH-I#6 9I%#6BI*PN##^ ~?YI# RIxCON CON RDR PUN LST M!tI ~JH$IDHH1ҽI\ʤIlI$I!~ IDH!aIHI IDH#Ix=GIDH>ɯ*PN+I^#VI#{#zI6#6I r+s!uF#~RJ!u6P  Y\ Y\!u^r+s6 #6 !u4^N*PN|‚J}=oJ"J~JzIzJO>~ʎJʎJ>JN*PN|ºJYzI=ʧJy³JY\öJ>~J=J>Jq2UN*PN/"RNJ'K{ JI*RN*PN#:UNOKI#s#rKJJJ JJIr+s{8K!ON4*RN+>|GK+}oGG~2NNG"JNG:NNVL̓IʉKG:NNVL*LNpƒK4#67NH:NNڤKAK*FN++"FNíK}+ʱKGK}|2AN"?NHAK"DN1:W|VL##"PN6*LNs#r͞HM{ M*PN:NNwK6L*DN"BN<-L:NNML7N*LNw#w7NGG7N\JGq7NGG7NGN͕J7N*PN~" 4#4#4GG7N~´LLsO7N J>L7NGG7N~ J>L7N*PN~L>7NLxO7N*PN!*~!/2TN*PN|M(^#VHH{z!MzM2ONzPM:TNDM\JqKMN͕J#+M*PN|ʅM*~ʅM=!ONڂM:TNJM{MwbM͆L>GG7N|}7N~> 7N<7NGG7N|¼M*LNw=7N*PN]*LN^#V6+6++W7NG H7N>7N"N#F#~Gq#p#w>7NG H7N>7N*~H!&N=N>!*PN" s#r#w=7N*HN }!u6 4>2u*u!4#4#4~#N#F#y#x#:u*u!!:uʰNͅNoN:u~G~#~O?N#~N! p! y! qO>G!$q#p#6zO"u"u2ux2uVN2ufN!u~5P͕NO=O:uO*uGx|g}oJP WWG!9!yʈPʈP)0ʃP1W# lPyʓP) ÈPxDMox&9`iO! 9xP~ P#ðPz,Q>o>g9~+PiQWP-P.PiQP0iQ:*DBASE HELP TEXT FILE DBASEMSG.TXT VERSION 1.17 FOR dBASE II v2.41 Copyright 1984 Ashton-Tate Written by Wayne Ratliff, Jim Taylor, and Howard Dickler INTRODUCTION This entry is intended to give you on-line information about your dBASE II Database Management System. It explains the disk files you have received, and gives suggestions on tapping the power now available to you for data management. Using the on-line HELP in conjunction with your Manual, you will soon be creating databases and writing command procedures to do your work. >>>>>>> type any key to continue <<<<<<< HOW TO USE THE 'HELP' FACILITY Information about your dBASE II system can be obtained by typing HELP and the name of a dBASE II command or HELP and any of the following key words. FULL SCREEN LIMITS NEW VIDEO ERRORS FUNCTIONS DBASE GLOSSARY HELP INSTALL RUNTIME >Note: Entire key words need not be entered. dBASE will then look up the entry for the key word and display it. If there is no information on the subject then dBASE will say "NO HELP MESSAGES FOUND". When there is more text to display beyond what's shown, then you will see the word WAITING (like this). >>>>>>> type any key to continue <<<<<<< The essential dBASE II files on this disk are: DBASE.COM -- main system program file DBASEOVR.COM -- all overlays and system messages DBASEMSG.TXT -- this HELP file (only necessary if you use HELP) INSTALL.COM -- terminal installation program (not necessary after terminal is installed). *EXIT *FULL SCREEN FULL-SCREEN CURSOR MOVEMENT CODES -- ALL COMMANDS ctrl-X moves cursor DOWN to the next field (also ctrl-F) ctrl-E moves cursor UP to the previous field (also ctrl-A) ctrl-D moves cursor AHEAD one character ctrl-S moves cursor BACK one character ctrl-G deletes character under cursor or deletes character to left of cursor ctrl-Y blanks out current field to right of cursor ctrl-V toggles between overwrite and INSERT modes ctrl-W save changes and returns to "." prompt IN EDIT MODE ctrl-U toggles the record DELETE mark on and off ctrl-C writes current record to disk and ADVANCES to next record ctrl-R writes current record to disk and BACKS to previous record ctrl-Q ignores changes to current record and returns to "." prompt ctrl-W writes all changes to disk and returns to "." prompt IN BROWSE MODE ctrl-B pans the window RIGHT one field ctrl-Z pans the window LEFT one field IN MODIFY MODE ctrl-T DELETES current line, moves all lower lines up ctrl-N INSERTS new line at cursor position ctrl-C scrolls down a half page ctrl-W writes all changes to disk and returns to "." prompt ctrl-Q ignores all changes and returns IN APPEND MODE terminates APPEND when cursor is in first position of first field ctrl-W writes record to disk and moves to next record ctrl-Q ignores current record and returns to "." prompt CONTROL KEY STROKES OPERABLE WHEN NOT IN FULL SCREEN ctrl-P toggles your printer ON and OFF ctrl-R repeats last executed command ctrl-X clears the command line without executing command ctrl-H backspace ctrl-M emulates a carriage return ctrl-S starts/stops CPU operation *VIDEO Your KAYPRO has a variety of video attributes including reverse and half intensity, blinking, underlining and cursor off. In- structions for using these are found in you User's Manual. In the meantime, we've included two examples of the possibilities with your dBASE II system. One program, REV-ON will turn on half-intensity reverse video and the other, REV-OFF, turns it off. To use, type: . DO REV-ON or . DO REV-OFF at the dBASE II (.) prompt. *EXIT *INSTALL In order to use dBASE II's Full-screen editing facility, your terminal must be properly installed. Many dBASE formats are pre- installed. If yours is not your screen will appear jumbled when you attempt to perform such full screen operations as APPEND or EDIT. To correct this you must install dBASE II by running the dBASE II installation program, INSTALL.COM, called from your system as INSTALL. Since you may diagnose your terminal's status at any time by running STARTUP.PRG (called from the dBASE II "." prompt by entering the command DO STARTUP), you would be wise to use it before attempting to INSTALL dBASE II. It will tell you if you need to run the installation program, and can be used later to check the results if you do. *EXIT *NEW > New commands and changes to dBASE II New commands: HELP -- user aid command. REINDEX -- realigns and updates existing index file. SET F -- sets value of function key on IBM PC, Victor, TI Professional, and IBM PC compatible terminals. SET COLOR -- alters display color on terminals listed above. TEXT -- displays multiple lines of text, terminated by ENDTEXT. RANK( ) -- function returns ASCII value of first character. TEST( ) -- function determines validity of Supplemented Commands: APPEND,INSERT,EDIT,CREATE -- can now use a format file for screen control. BROWSE -- can now be given a list of fields to work with. DISPLAY STATUS -- shows databases and indexes in use and SET settings. READ & REPLACE -- can be directed not to perform disk accesses when non-key data is changed. RELEASE -- can now release subsets of memory variables. RESTORE -- can restore additively to existing memory variables. SAVE -- can now save subsets of memory variables. SET RAW ON -- eliminates extra spaces in DISPLAY and ? commands. UPDATE -- replace clause can now include WITH phrases. *EXIT *GLOSSARY dBASE II TERMINOLOGY or - any valid dBASE command or function. -- character string(s). In most instances must be delimited with single quotes (''), double quotes (""), or brackets ([]). -- an whose content is defined as Character in type. May be a cstring, a memvar or field of type C or any combination of these items concatenated with the dBASE operators. -- any non-alphanumeric character used to demarcate data, e.g., single quotes (''), double quotes (""), brackets ([]), colons (::), commas (,,), etc. or -- an item or group of items and operators whose value can be determined by dBASE. s may be defin- ed as C,N, or L depending on the "type" of data they contain. -- a list of expressions delimited with commas. -- a record field name. -- a list of field names delimited with commas. -- name of file you wish to create or access. -- name of index file you wish to create or access. -- list of field(s) or portion(s) thereof used to create index files or sorted databases. -- the name of a memory variable. -- list of memory variables delimited with commas. -- a number which dBASE regards as a literal value. -- an whose content is defined as Numeric. -- command option specifies range of records dBASE must treat in executing command. has three possible values: ALL records in file; NEXT records in file; and RECORD . Default value varies from command to command. -- allows batch manipulation of files of same type and/or with matching characters in filename using operating system "wild cards," ? and *. Also allows batch manipulation of groups of with matching characters in name. -- the name of a database field or . *EXIT *? *?? > ? -- Evaluates and displays the value of an expression. In command files (and elsewhere) can be used without expression to space down a line at output. . ? 6/3 2 . ? 'CITY' CITY . ? CITY (field of file in use) Managua > ?? -- Same as ?, but displays result on same line as entry. *EXIT *@ > @ -- Displays user formatted data on screen or printer at spec- ified x,y coordinates (x=line,y=column). Syntax: @ [SAY [USING '']] [GET [PICTURE '']] Examples: @ 3,23 SAY AMOUNT * 1.06 USING '$$$,$$$.99' @ 14,23 SAY "ENTER PHONE" GET PHONE PICTURE '(###)###-####' @ LINE+2,45 SAY TOTAL USING '99999.99' *EXIT *ACCEPT > ACCEPT -- Prompts user to enter character string information into a designated memory variable. Syntax: ACCEPT [''] TO Example:. ACCEPT "What is your name?" to NAME What is your name?: [user's response stored to SIN] . ? NAME [user's response displayed] *EXIT *APPEND > APPEND FROM [FOR ] or APPEND FROM [SDF] [DELIMITED] [FOR ] -- appends data FROM a database or file in System Data Format file to the database in use. Records marked for deletion in FROM will not be appended. e.g., APPEND FROM MAILLIST FOR NAME='N' APPEND FROM TEST.TXT DELIMITED > APPEND BLANK -- appends a blank record to file in use. > APPEND -- allows user to add new records to database in use. (If index is also in use, the index file is automatically updated). *EXIT *BROWSE > BROWSE [FIELDS ] -- Brings up Full-screen viewing and editing of the database in use. *EXIT *CANCEL > CANCEL -- In a command file, stops command file execution and returns user to dBASE "." prompt. Command file fragment: ACCEPT "What should this humble machine do next?" to NEXT IF NEXT = 'Q' CANCEL ENDIF *EXIT *CHANGE > CHANGE -- Permits Non-Full-Screen editing of database in use by field. Hit ESCape key to terminate CHANGE mode. Syntax: CHANGE [] FIELD [FOR ] Example: CHANGE ALL FIELD ZIP FOR ZIP = '90045' RECORD: 00001 ZIP: 90045 CHANGE? (Enter the characters to be changed and hit return. Add new data at the TO prompt, or hit return to go to the next appro- priate record.) *EXIT *CLEAR > CLEAR -- closes all database in use, releases all memory vari- ables, and Selects Primary work area. > CLEAR GETS -- commands dBASE to forget all GET statements still active without erasing the screen. *EXIT *COPY > COPY -- Copies the database in use or only its structure TO another file. COPY will create the TO if it does not yet exist, but will destroy an already existing file of that name. Will not copy records marked for deletion. Command has three forms: COPY TO [] [FIELD ] [FOR ] COPY TO [SDF] [DELIMITED [WITH ]] [FOR ] COPY TO STRUCTURE [FIELD ] > COPY TO STRUCTURE EXTENDED -- special form of COPY creates database whose records represent the structure of file in use. *EXIT *COUNT > COUNT -- Counts the number of records in database in use which satisfy specified criteria. Default value is COUNT all records. Syntax: COUNT [scope] [FOR ] [TO ] Example: COUNT NEXT 25 FOR GRADE > 'B-' TO DEANLST *EXIT *CREATE > CREATE [] -- Creates a new database. User will be prompted for file structure. > CREATE FROM EXTENDED -- creates database whose structure is determined by the data contained in the records of . (Used with COPY STRUCTURE EXTENDED.) *EXIT *DELETE > DELETE FILE -- deletes specified file. > DELETE [] [FOR ] -- marks record(s) for deletion. Records marked for deletion (with *) will not be erased until the PACK command is given. Records may also be marked for deletion by record number. Examples: DELETE ALL FOR COMPANY = 'ZMB' DELETE RECORD 15 *EXIT *DISPLAY > DISPLAY FILES [ON ] [LIKE ] -- lists files on drive. For example, DISPLAY FILES ON B LIKE *.MEM. > DISPLAY [][][FOR][OFF] -- displays records of file in use. > DISPLAY STRUCTURE -- displays field names, types, lengths, and decimals (structure) of file in use. > DISPLAY MEMORY -- display names,types, and values of all cur- rently defined memory variables. > DISPLAY STATUS -- lists databases in use, system date, indexes in use, and current parameters SET. *EXIT *DO *ENDCASE *ENDDO *LOOP > DO -- opens and executes specified command file. > DO WHILE -- used in command files to open a structured loop. Commands in between are executed so long as the DO WHILE is found to be true. Syntax: DO WHILE Example: USE MAILLIST DO WHILE .NOT. EOF [LOOP] ? NAME ? PHONE ENDDO SKIP ENDDO > LOOP -- causes command file to jump processing back to the DO WHILE command. Example: USE MAILLIST DO WHILE .NOT. EOF IF ZIP = '90005' SKIP LOOP ENDIF ? NAME ? PHONE SKIP ENDDO *CASE > DO CASE -- used in command file to choose one and only one of several possible execution paths. OTHERWISE clause optional, and executes when no CASE is true. ENDCASE is needed to close command. Example: USE MAILLIST ACCEPT "WHICH MENU OPTION DO YOU PREFER?" to Choice DO CASE CASE Choice = '1' DO Clabels CASE Choice = '2' DO Cappend CASE Choice = '3' DO Cedit OTHERWISE Return ENDCASE *EXIT *EDIT > EDIT [] -- enables selective editing of database in use by record number. Requests record number if not supplied. When edit of particular record has been com- pleted, ctrl-W brings back EDIT's record number prompt (ENTER RECORD #:). To terminate EDIT mode, answer record number query with a return. *EXIT *EJECT > EJECT -- causes printer to do a form feed (page eject) if PRINT is SET ON or FORMAT is SET TO PRINT. When using @ SAY commands for direct page formatting, EJECT will zero out line and column counters. *EXIT *ERASE > ERASE -- clears the screen. In interactive mode, "." prompt will appear at top left corner of screen. *EXIT *FIND > FIND -- when using indexed files, positions to first record indexed by . *EXIT *GO *GOTO > GO or GOTO -- positions to a specific record or place in the database in use. Also positions to record number contained in memory variable. Syntax: GO or GOTO [RECORD ],,[TOP],[BOTTOM], or *EXIT *HELP dBASE II ON-LINE HELP FACILITY Below you will find a list of all dBASE commands. Each entry in this list corresponds to an entry in the HELP file proper. In the latter, you will find a brief synopsis of each command as well as a picture of that command's correct syntax. Please remember, however, that HELP file information is limited, and is only meant to cut down on the number of trips you will have to make to the dBASE II Manual. To access the entry for the dBASE command (or other Help File entry) you wish to review, simply respond to the dBASE "." prompt by entering HELP and a return (e.g. HELP CREATE ). dBASE will access the information you wish to see, and then return you to the "." prompt so you can go right back to work. In some cases the entry will take up more space than is provided by a single screen. (This is one of them.) To bring up the next screen of information, just hit any console character: this will tell dBASE to stop "WAITING." If you wish to exit the HELP file before viewing an entire entry, simply hit ESCape. >>>> Type 'HELP dBASE' for other <<<<<< >>>>> important information <<<<< > ? -- displays an expression, variable, or field. > ?? -- displays an expression list without a preceeding line feed. > @ -- displays user formatted data on screen or printer. > ACCEPT -- allows input of character strings into memory vari- ables. > APPEND -- append information from another dBASE II database or files in Delimited or System Data format. > BROWSE -- full screen window viewing and editing of database. > CANCEL -- cancels command file execution. > CHANGE -- Non-Full-Screen edit of fields of database. > CLEAR -- closes databases in use and releases current memory variables. > CONTINUE -- continue the searching action of a LOCATE command. > COPY -- creates a copy of an existing database. > COUNT -- counts the number of records in file which meet some criteria. > CREATE -- creates new database. > DELETE -- deletes a file or marks records for deletion. > DISPLAY -- display files, database records or structure, memory variables, or status. > DO -- executes command files or structured loops in same. > EDIT -- initiates edit of records in a database. > EJECT -- ejects a page on the printer. > ELSE -- alternate path of command execution within IF. > ENDCASE -- terminates a CASE command. > ENDDO -- terminates DO WHILE command. > ENDIF -- terminates an IF command. > ENDTEXT -- terminates a TEXT command. > ERASE -- clears the screen. > FIND -- positions to record corresponding to key in index file. > GO or GOTO -- positions to specific record or place in file. > HELP -- access help file overview or specific help file entry. > IF -- allows conditional execution of commands. > INDEX -- creates an index file. > INPUT -- allows input of expressions into memory variables. > INSERT -- insert new record in database. > JOIN -- joins output of two databases. > LIST -- lists files, database records or structure, memory variables, and status. > LOCATE -- find a record that fits a condition. > LOOP -- skips to beginning of DO WHILE command. > MODIFY -- create and/or edit command file or modify structure of existing database. > NOTE or * -- allows insertion of comments in command file. > PACK -- erases records marked for deletion. > QUIT -- exits dBASE and returns to operating system. > READ -- initiates full-screen editing of formatted screen by accepting input into variables accessed with @ GET. > RECALL -- erases mark for deletion. > REINDEX -- update existing index file. > RELEASE -- eliminates unwanted memory variables and releases memory space. > REMARK -- permits display of any characters. > RENAME -- rename a file. > REPLACE -- change information in record(s) or entire database field by field. > REPORT -- format and display a report of information. > RESET - reset operating system after placing new disk in drive. > RESTORE -- retrieves memory variables stored in MEM file. > RETURN -- ends a command file. > SAVE -- copies current memory variables to disk file. > SELECT -- switches between USE files in PRIMARY and SECONDARY areas. > SET -- sets dBASE control parameters. > SKIP -- position forwards or backwards in database. > SORT - write copy of database sorted on one of the data fields. > STORE -- creates memory variables. > SUM -- compute and display the sum of database field(s). > TEXT -- allows output of block of text from a command file. > TOTAL -- creates summary copy of database combining information from specified fields of records meeting some criteria. > UPDATE -- allows batch updates of a database. > USE -- specifies database to USE until next USE command is issued. > WAIT -- suspends command file processing until user input received. >>>>> Other key words <<<<< (e.g. type 'HELP RUNTIME' ) FULL SCREEN NEW ERRORS GLOSSARY FUNCTIONS INSTALL DBASE LIMITS RUNTIME *EXIT *IF *ELSE *ENDIF > IF -- in command file, IF structure permits conditional exe- cution of commands. ELSE clause is optional. Syntax: IF Example: IF STATE = 'CA' DO INSTATE (CMD file) [ELSE ELSE ] DO OUTSTATE (CMD file) ENDIF ENDIF *EXIT *INDEX > INDEX ON TO -- creates an index file for database in use based upon content of field(s) or portion(s) of field(s) specified by the or index . *EXIT *INPUT > INPUT [""] TO -- prompts user to enter numeric or logical information into the designated memory variable. Example: INPUT 'Prompt user for input' TO X Prompt user for input: 12 [user input, 12, stored to X] . ? X 12 *EXIT *INSERT > INSERT [[BEFORE] [BLANK]] -- inserts a record into the database in use immediately after or -- with BEFORE -- before the current record. Presents user with data entry format for use file unless BLANK record is requested. *EXIT *JOIN > JOIN -- creates a new database by combining the records of files in use in Primary and Secondary areas. Records are added where FOR evaluates as True. Command must be executed from primary area. Default value for FIELD is ALL. Syntax: JOIN TO FOR [FIELDS ] Example: . USE NAMES . SELECT SECONDARY . USE MAILLIST . SELECT PRIMARY . JOIN TO NAMEJ FOR LAST <> S.LAST *EXIT *LIST > LIST FILES [ON ] [LIKE ] -- lists all files on designated disk. Default to logged disk. Example: LIST FILES ON C LIKE *.FRM > LIST [][] [FOR ][OFF] -- displays records of file in use. Default value is ALL records. Example: LIST NEXT 25 NAME, PHONE FOR CONTRIB > 100 (i.e., NAME and PHONE of next 25 who contributed more than $100.) > LIST STRUCTURE -- displays structure of database in use. > LIST MEMORY -- lists names and values of all currently defined memory variables. > LIST STATUS -- lists databases open, indexes in use, system date, and current parameters SET. *EXIT *LOCATE *CONTINUE > LOCATE [] FOR -- finds first record of database for which FOR is True. Use CONTINUE to find next such record. (User may manipulate record before resuming search with CONTINUE.) . LOCATE ALL FOR ZIP >= '95000' .AND. ZIP < '96000' RECORD: 00123 . DISPLAY . CONTINUE RECORD: 00232 *EXIT *MODIFY > MODIFY STRUCTURE -- allows user to alter the structure of database in use. This command will destroy all data in the file in use. (To alter structure without loss of data, use COPY STRUCTURE, USE, and APPEND as illustrated below.) . USE NAMES . COPY STRUCTURE TO TEMP . USE TEMP . MODIFY STRUCTURE -- no data lost since file is empty . APPEND FROM NAMES -- brings data into modified database . DELETE FILE NAMES . USE -- close TEMP in order to: . RENAME TEMP TO NAMES > MODIFY COMMAND -- calls dBASE's text editor and brings up or creates designated file. Primarily used for creating and editing command (.PRG), text (.TXT), and format (.FMT) files, but may be employed as a simple full screen word processor. *EXIT *NOTE > NOTE or * -- permits the insertion of comments into a command file. Comments following NOTE or * will not be read when file is executed. *EXIT *PACK > PACK -- erases records marked for deletion in database in use. If index files are in use, they will be automatically updated. *EXIT *QUIT > QUIT [TO ] -- terminates dBASE and returns control to operating system. Optionally calls programs from system level. *EXIT *READ > READ -- initiates full-screen mode for entry or editing of variables. The Full-screen prompts and window are created by @ SAY commands with GET phrases. Command file fragment: STORE ' ' TO name STORE ' ' TO phone @ 4,4 SAY 'Name' GET name @ 6,4 SAY 'Phone' GET phone PICTURE '(###)###-####' READ *EXIT *RECALL > RECALL [] [FOR ] -- reinstates record(s) marked for deletion within use file. Default value is current record. *EXIT *REINDEX > REINDEX -- allows update of index files not automatically 'reindexed' after alteration of database file. Example: . USE MAILLIST INDEX INDEXA . APPEND [append operations performed] . SET INDEX TO INDEXB,INDEXC . REINDEX *EXIT *RELEASE > RELEASE -- erases unwanted memory variables and opens memory space for further use. ( uses ? to mask any single character, * to mask all remaining characters. Syntax: RELEASE [], or [ALL] RELEASE ALL LIKE RELEASE ALL EXCEPT Examples (where N, N1, N2, N10, V7 are variables in use): RELEASE ALL LIKE N? [N10 and V7 will remain] RELEASE ALL LIKE N?? [V7 will remain] RELEASE ALL EXCEPT ?1* [N1 and N10 will remain] *EXIT *REMARK > REMARK -- permits the display of any characters. In command file character entry is output. Example: . REMARK abracadabara!!! abracadabara!!! *EXIT *RENAME > RENAME TO -- renaming of file in DOS directory. Unless otherwise indicated, dBASE assumes that file type is DBF. Example: . RENAME REVIEW.FRM TO REVIEW2.FRM *EXIT *REPLACE > REPLACE -- allows user to replace contents of specified fields of database in use. If index file is keyed on field targeted for update, index in use will be automatically updated. Default is current record. Syntax: REPLACE [] WITH [, WITH ][FOR ] Example: . USE MXPROJ . REPLACE ALL COST WITH COST * 6.1 FOR ITEM = 'ELEC' *EXIT *REPORT > REPORT -- used for creating a Report Form File (FRM) for dis- playing specified information from a database in a user- defined format. Outputs results to screen or printed page. Syntax: REPORT [FORM
] [][TO PRINT] [FOR ] [PLAIN] *EXIT *RESET > RESET [] -- use this command after changing disks on any drive other than that containing dBASE. Command resets the DOS bit map, allowing uninterrupted operation of dBASE program. Close all files before issuing a RESET. *EXIT *RESTORE > RESTORE FROM [ADDITIVE] -- retrieves and activates the set of memory variables previously SAVEd to a memory file. ADDITIVE allows you to keep currently defined variables intact; otherwise they are lost. *EXIT *RETURN > RETURN -- may be used in a command file to return control to the command file which called it or to dBASE "." prompt if user called it. *EXIT *SAVE > SAVE TO [ALL LIKE ] or [ALL EXCEPT ] -- copies all memory variables currently in use, or only those specified by , to designated memory (MEM) file. uses ? to mask any single characters and * to mask all remaining characters. Examples (where N1, N2, N10, V1, V2, V10 are current variables): . SAVE TO NUMBER ALL LIKE N* [saves N1, N2, N10] . SAVE TO NUMBER ALL LIKE N? [saves N1, N2] . SAVE TO NUMBER ALL EXCEPT ?1* [saves N2, V2] *EXIT *SELECT *PRIMARY *SECONDARY > SELECT [PRIMARY / secondary] -- allows user to move between the two work areas dBASE provides, thus permitting user to work with two databases simultaneously and maintain record pointers in both. Primary area is active upon bringing up dBASE. *EXIT *SET > SET -- sets dBASE control parameters. Syntax: SET [ON or OFF] SET TO