|
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: 19456 (0x4c00) Types: TextFile Notes: RCSL-43-GL-4928, RCSL-43-GL-4931, RCSL-43-GL-4934, RCSL-43-GL-9010, RCSL-43-GL-9011, RCSL-43-GL-9012 Names: »S982«
└─⟦a59f0a452⟧ Bits:30000472 DOMUS disk image └─⟦this⟧ »/S982«
S982! RCSL: 43-GL9011 AUTHOR: PBP EDITED: 79.05.07 PROGRAM RC36-00982.01 IBM-LABELLED MAGTAPE TO CASSETTE WITH LOG. KEYWORDS: MUS,CONVERSION,MTA,CT,SP,LISTING ABSTRACT: THIS PROGRAMS HANDLES STANDARD IBM OS LABELLED MAGNETIC TAPES WITH A MAX BLOCK SIZE 2000 BYTES AND MAX RECORD SIZE 172 BYTES, AND EBCDIC CODE DATA. OUTPUT ON CASSETTE TAPE WRITTEN IN ECMA 34 VERSION 1 OR 2, WITH ASCII CODE DATA. ONE INPUT RECORD IS ONE BLOCK ON THE CASSETTE. THE MAGNETIC TAPE MAY CONTAIN MORE THAN ONE DATASET. A LOG CONTAINING STATISTICS FOR THE JOB IS OUTPUT ON SERIAL PRINTER OR TTY. THE PROGRAM MUST BE OPERATED FROM TTY. RCSL 43-GL9010: ASCII SOURCE TAPE. RCSL 43-GL9012: REL.BIN/TTY ! «ff» ! RC36-00982 PAGE 01 TITLE: IBM-LABELLED MAGTAPE TO CASSETTE WITH LOG. ABSTRACT: THIS PROGRAMS HANDLES STANDARD IBM OS LABELLED MAGNETIC TAPES WITH A MAX BLOCK SIZE 2000 BYTES AND MAX RECORD SIZE 172 BYTES, AND EBCDIC CODE DATA. OUTPUT ON CASSETTE TAPE WRITTEN IN ECMA 34 VERSION 1 OR 2, WITH ASCII CODE DATA. ONE INPUT RECORD IS ONE BLOCK ON THE CASSETTE. THE MAGNETIC TAPE MAY CONTAIN MORE THAN ONE DATASET. A LOG CONTAINING STATISTICS FOR THE JOB IS OUTPUT ON EITHER SERIAL PRINTER OR TTY. THE PROGRAM MUST BE OPERATED FROM TTY. SIZE: 6786 BYTES. INCLUDING : ONE 172 BYTES CASSETTE TAPE BUFFER, AND ONE 2000 BYTES MAGNETIC TAPE BUFFER. DATE: 79.05.07 RUNTIME PARAMETERS: DATASET : 00001 THE DATASET NUMBER TO BE READ. IN BLOCKNO : 00001 NEXT BLOCK TO BE READ FROM DATASET. RECORDSIZE : 00080 INPUT RECORDSIZE, MAX 172. ECMA34V2 : + + THE CASSETTE IS ECMA 34 VERSION 2. - THE CASSETTE IS ECMA 34 VERSION 1. OUT BLOCKNO: 00001 THE NEXT BLOCK TO BE WRITTEN TO CASSETTE. MT UNIT : 00000 MT UNIT NUMBER (0-3). LOGPRINT : + + LOG ON SERIAL PRINTER, - LOG ON TTY. OTHER OUTPUT MESSAGES: CONTSTATE: +/- STATE OF CONTINUE SWITCH (TTY ONLY). PROG NO : 982 PROGRAM EXECUTION IS STOPPED. RUNNING PROGRAM EXECUTION IS STARTED. SUSPENDED DRIVERS RELEASED, PROGRAM EXECUTION IS STOPPED. MT ERROR NNNNN CONSULT THE RC3600 OPERATORS GUIDE. CT ERROR NNNNN CONSULT THE RC3600 OPERATORS GUIDE. MOUNT TAPE MT-UNIT IS NOT ON-LINE. MOUNT LABEL TAPE THE TAPE CONTAINS NO VOLUME-LABEL. RECORDSIZE ERROR RECORDSIZE IS GREATER THAN 172 BYTES. MOUNT NEXT CASSETTE CURRENT CASSETTE IS FULL AND MORE DATA IS PRESSENT. START WILL CONTINUE ON NEW CASSETTE. STOP WILL TERMINATE THE JOB. END JOB PROGRAM EXECUTION IS TERMINATED. INPUT MESSAGES: STOP STOPS EXECUTION WRITTING PROG NO : 982. SUSPEND STOPS EXECUTING, 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". START PROGRAM EXECUTION IS STARTED. NOTE: AFTER INPUT ERROR START MEANS ACCEPTING THE ERROR, AFTER OUTPUT ERROR START MEANS REPEATING THE OUTPUT OPERATION. LOG THE LOG IS OUTPUT ON THE SELECTED LOG-DEVICE. ! «ff» ! RC36-00982 PAGE 03 ! ! DESCRIPTION OF THE LOG: THE LOG CONTAINS A HEADLINE DESCRIBING INPUT AND OUTPUT MEDIUM (DRIVER NAMES), DATE AND TIME. AFTER THE HEADLINE THE ACTUAL POSITIONS ON INPUT/OUTPUT DEVICES ARE PRINTED. THE VOLUME-NUMBER/DATASET-NUMBER AND RECORD/BLOCK NUMBERS ARE USED. (RECORD/BLOCK NUMBERS ARE THE NEXT RECORD/BLOCK TO BE WRITTEN). THE "TOTAL STATISIICS FOR JOB" CONTAINS THE TOTAL AMOUNT OF RECORDS/BLOCKS HAVING BEEN READ/WRITTEN. THE "JOB STATUS" DESCRIBES THE ACTUAL STATE OF THE JOB: NOT STARTED AFTER LOAD OF PROGRAM OR END OF JOB. STOPPED JOB IS STOPPED BU OPERATOR. RUNNING JOB IS RUNNING OR WAITING FOR NEW INPUT/ OUTPUT MEDIUM. END OF JOB NORMAL TERMINATION OF JOB. I/O ERROR NNN ERROR NNN ON INPUT/OUTPUT DEVICE, CONSULT OPERATORS MANUAL. SUSPENDED THE JOB IS TERMINATED BY THE SUSPEND COMMAND. SPECIAL REQIREMENTS: P0149 RCSL: 43-GL4928 P0150 RCSL: 43-GL4931 P0151 RCSL: 43-GL4934 ! «ff» ! RC36-00982 PAGE 03 ! CONST NOQ= 8, OPTXTS= '<10>PROG NO : 982<0> <10>DATASET : <0> <10>IN BLOCKNO : <0> <10>RECORDSIZE : <0> <10>ECMA34V2 : <0> <10>OUT BLOCKNO: <0> <10>MTUNIT : <0> <10>LOGPRINT : <0>', SUSPEND= 'SUSPEND', START= 'START', STOP= 'STOP', STATE= 'STATE', INT= 'INT', PLUS= '+', MINUS= '-', ENDLINE= '<13><0>', NEXTPARAM= '<27>', NL= '<10>', RETURN= '<13>', READ= 1, FALSE= -2, TRUE= -1, U= 0, UB= 1, RUNTXT= '<8><4><10>RUNNING<13><0>', SUSTEXT= '<7><10>SUSPENDED<13><0>', MTTEXT= '<7><10>MT ERROR ', CTTEXT= '<7><10>CT ERROR ', EOTTXT= '<7><10>MOUNT NEXT CASSETTE<13><0>', EOJTXT= '<14><7><10>END JOB<13><0>', MOUNT= '<7><10>MOUNT TAPE<13><0>', MOUNTTXT= '<7><10>MOUNT LABEL TAPE<13><0>', HDRMIS= '<7><10>HDRLABEL MISSING<13><0>', RECERROR= '<7><10>RECORDSIZE ERROR<13><0>', WRONGUNIT= '<7><10>MT UNIT CONFLICT<13><0>', VOL1= '<229><214><211><241>', HDR1= '<200><196><217><241>', «ff» !RC36-00982 PAGE 04! ! ** LOGTEXTS ** ! LOGCMMD= 'LOG', TTYNAME= 'TTY<0>', LPTNAME= 'SP<0><0>', NEWL= '<10><10>', LOGHEAD='** MT UNIT X TO CT0 ** DATE ........ TIME ........<10><10>', POSHEAD= 'POSITIONS ON INPUT AND OUTPUT:<10><10>', PTEXT1= 'CASSETTE ... RECORD .....<10>', PTEXT2= 'DATASET ... BLOCK .....<10>', STATHEAD= '<10>TOTAL STATISTICS FOR JOB<10><10>', STEXT1= 'READ: ..... BLOCKS<10>', STEXT2= 'WRITTEN: ..... RECORDS<10>', STATUSHEAD= '<10>JOB STATUS: ', ! PROGRAM STATES ! INITEXT= 'NOT STARTED', RUNTEXT= 'RUNNING', STOPTEXT= 'STOPPED', SUSPTEXT= 'SUSPENDED', EOJTEXT= 'END OF JOB', ERRTEXT= 'I/O ERROR ..... ', LPTTXT= 'SP ERROR ', RUNNI= 2, PSTOP= 3, PSUSP= 4, PEOJ= 5, IOERROR= 6, «ff» !RC36-00982 PAGE 05! ! EBCDIC TO ASCII CONVERSION TABLE ! EBSASC= # ! 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 32 32 32 32 32 32 32 ! 40 ! 32 32 32 32 32 32 32 32 ! 48 ! 32 32 32 32 32 32 32 32 ! 56 ! 32 32 32 32 32 32 32 32 ! 64 ! 32 32 32 32 32 32 32 32 ! 72 ! 32 32 32 46 60 40 43 94 ! 80 ! 38 32 32 32 32 32 32 32 ! 88 ! 32 32 33 36 42 41 59 94 ! 96 ! 45 47 32 32 32 32 32 32 ! 104 ! 32 32 124 44 37 95 62 63 ! 112 ! 32 32 32 32 32 32 32 32 ! 120 ! 32 32 58 35 64 39 61 34 ! 128 ! 32 65 66 67 68 69 70 71 ! 136 ! 72 73 32 32 32 32 32 32 ! 144 ! 32 74 75 76 77 78 79 80 ! 152 ! 81 82 32 32 32 32 32 32 ! 160 ! 32 126 83 84 85 86 87 88 ! 168 ! 89 90 32 32 32 91 32 32 ! 176 ! 32 32 32 32 32 32 32 32 ! 184 ! 32 32 32 32 32 93 32 32 ! 192 ! 123 65 66 67 68 69 70 71 ! 200 ! 72 73 32 32 32 32 32 32 ! 208 ! 125 74 75 76 77 78 79 80 ! 216 ! 81 82 32 32 32 32 32 32 ! 224 ! 92 32 83 84 85 86 87 88 ! 232 ! 89 90 32 32 32 32 32 32 ! 240 ! 48 49 50 51 52 53 54 55 ! 248 ! 56 57 94 32 32 32 32 32 #; «ff» ! RC36-00982 PAGE 06 ! VAR OPSTRING: STRING(80); OPTEXT: STRING(80); OPDEC: STRING(10); S1: STRING(2); S2: STRING(2); LENGTH: INTEGER; SIZE: INTEGER; STOPPED: INTEGER; ERRORNO: INTEGER; MASK: INTEGER; SIGN: INTEGER; PAR: INTEGER; TOM: INTEGER; P1: INTEGER; P2: INTEGER; P3: INTEGER; Q: INTEGER; OPDUMMY: STRING(2); PROGNO: INTEGER; DATASET: INTEGER; IBLOCK: INTEGER; RECSIZE: INTEGER; ECMAV2: INTEGER; OBLOCK: INTEGER; MTUNIT: INTEGER; LOGPRINT: INTEGER; INFILE: INTEGER; INBLOK: INTEGER; EOT: INTEGER; ! ** LOG VARIABLES ** ! NEXTLP: INTEGER; PSTATE: INTEGER; TAPENO: INTEGER; RECTOTAL: INTEGER; SAVEIN: INTEGER; SAVEOUT: INTEGER; DELETEIN: INTEGER; DELETEOUT: INTEGER; LDATE: STRING(8); LHELP: STRING(6); «ff» ! RC36-00982 PAGE 07 ! OUT: FILE 'CT0', 14, 1, 172, U; GIVEUP CTERROR, 2'1111011111111110 OF STRING(172); IN: FILE 'MT0', 14, 1, 2000, U; GIVEUP MTERROR, 2'0110001111111110 OF STRING(2000); LOG: FILE ! LOG FILE DESCRIPTION ! 'SP', ! NAME OF DEVICE DRIVER ! 1, ! KIND= CHAR ORIENTED ! 1, ! BUFFERS ! 80, ! SHARESIZE ! U; ! UNDEFINED ! GIVEUP LOGERROR, ! LOG ERROR PROCEDURE ! 2'1100001011110110 ! GIVE UP MASK ! OF STRING(80); «ff» ! RC36-00982 PAGE 08 ! PROCEDURE GETTIME(VAR TIME : STRING(8)); CODEBODY P0149; PROCEDURE GETLDATE(VAR DATE: STRING(8)); CODEBODY P0150; PROCEDURE PRINTLOG; BEGIN IF LOGPRINT=TRUE THEN LOG.ZNAME:=LPTNAME ELSE LOG.ZNAME:=TTYNAME; OPEN(LOG,3); OUTTEXT(LOG,NEWL); ! LOG - HEAD ! GETLDATE(LDATE); MOVE(LDATE,0,LOGHEAD,29,8); GETTIME(LDATE); MOVE(LDATE,0,LOGHEAD,43,8); INSERT(MTUNIT+48,LOGHEAD,11); OUTTEXT(LOG,LOGHEAD); ! ACTUAL POSITIONS ! BINDEC(TAPENO,LHELP); MOVE(LHELP,2,PTEXT1,11,3); BINDEC(OBLOCK,LHELP); MOVE(LHELP,0,PTEXT1,24,5); BINDEC(DATASET,LHELP); MOVE(LHELP,2,PTEXT2,11,3); BINDEC(IBLOCK,LHELP); MOVE(LHELP,0,PTEXT2,24,5); OUTTEXT(LOG,POSHEAD); OUTTEXT(LOG,PTEXT2); OUTTEXT(LOG,PTEXT1); ! STATISTICS ! BINDEC(IBLOCK-1,LHELP); MOVE(LHELP,0,STEXT1,11,5); BINDEC(RECTOTAL,LHELP); MOVE(LHELP,0,STEXT2,11,5); OUTTEXT(LOG,STATHEAD); OUTTEXT(LOG,STEXT1); OUTTEXT(LOG,STEXT2); ! PROGRAM STATE ! OUTTEXT(LOG,STATUSHEAD); IF PSTATE = 1 THEN OUTTEXT(LOG,INITEXT); IF PSTATE = RUNNI THEN OUTTEXT(LOG,RUNTEXT); IF PSTATE = PSTOP THEN OUTTEXT(LOG,STOPTEXT); IF PSTATE = PSUSP THEN OUTTEXT(LOG,SUSPTEXT); IF PSTATE = PEOJ THEN OUTTEXT(LOG,EOJTEXT); IF PSTATE = IOERROR THEN BEGIN BINDEC(ERRORNO,LHELP); MOVE(LHELP,0,ERRTEXT,12,5); OUTTEXT(LOG,ERRTEXT); END; OUTTEXT(LOG,NEWL); CLOSE(LOG,1); END; «ff» ! RC36-00982 PAGE 09 ! PROCEDURE OPSTOP; BEGIN OPWAIT(LENGTH); OPTEXT:=OPSTRING; OPIN(OPSTRING); STOPPED:=0; IF OPTEXT = LOGCMMD THEN PRINTLOG; IF OPTEXT = STOP THEN STOPPED:=1; IF OPTEXT = START THEN STOPPED:=2; IF OPTEXT = SUSPEND THEN GOTO 40; 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 CTERROR; BEGIN IF OUT.Z0 AND 8'20 <> 0 THEN !EOT! BEGIN EOT:=TRUE; GOTO 100; END; OPMESS(CTTEXT); MASK:=OUT.Z0; SHOWERROR; PSTATE:=IOERROR; REPEAT OPSTOP UNTIL STOPPED > 1; OPMESS(RUNTXT); REPEATSHARE(OUT); 100:END; PROCEDURE MTERROR; BEGIN IF IN.Z0 SHIFT 7 < 0 THEN GOTO 32; ! EOF ! IF IN.Z0 SHIFT 1 < 0 THEN OPMESS(MOUNT); IF IN.Z0 SHIFT 1 > 0 THEN BEGIN OPMESS(MTTEXT); MASK:=IN.Z0; SHOWERROR; PSTATE:=IOERROR; END; REPEAT OPSTOP UNTIL STOPPED > 1; OPMESS(RUNTXT); 300:END; «ff» ! RC36-00982 PAGE 10 ! PROCEDURE INITCTPOSITION; BEGIN IF OUT.ZMODE = 0 THEN BEGIN OUT.ZSHAREL:=RECSIZE; OPEN(OUT,3); SETPOSITION(OUT,1,1); CLOSE(OUT,0); IF ECMAV2 = TRUE THEN OPEN(OUT,3) ELSE OPEN(OUT,11); SETPOSITION(OUT,2,1); END; IF OUT.ZBLOCK <> OBLOCK THEN SETPOSITION(OUT,2,OBLOCK); END; PROCEDURE INITPOSITION; BEGIN 199: IF RECSIZE > 172 THEN BEGIN OPMESS(RECERROR); GOTO 290; END; IF IN.ZMODE = 0 THEN BEGIN INSERT(MTUNIT+48,IN.ZNAME,2); IF MTUNIT >= 0 THEN IF MTUNIT <= 3 THEN GOTO 205; OPMESS(WRONGUNIT); GOTO 290; 205: INFILE:=1; OPEN(IN,READ); SETPOSITION(IN,1,1); GETREC(IN,SIZE); IF IN^ <> VOL1 THEN BEGIN OPMESS(MOUNTTXT); 210: CLOSE(IN,1); GOTO 290; END; INBLOK:=2; IF DATASET > 1 THEN BEGIN INBLOK:=1; INFILE:=(DATASET-1)*3 +1; END; SETPOSITION(IN,INFILE,INBLOK); GETREC(IN,SIZE); IF IN^ <> HDR1 THEN BEGIN OPMESS(HDRMIS); GOTO 210; END; INFILE:=INFILE+1; INBLOK:=1; CLOSE(IN,0); IN.ZFORM:=UB; OPEN(IN,READ); GOTO 299; 290: REPEAT OPSTOP UNTIL STOPPED <> 0; IF STOPPED = 1 THEN GOTO 10; IF STOPPED = 3 THEN GOTO 40; GOTO 199; END; 299: SETPOSITION(IN,INFILE,IBLOCK); INITCTPOSITION; END; «ff» ! RC36-00982 PAGE 11 ! PROCEDURE LOGERROR; BEGIN NEXTLP:= LOG.Z0 AND 8'000020; LOG.Z0:=LOG.Z0 - NEXTLP; IF LOG.Z0 SHIFT 1 < 0 THEN LOG.Z0:= LOG.Z0 AND 8'041342; IF LOG.Z0 = 8'040000 THEN IF NEXTLP <> 0 THEN LOG.Z0:= NEXTLP; IF LOG.Z0 AND 8'001342 <> 0 THEN LOG.Z0:=LOG.Z0 AND 8'001342; IF LOG.Z0 <> 0 THEN BEGIN OPMESS(LPTTXT); MASK:=LOG.Z0; SHOWERROR; NEXTLP:=0; 4000: OPWAIT(LENGTH); OPTEXT:=OPSTRING; OPIN(OPSTRING); IF OPTEXT = START THEN BEGIN IF LOG.Z0 AND 8'141342 <> 0 THEN REPEATSHARE(LOG); END ELSE GOTO 4000; END; END; PROCEDURE INITSTAT; BEGIN PSTATE := 1; TAPENO := 1; RECTOTAL := 0; SAVEIN := 1; SAVEOUT := 1; END; PROCEDURE OUTUPDATE; BEGIN OBLOCK:=OUT.ZBLOCK; SAVEOUT:=OBLOCK; END; «ff» ! RC36-00982 PAGE 12 ! PROCEDURE DIRECTUPDATE; BEGIN P1:=0; P2:=0; P3:=1; 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-00982 PAGE 13 ! 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 >= 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 40; 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 = LOGCMMD THEN BEGIN PRINTLOG; GOTO 1040; END; 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-00982 PAGE 14 ! BEGIN DATASET:=1; IBLOCK:=1; ECMAV2:=-1; RECSIZE:=80; OBLOCK:=1; MTUNIT:=0; LOGPRINT:=TRUE; EOT:=FALSE; INITSTAT; OPIN(OPSTRING); 10: OPCOM; 20: INITPOSITION; 30: REPEAT BEGIN DELETEIN:=SAVEIN-IBLOCK; DELETEOUT:=SAVEOUT-OBLOCK; GETREC(IN,RECSIZE); PSTATE:=RUNNI; IBLOCK:=IN.ZBLOCK; IF DELETEIN = DELETEOUT THEN RECTOTAL:=RECTOTAL - DELETEIN; IF DELETEIN > DELETEOUT THEN RECTOTAL:=RECTOTAL - DELETEOUT; PUTREC(OUT,RECSIZE); CONVERT(IN^,OUT^,EBSASC,RECSIZE); OUTUPDATE; RECTOTAL:=RECTOTAL + 1; IF EOT = TRUE THEN GOTO 31; END UNTIL OPTEST <> 0; WAITZONE(OUT); OUTUPDATE; OPSTOP; IF STOPPED = 2 THEN GOTO 30; IF STOPPED = 0 THEN GOTO 30; PSTATE:=PSTOP; GOTO 10; «ff» ! RC36-00982 PAGE 15 ! ! END OF CASSETTE ! 31: OPMESS(EOTTXT); WAITZONE(OUT); OUTUPDATE; CLOSE(OUT,1); EOT:=FALSE; REPEAT OPSTOP UNTIL STOPPED <> 0; IF STOPPED = 1 THEN GOTO 33; TAPENO:=TAPENO+1; OBLOCK:=1; IF STOPPED = 2 THEN BEGIN INITCTPOSITION; GOTO 30; END; ! END JOB ! 32: WAITZONE(OUT); OUTUPDATE; CLOSE(OUT,1); CLOSE(IN,1); 33: PSTATE:=PEOJ; OPMESS(EOJTXT); 34: PRINTLOG; INITSTAT; IBLOCK:=1; OBLOCK:=1; EOT:=FALSE; IN.ZFORM:=U; 35: REPEAT OPSTOP UNTIL STOPPED <> 0; IF STOPPED = 1 THEN GOTO 10; OPMESS(RUNTXT); GOTO 20; ! SUSPEND ! 40: OUT.ZMODE:=0; CLOSE(IN,1); CLOSE(OUT,1); PSTATE:=PSUSP; OPMESS(SUSTEXT); GOTO 34; END; «ff» «nul»