home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
kermit.columbia.edu
/
kermit.columbia.edu.tar
/
kermit.columbia.edu
/
archives
/
tapeutils.zip
/
tuiros.asm
< prev
next >
Wrap
Assembly Source File
|
1991-01-10
|
15KB
|
397 lines
OSTAPE TITLE '...OS tape to CMS disk utility'
MACRO
&NAME $TXT &MSG,&MSG2
LCLC &A,&B
&A SETC '&NAME'.'L'
&B SETC '*-'.'&NAME'.'-01'
&NAME DC AL1(&A)
DC C&MSG
&A EQU (&B)
MEND
SPACE 01
MACRO
&NAME $MSG &MSG
LCLC &A
AIF ('&MSG' EQ '').BP00
&A SETC '&MSG'.'-'.'&SYSECT'
&NAME LA R15,&MSG ==> MESSAGE
.BP00 ANOP
BAL R14,LINEDIT ISSUE MESSAGE
MEND
SPACE 01
MACRO
&NAME $CP &MSG
LCLC &A
AIF ('&MSG' EQ '').BP00
&A SETC '&MSG'.'-'.'&SYSECT'
&NAME LA R15,&MSG ==> CP COMMAND
.BP00 ANOP
BAL R14,DIAG08 ISSUE CP COMMAND
MEND
SPACE 01
MACRO
&NAME $CMS &MSG
LCLC &A
AIF ('&MSG' EQ '').BP00
&A SETC '&MSG'.'-'.'&SYSECT'
&NAME LA R1,&MSG ==> CMS COMMAND
.BP00 ANOP
BAL R14,SVC202 CALL CMS COMMAND
MEND
EJECT
*****
** Columbia University Center for Computer Activities
**
** OSTAPE
**
** Written by Eric M Bitterman on 10/31/84
**
** This program will read thru an OS formatted tape and copy the
** files on it to a CMS disk, based on the name in the HDR rec.
**
** To copy this program from tape to a CMS disk, issue the following
** commands:
** TAPE REW
** TAPE FSF
** FILEDEF INMOVE TAP1 (RECFM VB LRECL 13000 BLOCK 13000)
** FILEDEF OUTMOVE DISK OSTAPE ASSEMBLE A (RECFM V LRECL 100)
** MOVEFILE
** COPYFILE OSTAPE ASSEMBLE A (RECFM F LRECL 80)
**
** To generate this program just enter the following CMS commands:
** ASSEMBLE OSTAPE
** LOAD OSTAPE
** GENMOD OSTAPE
** NUCXLOAD OSTAPE
**
** To install the files, the installation tape must be attached
** as 181 and then just enter: OSTAPE and away it goes.
**
** The format of this command is:
** OSTAPE COPYALL ( a b d y z )
** DUMP fn ft fm ( a b d y )
** DVOL1 ( d e )
** GENEXEC fn ft fm ( a b d )
** LOAD fn ft fm ( b c d )
** MODESET ( d )
** SCAN fn ft ( b c d )
** tapcmd nn ( d )
** WVOL1 volser owner ( d e )
**
** tapcmd = BSR BSF ERG FSR FSF REW RUN WTM
** nn = number of times this function is to be issued
** fn/ft/fm = CMS filename, type and mode
**
** Options
** -------
** a WTM | NOWTM BLKSIZE {4096 | 800}
** b PRINT | NOPRINT TERM DISK
** c EOT EOF nn
** d TAPn DEN density cuu
** e REWIND LEAVE
** y APPEND
** z INPUT cuu OUTPUT cuu
**
*****
EJECT
OSTAPE CSECT
USING OSTAPE,R12
B 12(,R15) SKIP AROUND LITERAL
DC CL8'OSTAPE'
STM R14,R12,12(R13) SAVE ENTRY REGISTERS
LA R12,00(,R15) FIX BASE REGISTER
LA R14,WORK ==> OUR SAVE AREA
USING WORK,R13
ST R13,04(,R14) .....CHAIN BACKWARD
ST R14,08(,R13) .....CHAIN FORWARD
LR R13,R14 ==> OUR SAVE AREA
*****
** Check for any options.
*****
CHK4OPT DS 0H
CLI 08(R1),X'FF' ARE THERE ANY?
BE NOFUNC ..... No, then load to disk
LA R15,TAPLIST-10 ==> LIST OF VALID FUNCTIONS
CHK4OPT1 DS 0H
LA R15,10(,R15) BUMP TO NEXT ENTRY
CLI 00(R15),X'FF' END OF LIST?
BE BADFUNC .....YES, THEN ERROR
CLC 08(08,R1),00(R15) MATCH?
BNE CHK4OPT1 ..... NO, THEN CONTINUE
LH R15,08(,R15) GET DISPL TO PROCESS RTN
B 00(R15,R12) GO PROCESS OPTION
$FUNC DS 0H
MVC TAPECTL1,08(R1) MOVE IN THE FUNCTION
BAL R14,TAPECOM ISSUE TAPE COMMAND
BNZ BADTAPE ....., NG, THEN ERROR$TXT
B RETURN DONE
EJECT
$DUMP DS 0H
$COPY DS 0H
$DVOL DS 0H
$GENX DS 0H
$LOAD DS 0H
$MODE DS 0H
$SCAN DS 0H
$WVOL DS 0H
$MSG MSG999W WARN USER
LA R15,04 SET RETURN CODE
B RETURN DONE
NOFUNC DS 0H
*****
** Rewind the tape to its loadpoint.
*****
BAL R14,TAPEREW REWIND TAPE
BNZ BADTAPE ..... NG, THEN ERROR MESSAGE
*****
** Read thru the file looking for HDR1 records, extract the CMS
** filename and then FSF the tape.
*****
READ DS 0H
BAL R14,RDTAPE READ NEXT TAPE RECORD
BZ NOTEOF .... OK, SKIP
CH R15,=H'02' WAS IT END OF TAPE?
BNE BADTAPE ..... NO, THEN TAPE ERROR
CLI EOF,X'FF' WAS LAST OPERATION EOF?
BE BADTAPE .....YES, THEN DONE
MVI EOF,X'FF' SET EOF FLAG
B READ
EJECT
NOTEOF DS 0H
MVI EOF,X'00' INIT TO ZERO
CLC =C'HDR1',BUFFER
BNE READ ..... NO, THEN CONTINUE
*****
** This is the HDR1 now extract the CMS filename.
*****
LA R0,17 MAX LENGTH TO SCAN
LA R1,BUFFER+04 ==> BEGIN OF FILEID
LR R2,R1 .....AND HERE TOO
LA R3,FN ==> WHERE TO STASH VALUE
LA R4,02 SET NUMBER OF FIELDS TO FIND
GETVAL DS 0H
MVC 00(08,R3),SPACE INIT FIELD TO BLANKS
GETVAL1 DS 0H
CLI 00(R1),C'.' FOUND?
BE GETVAL2 .....YES, THEN SKIP
CLI 00(R1),C' ' FOUND?
BE GETVAL2 .....YES, THEN SKIP
LA R1,01(,R1) BUMP TO NEXT CHARACTER
BCT R0,GETVAL1 CONTINUE
GETVAL2 DS 0H
LR R15,R1 COPY OVER
SR R15,R2 CALC LENGTH OF DATA
BCTR R15,R0 .....AND SET RELATIVE TO ZERO
C R15,=F'07' IS FIELD LENGTH OK?
BNH *+08 .....YES, THEN SKIP
L R15,=F'07' OTHERWISE SET TO MAX LENGTH
LTR R15,R15 CHECK TO SEE THIS IS VALID
BM GETVAL3 .... NG, ITS < 00
MVC 00(*-*,R3),00(R2) *** EXECUTED INSTRUCTION ***
EX R15,*-06 MOVE IN VALUE
B GETVAL4
GETVAL3 DS 0H
MVC 00(08,R3),=CL8'EMB'
GETVAL4 DS 0H
LA R1,01(,R1) BUMP PAST THE DELIMETER
LR R2,R1 .....AND COPY HERE
LA R3,08(,R3) BUMP TO NEXT RESULT FIELD
BCT R4,GETVAL CONTINUE
*****
** Issue message giving name of this CMS file.
*****
MVC S1(08),FN MOVE IN THE FILENAME
MVC S2(08),FT .....FILETYPE
MVC S3(02),FM .....AND THE FILEMODE
$MSG MSG101I ISSUE MESSAGE
EJECT
*****
** Read in the HDR2 record and extract the LRECL and BLKSIZE.
*****
BAL R14,RDTAPE READ NEXT TAPE RECORD
MVC INLRECL(05),BUFFER+10 MOVE IN THE LRECL
MVC OUTLRECL(05),BUFFER+10 .....AND HERE TOO
MVC INBLOCK(05),BUFFER+05 MOVE IN THE BLOCKSIZE
*****
** Now skip over any extra HDRx type records.
*****
BAL R14,TAPEFSF FSF
*****
** Issue the FILEDEF and MOVEFILE commands inorder to copy the
** program on the tape over to a CMS disk.
*****
$CMS FINIS CLOSE ALL FILES
$CMS INMOVE DEFINE MOVEFILE INPUT
$CMS OUTMOVE DEFINE MOVEFILE OUTPUT
$CMS MOVEFILE COPY DATA
BNZ NGMOVE
*****
** Skip over the EOF file.
*****
BAL R14,TAPEFSF
B READ GET NEXT FILE
EJECT
RDTAPE DS 0H
MVC TAPECTL1,KREAD SETUP TO DO READ
LA R1,BUFFER ==> TAPE BUFFER
STCM R1,B'0111',TAPECTL4 .....AND SAVE BUFFER ADDR
LA R1,80 GET BUFFER LENGTH
ST R1,TAPECTL5 .....AND SAVE IN PLIST
ST R14,SAVR14 SAVE RETURN ADDRESS
BAL R14,TAPECOM ISSUE TAPEIO REQUEST
L R14,SAVR14 RESTORE RETUN ADDRESS
L R0,TAPECTL6 GET LENGTH OF DATA READ
LTR R15,R15 SET CONDITION CODE
BR R14 RETURN
NGMOVE DS 0H
LR R2,R15 SAVE RETURN CODE
$MSG MSG102E
LR R15,R2 RESTORE RETURN CODE
B RETURN DONE
BADFUNC DS 0H
$MSG MSG998E ISSUE ERROR MESSAGE
LA R15,04 SET BAD RETURN CODE
B RETURN DONE
BADTAPE DS 0H
LR R2,R15 COPY RETURN CODE HERE
SLL R15,01 MULTIPLY BY TWO
LA R15,TPERRS-02(R15) ==> MESSAGE DISPLACEMENT
LH R15,00(,R15) GET MESSAGE DISPLACEMENT
AR R15,R12 ==>MESSAGE TEXT
$MSG ,
LR R15,R2 RESTORE RETURN CODE
RETURN DS 0H
L R13,04(,R13) ==> PREV SAVE AREA
L R14,12(,R13) RESTORE RETURN ADDRESS
LM R0,R12,20(R13) .....AND THESE TOO
BR R14 ALL DONE
TAPEFSF DS 0H
MVC TAPECTL1,KFSF FORWARD SPACE THE TAPE
B TAPECOM
TAPEREW DS 0H
MVC TAPECTL1,KREW REWIND TAPE TO LOAD POINT
TAPECOM DS 0H
LA R1,TAPECTL ==> TAPE PLIST
SVC202 DS 0H
NOPR R14
SVC 202
DC AL4(01)
LTR R15,R15
BR R14
EJECT
LINEDIT DS 0H
LINEDIT TEXTA=(R15),RENT=NO,DOT=NO,COMP=NO,DISP=ERRMSG, X
SUB=(CHARA,S1,CHARA,S2,CHARA,S3), X
MF=(E,EDWORK)
MVC S1(SUBLEN),S1-01 SET TO BLANKS
BR R14 RETURN
EJECT
LTORG
WORK DC 9D'00'
SAVR14 DC F'00' SAVE REGISTER R14 HERE
BUFFER DC CL80' ' TAPE BUFFER
SPACE DC CL8' '
EOF DC X'00'
INMOVE DS 0D
DC CL8'FILEDEF'
DC CL8'INMOVE'
DC CL8'TAP1'
DC CL8'('
DC CL8'RECFM'
DC CL8'VB'
DC CL8'LRECL'
INLRECL DC CL8'200'
DC CL8'BLOCK'
INBLOCK DC CL8'4000'
DC 8X'FF'
OUTMOVE DS 0D
DC CL8'FILEDEF'
DC CL8'OUTMOVE'
DC CL8'DISK'
FN DC CL8' '
FT DC CL8' '
FM DC CL8'A1 '
DC CL8'('
DC CL8'RECFM'
DC CL8'VB'
DC CL8'LRECL'
OUTLRECL DC CL8'300'
DC 8X'FF'
FINIS DS 0D
DC CL8'FINIS'
DC CL8'*'
DC CL8'*'
DC CL8'*'
DC 8X'FF'
MOVEFILE DS 0D
DC CL8'MOVEFILE'
DC 8X'FF'
EJECT
*****
** TAPEIO plist.
*****
TAPECTL DS 0D
DC CL8'TAPEIO'
TAPECTL1 DC CL8'FSF' FUNCTION
TAPECTL2 DC CL4'0181' DEVICE ADDRESS
TAPECTL3 DC BL1'0' MODE
TAPECTL4 DC AL3(00) BUFFER ADDRESS
TAPECTL5 DC F'00' BUFFER LENGTH
TAPECTL6 DC F'00' NUMBE OF BYTES READ
DC 8X'FF'
TAPLIST DS 0D
*****
** Standalone functions.
*****
KREW DC CL8'REW ',AL2($FUNC-OSTAPE)
DC CL8'RUN ',AL2($FUNC-OSTAPE)
DC CL8'ERG ',AL2($FUNC-OSTAPE)
DC CL8'BSR ',AL2($FUNC-OSTAPE)
DC CL8'BSF ',AL2($FUNC-OSTAPE)
DC CL8'FSR ',AL2($FUNC-OSTAPE)
KFSF DC CL8'FSF ',AL2($FUNC-OSTAPE)
DC CL8'WTM ',AL2($FUNC-OSTAPE)
*****
** Hi level functions.
*****
DC CL8'DUMP ',AL2($DUMP-OSTAPE)
DC CL8'COPYALL ',AL2($COPY-OSTAPE)
DC CL8'DVOL1 ',AL2($DVOL-OSTAPE)
DC CL8'GENEXEC ',AL2($GENX-OSTAPE)
DC CL8'LOAD ',AL2($LOAD-OSTAPE)
DC CL8'MODESET ',AL2($MODE-OSTAPE)
DC CL8'SCAN ',AL2($SCAN-OSTAPE)
DC CL8'WVOL1 ',AL2($WVOL-OSTAPE)
DC 2X'FF'
KREAD DC CL8'READ'
TPERRS DS 0H
DC AL2(MSG204I-OSTAPE) RC=01
DC AL2(MSG205I-OSTAPE) RC=02
DC AL2(MSG206I-OSTAPE) RC=03
DC AL2(MSG207I-OSTAPE) RC=04
DC AL2(MSG208I-OSTAPE) RC=05
DC AL2(MSG209I-OSTAPE) RC=06
DC AL2(00) Place holder
DC AL2(MSG210I-OSTAPE) RC=08
EJECT
DC C' '
S1 DC CL8' '
S2 DC CL8' '
S3 DC CL8' '
SUBLEN EQU (*-S1)
EDWORK LINEDIT MF=L,MAXSUBS=03
MSG101I $TXT '........ ........ ..'
MSG102E $TXT 'MOVEFILE terminated with a non-zero return code'
MSG204I $TXT 'Invalid function or parameter list'
MSG205I $TXT 'END-OF-FILE or END-OF-TAPE encountered'
MSG206I $TXT 'Permanent I/O error'
MSG207I $TXT 'Illegal device id specified'
MSG208I $TXT 'Tape not attached'
MSG209I $TXT 'Tape is file protected'
MSG210I $TXT 'Incorrect length'
MSG998E $TXT 'Invalid or omitted OSTAPE function'
MSG999W $TXT 'Function not implemented'
PRINT NOGEN
REGEQU ,
END