The CHECKS program was written for my personal use and is placed in the public domain for anyone who wants to use it. (No business use please) Since it is a 'freeby', don't complain about the organization of the program, but if you should encounter any bugs, please notify me by letter and I will try to fix them. Several restrictions are inherent in the program and you must be able to live with them. If you can't, then don't bother with the program. RESTRICTION #1 The maximum value which the math package can handle without overflowing is $83886.07. Amounts which exceed this value will be displayed as the amount in excess of $83886.08. Overflow will occur if you have more than this amount of money in your account at any point in the year, or if the total value of the checks exceed this amount when listing out the checks. No error message is printed out if overflow should occur. If you exceed this amount, you can afford to buy something better anyway. RESTRICTION # 2 The program will only allow 255 different check names in any year's file. The checks program was translated from a program I had written for my 6500 system, and made extensive use of the indexed instruction. I had a lot of check data that I wanted to continue using with the Z80 system, so I merely re- coded the assembly language program and used the same organization of the data in the files. RESTRICTION # 3 The program requires the user to enter check names as three character mnemonics, although it keeps in the file the entire check name for later listing. For example, when I enter a check to Fidelity National Bank, I would use the mnemonic FNB for the check name. You quickly learn how to choose a good mnemonic for the check name, and can always get a listing of mnemonics which you have used previously in case you should forget one. If you feel that you can live with these restrictions, then give the program a try. The features and operating ease of this program will quickly make you ignore these limitations. A little more about the program before we get down to the nitty-gritty. Checks will run on either CP/M 1.4 or 2.2. The program keeps track of two data files with the name types .CHK and .NAM. The filename.CHK file has all the data for the actual checks. Each check entry is packed into eight bytes of code and the distribution copy allocates 8 kbytes of memory for the checks. This gives you the ability to handle 1024 checks in a given year. The .NAM file contains the name mnemonics and a list of the corresponding full check names. Full check names are limited to a 32 character string. The user may specify the disk on which the .CHK and .NAM files are located. If no name is given for the .NAM file, the program will assign the same filename for the .NAM file as was specified for the .CHK file. I use the filename 1981 for the check file for year 1981 which automatically assigns files 1981.CHK and 1981.NAM for use. Other people who have used this program find that they normally write checks to the same people year after year and do not overflow the 255 name restriction. For this reason, you can save a lot of typing by using the same name file year after year. To do this, one might type 1981 (space) NAMES which would assign files 1981.CHK and NAMES.NAM as the files to be used. Note that the user does not specify the filename extension because the program does it for you. If you should try it, the program will issue an error message. Because my wife and I both share the same checking account, but she has her own checks which might duplicate my check numbers, the program allows you to set a 'W' flag to keep to two entries separate. The program also has other flags which the user can set upon entry, and yes, as you might expect, you can get a listing of checks depending on the flag set. The flags which can be set on the distribution copy, and the meaning which I place on them are as follows: W Wife's checks R Returned check I Income tax deductible All three of the above flags may co-exist in the same check entry plus one of the following: C Car expenses D Doctor bills E Entertainment expenses F Food G Gasoline H Housing expenses M Medicine P Parts for computer S School expenses U Utility bills Five spare flags are also available, but have not been defined during the assembly. The method of setting or changing these flags will be discussed later. A check might have the flags IWRS set, which means an income tax deductible check, written by my wife which has returned from the bank for some school related expense. The program enables you to list all checks written to some mnemonic name, to list a monthly balance sheet, to compute the check balance, to compute the bank balance at the end of the month after returned checks are entered, to list outstanding checks, to list checks, deposits, and withdrawals from your account for any month, or for the year and to fix erroneous entries for a check, deposit, withdrawal, or change a mnemonic name or a full check name. Thats enough about what can be done, now lets get down how to do it. Let's assume it is the start of the year, and we are opening up a new years record for say 1981. A>CHECKS 1981 [NAMES] [optional entry] This will load CHECKS from the A drive and try to read a file for 1981 from the default drive. Naturally nothing will exist, and the program will tell you that it could not load the check file, and will go to the command mode. The program has assigned the names for the .NAM and .CHK files should data be entered and saved. All commands begin with a single alpha character and will immediately execute unless an argument is required. In this case, the program waits for the argument and the carriage return before execution. If you type a ? , the program will display all the command characters, their meaning, and print the number of names in the current name file. The first thing to enter is the balance in your account at the beginning of the year. Enter this value as a deposit by hitting the D key. The program will display the prompts for your entry and show you that this is deposit #1. Deposits and Withdrawals are automatically numbered with 255 deposits and withdrawals permitted in a years record. If you hit the space bar, the cursor is automatically tabbed to the next entry. The month is 1-12, the date 1-31, the amount assumed in dollars unless a decimal point is entered. Do not specify $ in the amount entry. Legal check , deposit , or withdrawal values are as follows: 10000 234.12 1 .23 123.1 is not legal For the mnemonic, you might consider STB When you hit the carriage return, the program analyzes the entry, and looks up STB in the name file to see if it exists. Since it does not, it will ask you if this is a new name. Type 'Y' to indicate that it is and fill in the full name STARTING BALANCE when it prompts you for the full name. When you now hit the carriage return, your first deposit will be entered, and the mnemonic STB and the full name STARTING BALANCE will be entered into the name file. Now hit B. The program computes the balance by adding all deposits from the beginning of the file and subtracting the value of all checks and withdrawals from the account. Yes you now have a balance of the value which you entered. Now hit V. This command is similar to the balance command except only returned checks are subtracted. The result is the bank balance which should agree with your bank statement after entering all returned checks at the end of the month. A check is returned by typing the command R and entering in the check number. Since no checks have been written, the bank thinks you have the same amount. Suppose your first check is for cash. Hit C to enter a check. The check prompt now appears. Check numbers 1-9999 are valid check numbers. Fill in the data with the mnemonic CAS. Use the full name CASH when it comes time to do this. Now try the B and V commands again. Yes, the new balance is the difference between the check and the starting balance but the V command still shows the starting balance. As far as the program is concerned, the check is still outstanding. You can verify this by typing the command O, which shows the check to still be outstanding. Type the command M and specify CAS when it asks for the check mnemonic. The M command lists all checks which Match the mnemonic name written during the year. Now try to return the check by typing the command R. When it asks for the check number, enter the one which you have entered. Now re-try the B, V, and O commands. The check is no longer outstanding and the bank balance and check book balance now agree. You can still find the check using the M command. When you are typing in any command and make a mistake, a control X will abort the command and return you to the command mode. You can use backspace (ctrl H) to correct mistakes on any entry. Since returning the check set the R flag, you can now find the check using the interrogate command I. If you specify the R flag, you can now see that a listing of all returned checks is possible. The I command will list all checks which have the specified flag set. (a handy way to find income tax deductible checks) Suppose I do, then you can use the W flag in the flag column when entering the check. Another way is to precede the check number with the letter W. Thus W123 is wife's check 123 while 123 is my check 123. You can print all your wife's checks by using the interrogate command (I) and telling the program to use the W flag. All other flags may only be specified in the flag column. So to flag all your utility bills for example set the U flag in the flag column when entering the check. Withdrawals are amounts automatically deducted from your checking account each month for say a car payment. Do not confuse withdrawals with the W flag which is the wife flag. To enter a withdrawal, hit the command W. Unlike a check entry, the withdrawal will automatically be deducted from the bank balance at the same time it is deducted from the check book balance. The A command begins auto-numbering of check entries and may be auto-numbered either with and without the wife flag. To auto-number wife's checks, type W(check number) when prompted. Do not put a space between the W and the check number. The control X command cancels the auto-number mode. The L command is used to list out checks, withdrawals, deposits, or the names which you have used. In the case of checks, withdrawals, or deposits, the program will ask which month to list. You can enter a month 1-12 for a specific month, or enter a 0 to list the entire year's activity. The T command lists a monthly balance sheet on the console. The month also is entered as 1-12 or a 0 for a yearly record The P command toggles the output to the printer for the next command. Thus command P followed by T will list the balance sheet on the printer. A command P followed by command M will list on the printer all checks to a specific mnemonic name. The print mode is toggled off at the completion of each command. The M command is one of the most valuable commands. In my case, all my electric power bills are to AEP for Appalachian Electric Power. Thus at the end of the year the command M with the mnemonic AEP will show the year's total for electric bills. In a similar fashion, C&P shows telephone bills, TEX my Texaco gasoline bills, etc. The I command with the G flag will print out all gasoline expenses to all companies during the year. More about the L command. The L command will also let you list the mnemonic names and the full names which you have used. This is handy in case you forget one. Type command L and specify N for names. When it asks for the mnemonic name, you can hit an immediate carriage return to show all the names in the file. If you should just type A followed by a carriage return, it will show all mnemonic names starting with the letter A. In a similar fashion typing CA will show all mnemonics starting with the two letters CA. It is pretty easy to at least remember the most logical first letter of the mnemonic which you might have used for the name. Now it is time to save the file away after an editing session. You can type Q to go to CP/M or S to save the current file but stay in the checking routine. The Q command will first ask you if you want to save the checks away before exiting. If you have made any changes, you had better do it or everything which you have added will be lost. The old file on the disk was copied into memory at the beginning of the editing session and is still there on the disk. If you type Y for yes, it will show you the names under which it will be saved. If you want to change the names type N after it asks you if the file names are OK?. You can use anything like the following B:1981 checks and names file on B drive B:1981 A:NAMES checks under name 1981 on B drive names under NAMES on the A drive One word of warning. Do not get the checks for one year mixed up with the name file for another year. The program has no way of telling that you have mixed things up and the names will be all mixed up on your check file. For this reason, use 1981.CHK and 1981.NAM so no possibility exists for this error. Nothing disastrous happens if you get them mixed up until you make a new entry in the file. Check names are numbered as they are entered and the check data file only has the number corresponding to the check name used. The S command saves the current check and name files on the disk and stays in the checking routine. This permits you to use the G command which gets a different years record for observation or modification. You can use the G command to look for various years activities without modifying any of the contents on the disk. To keep the bank people honest, at the end of the month when my checks return, I return all the checks enclosed with my statement and hit the V command. The balance shown should agree with the bank as long as no deposits have been made into the account which do not show in the bank statement. Naturally you will make some typing mistake sometime during the use of the program. The F command allows you to retrieve a check, deposit, or withdrawal from the records and fix it. When you enter the number of the item to be fixed, the display will show the entry as it has been typed. The entry may be fixed up as shown on the console display using the control H for backspace, the control A will add a space at the cursor, and the control D will delete the character at the cursor. A control B will set the cursor to the beginning of the entry being displayed for added convenience. You may hit the carriage return with the cursor at any position in the display and the entire contents of the display will be entered as shown. Using the prompts, you may change a name mnemonic, or the full name for typing error. Suppose you can't remember a mnemonic because you used a poor one the first time you entered it. By changing the mnemonic, all entries in the file will now show the new mnemonic. Yes, I can guarantee that sometime or other you will type the same check number in twice for two different entries. When you try to find the check to return it, only the first entry will be displayed and the second check with the duplicate entry can not be returned. And as Mr. Murphy would have it, the second entry had the wrong check number. The only way to fix this is to fix the number on the first check to some fake number which has not been used, then fix the wrong check and then re-fix the first check back to the correct number. Sorry, but that is the way it works. The only way to find this kind of error is to list the checks and hunt for that duplicate check number. Modifications: The size of the check and name files may be enlarged by changing the address at the equate NFILE. The check file starts loading at the address set by the equate at CFILE and memory space is available up to the address at NFILE. Names begin at NFILE and the rest of memory up to CCPBAS is available. Each name entry requires 5 bytes of code, three for the mnemonic and two bytes for a pointer to the full name. Since the maximum name entry is 32 bytes long, the longest name file possible is 9435 bytes. Be sure you update CCPBAS to point to the first location before the base of your CCP to insure you do not overwrite the CCP. CCPBAS has been arbitrarily defines as $8000 in the distribution copy. Five additional flags may be defined by replacing the % characters at the DEFB string at the label CAT: with the desired flag character. The flag characters N,W,I,R are reserved for use in the program and may not be doubly defined. Cursor control characters which may vary with different video displays are defined at the beginning of the source listing. The program may be warm started by jumping to 100H in case you should forget to save the data on the disk and returned to CP/M. You can do this by executing GO 100 if you are using CCPZ or by previously saving a zero length file using the CP/M save command with the name GO and typing GO when you are in CP/M. Checks is only a 9k program, and will run in systems with as little as 16k of memory. To be safe, you should re-assemble the program after redefining CCPBAS to insure the name file does not overflow the CCP, and redefine NFILE to 4500H to give a little more space for the name file. Yes, the program has its limitations but it works and it puts a lot of power at a few keystrokes once you learn how to use it. I am willing to listen to all suggestions how to improve it. Ralph Sherman 15 Hydaway drive Forest, Va. 24551 (804)-525-3167 .