|
|
DataMuseum.dkPresents historical artifacts from the history of: RegneCentralen RC3600/RC7000 |
This is an automatic "excavation" of a thematic subset of
See our Wiki for more about RegneCentralen RC3600/RC7000 Excavated with: AutoArchaeologist - Free & Open Source Software. |
top - metrics - download
Length: 7680 (0x1e00)
Types: TextFile
Names: »YDTST«
└─⟦45bd0f8dd⟧ Bits:30000464 DOMUS disk image
└─⟦this⟧ »/YDTST«
└─⟦6dbcc9c03⟧ Bits:30000463 DOMUS disk image
└─⟦this⟧ »/YDTST«
└─⟦a2e222af0⟧ Bits:30001626 DOMUS disk image
└─⟦this⟧ »/YDTST«
! UTILITY PROGRAM TIL UDSKRIFT AF DISC-SECTORER !
CONST
JA= 'JA',
TRUE= 1,
FALSE= 0,
ZERO= '<0><0><0><0><0><0>',
SELFUNC= '<13><10>SELECT FUNCTION: (COPY,DUMP,XFER) ',
ERRTXT= '<13><10>I/O ERROR: ',
HEADTXT= '<12>SECTOR NUMBER: <13><10><0>',
SPACES= ' <0>',
TCOPY= 'COPY',
TDUMP= 'DUMP',
TXFER= 'XFER',
TXT0= '<13><10>DISC DUMP PROGRAM (JCO) 1979.02.28',
TXT1= '<13><10>OFFSET (SECTORER) ? ',
TXT2= 'START BLOK NUMMER? ',
TXT4= 'NÆSTE BLOK? ',
TXT5= 'OUTPUT FIL NAVN? ',
TXT6= 'OUTPUT PÅ EKSISTERENDE DISK FIL? ',
TXT7= 'OUTPUT PÅ MT I FCOPY FORMAT? ',
TXT8= 'SUBKATALOG? ',
TXT9= 'FIL NUMMER? ',
DUMPCONV= 'CAT<0><0><0>',
CAT= 'CAT<0><0><0>',
MT= 'MT0<0><0><0>',
ENTRYTXT= 'TAST 16 HELTAL DER SKAL VÆRE -ENTRY- INDHOLD<13><10><0>',
ENTTXT1= 'FØLGENDE -ENTRY- ER BLEVET TASTET: <0>',
NL= '<13><10>';
«ff»
VAR
OPSTR: STRING(20);
OPLGT: INTEGER;
OPVAR: INTEGER;
WINT1: INTEGER;
WINT2: INTEGER;
WINT3: INTEGER;
OUTPUT: INTEGER;
SFIRST: INTEGER;
FEOF: INTEGER;
OUTREM: INTEGER;
CHAR: INTEGER;
NUMBER: INTEGER;
MAXNUMBER: INTEGER;
DISC: INTEGER;
SCONV: INTEGER;
ENTRY: STRING(32);
WSTR: STRING(10);
INDEXBLK: STRING(512);
DUMP: FILE '<0>',
30,
1,
512,
UB;
GIVEUP DUMPERROR,
8'177777;
CONV DUMPCONV
OF STRING (512);
F: FILE 'MD0<0><0>',
30,
1,
512,
UB;
GIVEUP FERROR,
8'177777
OF STRING(512);
OUT: FILE 'LPT',
1,
8,
80,
UB;
GIVEUP OUTERROR,
2'0110001111111110
OF STRING(80);
«ff»
PROCEDURE FERROR;
BEGIN
IF (F.ZMODE AND 2) = 0 THEN
IF (F.Z0 AND 16) <> 0 THEN
BEGIN
FEOF:= TRUE;
F.ZREM:= 2;
F.ZTOP:= SFIRST;
GOTO 10;
END;
OPMESS(ERRTXT);
MOVE(F.ZNAME,0,WSTR,0,5);
INSERT(32,WSTR,5);
INSERT(0,WSTR,6);
OPMESS(WSTR);
BINDEC(F.Z0,WSTR);
INSERT(0,WSTR,5);
OPMESS(WSTR);
OPIN(OPSTR);
OPWAIT(OPLGT);
REPEATSHARE(F);
10:
END;
PROCEDURE OUTERROR;
BEGIN
OPMESS(ERRTXT);
MOVE(OUT.ZNAME,0,WSTR,0,5);
INSERT(32,WSTR,5);
INSERT(0,WSTR,6);
OPMESS(WSTR);
BINDEC(OUT.Z0,WSTR);
INSERT(0,WSTR,5);
OPMESS(WSTR);
OPIN(OPSTR);
OPWAIT(OPLGT);
REPEATSHARE(OUT);
END;
PROCEDURE DUMPERROR;
BEGIN
REPEATSHARE(DUMP);
END;
«ff»
PROCEDURE OUTNUMBER;
BEGIN
IF OUTREM = 0 THEN
BEGIN
OUTTEXT(OUT,HEADTXT);
BINDEC(MAXNUMBER,WSTR);
INSERT(13,WSTR,5);
INSERT(10,WSTR,6);
INSERT(0,WSTR,7);
OUTTEXT(OUT,WSTR);
OUTREM:= 256;
SFIRST:= 0;
END;
IF SFIRST = 4 THEN
BEGIN
OUTCHAR(OUT,13);
OUTCHAR(OUT,10);
SFIRST:= 0;
END;
OUTREM:= OUTREM - 1;
SFIRST:= SFIRST + 1;
BINDEC(NUMBER,WSTR);
INSERT(32,WSTR,5);
INSERT(0,WSTR,6);
OUTTEXT(OUT,WSTR);
CHAR:= NUMBER SHIFT (-8);
FEOF:= CHAR;
IF CHAR > 127 THEN FEOF:= CHAR - 128;
IF FEOF < 32 THEN FEOF:= 32;
INSERT(FEOF,OPSTR,0);
BINDEC(CHAR,WSTR);
MOVE(WSTR,2,WSTR,0,3);
INSERT(32,WSTR,3);
INSERT(0,WSTR,4);
OUTTEXT(OUT,WSTR);
CHAR:= NUMBER AND 255;
FEOF:= CHAR;
IF CHAR > 127 THEN FEOF:= CHAR - 128;
IF FEOF < 32 THEN FEOF:= 32;
INSERT(FEOF,OPSTR,1);
BINDEC(CHAR,WSTR);
MOVE(WSTR,2,WSTR,0,3);
INSERT(32,WSTR,3);
INSERT(0,WSTR,4);
OUTTEXT(OUT,WSTR);
MOVE(SPACES,0,OPSTR,2,6);
OUTTEXT(OUT,OPSTR);
END;
«ff»
PROCEDURE GETNEXT;
BEGIN
SFIRST:= SFIRST - 1;
IF SFIRST >= 0 THEN
BEGIN
MOVE(INDEXBLK,2,INDEXBLK,0,512);
WINT2:= WORD INDEXBLK;
MOVE(INDEXBLK,2,INDEXBLK,0,512);
WINT3:= WORD INDEXBLK;
END
ELSE FEOF:= TRUE;
END;
PROCEDURE CONNECT;
BEGIN
MOVE(CAT,0,DUMPCONV,0,6);
OPMESS(TXT8);
OPIN(OPSTR);
OPWAIT(OPLGT);
IF OPLGT > 1 THEN
BEGIN
MOVE(ZERO,0,DUMPCONV,0,6);
MOVE(OPSTR,0,DUMPCONV,0,OPLGT-1);
NEWCAT(DUMP,0);
END;
END;
PROCEDURE GETENTRY;
BEGIN
OPMESS(ENTRYTXT);
WINT1:= 0;
WHILE WINT1 < 16 DO
BEGIN
OPIN(OPSTR);
OPWAIT(OPLGT);
DECBIN(OPSTR,WINT2);
INSERT(WINT2 SHIFT (-8),ENTRY,WINT1*2);
INSERT(WINT2 AND 255,ENTRY,WINT1*2+1);
WINT1:= WINT1 + 1;
END;
OPMESS(ENTTXT1);
OPMESS(ENTRY);
OPMESS(NL);
END;
«ff»
BEGIN
REPEAT
OPMESS(TXT0);
OPMESS(SELFUNC);
OPIN(OPSTR);
OPWAIT(OPLGT);
IF OPSTR = TDUMP THEN
BEGIN
OPMESS(TXT1);
OPIN(OPSTR);
OPWAIT(OPLGT);
DECBIN(OPSTR,OPVAR);
OPEN(OUT,3);
OUTPUT:= TRUE;
OUTREM:= 0;
OPMESS(TXT2);
OPIN(OPSTR);
OPWAIT(OPLGT);
DECBIN(OPSTR,MAXNUMBER);
F.ZMODE:= 5;
WAITTRANSFER(F);
F.ZBLOCK:= OPVAR + MAXNUMBER;
WHILE OUTPUT = TRUE DO
BEGIN
REPEAT
INCHAR(F,NUMBER);
INCHAR(F,CHAR);
NUMBER:= (NUMBER SHIFT 8) + CHAR);
OUTNUMBER
UNTIL F.ZREM = 0;
OPMESS(TXT4);
OPIN(OPSTR);
OPWAIT(OPLGT);
DECBIN(OPSTR,MAXNUMBER);
IF OPLGT = 1 THEN
OUTPUT:= FALSE;
F.ZBLOCK:= OPVAR + MAXNUMBER;
END;
OUTCHAR(OUT,12);
OUTBLOCK(OUT);
CLOSE(OUT,TRUE);
MOVE(SPACES,0,OPSTR,0,6);
END;
IF OPSTR = TCOPY THEN
BEGIN
;;
END;
«ff»
IF OPSTR = TXFER THEN
BEGIN
OPMESS(TXT1);
OPIN(OPSTR);
OPWAIT(OPLGT);
DECBIN(OPSTR,OPVAR);
OPMESS(TXT2);
OPIN(OPSTR);
OPWAIT(OPLGT);
DECBIN(OPSTR,MAXNUMBER);
WAITTRANSFER(F);
F.ZMODE:= 5;
F.ZBLOCK:= OPVAR + MAXNUMBER;
WINT1:= 512;
GETREC(F,WINT1);
MOVE(F^,0,INDEXBLK,0,512);
SFIRST:= WORD INDEXBLK;
FEOF:= FALSE;
OPMESS(TXT6);
OPIN(OPSTR);
OPWAIT(OPLGT);
IF OPSTR = JA THEN
BEGIN
DISC:= TRUE;
CONNECT;
OPMESS(TXT5);
OPIN(OPSTR);
OPWAIT(OPLGT);
DUMP.ZNAME:= ZERO;
MOVE(OPSTR,0,DUMP.ZNAME,0,OPLGT-1);
DUMP.ZKIND:= 30;
OPEN(DUMP,3);
SETPOSITION(DUMP,0,0);
END
ELSE
BEGIN
OPMESS(TXT7);
OPIN(OPSTR);
OPWAIT(OPLGT);
IF OPSTR = JA THEN
BEGIN
GETENTRY;
DISC:= FALSE;
DUMP.ZNAME:= MT;
DUMP.ZKIND:= 14;
OPMESS(TXT9);
OPIN(OPSTR);
OPWAIT(OPLGT);
DECBIN(OPSTR,WINT1);
OPEN(DUMP,3);
SETPOSITION(DUMP,WINT1,1);
WINT1:= 32;
PUTREC(DUMP,WINT1);
MOVE(ENTRY,0,DUMP^,0,32);
OUTBLOCK(DUMP);
END
«ff»
ELSE
BEGIN
DISC:= TRUE;
CONNECT;
GETENTRY;
DUMP.ZKIND:= 30;
MOVE(ENTRY,0,DUMP.ZNAME,0,6);
SETENTRY(DUMP,ENTRY);
OPEN(DUMP,3);
END;
END;
GETNEXT;
WHILE FEOF = FALSE DO
BEGIN
F.ZBLOCK:= OPVAR + WINT3;
WHILE WINT2 > 0 DO
BEGIN
WINT1:= 512;
GETREC(F,WINT1);
PUTREC(DUMP,WINT1);
DUMP^:= F^;
WINT2:= WINT2 - 1;
END;
GETNEXT;
END;
CLOSE(DUMP,TRUE);
IF DISC = TRUE THEN
FREECAT(DUMP);
END
UNTIL TRUE = FALSE;
END;
«ff»
«nul»