/******* MULTI8 COMMAND DECODER ******* /NAME: CD /LENGTH:1 PAGE /FUNCTION:THIS MODULE ENABLES THE OPERATOR TO PUT EACH / OTHER MODULE TO ACTION FROM THE KEYBOARD. /CONCEPT:AS THE FOREGROUND MONITOR FUNCTIONS ARE ALL PRO- / GRAMMABLE, AND NO SUCH THING AS A KEYBOARD MONITOR / HAS BEEN IMPLEMENTED, THIS MODULE ACTS AS A SORT / OF KEYBOARD MONITOR IN ORDER TO HAVE SOME GRIP / ON ALL THE MODULES FROM THE KEYBOARD. THIS ALSO HAS / THE ADVANTAGE THAT THIS MODULE NORMALLY RESIDES ON / THE DISK AND SWAPS INTO CORE ONLY WHEN NECESSARY. / A SPECIAL BREAK-CHARACTER(201 CTRL/A) / ACTIVATES THIS MODULE. / GENERAL FORMAT: / AS FOR EXAMPLE:>R LOAD / FIELD1:RUN OR CONTINUE,KILL,STOP. / FIELD2:THE NAME OF THE MODULE;EXCESSIVE CHARACTERS / ARE ALLOWED. / 377(RUB):DELETES THE WHOLE COMMAND /ERRORS:THIS MODULE HAS NO ERROR RETURN. / ERRORS FROM THE CALLED MODULES CAUSE TYPE-OUT OF "?". /TASK CIRCULATION: WHEN WAITING FOR KB1 OR TTY1 INTERRUPT. /MODULES USED:ANY MODULE CAN BE CALLED,RUNNED ETC. /SUBROUTINES USED:CDTOIF /USE: TYPE THE CTRL/A CHARACTER AND THE ">" APPEARS. / STOP THIS MODULE BY TYPING A CARRIAGE RETURN /BASIC COMMAND DECODER FOR FOREGROUND /PROCESSES STRINGS LIKE 'R NAME'; 'C NAME'; CDTMP, "C^100+"D&3777 CDAC, 200 /ONE PAGE; NO CONNECTS CDTMP2, 0 / CD, CLA CLL JMS MONITOR /WAIT FOR BREAK-CHARACTER WAIT SWPOUT 0 /BREAK IS ALWAYS SLOT #0 DCA CDAC /NAME OF KB-MODULE TAD CDAC DCA CDI TAD CDI TAD ("T-"K^100 DCA CDO CD1, DCA CDMU /CLEAR MICROCODE TAD C215 JMS CDTYPE TAD C212 JMS CDTYPE TAD ("> /CD IDENTIFIES WITH ">" JMS CDTYPE CD2, JMS CDREAD /READ ONE CHAR TAD (-"K SNA JMP CDKILL TAD M7 /(-"R+"K SNA JMP CDRUN TAD C17 /(-"C+"R SNA JMP CDRESTRT TAD (-"S+"C SZA CLA JMP CDERR /ILLEGAL COMMAND CDSTOP, TAD (STOP-RESTRT CDREST, TAD (RESTRT-RUN /SET UP MICROCODE CDRUN, TAD (RUN-KILL CDKILL, TAD (KILL DCA CDMU CDWAIT, JMS CDREAD /IGNORE THE REST UNTIL SPACE JMP .-1 /IGNORE THE REST UNTIL SPACE /ENTRY HERE AFTER SPACE CD4, JMS CDREAD /READ CHAR CLL RTL RTL CLL RAL CLL RAL DCA CDMU+1 /PACK IN 'NA' JMS CDREAD TAD CDMU+1 DCA CDMU+1 JMP CDWAIT /WAIT FOR CR OR "= /ENTRY HERE AFTER CR,DETECTED BY CDREAD CD5, TAD (4212 /TYPE A LF FOR CLARITY, RELEASE TTY JMS CDTYPE TAD CDMU /GET FUNCTION SZA CLA /MUST BE SET TAD CDMU+1 /GET NAME SNA SPA CLA /MUST BE REASONABLE JMP CDERR /NO NAME GIVEN TAD CDAC JMS MONITOR CDMU, 0 /FUNCTION 0 /'NAME' JMP CDERR /ERROR RET JMP CD CDERR, AC4000 TAD ("? JMS CDTYPE JMP CD /CDREAD READS A CHAR FROM TTY:,ECHOES IT /AND TESTS WHETHER IT IS A CR. IF CR THEN JUMPS TO CD5. CDCHAR, CDREAD, 0 TAD (-40^DGNTICK /TIMEOUT TO FREE CD JMS MONITOR CALL CDI, "K^100+"0&3777 JMP .-3 SPA JMP CDERR /TIMEOUT ERROR DCA CDTMP TAD CDTMP JMS CDTYPE /ECHO TAD CDTMP TAD (-377 SNA JMP CD1 /RUB TAD (-215+377 SNA JMP CD5 /CR TAD (-240+215 SNA JMP CD4 /SPACE TAD (-"=+240 SNA CLA JMP CD6 /= TAD CDTMP /NOT IN LIST JMP I CDREAD /CDTYPE ONLY TYPES A CHARACTER CDTYPE, 0 TAD (4000 /SET TELETYPE-HOLD BIT JMS MONITOR CALL CDO, "T^100+"0&3777 JMP .-3 JMP I CDTYPE CD6, DCA CDAC /CLEAR OCTAL # JMS CDREAD /READ CHAR AND C7 /MASK OCTAL VALUE DCA CDTMP2 /SAVE TEMP. TAD CDAC /GET PREVIOUS VALUE CLL RAL CLL RAL CLL RAL /MPY BY 10 TAD CDTMP2 /+3 NEW BITS JMP CD6 /CONTINUE TILL (CR) $$$