.TITLE CATCMD - CATCHALL ACTION ROUTINES .IDENT /1.0/ .ENABL LC ;+ ; ; Free software BY ; Project Software & Development, Inc. ; ; This software is furnished for free and may be used and copied as ; desired. This software or any other copies thereof may be provided or ; otherwise made available to any other person. No title to and ; ownership of the software is hereby transferred or allowed. ; ; The information in this software is subject to change without notice ; and should not be construed as a commitment by PROJECT SOFTWARE ; AND DEVELOPMENT, INC. ; ; PROJECT SOFTWARE assumes no responsibility for the use or reliability ; of this software on any equipment whatsoever. ; ; Project Software & Development, Inc. ; 14 Story St. ; Cambridge, Ma. 02138 ; 617-661-1444 ; ; ; Title: CATCMD.MAC ; Author: Robin Miller ; Date: September 22, 1982 ; ; Description: ; ; This module contains the various Catchall commands. ; ; ; Modification History: ; ;- .NLIST BEX .MCALL ALUN$S, DIR$, QIOW$, QIOW$S .SBTTL ATS - Issue "ACT /ALL" OR "ACT /TERM=TTnn:" Command ; ATS - List all active tasks (or only those for a terminal) ATSM1: .ASCIZ \ /ALL\ ATSM2: .ASCIZ \ /TERM=\ .EVEN ATS:: TSTB STATUS ; WAS A TERMINAL SPECIFIED ? BMI ATSTTY ; IF MI, YES MOV #ATSM1,R0 ; SET TO APPEND " /ALL" CALL MOVEC ; MOVE IT TO SPAWN BUFFER RETURN ATSTTY::MOV #ATSM2,R0 ; SET TO MOVE "/TERM=" CALL MOVEC ; MOVE IT TO SPAWN BUFFER CALL SKIP ; SKIP ANY LEADING SPACES MOV SCMD,R0 ; START OF COMMAND LINE CALL MOVEC ; AND MOVE IT TO SPAWN BUFFER CMPB -1(R1),#': ; DID USER SPECIFY COLON ? BEQ 10$ ; IF EQ, YES MOVB #':,(R1)+ ; OTHERWISE PUT COLON IN 10$: RETURN .SBTTL CLRSCR -- CLEAR TERMINAL SCREEN ; CLRSCR - Clear the terminal screen. CLRVT1: .ASCII %[1;1H%%[J% ; VT100 ERASE SCREEN VT1SIZ = .-CLRVT1 CLRVT5: .ASCII %H%%J% ; VT52 ERASE SCREEN VT5SIZ = .-CLRVT5 CLRTEK: .BYTE , ; TEKTRONIX CLEAR SCREEN TEKSIZ = .-CLRTEK CLRPAG: .BYTE ; LA120/LA38 TOP OF PAGE PAGSIZ = .-CLRPAG .EVEN CLRDPB: QIOW$ IO.WAL,TILUN,TIEFN,,IOSB,, CLRSCR::MOVB TTYPE,R0 ; GET TERMINAL TYPE MOV #CLRDPB+Q.IOPL,R1 ; ADDRESS FOR BUFFER MOV #CLRDPB+Q.IOPL+2,R2 ; ADDRESS FOR BYTE COUNT BIT #S.VFAM,STATUS ; VT100 FAMILY TERMINAL ? BNE 100$ ; IF NE, YES MOV #CLRVT5,(R1) ; SET VT52 CLEAR SCREEN MOV #VT5SIZ,(R2) ; AND THE SIZE CMPB #T.VT52,R0 ; IS THIS A VT52 ? BEQ 100$ ; IF EQ, YES MOV #CLRTEK,(R1) ; SET VT52 CLEAR SCREEN MOV #TEKSIZ,(R2) ; AND THE SIZE CMPB #T.LA36,R0 ; IS THIS AN LA36 ? BEQ 50$ ; IF EQ, YES (PRESUME TEKTRONIX) CMPB #T.UNK0,R0 ; IS TERMINAL UNKNOWN ? BEQ 50$ ; IF EQ, YES (PRESUME TEKTRONIX) MOV #CLRPAG,(R1) ; SET LA120/LA38 CLEAR PAGE MOV #PAGSIZ,(R2) ; AND THE SIZE CMPB #T.L120,R0 ; IS THIS AN LA120 ? BEQ 100$ ; IF EQ, YES CMPB #T.L180,R0 ; IS THIS AN LA180 ? BEQ 100$ ; IF EQ, YES BR 110$ ; ELSE IGNORE... 50$: DIR$ #CLRDPB ; CLEAR TEKTRONIX SCREEN DIR$ #MRKTIM ; MARK TIME FOR 2 SECONDS BCS 110$ ; IF CS, DON'T HANG DIR$ #MRKWAT ; WAIT FOR MARK TIME BR 110$ ; BR TO COMMON EXIT 100$: DIR$ #CLRDPB ; CLEAR CRT SCREEN 110$: JMP EXISUC ; EXIT WITH SUCCESS .SBTTL FRANK - Special Frank Nader Command ; FRANK - Do write breakthrough to specified terminal. TTYNAM: .WORD 0 ; Store terminal name here. FRANK:: TSTB STATUS ; Did we get a terminal ? BPL 20$ ; If PL, no CALL SKIP ; Skip any leading spaces MOV SCMD,R0 ; Copy the command address MOVB (R0)+,TTYNAM ; Save the first character BEQ 20$ ; If EQ, end of line MOVB (R0)+,TTYNAM+1 ; Save the second character BEQ 20$ ; If EQ, end of line MOVB (R0)+,R1 ; Copy the terminal number BEQ 20$ ; If EQ, end of line BIC #^C7,R1 ; Convert it to binary CMPB (R0),#': ; End of terminal number ? BEQ 10$ ; If EQ, yes ASH #3,R1 ; Shift to next position BICB #^C7,(R0) ; Isolate the unit number BISB (R0)+,R1 ; Formulate the unit number 10$: CMPB (R0)+,#': ; A colon should be next BNE 20$ ; If NE, syntax error ; Assign a LUN to the specified terminal. ALUN$S #TOLUN,TTYNAM,R1 ; Finally assign the LUN BCS 20$ ; If CS, directive error MOV R0,R1 ; Copy the message address MOV #40,R2 ; Presume single spacing TST STATUS ; Is debugging enabled ? BPL 15$ ; If PL, no MOVB #'+,R2 ; Yes, use overprint VFC 15$: TSTB (R1)+ ; Find the message end BNE 15$ ; If NE, more to go DEC R1 ; Point to the NULL SUB R0,R1 ; Calulate the byte count QIOW$S #IO.WBT,#TOLUN,#TOEFN,,#IOSB,, 20$: JMP EXISUC ; Now exit ... .SBTTL FREE - Show Free Blocks On a Disk ; FREE - Show free blocks on system disk (or specified disk). FREM2: .ASCIZ \/FR\ .EVEN FREE:: TSTB STATUS ; WAS A DEVICE SPECIFIED ? BPL 10$ ; IF PL, NO CMPB -1(R1),#COLON ; DID USER SPECIFY COLON ? BEQ 10$ ; IF EQ, YES MOVB #COLON,(R1)+ ; OTHERWISE PUT IT IN 10$: MOV #FREM2,R0 ; POINT TO SECOND HALF OF MESSAGE CALL MOVEC ; MOVE LAST HALF RETURN .SBTTL PURGE - Additional Processing of DCL Purge ; PURGE - DCL Purge - append *.* if no file(s) specified. PURM1: .ASCIZ " *.*" .EVEN PURGE:: TSTB STATUS ; WERE FILE(S) SPECIFIED ? BMI 10$ ; IF MI, YES MOV #PURM1,R0 ; NOPE, SET TO MOVE "*.*" CALL MOVEC ; APPEND IT TO THE SPAWN BUFFER 10$: RETURN .SBTTL TRUNCATE - Truncate File(s) to Logical End of File ; TRUNCATE - Truncate file(s) to logical end of file TRUM2: .ASCIZ "/TR" TRUM3: .ASCIZ " *.*" .EVEN TRUNCATE:: TSTB STATUS ; WAS A FILE(S) SPECIFIED ? BMI 10$ ; IF MI, YES MOV #TRUM3,R0 ; ELSE, SET TO MOVE "*.*" CALL MOVEC ; APPEND IT TO THE SPAWN BUFFER 10$: CMPB -1(R1),#COLON ; ONLY DEVICE SPECIFIED ? BEQ 10$ ; IF EQ, YES (ADD "*.*") MOV #TRUM2,R0 ; SET TO MOVE "/TR" CALL MOVEC ; AND MOVE IT RETURN .SBTTL NARROW - Set The Terminal Width Narrow ; NARROW - Put VT100 in 80 column mode. .ENABL LSB NARROW::BIT #S.VFAM,STATUS ; VT100 FAMILY TERMINAL ? BEQ 10$ ; IF EQ, NO VTWRT NARSCR,<[?3l> ; PUT VT100 IN 80 COLUMN MODE 10$: RETURN .DSABL LSB .SBTTL WIDE - Set The Terminal Width Wide ; WIDE - Put the VT100 in 132 column mode. .ENABL LSB WIDE:: BIT #S.VFAM,STATUS ; VT100 FAMILY TERMINAL ? BEQ 10$ ; IF EQ, NO VTWRT WIDSCR,<[?3h> ; PUT VT100 IN 132 COLUMN MODE 10$: RETURN .DSABL LSB .SBTTL VT100 - Put The VT100 in VT100 (ANSI) Mode ; VT100 - Put VT100 in VT100 (ANSI) mode VT100:: VTWRT ANSIM,^/ ; SET VT52 MODE RETURN .END