|
DataMuseum.dkPresents historical artifacts from the history of: Q1 computer |
This is an automatic "excavation" of a thematic subset of
See our Wiki for more about Q1 computer Excavated with: AutoArchaeologist - Free & Open Source Software. |
top - metrics - download
Length: 27571 (0x6bb3) Types: Q1_Text, reclen=79 Notes: q1file Names: »STAMNTA«
└─⟦934333717⟧ Bits:30008597 DDMQ1-0029_Demonstration_Disk_SOURCE_Single_Density_Sept_77 └─⟦this⟧ »STAMNTA«
/*DEMONSTRATION GENERAL LEDGER SYSTEM*/ /*MARCO*/ DCL 1 TRAN, 2 ACCT BINARY, 2 YEAR(13) BINARY, 2 MONTH(13) BINARY, 2 DAY(13) BINARY, 2 V#(13) BINARY, 2 V#1(13) BINARY, 2 AMT(13) FLOAT(9), 2 DES(13) CHAR(18); DCL TRANFL FILE; DCL NN CHAR(5); DCL TDAY CHAR(8), NG FLOAT(9), PDAY CHAR(8),N# CHAR(6), DAYY CHAR(8), DA(3) BINARY, N FLOAT(2), XN CHAR(2), NO1 FLOAT(9), ND FLOAT(3), REM FLOAT(2), CON(2) CHAR(1) INIT(' ','-'), YYAR BINARY, VOU CHAR(8), VO CHAR(8), XA FLOAT(3), VF FLOAT(8), XB FLOAT(3), XC FLOAT(3), B50 CHAR(49) INIT(' '), B10 CHAR(9) INIT(' '), X CHAR(3), Q FLOAT(1), A CHAR(1), B CHAR(1), C CHAR(1),Y FLOAT(2), D CHAR(1), E CHAR(1), FF CHAR(1), DR FLOAT(9), CR FLOAT(9), CUDR FLOAT(9), CUCR FLOAT(9), OPDR FLOAT(9), OPCR FLOAT(9), NEDR FLOAT(9), NECR FLOAT(9), CLCR FLOAT(9), CLDR FLOAT(9), NET FLOAT(9), CLBAL FLOAT(9); FAN: PROCEDURE(IYAR); DCL IYAR FLOAT(2), IQQ FLOAT(2); IQQ=2; IF IYAR=0 THEN GO TO REFAN; X=BööC; DR=X; X=DööEööFF; CR=X; IF V#(1)=DR & V#1(1)=CR THEN IQQ=1; REFAN: RETURN(IQQ); END; ROU: PROCEDURE; DCL STORE CHAR(4); STORE=100+V#(1); B=SUBSTR(STORE,2,1); C=SUBSTR(STORE,3,1); STORE=1000+V#1(1); D=SUBSTR(STORE,2,1); E=SUBSTR(STORE,3,1); FF=SUBSTR(STORE,4,1); RETURN; END; FUN: PROCEDURE(A1); DCL A1 CHAR(1); Q=2; A1='1'; RM: GET LIST(B,C,D,E,FF); REM=((A1*6)+(B*5)+(C*4)+(D*3)+(E*2)+FF); RS: IF REM<7 THEN GO TO REMAIN; REM=REM-7; GO TO RS; REMAIN:IF REM¬=0 THEN GO TO ERR; RT:Y=D*10+E;X=Y; ND=B*5+Y; ND=ND+1; Q=1; GO TO CDY; ERR: PUT FILE(DISPLAY) SKIP LIST('A/C NO. ERROR, TRY AGAIN'); GET SKIP LIST(X); Q=2; GO TO CDY; CDY: RETURN(Q); END; DATE: PROCEDURE(I1,I2,I3,DAT); DCL I1 BINARY, I2 BINARY, I3 BINARY, DAT CHAR(8); DAT=' / / '; INN=1; DA(1)=I1; DA(2)=I2; DA(3)=I3; DO IN=1 TO 3; N=DA(IN); XN=N; IF LENGTH(XN)=1 THEN XN='0'ööN; SUBSTR(DAT,INN,2)=XN; INN=INN+3; END; RETURN; END; NUMD: PROCEDURE(NE); DCL NE FLOAT(9); NM=1; NO1=NE; IF NO1>=0 THEN GO TO OKK; NM=2; NO1=NO1-NO1*2; OKK: PUT FILE(DISPLAY) EDIT(NO1)(P'ZZZZZZZ9V.99') (CON(NM))(A(1)); RETURN; END; NUM: PROCEDURE(NO); DCL NO FLOAT(9); NO1=NO; NM=1; IF NO1>=0 THEN GO TO OK; NM=2; NO1=NO1-NO1*2; OK: PUT LIST(' '); PUT EDIT(NO1)(P'ZZZZZZZZZ9V.99') (CON(NM))(A(2)); RETURN; END; SEEOF: PROCEDURE(FL); DCL FL(1) BINARY; FL(1)=FL(6); RETURN; END;ND=0; III=0; NEDR=0; NECR=0; CLDR=0; ASK: PUT FILE(DISPLAY) SKIP LIST('DATE (DAY MONTH YEAR): '); GET LIST(DAY(1),DAY(2),DAY(3)); IF DAY(1)>31 THEN GO TO ASK; IF DAY(2)>12 THEN GO TO ASK; CALL DATE(DAY(1),DAY(2),DAY(3),TDAY); OPEN TRANFL; READ FILE (TRANFL) INTO (TRAN); IF ACCT¬=0 THEN GO TO ST; IF SUBSTR(DES(1),1,8)¬=' TRANFL' THEN GO TO ST; CALL DATE(DAY(2),MONTH(2),YEAR(2),PDAY); MAIN: PUT FILE(DISPLAY) SKIP LIST('A)TRIAL BALANCE,'); PUT FILE(DISPLAY) LIST(' B)LEDGER PRINT OUT,'); PUT FILE(DISPLAY) LIST(' C)ENQUIRY OR'); PUT FILE(DISPLAY) LIST(' D)BALANCE SHEET:'); GET SKIP LIST(X); IF SUBSTR(X,1,1)='A' THEN GO TO TRIAL; IF SUBSTR(X,1,1)='B' THEN GO TO LED; IF SUBSTR(X,1,1)='C' THEN GO TO ENQ; IF SUBSTR(X,1,1)='D' THEN GO TO BS; IF SUBSTR(X,1,3)='END' THEN GO TO STT; GO TO MAIN; TRIAL: OPEN TRANFL; READ FILE(TRANFL) INTO (TRAN); CUDR=0; CUCR=0; OPDR=0; OPCR=0; CLCR=0; CLCR=0; MPG=0; CLDR=0; NEDR=0; NECR=0; HEAD: MPG=MPG+1; K=56; PUT SKIP EDIT(B50)(A(50)) (B10)(A(10)); PUT LIST(' A B C INT''L CORP'); DO I=1 TO 200; END; PUT SKIP(2) EDIT(B50)(A(50))(B10)(A(10)); PUT EDIT(' TRIAL BALANCE')(A(20)); DO I=1 TO 200; END; PUT SKIP(2); PUT LIST(' '); PUT LIST(' DATE: '); PUT EDIT(TDAY)(A(8))(B10)(A(10))(B10)(A(10))(B10)(A(10)); PUT LIST('PERIOD ENDING: '); PUT EDIT(PDAY)(A(8))(B10)(A(10))(B10)(A(10))(B10)(A(10)); PUT LIST('PAGE: '); PUT EDIT (MPG)(P'Z9'); XA=2; PUT SKIP(XA); PUT SKIP LIST('ACCT# DESCRIPTION'); PUT EDIT(B10)(A(10)); PUT LIST(' OPENING BALANCE'); PUT LIST(' CURRENT DEBIT CURRENT CREDIT'); PUT LIST(' CURRENT NET CLOSING BALANCE'); XA=2; PUT SKIP(XA); CALL SEEOF(TRANFL); LAST=UNSPEC(TRANFL)-1; OPEN TRANFL; READ FILE(TRANFL) INTO (TRAN); AGA: IF UNSPEC(TRANFL)>LAST THEN GO TO FIN; READ FILE(TRANFL) INTO (TRAN); IF YEAR(1)=0 THEN GO TO AGA; DR=0; CR=0; NET=0; CLBAL=AMT(1); M=DAY(1)-1; IF M=1 THEN GO TO EXIT; DO I=2 TO M; IF AMT(I)>0 THEN DR=DR+AMT(I); IF AMT(I)<0 THEN CR=CR-AMT(I); END; NET=DR-CR; CLBAL=AMT(1)+NET; CUDR=CUDR+DR; CUCR=CUCR+CR; IF NET>0 THEN NEDR=NEDR+NET;ELSE NECR=NECR+NET; EXIT: IF AMT(1)>0 THEN OPDR=OPDR+AMT(1); IF AMT(1)<0 THEN OPCR=OPCR+AMT(1); IF CLBAL>0 THEN CLDR=CLDR+CLBAL; IF CLBAL<0 THEN CLCR=CLCR+CLBAL; CALL ROU; PUT SKIP LIST('1'); NN=BööCööDööEööFF;PUT EDIT(NN)(A(6)); PUT LIST(' '); PUT EDIT(DES(1))(A(19)); NG=AMT(1); CALL NUM(NG); CALL NUM(DR);CALL NUM(CR); CALL NUM(NET);CALL NUM(CLBAL); K=K-1; IF K<13 THEN GO TO HEAD; GO TO AGA; FIN: XA=2; PUT SKIP(XA); PUT SKIP EDIT(B10)(A(10)); PUT LIST(' '); PUT LIST('C/F '); CALL NUM(OPDR); CALL NUM(CUDR); CALL NUM(CUCR); CALL NUM(NEDR); CALL NUM(CLDR); PUT SKIP EDIT(B10)(A(10))(B10)(A(10))(B10)(A(10)); PUT LIST(' '); CALL NUM(OPCR); PUT EDIT(B10)(A(10))(B10)(A(10))(B10)(A(10))(B10)(A(10)); PUT LIST(' '); CALL NUM(NECR); CALL NUM(CLCR); K=K-4; PUT SKIP(K); GO TO MAIN; LED: PUT FILE(DISPLAY) SKIP LIST('LEDGER PRINTOUT ACCOUNT NO.: '); GET SKIP LIST(A); IF A='E' THEN GO TO MAIN; IF A¬='1' THEN GO TO MAIN; IF FUN(A)¬=1 THEN GO TO LED; III=ND-1; UNSPEC(TRANFL)=III;READ FILE(TRANFL) INTO(TRAN); IF FAN(YEAR(1))¬=1 THEN PUT SKIP LIST(YEAR(1)); DR=0; CR=0; CLBAL=AMT(1); CALL ROU; PUT SKIP EDIT(B50)(A(50))(B10)(A(10)); PUT LIST(' A B C INT''L CORP'); PUT SKIP(2) EDIT(B10)(A(10))(B50)(A(50)); PUT LIST(' LEDGER PRINTOUT'); PUT SKIP(2) EDIT(B10)(A(10)); PUT LIST(' DATE: '); PUT EDIT(TDAY)(A(9))(B10)(A(10))(B10)(A(10))(B10)(A(10)); PUT LIST('PERIOD ENDING: '); PUT EDIT(PDAY)(A(9))(B10)(A(10))(B10)(A(10))(B10)(A(10)); PUT LIST('PAGE:1'); PUT SKIP(2)EDIT(B10)(A(10)); PUT LIST('ACCOUNT NO.: ','1'); NN=BööCööDööEööFF; PUT EDIT(NN)(A(6)); PUT LIST(' '); PUT LIST('ACCOUNT NAME: '); PUT EDIT(DES(1))(A(19)); PUT SKIP(2) EDIT (B10)(A(10)); PUT LIST('DATE VOUCHER '); PUT LIST(' DESCRIPTION '); PUT EDIT(B10)(A(10))(B10)(A(10)); PUT LIST(' BALANCE '); PUT EDIT(B10)(A(10)); PUT LIST('DEBIT '); PUT EDIT(B10)(A(10)); PUT LIST('CREDIT'); XA=2; PUT SKIP(XA); PUT SKIP EDIT(B50)(A(50)); PUT LIST(' B/F');NG=AMT(1); CALL NUM(NG); M=DAY(1)-1; IF M=1 THEN GO TO ENL; XA=2; PUT SKIP(XA); DO I=2 TO M; CALL DATE(DAY(I), MONTH(I),YEAR(I),DAYY); VOU='0'ööVOU; VF=V#(I); VF=VF*250+V#1(I); VO=VF; LL=LENGTH(VO); MM=9-LL; SUBSTR(VOU,MM,LL)=VO; PUT SKIP EDIT(B10)(A(10))(B10)(A(10)); PUT SKIP LIST(' '); PUT EDIT(DAYY)(A(9)); PUT LIST(' '); PUT EDIT(VOU)(A(9)); PUT LIST(' '); PUT EDIT(DES(I))(A(19))(B10)(A(10))(B10)(A(10))(B10)(A(10)); PUT EDIT(B10)(A(10)); IF AMT(I)>0 THEN DR=DR+AMT(I); IF AMT(I)<0 THEN DO JK=1 TO 1; CR=CR-AMT(I); PUT EDIT(B10)(A(10))(B10)(A(10)); PUT LIST(' '); AMT(I)=AMT(I)-AMT(I)*2; END; PUT EDIT(AMT(I))(P'ZZZZZZZ9V.99'); END; CLBAL=AMT(1)+DR-CR; GO TO CF; ENL: PUT SKIP(2) EDIT(B50)(A(50)); PUT LIST(' NO TRANSACTION '); CF: PUT SKIP(2) EDIT(B50)(A(50)); PUT LIST(' C/F'); CALL NUM(CLBAL); K=52-M; PUT SKIP(K); GO TO LED; ENQ: PUT FILE(DISPLAY) SKIP LIST('ENQUIRE ACCOUNT NO.: '); GET SKIP LIST(A); IF SUBSTR(A,1,1)='E' THEN GO TO MAIN; IF FUN(A)¬=1 THEN GO TO ENQ; III=ND-1; UNSPEC(TRANFL)=III; READ FILE(TRANFL) INTO(TRAN); IF FAN(YEAR(1))¬=1 THEN GO TO ENQ; M=DAY(1)-1; DR=0; CR=0; CLBAL=AMT(1); IF M=1 THEN GO TO NOQ; DO I=2 TO M; IF AMT(I)>0 THEN DR=DR+AMT(I); IF AMT(I)<0 THEN CR=CR-AMT(I); END; CLBAL=AMT(1)+DR-CR; NOQ: PUT FILE(DISPLAY) SKIP LIST('ACCOUNT NO : ',A,B,C,D,E); PUT FILE(DISPLAY) EDIT (FF)(A(13))('DESCRIPTION')(A(15))(':')(A(2)) (DES(1))(A(20)); PUT FILE(DISPLAY) LIST('OPENING BALANCE: '); NG=AMT(1);CALL NUMD(NG); PUT FILE(DISPLAY) LIST(' CURRENT DEBIT : '); CALL NUMD(DR); PUT FILE(DISPLAY) LIST(' CURRENT CREDIT : '); CALL NUMD(CR); PUT FILE(DISPLAY) LIST(' CLOSING BALANCE: '); CALL NUMD(CLBAL); GET LIST(X); IF SUBSTR(X,1,3)='END' THEN GO TO MAIN; IF SUBSTR(X,1,1)='P' THEN GO TO PENQ;GO TO ENQ; PENQ: CALL ROU; PUT SKIP LIST('1'); NN=BööCööDööEööFF; PUT EDIT(NN)(A(8)); PUT LIST(' '); PUT EDIT(DES(1))(A(18)); PUT LIST(' OPENING BALANCE: '); NG=AMT(1); CALL NUM(NG); PUT SKIP EDIT(B10)(A(10))(B10)(A(10))(B10)(A(10)); PUT LIST(' CURRENT DEBIT : '); CALL NUM(DR); PUT SKIP EDIT(B10)(A(10))(B10)(A(10))(B10)(A(10)); PUT LIST(' CURRENT CREDIT : '); CALL NUM(CR); PUT SKIP EDIT(B10)(A(10))(B10)(A(10))(B10)(A(10)); PUT LIST(' CLOSING BALANCE: '); CALL NUM(CLBAL); XA=2; PUT SKIP(XA); GO TO ENQ; BS: CUDR=2; III=CUDR-1; UNSPEC(TRANFL)=III; OPDR=0; OPCR=0; PUT SKIP EDIT(B10)(A(10))(B10)(A(10))(B10)(A(10)); PUT LIST(' A B C INT''L CORP'); PUT SKIP(2)EDIT(B10)(A(10))(B10)(A(10))(B10)(A(10)); PUT LIST(' BALANCE SHEET'); PUT SKIP(2) LIST(' DATE: '); PUT EDIT(TDAY)(A(9))(B10)(A(10)); PUT LIST(' PERIOD ENDING: '); PUT EDIT(PDAY)(A(9)); PUT SKIP(3) LIST(' DESCRIPTION '); PUT EDIT(B10)(A(10))(B10)(A(10)); PUT LIST('ASSETS'); PUT EDIT(B10)(A(10)); PUT LIST(' LIABILITIES'); XB=3; PUT SKIP(XB); AA: READ FILE(TRANFL) INTO(TRAN); IF YEAR(1)=0 THEN GO TO AA; IF V#(1)=40 THEN GO TO ENBS; CLBAL=AMT(1); M=DAY(1)-1; IF M=1 THEN GO TO ENPA; DR=0; CR=0; DO I=2 TO M; IF AMT(I)>0 THEN DR=DR+AMT(I); IF AMT(I)<0 THEN CR=CR-AMT(I); END; CLBAL=AMT(1)+DR-CR; ENPA: IF CLBAL>0 THEN OPDR=OPDR+CLBAL; IF CLBAL<0 THEN OPCR=OPCR-CLBAL; PUT SKIP LIST(' '); PUT EDIT(DES(1))(A(19)); IF CLBAL<0 THEN DO I=1 TO 1; CLBAL=CLBAL-CLBAL*2;PUT EDIT(B10)(A(10))(B10)(A(10)); PUT LIST(' '); END; PUT EDIT(B10)(A(10))(CLBAL)(P'ZZZZZZZ9V.99'); GO TO AA; ENBS: XA=2; PUT SKIP(XA); DR=0; CR=0; PUT SKIP EDIT(B10)(A(10))(B10)(A(10))(B10)(A(10)); PUT LIST(' '); PUT EDIT(OPDR)(P'ZZZZZZZ9V.99'); PUT LIST(' '); PUT EDIT(B10)(A(10))(OPCR)(P'ZZZZZZZ9V.99'); CUDR=OPDR-OPCR; IF CUDR>0 THEN DR=CUDR; IF CUDR<0 THEN CR=CUDR-CUDR*2; OPDR=OPDR+CR; OPCR=OPCR+DR; PUT SKIP(2) LIST(' TO P & L ACCOUNT'); DR=CUDR; IF CUDR>0 THEN CUDR=CUDR-CUDR*2; IF DR>0 THEN DO I=1 TO 1; PUT EDIT(B10)(A(10))(B10)(A(10)); PUT LIST(' '); END; PUT EDIT(B10)(A(10)) (CUDR)(P'ZZZZZZZZ9V.99'); PUT SKIP(2) EDIT(B10)(A(10))(B10)(A(10))(B10)(A(10)); PUT LIST(' '); PUT EDIT(OPDR)(P'ZZZZZZZ9V.99'); PUT LIST(' '); PUT EDIT(B10)(A(10)) (OPCR)(P'ZZZZZZZZ9V.99'); XC=39; PUT SKIP(XC); GO TO MAIN; STT: PUT FILE(DISPLAY) SKIP LIST('READY FOR MONTHLY UPDATE? '); GET SKIP LIST(X); IF SUBSTR(X,1,1)='Y' THEN GO TO STS; IF SUBSTR(X,1,1)='E' THEN GO TO ST; GO TO STT; STS: OPEN TRANFL; CALL SEEOF(TRANFL); LAST=UNSPEC(TRANFL)-1; OPEN TRANFL; READ FILE(TRANFL) INTO (TRAN); BB: IF UNSPEC(TRANFL)>LAST THEN GO TO ST; READ FILE(TRANFL) INTO (TRAN); IF YEAR(1)=0 THEN GO TO BB; IF MONTH(1)=0 & DAY(1)=2 THEN GO TO BB; M=DAY(1)-1; DR=0; CR=0; DO I=2 TO M; IF AMT(I)>0 THEN DR=DR+AMT(I); IF AMT(I)<0 THEN CR=CR-AMT(I); END; AMT(1)=AMT(1)+DR-CR; DAY(1)=2; MONTH(1)=0; REWRITE FILE(TRANFL) FROM (TRAN); GO TO BB; ST: END;