;X4CMD.MAC;35 16-DEC-75 16:57:30 EDIT BY PLUMMER ;1.54 ;MAKE .OFFLI AND .ONLIN CHECK THROUGH 1 MILLION WORDS ;X4CMD.MAC;33 25-SEP-75 10:04:46 EDIT BY PLUMMER ;X4CMD.MAC;32 22-SEP-75 10:23:22 EDIT BY PLUMMER ; WARN OF SHUTDOWN ALREADY IN PROGRESS IN HALT ; BY SUBCOMMAND TO HALT ;X4CMD.MAC;27 16-SEP-75 13:55:27 EDIT BY PLUMMER ; PARC CHANGES... REMINDERS IN CREATE, REDO ^EINIT ;X4CMD.MAC;26 10-APR-75 12:21:56 EDIT BY PLUMMER ; ALLOW PASSWORD INPUT WHEN NOT REQUIRED IN "ENABLE" ;X4CMD.MAC;24 28-MAR-75 13:55:44 EDIT BY PLUMMER ; SUPPRESS PRINTING OF HASHED PASSWORDS ;X4CMD.MAC;23 26-MAR-75 13:32:05 EDIT BY PLUMMER ; ADD "ABSOLUTE SOCKET" CAPABILITY ;X4CMD.MAC;22 17-MAR-75 11:39:18 EDIT BY PLUMMER ; CHANGE ..DIRE TO ...DIR ;X4CMD.MAC;21 17-MAR-75 10:49:17 EDIT BY PLUMMER ; RESET BECOMES $RESET FOR MACRO 50 ;X4CMD.MAC;20 4-MAR-75 17:31:28 EDIT BY PLUMMER ;^E LIMIT CAPABILITES ;X4CMD.MAC;13 21-JAN-75 11:04:11 EDIT BY PLUMMER ; MAKE "KFACT" LEFT JUSTIFIED ;X4CMD.MAC;12 2-JAN-75 12:25:57 EDIT BY PLUMMER ;1.53 ;X4CMD.MAC;11 31-DEC-74 10:33:36 EDIT BY PLUMMER ; FIX DATE COMPARE AT CHKDA4+ (PARC) ;X4CMD.MAC;10 18-DEC-74 13:05:58 EDIT BY PLUMMER ; MORE OPRFN'S ; OPRFNS ;X4CMD.MAC;2 12-DEC-74 13:49:02 EDIT BY PLUMMER ; GATHER ALL PRIVILEDGED COMMANDS FROM X1 TO HERE ;X4CMD.MAC;1 2-DEC-74 10:21:21 EDIT BY PLUMMER ; 1.52 ;"NO MAILBOX" SUBCOMMAND FOR "^E CREATE" ;X4CMD.MAC;10 15-JUL-74 17:12:27 EDIT BY PLUMMER ; USE SYSTEM DEFAULTS FOR DIRECTORY PROTECTION AND DEFAULT ; FILE PROTECTION. CHANGE DIRPNT TO CORRESPOND ;X4CMD.MAC;7 9-JUL-74 11:42:35 EDIT BY PLUMMER ; "CREATE" AND "PRINT" DO AUTOMATIC "BREAK" AND "REFUSE" ;X4CMD.MAC;5 12-APR-74 13:28:15 EDIT BY PLUMMER ; ALLOW FOR CRDIR TO SKIP ;X4CMD.MAC;4 25-FEB-74 14:57:20 EDIT BY PLUMMER ; ADD NETWIZARD CAPABILITY ;X4CMD.MAC;19 2-OCT-73 13:13:37 EDIT BY PLUMMER ; 1.51 ; CHANGE .NOT TO ..NOT TO ELIMINATE CONFLICT WITH MAIN .NOT ; 1.50 ; END CONDITIONAL ON DST10X ; REMOVE END SO X5 WILL GET ASSEMBLED ; 1.49 ; 1B16 TO CRDIR FOR KILL ; 1.48 ; ^E PRINT TYPES PASSWORD ONLY IN "VERBOSE" MODE ; 1.47 ; 1.46 ; MAINTENANCE CAPABILITY ADDED TO PRINT AND CREATE ; PDP-10 TENEX EXECUTIVE ;SEE XMAIN.MAC FOR COMMENTS ON ASSEMBLY ;ROUTINES TO DECODE AND EXECUTE SPECIFIC COMMANDS, CONTINUED. ;THIS FILE CONTAINS MORE OF THE LONG AND LITTLE USED COMMANDS, ;SEGREGATED TO MINIMIZE PAGE FAULTS IN NORMAL USE. ;CONTENTS: ; PRINT (NAME) ;PRINTS INFO ASSOC W DIRECTORY ; CREATE (NAME) ... ;CREATES AND MODIFIES ;DIRECTORIES (AND THUS USERS) .DIRECTIVE XSRCVN %X4 %X4==%X4 ;^E PRINT (NAME) [VERBOSE] ;PRINTS ALL OF THE CHARACTERISTICS ASSOCIATED WITH A DIRECTORY: ; PASSWORD, PRIVILEGES, MODE, SPECIAL RESOURCE INFO, DIRECTORY NUMBER, ; DEFAULT FILE PROT, DIREC PROT, FILE RETENTION SPECS, ; DIRECTORY & USER GROUPS. ;ADD'L KEYWORD "VERBOSE" OR SUBCOMMAND "VERBOSE" CAUSES ALL TO ;BE PRINTED, OTHERWISE ONLY NON-DEFAULT FIELDS. .PRINT: NOISE CALL DIRNAM ;INPUT DIRECTORY NAME, GET # AND BITS IN A ALLOW TALT+TSPC+TEOL+TCOM ALTYPE ( ) CALL SPRTR ;ANALYZE & CHECK TERMINATOR JRST [ ;R1: MORE ARG: ALLOW "PRINT NAME VERBOSE" KEYWD $PRINT 0 ;NULL CAN'T GET HERE JRST CERR CALL (KWV) JRST .+2] TLO Z,F1 ;R2: COMMA, SAY GET SUBCOMMANDS ;R3: END OF COMMAND CONFIRM CALL SUPER PUSH P,A ;SAVE USER # THRU SUBCOMMANDS CALL BREAK2 ;DO "BREAK" AND "REFUSE" TLNE Z,F1 SUBCOM $PRINT ;INPUT SUBCOMMANDS POP P,A MOVEI A,(A) ;MASK USER # MOVEI B,1(P) ;BLOCK WILL BE IN PUSHDOWN HRRO C,CSBUFP ;PUT PASSWORD IN STRING STORAGE AREA MOVEI D,20 ;ALLOCATE 20-WORD BLOCK IN PD (INCLUDES SPARE PUSH P,[0] ;...WORDS, BECAUSE ADDITIONS ARE LIKELY) SOJG D,.-1 GTDIR ;GET ALL THE INFO INTO THAT BLOCK MOVEI E,(B) ;BLOCK LOCATION PUSH P,[CMDIN4] ;SET RETURN FOR "DIRPNT" & FALL IN ;DIRPNT ;PRINT DIRECTORY DESCRIPTION FROM GTDIR-FORMAT BLOCK THAT E POINTS TO. ;OMITS DEFAULT VALUES UNLESS BIT F3 IN LH Z IS ON. ;FOR "PRINT" COMMAND AND FOR "LIST" SUBCOMMAND OF "CREATE". ;CLOBBERS B. DIRPNT: SKIPN A,(E) ;NAME IS NOT IN BLOCK FOR "PRINT". JRST PR1 TYPE < NAME > CALL CTYPE ;NAME FOR "CREATE" CASE PRINT EOL PR1: SKIPN A,1(E) JRST [ TLNE Z,F3 UTYPE [ASCIZ / NO PASSWORD /] JRST PR2] TLNN Z,F3 ;DON'T PRINT PASSWORD IF NOT VERBOSE JRST PR2 LDB B,[POINT 6,A,11] ;GET BYTE SIZE OF PASSWORD CAIN B,^D36 ;HASHED PASSWORD? JRST PR2 ;YES, CANNOT BE PRINTED TYPE < PASSWORD > CALL CTYPE PRINT EOL PR2: MOVE B,2(E) ;DISK LIMIT TLNN Z,F3 CAIE B,750 ;DEFAULT VALUE ETYPE < DISK LIMIT %2Q > ;PRIVILEGES MOVE B,3(E) TRNN B,1B18 CALL F3NOT TRZE B,1B18 TYPE < WHEEL > TRNN B,1B19 CALL F3NOT TRZE B,1B19 TYPE < OPERATOR > TRNN B,1B20 CALL F3NOT TRZE B,1B20 TYPE < CONFIDENTIAL INFORMATION ACCESS > TRNN B,1B21 CALL F3NOT TRZE B,1B21 TYPE < MAINTENANCE > TRNN B,1B22 CALL F3NOT TRZE B,1B22 TYPE < NETWIZARD > TRNN B,1B23 CALL F3NOT TRZE B,1B23 TYPE < ABSOLUTE SOCKET > TLNN Z,F3 JUMPE B,.+2 ;NO MORE PRIVILEGES ETYPE < OTHER PRIVILEGE BITS %2O > ;DIRPNT... ;MODE MOVE B,4(E) TLNN B,B0 CALL F3NOT TLZE B,B0 TYPE < FILES ONLY > TLNN B,B1 CALL F3NOT TLZE B,B1 TYPE < ALPHANUMERIC ACCOUNTS > TLNN B,B2 CALL F3NOT TLZE B,B2 TYPE < REPEAT LOGIN MESSAGES > TLNN Z,F3 JUMPE B,.+2 ;TEST FOR ADDITIONAL MODE BITS ETYPE < OTHER MODE BITS %2O > SKIPN B,5(E) TLNE Z,F3 ETYPE < SPECIAL RESOURCE INFORMATION %2O > SKIPN B,6(E) JRST [ TLNE Z,F3 UTYPE [ASCIZ / NO DIRECTORY NUMBER /] ;0: NOT ASSIGNED YET ("CREATE" CASE) JRST .+2] ETYPE < DIRECTORY NUMBER %2O > SKIPN B,7(E) JRST [ TLNE Z,F3 TYPE < DEFAULT FILE PROTECTION: SYSTEM DEFAULT > JRST DIRP10] ETYPE < DEFAULT FILE PROTECTION: %2O > DIRP10: SKIPN B,10(E) JRST [ TLNE Z,F3 TYPE < DIRECTORY PROTECTION: SYSTEM DEFAULT > JRST DIRP11] ETYPE < DIRECTORY PROTECTION: %2O > ;DIRPNT... DIRP11: LDB B,[POINT 4,11(E),35] ;DEFAULT # VERSIONS TO KEEP TLNN Z,F3 CAIE B,2 ;2 IS DEFAULT ETYPE < DEFAULT # FILE VERSIONS TO KEEP %2Q > MOVE B,11(E) TRZ B,17 ;MASK OFF DEFAULT # VERSIONS TLNN Z,F3 CAME B,[5B2] ;SEEMS TO BE NORMAL VALUE 11/11/70 ETYPE < OTHER FILE RETENTION SPECIFICATIONS %2O > SKIPN A,12(E) JRST [ TLNE Z,F3 UTYPE [ASCIZ / NEVER LOGGED IN /] ;CAN'T USE REG CASE CAUSE %D TYPES CURRENT ;DATE FOR 0 JRST .+2] ETYPE < LAST LOGIN %1D %1E > SKIPN A,13(E) TLNE Z,F3 ETYPE < USER GROUPS %1U > SKIPN A,14(E) TLNE Z,F3 ETYPE < DIRECTORY GROUPS %1U > PRINT EOL RET ;SUBROUTINE TO TYPE " NOT" AND SKIP IF F3 ON F3NOT: TLNN Z,F3 RET TYPE < NOT> JRST [ AOS (P) RET] ;"PRINT" SUBCOMMAND TABLE AND ROUTINES $PRINT: TABLE T VERBOSE,ONEWD,..VERB TEND ..VERB: TLO Z,F3 RET SUPER: PUSH P,A PUSH P,B PUSH P,C PUSH P,D TYPE < [SUPERPASSWORD:] > CALL NOECHO CALL CSTR CALL DOECHO ALLOW TALT+TSPC+TEOL CALL BUFFF MOVE B,[POINT 7,SUPPW,-1] SUPER1: ILDB C,A ILDB D,B CAME C,D JRST CERR JUMPN C,SUPER1 PRINT EOL JRST [ POP P,D POP P,C POP P,B POP P,A RET] SUPPW: ASCIZ /GUESS/ ;^E CREATE (NAME) (PASSWORD) -- ;EITHER FIELD CAN BE TERMINATED WITH COMMA TO INITIATE SUBCOMMANDS. ;CAN CREATE NEW DIRECTORIES OR MODIFY INFO ASSOCIATED WITH OLD ONES. ;E HOLDS FLAGS AND BLOCK POINTER WHICH WILL BE IN B FOR CRDIR. ;BLOCK IS IN PUSHDOWN. ;FLAGS IN LH E ARE SET ONLY FOR FIELDS EXPLICITLY INPUT BY USER, ; BUT ALL INFO IS IN BLOCK FOR "LIST" SUBCOMMAND. .CREAT: NOISE MOVEI E,1(P) ;RH E POINTS TO... ;ALLOCATE CRDIR PARAMETER BLOCK IN PUSHDOWN. ;INITIALIZE MOST WORDS TO THE SYSTEM DEFAULT VALUES SO THAT IN THE ;NEW NAME CASE THE SUBCOMMAND "LIST" WON'T PRINT IF THE VALUE ;HASN'T BEEN EXPLICITLY SPECIFIED. PUSH P,[0] PUSH P,[0] PUSH P,[750] ;DISK LIMIT PUSH P,[0] PUSH P,[0] PUSH P,[0] PUSH P,[0] PUSH P,[0] ;DEFAULT FILE PROTECTION PUSH P,[0] ;DIRECTORY PROTECTION PUSH P,[500000000002] ;FILE RETENTION SPECS PUSH P,[0] ;DATE AND TIME OF LAST LOGIN PUSH P,[0] ;USER GROUP BITS PUSH P,[0] ;DIRECTORY GROUP BITS PUSH P,[0] PUSH P,[0] ;EXTRAS, BECAUSE ADDITIONS ARE LIKELY PUSH P,[0] PUSH P,[0] ;CREATE... ;INPUT NAME AND TYPE [OLD/NEW] AND GET CURRENT INFO FOR OLD. TLO Z,PUNCF CALL CSTR ALLOW TCOM+TALT+TSPC CALL BUFFF ALTYPE ( ) PUSH P,A ;PTR TO NAME TEXT FOR USE IN AC1 FOR CRDIR MOVE B,A SETZ A, STDIR JRST [ U$TYPE [ASCIZ /[NEW] /] TLO Z,F2 ;LOCAL FLAG FOR "NEW NAME" JRST CRET1A] CALL SCREWUP PUSH P,A ;SAVE FOR LATER $TYPE <[OLD] >; CALL BREAK2 ;DO "BREAK" AND "REFUSE" POP P,A ;GET DIRECTORY NUMBER HRRZS A ;FLUSH LH BITS MOVE B,E MOVE C,CSBUFP GTDIR ;GET CURRENT INFO FOR OLD DIR IBP C MOVEM C,CSBUFP ;AT THE END OF THE NAME FIELD COMMA MEANS "GO DIRECTLY ;TO SUBCOMMAND INPUT". ;BUT WE CAN'T CALL "SPRTR" HERE BECAUSE IT MIGHT READ AHEAD, ;WHICH IS BAD BECAUSE A NOISE WORD FOLLOWS. CRET1A: TRNE CBT,TCOM JRST CRSUB TRNE CBT,TEOL ;EOL ENDS COMMAND, DON'T INPUT PASSWORD. JRST CREAT8 ;(ERROR IF NEW, NOP IF OLD, BUT ANYWAY...) ;CREATE... ;INPUT PASSWORD. ;FOR OLD DIRECTORY, THIS PASSWORD REPLACES OLD ONE - IS THAT GOOD? NOISE TLO Z,PUNCF CALL CSTR ALTYPE ( ) CALL BUFFF CAIG CNT,1 JRST CREAT3 ;NULL INPUT MEANS "NO CHANGE" ;CAIN CNT,2 ;JRST [ MOVE B,.BFP ;1 CHAR INPUT, IS IT "-" ? ; ILDB B,B ; CAIN B,"-" ;JUST "-" MEANS MAKE IT NULL. ; MOVE A,[POINT 7,[ASCIZ //],-1] ; JRST .+1] MOVEM A,1(E) ;PASSWD STRING PTR TO PARAMETER BLOCK TLO E,B1 ;TELL CRDIR TO SET PASSWORD CREAT3: CALL SPRTR ;TEST TERMINATING CHARACTER(S) JRST CERR ; R1: MORE ARGS ON THIS LINE. ERROR. JRST CRSUB ; B2: COMMA, GET SUBCOMMANDS. ; R3: END OF COMMAND. ;CHECK, CONFIRM, EXECUTE CREAT8: TLZA Z,F1 CREAT9: TLO Z,F1 TLNE Z,F2 ;NEW NAME TLNE E,B1 ;PASSWORD SPECIFIED? JRST CRET9A MOVE A,4(E) TLNN A,B0 ERROR < PASSWORD REQUIRED FOR NEW NAME UNLESS FILES-ONLY> CRET9A: ;CHECK FOR GIVING PRIVILEGES TO FILES-ONLY DIRECTORY & WARN? CONFIRM TLNN Z,F1 CALL SUPER POP P,A ;POINTER TO NAME STRING TLNE Z,F2 TLOE E,B0 JRST .+2 MOVEM A,(E) ;SUPPLY NAME IF NEW & NOT GIVEN WITH SUBCOMMAND MOVE B,E ;XWD FLAGS, PARAMETER BLOCK ADDRESS CRDIR ;CREATE DIRECTORY ! CALL JERR TLNN Z,F2 ;NEW DIRECTORY, OR TLNE E,(1B16) ;KILL EXISTING DIRECTORY? CAIA JRST CRET9X SKIPL 4(E) ;YES. SKIP IF FILES ONLY JRST [ TYPE < [DON'T FORGET TO UPDATE USER-ACCOUNT DATA]> JRST CRET9X] MOVSI A,(1B2!1B17) ;OLD, SHORT, STRING HRROI B,[ASCIZ /ARCHIVE-FILES-ONLY.TXT/] GTJFN ;TEST IF IT EXISTS JRST CRET9X ;NO. SKIP MESSAGE RLJFN JFCL TYPE < [DON'T FORGET TO UPDATE ARCHIVE-FILES-ONLY.TXT]> CRET9X: JRST CMDIN4 ;CREATE... ;SUBCOMMAND LOOP CRSUB: CONFIRM CALL SUPER SUBCOM $CREAT ;INPUT AND DISPATCH ON SUBCOMMANDS TLO KWV1,CONFRC ;FORCE CONFIRMATION ;NOTE: CONFRC CAN'T BE USED IN NON-SUBCOMMAND CASE ;BECAUSE SPRTR CAN READ CONFIRMING CHARACTER BEFORE "CONF" ;GETS ITS CHANCE TO TYPE "[CONFIRM:]". JRST CREAT9 ;CREATE... ;SUBCOMMAND DISPATCH TABLE ;FLAG B5 INDICATES "NOT" MAY PRECEDE THE SUBCOMMAND. $CREAT: TABLE TE ABORT,ONEWD TE ABSOLUTE,B5+LPROK,..ABSO TE ALPHANUMERIC,B5+LPROK,..ALPH TE CONFIDENTIAL,B5+LPROK T DEFAULT T DIRECTORY,B5+LPROK,...DIR T DISK,LPROK,..DISK TE FILES,B5+LPROK TE KILL,B5+LPROK+CONMAN TE LIST,,..LIST TE MAINTENANCE,B5,.MAINT T MODE,B5 T NAME TE NETWIZARD,B5,.NETWI T NO,,....NO T NOT,,..NOT T NUMBER,,...NUM TE OPERATOR,B5 T PASSWORD T PRIVILEGES,B5 T PROTECTION,LPROK,...PRO TE REPEAT,B5+LPROK T RETENTION,B5+LPROK T SPECIAL,B5+LPROK T USER,B5+LPROK,.USER TE WHEEL,B5 TEND ....NO: KEYWD $$$$NO 0 ;NO DEFAULT JRST CERR JRST 0(KWV) $$$$NO: TABLE TE MAILBOX TEND .MAILB: ALLOW TSPC+TALT+TEOL CONFIRM TLO E,(1B15) ;"NO MSG FILE" FOR CRDIR RET ;CREATE... ;"NOT" CAN PRECEDE THOSE SUBCOMMANDS WHICH HAVE B5 SET IN TABLE. ;DISPATCH IS TO SAME ROUTINE BUT WITH "F1" SET TO REVERSE EFFECT. ..NOT: KEYWD $CREAT 0 JRST CERR TLNN KWV,B5 JRST CERR MOVE KWV1,KWV TLO Z,F1 JRST (KWV) ;ROUTINES FOR THE INDIVIDUAL SUBCOMMANDS ;NAME . FOR CHANGING A DIRECTORY'S NAME. .NAME: TLO Z,PUNCF CALL CSTR CALL BUFFF ALLOW TALT+TSPC+TEOL CONFIRM JRST NIYE ;NOT IMPLEMENTED AS OF 6/28/70 __________ MOVEM A,(E) TLO E,B0 RET ;PASSWORD ;CURRENTLY REDUNDANT EXCEPT THAT IT ALLOWS TYPIN IN A FORMAT MORE LIKE ; WHAT "PRINT" PUTS OUT AND ALLOWS GIVING A NULL STRING (USEFUL?). ;LATER I CLAIM PASSWORD FOR OLD DIRECTORY SHOULD BE TESTED FOR ; ACCESS PERMISSION BY NON-WHEELS (AND BE IGNORED FOR WHEELS), AND THIS ; COMMAND BE USED TO CHANGE PASSWORD. ____ .PASSW: TLO Z,PUNCF CALL CSTR CALL BUFFF ALLOW TALT+TSPC+TEOL CONFIRM MOVEM A,1(E) TLO E,B1 RET ;"CREATE" SUBCOMMANDS... ;DISK (STORAGE LIMIT) ..DISK: NOISE CALL DECIN ;DECIMAL INPUT TO A JRST CERR ;NULL ALLOW TALT+TEOL+TSPC CONFIRM MOVEM A,2(E) TLO E,B2 RET ;SUBCOMMANDS FOR SPECIFIC PRIVILEGES AND MODES. ;F1 ON AT ENTRY IF PRECEDED BY "NOT". ;AC USE: A: MASK INDICATING BITS TO SET (F1 OFF), OR CLEAR (F1 ON). ..ABSO: NOISE MOVEI A,1B23 JRST CPRIV .NETWI: SKIPA 1,[1B22] .MAINT: MOVEI A,1B21 JRST CPRIV .WHEEL: SKIPA A,[1B18] .OPERA: MOVEI A,1B19 JRST CPRIV .CONFI: NOISE MOVEI A,1B20 CPRIV: CONFIRM IORM A,3(E) ;SET BITS IN QUESTION TLNE Z,F1 ;BUT IF SUBCOMMAND PRECEDED BY "NOT", ANDCAM A,3(E) ;CLEAR THE BITS. TLO E,B3 RET .FILES: NOISE HRLZI A,B0 JRST CCMODE ..ALPH: NOISE HRLZI A,B1 JRST CCMODE .REPEA: NOISE HRLZI A,B2 CCMODE: CONFIRM IORM A,4(E) ;SET BIT TLNE Z,F1 ;PRECEDED BY "NOT"? ANDCAM A,4(E) ;YES, CLEAR BIT. TLO E,B4 RET ;"CREATE" SUBCOMMANDS... ;COMMANDS TO ENTER PRIVILEGES AND MODES IN OCTAL. ;THESE ALLOW ENTERING VALUES WHICH WEREN'T DEFINED WHEN THE CODE FOR ; "CREATE" WAS LAST UPDATED. ;CAN BE PRECEDED BY "NOT" TO TURN OFF RATHER THAN TURN ON THE GIVEN ; BITS. .PRIVI: CALL OCTCOM ;36-BIT OCTAL INPUT, LH,,RH ETC ACCEPTED. JRST CERR ;ALLOW TALT+TEOL+TSPC ;"OCTCOM" CHECKS TERMINATOR JRST CPRIV .MODE: CALL OCTCOM JRST CERR ;ALLOW TALT+TEOL+TSPC JRST CCMODE ;SPECIAL (RESOURCES INFORMATION) . IRRELEVANT AT PRESENT. .SPECI: NOISE CALL OCTCOM JRST CERR ;ALLOW TALT+TSPC+TEOL CSPEC: CONFIRM ;FUTURE SUBCOMMANDS FOR INDIV BITS CAN COME HERE IORM A,5(E) TLNE Z,F1 ANDCAM A,5(E) TLO E,B5 RET ;NUMBER . SPECIFIES DIRECTORY NUMBER ...NUM: CALL OCTAL JRST CERR ALLOW TALT+TSPC+TEOL TLNN Z,F2 JRST [ CAME A,6(E) UERR [ASCIZ / YOU CAN'T CHANGE THE NUMBER OF AN OLD DIRECTORY/] JRST NUMBE1] ;CHECK THAT THE NUMBER ISN'T IN USE BY TRYING TO CONVERT IT TO STRING. MOVE B,A MOVE A,CSBUFP DIRST SKIPA A,B ;NOT IN USE ERROR NUMBE1: CONFIRM MOVEM A,6(E) TLO E,B6 RET ;"CREATE" SUBCOMMANDS... ;PROTECTION (OF DIRECTORY) . LATER ALSO ALLOW NAMED PROT? ...PRO: NOISE CALL OCTCOM ;OCTAL INPUT SUBR, ACCEPTS LH,,RH ETC. JRST CERR ;ALLOW TALT+TSPC+TEOL CONFIRM MOVEM A,10(E) TLO E,B8 RET ;DEFAULT (FILE) PROTECTION ; NUMBER (OF VERSIONS TO KEEP) .DEFAU: NOISE KEYWD $DEFAU 0 JRST CERR JRST (KWV) $DEFAU: TABLE T NUMBER,LPROK,..NUMB T PROTECTION,,....PR TEND ....PR: CALL OCTCOM ;36-BIT OCTAL. OK? _______ JRST CERR ;ALLOW TALT+TSPC+TEOL CONFIRM MOVEM A,7(E) TLO E,B7 RET ..NUMB: NOISE CALL DECIN JRST CERR CAIL A,1 CAILE A,15 ERROR ALLOW TALT+TSPC+TEOL CONFIRM DPB A,[POINT 4,11(E),35] TLO E,B9 RET ;"CREATE" SUBCOMMANDS... ;[NOT] RETENTION (SPECIFICATIONS) ;OR'S IN AND AND'S OUT, APPROPRIATE FOR BITS ONLY. .RETEN: NOISE CALL OCTCOM JRST CERR CONFIRM IORM A,11(E) TLNE Z,F1 ANDCAM A,11(E) TLO E,B9 RET ;[NOT] USER (GROUP) ;F1 ON IF PRECEDED BY "NOT" .USER: NOISE CALL BITIN ;INPUT BIT NUMBER CONFIRM IORM A,13(E) TLNE Z,F1 ANDCAM A,13(E) TLO E,B11 RET ;[NOT] DIRECTORY (GROUP) ...DIR: NOISE CALL BITIN CONFIRM IORM A,14(E) TLNE Z,F1 ANDCAM A,14(E) TLO E,B12 RET ;SUBROUTINE TO INPUT DECIMAL BIT NUMBER. RETURNS BIT SET IN A. ;FOR USER AND DIRECTORY GROUP SUBCOMMANDS BITIN: INHELP TLO Z,BAKFF CALL DECIN JRST CERR CAILE A,^D35 JRST CERR MOVN B,A HRLZI A,B0 LSH A,(B) RET ;"CREATE" SUBCOMMANDS... ;KILL (THIS DIRECTORY) .KILL: NOISE CONFIRM TLO E,B16 TLNE Z,F1 TLZ E,B16 ;"NOT KILL" REVERSES EFFECT. RET ;ABORT: ABORT THIS CREATE. REDUNDANT FOR ^C. .ABORT: MOVEI A,RERET MOVEM A,CERET JRST CMDIN4 ;GO GET NEXT EXEC COMMAND ;LIST. PRINTS WHAT "PRINT" WILL PRINT IF THIS "CREATE" IS COMPLETED. ;"LIST VERBOSE" PRINTS AS "PRINT" WITH VERBOSE SUBCOMMAND ..LIST: KEYWD $.LIST T <>,EOLOK,0 JRST CERR TLZ Z,F3 CONFIRM TRNE KWV,F3 TLO Z,F3 TLNN E,B17 JRST DIRPNT ;GO ACT LIKE "PRINT" COMMAND TYPE < KILLED > RET $.LIST: TABLE T VERBOSE,EOLOK,F3 TEND ;^E CYCLE (THE NETWORK) .CYCLE: NOISE (THE NETWORK) CONFIRM MOVE A,['IMPDRQ'] MOVEI B,1 OPRFN JRST NIYE RET ;^E DISK (PANIC LEVEL FOR) SYSTEM/USERS (IS) ...DSK: NOISE (PANIC LEVEL FOR) KEYWD $$$DSK 0 JRST CERR MOVE A,['USRSPC'] ;VALUE IS 0 FOR SYSTEM, 1 FOR USERS TRNN KWV,-1 MOVE A,['SYSSPC'] PUSH P,A NOISE (IS) CALL DECIN ;INPUT A DECIMAL NUMBER JRST CERR ;NULL INPUT SKIPL A ;MAKE SURE IT IS REASONABLE CAILE A,^D2000 ERROR PUSH P,A ALLOW TSPC+TALT+TEOL ALTYPE ( ) CONFIRM POP P,B ;THE NUMBER POP P,A ;THE CELL NAME OPRFN JRST NIYE ;COME ON CLEMENTS RET $$$DSK: TABLE T SYSTEM,LPROK+WHLUO+OPRUO,0 T USER,LPROK+WHLUO+OPRUO,1 TEND ;^E EDDT ;TRANSFER CONTROL TO TENEX DDT, GETTING IT IF IT ISN'T ALREADY THERE. .EDDT: SKIPE DDTORG JRST EDDT3 ;DDT ALREADY THERE MOVE B,[POINT 7,[ASCIZ /UDDT.SAV/],-1] CALL $GTJFN ;ENTRY TO "$LPT" SUBR NEAR "DIRECTORY" HRLI A,B0 ;SAY THIS FORK (JFN IS IN RH A) GET CALL RLJFNS MOVEI A,400000 MOVE B,[EVECL,,EXEC] ;ENTRY VECTOR SEVEC ;MAKE EV POINT AT EXEC, NOT DDT ;IF WE CAN FIND A SYMBOL TABLE POINTER, PUT IT IN THE DDT. EDDT3: SKIPN A,..JBSYM ;HAVE WE SAVED SYMBOL TABLE POINTER? SKIPE A,.JBSYM ;NO, 10/50 SYMBOL TABLE POINTER? CAIA JRST EDDT4 ;NO. START DDT. MOVEM A,@DDTORG+1 ;STORE SYMBOL TABLE POINTER INTO DDT MOVE B,..JBUSY SKIPN A ;SOURCE OF .JBUSY MUST BE SAME AS .JBSYM MOVE B,.JBUSY MOVEM B,@DDTORG+2 ;DEASSIGN ^C, SO THAT ^C'S IN DDT WILL GO TO SUPERIOR EXEC. EDDT4: CALL INFER ;SKIP IF INFERIOR EXEC JRST EDDT5 ;AT TOP LEVEL LEAVE ^C ENABLED MOVEI A,B0 ;THIS FORK RPCAP ;ENABLED CAPS INTO C MOVEI A,CTRLC TLNE C,B0 ;^C SPEC CAP ENABLED? DTI ;YES, DEASSIGN ^C EDDT5: JRST DDTORG ;ENTER DDT ;DISABLE ;DISABLES PRIVILEGED COMMANDS, ;DISABLES USER (RH) SPEC CAPS IN EXEC AND INFERIOR FORK ; (CAPS POSSIBLE ARE STILL TRANSMITTED, SO INFERIOR CAN USE THEM ; IF IT ENABLES THEM ITSELF) .DISAB: SETZM PRVENF ;SAY PRIVILEGED COMMANDS OFF DISAB1: MOVEI A,B0 ;"ENABLE" JOINS HERE RPCAP TRZ C,-1 SKIPE PRVENF HRR C,B EPCAP ;EXEC'S CAPABILITIES SKIPG A,FORK RET ;NO INFERIOR, DONE RPCAP TRZ C,-1 SKIPE PRVENF HRR C,B EPCAP ;INFERIOR'S CAPS RET ;ENABLE ;ENABLES OTHER PRIVILEGED COMMANDS IN EXEC, AND ENABLES ;RH (USER) SPECIAL CAPS IN EXEC AND IN INFERIOR FORK, IF THERE IS ONE. .ENABL: ALLOW TSPC!TALT!TEOL TRNE CBT,TEOL JRST [ SKIPE LIMITC ;UNDER A ^E LIMIT CAPS ? ERROR (PASSWORD REQUIRED) CONFIRM JRST ENABL2] HRRZ A,CUSRNO ;THIS USER'S NUMBER CALL PASWD ;INPUT PASSWORD ALLOW TSPC!TALT!TEOL CONFIRM MOVE B,A HRRZ A,CUSRNO TLO A,(1B0) ;JUST CHECK PASSWORD CNDIR CALL [ CAIN A,CNDIX1 UERR [ASCIZ /INCORRECT PASSWORD/] JRST JERR] SETZM LIMITC ;CANCEL THE LIMIT ENABL2: ; CALL BREAK2 ;"BREAK" AND "REFUSE" SETOM PRVENF ;SAY PRIVILEGED COMMANDS ENABLED JRST DISAB1 ;HALT THE SYSTEM ; NO BITS LEFT IN COMMAND FLAGS FOR A "MAINTENANCE" CAP. BIT ; THUS, PRVCK CAN'T ALLOW "ENABLE", AND THUS, ^E CANNOT PREFIX THE HALT. .HALT: CALL SPRTR ;ANALYZE SEPARATOR JRST CERR ;R1: MORE FOLLOWS TLO Z,F1 ;R2: SUBCOMMANDS FOLLOW CONFIRM ;R3: END OF COMMAND HRLZ A,CUSRNO ;SET "WHO" DEFAULT TO ME MOVEM A,WHYHLT## MOVEI 1,400000 ;EXEC FORK RPCAP TRNN 3,1B18!1B19 ;WHEEL OR OPERATOR MUST BE ENABLED TRNE 2,1B21 ;MAINT. CANT ENABLE, DO IT FOR HIM CAIA JRST CERR PUSH P,3 ;ENABLED CAPABILITIES PUSH P,2 ;POSSIBLE CAPABILITIES CALL SUPER TLNN Z,F1 ;SUBCOMMANDS? JRST HALT2 ;NO. HALT0: MOVE 1,['SYSTAT'] CALL $SYSGT JUMPE B,CERR ;NO SUCH TABLE?? MOVSI 1,27 HRR 1,2 GETAB ;GET ANY CURRENTLY SET DOWN TIME CALL JERR MOVEM 1,DOWNTM ;USE AS DEFAULT SKIPE 1 TYPE < [NOTE: THERE IS A SHUTDOWN ALREADY IN PROGRESS]> MOVSI 1,30 HRR 1,2 GETAB CALL JERR MOVEM 1,UPTIME ;DEFAULT UP TIME SUBCOM $HALT ;DO SUBCOMMANDS TO MODIFY THESE JRST HALT3 ;GO MAKE ABSOLUTE HALT2: MOVEI 1,5 ;NO SUBCOM'S. DOWN IN 5 MIN. MOVEM 1,DOWNTM SETZM UPTIME ;WHO KNOWS WHEN IT WILL BE UP AGAIN? HALT3: MOVE 1,UPTIME IOR 1,DOWNTM JUMPE 1,HALT4 ;BOTH 0 ==> RETRACT SKIPN 2,DOWNTM ;SKIP IF ABSOLUTE OR REL. MOVEI 2,5 ;NOT SET. DEFAULT TO 5 MIN. GTAD ;WHAT TO ADD REL. TO TLNE 2,-1 ;DOWNTM IS ABS? JRST .+3 ;YES CALL TIMPMN ;ABS IN 1 PLUS MINS IN 2 MOVEM 1,DOWNTM ;THAT'S THE DOWN TIME SKIPE 2,UPTIME ;IF UPTIME IS NOT SET... TLNE 2,-1 ;OR IS ABSOLUTE, JRST HALT4 ;THEN TAKE AS IS. MOVE 1,DOWNTM ;OTHERWISE IT IS RELATIVE TO DOWN TIME CALL TIMPMN ;TIME IN 1 PLUS MINUTES IN 2 MOVEM 1,UPTIME HALT4: POP P,3 ;CAPABILITIES POSSIBLE MOVEI 1,CTRLC ;^C TERMINAL CODE TLNE 3,(1B0) ;^C CAP. ENABLED? DTI ;YES, DEASSIGN IT MOVEI 1,400000 ;THIS FORK EPCAP HALT7: MOVE 1,DOWNTM MOVE 2,UPTIME MOVE 3,WHYHLT ;REASON FOR HALTING HSYS TLOA Z,F1 ;REMEMBER HSYS FAILED TLZ Z,F1 ;HSYS WAS OK MOVEI 1,400000 POP P,3 ;RESTORE CAPS. AS THEY WERE AT ENTRY EPCAP MOVE 1,[CTRLC,,1] ;^C ON CHAN 1 TLNE 3,(1B0) ;IF SPECIAL CAP IS ENABLED ATI TLNE Z,F1 ;DID HSYS FAIL? JRST CERR ;YES RET ;NO $HALT: TABLE T AT,LPROK,..HLTA T BY,LPROK,..HLTB T DUE,LPROK,..HLTD T FOR,LPROK,..HLTF T IN,LPROK,..HLTI T RETRACT,ONEWD,..HLTR T UNTIL,LPROK,..HLTU TEND ..HLTA: NOISE CALL DATEIN MOVEM A,DOWNTM RET ..HLTB: NOISE HRRZ A,CUSRNO ;DEFAULT TO ME CALL DEFDIR## ;INPUT DIRECTORY NAME ALLOW TALT+TSPC+TEOL CONFIRM HRLM A,WHYHLT ;WILL BE AC3 TO HSYS RET ..HLTD: NOISE KEYWD $HLTDU 0 JRST CERR ALLOW TALT+TEOL ALTYPE ( ) CONFIRM HRRM KWV,WHYHLT RET $HLTDU: TABLE TE EMERGENCY,,8 TE HARDWARE,,6 TE PM,,5 TE PREVENTIVE-MAINTENANCE,,5 TE SOFTWARE,,7 TEND ..HLTF: NOISE CALL DECIN JRST CERR JUMPL A,CERR ALLOW TALT+TSPC+TEOL CONFIRM HRRZM A,UPTIME ;A RELATIVE TIME RET ..HLTI: NOISE CALL DECIN JRST CERR JUMPLE A,CERR ALLOW TALT+TSPC+TEOL CONFIRM HRRZM A,DOWNTM ;A RELATIVE TIME RET ..HLTR: NOISE SETZM DOWNTM ;NO KNOWN DOWN TIME SETZM UPTIME ;OR UPTIME SETZM WHYHLT ;OR REASON RET ..HLTU: NOISE CALL DATEIN ALLOW TALT!TEOL CONFIRM MOVEM A,UPTIME RET ;ADD THE MINUTES IN 2 TO THE TAD IN 1 TIMPMN: IMULI 2,^D60 ;MAKE IT SECONDS ;ADD THE SECONDS IN 2 TO THE TAD IN 1 TIMPSC: ADDI 2,0(1) ;ADD IN SECONDS FROM TAD IDIVI 2,^D<60*60*24> ;NUMBER OF SECONDS IN A DAY MOVSS 2 ;0 FOR TODAY, 1,,0 FOR TOMORROW, ETC ADD 1,2 ;BUMP DAY HRR 1,3 ;INSERT SECONDS RET ;^E INITIALIZED ACCOUNTS/HOSTS .INITI: KEYWD $INITI 0 JRST CERR MOVE A,(KWV) ;GET SIXBIT NAME FOR OPRFN CONFIRM OPRFN JRST [ CAIN A,OPRFX1 JRST NIYE ;FUNCTION NOT DEFINED JRST JERR] ;OTHER FAILURE RET $INITI: TABLE TE ACCOUNTS,WHLUO+OPRUO,['ACTINI'] TE HOSTS,WHLUO+OPRUO,['HSTINI'] TEND ;^E K (FACTOR IS) .KFACT: NOISE (FACTOR IS) CALL FPIN ;INPUT A FLOATING POINT NUMBER SKIPL A CAMLE A,[1.0] JRST CERR ALLOW TSPC!TALT!TEOL CONFIRM MOVE B,A MOVE A,['KFACT '] OPRFN CALL JERR RET ;^E LIMIT ..LIMI: KEYWD $$LIMI 0 ;NO DEFAULT JRST CERR JRST 0(KWV) $$LIMI: TABLE TE CAPABILITIES,,..LIMC TEND ;^E LIMIT CAPABILITIES ..LIMC: NOISE (OF JOB) CALL INFER ;IS THIS A TOP-LEVEL EXEC? CAIA ERROR (MUST BE TOP-LEVEL EXEC) SKIPGE FORK SKIPL LFORK ERROR (JOB MUST BE "RESET") CONFIRM CALL $RESET ;BE SURE EVERYTHING IS IN SYNC CALL .DISABL ;DO A FREE "DISABLE" SETOM LIMITC ;FLAG TELLS ENALE, EPCAP WHAT TO DO RET ;^E LOAD (EDDT) .LOAD: NOISE (EDDT) CONFIRM MOVE A,['DDTRCL'] OPRFN CALL JERR RET ;^E NETWORK OFF/ON .NETWO: KEYWD $NETWO 0 JRST CERR CONFIRM HRRE B,KWV MOVE A,['NETON '] OPRFN CALL JERR RET $NETWO: TABLE TE OFF,,0 TE ON,,-1 TEND ; ^E OFFLINE (CORE FROM PAGE) ... (THROUGH PAGE) ... ; ^E ONLINE (CORE FROM PAGE) ... (THROUGH PAGE) ... .OFFLI: TLZA Z,F1 ;REMEMBER WHICH COMMAND .ONLIN: TLO Z,F1 NOISE (CORE FROM PAGE) .ONLI1: CALL OCTAL JRST [ ALLOW TALT ;NO NUMBER, THINK ABOUT DEFAULT TLNN Z,F1 ;"OFFLINE" HAS NO DEFAULT JRST [ CALL DING JRST .ONLI1] MOVEI A,0 U$TYPE [ASCIZ /0 /] JRST .+1] ALLOW TSPC+TALT+TLPR CAILE A,3777 ;MAKE SURE IT'S A GOOD PAGE NUMBER JRST CERR PUSH P,A ;SAVE FOR LATER NOISE (THROUGH PAGE) CALL OCTAL JRST [ ALLOW TALT MOVEI A,3777 U$TYPE [ASCIZ /3777 /] JRST .+1] ALLOW TSPC+TALT+TEOL CAIG A,3777 ;CHECK FOR REASONABLE PAGE NUMBER CAMGE A,0(P) ;AND ORDER JRST CERR POP P,B ;FIRST PAGE MOVE C,A ;LAST PAGE CONFIRM TLNN Z,F1 ;WHICH COMMAND SKIPA A,['MKPGSU'] ;"OFFLINE" MOVE A,['MKPGSA'] ;"ONLINE" OPRFN CALL JERR RET ;^E PAUSE ..PAUS: NOISE (AT BUGCHKS) CONFIRM MOVEI B,1 MOVE A,['DCHKSW'] OPRFN CALL JERR RET ;^E PERMIT .PERMI: NOISE (LOGINS) CONFIRM MOVE A,['ENTFLG'] SETO B, OPRFN CALL JERR RET ;^E PROCEED .PROCE: NOISE (AT BUGCHKS) CONFIRM MOVE A,['DCHKSW'] SETZ B, OPRFN CALL JERR RET ;^E PROHIBIT .PROHI: NOISE (LOGINS) CONFIRM MOVE A,['ENTFLG'] SETZ B, OPRFN CALL JERR RET ;^E SYSTEM (IS) ... .SYSTE: NOISE (IS) KEYWD $SYSTE 0 JRST CERR CONFIRM MOVE A,['DBUGSW'] MOVEI B,0(KWV) OPRFN CALL JERR RET $SYSTE: TABLE TE ATTENDED,,1 TE DEGUGGABLE,,2 TE UNATTENDED,,0 TEND ;^E SET (DATE AND TIME) .SET: NOISE ;FALL INTO "INDT" WHICH DOES THE REST ;SUBROUTINE TO INPUT AND SET DATE AND TIME ;FOR MAIN LOOP AND ^E SET COMMAND. INDT: CALL DATEIN ;INPUT DATE AND TIME PUSH P,1 CALL CHKDAT ;SKIP IF IT LOOKS OK JRST [ TYPE < PLEASE RECONFIRM: > MOVE 1,COJFN ;PRIMARY OUTPUT JFN MOVE 2,0(P) ;DATE TYPED IN SETOM 3 ;VERBOSE FORMAT ODTIM TLO KWV1,CONMAN CONFIRM JRST .+1] POP P,A STAD ;SET TIME AND DATE CALL [ CAIN A,STADX1 ;SPEC CAP NOT ENABLED ERROR? RET ;YES. GO QUIETLY AWAY JRST JERR] RET ;CHECK TYPED IN TIME TO BESURE IT IS OK FOR STAD ; CURRENTLY THIS MEANS WITHIN 11 HRS. AFTER LAST FACT FILE WRITE CHKDAT: PUSH P,1 INTOFF ;BE SURE JFN WILL GET STACKED MOVSI 1,(1B2!1B17) HRROI 2,[ASCIZ /FACT./] GTJFN JRST [ INTON ;CAN'T GET JFN, FORCE RECONFIRMATION JRST CHKDA9] ;NO-SKIP RETURN MOVE 2,JBUFP ;JFN STACK PTR PUSH 2,1 ;SAVE FOR RELEASE AT ^C OR ERROR MOVEM 2,JBUFP INTON MOVE 1,0(2) ;GET THE JFN BACK MOVE 2,[1,,FDBWRT] MOVEI 3,3 CALL $GTFDB ;DON'T SKIP IF ACCESS LACKING JRST CHKDA8 CHKDA4: CAML 3,0(P) ;DATE TYPED MUST BE AFTER FILE WRITE JRST CHKDA8 ;NOT SO MOVE 1,3 MOVEI 2,^D<11*60*60> ;TIME LIMIT = 11 HRS. CALL TIMPSC ;GTAD IN 1 PLUS SECONDS IN 2, TO 1 CAML 1,0(P) ;11HRS AFTER FILE WRT BEFORE INPUT ? AOS -1(P) ;DATE LOOKS GOOD, SKIP CHKDA8: CALL RLJFNS CHKDA9: POP P,1 RET ; ^E TRAPS OFF/ON .TRAPS: NOISE (OF JSYS'S) KEYWD $TRAPS 0 JRST CERR CONFIRM MOVE A,['JTRPON'] HRRE B,KWV OPRFN CALL JERR RET $TRAPS: TABLE TE OFF,,0 TE ON,,-1 TEND ;^E UNLOAD EDDT ..UNLO: NOISE (EDDT) CONFIRM MOVE A,['DDTFSH'] OPRFN CALL JERR RET LIT IFE DST10X,< END EXEC> ;STOP HERE IF NOT ASSEMBLING ;A DISTRIBUTED TENEX EXEC