|
|
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: 28361 (0x6ec9)
Types: Q1_Text, reclen=79
Notes: q1file
Names: »V51«
└─⟦256585323⟧ Bits:30008759 50001598
└─⟦this⟧ »V51«
/* V51 KONTROLLERAR KONTERINGARNA MED AVSEENDE PÅ ATT KONTO,UKONTU & IK-SLAG
FINNS I RESP KONTOTABELL, ATT SPÄRRDATUM INTE ÖVERSKRIDITS,
OCH ATT INTE FELAKTIGT KSKONTO ANVÄNDS
KONTOTABELLERNA STACKAS I MINNT VAREFTER SAMTLIGA KONTERINGAR KONTROLLERAS
EV FEL STACKAS I EN FELSTACK MED FELKOD & RECNUMMER
MED HJÄLP AV FELSTACKEN SKRIVS SEDAN FELLISTOR UT
OM INTE NÅGOT FEL INDIKERATS HOPPAR RUTINEN TILL NÄSTA FAS I BATCHEN
ANNARS SKER HOPP TILL Q
VERSION 1:3 UKTO-textfältet anger i vilka UKTO-tabeller visst UKTO har
representation. 800701.
PRG JÅ 780911 */
DCL AREAP POINTER,
1 KONTOSTR BASED(AREAP),
2 KONTO5 CHAR(5),
2 SDATUM5 FIXED(6),
2 TEXT5 CHAR(32),
2 UHMARK CHAR(1), /* Används numer för angivande av UKTO-tab.till.*/
2 LISTB BINARY,
2 IKB BINARY;
/* 46 BYTES */
DCL 1 UKSTR BASED(AREAP),
2 KONTO3 CHAR(3),
2 SDATUM3 FIXED(6),
2 TEXT3 CHAR(32),
2 UHMARK3 CHAR(1);
/* 40 BYTES */
DCL SPK POINTER,
1 STACKST1 BASED(SPK),
2 KONTO5S CHAR(5),
2 SDATUM5S FIXED(5),
2 KOPPLING BINARY,
2 SPKUKTOTAB CHAR (1);
/* 11 BYTES */
DCL 1 STACKST2 BASED(SPK),
2 KONTO3S CHAR(3),
2 SDATUM3S FIXED(5);
/* 6 BYTES */
DCL SP POINTER,
1 FELSTR BASED(SP),
2 RECNR BINARY,
2 FELTYP BINARY;
/* 4 BYTES */
DCL 1 VERSTR BASED(AREAP),
2 KONTOF FIXED(11),
2 VERNR FIXED(5),
2 BDATUM FIXED(5),
2 PDATUM FIXED(5),
2 BELOPP FIXED(11),
2 TEXTF CHAR(13);
/* 34 BYTES */
DCL 1 AREA,
2 CH(100) CHAR(50);
/* 5000 BYTES */
DCL 1 UKTOTABPOST,
2 UTABKONTO CHAR (3),
2 UTABDATUM FIXED (6),
2 UTABTABELL CHAR (32),
2 UTABUHMARK CHAR (1);
DCL UKONTOP FILE;
DCL 1 FSTR,
2 FIL FILE;
DCL 1 STR,
2 XN CHAR(24);
DCL KONTOADR(3) BINARY, /* LAGRAR STARTPOS FÖR VAR OCH EN AV KONTOTABELLERNA
1,2,3 I MINNET EFTER INLÄSNINGEN */
MINNE FIXED(5) INIT(49100),
FILTAB(4) CHAR(24) INIT(' KONTOP ',' UKONTOP ',' KSKONTOP',
' TRANSFIL'),
RLENGD(4) BINARY INIT(46,40,40,34),
MAX BINARY,
KONT1 CHAR(5),
KONT2 CHAR(3),
KONT3 CHAR(3),
PPP POINTER,
KONTO BASED(PPP) CHAR(11),
T14 CHAR(14),
T13 CHAR(13),
UKTOMARK CHAR (1),
STACKDJ BINARY,
SIDA BINARY INIT(1),
R BINARY,
DATUM CHAR(6),
FELSTACK BINARY,
UTABIND BINARY,
RCODE BINARY INIT(0),
NAMN(2) CHAR(10) INIT('KVV/KWAROS','AROS'),
TEXT(5) CHAR(40) INIT(
'VER. KONTO BELOPP SPÄRRDATUM',
'VER. U.KTO BELOPP SPÄRRDATUM',
'VER. IK BELOPP SPÄRRDATUM',
'VER. KONTO UK IK BELOPP',' '),
BT(0:9) BINARY INIT(1,2,4,8,16,32,64,128,256,512),
P POINTER,
D BASED(P) CHAR(6),
PP POINTER,
1 STRX BASED(PP),
2 X CHAR(2),
2 Y CHAR(2),
2 FIRMA CHAR(1),
2 OP_KOD BINARY,
2 RADANT BINARY,
VERSION CHAR(47) INIT(' V5 Version 1.3 800701');
/* KONTOGEN LÄER IN ALLA KONTOTABELLERNA, I FÖRKORTADE RECORDS, I
MINNET
KONTOGEN BYGGER UPP EN STACK MED KONTONUMMER ,SPÄRRDATUM & KONTOSPÄRR
INLÄSNINGEN SKER I BLOCK */
KONTOGEN:PROC;
UNSPEC(SPK)=27000;
DO I=1 TO 3; /* 1 = KTOTAB, 2 = UKTOTAB, 3 = KSKTOTAB */
KONTOADR(I)=UNSPEC(SPK);
XN=FILTAB(I);
FSTR=STR;
OPEN FIL; /* ÖPPNAR ALLA FILERNA BER. PÅ "XN" OCH "I" */
CALL SEOF(FIL);
MAX=UNSPEC(FIL);
UNSPEC(FIL)=0;
J=5000/RLENGD(I);
K1: IF J>MAX THEN J=MAX;
MAX=MAX-J;
CALL RD(FIL,AREA,J,RCODE);
IF RCODE¬=0 THEN PUT SKIP LIST('LÄSFEL UNDER K1 I',FILTAB(I),RCODE);
AREAP=ADDR(AREA);
DO K=1 TO J;
IF I=1 THEN DO;
KONTO5S=KONTO5;
IF SDATUM5¬=0 THEN SDATUM5S=SDATUM5-780000;
ELSE SDATUM5S=0;
KOPPLING=IKB;
SPKUKTOTAB = UHMARK;
UNSPEC(SPK)=UNSPEC(SPK)+11; /* KTOTABBENS KONTR.REC = 11 POS */
END;
ELSE DO;
KONTO3S=KONTO3;
IF SDATUM3¬=0 THEN SDATUM3S=SDATUM3-780000;
ELSE SDATUM3S=0;
UNSPEC(SPK)=UNSPEC(SPK)+6; /* IKTABBENS KONTR.REC = 6 POS */
END;
UNSPEC(AREAP)=UNSPEC(AREAP)+RLENGD(I);
END;
IF MAX¬=0 THEN GO TO K1;
END;
RETURN;
END;
STACKAF:PROC;
RECNR=UNSPEC(FIL)-J+K-1;
UNSPEC(SP)=UNSPEC(SP)+4;
STACKDJ=STACKDJ+1;
RETURN;
END;
UKTOTABTEST: PROC;
UKT10:
OPEN UKONTOP;
READ KEY (KONT2) FILE (UKONTOP) INTO (UKTOTABPOST);
UKT20:
IF UKTOMARK = ' ' THEN GO TO UKT99;
DO UTABIND = 1 TO 32;
IF SUBSTR(UTABTABELL, UTABIND,1) = UKTOMARK THEN GO TO UKT99;
END;
UKT30:
FELTYP = 8;
CALL STACKAF;
UKT99:
RETURN;
END;
/* TEST TESTAR KONTERINGARNA OCH SÄTTER FELKOD VID FEL
1 FEL KONTO 2 FEL PERDAG
3 FEL UKONTO 4 FEL PERDAG
5 FEL KSKONTO 6 FEL PERDAG
7 & 8 FEL KONTOSPÄR
RECNUMMER & FELKOD STACKAS I EN FELSTACK */
TEST:PROC;
UNSPEC(SPK)=KONTOADR(1);
T1: IF KONT1=KONTO5S THEN DO;
UKTOMARK = SPKUKTOTAB;
IF (KONT3¬='000') & (KOPPLING & BT(SUBSTR(KONT3,1,1))=0) THEN DO;
FELTYP=7;
CALL STACKAF;
END;
IF (KONT2¬='000') & ((KOPPLING & 1024)=0) THEN DO;
FELTYP=8;
CALL STACKAF;
END;
IF (SDATUM5S¬=0) & (SDATUM5S<PDATUM) THEN DO;
FELTYP=2;
CALL STACKAF;
END;
GO TO T2;
END;
UNSPEC(SPK)=UNSPEC(SPK)+11;
IF UNSPEC(SPK)=KONTOADR(2) THEN DO;
FELTYP=1;
CALL STACKAF;
GO TO T2;
END;
GO TO T1;
T2: IF KONT2='000' THEN GO TO T3;
UNSPEC(SPK)=KONTOADR(2);
T22: IF KONT2=KONTO3S THEN DO;
IF (SDATUM3S¬=0) & (SDATUM3S<PDATUM) THEN DO;
FELTYP=4;
CALL STACKAF;
END;
CALL UKTOTABTEST;
GO TO T3;
END;
UNSPEC(SPK)=UNSPEC(SPK)+6;
IF UNSPEC(SPK)=KONTOADR(3) THEN DO;
FELTYP=3;
CALL STACKAF;
GO TO T3;
END;
GO TO T22;
T3: IF KONT3='000' THEN GO TO T4;
UNSPEC(SPK)=KONTOADR(3);
T33: IF KONT3=KONTO3S THEN DO;
IF (SDATUM3S¬=0) & (SDATUM3S<PDATUM) THEN DO;
FELTYP=6;
CALL STACKAF;
END;
GO TO T4;
END;
UNSPEC(SPK)=UNSPEC(SPK)+6;
IF UNSPEC(SPK)=FELSTACK THEN DO;
FELTYP=5;
CALL STACKAF;
GO TO T4;
END;
GO TO T33;
T4: RETURN;
END;
RUB:PROC;
PUT SKIP(R+4) EDIT(NAMN(FIRMA-7))(A(20))('IFRÅGASATTA KONTERINGAR 19')
(A(27))(DATUM)(A(2))('-')(A)(SUBSTR(DATUM,3,2))(A(2))('-')(A)
(SUBSTR(DATUM,5,2))(A(5))('SID')(A(4))(SIDA)(A(4)) SKIP(2)
EDIT(' ')(A(1))(TEXT(I))(A) SKIP (1);
R = RADANT - 8;
SIDA=SIDA+1;
RETURN;
END;
/* H Ä R B Ö R J A R H U V U D P R O G R A M M E T */
START:
UNSPEC(P)=16570;
UNSPEC(PP)=16616;
CALL DATCHECK(DATUM);
IF DATUM='0 ' THEN GO TO SLUT;
D='0';
PUT FILE(D) SKIP EDIT(VERSION)(A(96))('KONTROLL AV KONTERINGAR PÅGÅR')
(A(45));
CALL CORED(0);
PPP=ADDR(KONT1);
CALL KONTOGEN;
FELSTACK=UNSPEC(SPK);
OPEN UKONTOP;
UNSPEC(SP)=UNSPEC(SPK);
STACKDJ=0;
XN=FILTAB(4); /* I = 4 GER TRANSFIL */
FSTR=STR;
OPEN FIL;
CALL SEOF(FIL);
MAX=UNSPEC(FIL);
UNSPEC(FIL)=0;
J=5000/RLENGD(4); /* BLOCK OM 147 RECORDS */
L1: IF MAX=0 THEN GO TO SKRIV;
IF J>MAX THEN J=MAX;
MAX=MAX-J;
CALL RD(FIL,AREA,J,RCODE);
IF RCODE¬=0 THEN PUT SKIP LIST('LÄSFEL UNDER L1 I',FILTAB(4),RCODE);
AREAP=ADDR(AREA);
DO K=1 TO J;
KONTO=KONTOF;
CALL TEST;
IF UNSPEC(SP)>MINNE THEN GO TO SKRIV;
UNSPEC(AREAP)=UNSPEC(AREAP)+RLENGD(4);
END;
GO TO L1;
SKRIV:
K=1;
OPEN FIL;
J=5;
L=5;
DO I=1 TO 4;
IF I=2 THEN K=6;
IF I=3 THEN K=9;
IF I¬=1 THEN L=3;
R=0;
M=-1;
DO J=1 TO STACKDJ;
UNSPEC(SP)=FELSTACK+4*(J-1);
IF (FELTYP=I*2-1) ö (FELTYP=I*2) THEN DO;
IF R<6 THEN CALL RUB;
IF M¬=RECNR THEN DO;
UNSPEC(FIL)=RECNR;
ON ERROR GO TO FEL;
READ FILE(FIL) INTO(VERSTR);
KONTO=KONTOF;
CALL BELRED(BELOPP,T14);
M=RECNR;
END;
IF I<4 THEN DO;
PUT SKIP EDIT(VERNR)(P'ZZZZ9',X(5))(SUBSTR(KONTO,K,L))
(A(6))(T14)(A(19));
IF FELTYP=I*2 THEN PUT EDIT(PDATUM+780000)(A);
END;
ELSE DO;
IF FELTYP=I*2 THEN PUT SKIP EDIT(VERNR)(P'ZZZZ9',X(5))
(KONT1)(A(5))('.')(A)(KONT2)(A(3))('.xxx')(A(8))(T14)(A);
ELSE PUT SKIP EDIT(VERNR)(P'ZZZZ9',X(5))(KONT1)
(A(5))('.xxx.')(A(5))(KONT3)(A(7))(T14)(A);
END;
R=R-1;
END;
FEL: END;
PUT SKIP(R);
END;
SLUT:
D=DATUM;
IF (SIDA¬=1) ö (Y¬='1 ') THEN CALL PLOAD('Q ');
I = 5;
CALL RUB;
PUT SKIP(2) EDIT(' **** INGA IFRÅGASATTA KONTERINGAR ****')(A);
R = R - 2;
PUT SKIP (R);
CALL PLOAD('V8 ');
END;