|
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 - download
Length: 13824 (0x3600) Types: TextFile Notes: RCSL-43-GL-8608, RCSL-43-GL-8609, RCSL-43-GL-8610 Names: »S988«
└─⟦a59f0a452⟧ Bits:30000472 DOMUS disk image └─⟦this⟧
! RCSL: 43-GL8609 AUTHOR: PBP EDITED: 79.02.16 PROGRAM RC36-00988.01 CASSETTE PRINT IMAGE KEYWORDS: MUSIL,CONVERSION,CT0,SP,LISTING ABSTRACT: THIS PROGRAM HANDLES NO LABEL CASSETTE TAPES WITH A BLOCKSIZE OF 256 BYTES, EACH BLOCK CONSISTING OF FIXED LENGTH RECORDS WITH ASCII CODE DATA. OUTPUT ON SERIAL PRINTER. THE PROGRAM MUST BE OPERATED FROM TTY. RCSL 43-GL8608: ASCII SOURCE TAPE RCSL 43-GL8610: REL.BIN/TTY ! «ff» ! RC36-00988 PAGE 01 TITLE: CASSETTE PRINT IMAGE. ABSTRACT: THIS PROGRAM HANDLES CASSETTE TAPES WITH A BLOCKSIZE OF 256 BYTES, EACH BLOCK CONSISTING OF FIXED LENGTH RECORDS WITH ASCII CODE DATA. OUTPUT ON SERIAL PRINTER. THE PROGRAM MUST BE OPERATED FROM TTY. SIZE: 3902 BYTES. INCLUDING ONE 256 BYTES INPUT BUFFERS AND FOUR 133 BYTES OUTPUT BUFFERS. DATE: 79.02.16. RUNTIME PARAMETERS: BLOCK NO : 00001 NEXT BLOCK TO BE READ FROM CURRENT FILE. FILE NO : 00002 THE FILE FROM WHICH THE BLOCK IS READ. RECSIZE : 00080 RECORDSIZE ON CASSETTE TAPE, MAX 256. ECMA34V2 : + + INDICATES ECMA 34 VERS 2 STANDARD. - INDICATES ECMA 34 VERS 1 STANDARD. TEXAS : - + INDICATES TEXAS SILENT CASSETTE - INDICATES CASETTE IN ECMA FORMAT SPECIFIED ABOVE. REWIND : + INDICATES IF REWIND OF TAPE AT EOF. MARGIN : 00000 SPACES TO THE LEFT OF THE PRINT LINE. OTHER OUTPUT MESSAGES: CONTSTATE: +/- STATE OF CONTINUE SWITCH (TTY ONLY). PROG NO : 988 PROGRAM EXECUTION IS STOPPED. RUNNING PROGRAM EXECUTION IS STARTED. MARGINERROR MARGIN > 20. MOUNT CASSETTE CASSETTE TAPE IS NOT MOUNTED CORRECTLY. CT ERROR NNNNN CONSULT THE RC3600 OPERATORS MANUAL. SP ERROR NNNNN CONSULT THE RC3600 OPERATORS MANUAL. END JOB PROGRAM EXECUTION IS TERMINATED. SUSPENDED PROGRAM EXECUTION IS STOPPED, RELEASING DRIVERS. INPUT MESSAGES: STOP STOPS EXECUTION WRITING PROG NO : 988. <ESC> NEXT PARAMETER IS DISPLAYED STATE ALL PARAMETERS ARE DISPLAYED (TTY ONLY). "VALUE" CURRENTLY DISPLAYED PARAMETER IS CHANGED TO "VALUE". "TEXT"="VALUE" THE PARAMETER IDENTIFIED BY "TEXT" IS CHANGED TO "VALUE". CONT STATE OF CONTINUE SWITCH IS INVERTED. SUSPEND PROGRAM EXECUTION IS STOPPED AND DRIVERS RELEASED. START PROGRAM EXECUTION IS STARTED. NOTE: AFTER CT ERROR START MEANS ACCEPTING THE ERRONEOUS INPUT, AFTER SP ERROR START MEANS REPEATING THE PRINT OPERATION. SPECIAL REQUIREMENTS: NONE. ! «ff» ! RC36-00988 PAGE 02 ! CONST NOQ= 8, OPTXTS= '<14><6> <10>PROG NO : 988<0> <10>BLOCK NO : <0> <10>FILE NO : <0> <10>RECSIZE : <0> <10>ECMA34V2 : <0> <10>TEXAS : <0> <10>REWIND : <0> <10>MARGIN : <0>', START= 'START', STOP= 'STOP', CONT= 'CONT', SUSPEND= 'SUSPEND', STATE= 'STATE', MINUS= '-', PLUS= '+', FIVE= '<5><0>', FIFTEEN= '<15><0>', NL= '<10>', NEXTPARAM= '<27>', SP1A= '<9>', ENDLINE= '<13><0>', RUNTXT= '<8><4><10>RUNNING<13><0>', MARGINERROR= '<10>MARGINERROR<13><0>', MTMOUNTTAPE= '<7><10>MOUNT CASSETTE<13><0>', MTTXT= '<7><10>CT ERROR ', LPTXT= '<7><10>SP ERROR ', EOJTXT= '<14><7><10>END JOB<13><0>', SUSTXT= '<7><10>SUSPENDED<13><0>', CONTSTATE= '<10>CONTSTATE: <0>', TRUE= -1, FALSE= -2, «ff» ! RC36-00988 PAGE 2A ! LPTABLE= ! ASCII TO ASCII TABLE USED FOR TEXAS SILENT CASETTE 0 1 2 3 4 5 6 7 ! # ! 0! 32 32 32 32 32 32 32 32 ! 8! 32 32 32 32 32 32 32 32 ! 16! 32 32 32 32 32 32 32 32 ! 24! 32 32 32 32 32 32 32 32 ! 32! 32 33 34 35 36 37 38 39 ! 40! 40 41 42 43 44 45 46 47 ! 48! 48 49 50 51 52 53 54 55 ! 56! 56 57 58 59 60 61 62 63 ! 64! 64 65 66 67 68 69 70 71 ! 72! 72 73 74 75 76 77 78 79 ! 80! 80 81 82 83 84 85 86 87 ! 88! 88 89 90 91 92 93 94 95 ! 96! 96 97 98 99 100 101 102 103 ! 104! 104 105 106 107 108 109 110 111 ! 112! 112 113 114 115 116 117 118 119 ! 120! 120 121 122 123 124 125 126 127 ! 128! 32 32 32 32 32 32 32 32 ! 136! 32 32 32 32 32 32 32 32 ! 144! 32 32 32 32 32 32 32 32 ! 152! 32 32 32 32 32 32 32 32 ! 160! 32 32 32 32 32 32 32 32 ! 168! 32 32 32 32 32 32 32 32 ! 176! 32 32 32 32 32 32 32 32 ! 184! 32 32 32 32 32 32 32 32 ! 192! 32 32 32 32 32 32 32 32 ! 200! 32 32 32 32 32 32 32 32 ! 208! 32 32 32 32 32 32 32 32 ! 216! 32 32 32 32 32 32 32 32 ! 224! 32 32 32 32 32 32 32 32 ! 232! 32 32 32 32 32 32 32 32 ! 240! 32 32 32 32 32 32 32 32 ! 248! 32 32 32 32 32 32 32 32 #; «ff» ! RC36-00988 PAGE 03 ! VAR OPDUMMY: STRING(2); ! RUNTIME PARAMETERS ! PROGNO: INTEGER; BLOCKNO: INTEGER; FILENO: INTEGER; RECLENGTH: INTEGER; ECMA34V2: INTEGER; TEXAS: INTEGER; REWIND: INTEGER; MARGIN: INTEGER; OPTEXT: STRING(20); ! COMMUNICATION AREA ! OPSTRING: STRING(20); OPDEC: STRING(10); OPCONT: STRING(2); ! INTERNAL VARIABLES ! NEXTCONT: STRING(1); GLCONT: STRING(1); ERRORNO: INTEGER; MASK: INTEGER; TOM: INTEGER; SIGN: INTEGER; Q: INTEGER; PAR: INTEGER; LENGTH: INTEGER; INDEX: INTEGER; LPLENGTH: INTEGER; LPDATALENGTH: INTEGER; P1: INTEGER; P2: INTEGER; P3: INTEGER; S1: STRING(2); S2: STRING(2); NEXTLP: INTEGER; STOPPED: INTEGER; «ff» ! RC36-00988 PAGE 04 ! IN: FILE ! INPUT FILE DESCRIPTION ! 'CT0', ! NAME OF INPUT DRIVER ! 14, ! KIND= REPEATABLE, ! ! POSITIONABLE, ! ! BLOCKED. ! 1, ! BUFFERS ! 256, ! BUFFERSIZE ! UB; ! UNIDENTIFIED BLOCKED ! CONV LPTABLE; GIVEUP MTINERROR, ! MT ERROR PROCEDURE ! 2'0111001111111111 ! GIVE UP MASK ! ! ALL REPEATABLE BITS OFF ! ! AND BIT 15 ON ! OF STRING(80); ! RECORD STRUCTURE ! OUT: FILE ! OUTPUT FILE DESCRIPTION ! 'SP', ! NAME OF OUTPUT DRIVER ! 2, ! KIND= BLOCKED ! 4, ! BUFFERS ! 133, ! BUFFERSIZE ! U; ! UNDEFINED ! GIVEUP LPERROR, ! LP ERROR PROCEDURE ! 2'1100001011110110 ! GIVE UP MASK ! OF RECORD ! RECORD STRUCTURE ! CCW: STRING(1); DATA: STRING(132) FROM 2 END; «ff» ! RC36-00988 PAGE 05 ! PROCEDURE CONTINUE; BEGIN GLCONT:=OPCONT; OPCONT:=NEXTCONT; NEXTCONT:=GLCONT; OPMESS(OPCONT); END; PROCEDURE OPSTOP; BEGIN OPWAIT(LENGTH); OPTEXT := OPSTRING; OPIN(OPSTRING); STOPPED := 0; IF OPTEXT = SUSPEND THEN STOPPED:= 3; IF OPTEXT = START THEN STOPPED := 2; IF OPTEXT = STOP THEN STOPPED := 1; IF OPTEXT = CONT THEN CONTINUE; END; PROCEDURE INITPOSITION; BEGIN IF IN.ZMODE = 0 THEN BEGIN IF TEXAS = TRUE THEN OPEN(IN,17) ELSE BEGIN IF ECMA34V2 = TRUE THEN OPEN(IN,1) ELSE OPEN(IN,9); END; END; IF OUT.ZMODE=0 THEN OPEN(OUT,7); SETPOSITION(IN,FILENO,BLOCKNO); 100: IF MARGIN > 20 THEN BEGIN OPMESS(MARGINERROR); OPSTOP; IF STOPPED = 1 THEN GOTO 1; GOTO 100; END; SETPOSITION(OUT,MARGIN,0); LPLENGTH:=133 - MARGIN; LPDATALENGTH:=LPLENGTH-1; END; «ff» ! RC36-00988 PAGE 06 ! PROCEDURE DIRECTUPDATE; BEGIN P1:=0; ! INDEX IN INPUT STRING ! P2:=0; ! INDEX IN CONSTANT STRING ! P3:=1; ! PARAMETER NUMBER IN CONSTANT STRING ! REPEAT BEGIN MOVE(OPTEXT,P1,S1,0,1); MOVE(OPTXTS,P2,S2,0,1); WHILE BYTE S1 <> BYTE S2 DO BEGIN IF BYTE S2 = 0 THEN P3:=P3+1; P2:=P2+1; MOVE(OPTXTS,P2,S2,0,1); IF P3>NOQ THEN S2:=S1; END; IF P3<=NOQ THEN BEGIN WHILE BYTE S1 = BYTE S2 DO BEGIN P1:=P1+1; P2:=P2+1; MOVE(OPTEXT,P1,S1,0,1); MOVE(OPTXTS,P2,S2,0,1); IF BYTE S1 = 61 THEN BEGIN MOVE(OPTEXT,P1+1,OPTEXT,0,10); LENGTH:=LENGTH-P1-1; Q:=P3; MOVE(OPDUMMY,Q*2,OPDUMMY,0,2); PAR:= WORD OPDUMMY; P3:=NOQ; END; END; P2:=P2-P1+1; P1:=0; END; END UNTIL P3>=NOQ; END; «ff» ! RC36-00988 PAGE 07 ! PROCEDURE OPCOM; BEGIN 1000: Q:=0; 1010: REPEAT BEGIN IF OPTEXT=STATE THEN BEGIN Q:=1; OPMESS(CONTSTATE); IF OPCONT=FIVE THEN OPMESS(PLUS); IF OPCONT=FIFTEEN THEN OPMESS(MINUS); GOTO 1040; END; 1015: Q:=Q+1; 1020: OPSTATUS(1 SHIFT(16-Q),OPTXTS); IF Q<>1 THEN BEGIN MOVE(OPDUMMY,Q*2,OPDUMMY,0,2); PAR:= WORD OPDUMMY; IF PAR = -1 THEN OPMESS(PLUS); IF PAR = -2 THEN OPMESS(MINUS); IF PAR >= 0 THEN BEGIN BINDEC(PAR,OPDEC); OPMESS(OPDEC); END; END; IF OPTEXT=STATE THEN GOTO 1060; 1040: OPMESS(ENDLINE); OPWAIT(LENGTH); OPTEXT:=OPSTRING; OPIN(OPSTRING); IF OPTEXT=STATE THEN BEGIN Q:=0; GOTO 1015; END; IF LENGTH > 6 THEN DIRECTUPDATE; IF LENGTH > 6 THEN GOTO 1020; IF OPTEXT = START THEN GOTO 1070; IF OPTEXT = STOP THEN GOTO 1000; IF OPTEXT = CONT THEN BEGIN CONTINUE; GOTO 1040; END; IF OPTEXT = NEXTPARAM THEN GOTO 1060; IF OPTEXT = NL THEN GOTO 1020; IF OPTEXT = ENDLINE THEN GOTO 1020; SIGN:=0; IF OPTEXT = MINUS THEN SIGN:=-1; IF OPTEXT = PLUS THEN SIGN:=+1; IF SIGN <> 0 THEN INSERT(48,OPTEXT,0); DECBIN(OPTEXT,TOM); IF PAR < 0 THEN BEGIN IF SIGN=0 THEN GOTO 1020; PAR:=-2; IF SIGN=1 THEN PAR:=-1; GOTO 1050; END; IF SIGN=0 THEN BEGIN SIGN:=1; PAR:=0; END; PAR:=PAR+TOM*SIGN; IF PAR<0 THEN GOTO 1020; 1050: INSERT(PAR SHIFT(-8),OPDUMMY,0); INSERT(PAR, OPDUMMY,1); MOVE(OPDUMMY,0,OPDUMMY,Q*2,2); IF OPTEST <> 0 THEN GOTO 1040; GOTO 1020; 1060: IF OPTEXT=STATE THEN IF Q<NOQ THEN GOTO 1015; END UNTIL Q>=NOQ; GOTO 1000; 1070: OPMESS(RUNTXT); END; «ff» ! RC36-00988 PAGE 08 ! PROCEDURE SHOWERROR; BEGIN ERRORNO:=20; WHILE MASK>0 DO BEGIN MASK:=MASK SHIFT 1; ERRORNO:=ERRORNO+1 END; BINDEC(ERRORNO,OPTEXT); OPMESS(OPTEXT); OPMESS(ENDLINE); END; PROCEDURE MTINERROR; BEGIN IF IN.Z0 AND 256 <> 0 THEN !EOF! GOTO 9; IF IN.Z0 AND 8'20 <> 0 THEN !EOT! GOTO 100; BLOCKNO:=IN.ZBLOCK; IF IN.Z0 SHIFT 1 < 0 THEN OPMESS(MTMOUNTTAPE); IF TEXAS = TRUE THEN BEGIN IF IN.Z0 AND 8'010000 <> 0 THEN GOTO 9; END; IF IN.Z0 SHIFT 1 >= 0 THEN BEGIN OPMESS(MTTXT); MASK:=IN.Z0; SHOWERROR; END; REPEAT OPSTOP UNTIL STOPPED <> 0; IF STOPPED = 3 THEN GOTO 12; IF STOPPED = 1 THEN GOTO 1; OPMESS(RUNTXT); 100: END; PROCEDURE LPERROR; BEGIN NEXTLP:= OUT.Z0 AND 8'000020; OUT.Z0:= OUT.Z0-NEXTLP; IF OUT.Z0 SHIFT 1 < 0 THEN OUT.Z0:= OUT.Z0 AND 8'041342; IF OUT.Z0 = 8'040000 THEN IF NEXTLP <> 0 THEN OUT.Z0:= NEXTLP; IF OUT.Z0 AND 8'001342 <> 0 THEN OUT.Z0:= OUT.Z0 AND 8'001342; IF OUT.Z0<>0 THEN BEGIN OPMESS(LPTXT); MASK:=OUT.Z0; SHOWERROR; NEXTLP:=0; REPEAT OPSTOP UNTIL STOPPED <> 0; IF STOPPED = 3 THEN GOTO 12; OPMESS(RUNTXT); IF OUT.Z0 AND 8'141362 <> 0 THEN REPEATSHARE(OUT); END; END; «ff» ! RC36-00988 PAGE 09 ! BEGIN IN.ZBLOCK:=1; BLOCKNO:=1; FILENO:=2; REWIND:=-1; MARGIN:=0; RECLENGTH := 80; NEXTLP:=0; ECMA34V2:=TRUE; OPCONT:=FIFTEEN; NEXTCONT:=FIVE; OPIN(OPSTRING); TEXAS:=FALSE; 1: OPCOM; 2: INITPOSITION; 3: REPEAT BEGIN GETREC(IN,RECLENGTH); BLOCKNO:=IN.ZBLOCK; INDEX:=0; WHILE RECLENGTH - INDEX >= LPDATALENGTH DO BEGIN PUTREC(OUT,LPLENGTH); OUT^.CCW:=SP1A; MOVE(IN^,INDEX,OUT^.DATA,0,LPDATALENGTH); INDEX:=INDEX + LPDATALENGTH; END; PUTREC(OUT,RECLENGTH-INDEX+1); MOVE(IN^,INDEX,OUT^.DATA,0,RECLENGTH-INDEX); OUT^.CCW:=SP1A; END UNTIL OPTEST <> 0; WAITZONE(OUT); OPSTOP; IF STOPPED = 1 THEN GOTO 1; IF STOPPED = 3 THEN GOTO 12; GOTO 3; ! END OF FILE HANDELING ! 9: CLOSE(OUT,1); BLOCKNO:=1; FILENO:=FILENO+1; IF OPCONT = FIVE THEN BEGIN CLOSE(IN,1); FILENO:=2; OPMESS(MTMOUNTTAPE); END; IF OPCONT = FIFTEEN THEN BEGIN CLOSE(IN,REWIND+2); IF REWIND=-1 THEN FILENO:=2; OPMESS(EOJTXT); END; 13: REPEAT OPSTOP UNTIL STOPPED <> 0; IF STOPPED = 1 THEN GOTO 1; IF STOPPED = 3 THEN GOTO 12; OPMESS(RUNTXT); GOTO 2; 12: OPMESS(SUSTXT); OUT.ZMODE:=0; CLOSE(IN,1); CLOSE(OUT,1); FILENO:=2; BLOCKNO:=1; GOTO 13; END; «ff» «nul»