home *** CD-ROM | disk | FTP | other *** search
/ Oakland CPM Archive / oakcpm.iso / cpmug / cpmug044.ark / G_L050.BAS < prev    next >
BASIC Source File  |  1985-02-10  |  12KB  |  378 lines

  1.  
  2.     REMARK    **************************************************************
  3.     REMARK    *    GENERAL LEDGER ACCOUNT FILE MAINTENANCE PROGRAM      *
  4.     REMARK    *       (G/L050)    VERS. OF 3.00 PM    8/8/79       *
  5.     REMARK    **************************************************************
  6.  
  7.     MASKA$="#####.#"
  8.     MASKB$=" #########.##"
  9.     MASKC$="######.#/##"
  10.     DIM D(7),G3(5),G2$(5)
  11. %INCLUDE CURSOR
  12.     DATA "REGULAR", "TITLE  ","TOTAL  ","HEADING","INCOME STMT. "
  13.     DATA "BALANCE SHEET","DB","CR","NO ","YES"
  14.     GOTO 6000
  15. %INCLUDE SUBS1
  16. %INCLUDE BINSERCH
  17. %INCLUDE GENINFO
  18. %INCLUDE ACCTFILE
  19. %INCLUDE G/L-INFO
  20.  
  21.  
  22.  
  23. 825    IF LINE.COUNT%<55 THEN RETURN                    REMARK    LINE PRINTER ROUTINE
  24.     PAGE.COUNT%=PAGE.COUNT%+1
  25.     PRINT CHR$(12);TAB((A1-LEN(G2$(1)))/2);G2$(1);TAB(A1);"DATE ";
  26.     X0=G3(1):GOSUB 680.5
  27.     PRINT
  28.     PRINT TAB((A1-LEN(X4$))/2);X4$;TAB(A1);"PAGE";PAGE.COUNT%
  29.     PRINT
  30.     PRINT "ACCOUNT";TAB(10);"NAME";
  31.     IF F2<>1 THEN \
  32.     PRINT TAB(46);"THIS MO    THIS YEAR     THIS QTR   PREV QTR-1";:\
  33.     PRINT"   PREV QTR-2   PREV QTR-3    LAST YEAR";
  34.     PRINT:PRINT 
  35.     LINE.COUNT%=6
  36.     RETURN
  37.  
  38.  
  39. 4100    X1=A1:GOSUB 210                            REMARK    SET CRT LOCATION TO A1
  40. 4120    RESTORE                                REMARK    DISPLAY LABEL #X0+1 FROM DATA TABLE
  41.                                     REMARK    AT CURRENT CRT LOCATION
  42.     FOR I%=1 TO X0+1
  43.     READ X0$
  44.     NEXT I%
  45.     PRINT X0$
  46.     RETURN 
  47.  
  48.  
  49. 4140    RESTORE                                REMARK    PRINT LABEL #X0+1 FROM DATA TABLE
  50.                                     REMARK    AT TAB POSITION X1
  51.     FOR I%=1 TO X0+1
  52.     READ X0$
  53.     NEXT I%
  54.     PRINT TAB(X1);X0$;
  55.     RETURN 
  56.  
  57.  
  58.                                     REMARK    ACCOUNT NO. & SUB-ACCOUNT NO. ENTRY ROUTINE
  59. 5000    X1=266:X2=7:X3=0:X4=99999.9:GOSUB 345                REMARK    ENTER ACCOUNT NUMBER
  60.     L1=X0
  61.     IF L1=0 THEN RETURN
  62.     IF L1<10000 THEN 5000
  63.     X1=274:X2=2:X3=0:X4=99:GOSUB 345                REMARK    ENTER SUB-ACCOUNT NUMBER
  64.     L2=X0
  65.                                     REMARK    LOCATE RECORD IN EITHER ACCOUNT FILE OR ADDFILE
  66.     RECORD.COUNT%=ACCOUNT.FILE.EXTENT%
  67.     Y2=2
  68.     K1=L1 + (L2/1000)
  69.     GOSUB 10.60                            REMARK    LOOK IN ACCOUNT FILE FOR RECORD
  70.     IF H=-1 THEN \                            REMARK    LOOK IN ADDFILE FOR RECORD
  71.         RECORD.COUNT%=ADDFILE.EXTENT%:\
  72.         Y2=3:\
  73.         GOSUB 10.60
  74.     RETURN 
  75.  
  76.  
  77. 5100    IF F%<1 OR F%>8 THEN 5300                    REMARK    BRANCH TO ENTER THE VALUE FOR FIELD F%
  78.     ON F% GOTO 5120,5140,5180,5200,5220,5240,5260,5280
  79.  
  80. 5120    X1=330:X2=31:X3=0:X4=0:GOSUB 345                REMARK    ENTER ACCOUNT NAME
  81.     L1$=X0$
  82.     RETURN 
  83.  
  84. 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
  85.     X1=401:X2=1:X3=1:X4=3:GOSUB 345                    REMARK    ENTER ACCOUNT TYPE
  86.     L3%=X0
  87. 5160    A1=403:X0=L3%:GOSUB 4100
  88.     RETURN 
  89.  
  90. 5180    X1=465:X2=1:X3=1:X4=2:GOSUB 345                    REMARK    ENTER REPORT TYPE
  91.     L4%=X0
  92.     A1=467:X0=L4%+3:GOSUB 4100
  93.     RETURN 
  94.  
  95. 5200    X1=529:X2=1:X3=1:X4=2:GOSUB 345                    REMARK    ENTER NORMAL BALANCE
  96.     L5%=X0
  97.     A1=531:X0=L5%+5:GOSUB 4100
  98.     RETURN 
  99.  
  100. 5220    X1=593:X2=1:X3=0:X4=9:GOSUB 345                    REMARK    ENTER TOTAL LEVEL
  101.     L6%=X0
  102.     RETURN 
  103.  
  104. 5240    X1=657:X2=1:X3=0:X4=9:GOSUB 345                    REMARK    ENTER EXTRA LINE ADVANCE
  105.     L7%=X0
  106.     RETURN 
  107.  
  108. 5260    X1=721:X2=1:X3=0:X4=1:GOSUB 345                    REMARK    ENTER WHETHER THIS IS A SALES ACCOUNT
  109.     L8%=X0
  110.     A1=723:X0=L8%+8:GOSUB 4100
  111.     RETURN 
  112.  
  113. 5280    X1=785:X2=1:X3=0:X4=1:GOSUB 345                    REMARK    ENTER WHETHER THIS IS ON THE SPECIAL REPORT
  114.     L9%=X0
  115.     A1=787:X0=L9%+8:GOSUB 4100
  116.     RETURN 
  117.  
  118. 5300    X1=64*F%-141:X2=13:X3=-999999999.99:X4=999999999.99:GOSUB 345    REMARK    ENTER ONE OF THE AMOUNT FIELDS
  119.     D(F%-8)=X0
  120.     RETURN 
  121.  
  122.  
  123.                                     REMARK    DISPLAY ACCOUNT DATA
  124. 5400    X1=265:GOSUB 210
  125.     PRINT USING MASKC$;L1;L2                    REMARK    DISPLAY ACCOUNT NUMBER FIELD
  126.     X1=11:GOSUB 215
  127.     PRINT L1$;TAB(64)                        REMARK    DISPLAY ACCOUNT NAME FIELD
  128.     X1=17:GOSUB 215
  129.     PRINT L3%;                            REMARK    DISPLAY ACCOUNT TYPE FIELD
  130.     X0=L3%:GOSUB 4120
  131.     X1=17:GOSUB 215
  132.     PRINT L4%;                            REMARK    DISPLAY REPORT TYPE FIELD
  133.     X0=L4%+3:GOSUB 4120
  134.     X1=17:GOSUB 215
  135.     PRINT L5%;                            REMARK    DISPLAY NORMAL BALANCE FIELD
  136.     X0=L5%+5:GOSUB 4120
  137.     X1=17:GOSUB 215
  138.     PRINT L6%                            REMARK    DISPLAY TOTAL LEVEL FIELD
  139.     X1=17:GOSUB 215
  140.     PRINT L7%                            REMARK    DISPLAY EXTRA LINE ADVANCE FIELD
  141.     X1=17:GOSUB 215
  142.     PRINT L8%;                            REMARK    DISPLAY SALES ACCOUNT FLAG FIELD
  143.     X0=L8%+8:GOSUB 4120
  144.     X1=17:GOSUB 215
  145.     PRINT L9%;                            REMARK    DISPLAY SPECIAL REPORT FLAG FIELD
  146.     X0=L9%+8:GOSUB 4120
  147.     X1=384:GOSUB 210
  148.     FOR I%=1 TO 7                            REMARK    DISPLAY AMOUNT FIELDS
  149.     X1=52:GOSUB 215
  150.     PRINT USING MASKB$;D(I%)
  151.     NEXT I%
  152.     RETURN 
  153.  
  154.  
  155.  
  156.                                     REMARK    MAIN PROGRAM BEGINS HERE
  157. 6000    OPEN "G/I0F010.DAT" AS 1,"G/L0F110.DAT" RECL 157 AS 2,\        REMARK    OPEN FILES
  158.     "G/L0F130.DAT" AS 4,"CRT" RECL 1100 AS 19
  159.     CREATE "ADDFILE.DAT" RECL 157 AS 3
  160.     FILE.NO%=1:GOSUB 700                        REMARK    RETRIEVE GENERAL INFORMATION
  161.     FILE.NO%=4:GOSUB .314                        REMARK    RETRIEVE EXTENT INFORMATION
  162. 6020    X0=4:GOSUB 260                            REMARK    DISPLAY CRT MASK
  163.     X2$="ENTER OPERATION CODE (0=EXIT; 1=ADD; 2=CHANGE/DELETE; 3=PRINT)"
  164.     X2=1:X3=0:X4=3:GOSUB 665                    REMARK    ENTER OPERATION CODE
  165.     C=X0
  166.     ON C+1 GOTO 6500,6040,6180,6280                    REMARK    BRANCH ON OPERATION CODE
  167.  
  168.  
  169. 6040    X0=4:GOSUB 260
  170.     X1=30:GOSUB 210                            REMARK    OPERATION IS ADD
  171.     PRINT "ADD    ";
  172. 6060    GOSUB 5000                            REMARK    ENTER ACCOUNT AND SUB-ACCOUNT NUMBERS
  173.     IF L1=0  THEN 6020
  174.     IF H>-1 AND VAR3=-1 THEN REUSE.DELETED.RECORD%=1:GOTO 6080
  175.     IF H<>-1 THEN X2$="ALREADY ON FILE":GOSUB 615:GOTO 6060
  176.  
  177. 6080    FOR F%=1 TO 8                            REMARK    ENTER DATA FOR NEW ACCOUNT
  178.     GOSUB 5100
  179.     NEXT F%
  180.     IF L3%=0 THEN \
  181.         FOR F%=9 TO 15:\
  182.         GOSUB 5100:\
  183.         NEXT F%\
  184.     ELSE\
  185.         FOR F%=1 TO 7:\
  186.         D(F%)=0:\
  187.         NEXT F%
  188.  
  189.     IF REUSE.DELETED.RECORD%=1 THEN \                REMARK    DELETED RECORD IN CORRECT FILE POSTITION: USE IT
  190.         FILE.NO%=Y2:\
  191.         RECORD.NO%=L:\
  192.         GOSUB 3550:\
  193.         REUSE.DELETED.RECORD%=0:\
  194.         GOTO 6240
  195.     IF L > ADDFILE.EXTENT% THEN 6100                REMARK    PLACE NEW RECORD IN CORRECT POSITION ON FILE
  196.     FOR I=ADDFILE.EXTENT% TO L STEP -1
  197.     READ #3,I;LINE X0$
  198.     PRINT USING "&";#3,I+1;X0$
  199.     NEXT I
  200. 6100    ADDFILE.EXTENT%=ADDFILE.EXTENT%+1
  201.     FILE.NO%=3:RECORD.NO%=L:GOSUB 3550
  202.     CLOSE 3                                REMARK    CLOSE AND RE-OPEN THE FILE FOR DISASTER PROTECTION
  203.     OPEN "ADDFILE.DAT" RECL 157 AS 3
  204.     GOTO 6240
  205.  
  206.  
  207. 6160    X2=3:X3=0:X4=0:X2$="ENTER DELETE CODE":GOSUB 665        REMARK    OPERATION IS DELETE
  208.     IF X0$<>"DEL"  THEN 6240
  209.     L3%=-1
  210.     FILE.NO%=Y2:RECORD.NO%=L:GOSUB 3550                REMARK    RESAVE DELETED RECORD
  211.     X2$="RECORD DELETED":GOSUB 615
  212.     X0=4:GOSUB 260
  213.     ON C GOTO 6040,6180                        REMARK    RETURN TO EITHER THE ADD OR CHANGE OPERATION
  214.  
  215. 6180    X0=4:GOSUB 260
  216.     X1=30:GOSUB 210                            REMARK    OPERATION IS CHANGE/DELETE
  217.     PRINT "CHANGE";
  218. 6200    GOSUB 5000                            REMARK    ENTER ACCOUNT AND SUB-ACCOUNT NUMBERS
  219.     IF L1=0  THEN 6020
  220.     IF H=-1 OR VAR3=-1 THEN X2$="NOT ON FILE":GOSUB 615:GOTO 6200
  221.     FILE.NO%=Y2:RECORD.NO%=L:GOSUB 3500                REMARK    RETRIEVE ACCOUNT DATA
  222. 6240    GOSUB 5400                            REMARK    DISPLAY ACCOUNT DATA
  223.                                     REMARK    ALLOW CHANGES TO DISPLAYED DATA
  224.     X2=2:X3=0:X4=99:X2$="ENTER FIELD TO CHANGE (99=DELETE)":GOSUB 665
  225.     F%=X0
  226.     IF F%=0 THEN 6260                        REMARK    NO MORE CHANGES
  227.     IF F%=99 THEN 6160                        REMARK    DELETE WAS SELECTED
  228.     IF F%>15 THEN 6240
  229.     GOSUB 5100                            REMARK    ENTER VALUE FOR FIELD TO CHANGE
  230.     GOTO 6240
  231.  
  232. 6260    GOSUB 3550                            REMARK    RESAVE RECORD ON FILE
  233.     ON C GOTO 6040,6180
  234.  
  235.  
  236. 6280    X0=4:GOSUB 260
  237.     X1=30:GOSUB 210                            REMARK    OPERATION IS PRINT
  238.     PRINT "PRINT "
  239. 6300    OLD.READ%=0
  240.     NEW.READ%=0
  241.     CONSOLE
  242.     X2$="ENTER REPORT TYPE (0=NONE; 1=DESCRIPTIONS; 2=AMOUNTS; 3=BOTH)"
  243.     X2=1:X3=0:X4=3:GOSUB 665                    REMARK    ENTER REPORT TYPE
  244.     F2=X0
  245.     IF F2=0 THEN 6020
  246.     PAGE.COUNT%=0                            REMARK    RESET PRINT VARIABLES
  247.     LINE.COUNT%=66
  248.     LPRINTER
  249.     GOSUB 6800                            REMARK    FIND FIRST RECORD ON ACCOUNT FILE
  250.     GOSUB 6810                            REMARK    FIND FIRST RECORD AN ADDFILE
  251.  
  252. 6320    IF OLD.READ% > ACCOUNT.FILE.EXTENT% \
  253.     AND NEW.READ% > ADDFILE.EXTENT% THEN 6300            REMARK    PRINTOUT COMPLETE
  254.     IF NEW.RECORD > OLD.RECORD OR NEW.READ% > ADDFILE.EXTENT% THEN \
  255.         FILE.NO%=2:RECORD.NO%=OLD.READ%:GOSUB 6400:\        REMARK    PRINT RECORD FROM ACCOUNT FILE
  256.         OLD.RECORD=100000:\
  257.         GOSUB 6800
  258.     IF NEW.RECORD=100000 THEN 6320
  259.     IF OLD.RECORD>NEW.RECORD OR OLD.READ%>ACCOUNT.FILE.EXTENT% THEN \
  260.         FILE.NO%=3:RECORD.NO%=NEW.READ%:GOSUB 6400:\        REMARK    PRINT RECORD FROM ADDFILE
  261.         NEW.RECORD=100000:\
  262.         GOSUB 6810
  263.     GOTO 6320
  264.  
  265.  
  266.                                     REMARK    - - - PRINT  ROUTINE - - -
  267. 6400    GOSUB 3500                            REMARK    RETRIEVE RECORD TO BE PRINTED
  268.     IF F2=2 AND L2<>0 THEN RETURN                    REMARK    ON "AMOUNTS ONLY" PRINTOUTS,
  269.                                     REMARK    INCLUDE ONLY REGULAR ACCOUNTS
  270.     A1=110:X4$="GENERAL LEDGER ACCOUNTS":GOSUB 825
  271.     PRINT USING MASKA$;L1;
  272.     PRINT TAB(9);L1$;
  273.     IF F2=2  THEN 6460
  274.     IF L2<>0 THEN PRINT TAB(41);"SUB";L2;
  275.     X0=L3%:X1=49:GOSUB 4140
  276.     X0=L4%+3:X1=61:GOSUB 4140
  277.     X0=L5%+5:X1=76:GOSUB 4140
  278.     PRINT TAB(80);"LEVEL";L6%;
  279.     IF L7%=9 THEN PRINT TAB(89);"TOP/PAGE";
  280.     IF L7%>0 AND L7%<9 THEN PRINT TAB(88);L7%;"LINES";
  281.     IF L8%=1 THEN PRINT TAB(99);"SALES ACCT";
  282.     IF L9%=1 THEN PRINT TAB(111);"SPECIAL REPT";
  283.     PRINT 
  284.     LINE.COUNT%=LINE.COUNT%+1
  285. 6460    IF L2<>0 OR F2=1 THEN RETURN
  286.     PRINT TAB(40);
  287.     PRINT USING MASKB$;D(1);D(2);D(3);D(4);D(5);D(6);D(7)
  288.     LINE.COUNT%=LINE.COUNT%+1
  289.     RETURN
  290.  
  291.  
  292.                                     REMARK    END OF MAINLINE CODE
  293.                                     REMARK    START OF MERGE ROUTINE
  294. 6500    PRINT CLEAR.SCREEN$:PRINT:PRINT"WORKING... DO NOT INTERRUPT"
  295.     IF ACCOUNT.FILE.EXTENT%=0 THEN\                    REMARK    NO PREVIOUS RECORDS - SWITCH FILE NAMES
  296.         DELETE 2:\
  297.         CLOSE 3:\
  298.         A=RENAME("G/L0F110.DAT","ADDFILE.DAT"):\
  299.         OUTPUT.COUNT%=ADDFILE.EXTENT%:\
  300.         GOTO 9000
  301.     CLOSE 1,2,3,19
  302.     OPEN "G/L0F110.DAT" RECL 157 AS 2,"ADDFILE.DAT" RECL 157 AS 3
  303.     CREATE "WORKFILE.DAT" RECL 157 AS 5
  304.     IF ADDFILE.EXTENT%>0 THEN 6550                    REMARK    IF NO NEW ACCOUNTS, GIVE OPTION TO REORGANIZE
  305.     PRINT CLEAR.SCREEN$
  306.     X2$="ENTER 'Y' TO REORGANIZE ACCOUNT FILE; ANY OTHER KEY TO EXIT PROGRAM"
  307.     X2=1:X3=0:X4=0:GOSUB 665
  308.     IF X0$<>"Y" THEN 9005
  309.     PRINT CURSOR.HOME$:PRINT:PRINT"WORKING... DO NOT INTERRUPT"
  310. 6550    GOSUB 6800                            REMARK    GET THE FIRST ACCOUNT FILE RECORD
  311.     GOSUB 6810                            REMARK    GET THE FIRST ADDFILE RECORD
  312. 6600    IF OLD.READ% > ACCOUNT.FILE.EXTENT% \                REMARK    WHEN BOTH ENDS-OF-FILE ARE REACHED,
  313.     AND NEW.READ% > ADDFILE.EXTENT% THEN 8999            REMARK    EXIT PROGRAM
  314.     IF NEW.RECORD > OLD.RECORD OR NEW.READ% > ADDFILE.EXTENT% THEN \
  315.         FILE.NO%=2:\
  316.         RECORD.NO%=OLD.READ%:\
  317.         GOSUB 3500:\                        REMARK    RETRIEVE ACCOUNT FILE RECORD
  318.         GOSUB 6900:\                        REMARK    WRITE RECORD TO WORKFILE
  319.         OLD.RECORD=100000:\
  320.         GOSUB 6800                        REMARK    READ THE NEXT RECORD FROM THE ACCOUNT FILE
  321.     IF NEW.RECORD=100000 THEN 6600
  322.     IF OLD.RECORD > NEW.RECORD OR OLD.READ% > ACCOUNT.FILE.EXTENT% THEN\
  323.         FILE.NO%=3:\
  324.         RECORD.NO%=NEW.READ%:\
  325.         GOSUB 3500:\                        REMARK    RETRIEVE ADDFILE RECORD
  326.         GOSUB 6900:\                        REMARK    WRITE RECORD TO WORKFILE
  327.         NEW.RECORD=100000:\
  328.         GOSUB 6810                        REMARK    READ THE NEXT RECORD FROM THE ADDFILE
  329.     GOTO 6600
  330.  
  331.  
  332.  
  333. 6800    IF END #2 THEN 6800.1                        REMARK    READ RECORD FROM ACCOUNT FILE
  334.     OLD.READ%=OLD.READ%+1
  335.     READ #2,OLD.READ%;VAR1,VAR2,VAR3
  336.     OLD.RECORD=VAR1 + VAR2/1000
  337.     IF VAR3=-1 THEN 6800                        REMARK    IF RECORD IS DELETED, READ NEXT RECORD
  338.     RETURN
  339. 6800.1    OLD.READ%=ACCOUNT.FILE.EXTENT%+1                REMARK    END OF FILE ENCOUNTERED
  340.     OLD.RECORD=100000
  341.     RETURN
  342.  
  343. 6810    IF END #3 THEN 6810.1                        REMARK    READ RECORD FROM ADDFILE
  344.     NEW.READ%=NEW.READ%+1
  345.     READ #3,NEW.READ%;VAR1,VAR2,VAR3
  346.     NEW.RECORD=VAR1 + VAR2/1000
  347.     IF VAR3=-1 THEN 6810                        REMARK    IF RECORD IS DELETED, READ NEXT RECORD
  348.     RETURN
  349. 6810.1    NEW.READ%=ADDFILE.EXTENT%+1                    REMARK    END OF FILE ENCOUNTERED
  350.     NEW.RECORD=100000
  351.     RETURN
  352.  
  353.  
  354. 6900    OUTPUT.COUNT%=OUTPUT.COUNT%+1                    REMARK    WRITE RECORD TO WORKFILE
  355.     FILE.NO%=5
  356.     RECORD.NO%=OUTPUT.COUNT%
  357.     GOSUB 3550
  358.     RETURN
  359.  
  360.  
  361.  
  362. 8999    DELETE 2                            REMARK    DELETE ACCOUNT FILE
  363.     DELETE 3                            REMARK    DELETE ADDFILE
  364.     CLOSE 5                                REMARK    CLOSE WORKFILE BEFORE RENAMING IT
  365.     A=RENAME("G/L0F110.DAT","WORKFILE.DAT")                REMARK    WORKFILE BECOMES ACCOUNT FILE
  366. 9000    ACCOUNT.FILE.EXTENT%=OUTPUT.COUNT%
  367.     CLOSE 4
  368.     OPEN "G/L0F130.DAT" AS 4
  369.     FILE.NO%=4
  370.     GOSUB .315                            REMARK    RE-WRITE ACCOUNT FILE EXTENT
  371. 9005    PRINT CLEAR.SCREEN$;"G/L ACCOUNT F/M LOADING MENU"
  372.     CHAIN "G/L000"                            REMARK    TERMINATE PROGRAM AND CHAIN TO THE MENU
  373.  
  374. TURN
  375.  
  376. 6810    IF END #3 THEN 6810.1                        REMARK    READ RECORD FROM ADDFILE
  377.     NEW.READ%=NEW.READ%+1
  378.     READ #3,NEW.READ%;VAR1,VAR2,VA