;XMAIN.MAC;44 16-DEC-75 16:42:55 EDIT BY PLUMMER ; 1.54 ; ADD DOBE IN PRINTER CHECKER TO ENSURE MSG GETS PRINTED ;XMAIN.MAC;41 24-SEP-75 11:59:50 EDIT BY PLUMMER ; SET DEFERRED INTERRUPTS AT CMDIN4 ;XMAIN.MAC;40 18-SEP-75 18:31:14 EDIT BY PLUMMER ;XMAIN.MAC;39 18-SEP-75 14:41:07 EDIT BY PLUMMER ; CHANGE STRATEGY FOR DOWNTIME WARNING CHECKS ;XMAIN.MAC;37 17-SEP-75 13:52:56 EDIT BY PLUMMER ; []'S ARROUND EXCEEDED MSG ; NET ON/OFF NO LONGER REQUIRES CONFIRMATION ;XMAIN.MAC;34 16-SEP-75 17:05:31 EDIT BY PLUMMER ; PARC CHANGES... UUO TABLE ;XMAIN.MAC;32 24-JUL-75 15:42:11 EDIT BY PLUMMER ; ADD OMRON TERMINAL TYPE ;XMAIN.MAC;31 14-JUL-75 14:11:06 EDIT BY PLUMMER ; USE JOBNM2 TABLE FOR SYSTAT ;XMAIN.MAC;30 26-MAR-75 16:56:06 EDIT BY PLUMMER ;XMAIN.MAC;29 17-MAR-75 11:31:34 EDIT BY PLUMMER ; DIRECTORY DISPATCH BECOMES ..DIRE TO AVOID CONFILICT WITH M50 .DIREC ;XMAIN.MAC;28 17-MAR-75 11:06:01 EDIT BY PLUMMER ;XMAIN.MAC;27 17-MAR-75 10:34:18 EDIT BY PLUMMER ; RESET BECOMES $RESET FOR MACRO 50 ; RFORK BECOMES LFORK FOR MACRO 50 ;XMAIN.MAC;26 5-MAR-75 14:04:31 EDIT BY PLUMMER ; DO NOT ENABLE CHANNEL 10 WITH NO HANDLER FOR IT!! ;XMAIN.MAC;25 4-MAR-75 17:30:04 EDIT BY PLUMMER ;XMAIN.MAC;24 4-MAR-75 16:31:29 EDIT BY PLUMMER ;^ELIMIT CAPABILITIES ;XMAIN.MAC;23 4-MAR-75 16:16:10 EDIT BY PLUMMER ;XMAIN.MAC;21 14-FEB-75 15:34:14 EDIT BY PLUMMER ; ADD TERMINAL TYPE "LINEPROCESSOR" FOR SRI-ARC ;XMAIN.MAC;20 5-FEB-75 15:01:58 EDIT BY PLUMMER ; NEW SETNM LOGIC FOR CREATED JOBS ;XMAIN.MAC;19 31-JAN-75 15:30:56 EDIT BY PLUMMER ;XMAIN.MAC;18 30-JAN-75 18:46:00 EDIT BY PLUMMER ;XMAIN.MAC;17 30-JAN-75 18:19:19 EDIT BY PLUMMER ;XMAIN.MAC;16 30-JAN-75 17:59:12 EDIT BY PLUMMER ; REMOVE .VERSI TO X1CMD ;XMAIN.MAC;15 30-JAN-75 17:49:01 EDIT BY PLUMMER ; CREATED JOB ENTRY ;XMAIN.MAC;14 15-JAN-75 10:25:05 EDIT BY PLUMMER ; MAKE USESTAT CHECK PIE.P ;XMAIN.MAC;13 2-JAN-75 12:23:06 EDIT BY PLUMMER ;1.53 ;XMAIN.MAC;12 31-DEC-74 13:55:28 EDIT BY PLUMMER ; DOWNTIME WATCHER (PARC) ; CALL CRIF IN WATCH MESSAGES (PARC) ; CATCH ERRORS IN WATCHERS (PARC) ;XMAIN.MAC;9 18-DEC-74 13:07:03 EDIT BY PLUMMER ; MORE PRIVILEDGED COMMANDS ;XMAIN.MAC;7 18-DEC-74 10:26:26 EDIT BY PLUMMER ; "USESTAT" INCLUDES ACCOUNT, SLICE ;XMAIN.MAC;6 16-DEC-74 17:03:48 EDIT BY PLUMMER ; DISPATCH FOR NEW PRIVILEDGED COMMANDS (OPRFNS) ;XMAIN.MAC;2 2-DEC-74 10:16:01 EDIT BY PLUMMER ; 1.52 ;XMAIN.MAC;68 25-NOV-74 12:28:36 EDIT BY PLUMMER ; MAXJFN PARAMTER IN FILSTAT ;XMAIN.MAC;66 24-NOV-74 14:01:56 EDIT BY PLUMMER ; CHANGE MESSAGE FOR CHN 20 INTERRUPT ;XMAIN.MAC;64 22-NOV-74 22:08:26 EDIT BY PLUMMER ; "NUMBER" COMMAND (CASE) ;XMAIN.MAC;63 22-NOV-74 11:44:40 EDIT BY PLUMMER ; CONVERT TO $SYSGT ;XMAIN.MAC;60 29-OCT-74 12:32:01 EDIT BY PLUMMER ; CARRIAGE CONTROL IN CHKDAL ;XMAIN.MAC;59 18-SEP-74 15:45:15 EDIT BY PLUMMER ;XMAIN.MAC;58 9-SEP-74 10:55:20 EDIT BY PLUMMER ; FIX CHKDAL TO ALWAYS CALL RLJFNS ;XMAIN.MAC;57 6-SEP-74 10:20:53 EDIT BY PLUMMER ; CHANGE ODTIM FORMAT IN IMPSTAT, ADD EOL ;XMAIN.MAC;56 31-JUL-74 16:33:58 EDIT BY PLUMMER ;XMAIN.MAC;54 26-JUL-74 10:47:59 EDIT BY PLUMMER ; NEW "IMPSTAT" ; "WHYHLT" FOR "HALT" ;XMAIN.MAC;2 19-JUN-74 12:18:42 EDIT BY PLUMMER ; "ACCESS" COMMAND ;XMAIN.MAC;47 18-JUN-74 14:13:07 EDIT BY PLUMMER ; PERIODIC CHECK OF PRINTER DIRECTORY ;XMAIN.MAC;43 16-JUN-74 14:32:20 EDIT BY PLUMMER ; "PERPETUAL" ; ADD "CONMAN" BIT TO "MOUNT" ; PERIODIC MAIL CHECK ; "MAIL" DISPATCH ; FIX "DSKSTAT" TO RELEASE JFN ; USE %V INSTEAD OF %B IN USESTAT (PARC) ; TERMINAL TYPE VTS (PARC) ; REMOVE $IMPSTA AND CALL FROM "SYSTAT" ; ADD TEKTRONIX-4023 AND 4023 TERMINAL TYPES ;XMAIN.MAC;35 3-APR-74 20:16:15 EDIT BY PLUMMER ; REPAIR BAD AC AT CIN3C+3 ;XMAIN.MAC;34 21-MAR-74 12:20:24 EDIT BY PLUMMER ; ALLOW FOR RPACS TO CLOBBER AC3 IN MEMSTAT ;XMAIN.MAC;33 19-MAR-74 16:18:24 EDIT BY PLUMMER ; ADD AUTO SEVEC AT FIRST STARTUP ;XMAIN.MAC;31 19-MAR-74 13:06:34 EDIT BY PLUMMER ; NEW "PISTAT" ;XMAIN.MAC;30 19-MAR-74 12:46:50 EDIT BY PLUMMER ; MAKE "MEMSTAT" INDICATE PAGES LOCKED BY USER ;XMAIN.MAC;29 19-MAR-74 11:55:43 EDIT BY PLUMMER ; ALL TERMINALS CHANGED TO WIDTH 72 FOR COMPATIBILITY WITH DEFAULT ; WIDTH OF LPT:. THIS MAKES "TYPE" SHOW THE SAME THING AS ; "LIST" WILL PRINT. ; CHANGE CHN 20 INTERRUPT MSG TO "DISK SPACE EXCEEDED" ; NEW VERSION SCHEME. VERSN AND PATVER GET SET FROM WHAT'S ON ; ON AFTER FRESH ASSEMBLY. ; "VERSION" CHANGED FOR ABOVE. ;XMAIN.MAC;28 13-MAR-74 13:43:20 EDIT BY PLUMMER ; SAVE PRIMARY JFNS AT STARTUP FOR ^C, ERRORS ETC ;XMAIN.MAC;27 4-MAR-74 17:36:33 EDIT BY PLUMMER ; "DIS" MEANS "DISABLE" INSPITE OF "DISCUSE" ;XMAIN.MAC;25 25-FEB-74 12:55:49 EDIT BY PLUMMER ; "FILSTAT" PRINTS JFNS UPTO 155 ;XMAIN.MAC;24 11-FEB-74 14:52:08 EDIT BY PLUMMER ; SRI TAGS, ETC ; DISCUSE -- LAST HALF OF DSKSTAT ; IMPSTAT ;XMAIN.MAC;18 24-JAN-74 11:02:02 EDIT BY PLUMMER ; FIX LOWER CASE INPUT IS ... TYPE OUT IN TRMSTAT ; ADD LGNCHK TO SYSTAT ;XMAIN.MAC;17 24-JAN-74 10:33:29 EDIT BY PLUMMER ; ADD LOGIN CHECK AT STARTUP ; MAKE DATA100 TERMINAL 79 WIDE ;XMAIN.MAC;16 14-NOV-73 11:39:13 EDIT BY PLUMMER ; SWITCH TO DEFERRED ^C AS SOON AS IT LOOKS LIKE A PROGRAM ; MIGHT RUN ; "TRMSTAT" FIXED TO UPDATE PTTYMD FROM RFMOD ;XMAIN.MAC;14 9-NOV-73 15:57:33 EDIT BY PLUMMER ; "SYSTAT" PRINTS DETACHED, NON JOBS FIRST ;XMAIN.MAC;12 30-OCT-73 17:35:48 EDIT BY PLUMMER ; REMOVE ALL BELPSI AND ^G INTERRUPT STUFF ; DEFINE AND INTERN TIMPSC FOR USE BY NEW ^T ROUTINE ;XMAIN.MAC;11 29-OCT-73 21:02:12 EDIT BY PLUMMER ; IGNORE FAIL RETURN FROM GACTF IN AUTOSTART CODE ;XMAIN.MAC;10 29-OCT-73 16:45:08 EDIT BY PLUMMER ; CACCT DOESN'T HALTF IF NO SKIP (FOR SRI-ARC UNLOGGED-IN AUTO JOBS) ; AUTO JOBS DON'T START THE AUTOLOGOUT TIMER FORK (SRI-ARC) ;XMAIN.MAC;8 25-OCT-73 14:21:18 EDIT BY PLUMMER ; CHANGE INFOTRON TO 23 LINES ;XMAIN.MAC;7 18-OCT-73 11:11:24 EDIT BY PLUMMER ; FIX FILSTAT TO NOT BLOW UP ON RESTRICED JFNS ; FIX TRMSTAT DUPLEXITY TYPEOUT ;XMAIN.MAC;5 17-OCT-73 17:45:23 EDIT BY PLUMMER ; FLUSH DOUBLED WORD IN "TRMSTAT" TYPEOUT ;XMAIN.MAC;4 17-OCT-73 10:54:48 EDIT BY PLUMMER ; CHANGE STTYP AT .TTY3+1 TO USE COJFN ;XMAIN.MAC;3 9-OCT-73 11:14:40 EDIT BY PLUMMER ; LINKAGE ETC FOR BDDT ;XMAIN.MAC;38 1-OCT-73 19:51:26 EDIT BY PLUMMER ; 1.51 ; "TRMSTAT" COMMAND ; TERMINAL TYPES INFOTON AND DATA100 ; TERMINAL TYPE BEEHIVE ; ADD "LENGTH" COMMAND ; ADD TERMINAL TYPES SCOPE, BENDIX, AND LOGIPORT ; ADD ^G INTERRUPT STUFF ; ADD "TERMINAL TI733" ; CHANGE ' FROM PUNCTUATION TO ALPHA CHR TO ALLOW USER NAMES LIKE ; O'SULLIVAN. (USING PUNCF IN TTYNUM WOULD PROHIBIT ? FOR HELP) ; SWITCH TO .JBXXX NOTATION FOR 10/50 JOB DATA AREA ; SAVE .JBUSY AS WELL AS .JBSYM ON STARTUP ; SYSTAT PRINTS DETACHED JOBS LAST ; MOVE "NO" ROUTINE TO X1CMD.MAC ; DELETE ^Y AS EQUIVALENT TO ^X ; ACCOUNT VALIDATION CHANGES ; "NO INDICATE (FORMFEED)" IMPLEMENTED ; SET ACCOUNT FROM FILE BEING RUN FOR AUTOSTART JOBS (NEW) ; INSTALL "ADVIZ" (NEW) ; INTERN SIXPRT FOR USE IN TTYNUM (XSUBRS) ; READY FOR NEW GTDAL ; REMOVE BKJFN FROM CIN4 ; REMOVE COMOK FLAG FROM INTERROGATE ; MEMSTAT AND SYSTAT KNOW ABOUT SINGULAR FORMS OF "PAGES" AND "JOBS" ; FIX BUG IN SETNM LOGIC AT CIN42 ; ERROR MESSAGE FOR CFORK FAILURE ; REQUIRE CONFIRMATION FOR PROGRAMS INVOKED USING ALTMODE ; ADD INTON & INTOFF IN EPHEMERON CONTROL ; ALLOW AUTOLOGOUT FORK TO CROSS PAGE BOUNDARY ; MAKE LOAD AV PRINTER A SUBR. CALLED FROM RUNSTAT AND ^T, NOT IN FSTAT ; ADD TERMINAL TYPE AJ, DELETE TYPES 0, 1, 2, 3 ; FLUSH MLON PSEUDO OP ; 1.50 ; SWITCHED TO DECIMAL VERSION NUMBERS, CONSISTENT WITH FILE SYS ; ALLOW FOR FORTH COMING FORK STATUS TYPE 6 (BPT) ; REINSTALL TYPE 5 TYPE-OUT, JUST IN CASE IT EVER GETS IMPLEMENTED ; REMOVE STPAR AT STARTUP -- NEVER SHOULD HAVE BEEN THERE! ; REPAIR CCCOCS -- LAST FEW LINES OF FILE GOT DROPPED??? ; TTY MODE SETTING REDONE -- ALLOW AUTOSTARTUP TO BE DETACHED ; MAKE DISTRIBUTED STUFF CONDITIONAL ; ADD SETTING OF PRI JFN ON AUTO STARTED FORK ; "ERRSTAT" AVAILABLE TO MAINT. TYPES ; ^T AND "RUNSTAT" PRINT LOAD AV ; CHKDAL: NO MESSAGE IF OVER BY 0 PAGES ; SAVE SUBSYS NAME OF SUPERIOR ; CLEANUP XWD'S ; 1.49 ; FSTAT CLEANED UP ; "IDDT" AND "NO IDDT" ; NEW "STATISTICS" COMMAND ; USE TERM TYPE 7 FOR NVT ; STARTING, REENTERING, OR CONTINUING AFTER A "QUIT" CAUSES THE EXEC ; TO PICKUP A NEW TTY STATE. ; 1.48 ; "DSKSTAT" PRINTS NUMBER OF PAGES LEFT/USED ON DSK: ; HALT CHANGED ; SYSTAT INCLUDES SHUTDOWN/UPTIME WARNING ; COMMAND LIST INCLUDES "SAVE FILE NAME" ; 1.47 ; INCLUDE AUTOSTARTUP JOBS, ARCHIVE STUFF ; 1.46 ; DSKSTAT PRINTS ALLOCATED, USED, AND DELETED PAGES ; FILSTAT PRINTS POINTER IN DECIMAL (MATCH QFD PRINTOUT) ; DEFAULT RUN COMMAND ; GENERAL CLEANUP ; TERMINAL TYPE COMMAND PRETTIED UP ; BREAK ALLOWED IF NOT LOGGED IN ; LINK ALLOWED IF NOT LOGGED IN ; PRINT FILE PTR IN "FILSTAT" ; PDP-10 TENEX EXECUTIVE MAIN ASSEMBLY FIRST FILE ;LOADING: /S ; XPRIV.REL (PRIVATE STORAGE, MUST BE FIRST) ; XEC.REL (THIS ASSEMBLY) ; XSUBRS.REL (SUBROUTINES) ;THIS FILE CONTAINS: INITIALIZATION ; MAIN LOOP TO READ 1ST WORD OF COMMAND & DISPATCH ; COMMAND TABLES, OTHER TABLES ; ROUTINES FOR STATUS COMMANDS AND TERMINAL ; CHARACTERISTICS COMMANDS TITLE EXEC SEARCH STENEX,XDEF .DIRECTIVE XSRCVN %XM %XM==%XM ;INTERNS -- LABELS USED IN SEPARATELY ASSEMBLED SUBROUTINES INTERN CUUO ;WHERE UUOS DISPATCH TO: RESET BY ^C INTERN ERRET ;WHERE ERROR UUOS RETURN TO DO INPUT NEXT CMND INTERN FSTAT ;SUBR TO PRINT FORK STATUS FOR ^T INTERN LAPRNT ;SUBR TO PRINT LOAD AV INTERN SIXPRT ;SIXBIT PRINTER INTERN TIMPMN,TIMPSC ;GTAD + MIN, GTAD + SEC ;INTERNS -- THINGS WE WANT GLOBALLY DEFINED IN DDT INTERN EXEC ;ENTRY POINT, ENTRY VECTOR LOCATION INTERN REE ;RE-ENTRY POINT INTERN PAT,PATS ;PATCH AREA INTERN CMDIN4,.QUIT ;FOR RETURNS ;EXTERNS ; SEPARATELY ASSEMBLED SUBROUTINES EXTERN IDFORK ;IDDT FORK HANDLE EXTERN BDFORK ;BDDT FORK HANDLE EXTERN DBFORK ;CONTAINS EITHER BDFORK OR IDFORK EXTERN UFORK ;FORK THAT HAS USER UNDER IDDT EXTERN DATEIN ;DATE AND TIME INPUT ROUTINE EXTERN READY,READY2 ;PRINT 1 OR 2 READY CHARS (@ OR !) EXTERN %KEYW ;SERVICE ROUTINE FOR KEYWORD LOOKUP UUO (KEYWD) EXTERN PRVCK ;SUBR TO CHECK USER'S PRIVILEGES VS BITS IN B EXTERN %NOI ;SERV ROUTINE FOR NOISE WORD UUO ("NOISE" MACRO) EXTERN %SBCOM ;UUO TO INPUT & DISPATCH ON SUBCOMMANDS EXTERN %INHEL ;UUO TO INPUT FIELD WITH HELP ("INHELP" MACRO) EXTERN CSTR,MORE ;INPUT AND APPEND TO FIELD SUBROUTINES EXTERN PASCOM ;PASS COMMENT EXTERN %ALLOW ;CHECK FIELD TERMINATOR (ALLOW UUO) EXTERN CONF ;TERMINATE AND CONFIRM COMMAND EXTERN TCONF ;TRANSPARENT CONFIRM, USABLE DURING COMMANDS EXTERN SPRTR ;ANALYZE SEPARATOR/TERMINATOR AFTER AN ARG EXTERN CCHRI ;INPUT A CHARACTER OF COMMAND EXTERN UBP ;REMOVE LAST CHARACTER FROM COMMAND STRING EXTERN %TYPE,CTYPE,%$TYPE,$CTYPE,%ALTYP ;TYPE MESSAGE SUBRS & UUOS EXTERN CINFN,COUTFN,SPECFN,CPFN ;GET IN, OUT, SPECIAL, PROG FILE NAMES EXTERN CEDFN ;COLLECT EDIT FILE NAME EXTERN EDFILE EXTERN FRAME EXTERN .INFG,INFG,$INFG,DIRARG ;INPUT FILE GROUP DESCRIPTORS EXTERN TYPIF,GNFIL,FRSTF,NEXTF ;ROUTINES TO STEP THRU FILES IN GROUP EXTERN INTRM ;READ TERMINATING CHARACTER AFTER IDTIM, ETC. EXTERN DEVN ;COLLECT DEVICE NAME EXTERN DIRNAM ;COLLECT DIRECTORY NAME EXTERN DEFDIR ;COLLECT OR DEFAULT DIRECTORY NAME EXTERN TTYNUM ;GET TTY NUMBER FROM USERNAME OR OCTAL NUMBER EXTERN FPIN,DECIN,OCTAL,TOCT,OCTCOM ;NUMBER INPUT AND OUTPUT SUBRS EXTERN BUFFF,BUFFS ;BUFFER LAST FIELD SUITABLY FOR USE AS JSYS ARG EXTERN ALLBK,NALNBK,DOECEO,NOECHO,DOECHO,LTTYMD,RTTYMD ;TTY MODES ETC EXTERN %PRINT ;PRINT CHARACTER FROM EFFECTIVE ADDRESS EXTERN CRIF ;TYPE EOL IF NOT AT LEFT MARGIN EXTERN CCHRO ;OUTPUT CHARACTER (OF COMMAND IF "STCF" ON) EXTERN MAPPF ;MAP PAGE OF FORK SUBR EXTERN LOADF ;LOAD WORD FROM FORK SUBR EXTERN STOREF ;STORE SINGLE WORD INTO FORK EXTERN %GTB ;CONVENIENT GETAB CALL UUO EXTERN DING,CERR,NIYE,NIM,SCREWUP,JERR,JERRC ;VARIOUS ERROR CONDITIONS EXTERN %TRAP ;ERROR PSI MESSAGE UUO ROUTINE EXTERN AUTOLO ;ROUTINE TO DO AUTOLOGOUT EXTERN %ERR,%$ERR,%.$ERR ;GENERAL ERROR UUOS (MACROS "ERROR" ETC) EXTERN RERET ;NORMAL AFTER-ERROR ROUTINE FOR CERET TO PT TO EXTERN %ETYPE ;TYPE MESSAGE, EXPANDING %-CODES EXTERN RLJFNS ;CLOSE AND RELEASE JFNS USED BY CURRENT COMMAND EXTERN FLOAT ;FLOAT INTEGER IN A EXTERN $SYSGT ;FAST SYSGT EXTERN UNMAP ;FLUSHES BUFFER PAGES ; CELLS AND BUFFERS IN PRIVATE WRITEABLE STORAGE AREA EXTERN DOWNTM,UPTIME,WHYHLT EXTERN AUTFLG,APJFN EXTERN CJFLGS,CJFKSA,CJINIT ;CREATED JOB VARIABLES EXTERN CSZ1,CSZ2,CSZ4 EXTERN .P EXTERN CIJFN,COJFN,JBUFP,.JBUFP,JBUF,CJFN1,CJFN2 EXTERN INIFH1,INIFH2 EXTERN EOFDSP,ILIDSP EXTERN CRJFNI,CRJFNO,CREDIF,CREDOF,PRIMRY EXTERN CINITF,DTSF,PRVENF,PROPSF,MESMSF,DOT,CUSRNO,MSGTIM,PRNTIM EXTERN FORK,LFORK,SUBSYS,DDTFLG,NPAGE,EFORK EXTERN STRTIM,TTYACF,ALOFH EXTERN SUPSUB,INETTY,INPTTY,PTTYMD,ETTYMD EXTERN CERET EXTERN CTUUO EXTERN CSTRR,CSBUFP EXTERN FRSTFR EXTERN ERCOD,ERPC EXTERN DEVICE,DIRNO,OLDDIR,OUTDSG,INDSG EXTERN LPNAME,LPEXT,LPFDB,LFPOS EXTERN GHEAD,HEAD,HEDLNO,SPCG,WIDTH,LENGTH,L35,L50 EXTERN PAGENO,PAGEN1,BESPTR,BESCOR,BESLNO,PPRINT EXTERN SPCBTS EXTERN PD,CBUF,CBUFE,CWBUF,CJFNBK,CSBUF EXTERN PPATS,PPAT,PAGEN EXTERN DWNMSF EXTERN LIMITC ;FLAG SAYING CAPABILITES ARE LIMITED EXTERN MODES ; 10/50 JOB DATA AREA INTERN .JBSA,.JBOPC,.JBREN,.JBSYM,.JBUSY .JBSYM=116 .JBUSY=117 .JBSA=120 .JBREN=124 .JBOPC=130 ;TENEX ENTRY VECTOR ;N.B. "EXEC" MUST BE THE FIRST SYMBOL IN RELOC SECTION EXEC: JRST REE ;START ENTRY JRST REE ;REENTER ENTRY JRST AUTOST ;AUTO STARTUP ENTRY JRST CREATD ;CREATED JOB STARTUP EVECL==.-EXEC ;POINTERS TO DEFINED AND UNDEFINED SYMBOL TABLES ;SAVED HERE FROM .JBSYM AND .JBSYM WHEN THOSE PAGES ARE ; REMOVED FOR SHARABLE SUBSYSTEM ..JBSYM: 0 ..JBUSY: 0 ;EXEC VERSION, PRINTED ON STARTUP AND BY "VERSION" COMMAND ; NOTE THESE GET SETUP AUTOMATICALLY FROM THE EXTENSION OF ; EXEC.SAV;0 WHEN STARTED THE FIRST TIME AFTER A ; REASSEMBLY. (NOTE: THE INPUT COMMAND FILE DOES THIS TO MOVE ; SYMBOL POINTERS ALREADY). VERSN: ^D154 ;MAJOR AND MINOR VERSIONS PATVER: 0 ;# TIMES PATCHED ;PATCH AREA PATS: PAT: BLOCK 200 ;UUO DISPATCH TABLE ;GENERATED BY EXPANDING "UUOS" LIST DEFINED IN XDEF CUUOT: EXPAND(UUOS,) ;UUO DISPATCHER CUUO: MOVEM A,CTUUO HLRZ A,40 LSH A,-^D9 HRRZ A,CUUOT-1(A) ;FIRST UUO IN TABLE IS 1 EXCH A,CTUUO JRST @CTUUO ;CREATED JOB ENTRY CREATD: MOVEM A,CJFLGS ;STORE FLAG WORD MOVEM B,CJFKSA ;EVEC,,FORK SETOM CJINIT ;SAY WE ARE INITIALIZING A CREATED JOB JRST EXEC0 ;******WARNING: ONCE THIS CREATED JOB STUFF WORKS, AUTOJOB ENTRY ;****** WILL BE REMOVED ************ ;AUTOSTARTUP ENTRY AUTOST: MOVEM A,APJFN ;PRIMARY IO FOR AUTOSTARTED FORK MOVEM B,AUTFLG ;USE JFN AS FLAG FOR AUTOSTARTUP JOB AUTO0: MOVE 1,B ;JFN OF FILE TO RUN MOVEI 2,CSBUF ;STRING BUFFER AREA GACTF JRST EXEC0 ;FILE BAD? JFCL ;STRING ACCOUNT MOVE 1,2 ;NUMERIC ACCOUNT AUTO1: CACCT JFCL ;AUTO JOB MAY NOT BE LOGGED IN JRST EXEC0 ;REENTER ENTRY REE: SKIPE CINITF ;IS EXEC INITIALIZED? JRST EXEC0B ;EXEC COMMAND INTERPRETER IS INITIALLY STARTED HERE EXEC0: ;ZERO WRITEABLE AREA NOT INCLUDING AUTO OR CREATED JOB STARTUP VARIABLES SETZM CSZ1 MOVE A,[CSZ1,,CSZ1+1] BLT A,CSZ4 ;SET UP 41 FOR UUO'S, P=17 FOR PUSHDOWN POINTER MOVE A,[CALL CUUO] MOVEM A,41 MOVE P,[IOWD PDL,PD] ;CLEAR FLAGS SETZ Z, ;POINT THE EXEC AT A FORK, IF ANY HLRZ A,CJFKSA ;IN CASE THIS IS A CREATED JOB MOVSI B,(1B1!1B2) ;"FORK EXISTS" PASSED FROM CRJOB SKIPE CJINIT ;IF WE ARE NOT STARTING A CREATED JOB TDNN B,CJFLGS ;OR NO FORK SUPPLIED SETO A, ;SAY NO INFERIOR FORK MOVEM A,FORK ;RANDOM THINGS SETOM LFORK ;SAY NO FORK HAS BEEN RUN SETOM IDFORK ;SAY NO IDDT FORK SETOM BDFORK ;SAY NO BDDT FORK SETOM UFORK ;SAY NO FORK UNDER IDDT, BDDT SETOM EFORK ;SAY NO EPHEMERAL FORK SETOM NPAGE ;SAY NO PAGE OF INFERIOR IS MAPPED SETOM PRNTIM ;DO "PRINTER WATCH OFF" (DEFAULT) ;ON FIRST STARTUP, MOVE SYMBOL TABLE POINTER INTO ONE OF THE CODE PAGES, ; SO IT WILL BE KEPT THRU SHARABLE SAVES. MOVE C,.JBUSY ;10/50 UDEFINED POINTER SKIPE D,.JBSYM ;GET 10/50 STYLE PTR, SKIP IF NONE. SKIPE ..JBSYM ;NO SKIP IF ALREADY MOVED JRST EXEC0B ;NO PTR OR ALREADY MOVED MOVE A,[400000,,<..JBSYM/1000>] RPACS ;READ PAGE ACCESSIBILITY TLNN B,(1B3!1B9) ;..JBSYM WRITE-PROTECTED? JRST EXEC0B ;YES MOVEM D,..JBSYM ;NO, STORE SYMBOL TABLE POINTER. MOVEM C,..JBUSY ;AND UNDEFINED POINTER ;NOW SETUP THE VERSION NUMBERS EXEC05: MOVSI 1,(1B2!1B17) ;OLD, SHORT HRROI 2,[ASCIZ /EXEC.SAV/] GTJFN JRST EXEC0B ;CANNOT DO IT, DOESN'T MATTER. MOVE 2,[1,,FDBVER] MOVEI 3,3 GTFDB HLRZS 3 ;GET VERSION NUMBER IDIVI 3,^D100 ;SPLIT OFF THE PATCH NUMBER ADDI 4,1 CAMN 3,VERSN ;NEW VERSION OF OLD PROGRAM? MOVEM 4,PATVER ;YES, SAVE INCREMENTED PATVER RLJFN JFCL ;NOW SET THE ENTRY VECTOR EXEC06: MOVEI 1,400000 ;THE EXEC FORK MOVE 2,[EVECL,,EXEC] SEVEC ;IN CASE NEW "LOADER" NOT USED EXEC07: MOVE 1,VERSN IMULI 1,^D100 ADD 1,PATVER HRLI 1,(1B0!1B17) ;FOR OUTPUT, SHORT HRROI 2,[ASCIZ /EXEC.SAV/] ;IN CONNECTED DIRECTORY GTJFN JRST EXEC0B HRLI 1,400000 ;FORM FORK,,JFN MOVEI 2,EXEC ;MACRO CANT DO DIVISION WITH RELOC'S IDIVI 2,1000 ;FIRST PAGE TO SSAVE MOVEI 3,520000(2) ;RCX BITS SUBI 2,100 ;DO THROUGH PAGE 77 HRLZS 2 ;NEGATIVE PAGE COUNT HRR 2,3 SETZ 3, SSAVE EXEC0B: ;SET UP PRIMARY INPUT AND OUTPUT JFN'S ;THESE REMAIN CONSTANT AT LEAST AT PRESENT. MOVEI 1,400000 GPJFN MOVEM 2,PRIMRY ;SAVE FOR ^C, ERRORS ETC MOVEI A,100 MOVEM A,CIJFN MOVEI A,101 MOVEM A,COJFN ;INITIALIZE PROCESS PSI SYSTEM, ; DONE EARLY SO ERRORS IN REST OF INITIALIZATION WILL BE HANDLED. ;ENABLE ALL ERROR CHANNELS BUT OVERFLOW, ; ALSO CHANNEL 1 FOR ASSIGNMENT TO ^C BELOW, ; AND 2 FOR AUTOLOGOUT. MOVEI A,B0 ;SAY THIS FORK MOVE B,[LEVTAB,,CHNTAB] SIR ;SET UP TABLE ADDRESSES MOVE B,[360776500000] ;CHANNELS AIC ;ACTIVATE SPECIFIED CHANNELS EQV B,[1B0+1B19];DON'T CHANGE CHANS USED BY MINI-EXEC. 4/30/70. ;ABOVE FOR DEBUGGING . SETCA B, TO DEACTIVATE ALL. DIC ;DEACTIVATE ALL OTHERS EIR ;ENABLE PROCESS PSI SYSTEM ;INITIALIZE THE EXEC AND PROGRAM TTY MODE BLOCKS ; WORD-0 OF PTTYMD IS USED AS FLAG TO INDICATE WHETHER OR NOT WE ; HAVE A TTY. CALLS TO LTTYMD OPERATE ONLY ON SUBSYS ; NAME IF WORD-0 IS ZERO. THIS WILL BECOME NON-ZERO AS ; SOON AS WE HAVE A TTY. NOTE: THIS CAN HAPPEN HERE, IF ; THE "GET" DURING AUTOSTARTUP IS BAD, OR IN RTTYMD ; DUE TO ^C OUT OF AUTOSTARTED JOB WHICH WAS STARTED DETACHED. EXEC0C: GETNM ;SUPERIOR-SET SUBSYS NAME MOVEM 1,SUPSUB ;SAVE FOR "QUIT" MOVE A,[INETTY,,ETTYMD] ;INITIAL EXEC MODES BLT A,ETTYMD+NTTYMD-1 ;INCLUDING MODIFIED CCOC, TIW AND SUBSYS MOVE A,[INPTTY,,PTTYMD] ;INITIAL TTY FOR USER BLT A,PTTYMD+NTTYMD-1 ;JUST A NORMAL TTY GETNM ;GET SUBSYS SETNM SKIPE CJINIT ;CREATED JOB INITIALIZING? MOVEM A,SUBSYS ;YES, SAVE SUBSYSTEM NAME IN GOOD PLACE GJINF CAMN 4,[-1] ;ARE WE DETACHED? JRST CMDIN1 ;YES, LEAVE 0 IN ETTYMD, PTTYMD MOVE 2,[1B3+^D66B10+^D72B17+17B23+2B25+1B26+1B29+1B31] MOVEM 2,ETTYMD+0 MOVEM 2,PTTYMD+0 EXEC0D: TIME MOVEI C,^D<15*60> ;15 MINUTES OF SECONDS IMULI C,0(B) ;15 MINUTES OF TICKS ADDM C,A ;ALLOW TIL THIS BEFORE 1ST DOWNTIME CHK MOVEM A,DWNMSF## ;MAY HAPPEN SOONER IF THIS EXEC IS USED ;TO LOGIN WITH. CMDIN1: SKIPE CINITF ;ARE WE INITIALIZING? JRST CMDIN2 ;NO, NO SIGN-ON HEARLD SKIPN CJINIT ;INITIALIZING A CREATED JOB? JRST CMDN1A ;NO MOVSI A,(1B0) ;"SUPPRESS HEARLD" FROM CRJOB? TDNE A,CJFLGS TLZA Z,F1 ;NO HEARLD TLO Z,F1 ;TURN ON HEARLD JRST CMDN2A CMDN1A: SKIPN AUTFLG ;NO HERALD FOR AUTOSTARTUP JOBS TLOA Z,F1 ;SAY PRINT SIGN-ON HEARLD ;COMMANDS THAT RUN PROGRAM RETURN HERE WHEN IT STOPS. ;START, CONT, REENTER, RUN, , GOTO. ;RE-ENTRY JOINS MAIN FLOW HERE CMDIN2: ;^C AND COMMAND ERRORS COME BACK HERE. ;AFTER ^C IT IS NECESSARY TO EXECUTE CODE TO FIND OUT WHETHER LOGGED IN, ; HAVE INFERIOR FORK, UPDATE CAPABILITIES, KILL AUTOLOGOUT FORK, ; ETC IN CASE INTERRUPTED COMMAND WAS LOGIN, RUN, ETC. ERRET: TLZ Z,F1 ;SAY NO SIGN-ON MESSAGE ;MAKE SURE ^C PSI CHANNEL ACTIVATED ; (IT IS TURNED OFF DURING PART OF "LOGIN" AND "RESET") CMDN2A: MOVEI A,400000 ;THIS FORK MOVSI B,(1B1) AIC MOVEI E,ETTYMD ;PUT EXEC'S TTY MODES INTO EFFECT CALL LTTYMD ;IF THEY EXIST. SETNM, TOO. MOVEI A,RERET ;SAY WHERE TO GO ON ERROR WHILE TYPING MOVEM A,CERET ; ...LOGIN MESSAGE TLZN Z,F1 ;SIGN-ON MESSAGE, FIRST TIME ONLY JRST CMDN2B ;NO PRINT EOL CALL .VERSI ;PRINT SYSTEM AND EXEC VERSIONS SKIPE CJINIT ;INITIALIZING A CREATED JOB? JRST CMDN2B ;YES, SKIP LGNCHK HRLZI A,B0!B1 ;"FACT FILE OR LOGGING TTY" ENABLED TMON ;SKIP IF EITHER EXISTS TYPE < *****ACCOUNTING OFF***** > CALL LGNCHK ;WARN IF LOGINS PROHIBITTED JUMPE A,CMDN2B ;LGNCHK SAID OK TO LOGIN CALL CRIF TYPE <"ATTACH" TO EXISTING JOB IS PERMITTED> PRINT EOL ;SAY INITIALIZATION HAS COMPLETED SUCCESSFULLY. ;UNTIL CINITF><0, ERROR ROUTINES HALT RATHER THAN TYPE MESSAGES, ; AND "REENTER" DOES A "START". CMDN2B: SETOM CINITF ;FIND OUT IF THIS JOB IS LOGGED IN. (MIGHT BE AT STARTUP IF SUBSIDIARY, ; OR A SUBSYSTEM COULD LOG JOB IN.) GJINF ;LOGIN DIR # IN A, 0 IF NOT LOGGED MOVEM A,CUSRNO ;SAVE LOGIN DIR # OR -1 ;KILL AUTOLOGOUT FORK IF IT EXISTS BUT LOGGED IN. SKIPLE CUSRNO ;SKIP IF NOT LOGGED IN SKIPG A,ALOFH ;FORK THAT LOGS OUT ABANDONED JOBS JRST .+3 SETOM ALOFH ;SAY ITS KILLED (DON'T RETRY ON FAILURE) KFORK ;KILL IT ;ENABLE SPECIAL CAPABILITIES CMDN2D: MOVEI A,B0 ;SAY THIS FORK RPCAP ;GET SPECIAL CAPABILITIES POSSIBLE IN 2 HLLZ C,B ;ENABLE ALL PROCESS (LH) CAPABILITIES SKIPE PRVENF ;IF "ENABLE" COMMAND IS IN EFFECT, HRR C,B ;ALSO ENABLE RH (USER) CAPABILITIES. EPCAP ;(MAYBE NONE AVAILABLE DUE TO LIMIT) MOVEI 1,400000 CIS MOVE A,[CTRLC,,1] TLNE C,B0 ;TEST SPEC CAP BIT 0 ATI ;ASSIGN ^C TO CHAN 1 MOVE A,[CTCODE,,3] ATI ;ASSIGN ^T TO CHAN 3 MOVE A,[HUCODE,,4] ATI ;ASSIGN CARRIER OFF TO CHAN 4 ;HERE WHEN READY TO INPUT A COMMAND. ;ALL COMMANDS RETURN HERE OR ABOVE HERE WHEN DONE. CMDIN4: MOVEI E,ETTYMD CALL LTTYMD ;IN CASE LAST COMMAND DIDN'T RESTORE IT MOVE A,[1B0+400000] ;GET/SET DEFERRED FOR THIS FORK RTIW MOVSI C,(1B) ;OR 0 IF YOU DON'T LIKE DEFERRED ^C AND C,B ;OK IF NO ^C PRIV. STIW SETO A, CAME A,NPAGE CALL MAPPF ;DON'T LEAVE FORK PAGES MAPPED SETZM CSZ1 ;ZERO STORAGE MOVE A,[CSZ1,,CSZ1+1] BLT A,CSZ2 ;INITIALIZE WHAT NEEDS INITIALIZING MOVE BFP,[POINT 7,CBUF] ;BYTE POINTER INTO COMMAND BUFFER, ;IN WHICH ENTIRE LINE IS ACCUMULATED. ;STAYS IN BFP. MOVE P,[IOWD PDL,PD] ;INIT PD POINTER MOVE A,[IOWD JBUFL,JBUF] ;INIT PTR INTO JFN BUFFER MOVEM A,JBUFP SETOM 1(A) ;INIT JFN BUFFER TO -1'S: 0 IS A JFN. AOBJN A,.-1 MOVE A,[POINT 7,CSBUF] ;INIT PTR INTO STR BUF FOR JSYS ARGS MOVEM A,CSBUFP MOVEI A,RERET ;REGULAR ERROR RETURN ADDRESS MOVEM A,CERET ;SAY WHERE TO GO AFTER PRINTING ERR MSG ;CLEAR SOME FLAGS SETZ Z, ;CLEARS PUNCTF, STCF, BAKFF, ETC. SETZB KWV1,KWV ;NO SPECIAL BITS ON IN COMMAND KEYWORD ; TABLE VALUE. THIS IS IN CASE SOME ; SPECIAL SYNTAX ; NEVER SETS KWV1 BUT CALLS "CONF". ; THE ONLY SUCH CASES ARE ; AND INPUTTING ; DATE AND TIME. 6/30/70. ;REQUEST DATE AND TIME IF SYSTEM DOESN'T HAVE THEM. ;THIS MUST BE INSIDE COMMAND LOOP SO IT WILL BE REPEATED IF ERROR ; OR ^C ABORTS FIRST ATTEMPT. SKIPE CJINIT ;INITIALIZING CREATED JOB? JRST CMDN5B ;YES, LET IT WORRY ABOUT TAD SKIPN AUTFLG ;DON'T IF AUTOJOB SKIPE DTSF ;NON-0 IF HAVE DATE AND TIME JRST CMDN5B ;...AND HAVE BEEN HERE BEFORE GTAD ;FLAG NOT SET YET, GET DATE AND TIME CAME A,[-1] ;-1 SAYS SYSTEM DATE & TIME NOT SET JRST CMDN5B ;SYSTEM HAS DATE AND TIME. ;SYSTEM HAS NO DATE AND TIME, GET SAME. SUBR INDT (WITH ^E SET IN ;X4CMD.MAC) INPUTS, CONFIRMS, AND SETS TIME & DATE. KWV1 MUST BE 0 NOW! MOVE 1,CIJFN SIBE ;INPUT ALREADY TYPED? JRST [ TYPE < TAD= > ;YES, GIVE SHORT MESSAGE JRST .+2] TYPE < ENTER DATE AND TIME AS MM/DD/YY HH:MM -- > CALL INDT CMDN5B: SETOM DTSF ;SAY SYSTEM HAS DATE AND TIME. ; THIS AVOIDS ; DOING GTAD EVERY TIME THRU LOOP. ;NOW THAT SYSTEM DEFINITELY HAS DATE & TIME, INITIALIZE "AUTOLOGOUT" ;STUFF IF NECESSARY. SKIPN AUTFLG ;IF AUTO STARTUP JOB, OR ... SKIPLE CUSRNO ; ALREADY LOGGED IN, JRST CMDN5E ; NOT RELEVANT. SKIPE ALOFH ;ALO FORK STARTED? JRST CMDN5D ;YES, ALO INITIALIZATION ALREADY DONE. GTAD ;SAVE STARTUP TIME FOR USE IN MOVEM A,STRTIM ;"ALOTST" SUBR ;START UP FORK TO WATCH FOR ABANDONED JOB (NO TTY ACTIVITY FOR ;N SECONDS) AND PSI THIS FORK IF THAT OCCURS. SETZ A, CFORK ;FORK WHICH LOOKS FOR NO TTY ACTIVITY CALL [ SETOM ALOFH ;ON ERROR THIS PREVENTS INFINITE JRST JERR] ;...RETRY LOOP. MOVEM A,ALOFH ;SAVE HANDLE FOR KILLING LATER. HRLZI A,400000 HRLZ B,ALOFH HRLZI C,B2+B3+B4 PMAP ;MAP PAGE 0 (STORAGE) INTO FORK MOVEI A,ALOFRK LSH A,-^D9 ;GET PAGE # OF ALO ROUTINE HRLI A,400000 MOVEI B,ALOFRK LSH B,-^D9 ;MUST SHIFT AT RUN TIME CAUSE RELOCATION HRL B,ALOFH PMAP ;MAP CODE PAGE INTO FORK AOS A AOS B PMAP ;GIVE IT THE NEXT PAGE TOO. MAY CROSS MOVE A,ALOFH MOVEI B,ALOFRK SFORK ;START ALO FORK ;JOB ISN'T LOGGED IN, SEE IF ITS TIME TO AUTO-LOGOUT IT. CMDN5D: CALL ALOTST CMDN5E: SKIPE CJINIT ;CREATED JOB? JRST CMDN5F ;YES SKIPN AUTFLG ;AUTOSTARTUP JOB ? JRST CMDN6 ;NO SETOM ALOFH ;YES, DISABLE AUTO LOGOUT FORK MOVE A,AUTFLG ;GET JFN OF PROG TO START MOVEM A,CJFN1 ;AND SET FOR GET SETZM AUTFLG ;CLEAR AUTOSTART FLAG CALL $RESET CALL $GET2 ;DO THE GET AFTER CFORK IF NEEDED MOVE A,FORK MOVE B,APJFN SPJFN JRST ..STRT CMDN5F: SETZM CJINIT ;CANCEL CREATED JOB INIT STATE MOVSI A,(1B3) ;"FAKE LOGIN TYPEOUT" FROM CRJOB TDNE A,CJFLGS ;SUPPOSED TO? SKIPG CUSRNO ;SKIP IF LOGGED IN JRST CMDN5G ;CAN'T FAKE LOGING TYPEOUT IF NOT SETZ A, ;USE CURRENT TIME ETYPE < JOB %J ON LINE %L %1D %E> PRINT EOL CALL GLSTLI ;GET DATE OF LAST LOGIN TO A ETYPE< PREVIOUS LOGIN %1D %E> CALL JOBCNT ;WARN OF OTHER JOBS PRINT EOL CALL DWNTIM CALL CHKDAL CMDN5G: MOVE A,CJFLGS ;FLAGS FROM CRJOB ENTRY SKIPL FORK ;IF THERE IS A FORK TLNN A,(1B2) ;"START INFERIOR" BIT JRST CMDN6 ;NO FORK, OR NO START COMMAND CMDN5H: HRRZ B,CJFKSA ;ENTRY VECTOR OFFSET JRST START1 ;RUN IT ;GET DATE OF LAST LOGIN GLSTLI: MOVE A,['LGNPAR'] CALL $SYSGT SKIPN A,B RET ;RETURN 0 IF NO SUCH TABLE HRLI A,1 ;SET TABLE INDEX GETAB MOVEI A,0 RET ;DO PERIODIC CHECK FOR NEW MAIL ARRIVAL CMDN6: SKIPL MSGTIM ;IF "MAIL WATCH OFF" SKIPG CUSRNO ;OR NOT LOGGED IN JRST CMDN6D ;FORGET THE CHECK TIME ;GET MILLISECOND TIME CAMG A,MSGTIM ;PASSED DEADLINE FOR MAIL CHECK? JRST CMDN6D ;NO CMDN6A: MOVEI A,CMDN6C ;SET DISPATCH IN CASE CHKMSG BOMGS OUT MOVEM A,CERET MOVE A,CUSRNO ;OUR USER # CALL CHKMSG ;SKIP IF USER IN A HAS NEW MAIL JRST CMDN6C ;HE DOES NOT. JUST MAKE NEW DEADLINE. CMDN6B: CALL CRIF TYPE <[YOU HAVE NEW MAIL]> PRINT EOL MOVE A,COJFN ;OUTPUT JFN DOBE ;WAIT TILL COMPLETELY TYPED CMDN6C: TIME ;GET "NOW" AND TICKS/SECOND MOVEI C,^D<10*60> ;10 MINUTES OF SECONDS IMULI C,0(B) ;CONVERT TO TICKS ADDM C,A ;NEXT DEADLINE MOVEM A,MSGTIM ;NOTE: NOT UPDATED IF ^C DURING DOBE MOVEI A,RERET ;RESTORE NORMAL ERROR DISPATCH MOVEM A,CERET CMDN6D:! ;DO PERIODIC CHECK OF PRINTER DIRECTORY CMDN6E: SKIPL PRNTIM ;IF "PRINTER WATCH OFF" SKIPG CUSRNO ;OR NOT LOGGED IN JRST CMDN6J ;FORGET THE PRINTER CHECK TIME ;GET MILLISECOND TIME CAMG A,PRNTIM ;PASSED DEADLINE FOR PRINTER CHECK? JRST CMDN6J ;NO CMDN6F: CALL CRIF ;ENSURE AT LEFT MARGIN MOVEI A,CMDN6H ;SET SPECIAL ERROR DISPATCH MOVEM A,CERET HRRZ A,CUSRNO ;OUR USER # CALL CHKPRN ;CHECK THE SPOOLER JRST [ UTYPE [ASCIZ /[LINE PRINTER OUTPUT DONE]/] PRINT EOL MOVE A,COJFN DOBE SETOM PRNTIM ;CANCEL SUBSEQUENT CHECKING JRST CMDN6I] CMDN6G: TYPE <[YOUR LISTING HAS NOT FINISHED]> PRINT EOL MOVE A,COJFN DOBE CMDN6H: TIME ;GET "NOW" AND TICKS/SECOND MOVEI C,^D<60*5> ;5 MINUTES OF SECONDS IMULI C,0(B) ;CONVERT TO TICKS ADDM C,A ;NEXT DEADLINE MOVEM A,PRNTIM CMDN6I: MOVEI A,RERET ;RESTORE NORMAL ERROR DISPATCH MOVEM A,CERET CMDN6J:! ;DO PERIODIC CHECK FOR NEWLY-SCHEDULED DOWNTIME SKIPL DWNMSF ;IF DOWNTIME ALREADY PRINTED SKIPG CUSRNO ;OR NOT LOGGED IN JRST CMDN6K ;FORGET THE DOWNTIME CHECK TIME ;GET THE MILLISECOND TIME CAMG A,DWNMSF ;TIME TO CHECK AGAIN YET? JRST CMDN6K ;NO CALL DWNTIM ;YES, CHECK FOR AND PRINT OUT DOWNTIME TIME ;GET "NOW" AND TICKS/SECOND MOVEI C,^D<60*30> ;30 MINUTES OF SECONDS IMULI C,0(B) ;CONVERT TO TICKS ADDM C,A ;NEXT DEADLINE SKIPL DWNMSF ;UNLESS CANCELLED DUE TO PRINTOUT MOVEM A,DWNMSF CMDN6K:! ;PRINT READY CHARACTER AND INPUT AND DECODE COMMAND CMDN7: CALL READY ;PRINTS "@" OR "!" IF PRIV CMDS ENABLED ;BEGIN INPUTTING AND DECODING A COMMAND ;FIRST, INPUT FIRST FIELD. MUST INPUT WHOLE FIELD SO EDITING WORKS! ; DISTINGUISH 3 CASES: ; COMMAND BEGINS WITH A SPECIAL CHARACTER ; COMMAND BEGINS WITH A WORD ; COMMAND BEGINS WITH AN OCTAL NUMBER TLO Z,NEOLF ;SAY DON'T ECHO EOL'S, BECAUSE THIS INPUT ;FIELD MAY BE A SUBSYSTEM NAME, AND GTJFN ;PRINTS AN EOL IF THERE IS AN EOL IN STRING, ;AND WE DON'T WANT TWO EOL'S PRINTED. ;THE FOLLOWING INPUTS A FIELD (IE TO A ;NON-ALPHANUMERIC CHARACTER), EDITS, ;AND IF INPUT WAS "?", ;TYPES GIVEN MESSAGE AND INPUTS AGAIN. ;"%Z" IN MESSAGE EXPANDS TO ALL ;KEYWORDS IN TABLE. MOVEI A,CTBL1 ;COMMAND TABLE ADDRESS FOR %Z INHELP < COMMANDS ARE: %1Z SUBSYSTEM NAME SAVE FILE NAME NUMBER/ NUMBER\ NUMBER ; COMMENT > CAIG CNT,1 ;IS FIELD COUNT (INCL. TERMINATOR) > 1? JRST CIN1A ;NO, COMMAND BEGINS WITH SPECIAL CHAR MOVE B,.BFP ;BYTE PTR TO BEGINNING OF FIELD HRREI D,-1(CNT) CIN0A: ILDB A,B ;GET CHARACTER OF FIELD MOVE C,CHRTBL(A) ;GET INFO ABOUTSAID CHARACTER TRNN C,OCTDIG ;TEST OCTAL DIGIT BIT JRST CIN1C ;COMMAND MUST BEGIN WITH A WORD SOJG D,CIN0A ;CHECK ALL CHARACTERS OF FIELD JRST CIN6 ;COMMAND BEGINS WITH AN OCTAL NUMBER ;HANDLE CASES WHERE A NON-ALPHANUMERIC CHARACTER BEGINS COMMAND CIN1A: TLZE Z,EOLNEF PRINT EOL ;IF THE CHARACTER WAS EOL, NOW ECHO IT CALL PASCOM ;IF LINE IS JUST A COMMENT, CHEW IT UP. TRNE CBT,TEOL ;EOL, SEMICOLON, OR FORMFEED? JRST CMDIN4 ;YES, NULL LINE, GO GET ANOTHER LINE. CAIN TRM,CTRLE ;^E PREFIXES PRIVILEGED COMMANDS JRST [ SKIPN PRVENF ;ARE PRIV COMMANDS ENABLED? JRST CERR ;NO KEYWD CTBL2 ;SEARCH SPECIAL TABLE 0 ;NO DEFAULT JRST CERR ;NOT FOUND JRST CIN2] ;WIN ;OTHER SPECIAL CHARACTERS TO IMPLEMENT LATER ___________ ; \ = .\ ; LF = .+1/ ; ^ = .-1/ ; . = CURRENT LOCATION (\ OR / CAN FOLLOW) CAIN TRM,"<" ;BEGIN DIR NAME FOR "RUN"? JRST CIN3C ;YES. ;HAVEN'T RECOGNIZED IT YET. ;THIS SHOULD FALL THRU TO WORD CASE RATHER THAN ERROR OUT IF ; NULL IS TO BE DEFAULTED TO SOME COMMAND SUCH AS "HELP". JRST CERR ;TYPE " ?" AND INPUT NEXT COMMAND. ;COMMAND BEGINS WITH A WORD. ;SEARCH COMMAND TABLE, THEN SUBSYSTEM DIRECTORY, ;THEN GO TO USER'S ERROR ROUTINE. CIN1C: CAIE TRM,"." ;PERIOD TERMINATOR PRODUCES ERROR IN CAIN TRM,"F"-100 ; "KEYWD", (CONTROL-F ALSO), JRST CIN3 ;BUT IS MEANINGFUL IN SUBSYSTEM NAMES. TLO Z,BAKFF+NEOLF ;SAY RE-USE THIS FIELD, DON'T ECHO EOL KEYWD CTBL1 ;SEARCH TABLE OF REGULAR COMMANDS 0 ;T HELP,NOLOG+NOCONF+ONEWD ;COULD DEFAULT TO "HELP" JRST CIN3 ;NOT FOUND, GO LOOK FOR SUBSYSTEM NAME. ;FOUND, FALL INTO CIN2. ;HAVE VALID FIRST KEYWORD IN COMMAND ;OR HAVE DECODED A SPECIAL SYNTAX SUCH AS "/". ;VALUE WORD FROM TABLE IS IN AC "KWV". ;MAKE PRE-DISPATCH CHECKS CIN2: TLZE Z,EOLNEF PRINT EOL ;IF IT ENDED IN UNECHOED CR, NOW ECHO IT ;ABOVE IS NEEDED DESPITE THE FACT ;THAT "CONF" DOES IT FOR ;MULTILINE COMMANDS SUCH AS "LOGIN" MOVE KWV1,KWV ;1ST KW'S VALUE WD STAYS IN KWV1. TLNE KWV1,NOLOG JRST .+3 SKIPG CUSRNO ;SKIP IF LOGGED IN ERROR TLNE KWV1,EASUB ;DOES CMND EXAMINE, ALTER, OR RUN PROG? JRST [ SKIPN PRVENF ;YES, PRIVILEGES ENABLED? SKIPN PROPSF ;NO, PROPRIETARY PROGRAM? JRST .+1 ;OK JRST CERR] ;UNAUTHORIZED MEDDLING TLNE KWV1,ONEWD ;IS IT A ONE-WORD COMMAND? CONFIRM ;YES, HANDLE CONFIRMATION NOW. ;DISPATCH TO ROUTINE TO DECODE REST OF (NON-ONE-WORD) COMMAND THEN ;EXECUTE COMMAND. ;IF "INFILN" BIT WAS ON, JFN IS STILL IN A, AS WELL AS "CJFN1". CIN2B: CALL (KWV1) ;DISPATCH WITH PUSHJ, ;CAN RETURN WITH POPJ ;OR JRST CMDIN2,3,4. JRST CMDIN4 ;WHERE MOST COMMANDS SHOULD RETURN. ;FIRST KEYWORD IS NOT A COMMAND NAME, ; SEE IF ITS A SUBSYSTEM NAME ;ALSO GET HERE ON OCTAL NUMBER NOT FOLLOWED BY /, \, ETC. CIN3: TLOA Z,BAKFF+NEOLF+F3 ;SAY REUSE FIELD, DON'T ECHO EOL ;F3 SAYS TO TRY CONN AND LOGIN ; AFTER SUBSYS ;DIRECTORY SPECIFIED (OPEN ANGLE BRKT. SEEN). SEARCH ONLY IT. CIN3C: TLO Z,BAKFF+NEOLF ;MOVE A,[B0,,400000] ;MOVE B,PTTYMD+6 ;INTERRUPT MASK ;MOVE C,PTTYMD+7 ;DEFERRED INTERRUPTS ;STIW ;SET THEM ; ;ERROR WILL UNSET THEM IN UNKNOWN NAME MOVEI A,[ASCIZ /SUBSYS/] ;DEFAULT DIRECTORY NAME CALL CPFN ;COLLECT PROGRAM FILE NAME JRST CIN5 ;NOT A SUBSYSTEM NAME JRST CIN3B JRST CIN3A CIN3B: SKIPG CUSRNO ;SKIP IF LOGGED IN ERROR CIN3A: ;NOTE: KWV1 WAS SET TO 0 ABOVE. 0 IS OK HERE. MOVE A,CJFN1 ;FILE TO "RUN" MOVE B,[1,,FDBCTL] ;CONTROL WORD MOVEI C,C ;TO C CALL $GTFDB ;GTFDB OR DON'T SKIP JRST CERR ;DOESN'T EXIST FOR THIS USER CAIE TRM,33 ;MUST CONFIRM IF ALTMODE USED TLO KWV1,PROGX ;SAY WE'RE PASSING CONTROL TO PROGRAM TLNE C,(FDBEPH) ;IS THE FILE AN EPHEMERON? JRST CIN4 ;YES, TO HANDLE AS SUCH PUSH P,[..STRT] ;SET RETURN TO JOIN "START" COMMAND JRST GET1 ;AND JOIN "GET" COMMAND ;RUN AN EPHEMERAL SUBSYSTEM ; THIS IS TO BEHAVE AS AN EXTENTION TO THE EXEC, THEREFORE: ; IT RUNS WITH THE EXEC'S TTY MODES IN EFFECT, AND ; IF THE TERMINATOR WAS SOMETHING THAT CAN BE INTERPRETED ; AS THE BEGINNING OF A FILE NAME, THE INPUT FILE WILL BE ; BACKED SO THAT THE EPHEMERON CAN GOBBLE IT. ; EFORK IS -1 OR FORK HANDLE IN WHICH THE EPHEMERON IS RUNNING. ; THIS IS CHECKED IN ^C AND ERROR ROUTINES FOR APPROPRIATE ACTION. ; NOTE THAT THESE CONDITIONS ARE HANDLED EXACTLY THE SAME AS ; IF THEY HAD OCCURRED DURING AN EXEC COMMAND. CIN4: SETZ B, ;USE ENTRY VECTOR INDEX 0 ;ENTER HERE FROM PLACES LIKE "ARCHIVE DELETE ..." CIN40: PUSH P,B ;EV INDEX IN B CONFIRM SETOM 1 CALL MAPPF ;FLUSH ANY MAPPED PAGE CIN41: INTOFF MOVEI 1,-1 ;NO CAPS., NONSENSE PC CFORK JRST [ INTON UERR [ASCIZ /NO FORKS AVAILABLE -- TRY AGAIN/]] MOVEM 1,EFORK ;SAY WE HAVE AN EPHEMERAL FORK MOVSI 2,777000 ;PROCESS CAPABILITIES TO TRANSMIT SKIPN LIMITC## ;NOT UNDER A ^ELIMIT CAP? HRRI 2,777777 ;TRUE. TRANSMIT USER CAPABILITIES TOO SKIPE 3,PRVENF ;IF ENABLED IN THIS EXEC, MOVE 3,2 ;ENABLE THE EPHEMERON EPCAP CIN42: PUSH P,SUBSYS ;SAVE OLD SUBSYS NAME MOVE B,CJFN1 ;FILE TO RUN CALL SUBNAM ;SETUP LOCATION SUBSYS MOVE 1,SUBSYS SETNM POP P,SUBSYS ;FOR WHEN WE RUN NORMAL FORK AGAIN CIN43: INTON MOVEI 1,GETILI ;SET SPECIAL ILLEGAL INSTR DISPATCH MOVEM 1,ILIDSP ;IN CASE GET ITRAPS HRR 1,CJFN1 HRL 1,EFORK GET SETZM ILIDSP ;NO LONGER INTERESTED IN ILL INSTRS CALL RLJFNS ;FLUSH ANY JFNS THAT ARE HANGING AROUND CIN44: MOVE 1,EFORK GEVEC HLRE 3,2 JUMPE 3,.+4 CAIL 3,1000 CAIN 3,(JRST) CAIA ERROR POP P,3 ;GET EV INDEX ADD 2,3 ;COMPUTE START LOCATION TLZ 2,-1 SFORK CIN45: WFORK ;^C AND ERRORS HAPPEN HERE INTOFF MOVE 1,EFORK FFORK MOVE 2,[CALL CUUO] MOVEM 2,41 ;REALLY NEEDED? RFSTS ;FIND OUT WHY IT TERMINATED TLZ 1,(1B0) ;FLUSH FROZEN BIT CAMN 1,[2,,0] ;VOLUNTARY TERMINATION JRST [ MOVE 1,EFORK KFORK SETOM EFORK INTON JRST CMDIN2] ;RETURN TO COMMAND INPUT TLNE 1,077700 ;LOOK FOR -1 INSTEAD OF FORK HANDLE JRST [ SETOM EFORK ;SAY IT HAS GONE INTON UERR [ASCIZ /EPHEMERON KILLED ITSELF/]];WIERD PUSH P,A INTON POP P,A PRINT EOL TYPE < DURING EPHEMERON:> JRST INVOLT ;AFTER "WAIT" IN X1CMD ;NOT A SUBSYSTEM NAME, ; GO TO SPECIAL ERROR PROCESSOR IF THIS USER HAS ONE ;4/30/70: AT THIS POINT WE DON'T KNOW THE WHOLE INPUT TEXT ; BECAUSE WE HAVEN'T CAPTURED CHARACTERS READ BY GTJFN. CIN5: ;BRANCH TO PROCESSOR IF ANY ;(NOT IMPLEMENTED YET) JRST CERR ;STANDARD ERROR PROCESSING, "?" TEXT. ;COMMAND BEGINS WITH OCTAL NUMBER CIN6: CAIE TRM,"." ;IF IT ENDS WITH ".", OR TRNE CBT,TEOL+TSPC+TALT ;IF IT ENDS WITH EOL, SPACE, OR ALTMODE, JRST CIN3 ;TAKE AS A SUBSYSTEM NAME. ;DECODE SPECIAL SYNTAXES FOR / AND \ COMMANDS. TLO Z,BAKFF ;UN-INPUT THIS FIELD CALL OCTAL ;INPUT 18-BIT OCTAL NUMBER CALL SCREWUP ;NULL INPUT CAN'T OCCUR PUSH P,A ;SAVE VALUE OBTAINED ;THE TERMINATOR OF THE OCTAL NUMBER IDENTIFIES THE COMMAND. ;GET A DUMMY "TABLE VALUE WORD" APPROPRIATE FOR THE COMMAND AND ; GO THROUGH THE REGULAR CHECK AND DISPATCH CODE TO CHECK FOR ; NOT LOGGED IN, PROPRIETARY PROGRAM, ETC. MOVE KWV,[EASUB,,CSLSH] CAIN TRM,"/" JRST CIN2 MOVE KWV,[EASUB+ALTCON,,CBKSL] CAIN TRM,"\" JRST CIN2 JRST CERR ;NOTE: "CIN2" DISPATCHES WITH PUSHJ, SO WHEN COMMAND ROUTINE IS ;ENTERED, THE VALUE SAVED ABOVE IS AT -1(P), NOT 0(P). ;EXECUTE "/" COMMAND (EXAMINE) ;DECODING AND CHECKS ARE COMPLETE, CONFIRMATION ISN'T USED. CSLSH: MOVE A,-1(P) ;ADDRESS CALL MAPPF ;MAP THAT PAGE & GET ACCESS INFO TLNN A,B5 ERROR TLNN A,B2 ERROR MOVE A,-1(P) ;GET ADDRESS AGAIN MOVEM A,DOT ;UPDATE CURRENT LOCATION ANDI A,777 ;GET REL ADDRESS IN PAGE PRINT TAB ;OUTPUT A TAB HLRZ B,PAGEN(A) ;LH OF WORD IN PAGE BUFFER JUMPE B,.+3 ;LH NON-0? CALL TOCT ;YES, TYPE IT IN OCTAL TYPE <,,> HRRZ B,PAGEN(A) ;RH CALL TOCT ;TYPE IT PRINT EOL ;TYPE CARRIAGE RETURN JRST CMDIN4 ;DONE, GET NEXT COMMAND ;FINISH DECODING AND EXECUTE "\" COMMAND (DEPOSIT) ;SYNTAX IS \ ; OR \ CBKSL: SKIPL FORK ;FORK EXISTS? JRST CBKSL1 ;YES CALL ECFORK ;NO, CREATE ONE CBKSL1: MOVE A,-1(P) ;NOTE: COMMAND RETURN ADDRESS IS AT 0(P) CALL MAPPF ;MAP THAT PAGE AND GET ACCESS INFO MOVEM A,-1(P) ;SAVE ACCESS INFO WITH ADDRESS TLNN A,B5 JRST [ UTYPE [ASCIZ / [NEW] /] ;ADVISORY MESSAGE JRST .+3] ;DON'T TEST WRITE BIT HERE! TLNN A,B3 JRST [ TLNN A,B9 ;COPY-ON-WRITE BIT UERR [ASCIZ /CAN'T WRITE THAT PAGE/] UTYPE [ASCIZ / [SHARED] /] JRST .+1] ;GET VALUE CALL OCTCOM ;INPUT VALUE, ACCEPTING LH,,RH ETC, JRST CERR ;R1: NULL. ...AND CHECKS TERMINATOR. CONFIRM MOVE B,-1(P) HRRZM B,DOT ;UPDATE CURRENT LOCATION ;STORE A AT B IN FORK. ASSUME WE STILL HAVE THE PAGE. CBKSL5: ANDI B,777 ;MASK OFF PAGE # PART OF ADDRESS MOVEM A,PAGEN(B) ;STORE INTO PAGE BUFFER ;EXECUTION OF "\"... ;IF ADDRESS < 20, SET FORK AC'S. NON-AC PAGES HANDLE THEMSELVES. MOVE C,DOT CAILE C,17 JRST CMDIN4 MOVE A,FORK MOVEI B,PAGEN CAIGE C,20 SFACS JRST CMDIN4 ;SUBROUTINE TO "AUTOLOGOUT" THIS JOB IF NOT LOGGED IN AND MORE ; THAN "AUTOL1" SECONDS HAVE ELAPSED SINCE STARTUP. ;ONE CALL IN CMDIN4 AREA. ALOTST: PUSH P,A GTAD SUB A,STRTIM SUBI A,AUTOL1 JUMPG A,AUTOLO ;DO AUTOLOGOUT (XSUBRS.MAC) POP P,A RET ;ROUTINE FOR FORK TO AUTO-LOGOUT ABANDONED JOBS. ;IF NO TTY ACTIVITY FOR N SECONDS, LOGOUT, ELSE REPEAT, UNTIL LOGGED IN. ;THIS FORK IS KILLED IN "LOGIN" CODE AND "ERRET" CODE ; IN MAIN FORK. ALOFRK: MOVEI A,AUTOL2*^D1000 ;NUMBER OF SECONDS TO WAIT BEFORE DISMS ;...DOING ANYTHING HERE ;LOOP TO LOOK FOR INACTIVE TTY ALF1: ALF2: MOVE C,TTYACF ;AOS'D FOR EVERY CHAR IN/OUT MOVEI A,AUTOL3*^D1000 ;NUMBER OF SECS DURING WHICH THERE DISMS ;... MUST BE NO ACTIVITY CAME C,TTYACF ;HAVE ANY CHARS BEEN TRANSFERRED? JRST ALF1 ;YES, WAIT AND CHECK AGAIN ALF3: SETZM STRTIM ;CAUSES AUTOLOGOUT AT COMMAND INPUT IF ;AN ERROR OR ^C PREVENTS IT FROM ;COMPLETING AFTER PSI. MOVEI A,-1 ;MAIN EXEC FORK, HRLZI B,B2 ;CHANNEL 2 IIC ;GOOSE TO SAY AUTOLOGOUT NEEDED HALTF ; READ ONLY STORAGE AREA INTERN CHRTBL ;CHARACTER TABLE ;EXTERNS FOR CELLS REFERENCED IN THIS AREA ONLY EXTERN LEV1PC,LEV2PC,LEV3PC ;IN XPRIV.MAC ; IN "SUBRS" ASSEMBLY: EXTERN HUPSI,USEPSI,ILIPSI,EOFPSI,DATPSI,CCPSI,ALOPSI ; SPECIAL CHARACTER ROUTINES: EXTERN $CTRLA,$CTRLR,$CTRLV,$CTRLW,$CTRLX,$FORMF,$EOL,$DASH,$CONT,$RUB ;COMMAND TABLES ;FORM: ; LABEL: NUMBER OF ENTRIES ; [VALUE],,[ASCIZ @TEXT@] FOR EACH ENTRY, ALPH ORDER ; VALUE IS GENERALLY BITS,,ADDRESS ; SEE "DEFINITIONS" FILE FOR BIT SYMBOLS AND MACRO DEFINITIONS ;MACROS USED TO GENERATE TABLES (DEFINED IN "DEFINITIONS" FILE) ; ; T TEXT[,BITS[,ADDRESS]] ;HERE []'S MEAN OPTIONAL ; SETS UP ENTRY. DEFAULTS ADDRESS TO ".TEXT", OR IF ; THAT IS UNDEFINED, TO "NOT IMPLEMENTED" ERROR ROUTINE ; ; X TEXT ; CREATES A SPECIAL FAKE ENTRY, TO MAKE AN OTHERWISE ; UNIQUE SUBSET AMBIGUOUS (EVEN THE EXACT TEXT GIVEN TO X ; MACRO WILL BE TREATED AS AMBIGUOUS). USED WHERE ACTUAL ; AMBIGUITY IS WITH AN ENTRY IN ANOTHER TABLE SEARCHED ; LATER. ; ; TABLE RESERVES WD FOR # ENTRIES AT TOP OF TABLE ; ; TEND FILLS IN # OF ENTRIES SINCE LAST "TABLE" MACRO ; IN LOCATION RESERVED BY THAT "TABLE" MACRO ;COMMANDS NOT PREFIXED BY ^E. ;ALL BUT THOSE WITH "WOEPUO" BIT ARE AVAILABLE TO ANY USER. CTBL1: TABLE T ACCESS,LPROK!LANOK ;ACCESS (OF FILES)--(TO)--(IS)-- T ACCOUNT,LPROK ;ACCOUNT (OF FILE)--(IS)-- T ADVISE,LPROK+EOLOK+ALTCON ;ADVISE (USER) T APPEND,LANOK+CONMAN+LPROK ;APPEND (TO) T ARCHIVE ;ARCHIVE T ASSIGN,LPROK ;ASSIGN (AS) T ATTACH,NOLOG+LPROK+ALTCON ;ATTACH (TO JOB) T AVAILABLE,EOLOK+NOLOG+NOCONF ;AVAILABLE LINES/DEV T BDDT,ONEWD+ALTCON+EASUB ;START BDDT T BREAK,NOLOG+EOLOK+LPROK+ALTCON ;BREAK (LINKS) T CHANGE,LPROK+ALTCON ;CHANGE (ACCOUNT TO) # T CLEAR,LPROK+CONMAN ;CLEAR DEVICE DIRECTORY T CLOSE,LANOK+LPROK+INVIS ;CLOSE (FILE) T COMMANDS,LPROK+INVIS ;COMMANDS (FROM FILE) T CON,NSPALT+EOLOK+INVIS,<[UALTYP [ASCIZ /TINUE /] ;CON=CONTINUE JRST .CONTI]> ;...DESPITE CONNECT T CONNECT,LPROK ;CONNECT (TO DIRECTORY) T CONTINUE,EOLOK ;CONTINUE T COPY,LANOK+CONMAN+LPROK ;COPY (TO) T DAYTIME,ONEWD+NOLOG+NOCONF ;DAYTIME T DDT,ONEWD+ALTCON+EASUB ;START DDT T DEASSIGN,LPROK ;DEASSIGN T DEFINE,LANOK+LPROK+INVIS ;DEFINE (NEW FILE)--(AS)-- T DELETE,LANOK ;DELETE T DETACH,EOLOK+LPROK+LANOK+ALTCON ;DETACH JOB T DIRECTORY,COMOK+EOLOK+LANOK+ALTCON,..DIRE ;DIRECTORY. T DIS,NSPALT+EOLOK+INVIS+WOEPUO,<[UALTYP [ASCIZ /ABLE /] JRST .DISAB]> ;DIS=DISABLE, NOT AMBIG. T DISABLE,WOEPUO+ONEWD+ALTCON+INVIS ;DISABLE PRIV CMNDS T DISCUSE,ONEWD+NOCONF+NOLOG ;AMOUNT OF DISC AVAILABLE T DSKSTAT,ONEWD+NOCONF ;DISK STATUS T DUMP,LANOK+CONMAN+LPROK+INVIS ;DUMP (ON) T EDIT,LANOK+EOLOK+ALTCON ;EDIT T ENABLE,WOEPUO+ERRUO+EOLOK+INVIS ;ENABLE PRIV CMDS T ENTRY,LPROK ;SET ENTRY VECTOR T EPHEMERAL,LANOK ;MARK AS AN EPHEMERON T ERRSTAT,ONEWD+NOCONF+INVIS ;ERROR STATUS T EXEC,EOLOK+ONEWD ;EXEC (RUN SEPARATELY FROM FORK) T EXPUNGE,LPROK+EOLOK ;EXPUNGE (DELETED FILES) T FILSTAT,NOCONF+ONEWD ;FILE STATUS T FORK; ;FORK . AFFECTS /, \, ETC. T FORMFEED,NOLOG+ALTCON+ONEWD ;SAYS TTY HAS FORMFEED X FU ;REQUIRE 3 CHARS FOR FULLDUPLEX T FULLDUPLEX,NOLOG+ONEWD+ALTCON ;SAYS TTY IS FULL DUPLEX T GET,LANOK+LPROK ;GET T GOTO,EASUB+LPROK ;GOTO T HAL,NSPALT+EOLOK+INVIS,<[UALTYP [ASCIZ /FDUPLEX /] JRST .HALFD]> ;AVOID HALT T HALFDUPLEX,NOLOG+ONEWD+ALTCON T HALT,INVIS+EOLOK+COMOK ;HALT THE SYSTEM T IDDT,ONEWD+ALTCON+EASUB ;START AN IDDT T IMPSTAT,NOLOG+NOCONF+ONEWD ;TYPE STATUS OF IMP T INDICATE,NOLOG+EOLOK+LPROK ;INDICATE (FORMFEED) T INTERROGATE,LPROK+EOLOK+LANOK+ALTCON ;CHECK ARCHIVE T JFNCLOSE,LPROK ;JFNCLOSE T JOBSTAT,ONEWD+NOCONF ;JOB STATUS T LENGTH,NOLOG+LPROK,.LLENG ;LENGTH (OF PAGE IS) T LIMIT,LPROK+ALTCON+INVIS ;LIMIT (ADDITIONAL)--(TO)-- T LINK,NOLOG+LPROK ;LINK (TO) X LIS ;BECAUSE OF "LISP" T LIST,LANOK+ALTCON ;LIST . TAKES SUBCOMMANDS. T LOG,NOLOG+NSPALT+EOLOK+LPROK+INVIS+ALTCON,<[UALTYP[ASCIZ/IN /] JRST .LOGIN]> ;FUDGE TO RECOG "LOG" AS "LOGIN" T LOGIN,NOLOG+EOLOK+LPROK+ALTCON ;LOGIN T LOGOUT,EOLOK+NOLOG ;LOGOUT T LOWERCASE,NOLOG+ONEWD+ALTCON ;SAYS TTY HAS LOWER CASE T MAIL,NOLOG T MEMSTAT,ONEWD+NOCONF+EASUB ;MEMORY STATUS T MERGE,LANOK+EASUB ;MERGE T MOUNT ;MOUNT X N IFN DST10X,< T NETLOAD,ONEWD+NOCONF+NOLOG ;PRINT NETWORK LOAD AVS> T NO,NOLOG+ALTCON ;NO TABS/FORMFEED/LOWERCASE T NOT,ALTCON ;NOT EPHEMERAL T NUMBER,LPROK!NOCONF ;NUMBER (OF DIRECTORY) T PERPETUAL,LPROK+LANOK+ALTCON ;"PERPETUAL " T PISTAT,ONEWD+NOCONF ;PISTAT T PRINTER,,.PRNTR ;"PRINTER CHECK/WATCH" T PROTECTION,LPROK ;PROTECTION (OF FILE)--(IS)-- T QFD,COMOK+EOLOK+LANOK+ALTCON ;QUICK FILE DESCRIPTION T QUIT,EOLOK+ONEWD ;QUIT: EXIT TO SUPERIOR EXEC T RAISE,NOLOG+ONEWD+ALTCON ;RAISE L.C. INPUT TO UPPER CASE T RECEIVE,EOLOK+LPROK+ALTCON ;RECEIVE (LINKS OR ADVICE) T REDIRECT,EOLOK+LPROK+LANOK+INVIS ;REDIRECT PRIMARY I/O T REENTER,EOLOK ;REENTER T REFUSE,EOLOK+LPROK+ALTCON ;REFUSE (LINKS OR ADVICE) T RENAME,LPROK+LANOK+CONMAN ;RENAME (...) -- (TO BE) -- T RESET,EOLOK+ONEWD ;RELEASES MEMORY & CLOSES FILES T REWIND,LPROK+LANOK ;REWIND T RUN,LANOK+LPROK ;RUN . STARTS ENV FILE. T RUNSTAT,ONEWD+NOCONF ;RUN STATUS: IO WAIT, ETC. X SA ;"SAIL" MIGHT BE A SUBSYS T SAVE,CONMAN+LPROK+LANOK+EASUB ;SAVE ... (ON) . T SHUT,LPROK+EOLOK ;SHUT (ALL OPEN FILES) T SSAVE,CONMAN+LPROK+LANOK+EASUB ;SHARABLE SAVE T ST,NSPALT+EOLOK+INVIS,<[UALTYP [ASCIZ /ART /] JRST .START]> ;ST=START DESPITE STAT T STA,NSPALT+EOLOK+INVIS,<[UALTYP [ASCIZ /RT /];STA=START JRST .START]> T START,EOLOK ;START PROGRAM T STAT,WOEPUO+NSPALT+EOLOK+NOCONF+INVIS,<[UALTYP [ASCIZ /ISTICS /] JRST .STATI]> ;"STAT" = "STATISTICS" T STATISTICS,WOEPUO+EOLOK+NOCONF+INVIS ;SYSTEM STATISTICS T STATUS,ONEWD+NOCONF+INVIS ;SEE SYSTAT, JOBSTAT, ETC. T STOPS,ALTCON ;SET SOFTWARE TAB STOPS T SYSTAT,ONEWD+NOCONF+NOLOG ;SYSTEM STATUS PRINTOUT X TA ;REQUIRE 3 CHARACTERS FOR "TABS" T TABS,NOLOG+ONEWD+ALTCON ;SAYS TTY HAS HDWE TABS T TERMINAL,NOLOG+LPROK ;TERMINAL TYPE IS N T TRMSTAT,ONEWD+NOCONF ;TERMINAL STATUS TYPEOUT T TYPE,LPROK+LANOK+ALTCON ;LIST FILE TO TTY T UNDELETE,LPROK+LANOK ;UNDELETE T UNLOAD,LPROK+LANOK ;UNLOAD T UNMOUNT,LANOK ;UNMOUNT T USESTAT,ONEWD+NOCONF ;TYPES TIME USED, ETC. T VERSION,ONEWD+NOCONF ;IN XMAIN.MAC T WHERE,LPROK+NOLOG+NOCONF ;WHERE (IS USER) T WIDTH,NOLOG+LPROK,.LWIDTH ;WIDTH (OF LINE IS) TEND REPEAT 5,<0> ;ROOM TO BLT TABLE DOWN FOR PATCHING ;PRIVILEGED COMMANDS PREFIXED WITH ^E ;ONLY LEGAL FOR PRIV USERS WHO HAVE "ENABLE"D PRIV COMMANDS CTBL2: TABLE ;T ACCOUNT,ONEWD+WHLUO+OPRUO,..ACCO ;TURNS ON ACCOUNTING ;T ASSIGN,WHLUO+OPRUO,..ASSI ;^EASSIGN ;T BROADCAST,ONEWD+WHLUO+OPRUO ;SEND MSG TO ALL TERMINALS T CREATE,LPROK+OPRUO+WHLUO ;CREATE/MODIFY DIRECTORY T CYCLE,LPROK+OPRUO+WHLUO ;CYCLE THE NETWORK T DISK,LPROK+OPRUO+WHLUO,...DSK ;SET PANIC LEVELS T EDDT,ONEWD+WHLUO ;GO TO DDT LOOKING AT EXEC T INITIALIZE,WHLUO+OPRUO ;INITIALIZE SOMETHING T K,LPROK+WHLUO,.KFACT ;K (FACTOR) IS ... T LIMIT,WHLUO+OPRUO+ERRUO,..LIMI ;LIMIT SOMETHING T LOAD,LPROK+WHLUO+OPRUO ;LOAD (EDDT) T NETWORK,WHLUO+OPRUO+LPROK ;TURN OFF/ON NETWORK ;T NOACCOUNT,ONEWD+WHLUO ;TURNS OFF SYSTEM ACCOUNTING T OFFLINE,LPROK+WHLUO+OPRUO ;REMOVE CORE PAGES T ONLINE,LPROK+WHLUO+OPRUO ;ADD CORE PAGES T PAUSE,LPROK+WHLUO+OPRUO,..PAUS ;DCHKSW CONTROL T PERMIT,LPROK+WHLUO+OPRUO ;PERMIT LOGINS T PRINT,LPROK+WHLUO+OPRUO ;PRINT DIRECTORY INFORMATION T PROCEED,LPROK+WHLUO+OPRUO ;PROCEED AT BUGCHK T PROHIBIT,LPROK+WHLUO+OPRUO ;PROHIBIT LOGINS T SET,LPROK+WHLUO+OPRUO+CONMAN ;SET DATE AND TIME T SYSTEM,LPROK+WHLUO+OPRUO ;DEBUGSW CONTROL T TRAPS,LPROK+WHLUO+OPRUO ;JSYS TRAPS ON/OFF T UNLOAD,LPROK+WHLUO+OPRUO,..UNLOA ;UNLOAD (EDDT) ;T UNHANG,WHLUO+OPRUO ;^E UNHANG TEND ;CHARACTER TABLE ;ONE WORD PER CHARACTER: ; DESCRIPTIVE BITS IN RIGHT HALF ; LH: SPECIAL CASE DISPATCH FOR SUBROUTINE "CCHRI" (XSUBRS.MAC). ;WORD FROM "CHRTBL" FOR LAST CHARACTER IS GENERALLY IN THE AC "CBT". ;BITS IN RIGHT HALF (VALUES DEFINED IN FILE "D") ; ALPHAN ALPHANUMERIC CHARACTERS, - # ' ; OCTIG 0-7 ; PUNBIT MOST OTHERS EXCEPT FILE NAME FIELD TERMINATORS ; TEOL EOL, SEMICOLON, FORMFEED ; TSPC SPACE, TAB ; TALT ALT MODE ; TCOM COMMA ; TLPR LEFT PAREN ; TRPR RIGHT PAREN ; TCOL COLON ; TLAN LEFT ANGLE BRACKET ; TRAN RIGHT ANGLE BRACKET CHRTBL: 0 ;NULL $CTRLA,,0 ;^A DELETE CHARACTER 0 ;^B 0 ;^C 0 ;^D 0 ;^E 0 ;^F "RECOGNIZE FIELD" FOR FILE NAMES 0 ;^G 0 ;^H - BACKSPACE - MAKE IT DELETE A CHAR TSPC ;^I = TAB. TREATED LIKE SPACE. 0 ;^J = LINE FEED 0 ;^K $FORMF,,TEOL ;^L FORM FEED 0 ;^M = CR. CR-LF BECOMES EOL B4 CHRTBL REFERENCE 0 ;^N 0 ;^O 0 ;^P 0 ;^Q $CTRLR,,0 ;^R RETYPE LINE 0 ;^S 0 ;^T PRINT RUNTIME PSI CHARACTER 0 ;^U $CTRLV,,0 ;^V QUOTE NEXT CHARACTER $CTRLW,,0 ;^W DELETE FIELD $CTRLX,,0 ;^X DELETE WHOLE COMMAND 0 ;^Y 0 ;^Z MEANS EOF FROM TTY TO COPY CMD TALT ;33: ALT MODE 0 0 0 $EOL,,TEOL ;37: EOL (REPRESENTS CR-LF) TSPC ;40: SPACE PUNBIT ;! PUNBIT ;" ALPHAN ;# "ALPHANUMERIC" FOR NOISE WDS, EG "JOB #" PUNBIT ;$ PUNBIT ;% $CONT,,PUNBIT ;&: CONTINUE ON NEXT LINE, TREATED AS SPACE ALPHAN ;' TLPR ;( PUNBIT+TRPR ;) PUNBIT ;* PUNBIT ;+ TCOM ;, $DASH,,ALPHAN ;- "ALPHANUMERIC" BECAUSE ITS FIELD-NULLER 0 ;. PUNBIT ;/ REPEAT 10, ALPHAN ;8 ALPHAN ;9 TCOL ; : ACCEPTABLE TERMINATOR FOR DEVICE NAMES PUNBIT+TEOL ;SEMICOLON: TREAT AS EOL WHEN USED AS TERMINATOR TLAN ;< PUNBIT ;= TRAN ;> PUNBIT ;? PUNBIT ;100: @ REPEAT ^D26, PUNBIT ;[ PUNBIT ;\ PUNBIT ;] PUNBIT ;^ PUNBIT ;_ 0 ;140=WHAT? REPEAT ^D26, 0 0 0 0 $RUB,,0 ;177: RUBOUT IFN .-CHRTBL-200, ;PSEUDO-INTERRUPT SYSTEM TABLES ;LEVEL TABLE: WHERE TO STORE PC'S FOR VARIOUS LEVELS LEVTAB: LEV1PC LEV2PC LEV3PC ;CHANNEL TABLE ;INDEXED BY CHANNEL NUMBER. LEVEL,,ADDRESS FOR EACH. CHNTAB: 0 ;0: USED BY MINI-EXEC? 1,,CCPSI ;1: ASSIGNED BY PROGRAM TO ^C 1,,ALOPSI ;2: ASSIGNED BY PROGRAM TO AUTO-LOGOUT 2,,USEPSI ;3: ASS BY PROG TO CHAR TO PRINT RUNTIME (^T) 2,,HUPSI ;4: ASS BY PROG TO DATAPHONE HANGUP 0 0 ;6: OV, FOV, NODIV, FXU (SHOULDN'T BE ENABLED) 0 0 1,,[UTRAP [ASCIZ /PUSHDOWN OVERFLOW/]] ;9: PDL OVERFLOW 1,,EOFPSI ;10: END OF FILE 1,,DATPSI ;11: FILE DATA ERROR 1,,[UTRAP [ASCIZ /FILE ERR 3/]] ;12: "FILE COND 3" (AS YET UNDEF) 1,,[UTRAP [ASCIZ /FILE ERR 4/]] ;13: "FILE CONDITION 4" ( " " " ) 0 ;14: TIME OF DAY. 1,,ILIPSI ;15-18: I>>, MR>>, MW>>, MX>> 1,,[UTRAP [ASCIZ /ILLEG MEM READ/]] 1,,[UTRAP [ASCIZ /ILLEG MEM WRITE/]] 1,,[UTRAP [ASCIZ /ILLEG MEM EXECUTE/]] 0 ;19: SUBSIDIARY FORK TERMIATED (SHDN'T BE ON) 1,,[UTRAP [ASCIZ /SYSTEM STORAGE CAPACITY EXCEEDED/]] ;20:DRM,DSK REPEAT 3,<0> ;21-23: UNASSIGNED REPEAT ^D12,<0> ;24-35: GENERAL IFN .-CHNTAB-^D36, ;SPECIFIC EXEC COMMAND ROUTINES ;THESE ROUTINES ARE DISPATCHED TO BY THE MAIN LOOP, AS DRIVEN ;BY THE TABLES ;THE COMMAND ROUTINES ARE GROUPED AS FOLLOWS: ; REST OF XMAIN.MAC: ; STATUS COMMANDS GROUP -- STATUS, JOBSTAT, RUNSTAT, USESTAT, ; FILSTAT, DSKSTAT, SYSTAT, STATISTICS, ERRSTAT, MEMSTAT. ; TERMINAL CHARACTERISTICS COMMANDS GROUP -- HALFDUPLEX, FULLDUPLEX, ; TABS, FORMFEED, LOWERCASE, NO ... , INDICATE. ; X1CMD.MAC: ; OTHER COMMANDS, IN ALPHABETICAL ORDER. ; MOST PRIVILEGED COMMANDS. ; X2CMD.MAC, X3CMD.MAC, X4CMD.MAC, X5CMD.MAC: ; SOME COMMANDS WITH LONG ROUTINES, SEGREGATED TO REDUCE ; NORMAL WORKING PAGE SET: ; X2CMD.MAC: COPY, LIST/TYPE, REDIRECT/DETACH ; X3CMD.MAC: DIRECTORY, ; X4CMD.MAC: CREATE, PRINT ; X5CMD.MAC: NETLOAD ; ABOVE IN XMAIN.MAC: ; /, \, VERSION ;STATUS COMMANDS GROUP ;STATUS .STATU: TYPE < THE STATUS COMMANDS AVAILABLE ARE: PISTAT, DISCUSE, IMPSTAT, JOBSTAT, RUNSTAT, USESTAT, MEMSTAT, FILSTAT, DSKSTAT, AND SYSTAT. > RET ;JOBSTAT .JOBST: ETYPE < TSS JOB %J, USER %N%, %L% > JOBST0: RET ;REST REMOVED TILL GFRKS DONE. 5/22/70 ______________ ;TYPE FORK STRUCTURE MOVEI A,400000 ;SAY START AT SELF MOVEI B,CSBUF ;USE STRING BUFFER TLO B,B0 ;SAY ASSIGN HANDLES GFRKS ;GET FORK STRUCTURE HRRZ D,(B) ;POINTER TO FORKS INFERIOR SETZ E, ;INITIALIZE LEVEL COUNTER ;FALL INTO FSTRUC ;"FSTRUC" MUST BE NEXT ;FSTRUC ;RECURSIVE SUBR TO TYPE FORK STRUCTURE OF JOB. ;FOR EACH FORK, TYPES HANDLE AND STATUS. ; FILE NAME OR "PROGRAM" WOULD ALSO BE DESIRABLE IF IT WERE AVAILABLE. ;STRUCTURE INDICATED BY PUTTING A FORK'S INFERIORS RIGHT AFTER IT, ; INDENTING 3 COLUMNS PER LEVEL. ;THUS PARELLEL FORKS ARE THOSE WHICH APPEAR AT SAME INDENTATION WITH ; NO LESS-INDENTED ENTRIES BETWEEN THEM. ;TAKES: D: POINTER TO GFRKS TABLE, SET UP BY CALLER. ; E: LEVEL COUNTER, ZEROED BY TOP LEVEL CALLER. ;ENTRY POINT IS AT END BUT COMES RIGHT HERE. ;TYPE STUFF FOR THIS FORK. FSTR1: PRINT " " MOVE A,E TYPE < >; ;INDENT 3 SPACES PER LEVEL BELOW FIRST. SOJGE A,.-1 TYPE ; HRRZ B,1(D) ;GET THIS FORK'S HANDLE FROM TABLE JUMPE B,[UTYPE [ASCIZ /**/] ;NO HANDLE ASSIGNED JRST FSTR2] TRZ B,B0 ;PRINT IN FORM ## NOT 4000## MOVE A,COJFN MOVEI C,10 NOUT ;FORK HANDLE, OCTAL CALL JERRC ;JSYS ERROR ROUTINE FOR ERROR NUM IN C FSTR2: TYPE <: >; HRRZ A,1(D) ;HANDLE AGAIN CALL FSTAT ;TYPE ITS STATUS PRINT EOL ;NOW DO ALL OF THE FORK'S INFERIORS, BY RECURSION. PUSH P,D HRRZ D,(D) ;INFERIOR PTR FROM GFRKS TABLE. AOS E ;DOWN LEVEL CALL FSTRUC ;RECURSIVE CALL TO DO ENTIRE SUBTREE SOS E ;UP LEVEL POP P,D HLRZ D,(D) ;PARALLEL PTR FROM GFRKS TABLE ;ENTRY POINT. NOP IF 0 PTR GIVEN. FSTRUC: JUMPN D,FSTR1 RET ;RUNSTAT .RUNST: PRINT " " SKIPGE FORK JRST [ UTYPE [ASCIZ /NO PROGRAM/] JRST RUNST8] SKIPGE A,LFORK JRST [ UTYPE [ASCIZ /NEVER STARTED/] JRST RUNST8] ETYPE <%F%> ;TYPE "FORK N" IF THIS EXEC HAS >1 INFERIOR CALL FSTAT ;TYPE STATUS OF THE FORK RUNST8: PRINT EOL CALL LAPRNT ;PRINT THE LOAD AVERAGE JRST EOLRET ;SUBROUTINE TO PRINT THE LOAD AVERAGE. ;USED BY ^T INTERRUPT AND BY RUNSTAT LAPRNT: MOVE A,['SYSTAT'] CALL $SYSGT JUMPN B,.+2 CALL SCREWUP ;NO SUCH TABLE?? MOVSI A,14 ;INDEX OF 1 MIN. AV. HRR A,B ;TABLE PTR GETAB CALL SCREWUP ETYPE < LOAD AV. = %1Q> RET ;FORK STATUS TYPEOUT SUBR FOR "RUNSTAT" AND "JOBSTAT". ;TAKES HANDLE IN A, CLOBBERS A. ;USED IN FSTRUC (JOBSTAT), RUNSTAT, ^T PSI ROUTINE (XSUBRS.MAC) FSTAT: PUSH P,B PUSH P,C PUSH P,D RFSTS ;GET STATUS IN A, PC IN B HLRZ C,A ;B1-17 = STATUS CAIN C,-1 ; -1 = UNASSIGNED HANDLE. (OR SUPERIOR?) JRST [ MOVEI D,[ASCIZ /PROGRAM DISAPPEARED/]; ..KILLED PROGRAM JRST FSTAT8] TRZ C,B0 ;FLUSH FROZEN BIT CAIN C,6 ;BREAKPOINT? JRST FSTAT4 ;YES CAIE C,2 ;HALT OR FORCED TERM? CAIN C,3 FSTAT4: TLZ A,B0 ;YES, WASN'T RESULT OF ^C JUMPL A,[UTYPE [ASCIZ /INTERRUPTED FROM /] ;"FROZEN" BIT ON JRST .+1] ;TYPE STATUS AND PC UTYPE @[[ASCIZ /RUNNING/] [ASCIZ /IO WAIT/] [ASCIZ /HALT/] ;INCLUDES NEVER STARTED [ASCIZ /HALT: /] [ASCIZ /FORK WAIT/] [ASCIZ /SLEEP/] [ASCIZ /BREAKPOINT/]](C) ;NOTE INDEX! MOVEI D,[ASCIZ / AT %2P/] ;%2P TYPES PC FROM B CAIE C,3 JRST FSTAT8 ;GO OUTPUT "AT " ;AFTER ERROR STOP, TYPE REASON AS GIVEN ;BY PSI CHAN # IN RH OF A. USE TEXT ;FROM "START" COMMAND'S ERROR MSG TAB. MOVE D,@WHY ;SEE "START". USES A. FSTAT8: UETYPE (D) ;TYPE MSG. INCLUDES PC FROM B. FSTAT9: POP P,D POP P,C POP P,B RET ;PISTAT ;PSI IS OFF, LEVTAB=NNNNNN, CHNTAB=NNNNNN, CHN MASK=NNNNNNNNNNNN, BIP=N .PISTA: CALL CRIF SKIPGE 1,FORK JRST [ UTYPE [ASCIZ /NO PROGRAM/] JRST EOLRET] UTYPE [ASCIZ /PSI IS /] MOVEI 5,[ASCIZ /ON/] SKPIR MOVEI 5,[ASCIZ /OFF/] UTYPE 0(5) RIR HLRZ 4,2 ;LEVTAB HRRZ 5,2 ;CHNTAB RCM MOVE 6,1 ;CHN MASK MOVE 1,FORK RWM MOVE 7,1 ;BREAKS WAITING MOVE 10,2 ;BREAKS IN PROGRESS AND 10,[17B3] MOVE 1,FORK RTIW MOVE 11,2 ;USER TIW MOVNI 1,5 RTIW MOVE 12,2 ;JOB TIW ETYPE <, LEVTAB AT %4O, CHNTAB AT %5O CHANNELS ACTIVE: %6U BREAKS WAITING: %7U LEVELS IN PROGRESS: %10U FORK TIW: %11O JOB TIW: %12O> RET ; "IMSTAT" .IMPST: MOVE A,['NETRDY'] CALL READT ;READ INTO 4, 5, ... SUBI C,4 ;NEW SYSTEMS HAVE LENGTH .GT. 4 PUSH P,C ;NEW SYSTEM FLAG PUSH P,13 ;NETRDY[7]: TIME OF IMP-GOING-DOWN MSG PUSH P,12 ;NETRDY[6]: TIME OF READY LINE ON PUSH P,11 ;NETRDY[5]: TIME OF READY LINE OFF PUSH P,10 ;NETRDY[4]: IMP-GOING-DOWN HEADER PUSH P,7 ;NETRDY[3]: TIME OF LAST NCP RESET PUSH P,6 ;NETRDY[2]: NCP FLAGS (N.A.) PUSH P,5 ;NETRDY[1]: NETON PUSH P,4 ;NETRDY[0]: IMPRDY MOVE 1,COJFN ;NEEDED FOR ODTIM'S BELOW IMPST0: CALL CRIF ;TYPE CARRIAGE RETURN IF NEEDED TYPE SKIPN 0(P) TYPE SKIPE 0(P) TYPE IMPST1: CALL CRIF TYPE SKIPN -1(P) ;NETRDY[1] SAYS WHICH TYPE SKIPE -1(P) TYPE IMPST2: SKIPG -8(P) ;NEW SYSTEM? JRST IMPSTX ;NO IMPST3: SKIPN -1(P) ;NCP RESET RELEVANT ONLY IF NETON JRST IMPST4 ;NOT AVAILABLE CALL CRIF SKIPG 2,-3(P) ;NETRDY[3] HAS LAST NCP RESET TYPE JUMPLE 2,IMPST4 ;0 IS AMBIGUOUS TYPE SETZ 3, ;STANDARD FORMAT ODTIM IMPST4: SKIPN 2,-7(P) ;GTAD OF IMP-GOING-DOWN MSG ARRIVAL JRST IMPST5 ;NONE HAS ARRIVED CALL CRIF SKIPG 2 TYPE JUMPL 2,IMPS45 ;-1 MEANS SYSTEM DIDN'T HAVE TIME TYPE SETZ 3, ;STANDARD FORMAT ODTIM TYPE < THE IMP SAID IT WOULD GO DOWN AT > MOVE 1,2 LDB 2,[POINT 4,-4(P),21];HOW SOON IN 5 MIN. UNITS IMULI 2,5 CALL TIMPMN ;GTAD IN 1 PLUS MINUTES IN 2 MOVE 2,1 ;SET FOR ODTIM MOVE 1,COJFN SETZ 3, ;STANDARD FORMAT ODTIM IMPS45: TYPE < FOR > LDB 2,[POINT 10,-4(P),31];HOW LONG IN 5 MIN. UNITS IMULI 2,5 MOVEI 3,^D10 NOUT CALL JERRC TYPE < MINUTES DUE TO > LDB 2,[POINT 2,-4(P),17];REASON FIELD CAIN 2,0 TYPE CAIN 2,1 TYPE CAIN 2,2 TYPE CAIN 2,3 TYPE IMPST5: CALL CRIF SKIPN 2,-5(P) ;NETRDY[5] IS READY LINE OFF TIME TYPE JUMPE 2,IMPST6 TYPE SKIPG 2 TYPE SETZ 3, ;STANDARD FORMAT SKIPL 2 ODTIM IMPST6: CALL CRIF SKIPN 2,-6(P) ;NETRDY[6] IS READY LINE ON TIME TYPE JUMPE 2,IMPSTX TYPE SKIPG 2 TYPE SETZ 3, ;STANDARD FORMAT SKIPL 2 ODTIM IMPSTX: SUB P,[9,,9] ;FLUSH TEMPS PRINT EOL PRINT EOL RET ;USESTAT .USEST: ADD P,[10,,10] ;NOTE NO POV CHECK ____ MOVEI A,-7+0(P) ;POINTER TO BLOCK FOR STRING ACCT SETO B, ;SAY THIS JOB GACTJ ;GET ACCOUNT OF JOB CALL JERR ETYPE < USED %V% IN %C%, ACCT: %1M.> CALL PIE.P ;PIE SLICE SYSTEM? JRST USEST1 ;NO TYPE < (> MOVE A,COJFN ;JFN FOR OUTPUT GPSGN ;CONVERT PIE SLICE GROUP NAME, THIS JOB CALL JERR PRINT ")" USEST1: SUB P,[10,,10] ;FLUSH LOCALS ;ADD CODE TO TYPE USAGE OF RTI, E&S, ETC., IF USED RET ;DSKSTAT .DSKST: CALL DSKCNT ;COUNT PAGES ETYPE < %7Q TOTAL PAGES IN USE - %5Q ALLOWED, %4Q UNDELETED, %6Q DELETED > TLNE Z,B3 ETYPE < EXCLUDING FILE(S) THAT ARE LIST PROTECTED FROM YOU > ; "DISCUSE" .DISCU: MOVE A,[600000,,777777] ;DSK: DESIGNATOR GDSKC ETYPE < SYSTEM TOTAL: %2Q PAGES LEFT, %1Q USED > JRST RLJFNS ;RELEASE JFNS AND RETURN DSKCNT: SETZB D,F ;FOR SUMS OF TOTAL AND DELETED PAGES SETO A, MOVE C,JBUFP PUSH C,A HRLZI A,B2+B8+B11+B17 ;OLD, *'S, SHORT CALL, INCL. DELETED HRROI B,[ASCIZ /*.*;*/] GTJFN CALL [ CAIE A,GJFX20 CAIN A,GJFX32 JRST [ SUB P,[1,,1] ;FOR NO FILES IN DIRECTORY, SETZ G, ;CLEAR TOTAL JRST DSKST5] ;TYPE "0 PAGES" JRST JERR] MOVEM A,(C) ;STACK JFN FOR RELEASING ON MOVEM C,JBUFP ;UPDATE JFN STACK MOVE E,A ; ERR OR COMPLETION ;LOOP OVER FILES WITH GNJFN DSKST1: TLZ Z,B1 ;RESET DELETED BIT HRRZ A,E ;JFN ONLY MOVE B,[1,,FDBCTL] ;CONTROL BITS WORD OF FDB MOVEI C,C ;TO BE PUT IN C CALL $GTFDB ;GET IT JRST DSKST2 ;COULDN'T TLNE C,(FDBDEL) ;DELETED? TLO Z,B1 ;YES, SAY SO MOVE B,[1,,FDBBYV] ;# PAGES IN RH MOVEI C,C CALL $GTFDB ;DO GTFDB JSYS, NO SKIP IF NO ACCESS DSKST2: TLOA Z,F3 ;SAY ACCESS ERROR AND SKIP ADD JRST DSKST4 ;GO ADD UP PAGES DSKST3: MOVE A,E ;JFN AND FLAGS GNJFN ;STEP TO NEXT FILE JRST .+2 ;NO MORE FILES JRST DSKST1 MOVE G,D ;FORM SUM ADDI G,(F) ;OF DELETED AND UNDELETED DSKST5: MOVEI 1,0 ;SAY CONNECTED DIRECTORY GTDAL ;GET ALLOCATION FOR CONN DIR MOVE 5,1 ;SAVE FOR PRINTING RET ;PRINT RELEVANT NUMS, RELEASE JFN DSKST4: TLNE Z,B1 ;SUM DELETED OR UNDELETED JRST .+3 ADDI D,(C) ;UNDELETED TOTAL JRST DSKST3 ADDI F,(C) ;DELETED TOTAL JRST DSKST3 ;CHECK CONNECTED DIRECTORY FOR EXCEEDING DISK ALLOCATION ;USED BY LOGIN, LOGOUT, CONNECT CHKDAL: MOVEI 1,0 ;SAY CONNECTED DIRECTORY GTDAL SUB 2,1 ;USED MINUS ALLOCATED JUMPLE 2,RLJFNS ;JUMP IF NOT OVER ALLOCATION CALL CRIF ;BE SURE CARRIAGE IS AT LEFT MARGIN ETYPE <[%G OVER ALLOCATION BY %2Q PAGES] > JRST RLJFNS ;GO RELEASE JFN ;MEMSTAT ;TYPES, FOR CURRENT FORK, # PAGES, ENTRY VECTOR, ;AND A TABLE GIVING IDENTITY OF EACH PAGE IN FORK. .MEMST: SKIPGE FORK JRST [ UTYPE [ASCIZ / NO PROGRAM/] JRST EOLRET] ;FIRST TYPE TOTAL # PAGES HRLZ A,FORK PUSH P,[1000] ;HOW MANY PAGES TO DO SETZ D, MEMS1: RPACS ;CLOBBERS C IF PAGE LOCKED TLNE B,B5 AOS D AOS A SOSLE C,0(P) ;MORE PAGES TO BE DONE? JRST MEMS1 ;YES SUB P,[1,,1] ;FLUSH JUNK PRINT EOL CAIN D,1 JRST [ UTYPE [ASCIZ / ONE PAGE/] JRST MEMS2] ETYPE < %4Q PAGES>; ;PRINT ENTRY VECTOR MEMS2: MOVE A,FORK GEVEC JUMPE B,MEMS3 ;NONE HRRZ A,B HLRZ B,B ETYPE <, ENTRY VECTOR LOC %1O LEN %2O> MEMS3: PRINT EOL JUMPE D,[RET] ;DONE IF NO PAGES PRINT EOL ;NOW FALL INTO "MMAP" TO TYPE MAP ;SUBROUTINE TO TYPE MEMORY MAP FOR CURRENT FORK, FOR MEMSTAT. ;ACS: D: PAGE # ; E & F: IDENTITY OF CURRENT PAGE, A LA RMAP A & B. ; KWV, KWV1: SAVED IDENTITY OF 1ST PAGE OF GROUP. ; G: INCREMENT FOR PAGE # IN GROUP OF CONSECUTIVE PAGE IDENTITIES. MMAP: SETZ D, ;FIND EXISTING PAGE (TREAT INDIRECT POINTERS AS EXISTING) MMAP1: HRL A,FORK MMAP2: CAIL D,1000 JRST EOLRET ;NO MORE PAGES, DONE HRR A,D RPACS TLNN B,B5+B6 AOJA D,MMAP2 ;DOESN'T EXIST, TRY NEXT ;FOUND ONE, PRINT NUMBER CALL PAGID ;GET FULL IDENTITY JRST .+2 ;3-RETURN SUBR, BUT IRRELEVANT HERE. JRST .+1 MOVE KWV,E ;SAVE IDENTITY FOR LATER COMPARISONS MOVE KWV1,F ;...AND PRINTING SETZ G, ;INIT # CONSECUTIVE IDENTITIES HRRZ B,D CALL TOCT ;PRINT PAGE NUMBER IN OCTAL ;LOOK AT IDENTITY OF NEXT PAGE CALL NPAGID ;STEPS D AND GETS IDENTITY SOJA G,MMAP10 ;DIFFERENT, GO TYPE IDENTITY JRST MMAP6 ;NEXT HIGHER IN SAME FILE OR FORK ;IDENTICAL, SEE HOW MANY MORE ARE CALL NPAGID JRST .+3 ;DIFFERENT JRST .+2 ;NEXT HIGHER JRST .-3 ;IDENTICAL, KEEP LOOKING SETZ G, ;SAY IDENTICAL NOT CONSECUTIVE GROUP JRST MMAP7 ;GO PRINT "-# # ;NEXT HIGHER OF SAME FILE OR FORK, SEE HOW MANY MORE ARE CONSECUTIVE MMAP6: CALL NPAGID JRST .+2 ;DIFFERENT JRST .-2 ;CONSECUTIVE, KEEP LOOKING ;PRINT "-#" FOR GROUP OF IDENTICAL OR CONSECUTIVE PAGES MMAP7: PRINT "-" MOVEI B,-1(D) ;LAST IN GROUP WAS THE PREVIOUS PAGE CALL TOCT ;TYPE IN OCTAL ;MMAP... ;PRINT IDENTITY OF PAGES WHOSE #'S WE HAVE JUST PRINTED: ;TYPICALLY FORK OR FILE NAME, # FOR A SINGLE PAGE OR IDENTICAL GROUP, ; #-# FOR CONSECUTIVE GROUP. ALL PRECEDED BY @ IF INDIRECT. MMAP10: PRINT TAB PRINT " " TLNE KWV1,B6 UTYPE [ASCIZ /@ /] ;INDICATE INDIRECT POINTER TLNN KWV1,B5 ;DOES PAGE EXIST? JRST [ UTYPE [ASCIZ /NO PAGE/] ;CAN HAPPEN WITH INDIRECT. JRST MMAP13] TLNE KWV1,B10 JRST [ UTYPE [ASCIZ /PRIVATE/] JRST MMAP13] CAMN KWV,[-1] ;RMAP RETURNS -1 IF NO JFN FOR FILE JRST [ UTYPE [ASCIZ /FORGOTTEN FILE/] JRST MMAP13] LDB B,[POINT 9,KWV,17] ;JFN OR FORK # TLNE KWV,B0 ;ON IF FORK JRST [ UETYPE [ASCIZ /FORK %2O/] JRST MMAP11] MOVE A,COJFN SETZ C, JFNS ;PRINT FILE NAME MMAP11: TYPE < >; HRRZ B,KWV CALL TOCT ;PAGE # IN FILE OR FORK JUMPLE G,MMAP13 ;0 INDICATES ONE PAGE ONLY PRINT "-" ADDI B,-1(G) ;DON'T COUNT LAST PAGE TESTED! CALL TOCT ;PRINT LAST PAGE OF CONSECUTIVE GROUP MMAP13: TYPE ( ) TLZ Z,F1 ;USED BY "BEFORE" TLNN KWV1,B2 JRST .+3 CALL BEFORE ;TYPE COMMA OR EOL BETWEEN ITEMS PRINT "R" TLNN KWV1,B3 JRST .+3 CALL BEFORE ;SUBR WITH "AVAIL DEVICES" PRINT "W" TLNN KWV1,B9 JRST .+3 CALL BEFORE TYPE ; ;COPY-ON-WRITE TLNN KWV1,B4 JRST .+3 CALL BEFORE PRINT "E" TLNN KWV1,B7 ;LOCKED BY USER BIT JRST .+3 CALL BEFORE PRINT "L" PRINT EOL JRST MMAP1 ;GO BACK FOR ANOTHER PAGE OR GROUP ;SUBROUTINE FOR MMAP TO GET AND COMPARE IDENTITY OF PAGE ;TAKES IN D: PAGE #, IN KWV, KWV1: IDENTITY OF FIRST PAGE IN GROUP, ; IN G: PAGE # INCREMENT FOR CONSECUTIVE GROUP. ;RETURNS: E, F: IDENTITY OF PAGE, A LA RMAP. ; +1: DIFFERENT IDENTITY FROM FIRST PAGE OF GROUP ; +2: NEXT HIGHER PAGE # (THAN KWV1+G, G), G INDEXED ; +3: IDENTICAL ;IF D > 777, BEHAVES AS THOUGH CURRENT PAGE IS NON-EXISTENT. ;CLOBBERS A,B. NPAGID: ADDI D,1 ;ENTRY FOR NEXT PAGE ADDI G,1 PAGID: MOVE A,D ;ENTRY TO NOT INDEX PAGE # SETZ E, ;FOR NON-EXISTENT OR PRIVATE PAGE CAIL A,1000 JRST [ HRLZI F,B5 ;PAGES OVER 777 DON'T EXIST JRST PAGID8] HRL A,FORK RPACS HLLZ F,B ;RETURN RPACS INFO IN F TLNE B,B5 ;DOESN'T EXIST? TLNE B,B10 ;PRIVATE? JRST PAGID8 ;THIS IS ALL THE INFO WE NEED. RMAP ;GET FILE/FORK HANDLE AND PAGE # THEREIN MOVE E,A ;...INTO E. ;COMPARISON TO DETERMINE WHETHER SAME AS PREVIOUS PAGE ;COMPARE THAT INFO WHICH IS PRINTED: ; ALL E, F BITS 2-6, 9, 10. PAGID8: MOVE A,E XOR A,KWV TLNE A,-1 JRST PAGID9 ;DIFFERENT FILES OR FORKS, R1 MOVE B,F ;RMAP'S ACCESS IS WRONG (1/22/71) XOR B,KWV1 TLNE B,<37B6+1B7+3B10>B53 JRST PAGID9 ;DIFFERENT ACCESS, R1. TRNE A,-1 JRST [ MOVE A,G ADD A,KWV SUB A,E TRNE A,-1 JRST .+3 ;REALLY DIFFERENT PAGE, R1 JRST .+2] ;NEXT HIGHER PAGE #, R2 AOS (P) ;SAME IDENTITY INCLUDING PAGE #, R3. AOS (P) PAGID9: RET ;FILSTAT .FILST: PRINT EOL GJINF CAME A,B ;COMPARE LOGIN AND CONNECTED DIRECTORIES ETYPE < CONNECTED TO <%G%>. >; ;JFNS TYPE < JFNS: > MOVEI D,MAXJFN ;JFN AND COUNTER CALL JSTAT ;TYPE INFO IF JFN ASSIGNED SOJGE D,.-1 PRINT EOL ;DEVICES ASSIGNED TO THIS JOB PUSH P,[[TLNE Z,F1 ;SET RETURN FOR ASTTJ PRINT EOL RET]] ;"AVAILABLE DEVICES" ALSO COMES HERE TO TYPE DEVS ASS TO THIS JOB. ASTTJ: GJINF ;GET JOB # IN C MOVE E,C TLZ Z,F1 CALL DEVLUP ;GET NAME & CHARACTERISTICS FOR EACH ;DEVICE AND EXECUTES THE NEXT LOCATION. CALL [ CAME C,E ;ASSIGNED TO THIS JOB? RET ;NO. TLNN Z,F1 ;FIRST ONE? ("BEFORE" SETS F1) UTYPE [ASCIZ / DEVICES ASSIGNED TO THIS JOB:/] CALL BEFORE ;COMMA OR CR OR NIL. AFTER "AVAIL DEV". JRST SIXPRT] ;PRINT SIXBIT NAME FROM A. TLNE Z,F1 PRINT EOL RET ;TYPE STATUS OF JFN IN RH OF D. ;NOP IF UNASSIGNED. ;IF ASSIGNED, TYPE ;AND WHAT OPEN FOR AND "NOT OPEN" OR "DATA ERROR" OR "EOF" IF PERTINENT. ;DESTROYS A, B, C, E. USED IN "FILSTAT". JSTAT: HRRZ A,D GTSTS TLNN B,200 RET ;UNASSIGNED, RETURN. MOVE E,B ;STATUS FOR USE BELOW PRINT " " MOVE A,COJFN HRRZ B,D MOVE C,[4,,10] NOUT ;JFN, LEFT ADJ IN 4 COLS CALL JERRC HRRZ B,D SETZ C, ;DEFAULT FORMAT MOVEI A,ILIJFN MOVEM A,ILIDSP ;SET SPECIAL ILLEGAL INSTRUCTION DISPATCH MOVE A,COJFN ;PRIMARY OUTPUT JFN JFNS ;PRINT NAME OR TRAP SETZM ILIDSP ;CANCEL INSTRUCTION TRAP JRST JSTAT2 ;HERE IF JFNS TRAPS ILIJFN: TLNN E,(1B17) ;LOOK AT STATUS WORD JRST ILIPSI ;TRAPPED FOR SOME OTHER REASON TYPE PRINT EOL RET ;FROM JSTAT ;JSTAT... ;TYPE "NOT OPEN" OR LIST OF "READ", "EXECUTE", ETC. ;IF B0 ON AND B1-3 & 5-6 OFF, TYPES NOTHING. CAN THIS HAPPEN? ______ JSTAT2: PRINT TAB TLZ Z,F1 ;TELL "BEFORE" NOTHING HAS BEEN PRINTED TLNN E,B0 TYPE < NOT OPENED>; TLNN E,B1 JRST JSTAT3 CALL BEFORE ;TYPE SPACE OR COMMA-SPACE OR EOL-SPACE TYPE ; JSTAT3: TLNN E,B2 ;OK TO WRITE JRST JSTAT4 CALL BEFORE TLNN E,B4 ;ALSO OK TO CHANGE POINTER? TYPE ; ;NO TLNE E,B4 TYPE ; ;YES JSTAT4: TLNN E,B3 ;EXECUTE JRST JSTAT5 CALL BEFORE TYPE ; JSTAT5: TLNN E,B5 ;AS SPECIFIED BY PAGE TABLE JRST JSTAT6 CALL BEFORE TYPE ; JSTAT6: TLNN E,B6 ;CALL AS PROCEDURE JRST JSTAT7 CALL BEFORE TYPE ; JSTAT7: TLNN E,B9 JRST JSTAT8 CALL BEFORE TYPE ; JSTAT8: TLNN E,B8 JRST JSTAT9 CALL BEFORE TYPE ; JSTAT9: TLNE E,B1!B2 TLNN E,B0 JRST JSTA10 TLNE E,B3!B6 JRST JSTA10 HRRZ A,D RFPTR CALL JERR CALL BEFORE MOVE A,COJFN MOVEI C,12 NOUT CALL JERRC MOVEI B,"." BOUT ;INDICATE DECIMAL JSTA10: JRST EOLRET ;SYSTAT .SYSTA: CALL CRIF ;TYPE CRLF-SPACE IF NEEDED ETYPE MOVE A,['SYSTAT'] MOVEI B,14 CALL MORET ;GET LOAD AVERAGES CALL CRIF ETYPE CALL LGNCHK ;TYPE MSG IF NOT PERMITTING LOGINS CALL DWNTIM ;PRINT SHUTDOWN WARNING, IF ANY PUSH P,[-1] ;FLAG TO SAY WHICH PASS ;LOOP TO TYPE TSS JOB #, TTY #, USER FOR EACH JOB SYST1: SETO D, GTB 1 ;GET # POSSIBLE JOBS HRLZ D,A ;AOBJN COUNT,,JOB # ;TOP OF LOOP SYST2: GTB 1 ;TABLE 1: POSITIVE IF JOB EXISTS JUMPL A,SYST9 ;HAVE A REAL JOB #. PRINT IT. GTB 0 JUMPL A,[GTB 3 ;DET, CHECK FOR SYSTEM HRREI B,0(A) ;LOGIN IN DIR JUMPL B,SYST9 ;? CAIN B,1 ; IS ALWAYS DIR # 1 JRST [ SKIPG 0(P) ;DET & , PASS 3? JRST SYST9 ;NO, IGNORE JRST SYST3] ;YES, PRINT SKIPL 0(P) ;DET & NOT , PASS 1? JRST SYST9 ;NO, SKIP IT JRST SYST3] ;PRINT SKIPE 0(P) ;NON DET JOB, PASS 2? JRST SYST9 ;NO, SKIP IT ;PRINT ONE JOB SYST3: TLON Z,F1 ;TYPE HEADER FIRST TIME. TYPE < JOB TTY USER SUBSYS > PRINT " " HRRZ B,D MOVE A,COJFN MOVE C,[4,,^D10] ;LEFT ADJ IN 4 COLS, DECIMAL NOUT ;CONVERT AND PRINT JOB # CALL JERRC ;"DET" OR "TTY N" GTB 0 ;TABLE 0: LH NEG OR LINE # FOR THIS JOB JUMPL A,[UTYPE [ASCIZ /DET /] JRST SYST4] HLRZ B,A MOVE A,COJFN MOVE C,[5,,10] ;LEFT ADJ IN 5 COLS, OCTAL NOUT ;LINE #. CALL JERRC ;SYSTAT... ;SUBSYSTEM NAME ;USER NAME OR "?" IF CONVERSION FAILS. SYST4: GTB 3 ;TABLE 3: RH: USER'S DIR # HRREI B,(A) ;0 IF NOT LOGGED IN JUMPLE B,[UTYPE [ASCIZ /NOT LOGGED IN /] JRST SYST5] MOVE A,COJFN DIRST ;CONVERT DIR # TO STRING AND PRINT PRINT "?" ;NOT FOUND (NO SYSTEM ERROR # IN A) SYST5: MOVE A,['JOBNM2'] CALL $SYSGT JUMPE B,SYST52 ;SECOND TABLE NOT IMPLEMENTED SYST51: HRR A,B HRL A,D ;FORM JOB#,,TABLE# GETAB CALL JERR JRST SYST53 SYST52: MOVE A,['JOBNAM'] CALL $SYSGT ;GET # OF TABLE CONTAINING SNAMES INDICES JUMPE B,SYST8 ;NO SUCH TABLE: NOT IMPLEMENTED YET HRR A,B ;TABLE NUMBER HRL A,D ;INDEX: TSS JOB # GETAB ;GET SNAMES INDEX INTO A CALL JERR MOVE C,A MOVE A,[SIXBIT /SNAMES/] CALL $SYSGT ;GET # OF SUBSYSTEM NAMES TABLE JUMPE B,SYST8 HRR A,B HRL A,C ;INDEX FROM TABLE JOBNAM GETAB CALL JERR SYST53: PUSH P,A ;POSITION CARRIAGE, TYPING A MAXIMUM OF 10 SPACES MOVEI C,12 SYST5A: PRINT " " MOVE A,COJFN RFPOS ;VALID ONLY FOR TTYS MOVEI B,(B) ;MASK HORIZ POSITION CAIGE B,24 SOJGE C,SYST5A POP P,A ;NAME AGAIN JUMPE A,[PRINT "?" JRST SYST8] CALL SIXPRT ;PRINT IT ;SIXPRT IS WITH "AVAIL DEV" IN X1CMD.MAC SYST8: PRINT EOL SYST9: AOBJN D,SYST2 AOS 1,0(P) ;SWITCH PASSES CAIGE 1,2 ;DONE ALL? JRST SYST1 ;NO, DO ANOTHER PASS SUB P,[1,,1] PRINT EOL RET ;STATISTICS .STATI: CONFIRM ;CAN'T USE TABLE BIT "ONEWD" BECAUSE ;FUDGE-ENTRY FOR "STAT" TYPES OUT AFTER DISPATCH MOVE A,[SIXBIT /SYSTAT/] CALL READT ;READ SYSTEM STATISTICS TABLE INTO AC'S 4-13 ETYPE < IDLE %4T WAITING %5T CORE MGMT %6T PAGER TRAPS %7T DRM READS %10Q WRITES %11Q DSK READS %12Q WRITES %13Q > MOVE A,[SIXBIT /NCPGS/] CALL $SYSGT ETYPE < %1Q PAGES OF USER CORE > MOVE A,[SIXBIT /SYSTAT/] MOVEI B,10 CALL MORET ;READ MORE OF TABLE TIME ;TOTAL UPTIME OF SYSTEM CALL FLOAT EXCH 1,6 CALL FLOAT ;FLOAT NBAL TOTAL EXCH 1,7 CALL FLOAT ;FLOAT NRUN TOTAL EXCH 1,6 FDVR 6,1 ;NRUN AVERAGE FDVR 7,1 ;NBAL AVERAGE ETYPE < %4Q TERM WAKEUPS %5Q TERM INTERRUPTS NBAL AV %7Q NRUN AV %6Q >; MOVE A,[SIXBIT /QTIMES/] CALL READT ETYPE < RUNTIME OF JOBS ON Q'S 0-4 (MSEC) %4Q %5Q %6Q %7Q %10Q >; ;STATISTICS... ;TABLE OF SUBSYSTEM USAGE STAT3: TYPE < SUBSYS TIME PG FLTS TIME/FLT AV W-SET FLT/WAKE > MOVEI 6,1(P) ;PLACE ON STACK TO STORE TABLE NUMBERS HRLI 6,5 ADD P,[NSNAMS,,NSNAMS] MOVSI 5,-NSNAMS ;NUMBER OF TABLES TO EXAMINE STAT51: MOVE A,SNAMS(E) ;GET SIXBIT NAME OF TABLE CALL $SYSGT MOVEM B,@6 ;SAVE TABLE NUMBER AOBJN 5,STAT51 HLLZ 4,0(6) ;LENGTH OF (FIRST) TABLE STAT5A: MOVSI 5,-NSNAMS ;TABLE COUNTER FOR EACH SUBSYS HRRZ A,@6 GTB (A) ;GET NAME OF SUBSYSTEM IN THIS SLOT JUMPE A,STAT5Z ;0 MEANS NONE THERE PRINT " " CALL SIXPRT ;PRINT THE NAME PRINT TAB AOBJN 5,.+1 STAT6A: HRRZ A,@6 ;GET 2ND ENTRY GTB (A) ;GET TIME PUSH P,A ;SAVE FOR LATER MOVE B,A CALL STAT5N ;PRINT IT AOBJN 5,.+1 ;KEEP POINTER UP TO DATE STAT6B: HRRZ A,@6 ;GET FAULTS GTB (A) MOVE B,A CALL STAT5N ;PRINT IT AOBJN 5,.+1 ;UPDATE STAT6C: MOVE A,B CALL FLOAT EXCH A,0(P) ;FLTS TO PDL, TIME TO A CALL FLOAT FDVR A,0(P) ;TIME PER FAULT ETYPE < %1Q> ;PRINT IT STAT6E: HRRZ A,@6 GTB (A) PUSH P,A ;WAKES & AV. WORKING SET SIZE LDB A,[POINT 15,A,14] ;THIS WORD HAS TWO FIELDS CALL FLOAT ;FLOAT EACH FIELD EXCH A,0(P) ;WAKES TO PDL, WSET TO A TLZ A,(-1B14) CALL FLOAT FDVR A,0(P) ;COMPUTE AVERAGE ETYPE < %1Q> STAT6F: MOVE A,-1(P) ;FAULTS FDVR A,0(P) ;FAULTS/WAKEUP ETYPE < %1Q> STAT6G: SUB P,[2,,2] ;FLUSH JUNK AOBJP 5,STAT5Y ;ANYMORE TABLES TO PRINT? STAT5C: HRRZ A,@6 ;TABLE NUMBER GTB (A) ;GET DATA MOVE B,A CALL STAT5N ;PRINT DECIMAL VALUE AOBJN 5,STAT5C STAT5Y: PRINT EOL STAT5Z: AOBJN 4,STAT5A SUB P,[NSNAMS,,NSNAMS] ;REMOVE TEMP STORAGE STAT6: JRST EOLRET ;PRINT FORMATTED NUMBER STAT5N: MOVE A,COJFN MOVE C,[1B0+1B2+1B4+12B17+^D10] NOUT JRST [ CAIE A,NOUTX2 ;CHECK FOR COLUMN OVERFLOW ERROR CODE CAIN C,NOUTX2 ;IN A OR C RET ;ALLOW IT JRST JERR] ;REPORT ANY OTHER ERROR RET ;TABLES TO BE PRINTED IN STATISTICS FOR SUBSYSTEMS SNAMS: SIXBIT /SNAMES/ ;MUST BE FIRST SIXBIT /STIMES/ ;MUST BE SECOND SIXBIT /SPFLTS/ ;MUST BE THIRD SIXBIT /SWAKES/ ;MUST BE FOURTH ;*** OTHERS MAY BE INSERTED HERE *** NSNAMS==.-SNAMS ;ERRSTAT: PRINT VARIOUS ERROR INFORMATION .ERRST: MOVEI A,400000 RPCAP TRNN B,1B18+1B19+1B20+1B21 ;WHEEL, CONFI, OPER, MAINT. JRST CERR ;DISK ERRORS MOVE A,[SIXBIT /DSKERR/] CALL READT ;READ DISK ERRORS TABLE INTO AC'S D + . JUMPN D,.+2 JUMPE 11,[UETYPE [ASCIZ / NO DISK ERRORS /] JRST SYST11] ETYPE < DISK ERRORS: %4Q RECOVERABLE > JUMPE D,.+2 ETYPE < COMMAND WORDS FOR LAST RECOVERABLE ERROR: %5O %6O %7O ERROR BITS: %10O >; ETYPE < %11Q IRRECOVERABLE >; JUMPE 11,.+2 ETYPE < COMMAND WORDS FOR LAST IRRECOVERABLE ERROR: %12O %13O %14O ERROR BITS: %15O >; ;DRUM ERRORS SYST11: MOVE A,[SIXBIT /DRMERR/] CALL READT JUMPE D,[UETYPE [ASCIZ / NO DRUM ERRORS /] JRST SYST12] ETYPE < %4Q DRUM ERRORS COMMAND WORDS FOR LAST ERROR: %5O %6O ERROR BITS: %7O >; SYST12: JRST EOLRET ;SUBROUTINE TO READ SYSTEM TABLE WHOSE NAME IS IN A INTO AC'S 4-16. ;USED IN SYSTAT, ERRSTAT. READT: SETZ B, ;NORMAL ENTRY: START AT BEGINNING OF TABLE MORET: MOVE D,B ;ENTRY FOR TABLE INDEX IN B CALL $SYSGT JUMPN B,.+2 CALL SCREWUP ;NO SUCH TABLE HLLZ C,B ;FORM AOBJN INDEX SOJGE D,[AOBJP C,[RET] ;PASS UNWANTED ENTRIES JRST .] PUSH P,[D] ;INIT PTR TO AC'S TO STORE VALUES IN READT1: HRR A,B ;TABLE # HRL A,C ;INDEX GETAB ;READ A WORD OF TABLE INTO A CALL JERR MOVEM A,@(P) AOS A,(P) CAIGE A,P ;STOP BEFORE OVERWRITING P! AOBJN C,READT1 ;END-OF-TABLE TEST AND LOOP SUB P,[1,,1] RET ;TERMINAL STATUS COMMAND "TRMSTAT" .TRMST: SKIPN PTTYMD ;DOES PROGRAM HAVE A TERMINAL? ERROR TRMST0: MOVE 1,COJFN RFMOD MOVE 3,[7B3!177B10!177B17!3B27!3B31!3B33] ;STPAR BITS AND 2,3 ;EXTRACT THESE ANDCAM 3,PTTYMD+0 ;FLUSH FROM PTTYMD IORM 2,PTTYMD+0 ;UPDATE GTTYP ETYPE < TERMINAL TYPE: %2Q.> PRINT EOL TRMST1: MOVSI 1,(1B1) TDNN 1,PTTYMD+0 TYPE < LACKS> TDNE 1,PTTYMD+0 TYPE < HAS> TYPE < MECHANICAL FORMFEED> PRINT EOL TRMST2: MOVSI 1,(1B2) TDNN 1,PTTYMD+0 TYPE < LACKS> TDNE 1,PTTYMD+0 TYPE < HAS> TYPE < MECHANICAL TABS> PRINT EOL TRMST3: MOVSI 1,(1B3) TDNN 1,PTTYMD+0 TYPE < LACKS> TDNE 1,PTTYMD+0 TYPE < HAS> TYPE < LOWERCASE> PRINT EOL TRMST4: LDB 2,[POINT 7,PTTYMD+0,10] ETYPE < PAGE LENGTH IS: %2Q.> PRINT EOL TRMST5: LDB 2,[POINT 7,PTTYMD+0,17] ETYPE < LINE WIDTH IS: %2Q.> PRINT EOL TRMST6: TLZ Z,F1 ;COMMUNICATE WITH "BEFORE" TYPE < WAKE-UP SET: > LDB 1,[POINT 2,PTTYMD+0,21] CAIE 1,3 JRST TRMS60 CALL BEFORE TYPE JRST TRMS62 TRMS60: MOVEI 1,1B20 TDNN 1,PTTYMD+0 JRST TRMS61 CALL BEFORE TYPE TRMS61: MOVEI 1,1B21 TDNN 1,PTTYMD+0 JRST TRMS62 CALL BEFORE TYPE TRMS62: MOVEI 1,1B22 TDNN 1,PTTYMD+0 JRST TRMS63 CALL BEFORE TYPE TRMS63: MOVEI 1,1B23 TDNN 1,PTTYMD+0 JRST TRMS64 CALL BEFORE TYPE TRMS64: PRINT EOL TRMST7: LDB 2,[POINT 2,PTTYMD+0,25] TYPE < ECHO MODE IS: > CAIN 2,0 TYPE CAIN 2,1 TYPE CAIN 2,2 TYPE CAIN 2,3 TYPE PRINT EOL TRMST8: TYPE < LINKS ARE BEING > MOVEI 1,1B26 TDNN 1,PTTYMD+0 TYPE TDNE 1,PTTYMD+0 TYPE PRINT EOL TRMST9: TYPE < TERMINAL DATA MODE IS: > MOVEI 1,1B29 TDNE 1,PTTYMD+0 TYPE TDNN 1,PTTYMD+0 TYPE PRINT EOL TRMS10: TYPE < LOWERCASE OUTPUT IS BEING > MOVEI 1,1B30 TDNN 1,PTTYMD+0 TYPE TDNE 1,PTTYMD+0 TYPE PRINT EOL TRMS11: TYPE < LOWERCASE INPUT IS BEING > MOVEI 1,1B31 TDNN 1,PTTYMD+0 TYPE TDNE 1,PTTYMD+0 TYPE PRINT EOL TRMS12: LDB 2,[POINT 2,PTTYMD+0,33] CAIN 2,0 TYPE < FULL DUPLEX> CAIN 2,2 TYPE < CHARACTER HALF DUPLEX> CAIN 2,3 TYPE < LINE HALF DUPLEX> CAIN 2,1 TYPE < UNDEFINED DUPLEXITY> PRINT EOL TRMS13: TLZ Z,F1 ;INITIALIZE "BEFORE" TYPE < TAB STOPS:> MOVE 2,[POINT 1,PTTYMD+1] MOVEI 3,0 ;COLUMN TO PRINT MOVEI 4,^D<3*36> ;HOW MANY TO TEST TRM131: ILDB 1,2 JUMPE 1,TRM132 ;NO TAB IN THIS COLUMN CALL BEFORE ETYPE <%3Q> TRM132: ADDI 3,1 ;BUMP COLUMN NUMBER SOJG 4,TRM131 TRMS14: MOVEI 3,3 ;TYPE BEING SCANNED FOR, THIS PASS TRM141: MOVE 4,[POINT 2,PTTYMD+4] ;INITIAL POINTER TO CCOC BYTES MOVEI 5,100 ;CHARACTER TO PRINT MOVEI 6,40 ;HOW MANY TO CHECK TLZ Z,F1!F2 ;FOR "BEFORE" AND HEADING PRINTER TRM142: ILDB 1,4 ;PICK UP CCOC BYTE CAIE 1,0(3) ;SAME AS THAT BEING SCANNED FOR? JRST TRM145 ;NO TRM143: TLOE Z,F2 ;HAS HEADING BEEN OUTPUT? JRST TRM144 ;YES CAIN 3,0 TYPE < IGNORED CONTROLS:> CAIN 3,1 TYPE < INDICATED CONTROLS:> CAIN 3,2 TYPE < SENT CONTROLS:> CAIN 3,3 TYPE < SIMULATED CONTROLS:> TRM144: CALL BEFORE ;PRINT COMMA IF NEEDED PRINT "^" PRINT 0(5) TRM145: ADDI 5,1 ;MOVE TO NEXT CHARACTER SOJG 6,TRM142 ;CONTINUE THIS SCAN SOJGE 3,TRM141 ;MOVE TO NEXT TYPE RET ;TERMINAL CHARACTERISTICS COMMANDS GROUP ; LOWERCASE, FORMFEED, TABS, NO LOWERCASE, NO FORMFEED, NO TABS, ; RAISE, NO RAISE, HALFDUPLEX, FULLDUPLEX, INDICATE. ;THESE COMMANDS CHANGE THE FILE MODE WORD AND THE CONTROL CHARACTER ;OUTPUT CONTROL (CCOC) WORDS FOR THE PRIMARY OUTPUT FILE, ;AND ALSO THE THREE SETS OF THESE VALUES KEPT IN STORAGE. ;THE "NO" PREFIXED VERSIONS GO THRU THE SAME ROUTINES AS THE UNPREFIXED ;VERSIONS, BUT WITH F1 SET WHICH REVERSES THE EFFECT OF THE SUBROUTINES ;THEY CALL. F1 IS CLEAR ON DISPATCH FROM THE MAIN LOOP. .FULLD: TLC Z,F1 ;"FULLDUPLEX" = "NO HALFDUPLEX". .HALFD: MOVEI C,3B33 ;"HALFDUPLEX". "HALF DUPLEX" MODE BIT. JRST CMOD ;CHANGE FILE MODE WORD .FORMF: HRLZI C,B1 ;"FORMFEED". "HAS MECH. FF" MODE BIT MOVE D,[POINT 2,(E),25] ;POINTER TO ^L CCOC BYTE JRST TABS1 .TABS: HRLZI C,B2 ;"TABS". "HAS HARDWARE TABS" MODE BIT MOVE D,[POINT 2,(E),19] ;PTR TO ^I CCOC BYTE TABS1: CALL CMOD ;CHANGE FILE MODE WORD JRST CCCOC ;CHANGE CONT. CHAR. OUTPUT CONT. WORDS ;LOWERCASE: CONTROLS LOWER CASE OUTPUT. ;IT MAY ALSO BE NECESSARY TO CLEAR "INDICATE WITH %" BIT, ;BUT PREFERABLE NOT TO IF IT HAS NO EFFECT WHEN B3 ON. .LOWER: HRLZI C,B3 ;"LOWERCASE". "HAS LOWER CASE" MODE BIT. JRST CMOD ;CHANGE FILE MODE WORD ;RAISE: CONTROLS CONVERSION OF LOWER CASE TO UPPER ON INPUT. .RAISE: MOVEI C,1B31 ;"CONVERT LOWER CASE TO UPPER" MODE BIT ;CHANGE TELETYPE MODE WORD SUBR ;CHANGES MODE IN EFFECT ;TAKES: C: MASK INDICATING BITS TO CHANGE. ; AC Z LH BIT F1: ON TO CLEAR BIT(S), OFF TO SET THEM. ;PRESERVES D, DESTROYS A, B. CMOD: MOVE A,COJFN ;OUTFILE IS MOST LIKELY TO BE TTY RFMOD ANDCAM C,B TLNN Z,F1 IORM C,B STPAR ;THESE ARE ALL TERMINAL PARAMETERS RET ;LENGTH (OF PAGE IS) .LLENG: NOISE (OF PAGE IS) CALL DECIN JRST CERR ALLOW TSPC+TALT+TEOL CONFIRM CAIL A,5 CAILE A,^D127 JRST CERR MOVE C,A MOVE 1,COJFN RFMOD DPB C,[POINT 7,2,10] STPAR RET ;TERMINAL TYPE IS ;NOTE: GET SOMEBODY AT BBN TO ASSIGN NEW (UNIQUE) TERMINAL NUMBERS ; IN THE MONITOR. THIS AVOIDS CONFUSION WITH OTHER SITES. ; LOCAL STTYP NUMBERS SHOULD BE NEGATIVE NUMBERS. .TERMI: NOISE (TYPE IS) KEYWD $TERMI 0 JRST CERR JRST (KWV) $TERMI: TABLE TE 33,,.T33 TE 35,,.T35 TE 37,,.T37 TE 4023,,.DATA1 TE AJ,,.TI TE ANDERSON-JACOBSON,,.TI TE BEEHIVE,,.BEEHI TE BENDIX,,.BENDI TE COMPUTER-DEVICES,,.TI TE DATA100,,.DATA1 TE EXECUPORT,,.TI TE INFOTON,,.INFOT TE LA30 TE LINEPROCESSOR,,.LINEP TE LOGIPORT,,.BENDI TE NCR,,.TI TE NVT TE OMRON,,.OMRON TE SCOPE,,.SCOPE TE TEKTRONIX-4023,,.DATA1 TE TERMINET,,.LA30 TE TI,,.TI TE TI733 TE VTS TEND .OMRON: MOVEI B,14 JRST .TTY3 .LINEP: SKIPA B,[13] ;SRI-ARC TERMINAL TYPE .TI733: MOVEI B,11 JRST .TTY3 .T33: TDZA B,B .T35: MOVEI B,1 JRST .TTY3 .T37: SKIPA B,[2] .TI: MOVEI B,3 JRST .TTY3 .LA30: SKIPA B,[10] .NVT: MOVEI B,7 ;TERM TYPES 4, 5, AND 6 RESERVED ;SO IS 13 .TTY3: CONFIRM MOVE A,COJFN STTYP RET ;DUPLEXITY IS DETERMINED ONLY BY "HALF" AND ;"FULL". NVT'S ARE HALF ONLY AS A DEFAULT ;TERMINAL (TYPE IS) SCOPE (PAGE LENGTH) (PAGE WIDTH) .SCOPE: ALLOW TSPC+TALT NOISE (PAGE LENGTH) CALL DECIN JRST CERR ALLOW TSPC+TALT CAIL A,5 CAILE A,^D127 JRST CERR PUSH P,A NOISE (PAGE WIDTH) CALL DECIN JRST CERR ALLOW TSPC+TALT+TEOL CAILE A,^D127 JRST CERR PUSH P,A SCOPE1: CONFIRM MOVE 1,COJFN RFMOD POP P,C DPB C,[POINT 7,2,17] ;SET WIDTH POP P,C DPB C,[POINT 7,2,10] ;LENGTH STPAR MOVEI 2,12 ;SCOPE TERMINAL TYPE STTYP RET ;TERMINAL (TYPE IS) BENDIX .BENDI: PUSH P,[^D16] PUSH P,[^D72] JRST SCOPE1 ;TERMINAL (TYPE IS) BEEHIVE .BEEHI: PUSH P,[^D20] PUSH P,[^D72] JRST SCOPE1 ;TERMINAL TYPE INFOTON .INFOT: PUSH P,[^D23] PUSH P,[^D72] JRST SCOPE1 ;TERMINAL TYPE DATA100 .DATA1: PUSH P,[^D24] PUSH P,[^D72] JRST SCOPE1 ;TERMINAL TYPE VTS .VTS: PUSH P,[^D43] PUSH P,[^D72] JRST SCOPE1 ;WIDTH OF TERMINAL LINE .LWIDTH: NOISE (OF LINE IS) CALL DECIN JRST CERR ALLOW TSPC+TALT+TEOL CONFIRM CAILE A,177 ;127. IS MAX MOVEI A,177 MOVE C,A MOVE A,COJFN RFMOD DPB C,[POINT 7,B,17] STPAR RET ;INDICATE (FORMFEED) .INDIC: NOISE (FORMFEED) CONFIRM TLO Z,F2 MOVE D,[POINT 2,(E),25] ;SUBR TO CHANGE CCOC BYTE TO SIMULATE (IF F1 ON & F2 OFF) ; OR SEND (IF F1 AND F2 OFF) OR INDICATE (IF F2 ON). ;BYTE TO CHANGE IS INDICATED BY A BYTE PTR IN D, INDEXED BY E. ;DESTROYS A, B, C, E. CCCOC: MOVE A,COJFN RFCOC MOVEI E,B CALL CCCOCS ;OPERATE ON CCCOC WORDS IN B,C MOVE A,COJFN SFCOC ;PUT NEW VALUE INTO EFFECT MOVEI E,ETTYMD+4 ;OPERATE ON STORED VALUES CALL CCCOCS MOVEI E,PTTYMD+4 ;SUBSUBROUTINE TO OPERATE ON BYTE IN WORDS E POINTS TO CCCOCS: MOVEI A,2 ;2 = SEND CODE TLNE Z,F1 MOVEI A,3 ;3 = SIMULATE TLNE Z,F2 MOVEI A,1 ;1 = INDICATE BY ^X DPB A,D RET