.TITLE SUBMIT COMMAND FILE .IDENT /V01.02/ ; COPYRIGHT (C) 1976, 1977 ; DIGITAL EQUIPMENT CORPORATION, MAYNARD, MASS. ; ; THIS SOFTWARE IS FURNISHED UNDER A LICENSE FOR USE ONLY ON A ; SINGLE COMPUTER SYSTEM AND MAY BE COPIED ONLY WITH THE ; INCLUSION OF THE ABOVE COPYRIGHT NOTICE. THIS SOFTWARE, OR ; ANY OTHER COPIES THEREOF, MAY NOT BE PROVIDED OR OTHERWISE ; MADE AVAILABLE TO ANY OTHER PERSON EXCEPT FOR USE ON SUCH ; SYSTEM AND TO ONE WHO AGREES TO THESE LICENSE TERMS. TITLE ; TO AND OWNERSHIP OF THE SOFTWARE SHALL AT ALL TIMES REMAIN ; IN DEC. ; ; THE INFORMATION IN THIS DOCUMENT IS SUBJECT TO CHANGE WITHOUT ; NOTICE AND SHOULD NOT BE CONSTRUED AS A COMMITMENT BY DIGITAL ; EQUIPMENT CORPORATION. ; ; DEC ASSUMES NO RESPONSIBILITY FOR THE USE OR RELIABILITY OF ; ; VERSION V01.02 ; ; AUTHOR: ; ; ERIK ROSDOL SWS/VIENNA ; ; ; ; MODULE CONTENTS: ; ; THIS MODULE PROCESSES THE "SUBMIT COMMAND FILE FUNCTION" ; IN COOPERATION WITH THE VIRTUAL TERMINAL DRIVER (BY DAVE ; ELDERKIN) AND THE SUBMIT EXECUTOR TASK BAT... ; THIS CODE FIRST APPEARED IN THE 'SMALL BUFFER' VOLUME 424 ; 27-APR-78. ; THIS SOURCE FILE OMITS THE NETWORK FEATURES ORIGINALY PRESENT ; IN THE XEROX COPY. THIS IS DONE IN THE INTEREST OF SHORTINING ; THE AMOUNT OF TYPE IN. THOSE USERS WHO REQUIRE THE ABILITY OF SUBMITTING ; COMMAND COMMAND FILES FOR BATCH EXECUTION USING DECNET PHASE 2 ON AN ; RSX11M V3.1 SYSTEM, SHOULD TRY AND GET A XEROX COPY OF THE SMALL BUFFER ; ARTICLE MENTIONED ABOVE. ; ; MODULE MODIFICATION HISTORY: ; ; JGD01 23-MAY-78 CHANGED PARSING OF COMMAND LINE SO ; THAT THE COMMAND ENTERED INTO THE SEND ; BUFFER, STARTS WITH THE FIRST NON BLANK ; CHARACTER. THIS MAKES THE PARSING A BIT ; MORE FORGIVING, IE SUB COMMAND LINE ; AND SUBMIT COMMAND LINE ARE BOTH EQUALLY ; VALID. ; ; JGD02 18-JUL-78 FIXED ERROR RETURN, IF COMMAND ENTERED ALONE ; WITH NOTHING FOLLOWING, IE SUBMIT ; ; ; MACRO CALL DEFINITIONS ; .MCALL QIOW$C,QIOW$,GMCR$,DIR$,RQST$C .MCALL SDAT$,EXIT$S,ALUN$C ; ; LOCAL MACRO DEFINITIONS ; .MACRO PMSG M MOV #M,MSGDPB+Q.IOPL ;SETUP MESSAGE ADDRESS MOV #M'L,MSGDPB+Q.IOPL+2 ; AND COUNT DIR$ #MSGDPB ; EXECUTE QIO .ENDM .MACRO PUSH X MOV X,-(SP) .ENDM .MACRO POP X MOV (SP)+,X .ENDM .NLIST BEX ; ; DIRECTIVE PARAMETER BLOCKS ; MSGDPB: QIOW$ IO.WLB,1,1,,,,<0,0,40> BUF: .BLKW 13. ; JGD01 LINE: GMCR$ SEND: SDAT$ BAT...,BUF ; JGD01 ; ; LOCAL DATA ; ; ; LOCAL MESSAGES ; MSG1: .ASCII /SUB -- COMMAND SYNTAX ERROR/<7><7> MSG1L=.-MSG1 MSG2: .ASCII /SUB -- SEND DATA OR REQUEST ERROR/<7><7> MSG2L=.-MSG2 .EVEN ;+ ; **-$SUBMIT ; ; THIS ROUTINE FIRST TRIES TO GET A COMMAND LINE FROM MCR ; IT THEN CHECKS IT FOR POSSIBLE COMMAND ERRORS. IF NO ERROR ; IS FOUND, THEN THE COMMAND LINE IS SENT TO THE COMMAND ; FILE SUBMITTAL TASK BAT... AND EXECUTED ON VT0/1. ; SUBMIT IS AN EXTERNAL MCR TASK AND DOES NOT PROMT ; FOR INPUT. THE CALL AND THE COMMAND MUST BE TYPED IN ; ON THE SAME LINE. ; ;***************** WARNING ************************ ; ; THE CODE OF ...SUB AND BAT... HAS ONLY BEEN ; TESTED OUT UNDER RSX11M V3.1 BL22 ; ; ; THERE ARE SEVERAL KNOWN BUGS. ABORTING BAT...(OR ANYTHING USING ; VT0/1) CAN LEAVE ...AT. HUNG IN AN INDETERMINATE STATE. ; EVENTUALLY, TKTN CLEARS UP THE MESS, BUT THIS SHOULD NOT BE COUNTED ; ON TO WORK EVERY TIME. ; SINCE ...AT. REQUIRES TO BE ABLE TO DO OUTPUT AND EXPECTS A TERMINAL TO ; BE ABLE TO RECIEVE ITS DATA, BAT... BETTER BE ACTIVE, ELSE WHERE ; IS VTDRV GOING TO SEND THE DATA FROM ...AT. ; INDISCRIMINATE, OR CARELESS (OR JUST DEBUGGING NEW CODE) USE OF VTDRV ; IS ONE OF THE BEST WAYS OF WIPEING OUT THE ENTIRE POOL ; I HAVE EVER SEEN. I URGE EXTREEM CAUTION IN PLAYING WITH VTDRV. ; IF THE CODE IS GOOD, ALL IS OK. IF YOU MAKE A CODING ERROR, THE ; SYSTEM MAY LOOSE ITS POOL. ENOUGH SAID ABOUT THE DANGERS. ; BASICALLY THE TWO TASKS ...SUB AND BAT... WORK REASONABLY WELL ; GIVEN CERTAIN RESTRICTIONS. 1)NEVER ABORT BAT... 2) ONE MAY NOT ; USE THE .ASK [N , S] ...AT. DIRECTIVES WITH BATCH. IT CAN'T FIND TI:. ; ; NOTE: IF THE KMS FUSION ACCOUNTING RSX11M ACCOUNTING ENHANCEMENTS ARE ALSO ; DESIRED TO WORK ON THE SYSTEM, SLIGHT MODIFICATIONS TO HELLO AND BYE ; ARE REQUIRED TO ENABLE THEM TO WORK WITH VIRTUAL TERMINALS AND NOT ; GET CONFUSED. THE UPDATED VERSIONS ARE PRESENTLY AVAILABLE ; ; THESE VERSIONS OF ...SUB ,BAT... , AND VTDRV ARE SUPPORTED BY ; JAMES G. DOWNWARD ; KMS FUSION ; 3941 RESEARCH PARK DR. ; ANN ARBOR, MICH. 48104 ; (313)-769-8500 ; SUGGESTIONS FOR IMPROVEMENTS ARE VERY WELCOME ; ; **************************************************** ; ; THE SUBMIT FUNCTION HAS THE FOLLOWING COMMAND FORMAT: ; ; >SUBMIT GROUP/OWNER/PASSWD FILNAM ; ; WHERE: ; GROUP UIC GROUP UNDER WHICH THE COMMAND FILE RESIDES ; OWNER UIC OWNER UNDER WHICH THE COMMAND FILE RESIDES ; PASSWD PASSWORD OF GROUP/OWNER IN THE ACOUNT-FILE ; FILNAM 1-9 CHARACTER FILENAME OF THE IND. COMMAND FILE ; TO BE SUBMITTED. EXTENSION MUST NOT BE SPECIFIED. ; IS ALWAYS '.CMD'. ; ; UIC'S FOR WHICH NO ACCOUNT FILE ENTRY IS SPECIFIED, CANNOT BE ; REFERENCED. THE SUBMITTAL EXECUTOR BAT... LOGES INTO THE ; SPECIFIED ACCOUNT AND EXECUTES THE COMMAND FILE. AFTER TERMINATION ; OF F...AT., IT LOGGS OFF THE VT0: TERMINAL AUTOMATICALL. ; ONLY ON-LINE MCR COMMANDS ARE EXECUTED. DO NOT USE NORMAL ; UTILITY PROMPTING COMMANDS LINE: ; ; PIP ; PIP>/LI ; ; THAT WILL NOT WORK!!! WORSE IT WILL LEAVE A LOCKED UP COPY OF ...AT. ; FLOATING IN MEMORY, TRYING TO GET INPUT FROM A TERMINAL WHICH HAS NO ; WAY OF KNOWING IT IS EXPECTING AN ANSWER. ; ; ;- .ENABLE LSB $SUBMT:: ; REFERENCE LABEL ALUN$C 1,TI,0 ; ASSIGN TO TI: TERMINAL DIR$ #LINE,CMDERR ; GET AN MCRLINE TO PROCESS MOV $DSW,R0 ; GET NUMBER OF BYTES CLRB LINE+2(R0) ; TERMINATE COMMAND WITH ZERO CALL LDBUF ; LOAD UP BUF WITH COMMAND LINE ; JGD01 MOV #LINE+2,R1 ; GET START OF BUFFER 20$: CMP #SEND-1,R1 ; ALREADY END OF BUFFER? BNE 30$ ; IF NE, NO GOOD JMP CMDERR ; PRINT ERROR MESSAGE 30$: DEC R0 ; SUBTRACT BYTES WORKED ON (COMMAND ITSELF) CMPB (R1)+,#40 ; IS IT A BLANK? BNE 20$ ; IF NE, NOT FOUND CMP R0,#7 ; REST MUST BE EQ. OR GT. 7 (G/O/P F) BHIS 40$ ; IF HIS, COMMAND SEEMS OK JMP CMDERR ; OTHERWISE PRINT ERROR 40$: PUSH R1 ; SAVE STRING START ADDRESS ; JGD01 80$: MOV #'/,R5 ; GET SEARCH CHARACTER CALL SEARCH ; SEARCH FOR TWO SLASHES CMP R4,#2 ; ARE THERE TWO / ? BEQ 90$ ; IF EQ OK JMP CMDERR ; OTHERWISE TO MANY SLASHES 90$: MOV #40,R5 ; GET SEARCH CHARACTER CALL SEARCH ; IS THERE ONE ADDITIONAL BLANK? DEC R4 ; THAT'S FASTER THAN CMP BEQ 100$ ; IN EQ, WAS ONLY ONE JMP CMDERR ; 100$: ; REFERENCE LABLE POP R1 ; CLEAN UP STACK ; JGD01 DIR$ #SEND ; SEND IT BCS SRQERR ; IF CS SEND ERROR RQST$C BAT... ; KICK THE BAT... TASK ON ; INGORE REQUEST ERRORS AT ALL 120$: EXIT$S ; AND LEAVE TASK .DSABLE LSB ;+ ; **-SEARCH ; ; THIS ROUTINE SEARCHES THE INPUT STRING FOR THE OCCURENCES OF THE ; SPECIFIED TEST CHARACTER ANN COUNTS THE NUMBER OF ; OCCURENCES INTO R4 ; ; INPUTS: ; (SP)=RETURN ADDRESS ; 2(SP)=START ADDRESS OF BUFFER ; R5=TEST CHARACTER BYTE ; ; OUTPUTS: ; ; R1=ALTERED ; R2=NUMBER OF OCCURANCES ;- .ENABLE LSB SEARCH: MOV 2(SP),R1 ; GET BUFFER START ADDRESS CLR R4 ; OCCURENCE COUNTER 10$: CMPB (R1)+,R5 ; BYTE FOUND BNE 20$ ; IF NE, NO INC R4 ; COUNT OCCURENCE 20$: CMP R1,#SEND-1 ;END OF BUFFER? BNE 10$ ; IF NE NO, SEARCH AGAIN RETURN ; TO CALLER .DSABLE LSB ;+ ; **-CMDERR ;**-SRQERR ; ; THESE ARE THE ERROR ROUTINES FOR COMMAND ERRORS AND ; SEND DATA ERRORS. ; AN APPROPRIATE ERROR MESSAGE IS PRINTED ON TI: ; AND A TASK EXIT IS EXECUTED ; ;- CMDERR: PMSG MSG1 ; SAY COMMAND SYNTAX ERROR EXIT$S ; AND RUN AWAY SRQERR: ; REF LABLE PMSG MSG2 ; SAY S/R ERROR EXIT$S ; AND LEAVE TASK LDBUF: MOV #LINE+2,R1 ; GET START OF BUFFER ; JGD01 PUSH R0 ; SAVE R0 ; JGD01 MOV #BUF,R0 ; ADDR OF SEND BUFER ; JGD01 10$: TSTB (R1) ; IS FIRST CHARACTER 0 ; JGD01 BEQ 150$ ; WE HAVE AN END BEFORE WE START, BAD, BAD ; JGD02 CMPB (R1)+,#40 ; IS IT A BLANK ; JGD01 BNE 10$ ; IF NE, NO TRY AGAIN ; JGD01 15$: CMPB (R1),#40 ; IS THE NEXT CHARACTER A BLANK ; JGD01 BNE 20$ ; IF NE, NO, FILL UP BUFFER ; JGD01 INC R1 ; IF EQ, YES, SO SKIP ONE MORE CHARACTER AND LOOP ; JGD01 BR 15$ ; CHECK FOR ANOTHER BLANK ; JGD01 20$: MOVB (R1)+,(R0)+ ; START FILLING IN BUF ; JGD01 TSTB (R1) ; IS IT THE 0 SENTINAL ; JGD01 BEQ 50$ ; IF EQ, YES EXIT ; JGD01 BR 20$ ; ELSE LOOP SOME MORE ; JGD01 50$: MOVB (R1),(R0) ; GET SENTINAL ; JGD01 POP R0 ; RESTORE R0 ; JGD01 100$: RETURN ; ALL DONE ; JGD01 150$: JMP CMDERR ; ERROR EXIT ; JGD01 .END $SUBMT