/ CCLX4.PA - Command Control Language / Version 01.49 (Aerospace version number for this file.) / / THIS SOURCE FOLLOWS FIELD 1 CODE. / / THESE ARE THE OVERLAYS FOR 2000-2377. THEY ARE CODED / SUCH THAT THEY 'EXIST' IN FIELD 0, BUT ARE NEVER LOADED / OR USED THERE BY CCLX. /// PAGE CCLLWA=.-1 FIELD 0 *0 LOCFUJ=.-OVLBAS RELOC OVLBAS / A wee bit of symbiont support. Leave space for the / symbiont hook so .DELETE works when CCLX was saved with / the symbiont on. ZBLOCK 3 /// DELETE,COPY,RENAME,DEASSIGN,UA,UB,UC K6777, 6777 /FOR K200 DELETE=.+LOCFUJ OVSUBR JMS QPRINT KILMES TAD (-5 /IF *.*, FORCE /Q OPTION. DCA T TAD (7604 DCA XR KIL1, ISZ XR TAD I XR ISZ XR ISZ XR TAD (-5200 SNA CLA JMP KIL3 /* ISZ XR KIL2, ISZ T JMP KIL1 JMP I DELETE-LOCFUJ KIL3, TAD I XR TAD (-5200 SZA CLA JMP KIL2 TAD K200 CMA AND I (MPARAM+1 TAD K200 DCA I (MPARAM+1 JMP I DELETE-LOCFUJ RENAME=.+LOCFUJ OVSUBR JMS QPRINT RENMES JMP I RENAME-LOCFUJ COPY=.+LOCFUJ OVSUBR JMS QPRINT MOVMES JMP I COPY-LOCFUJ QPRINT, SUBR IFDEF CM30 < CLA IAC AND I (XPARAM /DON'T PRINT IF '\L' SZA CLA JMP QMESGP+1 >/*CM30 TAD I (MPARAM-1 SMA CLA JMS I (CRLF /NEW LINE FOR ALTMODE TAD I QPRINT DCA QMESGP JMS I (PRINT QMESGP, 0 ISZ QPRINT JMP I QPRINT SQUISH=.+LOCFUJ OVSUBR TAD I (7600 SNA TAD I (7617 DCA I (7600 JMP I SQUISH-LOCFUJ /ALLOW DEASSIGN FOO ? DEASSIGN=.+LOCFUJ OVSUBR TAD (7740 DCA XR TAD (-17 DCA T DCA I XR ISZ T JMP .-2 CDF 0 TAD I (7746 K200, AND K6777 TAD (1000 DCA I (7746 CDF 10 JMP I DEASSIGN-LOCFUJ ZERO=.+LOCFUJ OVSUBR TAD I (7601) /FIELD 1 FILENAME SNA CLA /WAS FILENAME SPECIFIED? TAD I (7600) /NO, GET DEVICE CODE SNA CLA /WAS A DEVICE SPECIFIED? JMP I (CDER2 /NO, SYNTAX ERROR. IFNDEF CM2 /*CM2 IFDEF CM2 /*CM2 IFDEF CM14 /*CM14 PAGE /////////////// .R CCL ENTRY POINT AT 200 !!!! IFNZRO .-OVLBAS-200 ISZ I .+3 /.R CCLX JMP I .+1 /CHAINED. MAIN MAINA BASIC=.+LOCFUJ OVSUBR TAD (200 DCA I (MPARAM+1 /Q SWITCH JMP I BASIC-LOCFUJ / If no filename, .DESCRIBE prints directory of / information files from device specified by the / first input file. DESCRIBE=.+LOCFUJ OVSUBR TAD I (7620) SZA CLA JMP HLSUB1 /INPUT FNAME EXISTS. TAD I (7617) /SAVE DEVICE. DCA DEV1 JMS I (ZEROCD) JMS SPCSET EXTHLP TAD (100) /F OPTION. DCA I XR2 DCA I XR2 DCA I XR2 STL IAC RTL /=6 DCA I XR2 TAD (YDIRECT /WANT DIRECT.SV! DCA I (DEFILE JMS I (PRINT) HLPMES HLSUB1, JMS I (SETTTY) JMP I DESCRIBE-LOCFUJ IFDEF CM19 /*CM19 SPCSET, SUBR /SET SPECIAL MODE *.XX LIST. /DEVICE # IN DEV1. TAD (7604 DCA XR TAD (MPARAM-1 DCA XR2 TAD I SPCSET ISZ SPCSET DCA T SPCS1, TAD I T SNA CLA JMP I SPCSET TAD DEV1 SNA IAC DCA I XR TAD (5200 DCA I XR DCA I XR DCA I XR TAD I T DCA I XR ISZ T ISZ T JMP SPCS1 KILMES, TEXT /FILES DELETED:/ RENMES, TEXT /FILES RENAMED:/ MOVMES, TEXT /FILES COPIED:/ HLPMES, TEXT /INFO ON:/ ZERMES, TEXT /#ILLEGAL DEVICE/ PAGE RELOC / The main part of CCLX.SV must be a single, contiguous / core-load, because of the way the monitor loads it. / Fortunately, field 0 code follows field 1 code in the / OS/8 core-image format. / For versions of the monitor before level A, the total / length of CCL.SV must be less than 14 blocks or it reads / over 7600. / / Version D: / But now CCL has an overlay structure, where field 0 / routines are overlays loaded into field 1, so CCL need / not read anything until it is required. / / CCL loads over the SAVE, DATE overlay and starts at 00600. / It reads the keyword table into 1400-1777. Keywords are / stored two chars per word in five-bit ASCII (only letters / are legal), separated by six-bit 00's. Each entry starts / on a word boundary, but if space becomes short, they need / not. Bit 40 on means that the char is not required but, / if present, must match. / OS/8 Monitor Addresses. JSBITS=7746 SYSTEM=22 PRMES=330 ERRET=33 FIELD 0 /RUNS IN FIELD 0 ONLY!!!! *400 / Find a keyword in the keyword table. / Call with pointer (less 1) to command line (begun by the / keyword) at the return address, and the data field set to / the field of the caller. / Return to the return address plus one, with entry number / in Ac. Also, leave the entry number in ENTRYN, a pointer / into the command line to the char following the keyword / in LINPTR, and, if CM65, a pointer (less 1) into the / keyword table to the keyword that matched in KEYSAV. / If undefined command, return with entry number of minus / two. / If keyword must be returned to the keyboard monitor (line / began with "@"), return with entry number of minus one. / Normal entries start at entry one (entry zero was / preempted by whoever installed the TECO EG support). FINDIT, NIL CLA CLL DCA ENTRYN / Initialize entry number. TAD (KEYWRD-1 / Point to 1st entry of keyword DCA KPTR / table ("@" is gone). RDF / Read the data field. TAD FIND0 / Make CDI instruction. DCA FOUND TAD I FINDIT / Get address of command line. DCA FNDBGN FIND0, CDF CIF 0 ISZ FNDBGN TAD I FNDBGN / Get next char of command line. SNA / Null line? JMP NFOUND / Yes- not found. TAD (-240 SNA / Space? JMP FIND0 / Yes- check next char. TAD (-40 / No. SNA CLA / At symbol ("@")? JMP FINDAT / Yes. FIND1, ISZ ENTRYN / Bump entry count. TAD FNDBGN / Point to 1st char of keyword to DCA LINPTR / find. TAD (GETCHL / Initialize coroutine. DCA GETCH1 IFDEF CM65 /*CM65 JMS GETCH / Get 1st char of next keyword. SZA / End of keyword table? JMP FIND3 / No- attempt a match. NFOUND, CLA IAC / Yes- entry number is -2. FINDAT, CMA / "@"- entry number is -1. DCA ENTRYN JMP FOUND FIND2, ISZ LINPTR / Bump command line pointer. TAD I LINPTR / Get next char from command line. TAD (-301 STL TAD (-32 SNL CLA / Is it a letter? JMP FIND5 / No- might be a match. JMS GETCH / Yes- get next char of keyword. SNA / End of keyword? JMP NFOUND / Yes- command too long. FIND3, CIA / Negate. TAD I LINPTR / Command line char - keyword char. AND (77 / CCLX will not match 0-9! SNA CLA / Chars match? JMP FIND2 / Yes- try to match more. FIND4, JMS GETCH / No- get next char of keyword. SZA CLA / End of keyword? JMP FIND4 / No- peel another char. JMP FIND1 / Yes- try another keyword. FIND5, JMS GETCH / Get next char from keyword table. SZA SNL CLA / Char is 0 or not necessary? JMP FIND4 / No- try another keyword. TAD I LINPTR / Test char following keyword. TAD (-"9-1 CLL TAD ("9-"0+1 SZL CLA / Char is a digit? JMP NFOUND / Yes- reject the match. / No- match. FOUND, NIL / Will be CIF CDF to caller. ISZ FINDIT / Bump return address. TAD ENTRYN / Get entry number. JMP I FINDIT ENTRYN, NIL FNDBGN, NIL IFDEF CM65 < KEYSAV, NIL >/*CM65 KPTR, NIL LINPTR, NIL / Subroutine to get next character from keyword table. / Sets link if char need not be present (bit 40 set). GETCH, NIL CLA CLL JMP I .+1 / Branch to get right or left char. GETCH1, GETCHL / Point to right or left branch. / Exit code (come here from branches). CLL / Preset link. AND (77 / Clear high byte. TAD (7740 / Set link if 40 bit set. AND (37 / Leave char in Ac. JMP I GETCH / Return. / Left branch. GETCHL, ISZ KPTR / Bump to next word. TAD I KPTR / Get word from keyword table. RTR / Rotate char to right side. RTR RTR JMS GETCH1 / Return from left branch. / Right branch. TAD I KPTR / Get word from keyword table. JMS GETCH1 / Return from right branch. JMP GETCHL / Left branch again. PAGE ENTRY, 0 /DEFAULT FOR TECO EG. JMP ENTREE /OS/8 JUMPS HERE (ACTUALLY TO 600) /*** TECO EG JUMPS HERE!! *** DCA I (BEGLN /ZERO COMMAND LINE JMS CCLKUP /MAKE SURE WE KNOW WHERE CCL IS. JMP TEGO VNO, CCLTAB ENTREE, ISZ NOCCLJ /ENABLE MONITOR CALLS. TAD (7605 DCA ERRET TAD SYSTEM DCA MYSYS LDKEYW, TAD CCLBLC IAC DCA KEYBLK JMS I (7607) 200 KEYWRD&7400 KEYBLK, 0 JMP NOCCL TAD I (KEYVNO) CIA TAD VNO SNA CLA JMP KKFIND TAD CCLLEN /ALREADY LOOKED UP CCL? SZA CLA JMP NOCMDS /CCL HAS BAD COMMANDS. JMS CCLKUP JMP LDKEYW /TRY IT AGAIN. KKFIND, IFDEF CM66 /*CM66 JMS I (FINDIT) BEGLN-1 / Address of command line. IFNDEF CM69 /*CM69 TEGO, CLA STL RTL TAD CCLBLC DCA CCLRDB JMS I (7607) /READ IN FIELD 1 CCL. CCLLWA-2400&7600%2+111 CCLSTR, 2400 CCLRDB, 0 JMP NOCCL JMS USRIN /MAKE SURE USR IS AROUND. CDF CIF 10 JMP I CCLSTR USRIN, 0 TAD MYSYS TAD (-200 SNA CLA JMP I USRIN CIF 10 JMS I MYSYS 10 TAD (200 DCA MYSYS JMP I USRIN CCLKUP, 0 JMS USRIN TAD (CCLXSV DCA CCLBLC IAC CIF 10 JMS I MYSYS 2 CCLBLC, 0 /PRESET BY MONFIX. CCLLEN, 0 JMP NOCCL JMP I CCLKUP IFNDEF CM69 < UNKCMD, TAD (PRQMRK) DCA NOCCLK >/*CM69 NOCMDS, NOCCL, TAD MYSYS TAD (-200 SZA CLA JMP NOCCLJ CIF 10 JMS I (200 11 /USROUT NOCCLJ, JMP I .+1 /INCREMENTED IF KBM (NOT TECO). 7605 /TECO ERRORS. NOCCLK, .+1 /KBM ERRORS JMS I (PRMES 4316;1740 CCLXSV, IFNDEF CM67 < FILENAME CCLX.SV > IFDEF CM67 < FILENAME CCL.SV > MYSYS, 7700 PAGE //// MUNG,MAKE,TECO,CREATE OVERLAYS. *.+377&7400 LOCFUJ=.-OVLBAS RELOC OVLBAS SETPA, 0 JMS I (SETX "P;"A JMP I SETPA MAKE=.+LOCFUJ OVSUBR / TAD DELIM / SNA CLA / JMP I (CMDERR /DON'T ALLOW MAKE JMS SETLXR TAD NAME1 CLL RAL TAD NAME2 TAD NAME3 TAD NAME4 TAD (-1417-1417-2605) SZA CLA JMP .+3 JMS I (PRINT LOVMES JMS I (TECPUT "E;"W JMS TECMOV JMS SETPA JMS I (TECPUT ALTMODE JMS I (CHKSUP JMP I MAKE-LOCFUJ /MOVE CHARS FROM FIELD 0 LINE BUFFER /FROM SAVLXR+1 TO LXR-1 INCLUSIVE /INTO TECO LINE BUFFER AT 17600 TECMOV, 0 TAD SAVLXR CMA TAD LXR SNA JMP I (CDER2 /NO FILE SPEC CIA DCA TT TAD SAVLXR DCA LXR TECL, JMS I (GLXR JMS I (TPUT ISZ TT JMP TECL /MORE. ISZ LXR /MOVE TO DELIM. JMP I TECMOV TECO=.+LOCFUJ OVSUBR JMS SETLXR TAD DELIM SNA JMP TECNORM TAD (-"< SZA CLA JMP I (CDER2 JMS I (TECPUT "E;"W JMS TECMOV JMS SETPA TAD LXR DCA SAVLXR JMS I (CHKSUP JMS I (GETSPC JMS I (TECPUT ALTMODE;"E;"R JMS TECMOV JMS SETPA JMS I (TECPUT ALTMODE;"Y JMP TECLV TECNORM,JMS I (TECPUT "E;"B JMS TECMOV JMS SETPA JMS I (TECPUT ALTMODE;"Y TECLV, JMS I (TECLUK JMP I (CCER1 /NOT FOUND. JMP I TECO-LOCFUJ SAVLXR, 0 SETLXR, 0 TAD I (LBEGIN DCA LXR TAD (MOFILE-1 DCA I (TYR TAD (-5 /ZERO OPTION TABLE TOO JMS I (ZEROCD TAD LXR DCA SAVLXR JMS I (GETSPC JMP I SETLXR SUP, TEXT /%SUPERSEDING/ LOVMES, TEXT /NOT WAR?/ PAGE MUNG=.+LOCFUJ OVSUBR JMS I (SETLXR JMS TECPUT "E;"R JMS I (TECMOV JMS SETX "T;"E JMS TECLUK JMP I (CCER1 /MACRO FILE NOT FOUND. JMS TECPUT ALTMODE;"Y;"H;"X;"Y;"H;"K;"I CLA /END TECPUT. TAD DELIM SNA JMP IFIN TAD (-", SZA CLA JMP I (CDER2 G, JMS I (GLXR SNA JMP IFIN JMS TPUT JMP G IFIN, JMS TECPUT ALTMODE;"M;"Y / Call macro with pntr past JMP I MUNG-LOCFUJ / chars. CREATE=.+LOCFUJ OVSUBR TAD I (7617 /NIX ON INPUT. SNA TAD I (7605 /AND 2ND OUTPUT. SNA CLA TAD I (7600 /ANYTHING THERE? SNA JMP I (CDER2 /NO 1ST OUTPUT OR YES OTHERS. AND (17 DCA I (DVICE TAD (7601 DCA CHKPTR TAD I (DVICE JMS CHKSUP JMP I CREATE-LOCFUJ /PUT FOLLOWING CHARS INTO TECO BUFFER VIA TXR /CHAR LIST ENDS WITH JMS,JMP,IOT,OR OPR. TECPUT, 0 / TAD NAME1 / SNA CLA / JMP I (CDER2 TAD I TECPUT SPA CLA JMP I TECPUT TAD I TECPUT ISZ TECPUT TECP1, JMS TPUT /SETX JUMPS HERE. JMP TECPUT+1 TPUT, 0 AND (177 /TECO LIKES 7-BIT ISZ TYR DCA I TYR TAD TYR TAD (-7646 /CHECK FOR OVERFLOW OF CD AREA SZA CLA JMP I TPUT JMP I (CDER9 TYR, 0 /SET DEFAULT EXTENSION SETX, 0 TAD NAME4 SNA CLA TAD NAME1 AND I (PERDSW SNA CLA JMP I SETX TAD SETX DCA TECPUT /KLOOGE! TAD I SETX /1ST EXT CHAR JMS I (ROTL ISZ SETX TAD I SETX TAD (-300-1 DCA NAME4 TAD (". JMP TECP1 TECLUK, 0 /LOOK UP DEV:NAME JMS I (FUDG TAD I (DVICE JMS I (LOOK /LOOK UP FILE CHKPTR, NAME1 SKP ISZ TECLUK JMP I TECLUK CHKSUP, 0 /AC=POSSIBLE DNUM. JMS TECLUK JMP I CHKSUP /NOT FOUND (GOOD) JMS I (GETDCW SMA CLA JMP I CHKSUP /CAN'T SUP IF NOT FILE-STRUCT. JMS I (PRINT SUP JMP I CHKSUP PAGE RELOC