|
|
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: 8704 (0x2200)
Types: TextFile
Notes: RCSL-43-GL-0619, RCSL-43-GL-2621, RCSL-43-GL-4403, RCSL-43-GL-5110, RCSL-43-GL-5681, RCSL-43-GL-5692, RCSL-43-GL-5704, RCSL-43-GL-7836, RCSL-43-GL-9392, RCSL-43-GL-9393, RCSL-43-GL-9394
Names: »SRDAT«
└─⟦a59f0a452⟧ Bits:30000472 DOMUS disk image
└─⟦this⟧ »/SRDAT«
! RCSL:43-GL9393
AUTHOR: PBP
EDITED: 79.08.31
PROGRAM RC36-01186.00
RECIEVE MODULE ON
MAGTAPE AT AN MCC
** BRNO INTERNATIONAL TECHNICAL FAIR 79. **
RDAT
KEYWORDS: MUSIL DEVICEHANDLER,MT0,LISTING
ABSTRACT: DEVICEPROGRAM, OUTPUT ON MAGTAPE WITH
A BLOCKSIZE OF 130 BYTES. THE PROGRAM RECIEVES
FLOPPY DATA FROM AN RCC.
ASCII SOURCE: RCSL: 43-GL9392
REL/BIN: RCSL: 43-GL9394 MODIF X
!
«ff»
!
PROGRAM: RC36-00000
TITLE: RECIEVE MODULE ON MAGTAPE
ABSTRACT: DEVICEPROGRAM. OUTPUT ON MAGTAPE WITH
A BLOCKSIZE OF 130 BYTES. THE PROGRAM RECIEVES
FLOPPY OR PAPERTAPE DATA FROM AN RCC.
SIZE: XXXX BYTES.
RUNTIME PARAMETERS:
THE PARAMETERS ARE GIVEN TO THIS MODULE VIA THE MAIN
MODULE.
:SF. STARTS THE RECIEVE MODULE. (HAS NO PARAMETERS)
:FF. FINIS THE RECIEVE MODULE. (HAS NO PARAMETERS)
:PS. PROCESSING STATE. TYPES THE NUMBER OF BLOCKS
ON MAGTAPE (HAS NO PARAMETERS)
:ER. ERROR REPLY. THIS COMMAND MUST BE USED AS A REPLY TO
A DEVICE ERROR MESSAGE.
PARAMETERS DESCRIPTION
R REPEAT THE FAULTY OPERATION.
A ACCEPT THE ERRONEUS DATA.
OUTPUT MESSAGES:
PAR ERROR PARAMETER ERROR
COM ERROR COMMAND ERROR
MOUNT NEXT TAPE MOUNT A NEW TAPE TO CONTINUE
!
«ff»
!
SPECIAL REQUIREMENTS:
CODEPROCEDURE ARESERVE RCSL: 43-GL4403.
CODEPROCEDURE SEARCHVALUE RCSL: 43-GL2621.
CODEPROCEDURE DELAY RCSL: 43-GL0619.
CODEPROCEDURE OUTSTATUS RCSL: 43-GL7836.
CODEPROCEDURE SETSHARE RCSL: 43-GL5110.
CODEPROCEDURE GETTABLEADDRESS RCSL: 43-GL5692.
CODEPROCEDURE OUTVALUE RCSL: 43-GL5681.
CODEPROCEDURE MOVOUT RCSL:43-GL5704.
!
«ff»
CONST
MAINKIND= 1,
MAINMASK= 8'000422,
MTKIND= 14,
MTSHARES= 1,
MTSHARESIZE= 130,
MTMASK= 8'163776,
RUNNING= 1,
STOPPED= 0,
MAINMODE= 1,
MTMODE= 3,
TRUE= 1,
FALSE= 0,
EM= '<13><0>',
R= '<82>',
B711= 8'000420,
B11= 8'000020,
HARDBITS= 8'101356,
TABNAME= 'CCM<0><0><0>',
«ff»
ERRORTXT=
' <0>
****<0>',
BLOCKDISP= ' NNNN BLOCKS=NNNNN<13><0>',
ENDFUNC= ' END FUNCTION<13>',
PARAMERROR= ' PAR ERROR<13>',
MOUNTTAPE= ' MOUNT NEXT TAPE<13>',
COMERR= ' COM ERROR<13>',
MTERRTXTS=
' DISCONNECTED<0>
OFF-LINE<0>
REWINDING<0>
<0>
<0>
WRITE LOCK<0>
ILLEGAL<0>
<0>
BLOCK ERROR<0>
DATA LATE<0>
PARITY ERROR<0>
EOT<0>
POSITION ERROR<0>
DRIVER MISSING<0>
TIMEOUT<0>
<0>',
«ff»
START= ':SF',
FINIS= ':FF',
ERROR= ':ER',
GETPR= ':PS';
«ff»
VAR
AREA: RECORD
CONNECT: INTEGER;
STREAMNO: INTEGER;
SENDER: INTEGER
END;
PROGSTATE: INTEGER;
COMMAND: STRING(80);
COML: INTEGER;
RECLENGTH: INTEGER;
HELPST: STRING(6);
EOV: INTEGER;
MTERRORCODE: INTEGER;
LENGTH: INTEGER;
TEXTLINE: STRING(80);
REST: INTEGER;
RCCNO: INTEGER;
ADR: INTEGER;
CDADR: INTEGER;
NAME: STRING(4);
X: INTEGER;
RCCID: INTEGER;
DUMMY: STRING(2); ! FROM DUMMY TO RCC7 THE !
BLOCKCOUNT: INTEGER; ! SEQUENCE MUST NOT BE !
RCC1,RCC2,RCC3: INTEGER; ! CHANGED !
RCC4,RCC5,RCC6: INTEGER;
RCC7: INTEGER;
«ff»
MAIN: FILE
'XXX',
MAINKIND,
1,
1,
U;
GIVEUP MAINERROR, MAINMASK
OF STRING(1);
MT: FILE
'MT0',
MTKIND,
MTSHARES,
MTSHARESIZE,
U;
GIVEUP MTERROR, MTMASK
OF STRING(MTSHARESIZE);
«ff»
PROCEDURE SEARCHVALUE (VAR COMMAND: STRING(2);
CONST VALUE: INTEGER;
VAR LENGTH: INTEGER);
CODEBODY P0059;
PROCEDURE ARESERVE (VAR SENDER: INTEGER;
VAR ZNAME: STRING(6);
VAR AREA: INTEGER);
CODEBODY P0138;
PROCEDURE DELAY (CONST TIME: INTEGER);
CODEBODY;
PROCEDURE OUTSTATUS (CONST BITS: INTEGER;
CONST TEXTARRAY: STRING(1);
VAR TEXTLINE: STRING(1);
VAR INDEX: INTEGER);
CODEBODY P0209;
PROCEDURE SETSHARE (FILE FILENAME;
CONST NOOFSHARES: INTEGER;
CONST SHARELENGTH: INTEGER;
VAR SHAREADR: INTEGER;
CONST OFFSET: INTEGER);
CODEBODY P0130;
PROCEDURE OUTVALUE (VAR RESULT: INTEGER;
CONST FROMADR: INTEGER;
CONST ATYPE: INTEGER);
CODEBODY P0122;
PROCEDURE GETTABLEADDRESS (VAR ADR: INTEGER;
CONST IDENT: STRING(6));
CODEBODY P0125;
PROCEDURE MOVOUT (CONST FROMADR: INTEGER;
VAR TOSTR: STRING(1);
CONST TOINDEX: INTEGER;
CONST COUNT: INTEGER);
CODEBODY P0161;
«ff»
PROCEDURE PROCESSSTATE;
BEGIN
GETTABLEADDRESS(ADR,TABNAME);
ADR:=ADR+26;
OUTVALUE(CDADR,ADR,2); ! ADDRESS OF CDTABLE !
X:=4;
REPEAT
REPEAT
CDADR:=CDADR+8;
OUTVALUE(RCCID,CDADR,2);
IF RCCID=0 THEN GOTO 5;
MOVOUT(CDADR+2,NAME,0,4)
UNTIL RCCID AND AREA.STREAMNO<>0;
MOVE(NAME,0,BLOCKDISP,4,4);
MOVE(DUMMY,X,DUMMY,2,2);
BINDEC(BLOCKCOUNT,HELPST);
MOVE(HELPST,0,BLOCKDISP,16,5);
OPMESS(BLOCKDISP);
X:=X+2
UNTIL 1<>1;
5:
END;
«ff»
PROCEDURE OPERATOR;
BEGIN
OPWAIT(COML);
IF COMMAND=START THEN GOTO 99
ELSE
IF COMMAND=FINIS THEN GOTO 11000
ELSE
IF COMMAND=GETPR THEN PROCESSSTATE
ELSE
IF COMMAND=ERROR THEN
BEGIN
MOVE(COMMAND,COML-2,HELPST,0,1);
MTERRORCODE:=0;
END
ELSE
OPMESS(COMERR);
99: OPIN(COMMAND);
END;
«ff»
PROCEDURE CHANGETAPE;
BEGIN
CLOSE(MT,TRUE);
OPMESS(MOUNTTAPE);
OPEN(MT,MTMODE);
MTERRORCODE:=0;
SETPOSITION(MT,1,1);
EOV:=FALSE;
END;
«ff»
PROCEDURE OUTERROR;
BEGIN
IF LENGTH AND HARDBITS=0 THEN LENGTH:=8'100000
ELSE LENGTH:=8'040000;
COML:=0;
OUTSTATUS(LENGTH,ERRORTXT,TEXTLINE,COML);
END;
PROCEDURE MAINERROR;
BEGIN
IF MAIN.Z0 AND B711 <> 0 THEN GOTO 200;
IF MAIN.Z0 AND 2<>0 THEN
BEGIN
REST:=REST+MAIN.ZREM;
IF OPTEST<>0 THEN OPERATOR;
REPEATSHARE(MAIN);
END;
END;
PROCEDURE MTERROR;
BEGIN
IF MT.Z0=B11 THEN IF MT.ZMODE EXTRACT 2=3 THEN
BEGIN
EOV:=TRUE;
GOTO 999;
END;
IF MTERRORCODE=0 THEN
BEGIN
MTERRORCODE:=MT.Z0;
LENGTH:=MT.Z0;
OUTERROR;
OUTSTATUS(8'100000,MT.ZNAME,TEXTLINE,COML);
OUTSTATUS(MT.Z0,MTERRTXTS,TEXTLINE,COML);
MOVE(EM,0,TEXTLINE,COML,2);
OPMESS(TEXTLINE);
END;
IF MTERRORCODE AND HARDBITS=0 THEN
BEGIN
DELAY(10);
IF OPTEST<>0 THEN OPERATOR;
REPEATSHARE(MT);
END;
REPEAT OPERATOR UNTIL COMMAND=ERROR;
IF HELPST=R THEN REPEATSHARE(MT);
999:
END;
«ff»
BEGIN
100: AREA.SENDER:=0;
ARESERVE(AREA.SENDER,MAIN.ZNAME,AREA.CONNECT);
INSERT(0,COMMAND,0);
INSERT(0,COMMAND,1);
MOVE(COMMAND,0,COMMAND,2,78);
WAITZONE(MT);
SETSHARE(MAIN,1,130,MT.ZTOP,0);
MTERRORCODE:=0;
OPIN(COMMAND);
110: PROGSTATE:=STOPPED;
REPEAT OPERATOR UNTIL COMMAND=START;
PROGSTATE:=RUNNING;
EOV:=FALSE;
OPEN(MT,MTMODE);
MTERRORCODE:=0;
SETPOSITION(MT,1,1);
OPEN(MAIN,AREA.STREAMNO+MAINMODE); !CONNECT MODULE!
«ff»
200: REPEAT
BEGIN
ARESERVE(AREA.SENDER,MAIN.ZNAME,AREA.CONNECT);
REST:=0;
GETREC(MAIN,RECLENGTH);
RCCNO:=BYTE MAIN^ SHIFT (-4); ! RCCNO !
IF RCCNO>=20 THEN RCCNO:=RCCNO-4;
RCCNO:=RCCNO*2;
RECLENGTH:=RECLENGTH+REST;
MAIN.ZTOP:=MAIN.ZTOP+REST;
MTERRORCODE:=0;
MT.ZREM:=0;
IF RECLENGTH<130 THEN MT.ZREM:=130-RECLENGTH;
OUTBLOCK(MT);
MOVE(DUMMY,RCCNO,DUMMY,2,2);
BLOCKCOUNT:=BLOCKCOUNT+1;
MOVE(DUMMY,2,DUMMY,RCCNO,2);
IF EOV=TRUE THEN CHANGETAPE;
END
UNTIL OPTEST<>0;
OPERATOR;
GOTO 200;
«ff»
10000:
CLOSE(MAIN,TRUE); !DISCONNECT MODULE!
CLOSE(MT,TRUE);
PROCESSSTATE;
OPMESS(ENDFUNC);
PROGSTATE:=STOPPED;
GOTO 110;
11000:
IF MTERRORCODE<>0 THEN MT.ZMODE:=0;
IF MT.ZMODE<>0 THEN CLOSE(MT,TRUE);
IF MAIN.ZMODE<>0 THEN CLOSE(MAIN,TRUE);
PROCESSSTATE;
OPMESS(ENDFUNC);
OPMESS(COMMAND);
GOTO 100;
END;
«ff»
«nul»