SPL,L,O,M ! NAME: ST.DU ! SOURCE: 92070-18033 ! RELOC: 92070-16033 ! PGMR: G.A.A. ! MOD: M.L.K. ! ! *************************************************************** ! * (C) COPYRIGHT HEWLETT-PACKARD COMPANY 1979. ALL RIGHTS * ! * RESERVED. NO PART OF THIS PROGRAM MAY BE PHOTOCOPIED, * ! * REPRODUCED OR TRANSLATED TO ANOTHER PROGRAM LANGUAGE WITHOUT* ! * THE PRIOR WRITTEN CONSENT OF HEWLETT-PACKARD COMPANY. * ! *************************************************************** ! ! NAME ST.DU(7) " 92070-1X033 REV.1941 790712" ! ! THIS IS THE RTE FMP FMGR ROUTINE TO STORE ! AND DUMP FILES. ! ! DU,NAME,LU,OP1,OP2,OP3 ! ! O R ! ! ST,LU,NAME,OP1,OP2,OP3,OP4 ! ! ! W H E R E: ! ! ST IS STORE. ! DU IS DUMP. ! ! NAME ! NAME IS THE FILE TO BE STORED OR DUMPED. ! ! LU IS EITHER THE SOURCE OR DESTINATION ! DEVICE AND MAY BE A FILE REFERENCE. ! ! OP1 IS A MEDIUM ASC CODE AS FOLLOWS: ! AS ASCII DATA ! BR BINARY RELOCATABLE DATA ! BA BINARY ABSOLUTE DATA ! MT MAG TAPE NORMAL FORMAT ! MS MAG TAPE SIO FORMAT ! ! OP2 IS AN END OF FILE OPTION ! FLAG -- TWO ASC CHARACTERS: ! SA SAVE END OF FILES IN THE ! NEW FILE. ! IN INHIBIT ALL LEADER, TRAILER, ! END OF FILE TRANSFERS; ! DOES NOT APPLY TO FINAL ! EOF ON A DISC FILE. ! ! OP3 IS THE NUMBER OF THE FIRST FILE ! TO BE TRANSFERRED (APPLIES TO ! FILES OF TYPE ZERO) (DEFAULT=1) ! ! OP4 IS THE NUMBER OF FILES TO BE ! TRANSFERRED (APPLIES TO FILES ! OF TYPE ZERO) (DEFAULT= ) ! ! N O T E: OP3 AND OP4 ARE RELATIVE TO CURRENT POSITION. ! ! EXTERNAL SUBROUTINES LET CK.SM BE SUBROUTINE,EXTERNAL LET CLOSE BE SUBROUTINE,EXTERNAL LET CREA. BE SUBROUTINE,EXTERNAL LET EXEC BE SUBROUTINE,EXTERNAL LET IER. BE SUBROUTINE,EXTERNAL,DIRECT LET LOCF BE SUBROUTINE,EXTERNAL LET MSS. BE SUBROUTINE,EXTERNAL LET OPEN. BE SUBROUTINE,EXTERNAL LET READF BE SUBROUTINE,EXTERNAL LET RWNDF BE SUBROUTINE,EXTERNAL LET WRITF BE SUBROUTINE,EXTERNAL ! EXTERNAL FUNCTIONS LET IFBRK BE FUNCTION,EXTERNAL ! EXTERNAL INTEGERS LET .E.R BE INTEGER,EXTERNAL LET BUF. BE INTEGER,EXTERNAL LET I.BUF BE INTEGER,EXTERNAL LET N.OPL BE INTEGER,EXTERNAL LET O.BUF BE INTEGER,EXTERNAL ! LET DU..,ST.. BE SUBROUTINE ! LET AS BE CONSTANT (40523K) LET BR BE CONSTANT (41122K) LET BN BE CONSTANT (41116K) LET BA BE CONSTANT (41101K) LET MT BE CONSTANT (46524K) LET MS BE CONSTANT (46523K) LET IH BE CONSTANT (44510K) LET SA BE CONSTANT (51501K) ! ST..: SUBROUTINE(NPD,LISTO,ERD) GLOBAL ERD_ -1 !SET DUMP FLAG DU..(NPD,LISTO,ERD) !CALL DUMP SUBR RETURN END ! DU..: SUBROUTINE(NPS,LISTS,ERS) GLOBAL LI12_[LIS8_[LIS4_@LISTS+4]+4]+4 ! LIS21_[LIS17_[LIS13_[LIS9_[LIS5_[LIS1_\ @LISTS+1]+4]+4]+4]+4]+4 COPY_ 0 !SET COPY FLAG FALSE ! ! PRESET DEFAULT OPTIONS ! OBUF,SPDCB_@O.BUF !SET DCB ADDRESS FOR SPACING IBUF_ @I.BUF !SET INPUT DCB ADDRESS BUFF,BUFA,BF_@BUF. DO[F1,SIOI,EOFF,CK,SIO,FLG,LDR_0] DO[SUBF_410K;F2,TYP,DUMP_1] IFNOT ERS+1 THEN [ERS,DUMP_0;SPDCB_IBUF] !SET STORE OPTIONS IF NPS<2 THEN [ERS_55;RETURN] DT_3 !SET DEFAULT TYPE ! ! ANALYZE OPTIONS ! ! FIRST THE TYPE FLAG ! IFNOT $LIS8 THEN GO TO ST3 !NULL,SO GO TO CHECK NEXT IF $LIS9 = MS THEN [SIO_1;BUFA_BF+1;\ LIS9_LIS9+1] IF $LIS9=" " THEN GO TO ST3 IF $LIS9 = AS THEN [SUBF_410K;GO TO ST3] IF $LIS9 = BR THEN[CK,SUBF_110K;\ DT_5; GO TO ST3] IF $LIS9 = BN THEN[SUBF_110K; \ GO TO ST3] IF $LIS9 = BA THEN[CK,SUBF_2110K;TYP_0;\ DT_7;GO TO ST3] IF $LIS9 = MT THEN GO TO ST3 IF $LIS9 = SA THEN[EOFF_1;GO TO ST2] IF $LIS9 = IH THEN[LDR_20000K;GO TO ST2] ! STER1:DO[ERS_56; RETURN] ! ! CHECK FOR OP2 ! ST3: IF $LI12#3 THEN GO TO ST2 ! IF $LIS13 = SA THEN[EOFF_1;GO TO ST5] IF $LIS13 = IH THEN[LDR_20000K;GO TO ST5] ! GO TO STER1 !ILLEGAL OPTION ! OPT2 WAS FOUND IN OP1 LOCATION SO ! ADJUST ADDRESSES AND SKIP ! OPT2 CHECK. ! ! ST2: DO[LIS21_[LIS17_LIS13]+4] ST5: OPEN.(I.BUF,$LIS1,N.OPL ,SUBF+1) LOCF(I.BUF,.E.R ,ID,ID,ID,ISZ,ILU,INTY,ISZ2) IER. IF $LIS17>0 THEN F1_$LIS17-1 IF $LIS21>0 THEN F2_$LIS21, ELSE \ [IFNOT $LIS21 THEN [IF$LIS17>0 THEN GOTO ST6,ELSE[\ IF INTY THEN F2_9999]]] ! ST6: SUBF_(SUBF AND 110K)+LDR \SET OUTPUT FUNCTION OR[IF (INTY AND 177775K)=5 THEN 110K,ELSE 0] IF INTY=6 THEN SUBF_ SUBF OR 110K IF $LIS9=AS THEN SUBF_SUBF AND 177677K ! ! IF A STORE OPERATION CREAT THE FILE ! SZ1_[SZ_[TY_[OPLS_@N.OPL+5]+2]+1]+1 ! IFNOT ERS+2 THEN[ \COPY, THE FILE IS OPEN ERS_ 0; \ COPY_ 1; \ GOTO ST12] ! IF DUMP THEN GO TO ST10 !DUMP, DON'T CREATE THE FILE ! ! SET DEFAULTS ! IFNOT $TY THEN $TY_[IF INTY THEN INTY,\ ELSE DT] IFNOT $SZ THEN $SZ_[IF INTY THEN ISZ->1,\ ELSE 24 ] !NOTE THIS DEFAULT !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! IFNOT $SZ1 THEN[IF INTY THEN $SZ1_ISZ2] ! ! CREAT THE FILE ! CREA.(O.BUF,$LIS5,$OPLS)?[GO TO ST10] GO TO ST12 ST10: IFNOT SUBF AND 177760K THEN SUBF_ SUBF AND 7 OPEN.(O.BUF,$LIS5,$OPLS,SUBF) !OPEN FILE FOR DUMP ST12: LOCF(O.BUF,.E.R ,ID,ID,ID,ISZ,OLU,OUTY) IER. IF INTY=6 THEN $(IBUF+2),INTY_1 IF OUTY=6 THEN $(OBUF+2),OUTY_1 ! ! BOTH IN AND OUT ARE OPEN -- ! LEADER HAS BEEN PUNCHED IF NOT SUPPRESSED. ! ! IF SIO STORE THEN SET IT UP ! IF SIO THEN [IFNOT DUMP THEN[\ SIO_0; SIOI_1;BUFF_[BUFA_BF]+1]] ! UNTIL F1=0 DO[READF($SPDCB,.E.R ,$BUFA,128,ALN);IER.;\ IF ALN<1 THEN[F1_F1- 1; IF IFBRK() THEN GO TO BRK]] ST15: READF(I.BUF,.E.R ,$BUFA,128,ALN) IF IFBRK() THEN[ \IF BREAK THEN BRK: MSS.(0); \SEND BREAK ERROR GOTO KILL] !AND FLUSH FILE IF .E.R = -12 THEN [ALN_ -1;GO TO ST16] IER. IF ALN>0 THEN GO TO ST20 !DATA? ! ! NO DATA -- EITHER EOF OR ZERO REG ! END OF XFER? ! ST16: IFNOT ALN+1 THEN[IF INTY THEN[F2_0;\ GO TO ST18]] !TRUE EOF-QUIT ! IF [F2_F2-1] THEN [IF EOFF THEN[ALN_-1;\ GO TO ST22],ELSE GO TO ST25] ST18: ALN_-1 IFNOT LDR THEN GO TO ST22 !IF INHIBIT NOT REQUESTED--EO GO TO EXIT !DONE - NO EOF REQUIRED ! ST20: DO [IF SIOI THEN [ALN_[\ IF $BUFA<0 THEN-$BUFA,ELSE\ ($BUFA+1)>-1];ID_BUFA+1],ELSE\ ID_BUFA ;IF CK THEN[\ CK.SM($ID,TYP)?[GO TO ABO];ALN_($ID-<8)+(1-TYP)*3]] FLG_1 !INDICATE RECORD WRITTEN ST22: IF ALN>0 THEN[IF SIO THEN[$BUFF_-ALN;ALN_ALN+1]],\ ELSE[IF F2 THEN[IF OUTY THEN ALN_0]] WRITF(O.BUF,.E.R ,$BUFF,ALN) IF .E.R = -6 THEN[MSS.(.E.R );GO TO KILL] IER. IF ALN= -1 THEN[IFNOT F2 THEN GOTO EXIT,\ ELSE GO TO ST25 ] IF ALN THEN GO TO ST15 ST25: EXEC (13, ILU,DVT6) !GET THE DEVICE TYPE IF(DVT6 AND 37400K)=6000K THEN[ \IF PHOTO-READER MSS.(2006); \PRINT ERROR EXEC(7)] !PAUSE FOR NEXT TAPE GO TO ST15 ! ABO: MSS.(7) !SEND CHECK SUM ERROR KILL: ID_ -1 !SET TO ABORT THE FILE IF COPY THEN [ERS_22; RETURN] !NOTIFY COPY OF BREAK ENDIT:IF DUMP THEN RETURN IFNOT OUTY THEN RETURN IF ID<0 THEN RWNDF(O.BUF) !REWIND TO BE SURE OF PURGE CLOSE(O.BUF,.E.R ,$SZ-ID-1) !CLOSE AND IER. RETURN ! EXIT: LOCF(O.BUF,.E.R ,T,ID,IOF) IER. IF OUTY < 3 THEN[ \IF TYPE 1 OR 2 IFNOT IOF THEN ID_ ID-1] !ADJUST RB FOR 0 !OFFSET IFNOT FLG THEN ID_-1 GO TO ENDIT END ! ! END END$