|
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-8255, RCSL-43-GL-8256, RCSL-43-GL-8257 Names: »S1056«
└─⟦a59f0a452⟧ Bits:30000472 DOMUS disk image └─⟦this⟧
! RCSL: 43-GL8256 AUTHOR: PBP EDITED: 78.12.12 PROGRAM RC36-01056.00 MUS PRINT IMAGE KEYWORDS: MUSIL,CONVERSION,MTA,LPT,LISTING ABSTRACT: THIS PROGRAM HANDLES NO LABEL TAPES WITH A MAXIMUM BLOCK SIZE OF 1340 BYTES, EACH BLOCK CONSISTING OF FIXED LENGTH RECORDS WITH STANDARD IBM S/360 CCW CONTROL CHARACTERS AND EBCDIC CODE DATA. OUTPUT ON RC3600 SERIES PRINTERS WITH 64 CHARACTER ASCII DRUM. THE PROGRAM MAY BE OPERATED FROM EITHER OCP OR TTY. RCSL 43-GL8255: ASCII SOURCE TAPE RCSL 43-GL8257: REL/BIN ! «ff» ! RC36-01056 PAGE 01 TITLE: MUS PRINT IMAGE. ABSTRACT: THIS PROGRAM HANDLES NO LABEL TAPES WITH A MAXIMUM BLOCK SIZE OF 1340 BYTES, EACH BLOCK CONSISTING OF FIXED LENGTH RECORDS WITH STANDARD IBM S/360 CCW CONTROL CHARACTERS AND EBCDIC CODE DATA. OUTPUT ON RC3600 SERIES PRINTERS WITH 64 CHARACTER ASCII DRUM. THE PROGRAM MAY BE OPERATED FROM EITHER OCP OR TTY. SIZE: 5738 BYTES. INCLUDING ONE 1340 BYTES INPUT BUFFER AND EIGHT 133 BYTES OUTPUT BUFFERS. DATE: DECEMBER 12TH 1978. RUNTIME PARAMETERS: BLOCK NO : 00001 NEXT BLOCK TO BE READ FROM CURRENT FILE. FILE NO : 00001 THE FILE FROM WHICH THE BLOCK IS READ. REWIND : + INDICATES IF REWIND OF TAPE AT EOF. MARGIN : 00000 SPACES TO THE LEFT OF THE PRINT LINE. SELECT : 00999 DEFAULT CCW SWITCH, SELECT MODE/VALUE. RECSIZE : 00133 LENGTH OF INPUT RECORD. OTHER OUTPUT MESSAGES: CONTSTATE: +/- STATE OF CONTINUE SWITCH (TTY ONLY). PROG NO : 1056 PROGRAM EXECUTION IS STOPPED. RUNNING PROGRAM EXECUTION IS STARTED. SUSPENDED DRIVERS RELEASED, PROGRAM EXECUTION IS STOPPED. MOUNT DATA TAPE MT-UNIT IS NOT ON-LINE. MT ERROR NNNNN CONSULT THE RC3600 OPERATORS MANUAL. LP ERROR NNNNN CONSULT THE RC3600 OPERATORS MANUAL. END JOB PROGRAM EXECUTION IS TERMINATED. INPUT MESSAGES: STOP STOPS EXECUTION WRITING PROG NO : 1056. SUSPEND STOPS EXECUTION RELEASING DRIVERS (TTY ONLY). INT NEXT PARAMETER IS DISPLAYED (ESCAPE BUTTON ON TTY HAS SAME EFFECT). 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. START PROGRAM EXECUTION IS STARTED. NOTE: AFTER MT ERROR START MEANS ACCEPTING THE ERRONEOUS INPUT, AFTER LP ERROR START MEANS REPEATING THE PRINT OPERATION. SPECIAL REQUIREMENTS: NONE. ! «ff» ! RC36-01056 PAGE 02 ! CONST NOQ= 7, OPTXTS= '<14><6> <10>PROG NO : 1056<0> <10>BLOCK NO : <0> <10>FILE NO : <0> <10>REWIND : <0> <10>SELECT : <0> <10>MARGIN : <0> <10>RECSIZE : <0>', START= 'START', STOP= 'STOP', SUSPEND= 'SUSPEND', CONT= 'CONT', INT= 'INT', STATE= 'STATE', MINUS= '-', PLUS= '+', FIVE= '<5><0>', FIFTEEN= '<15><0>', NL= '<10>', NEXTPARAM= '<27>', SP1A= '<9>', ENDLINE= '<13><0>', RETURN= '<13>', RUNTXT= '<8><4><10>RUNNING<13><0>', MTTXT= '<7><10>MT ERROR ', LPTXT= '<7><10>LP ERROR ', EOJTXT= '<14><7><10>END JOB<13><0>', SUSTXT= '<7><10>SUSPENDED<13><0>', MTMOUNTTAPE= '<14><7><10>MOUNT DATA TAPE<13><0>', CONTSTATE= '<10>CONTSTATE: <0>', «ff» ! RC36-01056 PAGE 03 ! LPTABLE= ! EBCDIC TO 64 CHARACTER ASCII DRUM 0 1 2 3 4 5 6 7 ! # ! 0 ! 255 255 255 255 255 255 255 255 ! 8 ! 255 255 255 255 255 255 255 255 ! 16 ! 255 255 255 255 255 255 255 255 ! 24 ! 255 255 255 255 255 255 255 255 ! 32 ! 255 255 255 255 255 255 255 255 ! 40 ! 255 255 255 255 255 255 255 255 ! 48 ! 255 255 255 255 255 255 255 255 ! 56 ! 255 255 255 255 255 255 255 255 ! 64 ! 255 255 255 255 255 255 255 255 ! 72 ! 255 255 91 46 60 40 43 92 ! 80 ! 38 255 255 255 255 255 255 255 ! 88 ! 255 255 33 36 42 41 59 93 ! 96 ! 45 47 255 255 255 255 255 255 ! 104 ! 255 255 255 44 37 94 62 63 ! 112 ! 255 255 255 255 255 255 255 255 ! 120 ! 255 255 58 35 64 39 61 34 ! 128 ! 255 65 66 67 68 69 70 71 ! 136 ! 72 73 255 255 255 255 255 255 ! 144 ! 255 74 75 76 77 78 79 80 ! 152 ! 81 82 255 255 255 255 255 255 ! 160 ! 255 255 83 84 85 86 87 88 ! 168 ! 89 90 255 255 255 255 255 255 ! 176 ! 255 255 255 255 255 255 255 255 ! 184 ! 255 255 255 255 255 255 255 255 ! 192 ! 255 65 66 67 68 69 70 71 ! 200 ! 72 73 255 255 255 255 255 255 ! 208 ! 255 74 75 76 77 78 79 80 ! 216 ! 81 82 255 255 255 255 255 255 ! 224 ! 255 255 83 84 85 86 87 88 ! 232 ! 89 90 255 255 255 255 255 255 ! 240 ! 48 49 50 51 52 53 54 55 ! 248 ! 56 57 255 255 255 255 255 255 #; «ff» ! RC36-01056 PAGE 04 ! VAR OPDUMMY: STRING(2); ! RUNTIME PARAMETERS ! PROGNO: INTEGER; BLOCKNO: INTEGER; FILENO: INTEGER; REWIND: INTEGER; SELECT: INTEGER; MARGIN: INTEGER; RECSIZE: INTEGER; OPTEXT: STRING(20); ! COMMUNICATION AREA ! OPSTRING: STRING(20); OPDEC: STRING(10); OPCONT: STRING(2); ! INTERNAL VARIABLES ! NEXTCONT: STRING(1); GLCONT: STRING(1); CURZZZ: STRING(1); SELX: INTEGER; SELY: INTEGER; SELZZZ: INTEGER; DATAINDEX: INTEGER; SELECTINDEX: INTEGER; ERRORNO: INTEGER; MASK: INTEGER; TOM: INTEGER; SIGN: INTEGER; Q: INTEGER; PAR: INTEGER; LENGTH: INTEGER; RECLENGTH: INTEGER; LPLENGTH: INTEGER; LPDATALENGTH: INTEGER; P1: INTEGER; P2: INTEGER; P3: INTEGER; S1: STRING(2); S2: STRING(2); NEXTLP: INTEGER; CHAR: INTEGER;«ff» ! RC36-01056 PAGE 05 ! IN: FILE ! INPUT FILE DESCRIPTION ! 'MT0', ! NAME OF INPUT DRIVER ! 14, ! KIND= REPEATABLE, ! ! POSITIONABLE, ! ! BLOCKED. ! 1, ! BUFFERS ! 1340, ! SHARESIZE ! FB; ! FIXED BLOCKED ! GIVEUP MTINERROR, ! MT ERROR PROCEDURE ! 2'0110001111011011 ! GIVE UP MASK ! ! ALL REPEATABLE BITS OFF ! ! AND BIT 15 ON ! OF RECORD ! RECORD STRUCTURE ! CCW: STRING(1); SELECT1: STRING(1) FROM 1; DATA: STRING(1) FROM 1; SELECT2: STRING(1) FROM 2 END; OUT: FILE ! OUTPUT FILE DESCRIPTION ! 'LPT', ! NAME OF OUTPUT DRIVER ! 2, ! KIND= BLOCKED ! 8, ! BUFFERS ! 133, ! SHARESIZE ! U; ! UNDEFINED ! GIVEUP LPERROR, ! LP ERROR PROCEDURE ! 2'1100001011110010; ! GIVE UP MASK ! CONV LPTABLE ! CONVERSION TABLE ! OF RECORD ! RECORD STRUCTURE ! CCW: STRING(1); DATA: STRING(1) END; «ff» ! RC36-01056 PAGE 06 ! PROCEDURE INITPOSITION; BEGIN IF IN.ZMODE=0 THEN OPEN(IN,1); IF OUT.ZMODE=0 THEN OPEN(OUT,7); SETPOSITION(IN,FILENO,BLOCKNO); SETPOSITION(OUT,MARGIN,0); IN.ZLENGTH:=RECSIZE; SELX:=SELECT/10000; SELY:=(SELECT-SELX*10000)/1000; SELZZZ:=(SELECT-SELX*10000)-SELY*1000; DATAINDEX:=1-SELX; IF SELZZZ<256 THEN DATAINDEX:=DATAINDEX+1; SELECTINDEX:=DATAINDEX-1; LPLENGTH:=RECSIZE-DATAINDEX+1; IF LPLENGTH+MARGIN>133 THEN LPLENGTH:=133-MARGIN; LPDATALENGTH:=LPLENGTH-1; END; PROCEDURE CONTINUE; BEGIN GLCONT:=OPCONT; OPCONT:=NEXTCONT; NEXTCONT:=GLCONT; OPMESS(OPCONT); END; «ff» ! RC36-01056 PAGE 07 ! 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-01056 PAGE 08 ! 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 OPTEXT=SUSPEND THEN GOTO 9; 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 = INT THEN GOTO 1060; IF OPTEXT = NEXTPARAM THEN GOTO 1060; IF OPTEXT = NL THEN GOTO 1020; IF OPTEXT = ENDLINE THEN GOTO 1020; IF OPTEXT = RETURN 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-01056 PAGE 09 ! PROCEDURE OPSTOP; BEGIN OPWAIT(LENGTH); OPTEXT:=OPSTRING; OPIN(OPSTRING); IF OPTEXT=CONT THEN CONTINUE; IF OPTEXT=STOP THEN GOTO 1; IF OPTEXT=SUSPEND THEN GOTO 9; END; 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'041000 = 0 THEN BLOCKNO:=IN.ZBLOCK; IF IN.Z0 SHIFT 1 < 0 THEN OPMESS(MTMOUNTTAPE); IF IN.Z0 SHIFT 1 >= 0 THEN BEGIN OPMESS(MTTXT); MASK:=IN.Z0; SHOWERROR; END; REPEAT OPSTOP UNTIL OPTEXT=START; OPMESS(RUNTXT); 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); BLOCKNO:=IN.ZBLOCK; MASK:=OUT.Z0; SHOWERROR; NEXTLP:=0; REPEAT OPSTOP UNTIL OPTEXT=START; OPMESS(RUNTXT); IF OUT.Z0 AND 8'141362 <> 0 THEN REPEATSHARE(OUT); END; END; «ff» ! RC36-01056 PAGE 10 ! BEGIN IN.ZBLOCK:=1; BLOCKNO:=1; FILENO:=1; REWIND:=-1; SELECT:=999; MARGIN:=0; RECSIZE:=133; NEXTLP:=0; OPCONT:=FIFTEEN; NEXTCONT:=FIVE; OPIN(OPSTRING); 1: OPCOM; INITPOSITION; IF OPTEST<>0 THEN OPSTOP; 2: REPEAT BEGIN GETREC(IN,RECLENGTH); IF SELZZZ<256 THEN BEGIN MOVE(IN^.DATA,SELECTINDEX,CURZZZ,0,1); IF SELY=0 THEN BEGIN IF BYTE CURZZZ<>SELZZZ THEN GOTO 5; GOTO 3; END; IF BYTE CURZZZ AND SELZZZ=0 THEN GOTO 5; END; 3: PUTREC(OUT,LPLENGTH); IF SELX=0 THEN BEGIN CHAR:=BYTE IN^.CCW; CHAR:=CHAR SHIFT 14; CHAR:=CHAR SHIFT (-15); IF CHAR = 1 THEN BEGIN CHAR:=(BYTE IN^.CCW) + 4; INSERT (CHAR,OUT^,0) END ELSE OUT^.CCW:=IN^.CCW; GOTO 4; END; OUT^.CCW:=SP1A; 4: MOVE(IN^.DATA,DATAINDEX,OUT^.DATA,0,LPDATALENGTH); 5: END UNTIL IN.ZREM<RECSIZE; BLOCKNO:=IN.ZBLOCK; IF OPTEST=0 THEN GOTO 2; WAITZONE(OUT); OPSTOP; GOTO 2; 9: CLOSE(OUT,1); IF OPTEXT=SUSPEND THEN BEGIN CLOSE(IN,1); OPMESS(SUSTXT); GOTO 10; END; BLOCKNO:=1; FILENO:=FILENO+1; IF OPCONT = FIVE THEN BEGIN CLOSE(IN,1); FILENO:=1; OPMESS(MTMOUNTTAPE); END; IF OPCONT = FIFTEEN THEN BEGIN CLOSE(IN,REWIND+2); IF REWIND=-1 THEN FILENO:=1; OPMESS(EOJTXT); END; 10: REPEAT OPSTOP UNTIL OPTEXT=START; INITPOSITION; OPMESS(RUNTXT); GOTO 2; END; «ff» «ff» «nul»