; ; AUTHOR: ; PAUL D. CLAYTON ; REPUBLIC MANAGEMENT SYSTEMS INC. ; ONE NESHAMINY INTERPLEX, SUITE 306 ; TREVOSE, PA. 19044 ; ; ******************************************************* ; * * ; * THIS SOFTWARE WAS DEVELOPED AT NAVAL AIR * ; * DEVELOPMENT CENTER, WARMINSTER, PA. * ; * * ; * * ; * * ; * DIRECT INQUIRIES TO: * ; * * ; * PAUL D. CLAYTON * ; * REPUBLIC MANAGEMENT SYSTEMS * ; * ONE NESHAMINY INTERPLEX, SUITE 306 * ; * TREVOSE, PA. 19044 ; * * ; * NO WARRANTY OR REPRESENTATION, EXPRESS OR * ; * IMPLIED, IS MADE WITH RESPECT TO THE * ; * CORRECTNESS, COMPLETENESS, OR USEFULNESS * ; * OF THIS SOFTWARE, NOR THAT USE OF THIS * ; * SOFTWARE MIGHT NOT INFRINGE PRIVATELY * ; * OWNED RIGHTS. * ; * * ; * NO LIABILITY IS ASSUMED WITH RESPECT TO * ; * THE USE OF, OR FOR DAMAGES RESULTING FROM * ; * THE USE OF THIS SOFTWARE * ; * * ; ******************************************************* ; * * ; * THIS SOFTWARE WAS DESIGNED FOR USE ON A * ; * PDP-11/70 OPERATING UNDER IAS V3.0 USING * ; * THE IAS PDP-11 MACRO ASSEMBLER. * ; * * ; ******************************************************* .TITLE RTCMD -- FETCH COMMAND LINE FOR TAPCON .SBTTL RTCMD -- DOCUMENTATION. .IDENT /RT001/ ; ; THIS ROUTINE WILL FETCH A COMMAND LINE FOR RT11 TAPE GENERATOR. WHEN ; INSTALLED AS A SYSTEM LIBRARY TASK, THE CALLING SEQUENCES ; ARE: ; 1. INPUT FROM TAPE: ; RT/IN[:DEV] ; QUALIFIERS ARE: ; /PE ; ; 2. OUTPUT TO TAPE: ; RT/OUT[:DEV] OUTFIL ; QUALIFIERS ARE: ; /PE ; ; 3. DIRECTORY OF TAPE: ; RT/DI[:DEV] ; QUALIFIERS ARE: ; /PE ; /LP ; ; ***** NOTE ***** ; THIS ROUTINE MUST BE LINKED WITH OPTION ASG=TI:4 ; ; CALLING SEQUENCE IS: ; CALL RTCMD(IER) ; IER -- AN ERROR CODE RETURNED AS FOLLOWS: ; IF <0: LOW BYTE CONTAINS GCML ERROR CODE. ; IF =0: SUCCESSFUL COMPLETION. ; IF >0: ERROR DURING COMMAND INTERPRETER: ; 1 = DURING CSI$1 ; 2 = DURING FIRST CALL TO CSI$2 ; 5 = CONTROL-Z ENTERED. ; ; DATA IS RETURNED INTO NAMED COMMON BLOCKS: ; BYTE FILENM ; COMMON/TAPTAB/ISWIT,NSWIT,IDEV,IDNM ; COMMON/FILTAB/FILENM(40) ; ; ISWIT: TAPE SWITCH BIT MAP AS FOLLOWS: TMPE=1 ;/PE PRESENT TMOU=2 ;/OUT PRESENT TMIN=4 ;/IN PRESENT TMDI=10 ;/DIR PRESENT TMLP=40 ;/LP PRESENT ; NSWIT: NEGATION INDICATOR FOR /TAB ; IDEV: FIRST TWO CHARACTERS OF DEVICE SWITCH ; IDNM: SECOND TWO CHARACTERS OF DEVICE SWITCH ; ; FILENM: FILE NAME SUITEABLE FOR USE WITH OPEN STATEMENT ; .SBTTL RTCMD -- NAMED COMMON BLOCKS .PSECT TAPTAB,D,GBL,REL,OVR ISWIT=. NSWIT=.+2 IDEV=.+4 IDNM=.+6 .=.+8. ; .PSECT FILTAB,D,GBL,REL,OVR FILENM=. .=.+40. ; .SBTTL RTCMD -- GCML AND CSI BLOCKS .PSECT .EVEN .MCALL GCMLB$,GCML$,RCML$ .MCALL CSI$,CSI$1,CSI$2,CSI$SW,CSI$SV,CSI$ND ; ; GCML BLOCK. ; GBLK: GCMLB$ ,RT,,4. ; ; "FILE>" PROMPT STRING, LENGTH ; FPR: .ASCII <15><12>/FILE>/ FP.LEN=.-FPR .EVEN ; ; CSI BLOCK. ; CSI$ .EVEN CSIBLK: .BLKB C.SIZE .EVEN ; ; TAPE SWITCH TABLE ; TSWIT: CSI$SW OU,TMOU,,,,OUVT,EXACT CSI$SW IN,TMIN,,,,OUVT,EXACT CSI$SW PE,TMPE,,,,,EXACT CSI$SW DI,TMDI,,,,OUVT,EXACT CSI$SW LP,TMLP,,,,,EXACT CSI$ND ; ; SWITCH VALUE TABLE: /OUT, /IN ; OUVT: CSI$SV ASCII,IDEV,4 CSI$ND ; .SBTTL RTCMD -- DEFINE GCML ERROR CODE BYTES. ECIOR=GE.IOR ;I/O ERROR OCCURED DURING COM. INP. ECOPR=GE.OPR ;GCML UNABLE TO OPEN COMMAND FILE ECBIF=GE.BIF ;INDIRECT COMMAND FILENAME SYN. ERR. ECMDE=GE.MDE ;NESTING LEVEL TO DEEP. ECEOF=GE.EOF ;EOF, COMMAND LEVEL 0. ; .PAGE .SBTTL RTCMD -- MAIN CODE ; ; ENTRY ; RTCMD:: CLR IDEV ;INITIALIZE COMMON CLR IDNM MOV #-1,R0 ; MOV R0,@2(R5) ;SET ERROR CODE NEGATIVE. GCML$ #GBLK ;GET COMMAND BLOCK BCS BADGMC ;ERROR SET? NOOUT: MOV #1,@2(R5) ;NO ERROR - SET ERROR CODE TO 1. MOV GBLK+G.CMLD,CSIBLK+C.CMLD ;SET UP CSI$1 CALL. MOV GBLK+G.CMLD+2,CSIBLK+C.CMLD+2 CSI$1 #CSIBLK ;DO INITIAL CHECK OF CML. BCS RTN ;RETURN IF ERROR. MOV #2,@2(R5) ;SET ERROR CODE TO 2. CSI$2 #CSIBLK,OUTPUT,#TSWIT ;GET TAPE SPEC. BCS RTN ;RETURN IF ERROR MOV CSIBLK+C.MKW1,ISWIT ;SAVE SWITCH BITS AND MOV CSIBLK+C.MKW2,NSWIT ; NEGATION BITS. MOV #4,@2(R5) ;SET FOR SYNTAX ERROR. BITB #CS.EQU!CS.WLD!CS.DVF!CS.NMF!CS.DIF!CS.MOR,CSIBLK+C.STAT BNE RTN CLR @2(R5) ;SHOW SUCCESS OF COMMAND RETURN ;BACK TO CALLER ; BADGMC: MOVB GBLK+G.ERR,@2(R5) ;PUT IN THE ERROR CODE CMPB GBLK+G.ERR,#GE.EOF ;IF NOT EOF, FLUSH INDIRECTS. BEQ EOFINP ;MUST SET INDICATOR TO SHOW END FLUSHC:: RTN: RCML$ #GBLK ;FLUSH INDIRECT FILES. RET: RETURN ; EOFINP: MOV #5,@2(R5) ;SHOW END OF INPUT RETURN ; .EVEN .END