|
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: 14848 (0x3a00) Types: TextFile Notes: RCSL-43-GL-8228, RCSL-43-GL-8229, RCSL-43-GL-8230 Names: »SSPEC«
└─⟦a59f0a452⟧ Bits:30000472 DOMUS disk image └─⟦this⟧
! RCSL: 43-GL8229 AUTHOR: PBP EDITED: 78.12.05 PROGRAM RC36-01053.00 IBM 3740 DISKETTE PRINT IMAGE KEYWORDS: MUSIL,CONVERSION,FD0,A3740,SP,LISTING ABSTRACT: THIS PROGRAM HANDLES IBM 3740 FORMATTED DISKETTES. EACH SECTOR IS PRINTED AS ONE LINE. OUTPUT ON SERIAL PRINTER. THE PROGRAM MUST BE OPERATED FROM TTY. RCSL 43-GL8228: ASCII SOURCE TAPE RCSL 43-GL8230: REL/BIN ! «ff» ! RC36-01053 PAGE 01 TITLE: IBM 3740 DISKETTE PRINT IMAGE ABSTRACT: THIS PROGRAM HANDLES IBM 3740 FORMATTED DISKETTES. EACH SECTOR IS PRINTED AS ONE LINE. OUTPUT ON SERIAL PRINTER. THE PROGRAM MUST BE OPERATED FROM TTY. SIZE: 04152 BYTES. INCLUDING TWO 128 BYTES INPUT BUFFERS AND THREE 133 BYTES OUTPUT BUFFERS. DATE: 78.12.05 RUNTIME PARAMETERS: DATASET NAME : NAME OF DATASET TO BE PRINTED. IF THIS PARAMETER IS EMPTY ALL DATASETS ON THE DISKETTE WILL BE LISTED. BLOCK NO : 1 NEXT BLOCK TO BE READ FROM DISKETTE. LABELPRINT : - INDICATES IF DISKETTE LABELS SHOULD BE PRINTED OR NOT. FD UNIT : UNIT NUMBER (0 - 1). OTHER OUTPUT MESSAGES: PROG NO : 1053 PROGRAM EXECUTION IS STOPPED. RUNNING PROGRAM EXECUTION IS STARTED. SUSPENDED DRIVERS RELEASED, PROGRAM EXECUTION IS STOPPED. SP ERROR NNNNN CONSULT THE RC3600 OPERATOR MANUAL. FD ERROR NNNNN CONSULT THE RC3600 OPERATOR MANUAL. MOUNT DISKETTE DISKETTE UNIT IS OFFLINE OR EMPTY. MOUNT NEXT DISKETTE THE DATASET IS CONTINUING ON NEXT DISKETTE. END JOB PROGRAM EXECUTION IS TERMINATED. INPUT MESSAGES: STOP STOPS EXECUTION WRITING PROG NO : 1053. SUSPEND STOPS EXECUTION RELEASING DRIVERS (TTY ONLY). <ESC> NEXT PARAMETER IS DISPLAYED STATE ALL PARAMETERS ARE DISPLAYED (TTY ONLY). "VALUE" CURRENTLY DISPLAYED PAPAMETER IS CHANGED TO "VALUE". "TEXT"="VALUE" THE PARAMETER IDENTIFIED BY "TEXT" IS CHANGED TO "VALUE". START PROGRAM EXECUTION IS STARTED. NOTE: AFTER A DEVICE ERROR STOP HAS NO EFFECT. SPECIAL REQUIREMENTS: NONE. ! «ff» ! RC36-01053 PAGE 02 ! CONST NOQ= 5, OPTXTS= '<10>PROG NO : 1053<0> <10>DATASET NAME : <0> <10>BLOCK NO : <0> <10>LABELPRINT : <0> <10>FDUNIT : <0>', START= 'START', STOP= 'STOP', SUSPEND= 'SUSPEND', STATE= 'STATE', MINUS= '-', PLUS= '+', FIVE= '<5><0>', FIFTEEN= '<15><0>', NL= '<10><0>', NEXTPARAM= '<27>', ENDLINE= '<13><0>', BELL= '<7><7><7>', RUNTXT= '<8><4><10>RUNNING<13><0>', SUSTXT= '<7><10>SUSPENDED<13><10>', FDTXT= '<7><10>FD ERROR ', LPTXT= '<7><10>SP ERROR ', EOJTXT= '<14><7><10>END JOB<13><0>', MOUNTDISK= '<7><10>MOUNT DISKETTE<13><0>', FDEOF= '<7><10>MOUNT NEXT DISKETTE<13><0>', WRONGUNIT= '<7><10>FD UNIT CONFLICT<13><0>', INITINF= '<0><0><0><0><0><0><0><0><0><0><0><0><0><0><0><0><0><0><0><0>', READ= 8'122, ZERO= 8'60, D3740= 'A3740', FD0= 'FD0<0><0>', TRUE= -1, FALSE= -2, FF= '<143>', SP1A= '<9>', SP2A= '<17>', ASCIISPS= ' ', «ff» ! SPECIAL TABLE POST & TELEGRAFVAESNET ! ! RC36-01053 PAGE 03 ! LPTABLE=# 31 31 31 31 31 31 31 31 31 31 31 31 31 31 31 31 31 31 31 31 31 31 31 31 31 31 31 31 31 31 31 31 31 31 31 31 31 31 31 31 31 31 31 31 31 31 31 31 31 31 31 31 31 31 31 31 31 31 31 31 31 31 31 31 31 31 31 31 31 31 31 31 31 31 50 32 53 48 46 50 58 31 31 31 31 31 31 31 31 31 60 70 59 49 35 50 47 55 31 31 31 31 31 31 31 31 31 33 57 56 54 63 31 31 31 31 31 31 31 31 31 31 34 72 71 61 52 62 31 95 94 93 92 91 90 89 88 87 31 31 31 31 31 31 31 86 85 84 83 82 81 80 79 78 31 31 31 31 31 31 31 31 77 76 75 74 73 69 68 67 66 31 31 31 31 31 31 31 31 31 31 31 31 31 31 31 31 31 31 31 31 31 31 95 94 93 92 91 90 89 88 87 31 31 31 31 31 31 31 86 85 84 83 82 81 80 79 78 31 31 31 31 31 31 31 31 77 76 75 74 73 69 68 67 31 31 31 31 31 31 36 37 38 39 40 41 42 43 44 45 94 31 31 31 31 31 #, «ff» ! RC36-01053 PAGE 04 ! ! ASCII TO EBCDIC CONVERSION TABLE : ! AETAB= ! 0 1 2 3 4 5 6 7! # ! 0 ! 75 64 64 64 64 64 64 64 ! 8 ! 64 64 64 64 64 64 64 64 ! 16 ! 64 64 64 64 64 64 64 64 ! 24 ! 64 64 64 64 64 64 64 64 ! 32 ! 75 90 127 123 91 108 80 125 ! 40 ! 77 93 92 78 107 96 75 97 ! 48 ! 77 93 242 243 244 245 246 247 ! 56 ! 248 249 122 94 76 126 110 111 ! 64 ! 124 193 170 195 168 197 198 199 ! 72 ! 200 166 209 210 211 162 213 214 ! 80 ! 215 216 149 226 227 228 229 230 ! 88 ! 231 232 233 173 224 189 250 109 ! 96 ! 121 129 130 131 132 133 134 135 ! 104 ! 136 137 145 146 147 148 149 150 ! 112 ! 151 152 153 162 163 164 165 166 ! 120 ! 167 168 169 192 106 208 161 7 #; «ff» ! RC36-01053 PAGE 05 ! VAR OPDUMMY: STRING(2); ! RUNTIME PARAMETERS ! PROGNO: INTEGER; TPAR1: INTEGER; INBLOK: INTEGER; LABELPRINT: INTEGER; FDUNIT: INTEGER; OPTEXT: STRING(80); ! COMMUNICATION AREA ! OPSTRING: STRING(80); OPDEC: STRING(10); OPCONT: STRING(2); ! INTERNAL VARIABLES ! NEXTCONT: STRING(1); ! USED BY STANDARD ! GLCONT: STRING(1); ! PROCEDURES. ! ERRORNO: INTEGER; MASK: INTEGER; TOM: INTEGER; SIGN: INTEGER; Q: INTEGER; PAR: INTEGER; LENGTH: INTEGER; P1: INTEGER; P2: INTEGER; P3: INTEGER; S1: STRING(2); S2: STRING(2); NEXTLP: INTEGER; SAVEZCONV: INTEGER; BLOCKNO: INTEGER; STOPPED: INTEGER; RECLENGTH: INTEGER; SEQCHECK: INTEGER; INDEX: INTEGER; OFFLINE: INTEGER; STR3740: STRING(18); DATASETNAME: STRING(9); «ff» ! RC36-01053 PAGE 06 ! IN: FILE ! INPUT FILE DESCRIPTION ! 'A3740', ! NAME OF INPUT DRIVER ! 14, ! KIND= BLOCKED, ! ! REPEATABLE, ! ! POSITIONABLE, ! 2, ! BUFFERS ! 128, ! SHARESIZE ! U; ! UNDEFINED ! CONV STR3740; GIVEUP RDERROR, ! FD ERROR PROCEDURE ! 2'1110001111111110 ! GIVE UP MASK ! OF STRING(128); ! RECORD STRUCTURE ! OUT: FILE ! OUTPUT FILE DESCRIPTION ! 'SP', ! NAME OF OUTPUT DRIVER ! 2, ! KIND= BLOCKED ! 3, ! BUFFERS ! 133, ! SHARESIZE ! U; ! UNDEFINED ! CONV LPTABLE; GIVEUP LPERROR, ! LP ERROR PROCEDURE ! 2'1100001011110110 ! GIVE UP MASK ! OF RECORD ! RECORD STRUCTURE ! CCW: STRING(1); DATA: STRING(132) END; «ff» ! RC36-01053 PAGE 07 ! PROCEDURE OPSTOP; BEGIN OPWAIT(LENGTH); OPTEXT:=OPSTRING; OPIN(OPSTRING); STOPPED:= 0; IF OPTEXT=STOP THEN STOPPED:= 1; IF OPTEXT=START THEN STOPPED:= 2; IF OPTEXT=SUSPEND THEN STOPPED:=3; END; PROCEDURE OPEN3740; BEGIN ! TRANSFER VOL-ID + DATASETNAME + INFORMATION ! ! ABOUT CHECK OF SEQUENCE-NUMBER ON ! ! MULTI-VOLUME-DATASETS ! STR3740:=ASCIISPS; INSERT(READ,STR3740,0); INSERT(FDUNIT+48,STR3740,1); MOVE(ASCIISPS,0,STR3740,3,6); MOVE(DATASETNAME,0,STR3740,9,8); CONVERT(STR3740,STR3740,AETAB,18); CONVERT(STR3740,STR3740,LPTABLE,18); OPEN(IN,1); END; «ff» ! RC 36-01053 PAGE 08 ! 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,20); 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-001053 PAGE 09 ! PROCEDURE OPCOM; BEGIN 1000: Q:=0; 1010: REPEAT BEGIN IF OPTEXT=STATE THEN BEGIN Q:=1; 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 = -3 THEN OPMESS(DATASETNAME); 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 OPTEXT=SUSPEND THEN GOTO 12; IF LENGTH > 6 THEN DIRECTUPDATE; IF OPTEXT = START THEN GOTO 1070; IF OPTEXT = STOP THEN GOTO 1000; IF OPTEXT = NEXTPARAM THEN GOTO 1060; IF OPTEXT = NL THEN GOTO 1020; IF OPTEXT = ENDLINE THEN GOTO 1020; IF PAR = -3 THEN BEGIN IF LENGTH >9 THEN LENGTH:=9; DATASETNAME:=INITINF; MOVE(OPTEXT,0,DATASETNAME,0,LENGTH-1); GOTO 1055; END; 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); 1055: 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-01053 PAGE 10 ! 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 RDERROR; BEGIN IF IN.Z0 SHIFT 1 < 0 THEN BEGIN OFFLINE:=OFFLINE-1; IF OFFLINE > 0 THEN REPEATSHARE(IN); OPMESS(MOUNTDISK); OFFLINE:=5; END; IF IN.Z0 AND 8'400 <> 0 THEN GOTO 9; IF IN.Z0 AND 8'20 <> 0 THEN GOTO 10; IF IN.Z0 SHIFT 1 > 0 THEN BEGIN OPMESS(FDTXT); MASK:=IN.Z0; SHOWERROR; END; REPEAT OPSTOP; IF OPTEXT = STOP THEN GOTO 1; IF OPTEXT = SUSPEND THEN GOTO 12 UNTIL OPTEXT = START; 100: OPMESS(RUNTXT); REPEATSHARE(IN); END; «ff» ! RC36-01053 PAGE 11 ! 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 > 1; IF STOPPED = 3 THEN GOTO 12; OPMESS(RUNTXT); IF OUT.Z0 AND 8'141362 <> 0 THEN REPEATSHARE(OUT); END; END; PROCEDURE INITPOSITION; BEGIN IF OUT.ZMODE = 0 THEN BEGIN OPEN(OUT,7); PUTREC(OUT,1); OUT^.CCW:=FF; END; IF FDUNIT >=0 THEN IF FDUNIT <=1 THEN GOTO 200; OPMESS(WRONGUNIT); REPEAT OPSTOP UNTIL STOPPED <>0; IF STOPPED = 1 THEN GOTO 1; IF STOPPED = 3 THEN GOTO 12; 200: END; «ff» ! RC36-01053 PAGE 12 ! BEGIN !INITIALIZATION ! OPIN(OPSTRING); DATASETNAME:=INITINF; TPAR1:=-3; INBLOK:=1; BLOCKNO:=1; LABELPRINT:=FALSE; OFFLINE:=5; SAVEZCONV:=IN.ZCONV; FDUNIT:=0; 1: OPCOM; 2: INITPOSITION; ! MAIN LOOP ! IF LABELPRINT = TRUE THEN BEGIN IF IN.ZMODE = 0 THEN BEGIN IN.ZNAME:=FD0; IN.ZCONV:=0; OPEN(IN,FDUNIT*256+17); SETPOSITION(IN,0,7); REPEAT BEGIN GETREC(IN,RECLENGTH); BLOCKNO:=IN.ZBLOCK; PUTREC(OUT,81); OUT^.CCW:=SP2A; MOVE(IN^,0,OUT^.DATA,0,80); END UNTIL BLOCKNO > 26; CLOSE(IN,1); CLOSE(OUT,0); END; END; ! LABELPRINT ! «ff» ! RC36-01053 PAGE 13 ! ! DATA PRINT ! 3: IN.ZNAME := D3740; IN.ZCONV:=SAVEZCONV; IF IN.ZMODE = 0 THEN OPEN3740; SETPOSITION(IN, 0, INBLOK); INITPOSITION; 7: REPEAT BEGIN GETREC(IN,RECLENGTH); INBLOK:=IN.ZBLOCK; PUTREC(OUT,RECLENGTH+1); OUT^.CCW:=SP1A; MOVE(IN^,0,OUT^.DATA,0,RECLENGTH); END UNTIL OPTEST <> 0; OPSTOP; IF STOPPED = 1 THEN GOTO 1; IF STOPPED = 3 THEN GOTO 12; GOTO 7; ! END OF FILE HANDELING ! 10: CLOSE(IN,1); OPMESS(FDEOF); REPEAT OPSTOP UNTIL STOPPED <> 0; IF STOPPED = 1 THEN GOTO 1; IF STOPPED = 3 THEN GOTO 12; OPMESS(RUNTXT); INBLOK:=1; GOTO 3; 9: OPMESS(EOJTXT); GOTO 13; 12: OUT.ZMODE:=0; OPMESS(SUSTXT); 13: CLOSE(IN,1); CLOSE(OUT,1); BLOCKNO:=1; INBLOK:=1; OFFLINE:=5; REPEAT OPSTOP UNTIL STOPPED <> 0; IF STOPPED = 1 THEN GOTO 1; IF STOPPED = 3 THEN GOTO 12; OPMESS(RUNTXT); GOTO 2; END; «ff» «nul»