REMARK ************************************************************** REMARK * GENERAL LEDGER ACCOUNT FILE MAINTENANCE PROGRAM * REMARK * (G/L050) VERS. OF 3.00 PM 8/8/79 * REMARK ************************************************************** MASKA$="#####.#" MASKB$=" #########.##" MASKC$="######.#/##" DIM D(7),G3(5),G2$(5) %INCLUDE CURSOR DATA "REGULAR", "TITLE ","TOTAL ","HEADING","INCOME STMT. " DATA "BALANCE SHEET","DB","CR","NO ","YES" GOTO 6000 %INCLUDE SUBS1 %INCLUDE BINSERCH %INCLUDE GENINFO %INCLUDE ACCTFILE %INCLUDE G/L-INFO 825 IF LINE.COUNT%<55 THEN RETURN REMARK LINE PRINTER ROUTINE PAGE.COUNT%=PAGE.COUNT%+1 PRINT CHR$(12);TAB((A1-LEN(G2$(1)))/2);G2$(1);TAB(A1);"DATE "; X0=G3(1):GOSUB 680.5 PRINT PRINT TAB((A1-LEN(X4$))/2);X4$;TAB(A1);"PAGE";PAGE.COUNT% PRINT PRINT "ACCOUNT";TAB(10);"NAME"; IF F2<>1 THEN \ PRINT TAB(46);"THIS MO THIS YEAR THIS QTR PREV QTR-1";:\ PRINT" PREV QTR-2 PREV QTR-3 LAST YEAR"; PRINT:PRINT LINE.COUNT%=6 RETURN 4100 X1=A1:GOSUB 210 REMARK SET CRT LOCATION TO A1 4120 RESTORE REMARK DISPLAY LABEL #X0+1 FROM DATA TABLE REMARK AT CURRENT CRT LOCATION FOR I%=1 TO X0+1 READ X0$ NEXT I% PRINT X0$ RETURN 4140 RESTORE REMARK PRINT LABEL #X0+1 FROM DATA TABLE REMARK AT TAB POSITION X1 FOR I%=1 TO X0+1 READ X0$ NEXT I% PRINT TAB(X1);X0$; RETURN REMARK ACCOUNT NO. & SUB-ACCOUNT NO. ENTRY ROUTINE 5000 X1=266:X2=7:X3=0:X4=99999.9:GOSUB 345 REMARK ENTER ACCOUNT NUMBER L1=X0 IF L1=0 THEN RETURN IF L1<10000 THEN 5000 X1=274:X2=2:X3=0:X4=99:GOSUB 345 REMARK ENTER SUB-ACCOUNT NUMBER L2=X0 REMARK LOCATE RECORD IN EITHER ACCOUNT FILE OR ADDFILE RECORD.COUNT%=ACCOUNT.FILE.EXTENT% Y2=2 K1=L1 + (L2/1000) GOSUB 10.60 REMARK LOOK IN ACCOUNT FILE FOR RECORD IF H=-1 THEN \ REMARK LOOK IN ADDFILE FOR RECORD RECORD.COUNT%=ADDFILE.EXTENT%:\ Y2=3:\ GOSUB 10.60 RETURN 5100 IF F%<1 OR F%>8 THEN 5300 REMARK BRANCH TO ENTER THE VALUE FOR FIELD F% ON F% GOTO 5120,5140,5180,5200,5220,5240,5260,5280 5120 X1=330:X2=31:X3=0:X4=0:GOSUB 345 REMARK ENTER ACCOUNT NAME L1$=X0$ RETURN 5140 IF L2=0 THEN L3%=0:X1=401:GOSUB 210:PRINT"0":GOTO 5160 REMARK IF SUB-ACCOUNT NO. IS ZERO, TYPE MUST BE ZERO X1=401:X2=1:X3=1:X4=3:GOSUB 345 REMARK ENTER ACCOUNT TYPE L3%=X0 5160 A1=403:X0=L3%:GOSUB 4100 RETURN 5180 X1=465:X2=1:X3=1:X4=2:GOSUB 345 REMARK ENTER REPORT TYPE L4%=X0 A1=467:X0=L4%+3:GOSUB 4100 RETURN 5200 X1=529:X2=1:X3=1:X4=2:GOSUB 345 REMARK ENTER NORMAL BALANCE L5%=X0 A1=531:X0=L5%+5:GOSUB 4100 RETURN 5220 X1=593:X2=1:X3=0:X4=9:GOSUB 345 REMARK ENTER TOTAL LEVEL L6%=X0 RETURN 5240 X1=657:X2=1:X3=0:X4=9:GOSUB 345 REMARK ENTER EXTRA LINE ADVANCE L7%=X0 RETURN 5260 X1=721:X2=1:X3=0:X4=1:GOSUB 345 REMARK ENTER WHETHER THIS IS A SALES ACCOUNT L8%=X0 A1=723:X0=L8%+8:GOSUB 4100 RETURN 5280 X1=785:X2=1:X3=0:X4=1:GOSUB 345 REMARK ENTER WHETHER THIS IS ON THE SPECIAL REPORT L9%=X0 A1=787:X0=L9%+8:GOSUB 4100 RETURN 5300 X1=64*F%-141:X2=13:X3=-999999999.99:X4=999999999.99:GOSUB 345 REMARK ENTER ONE OF THE AMOUNT FIELDS D(F%-8)=X0 RETURN REMARK DISPLAY ACCOUNT DATA 5400 X1=265:GOSUB 210 PRINT USING MASKC$;L1;L2 REMARK DISPLAY ACCOUNT NUMBER FIELD X1=11:GOSUB 215 PRINT L1$;TAB(64) REMARK DISPLAY ACCOUNT NAME FIELD X1=17:GOSUB 215 PRINT L3%; REMARK DISPLAY ACCOUNT TYPE FIELD X0=L3%:GOSUB 4120 X1=17:GOSUB 215 PRINT L4%; REMARK DISPLAY REPORT TYPE FIELD X0=L4%+3:GOSUB 4120 X1=17:GOSUB 215 PRINT L5%; REMARK DISPLAY NORMAL BALANCE FIELD X0=L5%+5:GOSUB 4120 X1=17:GOSUB 215 PRINT L6% REMARK DISPLAY TOTAL LEVEL FIELD X1=17:GOSUB 215 PRINT L7% REMARK DISPLAY EXTRA LINE ADVANCE FIELD X1=17:GOSUB 215 PRINT L8%; REMARK DISPLAY SALES ACCOUNT FLAG FIELD X0=L8%+8:GOSUB 4120 X1=17:GOSUB 215 PRINT L9%; REMARK DISPLAY SPECIAL REPORT FLAG FIELD X0=L9%+8:GOSUB 4120 X1=384:GOSUB 210 FOR I%=1 TO 7 REMARK DISPLAY AMOUNT FIELDS X1=52:GOSUB 215 PRINT USING MASKB$;D(I%) NEXT I% RETURN REMARK MAIN PROGRAM BEGINS HERE 6000 OPEN "G/I0F010.DAT" AS 1,"G/L0F110.DAT" RECL 157 AS 2,\ REMARK OPEN FILES "G/L0F130.DAT" AS 4,"CRT" RECL 1100 AS 19 CREATE "ADDFILE.DAT" RECL 157 AS 3 Y9=1:GOSUB 700 REMARK RETRIEVE GENERAL INFORMATION FILE.NO%=4:GOSUB .314 REMARK RETRIEVE EXTENT INFORMATION 6020 X0=4:GOSUB 260 REMARK DISPLAY CRT MASK X2$="ENTER OPERATION CODE (0=EXIT; 1=ADD; 2=CHANGE/DELETE; 3=PRINT)" X2=1:X3=0:X4=3:GOSUB 665 REMARK ENTER OPERATION CODE C=X0 ON C+1 GOTO 6500,6040,6180,6280 REMARK BRANCH ON OPERATION CODE 6040 X0=4:GOSUB 260 X1=30:GOSUB 210 REMARK OPERATION IS ADD PRINT "ADD "; 6060 GOSUB 5000 REMARK ENTER ACCOUNT AND SUB-ACCOUNT NUMBERS IF L1=0 THEN 6020 IF H>-1 AND VAR3=-1 THEN REUSE.DELETED.RECORD%=1:GOTO 6080 IF H<>-1 THEN X2$="ALREADY ON FILE":GOSUB 615:GOTO 6060 6080 FOR F%=1 TO 8 REMARK ENTER DATA FOR NEW ACCOUNT GOSUB 5100 NEXT F% IF L3%=0 THEN \ FOR F%=9 TO 15:\ GOSUB 5100:\ NEXT F%\ ELSE\ FOR F%=1 TO 7:\ D(F%)=0:\ NEXT F% IF REUSE.DELETED.RECORD%=1 THEN \ REMARK DELETED RECORD IN CORRECT FILE POSTITION: USE IT FILE.NO%=Y2:\ RECORD.NO%=L:\ GOSUB 3550:\ REUSE.DELETED.RECORD%=0:\ GOTO 6240 IF L > ADDFILE.EXTENT% THEN 6100 REMARK PLACE NEW RECORD IN CORRECT POSITION ON FILE FOR I=ADDFILE.EXTENT% TO L STEP -1 READ #3,I;LINE X0$ PRINT USING "&";#3,I+1;X0$ NEXT I 6100 ADDFILE.EXTENT%=ADDFILE.EXTENT%+1 FILE.NO%=3:RECORD.NO%=L:GOSUB 3550 CLOSE 3 REMARK CLOSE AND RE-OPEN THE FILE FOR DISASTER PROTECTION OPEN "ADDFILE.DAT" RECL 157 AS 3 GOTO 6240 6160 X2=3:X3=0:X4=0:X2$="ENTER DELETE CODE":GOSUB 665 REMARK OPERATION IS DELETE IF X0$<>"DEL" THEN 6240 L3%=-1 FILE.NO%=Y2:RECORD.NO%=L:GOSUB 3550 REMARK RESAVE DELETED RECORD X2$="RECORD DELETED":GOSUB 615 ON C GOTO 6040,6180 REMARK RETURN TO EITHER THE ADD OR CHANGE OPERATION 6180 X0=4:GOSUB 260 X1=30:GOSUB 210 REMARK OPERATION IS CHANGE/DELETE PRINT "CHANGE"; 6200 GOSUB 5000 REMARK ENTER ACCOUNT AND SUB-ACCOUNT NUMBERS IF L1=0 THEN 6020 IF H=-1 OR VAR3=-1 THEN X2$="NOT ON FILE":GOSUB 615:GOTO 6200 FILE.NO%=Y2:RECORD.NO%=L:GOSUB 3500 REMARK RETRIEVE ACCOUNT DATA 6240 GOSUB 5400 REMARK DISPLAY ACCOUNT DATA REMARK ALLOW CHANGES TO DISPLAYED DATA X2=2:X3=0:X4=99:X2$="ENTER FIELD TO CHANGE (99=DELETE)":GOSUB 665 F%=X0 IF F%=0 THEN 6260 REMARK NO MORE CHANGES IF F%=99 THEN 6160 REMARK DELETE WAS SELECTED IF F%>15 THEN 6240 GOSUB 5100 REMARK ENTER VALUE FOR FIELD TO CHANGE GOTO 6240 6260 GOSUB 3550 REMARK RESAVE RECORD ON FILE ON C GOTO 6040,6180 6280 X0=4:GOSUB 260 X1=30:GOSUB 210 REMARK OPERATION IS PRINT PRINT "PRINT " 6300 OLD.READ%=0 NEW.READ%=0 CONSOLE X2$="ENTER REPORT TYPE (0=NONE; 1=DESCRIPTIONS; 2=AMOUNTS; 3=BOTH)" X2=1:X3=0:X4=3:GOSUB 665 REMARK ENTER REPORT TYPE F2=X0 IF F2=0 THEN 6020 PAGE.COUNT%=0 REMARK RESET PRINT VARIABLES LINE.COUNT%=66 LPRINTER GOSUB 6800 REMARK FIND FIRST RECORD ON ACCOUNT FILE GOSUB 6810 REMARK FIND FIRST RECORD AN ADDFILE 6320 IF OLD.READ% > ACCOUNT.FILE.EXTENT% \ AND NEW.READ% > ADDFILE.EXTENT% THEN 6300 REMARK PRINTOUT COMPLETE IF NEW.RECORD > OLD.RECORD OR NEW.READ% > ADDFILE.EXTENT% THEN \ FILE.NO%=2:RECORD.NO%=OLD.READ%:GOSUB 6400:\ REMARK PRINT RECORD FROM ACCOUNT FILE OLD.RECORD=100000:\ GOSUB 6800 IF NEW.RECORD=100000 THEN 6320 IF OLD.RECORD>NEW.RECORD OR OLD.READ%>ACCOUNT.FILE.EXTENT% THEN \ FILE.NO%=3:RECORD.NO%=NEW.READ%:GOSUB 6400:\ REMARK PRINT RECORD FROM ADDFILE NEW.RECORD=100000:\ GOSUB 6810 GOTO 6320 REMARK - - - PRINT ROUTINE - - - 6400 GOSUB 3500 REMARK RETRIEVE RECORD TO BE PRINTED IF F2=2 AND L2<>0 THEN RETURN REMARK ON "AMOUNTS ONLY" PRINTOUTS, REMARK INCLUDE ONLY REGULAR ACCOUNTS A1=110:X4$="GENERAL LEDGER ACCOUNTS":GOSUB 825 PRINT USING MASKA$;L1; PRINT TAB(9);L1$; IF F2=2 THEN 6460 IF L2<>0 THEN PRINT TAB(41);"SUB";L2; X0=L3%:X1=49:GOSUB 4140 X0=L4%+3:X1=61:GOSUB 4140 X0=L5%+5:X1=76:GOSUB 4140 PRINT TAB(80);"LEVEL";L6%; IF L7%=9 THEN PRINT TAB(89);"TOP/PAGE"; IF L7%>0 AND L7%<9 THEN PRINT TAB(88);L7%;"LINES"; IF L8%=1 THEN PRINT TAB(99);"SALES ACCT"; IF L9%=1 THEN PRINT TAB(111);"SPECIAL REPT"; PRINT LINE.COUNT%=LINE.COUNT%+1 6460 IF L2<>0 OR F2=1 THEN RETURN PRINT TAB(40); PRINT USING MASKB$;D(1);D(2);D(3);D(4);D(5);D(6);D(7) LINE.COUNT%=LINE.COUNT%+1 RETURN REMARK END OF MAINLINE CODE REMARK START OF MERGE ROUTINE 6500 PRINT CLEAR.SCREEN$:PRINT:PRINT"WORKING... DO NOT INTERRUPT" IF ACCOUNT.FILE.EXTENT%=0 THEN\ REMARK NO PREVIOUS RECORDS - SWITCH FILE NAMES DELETE 2:\ CLOSE 3:\ A=RENAME("G/L0F110.DAT","ADDFILE.DAT"):\ OUTPUT.COUNT%=ADDFILE.EXTENT%:\ GOTO 9000 CLOSE 1,2,3,19 OPEN "G/L0F110.DAT" RECL 157 AS 2,"ADDFILE.DAT" RECL 157 AS 3 CREATE "WORKFILE.DAT" RECL 157 AS 5 IF ADDFILE.EXTENT%>0 THEN 6550 REMARK IF NO NEW ACCOUNTS, GIVE OPTION TO REORGANIZE PRINT CLEAR.SCREEN$ X2$="ENTER 'Y' TO REORGANIZE ACCOUNT FILE; ANY OTHER KEY TO EXIT PROGRAM" X2=1:X3=0:X4=0:GOSUB 665 IF X0$<>"Y" THEN 9005 PRINT CURSOR.HOME$:PRINT:PRINT"WORKING... DO NOT INTERRUPT" 6550 GOSUB 6800 REMARK GET THE FIRST ACCOUNT FILE RECORD GOSUB 6810 REMARK GET THE FIRST ADDFILE RECORD 6600 IF OLD.READ% > ACCOUNT.FILE.EXTENT% \ REMARK WHEN BOTH ENDS-OF-FILE ARE REACHED, AND NEW.READ% > ADDFILE.EXTENT% THEN 8999 REMARK EXIT PROGRAM IF NEW.RECORD > OLD.RECORD OR NEW.READ% > ADDFILE.EXTENT% THEN \ FILE.NO%=2:\ RECORD.NO%=OLD.READ%:\ GOSUB 3500:\ REMARK RETRIEVE ACCOUNT FILE RECORD GOSUB 6900:\ REMARK WRITE RECORD TO WORKFILE OLD.RECORD=100000:\ GOSUB 6800 REMARK READ THE NEXT RECORD FROM THE ACCOUNT FILE IF NEW.RECORD=100000 THEN 6600 IF OLD.RECORD > NEW.RECORD OR OLD.READ% > ACCOUNT.FILE.EXTENT% THEN\ FILE.NO%=3:\ RECORD.NO%=NEW.READ%:\ GOSUB 3500:\ REMARK RETRIEVE ADDFILE RECORD GOSUB 6900:\ REMARK WRITE RECORD TO WORKFILE NEW.RECORD=100000:\ GOSUB 6810 REMARK READ THE NEXT RECORD FROM THE ADDFILE GOTO 6600 6800 IF END #2 THEN 6800.1 REMARK READ RECORD FROM ACCOUNT FILE OLD.READ%=OLD.READ%+1 READ #2,OLD.READ%;VAR1,VAR2,VAR3 OLD.RECORD=VAR1 + VAR2/1000 IF VAR3=-1 THEN 6800 REMARK IF RECORD IS DELETED, READ NEXT RECORD RETURN 6800.1 OLD.READ%=ACCOUNT.FILE.EXTENT%+1 REMARK END OF FILE ENCOUNTERED OLD.RECORD=100000 RETURN 6810 IF END #3 THEN 6810.1 REMARK READ RECORD FROM ADDFILE NEW.READ%=NEW.READ%+1 READ #3,NEW.READ%;VAR1,VAR2,VAR3 NEW.RECORD=VAR1 + VAR2/1000 IF VAR3=-1 THEN 6810 REMARK IF RECORD IS DELETED, READ NEXT RECORD RETURN 6810.1 NEW.READ%=ADDFILE.EXTENT%+1 REMARK END OF FILE ENCOUNTERED NEW.RECORD=100000 RETURN 6900 OUTPUT.COUNT%=OUTPUT.COUNT%+1 REMARK WRITE RECORD TO WORKFILE FILE.NO%=5 RECORD.NO%=OUTPUT.COUNT% GOSUB 3550 RETURN 8999 DELETE 2 REMARK DELETE ACCOUNT FILE DELETE 3 REMARK DELETE ADDFILE CLOSE 5 REMARK CLOSE WORKFILE BEFORE RENAMING IT A=RENAME("G/L0F110.DAT","WORKFILE.DAT") REMARK WORKFILE BECOMES ACCOUNT FILE 9000 ACCOUNT.FILE.EXTENT%=OUTPUT.COUNT% CLOSE 4 OPEN "G/L0F130.DAT" AS 4 FILE.NO%=4 GOSUB .315 REMARK RE-WRITE ACCOUNT FILE EXTENT 9005 PRINT CLEAR.SCREEN$;"G/L ACCOUNT F/M LOADING MENU" CHAIN "G/L000" REMARK TERMINATE PROGRAM AND CHAIN TO THE MENU