|
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: 47084 (0xb7ec) Types: Q1_Text, reclen=79 Notes: q1file Names: »V21«
└─⟦256585323⟧ Bits:30008759 50001598 └─⟦this⟧ »V21«
/* V21 ÄR EN RUTIN FÖR INMATNING AV KONTERINGAR KONTERINGARNA ÄR ORDNADE UNDER VERNUMMER INKNAPPNING OCH ÄNDRING HANDHAS AV SAMMA RUTIN EN AUTOMATISK INSERT & DELETE SER TILL ATT KONTERINGARNA ALLTID LIGGER SAMMLADE PÅ FILEN VERSION 1:5 Nya konton för PG 0011 och MOMS 0311. 800701. PRG JÅ 780829 */ DCL 1 HJSTR, 2 VERNR BINARY, 2 LUFT CHAR(58); /* 60 BYTES */ DCL 1 AREA, /* ARBETSAREA FÖR KONTON */ 2 POST3(110) CHAR(34); /* 3740 BYTES */ DCL PF POINTER, 1 FSTR BASED(PF), /* KONTOPOST */ 2 KONTOF FIXED(11), /* KONTONUMMER 11 SIFRIGT */ 2 VERNRF FIXED(5), /* VERNUMMER */ 2 DATUMF FIXED(5), /* BOKFÖRINGSDATUM */ 2 PDATUMF FIXED(5), /* PERDATUM BASÅR 78 */ 2 BELOPPF FIXED(11), /* BELOPP I ÖREN */ 2 TEXTF CHAR(13), /* TEXT */ RECLN BINARY INIT(34); /* FSTR's REKODLÄNGD */ /* 34 BYTES */ DCL PD POINTER, 1 DAREA BASED(PD), /* PAKNINGSSTRUKTUR */ 2 POST1 CHAR(34), 2 POST2 CHAR(34); /* 68 BYTES */ DCL 1 DUMMY, /* INSERT & DELIT AREA */ 2 POST4(100) CHAR(34); /* 3400 BYTES */ DCL KFIL FILE, /* HJÄLPFIL INEHÅLLER VERNR */ TRANSFIL FILE; /* TRANAKTIONSFIL INEHÅLLER KONTERINGAR */ DCL P POINTER, D BASED(P) CHAR(6), /* ANVÄNDES AV DATCHECK */ DATUM CHAR(6), /* DAGENSDATUM */ ANTKONT BINARY, /* ANTAL KONT PÅ AVERNR */ AKTKONT BINARY, /* KONTERING SOM BEHANDLAS NUMMER I AREA */ PAREA BINARY, /* ADRESSEN FÖR AREA PROGRAMKONSTANT */ WFLAGG BINARY, /* WRITE-FLAGGA 1 OM SKRIVNING */ ADDKONT BINARY, /* ANTAL NYA KONTERINGAR PÅ AVERNR */ REKTOT BINARY, /* ANTAL REKODS I TRANSFIL */ AVERNR FIXED(5), /* AKTUELT VERNUMMER */ AREC BINARY, /* FÖRSTA KONTERING's (MED AVERNR) RECNUMMER */ RCODE BINARY, /* RETURKOD FRÅN RE WR */ DRAD BINARY, /* AKTUEL RAD PÅ DISPLAY-2 */ FRTYP BINARY, /* FRÅGA NUMMER */ KEYT BINARY, /* SENAST REG. FUNKTIONSTANGGENT */ RBELOPP CHAR(15), /* REDIGERAT BELOPP */ RKONTO CHAR(15), /* REDIGERAT KONTO */ KONTO FIXED(11), BELOPP FIXED(11), PERDAG FIXED(6), BUFF CHAR(25), ACK1 FIXED(13), ACK2 FIXED(13), BAS BINARY, PDATUM FIXED(6), FX5 FIXED(5), /* DAGENS DATUM MED 78 SOM BASÅR FÖR PERDAGINIT */ FX6 FIXED(6), FX13 FIXED(13), P1 CHAR(8) INIT(' 999999'),/* PIKTURE FÖR PERDAG */ P2 CHAR(14) INIT('---------9.99V'), P3 CHAR(15) INIT('-------------9V'), T2 CHAR(2), T3 CHAR(3), T5 CHAR(5), T9 CHAR(9), T10 CHAR(10), TT11 CHAR(11), T13 CHAR(13), T16 CHAR(16), T25 CHAR(25), PERARMAX CHAR (2), PERARMIN CHAR (2), DATKOLL BINARY, PP POINTER, 1 STR BASED(PP), 2 X CHAR(2), 2 Y CHAR(2), 2 FIRMA CHAR(1), VERSION CHAR(47) INIT(' V21 Version 1:5 800701'); BELRED:PROC; IF BELOPPF>=100 ö BELOPPF<=-100 THEN DO; T13=BELOPPF; JJ=LENGTH(T13); RBELOPP=' :-- '; IF SUBSTR(T13,JJ-1,2)¬='00' THEN SUBSTR(RBELOPP,13,2)=SUBSTR(T13,JJ-1,2); SUBSTR(RBELOPP,14-JJ,JJ-2)=SUBSTR(T13,1,JJ-2); RETURN; END; IF BELOPPF=0 THEN DO; RBELOPP=' 0:-- '; RETURN; END; T13=BELOPPF/100; JJ=LENGTH(T13); JJJ=INDEX(T13,'.'); RBELOPP=' :00 '; SUBSTR(RBELOPP,13,JJ-JJJ)=SUBSTR(T13,JJJ+1,JJ-JJJ); SUBSTR(RBELOPP,13-JJJ,JJJ-1)=SUBSTR(T13,1,JJJ-1); RETURN; END; KONTORED:PROC; DCL T11 CHAR(11); T11=KONTOF; RKONTO=' ' CAT SUBSTR(T11,1,5) CAT '.---.---'; IF SUBSTR(T11,6,3)¬='000' THEN SUBSTR(RKONTO,9,3)=SUBSTR(T11,6,3); IF SUBSTR(T11,9,3)¬='000' THEN SUBSTR(RKONTO,13,3)=SUBSTR(T11,9,3); RETURN; END; DELIT:PROC; IF ANTKONT=1 THEN DO; CALL OUTPUT(1,6); RETURN; END; IF AKTKONT > ANTKONT THEN DO; AKTKONT = ANTKONT; UNSPEC (PF) = PAREA + (ANTKONT - 1) * RECLN; END; ACK1=ACK1-BELOPPF; ACK2=ACK2-KONTOF; ANTKONT=ANTKONT-1; DO I=AKTKONT-1 TO ANTKONT; UNSPEC(PD)=PAREA+I*RECLN; POST1=POST2; END; WFLAGG=1; ADDKONT=ADDKONT-1; J=34; CALL MOVEBUFF(J); PUT FILE(D) EDIT(ACK1)(PP2); RETURN; END; DAGTEST:PROC; PUT FILE(D) SKIP EDIT(VERSION)(A(47)); OPEN TRANSFIL; CALL SEOF(TRANSFIL); REKTOT=UNSPEC(TRANSFIL); OPEN TRANSFIL; PUT FILE(D) EDIT(' TRANSAKTIONERNA KOMMER ATT DATERAS')(A(37)) (DATUM)(A(12))('TRANSAKTIONSFILEN INNEHÅLLER')(A(29)) (REKTOT)(P'----9')(' POSTER')(A(13)) ('ÄR OVANSTÅENDE KORREKT? "J" ELLER "N"')(A(44)); GET SKIP LIST(T2); IF T2¬='J ' THEN DO; D=DATUM; CALL PLOAD('Q '); END; OPEN KFIL; READ FILE(KFIL) INTO(HJSTR); FX5=DATUM-780000; RETURN; END; HOPPA_TILL_Q:PROC; D=DATUM; REWRITE FILE(KFIL) FROM(HJSTR); CALL PLOAD('Q '); RETURN; END; VERIN:PROC; AVERNR = VERNR + 1; DO I = 0 TO 105; UNSPEC (PF) = PAREA + I * 34; KONTOF = 0; VERNRF = AVERNR; DATUMF = FX5; PDATUMF = FX5; BELOPPF = 0; END; V1: PUT FILE (D) SKIP EDIT (' VER.NR:') (A(10)); IF REKTOT > 980 THEN DO; CALL OUTPUT (1,6); IF RECTOT > 1020 THEN DO; DO J=1 TO 300;END; CALL OUTPUT(1,6); DO J=1 TO 300;END; CALL OUTPUT(1,6); END; PUT FILE(D) EDIT('ANTAL KONTERINGAR I TRANSFIL:')(X(37),A(43)) (REKTOT)(A); J=10; CALL MOVEBUFF(J); END; GET SKIP LIST(T5); IF T5=' ' THEN CALL HOPPA_TILL_Q; AVERNR=T5; ACK1=0; ACK2=0; IF AVERNR>VERNR+1 THEN DO; PUT FILE(D) SKIP EDIT(' VERIFIKATIONSNUMRET')(A(22)) (AVERNR)(P'----9')(' GODKÄNNES EJ')(A(22)) ('SENASTE INRAPPORTERADE VER.NR:')(A(30))(VERNR)(P'----9'); ; GET SKIP LIST(''); GO TO V1; END; IF AVERNR=VERNR+1 THEN DO; ANTKONT=0; AREC=REKTOT; GO TO V3; END; IF REKTOT<1 THEN GO TO V1; OPEN TRANSFIL; ON ERROR GO TO V1; READ KEY(AVERNR) FILE(TRANSFIL) INTO(FSTR) KEYTO(VERNRF); UNSPEC(TRANSFIL)=UNSPEC(TRANSFIL)-1; AREC=UNSPEC(TRANSFIL); I=REKTOT-AREC; IF I>100 THEN I=100; CALL RD(TRANSFIL,AREA,I,RCODE); IF RCODE¬=0 THEN PUT SKIP LIST('LÄSFEL',ONCODE); DO J=0 TO I-1; UNSPEC(PF)=PAREA+J*RECLN; IF VERNRF¬=AVERNR THEN GO TO V2; ACK1=ACK1+BELOPPF; ACK2=ACK2+KONTOF; END; V2: ANTKONT=J; DO I = ANTKONT TO 105; UNSPEC (PF) = PAREA + I * 34; KONTOF = 0; VERNRF = AVERNR; DATUMF = FX5; PDATUMF = FX5; BELOPP = 0; END; V3: AKTKONT=1; ADDKONT=0; WFLAGG=0; PUT FILE(D) EDIT(AVERNR)(A(9))('SID: SALDO:')(A(28)) (' KONTO UKTO KS PERDAG BELOPP')(A); RETURN; END; DISPPUT:PROC; D1: I=(AKTKONT-1)/10; IF I>=9 THEN CALL OUTPUT(1,6); IF I=10 THEN DO; IF KEYT=22 THEN AKTKONT=100; ELSE AKTKONT=1; DO J=1 TO 400;END; CALL OUTPUT(1,6); GO TO D1; END; J=24; CALL MOVEBUFF(J); PUT FILE(D) EDIT(I+1)(A); II=ANTKONT-10*I; IF II>9 THEN II=10; J=94; CALL MOVEBUFF(J); L=10; DO J=I*10 TO I*10+II-1; UNSPEC(PF)=PAREA+J*RECLN; CALL KONTORED; CALL BELRED; PUT FILE(D) EDIT(RKONTO)(A(15))(PDATUMF+780000)(PP1)(RBELOPP)(A(24)); L=L-1; END; DO J=1 TO L; PUT FILE(D) EDIT(' ')(A(47)); END; DRAD=(AKTKONT-1)/10; DRAD=AKTKONT-10*DRAD; FRTYP=1; RETURN; END; FRAEGA:PROC; IF FRTYP=1 THEN DO; UNSPEC(PF)=PAREA+(AKTKONT-1)*RECLN; J=(DRAD+1)*47; CALL MOVEBUFF(J); IF AKTKONT>ANTKONT THEN RETURN; CALL KONTORED; CALL TYPIST(RKONTO,15); CALL TYPIST('┣10┫',1); RETURN; END; IF FRTYP=2 THEN DO; T9=' ┣10┫'; SUBSTR(T9,3,6)=PDATUMF+780000; CALL TYPIST(T9,9); RETURN; END; IF FRTYP=3 THEN DO; IF AKTKONT>ANTKONT THEN RETURN; CALL BELRED; T16=RBELOPP CAT '┣10┫'; CALL TYPIST(T16,16); RETURN; END; PUT SKIP LIST('FEL FRTYP',FRTYP); RETURN; END; POSTFLYT:PROC; UNSPEC(TRANSFIL)=BAS; J=J-I; CALL RD(TRANSFIL,DUMMY,I,RCODE); IF RCODE¬=0 THEN PUT SKIP LIST('LÄSFEL I PROC POST',ONCODE); UNSPEC(TRANSFIL)=BAS+ADDKONT; CALL WR(TRANSFIL,DUMMY,I,RCODE); IF RCODE¬=0 THEN PUT SKIP LIST('SKRIVFEL I PROC POST',ONCODE); RETURN; END; FILIN:PROC; J=REKTOT-AREC-ANTKONT+ADDKONT; K=0; BAS=REKTOT; F1: I=J; IF I>100 THEN I=100; BAS=BAS-I; CALL POSTFLYT; IF K=0 THEN DO; CLOSE TRANSFIL; OPEN TRANSFIL; K=1; END; IF J¬=0 THEN GO TO F1; OPEN TRANSFIL; CALL SEOF(TRANSFIL); REKTOT=UNSPEC(TRANSFIL); RETURN; END; FILUT:PROC; BAS=AREC+ANTKONT-ADDKONT; J=REKTOT-BAS; K=1; F2: I=J; IF I>100 THEN I=100; CALL POSTFLYT; BAS=BAS+I; IF J¬=0 THEN GO TO F2; CLOSE TRANSFIL; OPEN TRANSFIL; CALL SEOF(TRANSFIL); REKTOT=UNSPEC(TRANSFIL); RETURN; END; GO TO START; SVAR: IF FRTYP=1 THEN DO; IF KEYT=5 THEN KONTO=FIRMA*10000000000+0311000000; /* K1 = MOMS */ IF KEYT=6 THEN KONTO=FIRMA*10000000000+0011000000; /* K2 = PG */ IF (KEYT=5) ö (KEYT=6) THEN GO TO S1; J=1; IF SUBSTR(BUFF,1,2)=' ' THEN J=3; KONTO=SUBSTR(BUFF,J,5); KONTO=KONTO*1000; IF INDEX('0123456789',SUBSTR(BUFF,J+6,1))¬=0 THEN DO; KONTO=KONTO+SUBSTR(BUFF,J+6,3); J=J+3; END; IF SUBSTR(BUFF,J+6,1)='-' THEN J=J+3; KONTO=KONTO*1000; IF INDEX('0123456789',SUBSTR(BUFF,J+7,1))¬=0 THEN DO; KONTO=KONTO+SUBSTR(BUFF,J+7,3); END; S1: TT11=KONTO; IF SUBSTR(TT11,1,1)¬=FIRMA THEN GO TO L3; IF KONTOF¬=KONTO THEN DO; ACK2=ACK2-KONTOF+KONTO; KONTOF=KONTO; WFLAGG=1; END; CALL KONTORED; PUT FILE(D) EDIT(RKONTO)(A(15)); END; IF FRTYP=2 THEN DO; IF SUBSTR(BUFF,1,2)¬=' ' THEN J=1; ELSE J=3; FX6=SUBSTR(BUFF,J,6); IF FX6<700000 ö FX6>990000 THEN GO TO S3; DATKOLL = J; IF SUBSTR (BUFF,DATKOLL,2) > PERARMAX THEN GO TO S3; IF SUBSTR (BUFF,DATKOLL,2) < PERARMIN THEN GO TO S3; IF SUBSTR (BUFF,DATKOLL+2,2) > '12' THEN GO TO S3; IF SUBSTR (BUFF,DATKOLL+2,2) < '01' THEN GO TO S3; IF SUBSTR (BUFF,DATKOLL+4,2) > '31' THEN GO TO S3; IF SUBSTR (BUFF,DATKOLL+4,2) < '01' THEN GO TO S3; PUT FILE(D) EDIT(FX6)(PP1); PDATUM=FX6-780000; IF PDATUM¬=PDATUMF THEN DO; PDATUMF=PDATUM; WFLAGG=1; END; END; IF FRTYP=3 THEN DO; IF KEYT¬=138 & KEYT¬=139 THEN DO; BELOPP=BELOPPF; GO TO S2; END; IF SUBSTR(BUFF,12,1)=':' THEN DO; IF SUBSTR(BUFF,13,1)='-' THEN DO; SUBSTR(BUFF,12,2)='00'; END; ELSE DO; T2=SUBSTR(BUFF,13,2); SUBSTR(BUFF,12,2)=T2; SUBSTR(BUFF,14,2)=' '; END; END; BELOPP=BUFF; IF KEYT=138 & BELOPP>0 THEN BELOPP=-BELOPP; IF KEYT=139 & BELOPP<0 THEN BELOPP=-BELOPP; S2: IF BELOPP¬=BELOPPF THEN DO; ACK1=ACK1-BELOPPF+BELOPP; J=34; CALL MOVEBUFF(J); PUT FILE(D) EDIT(ACK1)(PP2); CALL MOVEBUFF(J); BELOPPF=BELOPP; WFLAGG=1; END; CALL BELRED; PUT FILE(D) EDIT(RBELOPP)(A(24)); END; FRTYP=FRTYP+1; IF FRTYP=4 THEN DO; AKTKONT=AKTKONT+1; IF AKTKONT>ANTKONT+1 THEN DO; ANTKONT=ANTKONT+1; ADDKONT=ADDKONT+1; END; DRAD=DRAD+1; IF DRAD=11 THEN DO; CALL DISPPUT; END; FRTYP=1; END; GO TO L3; S3: CALL OUTPUT (1,6); GO TO L3; UT: IF ANTKONT=0 THEN GO TO L3; J=47; CALL MOVEBUFF(J); DO J=1 TO 11; PUT FILE(D) EDIT(' ')(A(47)); END; IF WFLAGG=0 THEN GO TO U0; J=94; CALL MOVEBUFF(J); IF ACK1¬=0 THEN DO; PUT FILE(D) EDIT(' DIFFERENS')(A(23))(ACK1)(PP2); CALL OUTPUT(1,6); GET SKIP LIST(''); AKTKONT=1; J=47; CALL MOVEBUFF(J); PUT FILE(D) EDIT(' KONTO UKTO KS PERDAG BELOPP')(A); GO TO L2; END; PUT FILE(D) EDIT(' KONTONUMMERSUMMA')(A(23)); GET SKIP LIST(FX13); IF (FX13¬=ACK2) & (FX13¬=ACK2/1000000) THEN DO; J=94; CALL MOVEBUFF(J); PUT FILE(D) EDIT(' KONOTONUMMERSUMMERINGEN STÄMMER EJ')(A(49)) ('DIFFERANS:')(A(23))(FX13-ACK2)(PP3); CALL OUTPUT(1,6); GET SKIP LIST(T25); AKTKONT=1; J=47; CALL MOVEBUFF(J); PUT FILE(D) EDIT(' KONTO UKTO KS PERDAB BELOPP')(A); GO TO L2; END; U0: J=68; CALL MOVEBUFF(J); PUT FILE(D) EDIT('┣0e┫')(A(26))(' TEXT.')(A(9)); UNSPEC(PF)=PAREA; IF AREC=REKTOT THEN TEXTF=' '; CALL TYPIST(TEXTF,13); CALL TYPIST('┣10┫',1); CALL CORED(0); U1: GET SKIP LIST(T25); DO I=25 TO 14 BY -1; IF SUBSTR(T25,I,1)¬=' ' THEN DO; CALL TYPIST(T25,25); CALL TYPIST('┣10┫',1); CALL OUTPUT(1,6); GO TO U1; END; END; IF SUBSTR(T25,1,13)=' ' THEN DO; CALL OUTPUT(1,6); GO TO U1; END; IF (SUBSTR(T25,1,13)=TEXTF) & (WFLAGG=0) THEN GO TO L1; DO I=1 TO ANTKONT; UNSPEC(PF)=PAREA+(I-1)*RECLN; TEXTF=SUBSTR(T25,1,13); END; IF AREC<REKTOT THEN DO; IF ADDKONT>0 THEN CALL FILIN; IF ADDKONT<0 THEN CALL FILUT; END; IF REKTOT>0 THEN UNSPEC(TRANSFIL)=AREC; CALL WR(TRANSFIL,AREA,ANTKONT,RCODE); IF RCODE¬=0 THEN PUT SKIP LIST('SKRIVFEL I UT',ONCODE); IF AREC=REKTOT THEN DO; CLOSE TRANSFIL; OPEN TRANSFIL; CALL SEOF(TRANSFIL); REKTOT=UNSPEC(TRANSFIL); UNSPEC(TRANSFIL)=0; IF AVERNR=VERNR+1 THEN VERNR=AVERNR; END; GO TO L1; /* H Ä R B Ö R J A R H U V U D P R O G R A M M E T */ START: CALL DATCHECK(DATUM); IF DATUM='0 ' THEN CALL PLOAD('Q '); PERARMAX = SUBSTR (DATUM,1,2); PERARMAX = PERARMAX + 1; PERARMIN = SUBSTR (DATUM,1,2); PERARMIN = PERARMIN - 1; UNSPEC(P)=16570; D='0'; UNSPEC(PP)=16616; PF=ADDR(AREA); PAREA=UNSPEC(PF); CALL DAGTEST; L1: CALL VERIN; L2: CALL DISPPUT; L3: CALL FRAEGA; L4: GET SKIP LIST(BUFF); CALL KEYFUN(KEYT); IF KEYT=22 THEN DO; /* BACKAR EN KONTERING */ AKTKONT=AKTKONT-1; IF AKTKONT<1 THEN DO; AKTKONT=ANTKONT+1; GO TO L2; END; ELSE DO; DRAD=DRAD-1; IF DRAD<1 THEN GO TO L2; END; M=16; IF FRTYP=2 THEN M=8; PUT FILE(D) EDIT(SUBSTR(BUFF,1,M))(A); FRTYP=1; GO TO L3; END; IF KEYT=23 THEN DO; /* FRAM EN RAD */ AKTKONT=AKTKONT+1; IF AKTKONT>ANTKONT+1 THEN DO; AKTKONT=1; GO TO L2; END; ELSE DO; DRAD=DRAD+1; IF DRAD>10 THEN GO TO L2; END; M=16; IF FRTYP=2 THEN M=8; FRTYP=1; PUT FILE(D) EDIT(SUBSTR(BUFF,1,M))(A); GO TO L3; END; IF KEYT=140 THEN GO TO UT; /* AVSTÄMNING AV VERIFIKATION */ IF KEYT=17 THEN CALL HOPPA_TILL_Q; IF KEYT=19 THEN DO; /* TAR BORT KONTERING */ CALL DELIT; GO TO L2; END; GO TO SVAR; END;