GETCMD - GET THE RSXNET COMMAND MACRO M1200 26-OCT-82 14:58 TABLE OF CONTENTS 4- 117 GETCMD - GET THE RSXNET COMMAND GETCMD - GET THE RSXNET COMMAND MACRO M1200 26-OCT-82 14:58 PAGE 1 1 .TITLE GETCMD - GET THE RSXNET COMMAND 2 .IDENT /3.3/ 3 .ENABL LC 4 ;+ 5 ; 6 ; Free software BY 7 ; Project Software & Development, Inc. 8 ; 9 ; This software is furnished for free and may be used and copied as 10 ; desired. This software or any other copies thereof may be provided 11 ; or otherwise made available to any other person. No title to and 12 ; ownership of the software is hereby transferred or allowed. 13 ; 14 ; The information in this software is subject to change without notice 15 ; and should not be construed as a commitment by PROJECT SOFTWARE 16 ; AND DEVELOPMENT, INC. 17 ; 18 ; PROJECT SOFTWARE assumes no responsibility for the use or reliability 19 ; of this software on any equipment whatsoever. 20 ; 21 ; Project Software & Development, Inc. 22 ; 14 Story St. 23 ; Cambridge, Ma. 02138 24 ; 617-661-1444 25 ; 26 ; 27 ; Title: GETCMD 28 ; Author: Gary Larsen 29 ; Date: April 1, 1982 30 ; 31 ; Description: 32 ; 33 ; This module takes a command from RSXNET, checks to see if it is 34 ; a valid command and then calls the appropriate routine. 35 ; 36 ; Modification History: 37 ; 38 ; Version 3.2 July 21, 1982 by Robin Miller 39 ; Added SPEED command as synonym for BAUD_RATE command. 40 ; 41 ;- 42 .ENABL AMA 43 .NLIST BEX 44 45 .MCALL ASTX$S, DIR$, QIOW$S GETCMD - GET THE RSXNET COMMAND MACRO M1200 26-OCT-82 14:58 PAGE 2 47 48 ; LOCAL EQUATES 49 50 000013 CMDSIZ = 11. ; SIZE OF AN ENTRY IN COMMAND TABLE 51 000007 BELL = 7 ; RING THE BELL 52 000011 TAB = 9. ; HORIZONTAL TAB 53 000012 LF = 10. ; LINE FEED 54 000015 CR = 13. ; CARRIAGE RETURN 55 000040 SPACE = 32. ; SPACE 56 57 ; Macro to generate command table. 58 59 .MACRO CMDENT,STRING 60 .ASCII /STRING/ 61 .NCHR N,STRING 62 .BLKB CMDSIZ-N 63 .ENDM 64 65 ; Messages: 66 67 000000 015 012 122 COMMQ: .ASCIZ %Rsxnet> % ; RSXNET PROMPT 68 69 000013 052 052 052 INVCMD: .ASCIZ %*** Invalid command, type "HELP COMMANDS" for help. ***% 70 71 000104 015 012 115 ASKMCR::.ASCIZ %MCR>% 72 000007 ASKLEN=.-ASKMCR 73 74 000113 000 ALLHLP: .BYTE 0 ; TYPE ALL HELP 75 76 .EVEN GETCMD - GET THE RSXNET COMMAND MACRO M1200 26-OCT-82 14:58 PAGE 3 78 79 ; ENTRIES FOR THE COMMAND TABLE 80 81 000114 CMDTBL: CMDENT 82 000127 CMDENT 83 000142 CMDENT 84 000155 CMDENT 85 000170 CMDENT 86 000203 CMDENT 87 000216 CMDENT 88 000231 CMDENT 89 000244 CMDENT 90 000257 CMDENT 91 000272 CMDENT 92 000305 CMDENT 93 000320 CMDENT 94 000333 CMDENT 95 000346 CMDENT 96 000361 377 .BYTE -1 97 .EVEN 98 99 ; TABLE OF VALUES FOR 100 101 000362 000000G CMDEQU: .WORD SPEED ; GO CHANGE THE BAUD RATE 102 000364 000000G .WORD DMPFIL ; DUMP A FILE TO THE REMOTE 103 000366 001006' .WORD SETDEB ; SET DEBUGGING OUTPUT FLAG 104 000370 000000G .WORD EXIT ; EXIT FROM RSXNET 105 000372 000000G .WORD GETFIL ; GET A FILE FROM THE REMOTE 106 000374 000574' .WORD HELPC ; GET HELP ON A COMMAND 107 000376 000000G .WORD INTCHR ; CHANGE THE INTERRUPT CHARACTER 108 000400 000000G .WORD LOGFIL ; OPEN A LOGFILE 109 000402 000616' .WORD NOLOG ; CLOSE THE CURRENT LOGFILE 110 000404 000630' .WORD SPNMCR ; PROCESS AN MCR COMMAND 111 000406 000000G .WORD GRPORT ; CHANGE THE REMOTE PORT 112 000410 000000G .WORD SNDFIL ; SEND A FILE TO THE REMOTE 113 000412 000000G .WORD SPEED ; GO CHANGE THE REMOTE SPEED 114 000414 000000G .WORD RSETUP ; REPORT LOCAL RSXNET SETUP 115 000416 000000G .WORD SYSTEM ; CHANGE THE REMOTE SYSTEM TYPE GETCMD - GET THE RSXNET COMMAND MACRO M1200 26-OCT-82 14:58 PAGE 4 GETCMD - GET THE RSXNET COMMAND 117 .SBTTL GETCMD - GET THE RSXNET COMMAND 118 ;+ 119 ; 120 ; GETCMD - GET THE RSXNET COMMAND 121 ; 122 ; This routine gets an RSXNET command from the user, validates the command 123 ; and then executes it. This allows the user to change RSXNET parameters 124 ; during the communications session. 125 ; 126 ;- 127 000420 GETCMD:: 128 000420 004737 000000G CALL $SAVAL ; SAVE EM ALL 129 000424 004737 000000G CALL CANCEL ; CANCEL OUTSTANDING I/O 130 000430 DIR$ #RESLOC ; RESET LOCAL CHARACTERISTICS 131 000436 004737 000000G CALL CHKLIO ; CHECK FOR ERRORS 132 000442 005037 000000G 10$: CLR ABOFLG ; INIT THE ABORT FLAG 133 000446 012701 000000G MOV #INCMD,R1 ; STORE THE RESPONSE HERE 134 000452 012702 000000' MOV #COMMQ,R2 ; ADDRESS OF THE PROMPT 135 000456 012737 000113' 000000G MOV #ALLHLP,HLPADR ; ADDRESS OF HELP STRING 136 000464 004737 000000G CALL PROMPT ; GET THE PARAMETER 137 000470 105711 TSTB (R1) ; DID USER INPUT ANYTHING ? 138 000472 001432 BEQ 30$ ; IF EQ, NO (RETURN) 139 000474 005037 000000G CLR EXACT ; DO NOT FORCE EXACT MATCH 140 000500 012700 000000G MOV #INCMD,R0 ; ADDRESS OF THE RESPONSE 141 000504 012701 000114' MOV #CMDTBL,R1 ; ADDRESS OF TABLE 142 000510 012702 000013 MOV #CMDSIZ,R2 ; SIZE OF EACH ENTRY IN THE TABLE 143 000514 004737 000000G CALL COMPAR ; IS THE COMMAND VALID ? 144 000520 103005 BCC 20$ ; IF CC, YES 145 000522 012704 000013' MOV #INVCMD,R4 ; NO, TELL THE USER 146 000526 004737 000000G CALL WRITE ; DO IT 147 000532 000743 BR 10$ ; AND TRY AGAIN 148 149 ; Got a valid command, now go process it. 150 151 000534 010503 20$: MOV R5,R3 ; COPY THE TABLE ENTRY ADDRESS 152 000536 005002 CLR R2 ; QUOTIENT FOR DIVIDE 153 000540 162703 000114' SUB #CMDTBL,R3 ; FIND THE DIFFERENCE 154 000544 071227 000013 DIV #CMDSIZ,R2 ; CALCULATE THE OFFSET 155 000550 006302 ASL R2 ; MAKE R2 A WORD INDEX 156 000552 004772 000362' CALL @CMDEQU(R2) ; CALL THE APPROPRIATE ROUTINE 157 000556 000731 BR 10$ ; GO GET THE NEXT COMMAND 158 159 000560 30$: DIR$ #SETLOC ; SETUP LOCAL CHARACTISTICS 160 000566 004737 000000G CALL CHKLIO ; CHECK FOR ERRORS 161 000572 000207 RETURN GETCMD - GET THE RSXNET COMMAND MACRO M1200 26-OCT-82 14:58 PAGE 5 GETCMD - GET THE RSXNET COMMAND 163 ;+ 164 ; 165 ; Get help on a command. 166 ; 167 ;- 168 000574 012700 000000G HELPC: MOV #INCMD,R0 ; ADDRESS OF INPUT STRING 169 000600 004737 001016' CALL SKIP ; SKIP TO SPACE OR TAB 170 000604 010037 000000G MOV R0,HLPADR ; SET THE HELP ADDRESS 171 000610 004737 000000G CALL GETHLP ; GO TYPE THE HELP 172 000614 000207 RETURN 173 174 ;+ 175 ; 176 ; NOLOG - Close the current logfile. 177 ; 178 ;- 179 000616 004737 000000G NOLOG: CALL FLUSH ; FLUSH THE LOGFILE BUFFER 180 000622 004737 000000G CALL CLOLOG ; NOW CLOSE THE FILE 181 000626 000207 RETURN 182 183 ;+ 184 ; 185 ; SPNMCR - Spawn an MCR command line. 186 ; 187 ;- 188 000630 012700 000000G SPNMCR: MOV #INCMD,R0 ; ADDRESS OF INPUT COMMAND 189 000634 004737 001016' CALL SKIP ; SKIP TO THE MCR COMMAND 190 000640 010001 MOV R0,R1 ; COPY FOR LOOP 191 000642 105721 10$: TSTB (R1)+ ; FIND END OF STRING 192 000644 001376 BNE 10$ ; IF NE, LOOP 193 000646 005301 DEC R1 ; POINT TO THE NULL 194 000650 160001 SUB R0,R1 ; CALCULATE THE BYTE COUNT 195 000652 001402 BEQ 20$ ; IF EQ, NO COMMAND 196 000654 004737 000000G 15$: CALL SPAWN ; SPAWN THE COMMAND 197 000660 012700 000000G 20$: MOV #INCMD,R0 ; ADDRESS OF COMMAND TO PROCESS 198 000664 QIOW$S #IO.RPR,#LOCAL,#LOCAL,,#TIOSB,,<#ASKMCR,#ASKLEN,,R0,R1,#44> 199 000740 023727 000000G 000000G CMP TIOSB,#IS.CC ; CTRL/C TYPED ? 200 000746 001416 BEQ 30$ ; IF EQ, YES 201 000750 123727 000000G 000000G CMPB TIOSB,#IE.EOF ; CTRL/Z TYPED ? 202 000756 001412 BEQ 30$ ; IF EQ, YES 203 000760 023727 000000G 000000G CMP TIOSB,#IS.ESC ; ESCAPE FOR EXIT 204 000766 001406 BEQ 30$ ; IF EQ, YES 205 000770 005737 000002G TST TIOSB+2 ; IS THERE ANYTHING IN THE COMMAND 206 000774 001731 BEQ 20$ ; IF EQ, NO 207 000776 013701 000002G MOV TIOSB+2,R1 ; BYTE COUNT FOR COMMAND 208 001002 000724 BR 15$ ; ELSE SPAWN THE COMMAND 209 210 001004 000207 30$: RETURN 211 212 ;+ 213 ; 214 ; SETDEB - Set the debug flag. 215 ; 216 ;- 217 001006 012737 177777 000000G SETDEB: MOV #-1,DEBFLG ; ENABLE DEBUGGING OUTPUT 218 001014 000207 RETURN GETCMD - GET THE RSXNET COMMAND MACRO M1200 26-OCT-82 14:58 PAGE 6 GETCMD - GET THE RSXNET COMMAND 220 ;+ 221 ; 222 ; SKIP - Skip to either a space or a tab. 223 ; 224 ; Inputs: 225 ; R0 = address of string to check. 226 ; 227 ; Outputs: 228 ; R0 updated to point past spaces and/or tabs. 229 ; 230 ;- 231 001016 105710 SKIP: TSTB (R0) ; END OF STRING ? 232 001020 001416 BEQ 20$ ; IF EQ, YES 233 001022 121027 000040 CMPB (R0),#SPACE ; FIND SPACE DELIMITER ? 234 001026 001403 BEQ 10$ ; IF EQ, YES 235 001030 122027 000011 CMPB (R0)+,#TAB ; FIND TAB DELIMITER ? 236 001034 001370 BNE SKIP ; IF NE, NO 237 238 ; Now skip past all spaces and/or tabs. 239 240 001036 122027 000040 10$: CMPB (R0)+,#SPACE ; ANOTHER SPACE ? 241 001042 001775 BEQ 10$ ; IF EQ, YES 242 001044 126027 177777 000011 CMPB -1(R0),#TAB ; WAS LAST BYTE A TAB ? 243 001052 001771 BEQ 10$ ; IF EQ, YES 244 001054 005300 DEC R0 ; POINT TO AFTER SPACE/TAB 245 246 001056 000207 20$: RETURN 247 248 000001 .END GETCMD - GET THE RSXNET COMMAND MACRO M1200 26-OCT-82 14:58 PAGE 6-1 SYMBOL TABLE ABOFLG= ****** GX COMMQ 000000R GRPORT= ****** GX LOCAL = ****** GX SPACE = 000040 ALLHLP 000113R COMPAR= ****** GX HELPC 000574R LOGFIL= ****** GX SPAWN = ****** GX ASKLEN= 000007 CR = 000015 HLPADR= ****** GX N = 000013 SPEED = ****** GX ASKMCR 000104RG DEBFLG= ****** GX IE.EOF= ****** GX NOLOG 000616R SPNMCR 000630R BELL = 000007 DMPFIL= ****** GX INCMD = ****** GX PROMPT= ****** GX SYSTEM= ****** GX CANCEL= ****** GX EXACT = ****** GX INTCHR= ****** GX RESLOC= ****** GX TAB = 000011 CHKLIO= ****** GX EXIT = ****** GX INVCMD 000013R RSETUP= ****** GX TIOSB = ****** GX CLOLOG= ****** GX FLUSH = ****** GX IO.RPR= ****** GX SETDEB 001006R WRITE = ****** GX CMDEQU 000362R GETCMD 000420RG IS.CC = ****** GX SETLOC= ****** GX $SAVAL= ****** GX CMDSIZ= 000013 GETFIL= ****** GX IS.ESC= ****** GX SKIP 001016R $$$ARG= 000002 CMDTBL 000114R GETHLP= ****** GX LF = 000012 SNDFIL= ****** GX . ABS. 000000 000 001060 001 ERRORS DETECTED: 0 VIRTUAL MEMORY USED: 9180 WORDS ( 36 PAGES) DYNAMIC MEMORY: 10202 WORDS ( 39 PAGES) ELAPSED TIME: 00:00:17 GETCMD,GETCMD/-SP=GETCMD