cdc:nos2.source:opl871:hstcopy
Table of Contents
HSTCOPY
Table Of Contents
- [00288] SYS - ISSUE SYSTEM REQUEST.
- [00314] SYS - ISSUE SYSTEM REQUEST.
Source Code
- HSTCOPY.txt
- (*$L'HOSTCOPY UTILITY.',S-,U+ *)
- (*$V+ DISPLAY CM RECORD MAP. *)
- (*$E+ USE EXTERNAL ENTRY POINTS. *)
- PROGRAM HSTCOPY(INPUT,OUTPUT,FTS);
- (***
- * HSTCOPY - HOSTCOPY UTILITY.
- *
- * L. M. BURGHER/S. V. PRESTON 84/09/22.
- * S. V. PRESTON 86/03/14.
- * MODIFIED TO SUPPORT V10 SST FORMAT.
- *
- * OVERVIEW
- *
- * HSTCOPY READS A FILE AND TRANSFERS IT TO A 5870 OR 5970
- * NON-IMPACT PRINTER. HSTCOPY CALLS THE PP PROGRAM XHC TO
- * TRANSFER THE DATA TO THE NON-IMPACT PRINTER.
- *
- * HSTCOPY READS THE FOLLOWING TYPES OF FILES:
- *
- * 1) RECORDS CONSISTING OF MULTIPLES OF 128 8-BIT BYTES,
- * WITHOUT ZERO-BYTE TERMINATORS, UP TO A MAXIMUM
- * OF 8192 8-BIT BYTES.
- *
- * 2) 80-BYTE EBCDIC CARD IMAGE RECORDS WITHOUT ZERO-BYTE
- * TERMINATORS.
- *
- * CONTROL STATEMENT CALL
- *
- * HSTCOPY(INPUT,OUTPUT,FTS)
- *
- * HSTCOPY - HOSTCOPY CONTROL STATEMENT.
- * INPUT - INPUT FILE CONTAINING INPUT DIRECTIVES.
- * OUTPUT - OUTPUT FILE CONTAINING STATUS OF HOSTCOPY.
- * FTS - INPUT FILE TO TRANSFER TO NIP.
- *)
- CONST
- (* DEFINE BUFFER LENGTHS. *)
- CML = 1093; (* NUMBER OF CM WORDS *)
- CMLS = 69;
- BIT4L = 16384; (* NUMBER OF BIT4S *)
- RECL = 64; (* NUMBER OF 128-BYTE RECS *)
- (* DEFINE RECORD LENGTH. *)
- RECRDL = 256; (* NUMBER OF BIT4S PER RECRD *)
- RECRDPL = 2; (* NUM OF RECRD POINTERS *)
- TYPE
- (*$T- TURN RUNTIME TESTING OFF. *)
- PCNTRL = ^CONTROL; (* CONTROL RECORD POINTER *)
- PRECRD = ^RECRD; (* DATA RECORD POINTER *)
- (*$T= RESTORE RUNTIME TESTING. *)
- (* DEFINE BIT FIELD WIDTHS. *)
- BIT1 = 0..1B;
- BIT3 = 0..7B;
- BIT4 = 0..17B;
- BIT6 = 0..77B;
- BIT9 = 0..777B;
- BIT11 = 0..3777B;
- BIT12 = 0..7777B;
- BIT42 = 0..77777777777777B;
- (* DEFINE PACKED CHARACTER STRINGS. *)
- CHAR3 = PACKED ARRAY[1..3] OF CHAR;
- CHAR10 = PACKED ARRAY[1..10] OF CHAR;
- CHAR40 = PACKED ARRAY[1..40] OF CHAR;
- BUFTAG = 1..2;
- BUFFER = RECORD CASE TAG : BUFTAG OF
- 1 : (W : ARRAY[1..CML] OF INTEGER);
- 2 : (B4 : PACKED ARRAY[1..BIT4L] OF BIT4);
- END; (* BUFFER *)
- RECRD = PACKED ARRAY[1..RECRDL] OF BIT4;
- (* DATA RECORD *)
- CONTROL = PACKED RECORD (* XHC CONTROL TABLE *)
- FILL1 : BIT3;
- EQ : BIT9; (* EST ORDINAL *)
- FILL2 : BIT11;
- TERM : BOOLEAN; (* TERMINATE XHC *)
- FILL3 : BIT11;
- CARDIMG : BOOLEAN; (* CARD IMAGE *)
- FILL4 : BIT11;
- COMP : BOOLEAN; (* REQUEST COMPLETE *)
- FILL5 : BIT42;
- RESV1 : BIT1;
- RECRDP : PRECRD; (* RECRD POINTER *)
- END; (* CONTROL *)
- SYSREQ = PACKED RECORD
- (* SYSTEM REQUEST FORMAT *)
- PPNAME : CHAR3; (* PP PROGRAM NAME *)
- RESV1 : BIT1;
- RECALL : BOOLEAN; (* RECALL OPTION *)
- FILL1 : BIT4;
- FILL2 : BIT12;
- FILL3 : BIT6;
- RESV2 : BIT1; (* CONTROL POINTER *)
- CNTRLP : PCNTRL;
- END; (* SYSREQ *)
- VAR
- CNTRLP : PCNTRL; (* XHC CONTROL POINTER *)
- INITOK : BOOLEAN; (* INITIALIZE OK *)
- RCL, XHC : SYSREQ; (* SYSTEM REQUEST *)
- FTS : SEGMENTED FILE OF INTEGER;
- (* SYSTEM SOFTWARE FILE *)
- (* DEFINE DAYFILE MESSAGE VARIABLES. *)
- EFMSG : CHAR40; (* EMPTY FILE *)
- EQMSG : CHAR40; (* INCORRECT EQUIPMENT *)
- LDMSG : CHAR40; (* EQUIPMENT LOADED *)
- (* DEFINE BUFFER VARIABLES. *)
- BUFF : BUFFER; (* DATA BUFFER *)
- CMI : 0..CML; (* CM INDEX *)
- BIT4I : 0..BIT4L; (* BIT4 INDEX *)
- RECI : 0..RECL; (* RECRD INDEX *)
- RECNUM : 1..RECL; (* NUM RECRDS PER BUFFER *)
- (* DEFINE RECORD VARIABLES. *)
- RECRDP : ARRAY[1..RECRDPL] OF PRECRD;
- (* DATA RECORD POINTERS *)
- RECRDPI : 1..RECRDPL; (* RECORD POINTER INDEX *)
- RECRDI : 0..RECRDL; (* RECORD INDEX *)
- VALUE
- INITOK = FALSE;
- RCL = ('RCL', 0, TRUE, 0, 0, 0, 0, NIL);
- XHC = ('XHC', 0, FALSE, 0, 0, 0, 0, NIL);
- (* DAYFILE MESSAGES. *)
- EFMSG = ' SYSTEM SOFTWARE FILE EMPTY. ';
- EQMSG = ' EQXXX, INCORRECT EQUIPMENT NUMBER. ';
- LDMSG = ' EQXXX, HOSTCOPY TRANSFER COMPLETE. ';
- (*$L'EXTERNAL FUNCTIONS AND PROCEDURES.'*)
- FUNCTION XDXB( STR : CHAR10; TYP : INTEGER;
- VAR NUM : INTEGER) : INTEGER; FORTRAN;
- (**
- * CHARACTER TO INTEGER CONVERSION.
- *
- * LOADED FROM SRVLIB.
- *)
- PROCEDURE SYS(VAR REQ : SYSREQ); EXTERN;
- (**
- * ISSUE SYSTEM REQUEST.
- *
- * LOADED FROM UTILLIB.
- *)
- (*$L'INIT - INITIALIZE.'*)
- PROCEDURE INIT;
- (**
- *
- * INITIALIZE HOST COPY.
- *
- * EXIT
- * INITOK = TRUE, IF INITIALIZED PROPERLY.
- * THE PP XHC HAS BEEN STARTED.
- * LDMSG HAS BEEN SET WITH EQUIPMENT NUMBER.
- *
- * CALLS
- * SYS, XDXB.
- *
- * NESTED FROM HSTCOPY.
- *)
- VAR
- CARDIMG : ALFA; (* CARD IMAGE *)
- EQ : ALFA; (* EST ORDINAL *)
- I, J : INTEGER;
- VALIDEQ : INTEGER; (* VALID EQUIPMENT *)
- BEGIN (* INIT *)
- RESET(FTS); (* INITIALIZE FTS FILE *)
- IF NOT EOS(FTS) THEN
- BEGIN (* FILE OK *)
- EQ := ' '; (* EQ NUMBER *)
- FOR I := 1 TO 3 DO
- READ(EQ[I]);
- READLN;
- READLN(CARDIMG[1]); (* CARD IMAGE *)
- VALIDEQ := XDXB(EQ, 0, I); (* CONVERT EQ TO INTEGER *)
- IF (VALIDEQ = 0) AND (I <= 777B) THEN
- BEGIN (* VALID EQ *)
- NEW(CNTRLP); (* INITIALIZE POINTERS *)
- FOR J := 1 TO RECRDPL DO
- BEGIN
- RECRDPI := J;
- NEW(RECRDP[RECRDPI]);
- END;
- CNTRLP^.EQ := I; (* SETUP XHC CONTROL RECORD *)
- CNTRLP^.TERM := FALSE;
- IF CARDIMG[1] = 'T' THEN
- CNTRLP^.CARDIMG := TRUE
- ELSE
- CNTRLP^.CARDIMG := FALSE;
- CNTRLP^.COMP := FALSE;
- CNTRLP^.RECRDP := NIL;
- XHC.CNTRLP := CNTRLP;
- RCL.CNTRLP := CNTRLP;
- SYS(XHC); (* INITIATE XHC *)
- INITOK := TRUE; (* INITIALIZE OK *)
- FOR I := 1 TO 3 DO (* SET EQ IN LOAD MESSAGE *)
- LDMSG[I+3] := EQ[I];
- END (* VALID EQ *)
- ELSE
- BEGIN (* INCORRECT EQ *)
- FOR I := 1 TO 3 DO (* SET EQ IN MESSAGE *)
- EQMSG[I+3] := EQ[I];
- MESSAGE(EQMSG);
- WRITELN(EQMSG);
- END; (* IF *) (* INCORRECT EQ *)
- END (* FILE OK *)
- ELSE
- BEGIN (* EMPTY FILE *)
- MESSAGE(EFMSG);
- WRITELN(EFMSG);
- END; (* IF *) (* EMPTY FILE *)
- END; (* INIT *)
- (*$L'MAIN PROGRAM.'*)
- BEGIN (* HSTCOPY *)
- INIT; (* INITIALIZE HOST COPY *)
- IF INITOK THEN
- BEGIN (* INIT OK *)
- WHILE NOT EOF(FTS) DO
- BEGIN (* PROCESS FTS RECORD *)
- CMI := 0; (* READ FTS RECORD *)
- WHILE (NOT EOS(FTS) AND NOT EOF(FTS)) AND
- (CMI < CML) DO
- BEGIN
- CMI := CMI+1;
- READ(FTS,BUFF.W[CMI]);
- END; (* WHILE *)
- GETSEG(FTS); (* GET NEXT RECORD *)
- IF CMI = CML THEN (* ESTABLISH RECORD SIZE *)
- RECNUM := 64 (* 8192-BYTES *)
- ELSE
- BEGIN
- IF CMI = CMLS THEN
- RECNUM := 4 (* 512-BYTES *)
- ELSE
- RECNUM := 1; (* 128-BYTES *)
- END;
- BIT4I := 0; (* XFER FTS RECORD TO NIP *)
- FOR RECI := 1 TO RECNUM DO
- BEGIN
- IF RECRDPI < RECRDPL THEN
- RECRDPI := RECRDPI + 1
- ELSE
- RECRDPI := 1;
- FOR RECRDI := 1 TO RECRDL DO (* MOVE ONE 128-BYTE RECORD *)
- BEGIN
- BIT4I := BIT4I+1;
- RECRDP[RECRDPI]^[RECRDI] := BUFF.B4[BIT4I];
- END; (* FOR *)
- SYS(RCL); (* WAIT FOR REQUEST DONE *)
- CNTRLP^.RECRDP := RECRDP[RECRDPI];
- (* REQUEST XHC TO XFER RECRD *)
- CNTRLP^.COMP := FALSE;
- END; (* FOR *)
- END; (* WHILE *) (* PROCESS FTS RECORD *)
- SYS(RCL); (* WAIT FOR REQUEST DONE *)
- CNTRLP^.TERM := TRUE; (* TERMINATE XHC *)
- CNTRLP^.COMP := FALSE;
- SYS(RCL); (* WAIT FOR TERMINATION *)
- MESSAGE(LDMSG); (* HOSTCOPY COMPLETE *)
- WRITELN(LDMSG);
- END; (* IF *) (* INIT OK *)
- END. (* HSTCOPY *)
- *WEOR
- TTL SYS - ISSUE SYSTEM REQUEST.
- TITLE SYS - ISSUE SYSTEM REQUEST.
- IDENT SYS
- ENTRY SYS
- SST
- SYSCOM B1
- *COMMENT SYS - ISSUE SYSTEM REQUEST.
- COMMENT COPYRIGHT CONTROL DATA SYSTEMS INC. 1992.
- SYS SPACE 4,10
- *** SYS - ISSUE SYSTEM REQUEST.
- *
- * SYS ALLOWS DIRECT SYSTEM CALLS TO THE OPERATING
- * SYSTEM. THE REQUEST, IN THE FORM OF AN RA+1 REQUEST,
- * IS PASSED TO SYS, WHICH IN TURN CALLS SYS=. THIS
- * IS REQUIRED BECAUSE OF REGISTER DIFFERENCES.
- *
- * PASCAL DECLARATION:
- *
- * PROCEDURE SYS(VAR REQ : SYSREQ); EXTERN;
- *
- * REQ RA+1 REQUEST.
- SPACE 4,10
- *** COMMON DECKS.
- *CALL COMCMAC
- SPACE 4,10
- ** SYS - ISSUE SYSTEM REQUEST.
- *
- * ENTRY (X0) = ADDRESS OF THE REQUEST.
- *
- * EXIT REQUEST ISSUED.
- *
- * USES A - 4.
- * X - 4, 6.
- * B - NONE.
- *
- * CALLS SYS=.
- SYS PS ENTRY/EXIT
- SA4 X0 GET REQUEST
- BX6 X4
- RJ =XSYS=
- EQ SYS RETURN
- END
- *WEOR
cdc/nos2.source/opl871/hstcopy.txt ยท Last modified: 2023/08/05 17:24 by Site Administrator