IMD 1.15: 15/05/2007 14:03:57 fog hak 001   مممممممممم  مممممممممم  مممممممممم  -FOG/HAK001120 BAS 130 BAS21000 BAS 800 BAS AP BAS| AR BASk FS BASyمINSTALL BASABSTRACT043BINSEARCBASCATALOG 043 CURSOR BAS READCUSTBAS!READINV BAS"READVENDBAS#مWRITCUSTBAS$WRITEINVBAS%WRITEVNDBAS&A/R010 BAS]'()*+,DISK DOC-مممممممممممممممممممممممممممممممممممممممممممممممممممممممممممممممممممممممممممممممممممممممممممممممممم REM ********************************************************** REM * REM * BLOCK 120 FOR HOME FINANCE SYSTEM REM * REM * by SOFTWARE DESIGN ENGINEERING REM * REM * Copyright (C) 1979,1980 REM * REM * DATE LAST CHANGED: 11/15/80 REM * م REM ********************************************************** 120 REM ********************************************************** REM * READ TERMINAL DATA CHARACTERS REM ********************************************************** FILENAME$="TERMIN  AL":GOSUB 21000 rem *** the following modified for OSBORNE 1 *** rem IF X<>0 THEN GOTO 121 rem GOSUB 900 rem PRINT "Sorry you must run program 'INSTALL'. Please do so now" rem GOSUB 910: rem GOTO 26000 rem 121 OPEN DRIVE$+"TERMINAL.DATم" AS 1 rem READ #1;CLR$,HEIGHT,WIDE,FULL$,HALF$,REV$,DATE$ rem 122 CLOSE 1 clr$ = chr$(26) height = 24 wide = 52 full$ = chr$(27) + "(" half$ = chr$(27) + ")" rev$ = chr$(0) date$ = "09/30/81" rem **************** end of OSBORNE 1 modifi130 REM *********************************************************** REM * REM * BLOCK 130 FOR HOME FINANCE SYSTEM REM * REM * by SOFTWARE DESIGN ENGINEERING REM * REM * Copyright (C) 1979,1980 REM * REM * DATE LAST CHANGED: 11/15/80 REM *cations l$ = chr$(27) + "(" half$ = chr$(27) + ")" rev$ = chr$(0) date$ = "09/30/81" rem **************** end of OSBORNE 1 modifi REM *********************************************************** REM *********************************************************** REM * INITIAL DATE CHECK AND INPUT ROUTINE REM *********************************************************** PRINT CLمR$ IF FLAG.DATE=1 THEN GOTO 200 Y=5:X=20:GOSUB 800:GOSUB 900 W.DATE$=DATE$ PRINT"LAST DATE FILE WAS ACSSESED WAS ";:GOSUB 920:PRINT W.DATE$ Y=7:X=20:GOSUB 800:GOSUB 910 INPUT "ENTER TODAY'S DATE ?";LINE DATE$ IF DATE$="" THEN DATE$م=W.DATE$ FLAG.DATE=1 B 920:PRINT W.DATE$ Y=7:X=20:GOSUB 800:GOSUB 910 INPUT "ENTER TODAY'S DATE ?";LINE DATE$ IF DATE$="" THEN DATE$  مM ******************************************************** 21000 REM ******************************************************** REM * SEARCH FOR FILE (Filename) REM ******************************************************** X=SIZE(DRIVE$+FILENAME$+".DمAT") IF X<>0 THEN GOTO 21010 IF FLAGD=1 THEN GOTO 21010 GOSUB 22000 X= SIZE(DRIVE$+FILENAME$+".DAT") 21010 RETURN 22000 REM ******************************************************** REM * SWAP DRIVES IF DUAL DRIVE SYSTEM REM ****************م**************************************** IF DRIVE$="A:" THEN DRIVE$="B:":GOTO 22010 IF DRIVE$="B:" THEN DRIVE$="A:" 22010 RETURN 25500 REM ********************************************************* REM * SAVE CURRENT DATE REM *****************م**************************************** FILENAME$="TERMINAL":GOSUB 21000 OPEN "TERMINAL.DAT" AS 1 PRINT #1;CLR$,HEIGHT,WIDE,FULL$,HALF$,REV$,DATE$ CLOSE 1:FLAG.DATE=1:RETURN 26000 REM *********************************************************  REM ******************************************************** REM * REM * BLOCK 21000 FOR HOME FINANCE SYTEM REM * REM * by SOFTWARE DESIGN ENGINEERING REM * REM * Copyright (C) 1979,1980 REM * REM * DATE LAST CHANGED: 11/18/80 REM * REREM * RETURN TO CP/M REM ********************************************************* GOSUB 25500 FLAG.DATE=0 END DE,FULL$,HALF$,REV$,DATE$ CLOSE 1:FLAG.DATE=1:RETURN 26000 REM *********************************************************   م***************************************************** REM * REDUCE SCREEN TO HALF INTENSITY REM ********************************************************** IF HALF$="" THEN GOTO 905 IF FLAGP=1 THEN GOTO 905 PRINT HALF$; 905 RETURمN 910 REM ********************************************************** REM * RESTORE SCREEN TO NORMAL/FULL INTENSITY REM ********************************************************** IF FULL$="" THEN GOTO 915 IF FLAGP=1 THEN GOTO 915 PRINT800 REM ********************************************************* REM * REM * BLOCK 800 FOR HOME FINANCE SYSTEM REM * REM * by SOFTWARE DESIGN ENGINEERING REM * REM * Copyright (C) 1979,1980 REM * REM * DATE LAST CHANGED: 11/16/80 REM *  FULL$; 915 RETURN 920 REM ********************************************************** REM * REVERSE VIDEO REM ********************************************************** IF REV$="" THEN GOTO 925 IF FLAGP=1 THEN GOTO 925 PRINT REV$; REM ********************************************************** REM ********************************************************** REM * CURSOR POSITIONING ROUTINE REM ********************************************************** REM REM THE SYSTEM C 925 RETURN M ********************************************************** IF REV$="" THEN GOTO 925 IF FLAGP=1 THEN GOTO 925 PRINT REV$;OMES HERE WITH REM ADDRESS OF CURSOR AT REM X=COL, AND Y=ROLL IN DECIMAL ABS VALUES REM IF YOU NEED AN OFFSET SUPPLY IT IN DECIMAL, AND ADD IT TO X REM AND Y VALUES. REM X=X+32:Y=Y+32:PRINT CHR$(27);"=";CHR$(Y);CHR$(X); RETURN 900 REM *****م   COMMON FLAG.DATE,DATE$ REM ****************************************************** 100 REM * REM * ACCOUNTS PAYABLE PROGRAM REM * REM * by SOFTWARE DESIGN ENGINEERING REM * REM * Copyright (C) 1979,1980 REM * REM * DATE L## /.................../$$####.## $$####.## /......../" F2$="#### /.................../$$####.## ##### /........./" %INCLUDE 120 REM * READ TERMINAL DATA %INCLUDE 130 REM * ROUTINE TO INPUT DATE FOR FIRST TIME 200 REM ***************AST CHANGED: 11/17/80 REM * REM ***************************************************** REM ***************************************************** REM * ACCOUNTS PAYABLE SYSTEM REM ***************************************************** REM *************************************************** REM * PROGRAM START REM ***************************************************************** PRINT CLR$:FLAGP=0:Y=2:X=23:GOSUB 800:GOSUB 900 PRINT"ACCOUNTS PAYABLE SYSTEM" Y=4:X=28:GOSUB 800:GOSUB**************************************************** REM * PARAMETER BLOCK (READ INITIAL VALUES) REM ***************************************************** %CHAIN 10,9000,500,900 ESC$=CHR$(27) DRIVE$="A:" IF END # 1 THEN 150 OPEN "CURRENT.DAT 920:PRINT "DATE: ";DATE$ Y=6:X=30:GOSUB 800:GOSUB 900:PRINT "MAJOR MENU:" GOSUB 910:PRINT:LFT=INT(WIDE/2) PRINT "A = ENTER NEW ACCOUNT";TAB(LFT);"B = ENTER BILL" PRINT "C = LIST CURRENT ACCOUNTS";TAB(LFT);"D = PRINT BILLS DUE THIS";:\ PRINT" MON" RECL 72 AS 1 GOTO 175 150 CREATE "CURRENT.DAT" RECL 72 AS 1 PRINT # 1,1;2 CLOSE 1 CREATE "HISTORY.DAT" RECL 72 AS 1 PRINT # 1,1;2 175 CLOSE 1 REM Format strings HD$="ACN ACCOUNT TOTAL BALANCE DATE DUE" HC$="ACN TH" PRINT "E = EDIT AN ACCOUNT";TAB(LFT);"F = LIST SPECIFIC ACCOUNT" PRINT "G = PAY BILL";TAB(LFT);"H = LIST ACCOUNT HISTORY" PRINT "I = WRITE CHECK (NOT FOR BILL)";TAB(LFT);"J = SAVINGS WITHDRAWL" PRINT "K = LOAD ACCOUNTS RECIEVABLE";TAB(LFT);"L =  ACCOUNT TOTAL CHK NUM CHK DATE" F3$="ACCOUNT NUMBER ### IS /...................../" SP$="---- ---------------------- --------- --------- -----------" TR$="------------------------------------------------------------" F1$="##LOAD FINANCE SUMMARY" PRINT "M = RETURN TO CP/M" 205 REM COMMAND INPUT ROUTINE Y=HEIGHT-4:X=LFT:GOSUB 800 INPUT "COMMAND >>";OPTION$ OPTION=ASC(OPTION$)-64 IF OPTION LT 1 OR OPTION GT 13 THEN GOSUB 920:GOTO 205 GOSUB 910:ON OPTION GOSUB 2000  ,6000,3300,7000,8100, \ 3000,5000,4000,8000,2500,500,600,26000 CONSOLE PRINT GOTO 200 500 REM ************************************************ REM * LOAD ACCOUNTS RECIEVABLE REM ************************************************ GOSUB 25500TE RECORD PRINT #1,1;RECORD+1 CLOSE 1 PRINT USING "NEW BALANCE IS $$######.##";C.BALANCE-AMOUNT GOSUB 9400 RETURN 2990 GOSUB 920 PRINT "SORRY YOU HAVE OVERDRAWN YOUR ACCOUNT":GOSUB 910 IF C.BALANCE-AMOUNT <0 THEN 2992 PRINT"IF YOU TAKE THA CHAIN "AR" 600 REM ************************************************ REM * LOAD REPORT GENERATOR REM ************************************************ GOSUB 25500 CHAIN "FS" %INCLUDE 800 2500 REM ******************************************T MUCH OUT YOU WILL HAVE TO CLOSE IT":\ INPUT"DO YOU WISH TO DO THAT";A$ IF LEFT$(A$,1)="Y" THEN GOTO 2994 ELSE AMOUNT=0:TOTAL.DUE=0:GOTO 2994 2992 PRINT USING "CURRENT BALANCE $$######.##";C.BALANCE INPUT"DO WANT TO DO THIS";A$ IF LEFT$(A$,1)="Y"****** REM * SAVINGS ACCOUNT WITHDRAWL ROUTINE REM ************************************************ PRINT CLR$:Y=2:X=30:GOSUB 800:GOSUB 900 PRINT "SAVINGS WITHDRAWL":GOSUB 910:Y=10:X=1:GOSUB 800 INPUT"AMOUNT OF WITHDRAWL >>";AMOUNT FILENAME$="B THEN GOTO 2994 ELSE AMOUNT=0:TOTAL.DUE=0 2994 RETURN REM *************************** 3300 REM * LIST CURRENT ACCOUNTS * REM *************************** GOSUB 9000 3350 FILENAME$="CURRENT":GOSUB 21000 OPEN "CURRENT.DAT" RECL 72 AS 1 READ #ANK$ACC":GOSUB 21000 OPEN "BANK$ACC.DAT" RECL 50 AS 1 READ #1,3;C.BALANCE,LAST.DATE$ IF C.BALANCE-AMOUNT <5 THEN GOSUB 2990 PRINT #1,3;C.BALANCE-AMOUNT,DATE$ CLOSE 1 FILENAME$="HISTORY":GOSUB 21000 OPEN "HISTORY.DAT" RECL 72 AS 1 READ #1,1; 1,1;RECORDS PRINT CLR$:GOSUB 910 PRINT TAB(16);"C U R R E N T A C C O U N T S" GOSUB 920:PRINT TAB(19);"=============================== " GOSUB 910:PRINT GOSUB 9090 REM print heading TOTAL=0:G=1 FOR RECORD=2 TO RECORDS-1 GORECORD INPUT"WHAT IS MONEY FOR >>";ACCOUNT$ INPUT"DATE OF WITHDRAWL >>";LINE DUE.DATE$ IF LEN (DUE.DATE$)=0 THEN DUE.DATE$=DATE$:\ Y=12:X=23:GOSUB 800:GOSUB 920:PRINT DATE$:GOSUB 910 ACCOUNT=-2 BALANCE=0 TOTAL.DUE=AMOUNT GOSUB 13300 REM WRISUB 10000 REM read record TOTAL=TOTAL+BALANCE GOSUB 11500:G=G+1 REM print record IF G/2=INT(G/2)THEN GOSUB 900 ELSE GOSUB 910 NEXT RECORD:GOSUB 910 1800 GOSUB 9200 GOSUB 9005 CLOSE 1 GOSUB 9400 REM WAIT FOR RETURN RETURN REM *******  **************** 2000 REM * ENTER NEW ACCOUNT * REM *********************** FILENAME$="CURRENT":GOSUB 21000 OPEN "CURRENT.DAT" RECL 72 AS 1 READ # 1,1;RECORDS PRINT CLR$ REM clear screen PRINT TAB(13);"E N T E R N E W A C C O U N T S" Y=20:X=10:GOSUB 800 INPUT "ENTER NEW ACCOUNT NUMBER OR RETURN TO EXIT";LINE AN$ IF LEN(AN$) EQ 0 THEN RETURN LET ACCOUNT.NO EQ VAL(AN$) PRINT CLR$:GOTO 3500 REM ************************** 4000 REM * LIST ACCOUNT HISTORY * REM ************* GOSUB 920 PRINT TAB(9);"============================================= " GOSUB 910 PRINT USING "ACCOUNT NUMBER ## ASSIGNED";RECORDS-1 ACCOUNT=RECORDS-1 RECORD=RECORDS GOSUB 10500 REM get data from crt GOSUB 13300 REM write record P************* PRINT CLR$ REM clear screen PRINT TAB(11);"L I S T H I S T O R Y A C C O U N T S" GOSUB 920 PRINT TAB(7);"=================================================== " GOSUB 910:Y=20:X=30:GOSUB 800 INPUT "ACCOUNT NUMBER?";ACCOUNRINT # 1,1;RECORDS+1 CLOSE 1:Y=20:X=20:GOSUB 800 INPUT"IS THAT ALL ACCOUNTS YOU NEEDED TO ADD >>";RES$ IF LEFT$(RES$,1)="N" THEN 2000 RETURN REM *************************** 3000 REM * LIST SPECIFIC ACCOUNT * REM *************************** T.NO 4500 GOSUB 9000 FILENAME$="HISTORY":GOSUB 21000 OPEN "HISTORY.DAT" RECL 72 AS 1 READ # 1,1;RECORDS TOTAL=0 Y=4:X=1:GOSUB 800:PRINT HC$ PRINT SP$ FOR RECORD=2 TO RECORDS-1 GOSUB 10000 REM read record IF ACCOUNT EQ ACCOUNT.NO THEN \ PRINT CLR$ REM clear screen PRINT TAB(16);"S P E C I F I C A C C O U N T" GOSUB 920 PRINT TAB(12);"======================================== " GOSUB 910:Y=20:X=40:GOSUB 800 INPUT"ACCOUNT NUMBER?";ACCOUNT.NO 3500 GOSUB 9000 FILEN PRINT USING F2$;ACCOUNT,ACCOUNT$,TOTAL.DUE,BALANCE,DUE.DATE$ :\ TOTAL=TOTAL+TOTAL.DUE:FLAGR=1 NEXT RECORD REM continue GOSUB 910 IF FLAGR=0 THEN GOSUB 920:PRINT ACCOUNT.NO;" NO HISTORY AVAILABLE." GOSUB 910:FLAGR=0:GOSUB 9200 GOSUB 9005 CAME$="CURRENT":GOSUB 21000 OPEN "CURRENT.DAT" RECL 72 AS 1 RECORD=ACCOUNT.NO+1 IF RECORD GE RECORDS THEN 8900 GOSUB 10000 REM read record Y=4:X=1:GOSUB 800 PRINT HD$ REM print header PRINT SP$ PRINT GOSUB 11500 REM write record CLOSE 1:LOSE 1 INPUT "ENTER NEW ACCOUNT NUMBER OR RETURN TO EXIT";LINE AN$ IF LEN(AN$) EQ 0 THEN RETURN ACCOUNT.NO EQ VAL(AN$) PRINT CLR$:GOTO 4500 REM **************** 5000 REM * PAY A BILL * REM **************** PRINT CLR$ REM clear screen Y  =20:X=30:GOSUB 800 INPUT "ACCOUNT NUMBER?";ACCOUNT.NO FILENAME$="CURRENT":GOSUB 21000 OPEN "CURRENT.DAT" RECL 72 AS 1 RECORD=ACCOUNT.NO+1 IF RECORD GE RECORDS THEN 8900 GOSUB 10000 REM read record Y=3:X=20:GOSUB 800:GOSUB 920 PRINT USING F320:X=30:GOSUB 800 INPUT "ACCOUNT NUMBER?";ACCOUNT.NO FILENAME$="CURRENT":GOSUB 21000 OPEN "CURRENT.DAT" RECL 72 AS 1 RECORD=ACCOUNT.NO+1 IF RECORD GE RECORDS THEN 8900 GOSUB 10000 Y=3:X=20:GOSUB 800 PRINT USING F3$;ACCOUNT.NO,ACCOUNT$ INP$;ACCOUNT.NO,ACCOUNT$ GOSUB 910:PRINT USING "BALANCE DUE $$####.##";BALANCE INPUT "AMOUNT OF PAYMENT?";PAYMENT INPUT "PAYMENT BY CHECK?";RES$ IF LEFT$(RES$,1) EQ "N" THEN \ CHECK.NO=0 :\ INPUT "DATE OF PAYMENT?";LINE CHECK.DATE$ IF LEN(CHEUT "AMOUNT OF BILL?";TOTAL.DUE INPUT "DATE DUE?";LINE DUE.DATE$ IF LEN(DUE.DATE$)=0 THEN DUE.DATE$=DATE$ BALANCE=BALANCE+TOTAL.DUE PRINT USING "NEW BALANCE IS $$####.##";BALANCE PRINT TAB(4);"TODAY'S DATE: ";:GOSUB 920:PRINT DATE$ GOSUB 910:GOSCK.DATE$)=0 THEN CHECK.DATE$=DATE$ GOTO 5100 INPUT "CHECK NUMBER?";CHECK.NO INPUT "DATE OF CHECK?";LINE CHECK.DATE$ 5100 IF LEN(CHECK.DATE$) EQ 0 THEN CHECK.DATE$=DATE$ BALANCE=BALANCE-PAYMENT GOSUB 13300 REM write adjusted record CLOSE 1 FUB 13300 CLOSE 1 RETURN REM ************************** 7000 REM * BILLS DUE THIS MONTH * REM ************************** GOSUB 9000 FILENAME$="CURRENT":GOSUB 21000 OPEN "CURRENT.DAT" RECL 72 AS 1 READ # 1,1;RECORDS PRINT CLR$ REM cleaILENAME$="HISTORY":GOSUB 21000 OPEN "HISTORY.DAT" RECL 72 AS 1 READ # 1,1;RECORD TOTAL.DUE=PAYMENT BALANCE=CHECK.NO DUE.DATE$=CHECK.DATE$ GOSUB 13300 REM write history record RECORD=RECORD+1 PRINT # 1,1;RECORD CLOSE 1 Y=20:X=10:GOSUB 80r screen PRINT TAB(14);"C U R R E N T D U E B I L L S" GOSUB 920 PRINT TAB(10);"=========================================== " GOSUB 910:PRINT CHECK.DATE$=LEFT$(DATE$,3)+"##/"+RIGHT$(DATE$,2) TOTAL=0 GOSUB 9100:G=1 FOR RECORD=0 INPUT"IS THAT ALL THE BILLS YOU NEEDED TO PAY";RES$ IF LEFT$(RES$,1)="N" THEN PRINT CLR$:GOTO 5000 RETURN REM *************************** 6000 REM * ENTER BILL TO BE PAID * REM *************************** PRINT CLR$ REM clear screen Y=2 TO RECORDS-1 GOSUB 10000 IF MATCH(CHECK.DATE$,DUE.DATE$,1)GT 0 THEN GOSUB 11500:\ TOTAL=TOTAL+BALANCE:G=G+1 IF G/2=INT(G/2) THEN GOSUB 900 ELSE GOSUB 910 NEXT RECORD GOSUB 9200 GOSUB 9005 CLOSE 1 GOSUB 9400 REM wait for return RET  URN REM ************************************ 8000 REM * WRITE A CHECK FOR CASH OR MISC * REM ************************************ PRINT CLR$ REM clear screen INPUT "For Cash or Miscellaneous >>";ACCOUNT$ IF LEFT$(ACCOUNT$,1) EQ "C" THEN \ OSUB 800:GOSUB 900:PRINT "OPTIONS AVAILABLE ARE:" GOSUB 910:PRINT:PRINT PRINT TAB(20);"A = CURRENT ACCOUNT" PRINT TAB(20);"B = HISTORY ACCOUNT" PRINT TAB(20);"C = SAVINGS ACCOUNT" PRINT TAB(20);"D = EXIT TO MAIN MENU" PRINT:PRINT:PRINT 8110 IN ACCOUNT=0:ACCOUNT$="CASH" \ ELSE \ ACCOUNT=-1 IF ACCOUNT=-1 THEN \ INPUT "Check for what >>";ACCOUNT$ INPUT "AMOUNT OF CHECK?";TOTAL.DUE INPUT "CHECK NUMBER?";BALANCE INPUT "DATE WRITTEN?";LINE DUE.DATE$ IF DUE.DATE$ ="" THEN DUE.DATE$=DPUT "ENTER OPTION DESIRED";OPTION$ OPTION=ASC(OPTION$)-64 IF OPTION LT 1 OR OPTION GT 4 THEN 8110 ON OPTION GOTO 8190,8200,20999,8119 8119 RETURN 8190 PRINT CLR$ GOSUB 900:PRINT "CURRENT ACCOUNT":GOSUB 910 8195 Y=20:X=30:GOSUB 800 INPUT "ACATE$ FILENAME$="HISTORY":GOSUB 21000 OPEN "HISTORY.DAT" RECL 72 AS 1 READ # 1,1;RECORD GOSUB 13300 REM write record PRINT # 1,1;RECORD+1 CLOSE 1 OPEN "BANK$ACC.DAT" RECL 50 AS 2 READ #2,2;C.BALANCE,LAST.DATE$ CR.BALANCE=C.BALANCE-TOTAL.DUCOUNT NUMBER?";ACCOUNT.NO FILENAME$="CURRENT":GOSUB 21000 OPEN "CURRENT.DAT" RECL 72 AS 1 READ # 1;RECORDS RECORD=ACCOUNT.NO+1 IF RECORD <2 OR RECORD > RECORDS-1 THEN GOSUB 8900:GOTO 3350 GOSUB 10000 Y=3:X=1:GOSUB 800 GOSUB 9300 REM print fE IF CR.BALANCE>0 THEN GOTO 8090 PRINT:PRINT"YOUR CHECKING ACCOUNT IS OVERDRAWN BY ";ABS(CR.BALANCE) GOSUB 9400 8090 C.BALANCE=CR.BALANCE:LAST.DATE$=DUE.DATE$ PRINT #2,2;C.BALANCE,LAST.DATE$ CLOSE 2 RETURN REM **************************** ields heading Y=20:X=30:GOSUB 800:INPUT "THIS TO BE EDITED?";RES$ IF LEFT$(RES$,1) EQ "N" THEN CLOSE 1:GOTO 8195 GOTO 8300 8200 PRINT CLR$:PRINT "HISTORY ACCOUNT" 8210 Y=20:X=30:GOSUB 800 INPUT "ACCOUNT NUMBER?";ACCOUNT.NO FILENAME$="HISTORY" 8100 REM * EDIT AN ACCOUNT RECORD * REM **************************** PRINT CLR$ REM clear screen PRINT TAB(12);" E D I T A N A C C O U N T " GOSUB 920 PRINT TAB(12);"======================================= " Y=6:X=30:G:GOSUB 21000 OPEN "HISTORY.DAT" RECL 72 AS 1 READ # 1,1;RECORDS Y=3:X=1:GOSUB 800 FOR RECORD=2 TO RECORDS-1 READ # 1,RECORD;ACCOUNT IF ACCOUNT.NO EQ ACCOUNT THEN 8250 8225 NEXT RECORD GOTO 8900 8250 GOSUB 10000 Y=3:X=1:GOSUB 800:GOSUB   9300 REM fields heading Y=20:X=30:GOSUB 800 INPUT "THIS TO BE EDITED?";RES$ IF LEFT$(RES$,1) EQ "N" THEN 8225 8300 Y=20:X=30:GOSUB 800 INPUT "CHANGE WHAT FIELD?";FIELD PRINT TAB(20);"RETYPE FIELD";FIELD; IF FIELD EQ 2 THEN INPUT ACCOUNT$ IF ******************* PRINT PRINT TR$ RETURN REM ************************* 9300 REM * PRINT FIELDS HEADER * REM ************************* PRINT PRINT TAB(13);"FIELD #2";TAB(30);"FIELD #3 FIELD #4 FIELD #5" PRINT SP$ PRINT PRINT US FIELD EQ 3 THEN INPUT TOTAL.DUE IF FIELD EQ 4 THEN INPUT BALANCE IF FIELD EQ 5 THEN INPUT DUE.DATE$ GOSUB 9300 PRINT TAB(20); INPUT "CHANGE ANOTHER FIELD?";RES$ IF LEFT$(RES$,1) EQ "Y" THEN 8300 GOSUB 13300 CLOSE 1 GOTO 8100 8900 PRINING F1$;ACCOUNT,ACCOUNT$,TOTAL.DUE,BALANCE,DUE.DATE$ PRINT RETURN REM ************************* 9400 REM * WAIT FOR RETURN KEY * REM ************************* PRINT:PRINT TAB(20); INPUT "PRESS RETURN TO CONTINUE >>";LINE DUMMY$ PRINT RT PRINT:PRINT TAB(20); PRINT "ACCOUNT NOT FOUND" CLOSE 1 GOSUB 9400 REM wait fo return RETURN REM ********************** 9000 REM * PRINTER QUESTION * REM ********************** Y=HEIGHT-2:X=LFT:GOSUB 800 INPUT "OUTPUT TO PRINTER ?";ETURN REM *************************** 10000 REM * RECORD READ SUBROUTINE * REM *************************** READ # 1,RECORD;ACCOUNT,ACCOUNT$,TOTAL.DUE,BALANCE,DUE.DATE$ RETURN REM ************************************* 10500 REM * RECORD RERES$ IF LEFT$(RES$,1) EQ "Y" THEN LPRINTER WIDTH 72:FLAGP=1 ELSE FLAGP=0 PRINT RETURN 9005 REM ********************** REM * DATE AND TOTAL * REM ********************** PRINT TAB(29);:PRINT USING "$$######.##";TOTAL:PRINT PRINT TAB(4);"AD FROM CRT SUBROUTINE * REM ************************************* PRINT TAB(20); INPUT "ACCOUNT NAME?";ACCOUNT$ PRINT TAB(20); INPUT "TOTAL AMOUNT DUE?";TOTAL.DUE PRINT TAB(20); INPUT "DATE PAYMENT IS DUE?";LINE DUE.DATE$ IF LEN(DUE.DATE$TODAY'S DATE: ";:GOSUB 920:PRINT DATE$;:GOSUB 910 RETURN REM ****************** 9090 REM * PRINT HEADER * REM ****************** PRINT 9100 PRINT HD$ PRINT SP$ PRINT RETURN REM ******************* 9200 REM * PRINT TRAILER * REM)=0 THEN DUE.DATE$=DATE$ BALANCE=TOTAL.DUE RETURN REM ************************** 13300 REM * RECORD WRITE ROUTINE * REM ************************** PRINT # 1,RECORD;ACCOUNT,ACCOUNT$,TOTAL.DUE,BALANCE,DUE.DATE$ RETURN REM ***************  ********************* 11500 REM * RECORD WRITE TO CRT SUBROUTINE * REM ************************************ PRINT USING F1$;ACCOUNT,ACCOUNT$,TOTAL.DUE,BALANCE, \ DUE.DATE$ RETURN REM **************************************** 20999 REM * N/17/80 REM * REM ***************************************************** REM ***************************************************** REM * ACCOUNTS RECEIVABLE SYSTEM REM ***************************************************** REM ***************ON IMPLEMENTED FEATURES MESSAGE * REM **************************************** PRINT "THIS FEATURE NOT OPERATIONAL" GOSUB 9400 GOTO 8100 %INCLUDE 21000 ************************************** REM * PARAMETER BLOCK REM ***************************************************** %CHAIN 10,9000,500,900 REM ; SET UP VALUES FOR ALL FIX DATA, AND STARTING VALUES REM ; FOR ALL CHANGING DATA (EXCEPT THAT WHICH مIS AT VALUE 0 REM ; TO BEGIN WITH. YES = -1 : NO = 0: EXIT =1 ESC$=CHR$(27) DRIVE$="A:" F1$ = "/......../" F2$ = "######.##" F4$ = "/....../ /....../ $$######.## $$######.## $$######.##"+ \ " ##.#%" H4$ = " CODE DATE GROSSم PAY NET PAY TOTAL DED"+ \ " PERCENT" F5$ = " ! /...5....0....5....0/$$######.## /...5.../ " REM **************************************************************** REM * PAY STUB DATA DEFINE BLOCK * REM ************************ COMMON FLAG.DATE,DATE$ 100 REM ***************************************************** REM * REM * ACCOUNTS RECEIVABLE REM * REM * by SOFTWARE DESIGN ENGINEERING REM * REM * Copyright (C) 1979,1980 REM * REM * DATE LAST CHANGED 11**************************************** STRING.FIELDS=3 REM * Number of Fields with alpha characters NUMERIC.FIELDS=23 REM * '' '' '' '' numeric '' GROSS.PAY=8 NET.PAY=23 DIM R(NUMERIC.FIELDS),R$(STRING.FIELDS),T(NUMERIC.FIELDS)   DATA "WEEK CODE","CHECK DATE","PERIOD ENDING","WEEKLY PAY" DATA "LONG TERM DIS.","SPC ACC INS.","MGMT ASSOC.","BASE EARNINGS" DATA "SAVINGS PLN.","CREDIT UNION" DATA "GROSS EARNINGS","FED.TAXABLE EARNS.","FED.TAX" DATA "SOC.SEC.EARNS.","SOC.SEC.TAXT A SPECIFIC PAY CHECK";TAB(LFT); PRINT "D = DEPOSIT AN EXISTING PAY CHECK" PRINT "E = ENTER MISC DEPOSIT";TAB(LFT);"F = LIST ALL DEPOSITS" PRINT "G = PRINT ACCOUNT BALANCES";TAB(LFT);"H = EDIT A RECORD" PRINT "I = LOAD ACCOUNTS PAYABLE";TAB(LF" DATA "CITY TAX","STATE DED.","UNION DED.","H.I.PREMIUM" DATA "RET.EARNS.","RET.DED.","HEALTH PLAN DED.","KAISER INS." DATA "MAJOR MED.","MED.SURGICAL","NET PAY" IF END # 1 THEN 110 FILENAME$="PAY$STUB":GOSUB 21000 OPEN "PAY$STUB.DAT" RECL 50 T);\ "J = LOAD FINANCE SUMMARY" PRINT "K = EXIT TO OPERATING SYSTEM" 250 REM GET COMMAND AND VALIDATE IT Y=20:X=LFT:GOSUB 800 INPUT "COMMAND >>";OPTION$ OPTION =ASC(OPTION$)-64 IF OPTION < 1 OR OPTION > 11 OR LEN(OPTION$)=0 THEN\ GOSUB AS 1 GOTO 115 110 CREATE "PAY$STUB.DAT" RECL 50 AS 1 PRINT # 1,1;2 CLOSE 1 CREATE "BANK$ACC.DAT" RECL 50 AS 1 PRINT # 1,1;4 PRINT # 1,2;0," " PRINT # 1,3;0," " 115 CLOSE 1 %INCLUDE 120 REM * READ IN TERMINAL DATA %INCLUDE 130 REM920:GOTO 250 GOSUB 910 ON OPTION GOSUB 1000,2000,3000,4000,5000,6000,7000,8000,500,600,26000 CONSOLE:PRINT:GOTO 200 500 REM ************************************************************** REM * LOAD AND EXECUTE ACCOUNTS PAYABLE REM ************ * READ DATE ROUTINE REM ********************************************************* REM * PROGRAM START REM ********************************************************* 200 PRINT CLR$:FLAGP=0:Y=2:X=23:GOSUB 800:GOSUB 900 PRINT "ACCOUNTS RECEIVABL************************************************** GOSUB 25500 CHAIN DRIVE$+"AP" 600 REM ************************************************************** REM * LOAD AND EXECUTE REPORT GENERATOR REM *************************************************E SYSTEM" Y=4:X=28:GOSUB 800 GOSUB 920:PRINT "DATE: ";DATE$:GOSUB 910 Y=6:X=30:GOSUB 800 GOSUB 900:PRINT "MAJOR MENU:" PRINT:GOSUB 910:LFT=INT(WIDE/2) PRINT "A = ENTER NEW PAY CHECK";TAB(LFT); PRINT "B = LIST PAY CHECKS" PRINT "C = PRIN************* GOSUB 25500 CHAIN DRIVE$+"FS" %INCLUDE 800 1000 REM ************************************************************** REM * ENTER NEW PAY CHECK REM ************************************************************** PRINT CLR$:PRINT "  DO YOU WISH TO INPUT NEW PAY CHECK >>"; GOSUB 9100 IF ANS = EXIT OR ANS = NO THEN 1099 PRINT GOSUB 10500 FILENAME$="PAY$STUB":GOSUB 21000 OPEN "PAY$STUB.DAT" RECL 250 AS 1 READ # 1,1;RECORD GOSUB 11000 PRINT # 1,1;RECORD+1 CLOSE 1 PR*************************************** REM * LIST PAY CHECKS REM ********************************************************* PRINT CLR$:Y=2:X=10:GOSUB 800 PRINT "ANY SPECIFIC MONTH/YEAR"; GOSUB 9100 IF ANS = EXIT THEN 2099 IF ANS = YES THEN \ INT "DEPOSIT CHECK NOW"; GOSUB 9100 IF ANS = NO THEN GOTO 1099 GOSUB 1500:GOSUB 20000 1099 RETURN 1500 S.AMOUNT = 0 C.AMOUNT = R(NET.PAY) PRINT "FULL AMOUNT DEPOSITED"; GOSUB 9100 IF ANS = YES THEN 1600 INPUT "WHAT AMOUNT TO CHECKING AC INPUT "WHAT MONTH/YEAR?";MON$ :\ YR$ = RIGHT$(MON$,2):MON$ = LEFT$(MON$,2)\ ELSE MON$ = "" GOSUB 9000 FILENAME$="PAY$STUB":GOSUB 21000 OPEN "PAY$STUB.DAT" RECL 250 AS 1 READ # 1,1;RECORDS Y=4:X=1:GOSUB 800 GOSUB 920:PRINT H4$:GOSUB 910COUNT?";C.AMOUNT INPUT "WHAT AMOUNT TO SAVINGS ACCOUNT?";S.AMOUNT 1600 INPUT "WHAT DATE CHECK DEPOSITED?";LINE DATE.DEP$ IF LEN(DATE.DEP$) = 0 THEN DATE.DEP$ = DATE$ IF S.AMOUNT+C.AMOUNT = 0 THEN 1900 FILENAME$="BANK$ACC":GOSUB 21000 OPEN "BANK$ PRINT :X=1 FOR RECORD = 2 TO RECORDS - 1 GOSUB 10000 IF (LEFT$(R$(2),2) = MON$ AND RIGHT$(R$(2),2) = YR$) \ OR LEN(MON$) = 0 THEN \ DED = R(GROSS.PAY)-R(NET.PAY):DEDP = 100 * (DED/R(GROSS.PAY)) : \ PRINT USING F4$;R$(1),R$(2),R(GROSS.PAY),ACC.DAT" RECL 50 AS 1 READ # 1,1;RECORD IF C.AMOUNT = 0 THEN 1700 ACC$ = "C" ACCOUNT$ = "PAY STUB "+R$(1) AMOUNT = C.AMOUNT GOSUB 11100 READ # 1,2;BALANCE,LAST.DATE$ PRINT #1,2;BALANCE+AMOUNT,DATE$ RECORD = RECORD+1 PRINT # 1,1;RECORD R(NET.PAY),DED,DEDP X=X+1 IF X/2=INT(X/2) THEN GOSUB 900 ELSE GOSUB 910 NEXT RECORD CLOSE 1:GOSUB 910 2099 GOSUB 20000:RETURN 3000 REM ********************************************************** REM * LIST SPECIFIC PAY CHECK REM ************1700 IF S.AMOUNT = 0 THEN 1800 ACC$ = "S" ACCOUNT$ = "PAY STUB "+R$(1) AMOUNT = S.AMOUNT GOSUB 11100 READ # 1,3;BALANCE,LAST.DATE$ PRINT # 1,3;BALANCE+AMOUNT,DATE$ PRINT # 1,1;RECORD+1 1800 CLOSE 1 1900 RETURN 2000 REM **************************************************************** PRINT CLR$:Y=20:X=LFT:GOSUB 800 INPUT "PAY STUB CODE?";CODE$ IF CODE$ = "EXIT" THEN 3099 GOSUB 9000 GOSUB 3500 IF FAIL = YES THEN 3099 GOSUB 10000 GOSUB 11500 CLOSE 1 3099 GOSUB 20000:RETURN   3500 Y=2:X=1:GOSUB 800 FILENAME$="PAY$STUB":GOSUB 21000 OPEN "PAY$STUB.DAT" RECL 250 AS 1 READ # 1,1;RECORDS FOR RECORD = 2 TO RECORDS - 1 READ # 1,RECORD;R$(1) IF CODE$ = R$(1) THEN FAIL = NO : \ GOTO 3599 NEXT RECORD GOSUB 900 PRINT LEFT$(RES$,1) FILENAME$="BANK$ACC":GOSUB 21000 OPEN "BANK$ACC.DAT" RECL 50 AS 1 READ # 1,RECORD;BALANCE,LAST.DATE$ PRINT #1,RECORD;BALANCE+AMOUNT,DATE$ READ # 1,1;RECORDS RECORD = RECORDS GOSUB 11100 PRINT # 1,1;RECORDS+1 CLOSE 1 5099 G "NO SUCH PAY STUB":GOSUB 910 FAIL = YES CLOSE 1 3599 RETURN 4000 REM ************************************************************ REM * DEPOSIT A PAY CHECK REM ************************************************************ PRINT CLR$:INPUT "STOSUB 20000:RETURN 6000 REM ********************************************************* REM * LIST DEPOSITS BY ACCOUNT, OR ALL REM ********************************************************* TOTAL = 0:PRINT CLR$ PRINT "Any Specific Account >>"; GOSUB CODE?";CODE$ IF CODE$ = "EXIT" THEN 4099 GOSUB 3500 IF FAIL = YES THEN 4099 GOSUB 10000 CLOSE 1 GOSUB 900 PRINT USING "Pay Check value $$#####.##";R(NET.PAY) GOSUB 910 GOSUB 1500 4099 GOSUB 20000:RETURN 5000 REM *******************UB 9100 IF ANS = EXIT THEN 6099 IF ANS = YES THEN \ INPUT "Checking or Savings >>";ACC1$ \ ELSE \ ACC1$ = "" GOSUB 9000:PRINT CLR$ filename$="BANK$ACC":GOSUB 21000 OPEN "BANK$ACC.DAT" RECL 50 AS 1 READ # 1,1;RECORDS Y=3:X=1:GOSUB 800 ***************************************** REM * ENTER MISC. DEPOSIT REM ************************************************************ RECORD = 0:PRINT CLR$ INPUT "Checking or Savings Account >>";RES$ IF RES$ = "EXIT" THEN 5099 IF LEFT$(RES$,1) = GOSUB 920:PRINT "ACN ACCOUNT AMOUNT DATE DEP" GOSUB 910:PRINT "--- ---------------------- ---------- ----------" PRINT :G=1:GOSUB 910 FOR RECORD = 4 TO RECORDS - 1 GOSUB 10100 IF LEN(ACC1$) = 0 OR LEFT$(ACC1$,1) = ACC$ THE "C" THEN RECORD = 2 IF LEFT$(RES$,1) = "S" THEN RECORD = 3 IF RECORD = 0 THEN 5000 INPUT "AMOUNT OF DEPOSIT?";AMOUNT INPUT "MONEY FORM WHOM?";ACCOUNT$ INPUT "DATE DEPOSITED?";LINE DATE.DEP$ IF LEN(DATE.DEP$) = 0 THEN DATE.DEP$ = DATE$ ACC$ =N \ PRINT USING F5$;ACC$,ACCOUNT$,AMOUNT,DATE.DEP$: \ TOTAL = TOTAL+AMOUNT:G=G+1 IF ANS=-1 THEN GOTO 6050 IF G/2=INT(G/2) THEN GOSUB 900 ELSE GOSUB 910 6050 NEXT RECORD PRINT IF ANS=0 THEN GOSUB 910 GOSUB 920:PRINT "---------------------  --------";\ "---------------------" GOSUB 910:PRINT TAB(26);:PRINT USING "$$######.##";TOTAL PRINT CLOSE 1 6099 GOSUB 20000:RETURN 7000 REM *********************************************************** REM * PRINT ACCOUNT BALANCES REM ******T GOSUB 3500 IF FAIL = YES THEN 8099 GOSUB 10000 GOSUB 11500 PRINT INPUT "CHANGE WHAT FIELD?";FIELD IF FIELD < STRING.FIELDS+1 THEN \ PRINT "NEW FIELD";FIELD; : \ INPUT R$(FIELD) \ ELSE PRINT "NEW FIELD";FIELD; : \ INPUT R(FIELD***************************************************** PRINT CLR$:GOSUB 9000 IF ANS = EXIT THEN 7099 FILENAME$="BANK$ACC":GOSUB 21000 OPEN "BANK$ACC.DAT" RECL 50 AS 1 READ # 1,2;BALANCE,LAST.DATE$ Y=3:X=1:GOSUB 800:GOSUB 900 PRINT "AS OF ";:GO - STRING.FIELDS) GOSUB 11000 CLOSE 1 8099 GOSUB 20000:RETURN 8500 INPUT "Amount,Date of Deposit >>";AMOUNT1,DATE.DEP1$ FILENAME$="BANK$ACC":GOSUB 21000 OPEN "BANK$ACC.DAT" RECL 50 AS 1 READ # 1,1;RECORDS FOR RECORD = 4 TO RECORDS - 1 GOSUB 920:PRINT DATE$:GOSUB 910 PRINT USING "CHECKING ACCOUNT BALANCE $$######.##";BALANCE PRINT "DATE OF LAST TRANSACTION ";:GOSUB 920:PRINT LAST.DATE$ GOSUB 910:PRINT READ # 1,3;BALANCE,LAST.DATE$ PRINT USING "SAVINGS ACCOUNT BALANCE $$######.##SUB 10100 IF AMOUNT = AMOUNT1 AND \ DATE.DEP$ = DATE.DEP1$ THEN 8600 8550 NEXT RECORD GOSUB 900 PRINT "deposit RECORD not found" CLOSE 1:GOSUB 910 GOTO 8099 8600 PRINT GOSUB 900 PRINT USING F5$;ACC$,ACCOUNT$,AMOUNT,DATE.DEP$ PRINT :G";BALANCE PRINT "DATE OF LAST TRANSACTION ";:GOSUB 920:PRINT LAST.DATE$ CLOSE 1:GOSUB 910 7099 GOSUB 20000:RETURN 8000 REM *********************************************************** REM * EDIT A RECORD REM *************************************OSUB 910 PRINT "THIS RECORD TO BE EDITED"; GOSUB 9100 IF ANS = NO THEN 8550 INPUT "CHANGE WHAT FIELD?";FIELD PRINT "NEW FIELD";FIELD; IF FIELD = 1 THEN INPUT ACC$ IF FIELD = 2 THEN INPUT ACCOUNT$ IF FIELD = 3 THEN INPUT AMOUNT IF FIELD = ********************** PRINT CLR$:INPUT "Edit Pay Stub or Deposit Record >>";RES$ IF RES$ = "EXIT" THEN 8099 IF LEFT$(RES$,1) <> "P" AND LEFT$(RES$,1) <> "D" THEN \ GOTO 8000 IF LEFT$(RES$,1) = "D" THEN 8500 INPUT "PAY STUB CODE?";CODE$ PRIN4 THEN INPUT DATE.DEP$ GOSUB 11100 CLOSE 1 GOTO 8099 8999 STOP 9000 REM GET ANSWER TO PRINTER QUESTION Y=HEIGHT-2:X=LFT:GOSUB 800 PRINT "PRINT ON PRINTER"; GOSUB 9100 IF ANS = YES THEN FLAGP=1:LPRINTER WIDTH 72 ELSE FLAGP=0 PRINT RET  URN 9100 REM GET ANSWER TO (YES) OR (NO) QUESTION INPUT RES$ RES$=UCASE$(RES$) ANS = 2 IF LEFT$(RES$,1) = "Y" THEN ANS = YES IF LEFT$(RES$,1) = "N" THEN ANS = NO IF RES$ = "EXIT" THEN ANS = EXIT IF ANS <> 2 THEN RETURN PRINT "PLEASE ANSW C.R.T. IN DESCRIBED FORMAT GOSUB 900:RESTORE:Y=1 FOR I=1 TO 3:READ H$:GOSUB 900 IF I=2 THEN GOSUB 910 PRINT "FEILD #";I;:\ PRINT " ";H$+" ";:PRINT R$(I):NEXT FOR I=1 TO 23:READ H$:GOSUB 910 IF I/2=INT(I/2) THEN GOSUB 900 IF I>HEIGHT-1ER YES OR NO"; GOTO 9100 10000 REM READ DATA RECORD READ # 1,RECORD; \ R$(1),R$(2),R$(3),R(1),R(2),R(3),R(4),R(5),R(6),R(7),R(8), \ R(9),R(10),R(11),R(12),R(13),R(14),R(15),R(16),R(17),R(18), \ R(19),R(20),R(21),R(22),R(23) RETURN 10100 R2 THEN Y=Y+1:X=40:GOSUB 800 PRINT "FEILD #";I+3;:\ PRINT " ";H$+" ";:PRINT R(I):NEXT GOSUB 910:RETURN 20000 REM RETURN ROUTINE Y=HEIGHT-4:X=LFT:GOSUB 800:GOSUB 900 INPUT"HIT RETURN TO CONTINUE";LINE DUMMY$ GOSUB 910:RETURN %INCLUDE 210EM READ ACCOUNT DATA READ # 1,RECORD;ACC$,ACCOUNT$,AMOUNT,DATE.DEP$ RETURN 10500 REM PRINT RECORD HEADERS TO C.R.T. RESTORE PRINT FOR INDEXA = 1 TO STRING.FIELDS READ H$ GOSUB 900:PRINT H$;:GOSUB 910 INPUT R$(INDEXA) NEXT INDEXA FO00 RN ROUTINE Y=HEIGHT-4:X=LFT:GOSUB 800:GOSUB 900 INPUT"HIT RETURN TO CONTINUE";LINE DUMMY$ GOSUB 910:RETURN %INCLUDE 210R INDEXA = STRING.FIELDS+1 TO NUMERIC.FIELDS+STRING.FIELDS READ H$ GOSUB 900:PRINT H$;:GOSUB 910 INPUT R(INDEXA - STRING.FIELDS) NEXT INDEXA PRINT RETURN 11000 REM PRINT DATA RECORD PRINT # 1,RECORD; \ R$(1),R$(2),R$(3),R(1),R(2),R(3),Rم(4),R(5),R(6),R(7),R(8), \ R(9),R(10),R(11),R(12),R(13),R(14),R(15),R(16),R(17),R(18), \ R(19),R(20),R(21),R(22),R(23) RETURN 11100 REM PRINT ACCOUNT DATA PRINT # 1,RECORD;ACC$,ACCOUNT$,AMOUNT,DATE.DEP$ RETURN 11500 REM PRINT INFORMATION ONم   COMMON FLAG.DATE,DATE$ REM ************************************************************ REM * REM * FINANCE SUMMARY SYSTEM REM * REM * by SOFTWARE DESIGN ENGINEERING REM * REM * Copyright (C) 1979,1980 REM * REM * DATE LAST CHANGED: 11/17/80","FED.TAXABLE EARNS.","FED. TAX" DATA "SOC.SEC.EARNS.","SOC.SEC.TAX" DATA "CITY TAX","STATE DED.","UNION DED.","H.I.PREMIUM" DATA "RET.EARNS.","RET.DED.","HEALTH PLAN DED.","KAISER INS." DATA "MAJOR MED.","MED. SURGICAL","NET PAY" REM CREATE A  REM * REM ************************************************************ REM ************************************************************ REM * PARAMETER BLOCK REM ************************************************************ REM REM IDENTIFY DASCRATCH-PAD ARRAY DIM ARRAY(12) REM INITIALIZE NUMERIC CONSTANTS YES=-1:NO=0:EXIT=1 FIX=1 REM INITIALIZE STRING CONSTANTS FOR INDEX=1 TO 79 AST$=AST$+"*" NEXT INDEX MON$=" JANFEBMARAPRMAYJUNJULAUGSEPOCTNOVDEC" F1$="### /............TA FIELDS ON PAY STUB REM STRING FIELDS ONE AND TWO MUST CONTAIN THE PAY STUB CODE REM AND DATE RESPECTIVELY ! 101 STRING.FIELDS=3 REM # OF STRING DATA FIELDS NUMERIC.FIELDS=23 REM NUMBER OF NUMERIC DATA FIELDS GROSS.PAY=8 REM NUMERIC FIELD CONT......./ $$####.## #####"+\ " /......../" F2$="ACCOUNT ### - /...................../ $$####.## ##.##%" F3$="/................./ $$######.##" F3A$="/................./ ###" F4$=" /.............../ $$#####.## ##.##%" REM AING GROSS PAY NET.PAY=23 REM NUMERIC FIELD CONTAING NET PAY ESC$=CHR$(27) DIM R(NUMERIC.FIELDS),R$(STRING.FIELDS),T(NUMERIC.FIELDS) %CHAIN 10,9000,500,900 REM ************************************************************ REM * FIELD HEADINGS SET DRIVE TO DRIVE A: AT START DRIVE$="A:" %INCLUDE 120 REM * Read Terminal Data %INCLUDE 130 REM * Read Date Routine REM ************************************************************* REM * START OF PROGRAM REM ******************************REM ************************************************************ DATA "STUB CODE","CHECK DATE","PERIOD ENDING","BI-WEEKLY" DATA "P.I.ABS.DED.","OTHER ABS.DED.","BASE EARNINGS" DATA "P.I. ABS.DAYS","P.I.ABS. PAY","PERS. LEAVE" DATA "GROSS EARNINGS******************************* 200 PRINT CLR$:FLAGP=0 Y=2:X=23:GOSUB 800:GOSUB 900:PRINT"FINANCE SUMMARY REPORT" Y=4:X=28:GOSUB 800:GOSUB 920:PRINT"DATE: ";DATE$ Y=6:X=30:GOSUB 800:GOSUB 900:PRINT"MAJOR MENU:":PRINT:GOSUB 910 PRINT:LFT=INT(WIDE  /2) PRINT"A=SPENDING BREAKDOWNS";TAB(LFT);"B=BREAKDOWN OF INCOME" PRINT"C=SPENDING GRAPH";TAB(LFT);"D=PAY STUB TOTALS" PRINT"E=LOAD ACCOUNTS PAYABLE";TAB(LFT);"F=LOAD ACCOUNTS RECIEVABLE" PRINT"G=RETURN TO OPERATING SYSTEM" 250 Y=HEIGHT-4:X=LFT:GOS*****************" GOSUB 910:PRINT:PRINT:Y=20:X=20:GOSUB 800 INPUT"LONG OR SHORT FORM >>";RES$ IF RES$="EXIT" THEN 1199 FORM=0 IF LEFT$(RES$,1)="L" THEN FORM=1 IF LEFT$(RES$,1)="S" THEN FORM=2 IF FORM=0 THEN 1000 GOSUB 9000 IF FORM=1 THENUB 800:\ INPUT"COMMAND >>";OPTION$ IF LEN(OPTION$)=0 THEN GOSUB 920:GOTO 250 OPTION=ASC(OPTION$)-64 IF OPTION<1 OR OPTION> 7 THEN GOSUB 920:GOTO 120 GOSUB 910:ON OPTION GOSUB 1000,2000,3000,4000,500,600,5000 CONSOLE PRINT:GOSUB 20000:GOTO 20 STRING$="LONG" ELSE STRING$="SHORT" Y=5:X=20:GOSUB 800:GOSUB 920 PRINT USING "& FORM SPENDING BREAKDOWN FOR &";STRING$,DATE$ GOSUB 910:PRINT FILENAME$="CURRENT":GOSUB 21000 OPEN "CURRENT.DAT" RECL 72 AS 1 FILENAME$="HISTORY":GOSUB 21000 OPEN0 500 REM ****************************************************** REM * LOAD ACCOUNTS PAYABLE REM ****************************************************** GOSUB 25500 CHAIN "AP" 600 REM ***************************************************** REM "HISTORY.DAT" RECL 72 AS 2 READ #1,1;ACCOUNTS READ #2,1;RECORDS TOTAL=0 IF FORM =1 THEN 1100 FILE.NO=1 FOR RECORD=2 TO ACCOUNTS-1 GOSUB 10000 TOTAL=TOTAL+BALANCE NEXT RECORD FILE.NO=2 FOR RECORD=2 TO RECORDS-1 GOSUB 10000 TO * LOAD ACCOUNTS RECIEVABLE REM ***************************************************** GOSUB 25500 CHAIN "AR" %INCLUDE 800 1000 REM ********************************************************* REM * SPENDING BREAKDOWNS REM *************TAL=TOTAL+TOTAL.DUE NEXT RECORD 1100 FOR SEARCH.ACC=-2 TO ACCOUNTS-2 FILE.NO=1 IF FORM=1 THEN GOSUB 9100 IF SEARCH.ACC > 0 THEN \ RECORD=SEARCH.ACC+1:\ GOSUB 10000:\ ACC.TOTAL=BALANCE:\ ACC.NAME$=ACCOUNT$ \ ELSE \ ACC.TOT******************************************** PRINT CLR$:GOSUB 900:\ PRINT TAB (10);"*********************************************" PRINT TAB ( 10 ) ;"* SPENDING BREAKDOWNS *" PRINT TAB ( 10 ) ;"****************************AL=0:\ ON SEARCH.ACC+3 GOSUB 1920,1910,1900 IF SEARCH.ACC > 0 AND FORM=1 AND BALANCE<>0 THEN \ DUE.DATE$="CURRENT":\ TOTAL.DUE=BALANCE:\ BALANCE=0:\ GOSUB 11500 FILE.NO=2 FOR RECORD=2 TO RECORDS-1 GOSUB 10000 IF ACCOUNT  =SEARCH.ACC THEN \ ACC.TOTAL=ACC.TOTAL+TOTAL.DUE IF ACCOUNT=SEARCH.ACC AND FORM=1 THEN \ GOSUB 11500 NEXT RECORD IF FORM=1 THEN\ GOSUB 9200:\ PRINT TAB(26);:\ PRINT USING "$$######.##";ACC.TOTAL :\ TOTAL=TOTAL+ACC.TOTAL\AME$="PAY$STUB":GOSUB 21000 OPEN "PAY$STUB.DAT" RECL 250 AS 1 READ #1,1;RECORDS FOR RECORD=2 TO RECORDS-1 GOSUB 10500 NPAY=NPAY+R(NET.PAY) NEXT RECORD CLOSE 1 REM ************************************************* REM * MISCELLANEOUS ELSE \ PRINT USING F2$;SEARCH.ACC,ACC.NAME$, \ ACC.TOTAL,ACC.TOTAL/TOTAL*100 PRINT NEXT SEARCH.ACC REM TOTAL EXPENDITURE PRINT IF FORM=1 THEN \ PRINT TAB(11);:\ PRINT USING "TOTAL EXPENDITURE $$######.##";TOTAL :\ PRINT \  DEPOSITS REM ************************************************* FILE.NO=1 FILENAME$="BANK$ACC":GOSUB 21000 OPEN "BANK$ACC.DAT" RECL 50 AS 1 CREATE "SCRAT.$$$" RECL 72 AS 2 PRINT #2,1;"",0,0 READ #1,1;RECORDS FOR RECORD=4 TO RECORDS-1 GOS ELSE \ PRINT:\ PRINT TAB(15);:\ PRINT USING "TOTAL EXPENDITURE $$######.##";TOTAL:\ PRINT CLOSE 1,2 1199 RETURN 1900 REM ACCOUNT 0 ACC.NAME$="CASH" RETURN 1910 REM ACCOUNT -1 ACC.NAME$="MISCELLANEOUS" RETURN 1920 REM ACCOUNT -2 UB 10100 IF LEFT$(ACC.NAME$,8)="PAY STUB" THEN 2100 FOR RECORDM=1 TO MISC READ # 2,RECORDM;CATAG$,CAT,COUNT IF LEFT$(ACC.NAME$,6)=LEFT$(CATAG$,6)THEN \ CAT=CAT+AMOUNT:\ COUNT=COUNT+1:\ PRINT #2,RECORDM;CATAG$,CAT,COUNT:\ GOTO  ACC.NAME$="SAVINGS ACC WITHDRAWL" RETURN 2000 REM ************************************************ REM * BREAK DOWN OF INCOME REM ************************************************ GOSUB 9000 IF ANS=EXIT THEN 26000 PRINT CLR$:GOSUB 900:\ PR2100 NEXT RECORDM RECORDM=MISC+1 PRINT #2,RECORDM;ACC.NAME$,AMOUNT,1 MISC=RECORDM 2100 NEXT RECORD CLOSE 1 REM TOTAL MISC DEPOSITS FOR RECORDM=1 TO MISC READ #2,RECORDM;CATAG$,CAT,COUNT IF COUNT>1 THEN INCOME=INCOME+CAT\ ELSE MINT TAB(10);"******************************************" PRINT TAB ( 10 ) ;"* BREAK DOWN OF INCOME *" PRINT TAB ( 10 ) ;"******************************************" GOSUB 910:PRINT:PRINT NPAY=0:MDEP=0:MISC=0:MISC.TOTAL=0 FILENISC.TOTAL=MISC.TOTAL+CAT NEXT RECORDM INCOME=NPAY+INCOME Y=5:X=1:GOSUB 800:GOSUB 920 PRINT" CATEGORY AMOUNT % OF TOTAL INCOME " PRINT"--------------- ----------- ---------------------" GOSUB 910:PRINT PRINT USING F4$;"PA  Y DEPOSITED",NPAY,NPAY/INCOME*100 PRINT:G=1 FOR RECORDM=1 TO MISC READ #2,RECORDM;CATAG$,CAT,COUNT IF COUNT>1 THEN G=G+1:FLAGX=1 ELSE FLAGX=0 IF G/2=INT(G/2) THEN GOSUB 900 ELSE GOSUB 910 IF FLAGX=1 THEN PRINT USING F4$;LEFT$(CATAG$,8),\  920:\ PRINT "12 MONTH LIMIT EXCEEDED":\ GOSUB 910:FOR X=1 TO 1000:NEXT X:GOTO 3000 Y=8:X=10:GOSUB 800 PRINT"ANY SPECIFIC ACCOUNT >>"; GOSUB 9300 REM GET RESPONSE ACCTS=-3 IF ANS=YES THEN INPUT"WHAT ACCOUNT NUMBER >>";ACCTS PRINT"WANT TOT CAT,CAT/INCOME*100:\ GOSUB 910:PRINT NEXT RECORDM IF MISC.TOTAL > 0 THEN \ PRINT USING F4$;"MISCELANEOUS",MISC.TOTAL,\ MISC.TOTAL/INCOME*100 PRINT PRINT"_____________________________________________________" PRINT PRINT USING "TALS PRINTED >>"; GOSUB 9300 VALU=ANS GOSUB 9000 FILE.NO=1 S.DATE=VAL(S.DATE$) E.DATE=VAL(E.DATE$) S.DATE$=RIGHT$(S.DATE$,2)+"/"+LEFT$(S.DATE$,2) E.DATE$=RIGHT$(E.DATE$,2)+"/"+LEFT$(E.DATE$,2) PRINT CLR$:GOSUB 900:\ PRINT TAB (10);"*****OTAL DEPOSITS $$######.##";INCOME DELETE 2 2999 RETURN 3000 REM *********************************************************** REM * GRAPH REM *********************************************************** PRINT CLR$:Y=2:X=30:GOSUB 800:GOSUB 920:PR**************************************" PRINT TAB ( 10 ) ;"* MONTHLY GRAPH OF EXPENDITURES *" PRINT TAB ( 10 ) ;"*******************************************" GOSUB 910:PRINT:PRINT FILENAME$="HISTORY":GOSUB 21000 OPEN "HISTORY.DAT" RINT "GRAPH MODE" GOSUB 910:Y=4:X=10:GOSUB 800 INPUT"STARTING DATE >>";LINE S.DATE$ IF LEN(S.DATE$)=0 THEN S.DATE$=DATE$ IF S.DATE$="EXIT" THEN 3999 IF LEN(S.DATE$)<5 THEN S.DATE$=S.DATE$+RIGHT$(DATE$,3) Y=6:X=10:GOSUB 800 INPUT"ENDING DATE ECL 72 AS 1 READ #1,1;RECORDS FOR RECORD=2 TO RECORDS-1 GOSUB 10000 MONTH=VAL(DUE.DATE$) DUE.DATE$=RIGHT$(DUE.DATE$,2)+"/"+LEFT$(DUE.DATE$,2) IF (DUE.DATE$ GE S.DATE$ AND DUE.DATE$ LE E.DATE$)\ AND (ACCTS=ACCOUNT OR ACCTS=-3)\ THEN >>";LINE E.DATE$ IF LEN(E.DATE$)=0 THEN E.DATE$=DATE$ IF LEN(E.DATE$)<5 THEN E.DATE$=E.DATE$+RIGHT$(DATE$,3) MONTHS=(VAL(RIGHT$(E.DATE$,2))-VAL(RIGHT$(S.DATE$,2)))*12+ \ VAL(E.DATE$)-VAL(S.DATE$)+1 IF MONTHS>12 THEN\ Y=12:X=25:GOSUB 800:GOSUBARRAY(MONTH)=ARRAY(MONTH)+TOTAL.DUE NEXT RECORD CLOSE 1 REM PRINT HISTOGRAM TOTAL=0 MONTH=S.DATE 3100 IF MONTH=13 THEN MONTH=1 TOTAL=TOTAL+ARRAY(MONTH) IF FIX=1 AND ARRAY(MONTH)=0 THEN MONTHS=MONTHS-1 MONTH=MONTH+1 IF MONTH <> E.DATE  +1 THEN 3100 SCALE=TOTAL/MONTHS/34 REM GET TITLE IF ACCTS=-3 THEN ACC.NAME$="GENERAL EXPENDITURES":GOTO 3200 IF ACCTS<0 THEN ON ACCTS+3 GOSUB 1920,1910,1900:GOTO 3200 FILENAME$="CURRENT":GOSUB 21000 OPEN "CURRENT.DAT" RECL 72 AS 1 READ #1,ACC********************************** GOSUB 9000 IF ANS=EXIT THEN 4099 RESTORE REM THE FOLLOWING LINES SET THE DATA POINTER TO THE FIRST REM NUMERIC FIELD. IN THIS CASE IT IS FIELD 4, HOWEVER REM THIS MAY BE CHANGED. READ H$,H$,H$ FILENAME$="TS+1;ACC,ACC.NAME$ CLOSE 1 3200 PRINT Y=5:X=10:GOSUB 800:GOSUB 920 PRINT USING "TOTAL OF & FORM & 19&";\ ACC.NAME$,MID$(MON$,S.DATE*3,3),LEFT$(S.DATE$,2) GOSUB 910:PRINT TAB(10); PRINT USING" AS OF &";DATE$ PRINT PRINT"MON "; PRIPAY$STUB":GOSUB 21000 OPEN "PAY$STUB.DAT" RECL 250 AS 1 READ #1,1;RECORDS FOR INDEX =1 TO NUMERIC.FIELDS T(INDEX)=0 NEXT INDEX FOR RECORD=2 TO RECORDS-1 GOSUB 10500 REM READ RECORDS FOR INDEX=1 TO NUMERIC.FIELDS T(INDEX)=T(INDEX)+R(NT"---------+---------+---------+---AV"; PRINT"----+---------+---------+--------" PRINT PRINT MONTH=S.DATE 3300 IF MONTH=13 THEN MONTH=1 PRINT USING"& ";MID$(MON$,MONTH*3,3); GOSUB 920:PRINT LEFT$(AST$,INT(ARRAY(MONTH)/SCALE)); IF FIX=1 AND INDEX) NEXT INDEX NEXT RECORD CLOSE 1 PRINT CLR$:GOSUB 920:PRINT TAB(10);\ "**********************************************" PRINT TAB ( 10 );"* PAY STUB TOTALS *" PRINT TAB ( 10 );"***************************ARRAY(MONTH)=0 THEN PRINT "NO DATA" IF VALU=NO OR POS+8>72 THEN PRINT:GOTO 3400 IF FIX=0 OR ARRAY(MONTH)<>0 THEN\ GOSUB 900:PRINT USING "$$######.##";ARRAY(MONTH) 3400 GOSUB 910:PRINT MONTH=MONTH+1 IF MONTH<>E.DATE+1 THEN 3300 PRINT PRINT" *******************" GOSUB 910:PRINT:PRINT PRINT USING "PAY STUB TOTALS AS OF &";DATE$ PRINT:PRINT:G=1 FOR INDEX=1 TO NUMERIC.FIELDS READ H$ REM IN THIS FORMAT NUMERIC FIELDS 5 AND 7 SHOULD NOT REM BE PRINTED IN DOLLARS AND CENTS FORMAT, THUS ---------+---------+---------+----"; PRINT"-----+---------+---------+--------" PRINT USING"AV = $$######.##";TOTAL/MONTHS 3999 RETURN 4000 REM ************************************************* REM * CALCULATE YEARLY TOTALS REM *************** REM THE FOLLOWING "IF" CLAUSE G=G+1 IF G/2=INT(G/2) THEN GOSUB 900 ELSE GOSUB 910 IF INDEX=5 OR INDEX=7 THEN \ PRINT USING F3A$;H$,T(INDEX)*100\ ELSE \ PRINT USING F3$;H$,T(INDEX) NEXT INDEX GOSUB 910:PRINT 4099 RETURN 5000 STOP    9000 REM ****************************************************** REM * PRINTER QUESTION REM ****************************************************** Y=HEIGHT-2:X=LFT:GOSUB 800 PRINT"PRINT ON PRINTER"; GOSUB 9300 IF ANS=YES THEN LPRINTER:FLAGP********************************************* REM * READ ACCOUNTS PAYABLE RECORD FROM DISK REM **************************************************** READ # FILE.NO,RECORD;ACCOUNT,ACCOUNT$,TOTAL.DUE, \ BALANCE,DUE.DATE$ RETURN 10100 REM *******=1 ELSE FLAGP=0 RETURN 9100 REM ****************************************************** REM * PRINT HEADING FOR SHEET REM ****************************************************** PRINT:GOSUB 900 PRINT "ACN ACCOUNT TOTAL "; ********************************************* REM * READ DEPOSIT RECORD REM **************************************************** READ # FILE.NO,RECORD;ACCOUNT$,ACC.NAME$,AMOUNT,DATE.DEP$ RETURN 10500 REM *****************************************PRINT "CHK NUM CHK DATE":GOSUB 910 PRINT "---- --------------------- --------- "; PRINT "--------- ---------" PRINT:RETURN 9200 REM ***************************************************** REM * PRINT TRAILER FOR SHEET REM ******************************* REM * READ PAY STUB RECORD REM **************************************************** READ #1,RECORD;\ R$(1),R$(2),R$(3),R(1),R(2),R(3),R(4),R(5),R(6), \ R(7),R(8),R(9),R(10),R(11),R(12),R(13),R(14),R(15), \ R(16),R(17),R(18),R(19),R(********************************* PRINT PRINT "-----------------------------"; PRINT "-----------------------------" RETURN 9300 REM ***************************************************** REM * YES OR NO ANSWER REM ***************************20),R(21),R(22),R(23) RETURN 11500 REM *************************************************** REM * PRINT ACCOUNTS-PAYABLE RECORD TO C.R.T. REM *************************************************** PRINT USING F1$;ACCOUNT,ACCOUNT$,TOTAL.DUE,BALANCE,D************************** INPUT RES$ ANS=2 IF LEFT$(RES$,1)="Y" THEN ANS=YES IF LEFT$(RES$,1)="N" THEN ANS=NO IF RES$="EXIT"THEN ANS=EXIT IF ANS<>2 THEN RETURN PRINT"PLEASE ANSWER YES (Y) OR NO (N), OR 'EXIT'";:GOTO 9300 10000 REM *******UE.DATE$ RETURN 20000 REM *************************************************** REM * RETURN AFTER HITTING 'RETURN KEY' FUNCTION REM *************************************************** Y=HEIGHT-2:X=LFT:GOSUB 800 INPUT"HIT RETRUN TO CONTINUE >>";  LINE DUMMY$ RETURN %INCLUDE 21000 CTION REM *************************************************** Y=HEIGHT-2:X=LFT:GOSUB 800 INPUT"HIT RETRUN TO CONTINUE >>";etup Routine For Personal Finance Program" print:print:print print "Please enter all values in decimal notation!!!" print "Plese enter all values in upper case only!!!" print:print:print print "Enter two decimal codes that clear" inمput "your screen ? ";c,d clr$=chr$(c)+chr$(d) input "Enter height (# rows) of terminal ? ";height input "Enter width (# columns) of terminal ?";wide 200 Input "How many codes for highlمighting ";high dim f(3) print "Input Codes...." for c = 1 to high input "enter code ?";f(c) next c For i = 1 to high print "CODE # ";i;" = ";f(i) next i print:print:print input "correct ?";q$ if left$(q$,1)<>م"Y" then 200 Full$=chr$(0) for i = 1 to high Full$ = full$+chr$(f(i)) next i 300 input "Codes to turn off Highlighting ?";off dim h(4) for i = 1 to off input "enter code ?";h(i) next i print:print:print 100 Rem ******************************************************* rem * Terminal Setup Routine for personal finance program rem ******************************************************* for i = 1 to 30 print chr$(10); next i print "Terminal S for i = 1 to off print "CODE # ";i;" = ";h(i) next i print:print input "Correct ";q$ if left$(q$,1)<>"Y" then 300 half$ = chr$(0) for i = 1 to off half$ = half$+chr$(h(i)) next i 400 rev$=chr$(0) print:print:print input "  Input today's Date (mm/dd/yy) ";Date$ 500 create "A:TERMINAL.DAT" as 1 print # 1; clr$,height,wide,full$,half$,rev$,date$ close 1 print clr$ مممPrograms: Osborne Accounts Payable/Accounts Receivable Package. Keeps track of current Payables & Receivables, as well as ageings and payments against both. Requirements: 40K CP/M SYSTEM; CBASIC2. The following programs did not compile (as given): A/مR-INV.BAS READCUST.BAS GENINFO.BAS A/RTAX.BAS WRITCUST.BAS READINV.BAS WRITEINV.BAS WRITEVND.BAS And there are known bugs that you will have to work out. Documentation: Osborne/McGraw-Hill "Accounts Payable & Accounts Receivable (CBASIC)" by Lon Pمoole, Mary Borchers, Martin McNiff, Robert Thompson. 358 Pages. The documentation is very comprehensive. Changes will be required in some programs if other than a Hazeltine terminal is used. Larry Root, Richton Park, Illinois م  %NOLIST 1060 H=0 IF RECORD.COUNT < 1 THEN H=-1:L=1:RETURN READ #Y2,1;VAR$,VAR1 XYZ$=VAR$+" ":ZYX$="000000"+STR$(VAR1) VAR$=LEFT$(XYZ$,6) IF LEN(K$)>6 THEN VAR$=VAR$+RIGHT$(ZYX$,6) IF K$ < VAR$ THEN H=-1:L=1:RETURN IF K$ = VAR$ THEN L=م1:RETURN READ #Y2,RECORD.COUNT;VAR$,VAR1 XYZ$=VAR$+" ":ZYX$="000000"+STR$(VAR1) VAR$=LEFT$(XYZ$,6) IF LEN(K$)>6 THEN VAR$=VAR$+RIGHT$(ZYX$,6) IF K$ > VAR$ THEN H=-1:L=RECORD.COUNT+1:RETURN IF K$ = VAR$ THEN L=RECORD.COUNT:RETURN H=RECORDم.COUNT L=0 1070 M=INT((L+H)/2) READ #Y2,M;VAR$,VAR1 XYZ$=VAR$+" ":ZYX$="000000"+STR$(VAR1) VAR$=LEFT$(XYZ$,6) IF LEN(K$)>6 THEN VAR$=VAR$+RIGHT$(ZYX$,6) IF VAR$=K$ THEN L=M:RETURN IF VAR$ > K$ THEN H=M IF VAR$ < K$ THEN L=M IF H=M+1م THEN H=-1:L=M+1:RETURN GOTO 1070 %LIST  LEN(K$)>6 THEN VAR$=VAR$+RIGHT$(ZYX$,6) IF VAR$=K$ THEN L=M:RETURN IF VAR$ > K$ THEN H=M IF VAR$ < K$ THEN L=M IF H=M+1VOLUME 43 DESCRIPTION: OSBORNE CBASIC2 ACCOUNTS PAYABLE AND ACCOUNTS RECEIVABLE BUSINESS SOFTWARE PROGRAMS. NUMBER SIZE NAME COMMENTS CATALOG.43 CONTENTS OF CP/M VOL. 43 43.1 1K A/P-INFO.BAS Part of A/P-A/R Package. 43.2 1K A/P000.BAS " 4م3.3 13K A/P010.BAS " 43.4 4K A/P02A.BAS " 43.5 6K A/P02B.BAS " 43.6 12K A/P030.BAS " 43.7 11K A/P040.BAS " 43.8 6K A/P050.BAS " 43.9 7K A/P060.BAS " 43.10 11K A/P070.BAS " 43.11 2K A/P080.BAS " 43.12 11K A/P090.BAS " 43.13 5K A/P110.BAS " 43.14   10K A/P120.BAS " 43.15 2K A/R-INFO.BAS " 43.16 1K A/R-INV.BAS " 43.17 12K A/R010.BAS " 43.18 5K A/R020.BAS " 43.19 4K A/R03A.BAS " 43.20 12K A/R03B.BAS " 43.21 9K A/R040.BAS " 43.22 11K A/R050.BAS " 43.23 2K A/R060.BAS " 43.24 9K A/R070.BAS " 43م.25 5K A/R080.BAS " 43.26 2K A/RTAX.BAS " 43.27 1K ABSTRACT.043 Abstracts of A/P-A/R Programs. 43.28 1K BINSEARC.BAS Part of A/P-A/R Package. 43.29 10K CRTFM.BAS " 43.30 2K CURSOR.BAS " 43.31 2K FILEINIT.BAS " 43.32 1K G/L-INFO.BAS " 43.33 2K GENIN%NOLIST REMARK CURSOR CONTROL COMMANDS FOR HAZELTINE 1400/1500 SERIES TERMINALS CLEAR.SCREEN$=CHR$(126)+CHR$(28) CURSOR.HOME$=CHR$(126)+CHR$(18) X9$=CHR$(16) FOR I%=1 TO 6:X9$=X9$+X9$:NEXT I% UP.CURSOR$=CHR$(126)+CHR$(12) DOWN.CURSOR$=CFO.BAS " 43.34 1K READCUST.BAS " 43.35 1K READINV.BAS " 43.36 1K READVEND.BAS " 43.37 5K SUBS1.BAS " 43.38 1K WRITCUST.BAS " 43.39 2K WRITEINV.BAS " 43.40 1K WRITEVND.BAS " HR$(126)+CHR$(11) BACKSPACE%=8 ADDR.CURSOR$=CHR$(126)+CHR$(17) LEAD.IN%=126 ADDR.CURS%=17 RIGHT.CURSOR%=16 DOWN.CURSOR%=11 UP.CUROSR%=12 CURSOR.HOME%=18 %LIST مممم  ممممم%NOLIST REMARK ********************************************* REMARK * READ CUSTOMER FILE RECORD 12/1/78 * REMARK ********************************************* 3225 READ #Y9,X0;W1$,D,Y(1),Y(2),P9,M$(2),M$(3),M$(4),M$(5) RETURN %LIST م  ممم%NOLIST REMARK ******************************************** REMARK * READ INVOICE OR TRANSACTION RECORD (AP)* REMARK ******************************************** 3000 READ #FILE.NO,X0%;W1$,W0,W2$,W3$,W1%,W2%,\ D(1),D(2),D(3),D(4),D(5),D(6),D(7م),D(8),D(9),D(10),D(11),D(12),D(13),\ D(14),D(15),D(16),D(17),D(18),D(19),D(20),D(21),D(22),D(23),D(24),\ D(25),D(26),D(27),C(1),C(2),C(3),C(4),C(5),C(6),C(7),C(8),C(9),C(10),\ C(11),C(12),C(13),C(14),C(15),C(16),C(17),C(18),C(19),C(20),C(21),\ C(2م2),C(23),C(24),C(25),C(26),C(27) RETURN %LIST م  %NOLIST REMARK ********************************************* REMARK * READ VENDOR FILE RECORD 12/1/78 * REMARK ********************************************* 3200 READ #Y9,X0;W1$,D,Y(1),Y(2),P9,M$(2),M$(3),M$(4),M$(5) RETURN %LIST مممممم%NOLIST REMARK ************************************ REMARK * WRITE CUSTOMER FILE RECORD 12/78* REMARK ************************************ 3275 PRINT #Y9,X0;W1$,D,Y(1),Y(2),P9,M$(2),M$(3),M$(4),M$(5) RETURN %LIST م  م%NOLIST REMARK ******************************************** REMARK * WRITE INVOICE/TRANSACTION RECORD (A/P) * REMARK ******************************************** 3050 PRINT #FILE.NO,X0%;W1$,W0,W2$,W3$,W1%,W2%,\ D(1),D(2),D(3),D(4),D(5),D(6),D(م7),D(8),D(9),D(10),D(11),D(12),D(13),\ D(14),D(15),D(16),D(17),D(18),D(19),D(20),D(21),D(22),D(23),D(24),\ D(25),D(26),D(27),C(1),C(2),C(3),C(4),C(5),C(6),C(7),C(8),C(9),C(10),\ C(11),C(12),C(13),C(14),C(15),C(16),C(17),C(18),C(19),C(20),C(21),\ C(م22),C(23),C(24),C(25),C(26),C(27) RETURN %LIST م!  %NOLIST REMARK ******************************************** REMARK * WRITE INVOICE/TRANSACTION RECORD (A/P) * REMARK *م%NOLIST REMARK ********************************** REMARK * WRITE VENDOR FILE RECORD 12/78* REMARK ********************************** 3250 PRINT #Y9,X0;W1$,D,Y(1),Y(2),P9,M$(2),M$(3),M$(4),M$(5) RETURN %LIST م"  م .6735 IF LEN(X0$) < 6 THEN X0$="0"+X0$:GOTO .6735 IF MID$(X0$,1,2)>="00" AND MID$(X0$,1,2)<="12"\ AND MID$(X0$,3,2)>="00" AND MID$(X0$,3,2) <="31" THEN .675 X2$="OUT OF RANGE":GOSUB 615:X1=Z0:GOTO .673 .675 X0=VAL(X0$) .680 GOSUB 210 .6805 X0$=SمTR$(X0) .6806 IF LEN(X0$)<6 THEN X0$="0"+X0$:GOTO .6806 .681 PRINT LEFT$(X0$,2);"/";MID$(X0$,3,2);"/";RIGHT$(X0$,2); RETURN 4000 D(3)=INT((D(1)*R1(L6+1))+.5)/100 REMARK COMPUTE SALES TAX AND INVOICE TOTAL D(4)=D(3)+D(2)+D(1) X1=704:GOSUB 21 REMARK ######################################################### REMARK # ACCOUNTS RECEIVABLE TRANSACTION ENTRY (A/R010) # REMARK # VERS. OF 3.30 PM 5/23/79 # REMARK ######################################################### DIM L4(2),D(13),Y(0 GOSUB 5440 REMARK REDISPLAY INVOICE AMOUNTS AND TOTAL 4020 D(7)=D(4)-D(6) REMARK COMPUTE INVOICE BALANCE IF L4(2)<>0 THEN D(7)=D(7)-D(8) IF L4(1)=0 THEN D(7)=0 REMARK IF BILL DATE IS ZERO, INVOICE BALANCE IS ZERO 4060 X1=320:GOSU2),M$(5),R$(10),R1(10),R2(10) %INCLUDE CURSOR GOTO 6000 %INCLUDE SUBS1 %INCLUDE BINSEARC %INCLUDE A/R-INV %INCLUDE READCUST %INCLUDE A/R-INFO %INCLUDE A/RTAX DATA "INVOICE","CR MEMO","DB MEMO","NEW","INV BILLING" DATA "INV PAYMENT","PROG PAYMEB 210 I1%=5:I2%=7:GOSUB 4320 REMARK DISPLAY INVOICE PAYMENT AND BALANCE RETURN 4080 D(11)=D(8)-D(10) REMARK COMPUTE PROGRESS BALANCE IF L4(2)=0 THEN D(11)=0 REMARK ZERO PROGRESS BALANCE IF PROGRESS DUE DATE IS ZERO X1=640:GOSUB 2NT","DELETE","MODIFY" .673 Z0=X1 REMARK ENTER & DISPLAY DATE: ALLOW ZERO DATE GOSUB 210 PRINT " "; X2=6 X3=0 X4=123199 GOSUB 345 REMARK ENTER THAT DATE IF X0=0 THEN X0$="000000" IF LEN(X0$)<5 THEN X1=Z0:GOTO .67310 I1%=8:I2%=11:GOSUB 4320 REMARK DISPLAY PROGRESS BILLING FIELDS RETURN REMARK CHECK FOR INCONSISTENCIES BETWEEN FIELDS 4120 IF D(7)<0 THEN 4220 REMARK NEGATIVE INVOICE BALANCE ILLEGAL IF D(11)<0 THEN 4220 REMARK NEGATIV#  E PROGRESS BALANCE ILLEGAL IF L4(1)<>0 THEN 4140 REMARK IF BILL DATE IS ZERO... IF D(4)<>0 THEN 4220 REMARK INVOICE PAYMENT MUST BE ZERO IF D(5)<>0 THEN 4220 REMARK AND INVOICE BALANCE MUST BE ZERO GOTO 4160 4140 IF D(4)=0 THEN 4220ING MASKA$;L1 RETURN REMARK BRANCH TO ENTER VALUE FOR FIELD "F%" 5020 ON F% GOTO 5040,5060,5080,5100,5120,5140,5160,5180,5200,5220,5240,5250 5040 IF C1<>1 THEN RETURN REMARK ENTER TRANSACTION TYPE (NEW INVOICES ONLY) X1=328:X2=1:X REMARK IF BILL DATE IS NON-ZERO,\ INVOICE AMOUNT MUST BE NON-ZERO 4160 IF L4(2)<>0 THEN 4180 REMARK IF PROGRESS DUE DATE IS ZERO... IF D(8)<>0 THEN 4220 REMARK PROGRESS BILLING AMOUNT MUST BE ZERO IF D(9)<>0 THEN 4220 R3=1:X4=3:GOSUB 345 B=X0 RESTORE FOR I%=1 TO B READ X0$ NEXT I% X1=330:GOSUB 210 PRINT X0$; RETURN 5060 X1=403:X2=12:X3=0:X4=0:GOSUB 345 REMARK ENTER CUSTOMER ORDER NUMBER L1$=X0$ RETURN 5080 X1=462:X2=6:X3=0:X4=999999:GOSUB 3EMARK AND PROGRESS BALANCE MUST BE ZERO GOTO 4200 4180 IF D(8)=0 THEN 4220 REMARK IF PROGRESS DUE DATE IS NON-ZERO,\ PROGRESS BILLING AMOUNT MUST BE NON-ZERO REMARK DETERMINE TRANSACTION'S FATE 4200 X2=1:X3=1:X4=3:X2$="ENTER45 REMARK ENTER JOB NUMBER L2=X0 RETURN 5100 X1=526:X2=6:X3=0:X4=0:GOSUB 345 REMARK ENTER JOB DESCRIPTION L2$=X0$ RETURN 5120 X1=590:GOSUB .673 REMARK ENTER BILL DATE L4(1)=X0 RETURN 5140 X1=652:X2=1:X3=0:X4=9:GOSUB 345 ACTION (1=RECORD,2=MORE CHANGES, 3=CANCEL)" GOSUB 665 RETURN 4220 FOR I%=1 TO 2 REMARK FLASH NASTY MESSAGE ON SCREEN X2$="DATE OR AMOUNT FIELD MISSING OR NEGATIVE BALANCE":GOSUB 615 NEXT I% X0=2 RETURN 4320 FOR I%=I1% TO I2%  REMARK ENTER TAX CODE L6=X0 GOSUB 5400 REMARK DISPLAY TAX CODE DESCRIPTION AND RATE D(13)=0 IF L6>0 THEN 5420 X1=718:X2=8:X3=-99999.9:X4=99999.9:GOSUB 345 REMARK FOR TAX CODE ZERO, ENTER G/L ACCOUNT NUMBER D(13)=X0 RETURN 516 REMARK DISPLAY TRANSACTION FIELDS I1% THROUGH I2% X1=50:GOSUB 215 PRINT USING MASKB$;D(I%) NEXT I% RETURN 5000 GOSUB 5260 REMARK DISPLAY CUSTOMER DATA X1=265:GOSUB 210 PRINT W1$;TAB(12);M$(2);TAB(40); X1=12:GOSUB 215 PRINT US0 X1=787:X2=10:X3=0:X4=9999999.99:GOSUB 345 REMARK ENTER INVOICE AMOUNT D(1)=X0 RETURN 5180 X1=851:X2=10:X3=0:X4=9999999.99:GOSUB 345 REMARK ENTER SHIPPING/TRAVEL AMOUNT D(2)=X0 RETURN 5200 X1=369:X2=11:X3=-9999999.99:X4=9999999.99:GOSU$  B 345 REMARK ENTER INVOICE PAYMENT AMOUNT X1=363:GOSUB 210 D(6)=D(6)-D(5)*F2+ABS(X0) D(5)=ABS(X0) F2=1 IF X0>=0 OR B=2 THEN PRINT " ";:D(12)=0 \ ELSE PRINT "BY CM";:D(12)=1 RETURN 5220 X1=628:GOSUB .673 REMARK ENTER PROGRESS DUE 210 REMARK DISPLAY TAX CODE DESCRIPTION AND RATE PRINT USING MASKD$;R$(L6+1),R1(L6+1) RETURN 5420 X1=718:GOSUB 210 REMARK DISPLAY TAX CODE'S G/L ACCOUNT NUMBER PRINT USING MASKC$;R2(L6+1); RETURN 5440 FOR I%=1 TO 4 REMARK D DATE L4(2)=X0 RETURN 5240 X1=690:X2=10:X3=0:X4=9999999.99:GOSUB 345 REMARK ENTER PROGRESS BILLING AMOUNT D(8)=X0 RETURN 5250 X1=754:X2=10:X3=0:X4=9999999.99:GOSUB 345 REMARK ENTER PROGRESS PAYMENT D(10)=D(10)-D(9)*F3+X0 REMARK AISPLAY INVOICE AMOUNT, SHIPPING, TAX, AND TOTAL PRINT X1=19:GOSUB 215 PRINT USING MASKB$;D(I%); NEXT I% RETURN REMARK START OF MAIN PROGRAM 6000 MASKA$="######" MASKB$=" #######.##" MASKC$=" #####.#" MASKD$="/ / ##DJUST PAYMENT TOTAL D(9)=X0 F3=1 RETURN 5260 X1=30:GOSUB 210 REMARK DISPLAY TRANSACTION OPERATION DESCIPTION RESTORE FOR I%=1 TO 3+C1 READ X0$ NEXT I% PRINT X0$;" "; RETURN 5280 X1=9:GOSUB 215 REMARK DISPLAY .##%" OPEN "A/R0F020.DAT" RECL 226 AS 1,"A/R0F110.DAT" RECL 162 AS 2, \ "A/R0F120.DAT" RECL 226 AS 3,"A/R0F130.DAT" AS 4, \ "CRT" RECL 1100 AS 19,"A/R0F030.DAT" AS 5 FILE.NO=4:GOSUB 3.14 REMARK RETRIEVE A/R EXTENT INFORMATION X0=14:GOSUB 260CURRENT TRANSACTION VALUES PRINT B; RESTORE FOR I%=1 TO B READ X0$ NEXT I% PRINT X0$ X1=20:GOSUB 215 PRINT L1$ X1=15:GOSUB 215 PRINT USING MASKA$;L2 X1=15:GOSUB 215 PRINT L2$ X1=15:GOSUB 215 X0=L4(1):GOSUB 680.5 PRINT X1=12 REMARK DISPLAY TRANSACTION ENTRY OPERATION SELECTION MASK MAX.TRANSACTION.RCDS=200 A1=5:GOSUB 3700 REMARK RETRIEVE A/R TAX CODE INFORMATION 6025 X2=1:X3=0:X4=6:X2$="ENTER OPERATION CODE (SEE BELOW)":GOSUB 665 REMARK ENTER OPERATION IF X:GOSUB 215 PRINT L6; GOSUB 5400 IF L6=0 THEN X1=15:GOSUB 215:PRINT USING MASKC$;D(13); \ ELSE GOSUB 5420 GOSUB 5440 GOSUB 4060 PRINT X1=53:GOSUB 215 X0=L4(2):GOSUB 680.5 PRINT I1%=8:I2%=11:GOSUB 4320 RETURN 5400 X1=654:GOSUB0=0 THEN 6520 REMARK EXIT PROGRAM ON ZERO OPERATION CODE C2=X0:C1=X0 GOSUB 5260 REMARK DISPLAY TRANSACTION OPERATION DESCRIPTION 6040 X1=265:X2=6:X3=0:X4=0:GOSUB 345 REMARK ENTER CUSTOMER NUMBER IF X0$<=" "THEN 6025 W1$=X0$ IF W1$%  =W6$ THEN 6100 REMARK RETRIEVE NEW CUSTOMER DATA IF NECESSARY RECORD.COUNT=AR.CUSTFILE.EXTENT Y2=2 XYZ$=W1$+" " K$=LEFT$(XYZ$,6):GOSUB 1060 IF H=-1 OR VAR1=0 THEN X2$="NOT ON FILE":GOSUB 615:GOTO 6040 6060 Y9=2:X0=L:GOSUB 3225 W6$=WILLING NOT ALLOWED ON CREDIT MEMOS GOSUB 5220 IF L4(2)<>0 THEN GOSUB 5240: \ REMARK IF PROGRESS DUE DATE IS ZERO, GOSUB 5250: \ REMARK DON'T ENTER PROGRESS BILLING FIELDS GOSUB 4080: \ GOSUB 4020 6240 X2=2:X3=0:X4=12:X2$="ENTER FIELD1$ 6080 X1=265:GOSUB 210 PRINT W1$; 6100 X1=256:GOSUB 210 REMARK DISPLAY CUSTOMER DATA FOR I%=2 TO 5 X1=18:GOSUB 215 PRINT USING "/ /";M$(I%) NEXT I% 6200 FOR I%=1 TO 13 REMARK CLEAR TRANSACTION VARIABLES D(I% TO CHANGE (0=NONE)":GOSUB 665 REMARK ALLOW CHANGES TO ENTRIES IF X0=0 THEN 6260 F%=X0 GOSUB 5020 IF F%<5 THEN 6240 GOSUB 4000 IF F%>9 THEN GOSUB 4080 GOTO 6240 6260 GOSUB 4120 REMARK CHECK FOR CONSISTENCY, AND ENTER ACTION CODE I)=0 NEXT I% F2=0:F3=0 X1=308:X2=6:X3=0:X4=999999:GOSUB 345 REMARK ENTER INVOICE NUMBER IF X0=0 THEN 6040 L1=X0 6210 RECORD.COUNT=AR.INVFILE.EXTENT XYZ$=W1$+" ":ZYX$="000000"+X0$ K$=LEFT$(XYZ$,6)+RIGHT$(ZYX$,6) Y2=3:GOSUB 1060 IF F X0=2 THEN 6240 REMARK MORE CHANGES REQUESTED 6280 IF X0=3 THEN X2$="TRANSACTION CANCELLED":GOSUB 615:\ REMARK CANCEL TRANSACTION X0=14:GOSUB 260:GOSUB 5260:GOTO 6080 6300 IF D(5)=0 OR B<>1 THEN D(12)=0 C2=C1 6360 AR.TRANFILE.EXTENT=AR.TRANFIC1>1 THEN 6400 REMARK IF OPERATION IS NOT NEW INVOICE, BRANCH IF H<>-1 THEN X2$="ALREADY ON FILE":GOSUB 615:GOTO 6200 X0=15:GOSUB 260 REMARK DISPLAY MASK GOSUB 5000 REMARK DISPLAY CUSTOMER DATA FOR F%=1 TO 6 REMARK ENTER TRANLE.EXTENT+1 FILE.NO=1:REC.NO%=AR.TRANFILE.EXTENT:GOSUB 3450 REMARK SAVE TRANSACTION ON FILE CLOSE 1,4 REMARK CLOSE AND RE-OPEN FILES IN CASE OF DISASTER OPEN "A/R0F020.DAT" RECL 226 AS 1, "A/R0F130.DAT" AS 4 FILE.NO=4:GOSUB 3.15 REMARKSACTION FIELD VALUES GOSUB 5020 NEXT F% IF L4(1)<>0 THEN GOSUB 5160: \ REMARK IF BILL DATE IS ZERO, DON'T ENTER INVOICE FIELDS GOSUB 5180: \ GOSUB 4000: \ GOSUB 5200: \ GOSUB 4020 6220 IF B=2 THEN L4(2)=0:GOTO 6240 REMARK PROGRESS B SAVE NEW EXTENT INFORMATION TO FILE X2$="RECORDED":GOSUB 615 IF AR.TRANFILE.EXTENT < MAX.TRANSACTION.RCDS THEN \ REMARK IF THE TRANSACTION FILE IS NOT YET FULL... X0=14:GOSUB 260: \ REMARK DISPLAY TRANSACTION ENTRY OPERATION SELECTION MASK &  GOSUB 5260: GOTO 6080 \ REMARK AND CONTINUE WITH TRANSACTION ENTRY ELSE \ PRINT CLEAR.SCREEN$;"TRANSACTION FILE FULL - RUN A/R UPDATE" PRINT "KEY TO EXIT":INPUT "";LINE X0$: \ GOTO 6520 6400 IF H=-1 THEN X2$="NOT ON FILE":GOSUBPLAY INVOICE BALANCE GOSUB 4120 REMARK CHECK FOR INCONSISTENCIES, AND ENTER ACTION CODE IF X0=2 THEN GOTO 6460 \ REMARK IF ACTION CODE IS 2, ALLOW CHANGES ELSE GOTO 6280 REMARK OPERATION IS PROGRESS PAYMENT 6480 GOSUB 5250  615:GOTO 6200 REMARK OPERATION IS OTHER THAN NEW INVOICE FILE.NO=3:REC.NO%=L:GOSUB 3400 REMARK RETRIEVE EXISTING INVOICE DATA X0=15:GOSUB 260 REMARK DISPLAY TRANSACTION MASK GOSUB 5000 REMARK DISPLAY TRANSACTION TYPE AND OPERATION  REMARK ENTER PROGRESS PAYMENT AMOUNT GOSUB 4080 REMARK DISPLAY PROGRESS BALANCE GOSUB 4020 REMARK DISPLAY INVOICE BALANCE GOSUB 4120 REMARK CHECK FOR INCONSISTENCIES, AND ENTER ACTION CODE IF X0=2 THEN GOTO 6480 \ REMARK I GOSUB 5280 REMARK DISPLAY TRANSACTION VALUES ON C1-1 GOTO 6440,6460,6480,6500,6240 REMARK BRANCH ON OPERATION CODE REMARK OPERATION IS INVOICE BILLING 6440 IF L4(1)=0 THEN GOSUB 5120: \ REMARK ENTER BILL DATE GOSUB 5160: \F ACTION CODE IS 2, ALLOW CHANGES ELSE GOTO 6280 REMARK OPERATION IS DELETE 6500 X2=3:X3=0:X4=0:X2$="ENTER DELETE CODE":GOSUB 665 REMARK OPERATOR MUST VERIFY DELETE OPERATION IF X0$="DEL" THEN 6300 X0=14:GOSUB 260 GOSUB 5260 GOTO  REMARK ENTER INVOICE AMOUNT GOSUB 5180: \ REMARK ENTER SHIPPING/TRAVEL AMOUNT GOSUB 4000: \ REMARK CALCULATE AND DISPLAY INVOICE BALANCE GOTO 6240 \ REMARK BRANCH TO ALLOW CHANGES TO ENTRIES ELSE \ REMARK IF ALREADY B6080 6520 PRINT CLEAR.SCREEN$;"A/R TRANSACTION ENTRY LOADING MENU" REMARK END PROGRAM AND RE-LOAD MENU CHAIN "A/P000" TE CODE":GOSUB 665 REMARK OPERATOR MUST VERIFY DELETE OPERATION IF X0$="DEL" THEN 6300 X0=14:GOSUB 260 GOSUB 5260 GOTO ILLED, TRY AGAIN FOR I%=1 TO 2: \ X2$="ALREADY BILLED":GOSUB 615: \ NEXT I%: \ X0=14:GOSUB 260:GOSUB 5260:GOTO 6080 REMARK OPERATION IS INVOICE PAYMENT 6460 GOSUB 5200 REMARK ENTER PAYMENT AMOUNT GOSUB 4020 REMARK DISم'   DISK.DOC -FOG/HAK.001 First Osborne Group (FOG) Hackers Disk This disk contains the personal finance system previously found on -FOG.002. This system, developed by Software Design Engineering, مwas submitted by Byron McKay of FOG and PICONET and is also available on -PNET.003. Files of type .BAS include 120, 130, 21000, 800, AP,AR FS and INSTALL. Remaining files on this disk and continuing to -FOG/HAK.002 and .003 are from the Osborne/مMcGraw- Hill accounts receivable/payable system previously found on -FOG.008, .010, .012, and .013 and also available on -SIGM.01A. Refer to ABSTRACT.043 and CATALOG.043 for further information. Jim Woolley مFOG Disk Librarian October, 1982 IGM.01A. Refer to ABSTRACT.043 and CATALOG.043 for further information. Jim Woolley ممم