; ; ********************************************************************** .TITLE REWIND ; ; this is a program to rewind a magtape from command line ; it works for both foreign and ansi tapes ; ;*********************************************************************** ; .LIBRARY /SYS$LIBRARY:LIB.MLB/ $DSCDEF $FIBDEF $DEVDEF $SSDEF .MACRO CHECK,?A BLBS R0,A PUSHL R0 CALLS #1,LIB$SIGNAL A: .ENDM .PSECT DATA FIB_DESC:: .LONG FIB$L_EXSZ .LONG FIB FIB: .BLKB FIB$L_EXSZ DEV_DESC: .LONG 4,DEV_CHAR DEV_CHAR: .LONG 0 IOSB:: .LONG 0,0 TAPECHAN:: .LONG 0 GETCMD: $CLIREQDESC- RQTYPE = CLI$K_GETCMD DESCRIPTOR:: .BLKL 2 PROMPT: .ASCID /$_Device:/ ; ; table to convert lower case letters to upper case ; UPPER: .ASCII /......... / ;hex 00-09 .BYTE ^X0A,^X0B,^X0C,^X0D,^X0E,^X0F ;hex 0a-0f .ASCII /................/ ;hex 10-1f .ASCII A !"#$%&'()*+,-./A ;hex 20-2f .ASCII /0123456789:;<=>?/ ;hex 30-3f .ASCII /@ABCDEFGHIJKLMNO/ ;hex 40-4f .ASCII /PQRSTUVWXYZ[\]^_/ ;hex 50-5f .ASCII /`ABCDEFGHIJKLMNO/ ;hex 60-6f .ASCII /PQRSTUVWXYZ{|}~./ ;hex 70-7f ; BUFFER:: .BLKB 30 .PSECT CODE START:: .WORD 0 PUSHAB W^GETCMD CALLS #1,@CLI$A_UTILSERV(AP) MOVQ W^GETCMD+CLI$Q_RQDESC,DESCRIPTOR TSTL DESCRIPTOR BNEQ GOT_IT ; ; prompt for it ; CLRQ DESCRIPTOR MOVB #DSC$K_CLASS_D,DESCRIPTOR+DSC$B_CLASS PUSHAL PROMPT PUSHAL DESCRIPTOR CALLS #2,LIB$GET_INPUT CHECK CLRB DESCRIPTOR+DSC$B_CLASS MOVZWL DESCRIPTOR,R0 MOVTC R0,@DESCRIPTOR+4,#^A/./,UPPER,R0,BUFFER MOVAL BUFFER,DESCRIPTOR+4 GOT_IT: $ASSIGN_S DEVNAM=DESCRIPTOR,CHAN=TAPECHAN CHECK $GETCHN_S CHAN=TAPECHAN,PRIBUF=DEV_DESC CHECK BITL #DEV$M_SQD,DEV_CHAR BNEQ 1$ BRW NOT_TAPE 1$: BITL #DEV$M_FOR,DEV_CHAR BNEQ FOREIGN ; ; if it is mounted foreign do a qio with func=rewind ; if it is an ansi tape do a qio with func=acp_control and cntrlfunc=rewind ; MOVW #FIB$C_REWINDVOL,FIB+FIB$W_CNTRLFUNC $QIOW_S CHAN=TAPECHAN,IOSB=IOSB,FUNC=#IO$_ACPCONTROL,P1=FIB_DESC BRB COMMON FOREIGN: $QIOW_S CHAN=TAPECHAN,IOSB=IOSB,FUNC=#IO$_REWIND!IO$M_NOWAIT COMMON: CHECK CMPL #SS$_NORMAL,IOSB BEQL OK PUSHL IOSB CALLS #1,LIB$SIGNAL OK: $DASSGN_S CHAN=TAPECHAN RET NOT_TAPE: PUSHL #SS$_NOTSQDEV CALLS #1,LIB$SIGNAL RET .END START