;<135-TENEX>JOBINI.MAC;11 12-DEC-75 10:51:55 EDIT BY PLUMMER ; CHANGE IFDEF PIESLC TO IFN (AROUND EXTERNS) ;<134-TENEX>JOBINI.MAC;10 28-AUG-75 12:55:04 EDIT BY ALLEN ; NEW SCHEME FOR UPDATING PIE-SLICE CPU TIME ;<134-TENEX>JOBINI.MAC;9 28-AUG-75 11:13:54 EDIT BY PLUMMER ; BREAK ADVICE LINKS ALONG WITH NORMAL LINKS ;<134-TENEX>JOBINI.MAC;8 27-AUG-75 14:16:04 EDIT BY CLEMENTS ; FIX TO CRJOB -- IF LOGIN FAILS IN NEW JOB, SETOM JOBONT BEFORE LOGO ;<134-TENEX>JOBINI.MAC;7 10-JUL-75 10:02:27 EDIT BY PLUMMER ; CORRECT SETUP OF FKDIR AT EXEC0A+ ;<134-TENEX>JOBINI.MAC;6 12-JUN-75 15:11:47 EDIT BY ALLEN ; PROPER CAPABILITIES FOR AUTO LOGGED IN SYSTEM JOB ON CTY ; WHEN DBUGSW=2 ;<134-TENEX>JOBINI.MAC;5 29-MAY-75 16:52:43 EDIT BY CLEMENTS ; INITIALIZE JOBPMF IN JSB TO -1 VERY EARLY IN EXEC0 IN CASE OF ; ITRAP OR OTHER FORCED LOGOUT BEFORE IT IS SET UP FOR REAL. ; IN PARTICULAR, CRJOB FAIL ON SYSTEM FULL DOES THIS. ;<134-TENEX>JOBINI.MAC;4 29-MAY-75 11:24:44 EDIT BY CLEMENTS ; SET PRIMARY JFNS IN INFERIOR ONLY IF BOTH EXEC AND INFERIOR ; EXIST ON A CRJOB. FOR AUTOSTART JOBS. ;<134-TENEX>JOBINI.MAC;3 5-MAY-75 16:30:15 EDIT BY CLEMENTS ; ADD CODE FOR B12 OPTION OF CRJOB - PASSING RH CAPS TO ; NEW JOB TIL LOGIN ;<134-TENEX>JOBINI.MAC;2 24-APR-75 12:32:02 EDIT BY CLEMENTS ;<134-TENEX>JOBINI.MAC;1 23-APR-75 15:48:03 EDIT BY CLEMENTS ;SEPARATING SWPMON.MAC INTO PIECES. THIS IS JOBINI.MAC SEARCH PROLOG TITLE JOBINI INTERNAL EXEC0 EXTERNAL ACCIFG,AUTONX,BHC,BUGCHK,BUGHLT,CAPENB,CAPMSK,CGFLG EXTERNAL CHKRI,CRJAC1,CRJACT,CRJEVO,CRJEXF,CRJFAC,CRJFIL EXTERNAL CRJOJC,CRJONJ,CRJPJF,CRJPSW,CRJTTY,CRJUSR EXTERNAL DBUGSW,DDMPFK,DDTIME,DDTSYM,DISKP,DRMFRE,DSKRBS EXTERNAL DTIALL,EDISMS,EXECSI,FACTSW,FKDIR,FORKX,FREFK EXTERNAL GETDDT,GETMST,GETSWM,ILIST,ITRAP EXTERNAL JB0FLG,JBFINI,JOBDIR,JOBONT EXTERNAL JOBPT,LGNPAR,LGNSYS,LOGO,MENTR,MRETN,NORMTF,NSPECJ EXTERNAL NXTDMP,OTYLIN,PRIMRY,SPECJB,SPECJT,SPTC,SWCEND,SWPSTP EXTERNAL SYSIFG,TAB81,TAB82,TTFORK,TTICB1,TTICB2 EXTERNAL WHEELX,WRSWM,WMST IFN PIESLC,< EXTERNAL ASGDSH,NAPROC,NJBGRP,PIEGRP > DEFINE TMSG < PUSHJ P,TMSGQ> ; ALL JOBS START HERE, INCLUDING THE BEGINNING OF JOB 0 WHICH DOES ; LOTS OF INITIALIZATION INCLUDING GETTING IN THE SWAPPABLE MONITOR FROM ; DISK OR DECTAPE. THE MECHANISM FOR GETTING HERE IS AS FOLLOWS: ; EITHER A ^C ON AN IDLE LINE OR THE EXPLICIT CALL AT SYSGO IN PISRV ; FOR THE FIRST JOB, OR AUTO-JOBS AT SPCSTJ, CALL SCDRQ WITH A REQUEST ; FOR THE SCHEDULER TO RUN JOBSRT (WITH A TTY LINE NUMBER AS ARGUMENT). ; JOBSRT GRABS A JOB AND INITIATES A FORK-CREATION PSI ON IT. WHEN ; THE FORK INITIALIZES ITSELF, IT SEES THAT IT IS THE TOP FORK IN ; A JOB, AND SETS ITS PI PC TO EXEC0. THEN IT DEBREAKS, AND LO AND ; BEHOLD IT IS RUNNING HERE AT PROCESS LEVEL. RESCD EXEC0: MOVSI 1,UMODF ;SIMULATE CALL FROM USER MOVEM 1,FPC JSYS MENTR SETOM JOBPMF ;IN CASE GET TO LOGO BEFORE REAL JFN HR SKIPN SYSIFG ;NEW SYSTEM? CALL GETSWM ;YES, GET SWAPPABLE MONITOR MOVEI 1,FKPTRS MOVEI 2,NUFKS CALL ILIST MOVE 1,0(1) ;GRAB FIRST SLOT FOR TOP FORK MOVEM 1,FREJFK SETZM FKPTRS MOVE 1,FORKX HRROM 1,SYSFK ;SYSFK=JOB CTTY,,FORK INDEX IFN PIESLC,< MOVSI 2,NOCNT## ANDCAM 2,FKFLGS##(1) ;FORK NOW IN SYSFK, OK TO MAINTAIN NAPROC MOVE 2,JOBNO SETZM JOBORT##(2) ; FORGET OLD JOB RUNTIME MOVE 2,PIEGRP(2) MOVSI 1,(1.0) FADRM 1,NAPROC(2) ;DO THIS NOW BECAUSE IT WASN'T DONE ;WHEN THIS FORK ENTERED BALSET > ;END PIE-SLICE SCHEDULER CONDITIONAL MOVE 1,[XWD SYSFK+1,SYSFK+2] SETOM -1(1) ;INIT REMAINDER OF TABLE BLT 1,SYSFK+NUFKS-1 SETOM TTJTIW MOVSI 1,B53 MOVEM 1,MONINT ;FOR DDT BREAKPOINT MOVE 1,[XWD ITFPC,EXECI] MOVEM 1,MONBK SETZ 1, MOVEI 2,3 ;ENABLE CHANS 34 AND 35 FOR ^P MOVEM 2,MONCHN ;AND GRAB THEM IF THEY HAPPEN AIC CALL JBFINI ;INIT FILE SYS FOR THIS JOB SKIPN SYSIFG ;SYSTEM INITIALIZED? CALL EXECSI ;CALL SYSTEM INITIALIZATION PACKAGE JRST SYSINE ;OK, NOW GO TO SWAPPABLE CODE SWAPCD SYSINE: MOVEI 1,0 ;ASSUME WILL BE ABLE TO LOG IN MOVE 2,SPTC ;CHECK FOR FULL SYSTEM CAIL 2,SSPT-NOFN-100 ;ROOM IN SPT? MOVEI 1,LGINX3## ;NO. (THESE FAILURES SHOULD BE SEPARATE) MOVE 2,DRMFRE ;DRUM SPACE? CAMG 2,DRMIN0## MOVEI 1,LGINX3 SKIPE FREJOB## SKIPN FREFK ;ANOTHER JOB AND FORK LEFT? MOVEI 1,LGINX3 ;NO. MOVEM 1,LGNPAR ;SAVE ZERO OR FAIL CODE FOR LOGIN JSYS MOVE 1,JOBNO IFN PIESLC,< MOVE 2,PIEGRP(1) AOS NJBGRP(2) CALL ASGDSH ;RECOMPUTE DSHARES > ;END PIE-SLICE SCHEDULER CONDITIONAL HLRZ 2,JOBPT(1) ;GET TTY NUMBER TO START ON CAIE 2,-2 ;SPECIAL FLAG THAT THIS IS CRJOB START? JRST EX0NCJ ;NOT CREATE-JOB SKIPL 2,CRJTTY ;YES. SEE WHAT TTY REALLY IS HRLM 1,TTFORK(2) ; .. HRLM 2,JOBPT(1) ;REASSIGN THE TTY TO NEW JOB MOVEM 2,CTRLTT ; .. SKIPE LGNPAR ;WILL IT SUCCEED? JRST [ MOVEI 1,CRJBX6##;NO, SAY SYSTEM FULL TO CALLER MOVEM 1,CRJANS## JRST LOGO] ;AND KILL OFF THE NEW JOB SETOM LGNPAR ;FLAG IN LGNPAR THAT THIS IS A CRJOB EX0NCJ: NOINT HRROI 2,[ASCIZ /JOBPMF/] MOVE 1,JOBNO CAIGE 1,10 HRROI 2,[ASCIZ /JOBPMF/] ;SYSTEM DIR FOR FIRST JOBS MOVSI 1,(1B5+1B8+1B17) ;TEMP FILE,IGN DEL AND SHORT FORM GTJFN GTJFN JRST PMFBAD HRRZM 1,JOBPMF MOVEI 2,1B19+1B20+1B21+1B25 ;IN, OUT, XCT, THAWED OPENF ;OPEN PMF JRST PMFBAD OKINT PMFB1: SKIPGE 1,CTRLTT ;GET CONTROLLING TTY IF ANY JRST EXEC0A ;NONE. STARTING DETACHED JOB. HRLI 1,600012 ;CONSTRUCT DEVICE DESIGNATOR FOR CTRLTTY JFCL ; ASND ;ASSIGN IT JFCL EXEC0A: TIME MOVEM 1,CONSTO ;SET CONSOLE TIME ON MOVE 1,JOBNO ;FIRST FEW JOBS ARE SPECIAL, CAIL 1,NSPECJ ;IS THIS ONE OF THEM? JRST EXEC0T ;NO. GO DO TTY SETUP IFE PIESLC,< MOVE 2,BHC+1 ;YES, FAKE A LOGIN AS SYSTEM MOVEM 2,JOBDIR(1) MOVE 3,FORKX MOVEM 2,FKDIR(3) > IFN PIESLC,< CALL LGNSYS ;LOG IN AS SYSTEM MOVE 1,CAPMSK ;TURN ON CAPS MOVEM 1,CAPENB ; .. MOVE 1,JOBNO > HRRZ 2,SPECJT(1) JRST 0(2) ;GO DO THE SPECIAL FUNCTION EXEC0T: SKIPGE CTRLTT ;ATTACHED TO A TERMINAL? JRST EXEC0B ;NO -- SKIP TTY INITIALIZATION MOVEI 1,100 MOVEI 2,3B33 ;SET TO HDX HERE, SO SETTING TO FDX STPAR ;BELOW WILL FORCE OUT TELNET CONTROL MOVE 2,NORMTF ;GET TTY TO STANDARD STATE SFMOD STPAR ;SET DEVICE PARAMETERS TOO SETZ 2, STTYP ;INIT TERM TYPE TO 0 MOVE 2,TTICB1 MOVE 3,TTICB2 SFCOC MOVE 2,TAB81 ;GET STANDARD TAB STOPS MOVE 4,2 MOVE 3,TAB82 STABS ;SET CONTROLLING TTY MOVSI 1,(1B0) ;BREAK ADVICE LINKS ADVIZ JFCL HRLOI 1,(1B0+1B1+1B4+1B5) MOVEI 2,-1 ;ALL REMOTE TLINK ;BREAK LINKS, SET ACCEPT JFCL EXEC0B: SKIPGE LGNPAR ;CRJOB STARTUP? JRST STCRJB ;YES. MOVE 1,[CHKDSE] ;CHKDSK ERRORS? TDNE 1,FACTSW JRST [HRRZ 3,CTRLTT ;YES, ALLOW CTY & DIALUP TO FIX CAME 3,OTYLIN ;DIALUP LINE? CAIN 3,CTYLIN ;OR OPERATORS CONSOLE JRST STEX ;START THE EXEC MOVEI 1,SYSINT ;HAVE AUTOJOBS WAIT FOR DISK OK JSYS EDISMS JRST .+1] SETO 3, EXCH 3,AUTONX ; PREVENT FURTHER AUTO START UP JUMPGE 3,SPECJB ; IF ANY MORE AUTOSTARTUP, DO IT MOVE 1,DBUGSW ; IF STARTING IN DEBUG MODE, AND HRRZ 2,CTRLTT ; ON CTY, CAIN 1,2 ; .. CAIE 2,CTYLIN ; .. JRST STEX PUSHJ P,LGNSYS ; DO A SYSTEM LOGIN, SINCE JOBDIR ISN'T ; GOOD ENOUGH WITH HASH AND PIES. MOVE 2,CAPMSK MOVEM 2,CAPENB JRST STEX ;GO START EXEC RESCD SYSINT: MOVE 1,[CHKDSE] ;DISK ERRORS FIXED? TDNE 1,FACTSW JRST 0(4) ;NO JRST 1(4) ;YES SWAPCD PMFBAD: BUG(CHK,) MOVE 1,JOBPMF RLJFN JFCL SETOM JOBPMF SETZM PSIBW ;FLUSH ANY BREAKS, E.G. DATA ERROR OKINT JRST PMFB1 ;ALLOW JOB WITH NO PMF ;HERE IS THE START OF THE MINIEXEC. FIRST CHECK TO SEE IF USER ; BELONGS HERE (MAYBE LOG HIM OFF IF NOT), AND THEN GO TO THE ; MINIEXEC COMMAND INTERPRETER. EXEC2: SETOM PRIMRY ; IN CASE ERROR INTERUPT OR HALTF SKIPGE LGNPAR ;CRJOB FAILED TO GET GOING? JRST CRJMEX ;YES. KEEP IT FROM MINIEXEC! MOVEI 1,100 ;ESTABLISH CORRECT TTY MODES MOVE 2,NORMTF SFMOD MOVE 2,TTICB1 MOVE 3,TTICB2 SFCOC CALL DTIALL MOVE 1,[XWD 20,^D34] ATI ;ASSIGN CONTROL-P FOR INTERRUPTS MOVE 2,JOBNO HRRZ 1,JOBDIR(2) SKIPE ACCIFG ;IF NOT REFRESHING, JUMPE 1,[SETZM CAPMSK ;AND NOT LOGGED, FLUSH ALL CAPS SETZM CAPENB MOVE 3,CTRLTT CAIE 3,CTYLIN ;ALLOW MINI-EXEC ONLY ON CTY JRST .+1 HRLOI 3,777000 ;GIVE ALL CAPS MOVEM 3,CAPMSK MOVEM 3,CAPENB MOVE 3,BHC+1 ;FAKE LOGIN AS SYSTEM MOVEM 3,JOBDIR(2) JRST .+1] MOVE 1,CAPMSK ;LOOK AT CAPS, ALLOW MINI-EXEC TRNN 1,WHEEL+OPER ;ONLY IF WHEEL OR OPER JRST [ SKIPE FORKN ;OTHERWISE, HALTF ;HALTF IF BELOW EXEC JRST LOGO] ;LOGOUT IF TOP FORK MOVEI 1,"." PBOUT ;FALL THRU ;FALLS THRU FROM ABOVE EXECT1: PBIN ;AWAIT USER INPUT CAIL 1,"A"+40 CAILE A,"Z"+40 SKIPA SUBI A,40 CAIN 1,"E" JRST GEX CAIN 1,"B" JRST EBLT ;BLT SWP MON TO USER SPACE CAIN 1,"M" JRST EMNT ;MOUNT DTA- CAIN 1,"R" JRST EREST ;RESET USER MAP AND FILES CAIN 1,"G" ;G - GET FILE JRST EGET CAIN 1,"S" ;S - START JRST EST CAIN 1,"D" ;D - DUMP ON FILE JRST EDMP CAIN 1,"I" JRST EINI CAIN 1,"H" JRST EHLT ;HALT T.S. CAIN 1,"W" JRST EWMST CAIN 1,"^" JRST MRETN CAIN 1,"/" JRST TODDT JRST EXERR ;NOTA CRJMEX: MOVEI 1,CRJBX2## ;FAILURE CODE MOVEM 1,CRJANS## ; .. JRST LOGO ;AND KILL NEW JOB TODDT: HRROI 1,[ASCIZ / /] PSOUT CALL GETDDT ;GET PROTOTYPE DDT SKIPN SWPSTP ;NON RES SYMTAB HERE? CALL GETMST ;NO, TRY TO GET IT SKIPN 1,SWPSTP ;USE NON-RES SYMTAB IF PRESENT MOVE 1,36 ;MOVE MONITOR SYMBOL POINTER SKIPN @DDTSYM ;HAVE SYMTAB PTR ALREADY? MOVEM 1,@DDTSYM ;NO, SET ONE UP JRST MDDT ;GO TO DDT ;BLT SWAPPABLE CODE TO USER SPACE. SHOULD DO RESET FIRST, ;THEN DUMP ON DTA-- EBLT: MOVEI 1,[SIXBIT 'LT SWP MON/'] TMSG CALL OKGO SKIPLE DISKP ;IF DISK, CALL WRSWM ;WRITE IT ON DISK MOVE 2,SWCEND ;LST PAGE LSH 2,^D9 MOVEI 1,SWPMP0 ;FIRST PAGE LSH 1,^D9 HRLI 1,0(1) XCTMU [BLT 1,777(2)] JRST EXCRR EWMST: MOVEI 1,[SIXBIT 'RITE MON SYM TAB/'] TMSG CALL OKGO SKIPE 1,@DDTSYM ;DDT HAS CURRENT POINTER? MOVEM 1,SWPSTP ;YES, UPDATE IT JSP 4,WMST ;WRITE TABLE ONTO FILE JRST EXCRR EREST: MOVEI 1,[SIXBIT 'ESET/'] TMSG CALL OKGO MOVEI 1,-4 KFORK ;KILL ALL FORKS MOVSI 7,-1000 MOVNI 1,1 MOVSI 2,400000 SETZ 3, ERES1: HRRI 2,0(7) SKIPE UPTA(7) ;DON'T WASTE TIME IF ALREADY EMPTY PMAP AOBJN 7,ERES1 MOVNI 1,1 ;CLOSE ALL FILES CLOSF JFCL JRST EXCRR OKGO: PBIN CAIN 1,"." RET ;PERIOD MEANS GO NODD1:: POP P,1 ;ANYTHING ELSE MEANS ABORT JRST EXERR GEX: MOVEI 1,[SIXBIT 'XEC$/'] TMSG STEX: MOVSI 1,(1B2+1B17) ;OLD FILE+SHORT FORM HRROI 2,[ASCIZ /EXEC.SAV/] GTJFN JRST [ HRROI 1,[ASCIZ /NO EXEC/] PSOUT JRST EXCRR] HRLI 1,400000 GET JRST GEX1 ;HERE AT STARTUP OF JOB BY CRJOB JSYS STCRJB: MOVE 7,JOBNO ;CARRY AROUND MY JOB NUMBER HRLM 7,CRJONJ ;RETURN THE ANSWER MOVE 10,CRJAC1 ;GET THE FLAGS IN CREATOR'S AC1 MOVE A,CRJONJ ;GET CREATOR'S JOB NUMBER TLNN 10,(1B6) ;IF NOT DISOWNED, MOVEM A,JOBONT(7) ;STORE BACK-LINK TO OWNER JUMPL 10,STCJB1 ;JUMP IF WANT TO DO LOGIN HLLZ A,JOBDIR(A) ;NO LOGIN. CONNECT TO CREATOR'S CONN DIR HLLZM A,JOBDIR(7) ;I AM CONNECTED THERE, NOT LOGGED IN. MOVE 6,FORKX HLLZM A,FKDIR(6) SETZM FKGRPS##(6) ;I HAVE NO GROUP CAPABILITIES SETZM CAPENB ;MAKE SURE I'M NOT PRIVILEGED HLLZS CAPMSK ; .. MOVE A,CRJOJC ;GET CREATOR'S CAPS TLNE 10,(1B12) ;DOES HE WANT TO BESTOW THEM ON NEW JOB? HRRM A,CAPMSK ;OK, DO SO. (ONLY UNTIL LOGIN JSYS) JRST STCJ1A ;DONE WITH LOGIN STUFF STCJB1: MOVE A,CRJUSR ;WANT TO LOG IN. SEE IF NAME GIVEN TLNN A,-1 ;TEXT OR NUMBER? JRST STCJ1B ;NUMBER. MOVEI A,0 ;DO NOT RECOGNIZE HRROI B,CRJUSR ;NAME TO LOG IN AS STDIR ;GET DIRECTORY NUMBER JFCL JRST SCJXX1 ;NO GOOD NAME. TLNE 1,(1B0) ;NOT FILES-ONLY, I HOPE JRST SCJXX1 ;YES. YOU CAN'T DO THAT HRRZM 1,CRJUSR ;STORE THE NUMBER STCJ1B: MOVE 11,CRJOJC ;SEE IF OWNING JOB IS WHEEL/OPER HRRZ 1,CRJONJ ; OR SAME USER AS NEW JOB HRRZ 1,JOBDIR(1) ; .. TRNN 11,WHEEL+OPER ; .. CAMN 1,CRJUSR ; .. SKIPA ;YES. CAN BYPASS PASSWD AND/OR UPDATING ; OF LOGIN DATE. TLZ 10,(1B8+1B10) ;NO. REQUIRE PASSWORD, UPDATE LOGIN DATE TLNN 10,(1B9) ;USE DEFAULT ACCOUNT? JRST STCJ1C ;NO. ONE HAS BEEN SET UP. MOVEI A,CRJACT+1 ;YES. STRING AREA. HRRZ B,CRJUSR ;USER TO GET ACCT FOR GDACC ;GET HIS DEFAULT ACCOUNT JRST SCJXXX ;HE HAS NONE, BUT IT WAS REQUESTED. ERR. MOVEM A,CRJACT ;STORE DEFAULT FOR LOGIN JSYS ;FALLS THRU ;FALLS THRU FROM ABOVE STCJ1C: MOVEI A,0 ;SET UP FLAGS FOR LOGIN JSYS TLNE 10,(1B8) ;SUPPRESS PASSWD CHECK? TRO A,1 ;YES. TLNE 10,(1B10) ;SUPPRESS LOGIN DATE UPDATE? TRO A,2 ;YES. HRRM A,LGNPAR ;STORE THESE FLAGS FOR THE LOGIN JSYS. HRRZ A,CRJUSR ;THE DIRECTORY NUMBER HRROI 2,CRJPSW ;PASSWORD MOVE 3,CRJACT ;ACCOUNT LOGIN JRST SCJXXX ;LOGIN FAILED. STCJ1A: MOVEI 1,400000 ;SET UP FOR SPJFN, IN CASE WANTED. MOVE 2,CRJPJF ;GET THE PRIMARY JFN WORD TLNE 10,(1B3) ;IS THERE BOTH AN EXEC AND AN INFERIOR? TLNN 10,(1B4) ; .. SKIPA ;NO. DO THE SPJFN HERE. JRST STCJ1D ;YES. ONLY DO SPJFN ON THE INFERIOR TLNE 10,(1B11) ;REQUESTED? SPJFN ;YES, DO IT. STCJ1D: SETZM LGNPAR ;NOW LOGIN IS DONE IF WANTED. TLNE 10,(1B3) ;WANT TO RUN A FILE? JRST STCJB2 ;YES. SETOM CRJANS ;NO. LET'S ASSUME GETTING AN EXEC WINS PUSHJ P,SCJWTA ;WAIT FOR ATTACH IF REQUESTED JRST STEX ;SET -1 TO ANSWER AND DO EXEC STARTUP STCJB2: TLNE 10,(1B4) ;FILE WANTED. EXEC TOO? JRST STCJB3 ;YES. MOVSI A,(1B2+1B17) ;NO, JUST THE FILE. HRROI B,CRJFIL ;THIS FILE NAME GTJFN JRST SCJXXX ;CAN'T GET IT. HRLI A,400000 ;INTO THIS FORK GET MOVSI A,CRJFAC ;ACS FROM STORAGE TO USER 0 TLNE 10,(1B5) ;IF WANTED XCTMU [BLT A,17] ;STORE THEM MOVEI A,400000 ;GET THE ENTRY VECTOR GEVEC ; .. TLNN B,777000 ;DEC STYLE ENTRY? JRST STCJ2A ;NO. HRRZ C,CRJEVO ;GET ENTRY VECTOR OFFSET CAILE C,1 ;GOOD FOR DEC STYLE? JRST SCJXX3 ;NO UMOVE B,120 ;JOBSA TRNE C,-1 ;IF ZERO OFFSET UMOVE B,124 ;ELSE JOBREN SKIPA STCJ2A: ADD B,CRJEVO ;ADD OFFSET TO VECTOR HRRM B,0(P) ;STORE FOR RETURN SETOM CRJANS ;SAY CRJOB HAS SUCCEEDED PUSHJ P,SCJWTA ;WAIT FOR ATTACH IF REQUESTED JRST MRETN ;AND GO DO IT STCJB3: MOVSI A,(1B2+1B17) ;HERE IF WANT FILE AND EXEC BOTH HRROI B,CRJFIL ;GET A JFN FOR THE DESIRED FILE GTJFN JRST SCJXXX ;RETURN GTJFN ERROR PUSH P,A DVCHR ;SEE IF IT'S THE DISK TLNE B,777 ; .. JRST STCJ3A ;NO. JUST PASS JFN TO GET JSYS MOVE A,0(P) ;RESTORE JFN MOVE B,[44B5+5B21+1B25] ;OPEN RD, EX, THAWED, 36BIT OPENF ; .. JRST SCJXX2 ;OPENF FAILED. RETURN THE ERROR CODE. STCJ3A: MOVSI A,(1B1) ;JUST INFERIOR WITH CAPS LIKE MINE TLNE 10,(1B5) ;UNLESS LOAD AC'S TLO A,(1B3) ;THEN LOAD AC'S MOVEI B,CRJFAC ;FROM HERE CFORK JRST SCJXX2 ;CAN'T GET A FORK EXCH A,0(P) ;GET THE JFN SETNM ;SET THE JOB NAME FROM JFN HRL A,0(P) ;FORK,,FILE GET MOVSI A,(1B2+1B17) ;GET THE EXEC HRROI B,[ASCIZ /EXEC.SAV/] GTJFN ;JFN OF THE EXEC FILE JRST SCJXX2 ;NO EXEC EXISTS?? HRLI A,400000 ;GET IT INTO THIS FORK GET ; .. MOVE A,0(P) ;INFERIOR FORK HANDLE MOVE B,CRJPJF ;PRIMARY I/O REQUESTED TLNE 10,(1B11) ;WAS IT REQUESTED? SPJFN ;YES. SET IT IN INFERIOR FORK. POP P,A ;INFERIOR FORK HANDLE HRLZS A ; FORK TO RUN,,0 HRR A,CRJEVO ;ENTRY VECTOR OFFSET OF INFERIOR UMOVEM A,2 ;PUT THIS WHERE EXEC EXPECTS IT HRRZ A,ENTVEC ;THE ENTRY VECTOR OF THE EXEC ITSELF SKIPN A UMOVE A,120 ;OR JOBSA ADDI A,3 ;MAGIC ENTRY TO EXEC FOR CRJOB HRRM A,0(P) ;MRETN WILL RETURN HERE MOVE A,CRJEXF ;REQUESTOR'S FLAGS TO EXEC TLO A,(1B1) ;FORCE IT TO KNOW ABOUT THE FORK UMOVEM A,1 ; .. SETOM CRJANS ;ALL HAS GONE WELL, ANSWER GOOD, PUSHJ P,SCJWTA ;WAIT FOR ATTACH IF REQUESTED JRST MRETN ;RETURN TO THE EXEC AT SPECIAL ENTRY SCJWTA: TLNN 10,(1B7) ;REQUESTED TO WAIT FOR ATTACH? POPJ P,0 ; NO. PROCEED MOVE A,JOBNO ;YES. GET MY JOB NUMBER MOVEI A,JOBPT(A) ;CELL WHICH IS NEG WHILE DETACHED PUSHJ P,DISGE## ;WAIT FOR .GE. 0 POPJ P,0 ;AND RETURN SCJXX3: MOVEI A,SFRVX1## JRST SCJXXX SCJXX2: POP P,(P) ;CLEAR STACK JRST SCJXXX ;AND GIVE CFORK'S ERROR RETURN SCJXX1: MOVEI A,CRJBX5## ;BAD DIRECTORY NUMBER, UNKNOWN NAME SCJXXX: MOVEM A,CRJANS ;STORE ERROR CODE MOVE A,JOBNO ;MAKE SURE SELF-LOGOUT WILL GO THRU SETOM JOBONT(A) ;BY MAKING THIS JOB UNOWNED JRST LOGO ;AND KILL OFF THE ATTEMPTED JOB ;INIT DISK BIT TABLE, BAD SPOTS, ETC EINI: MOVEI 1,[SIXBIT 'NIT BIT TABLE/'] TMSG CALL OKGO CALL DSKRBS ;READ BAD SPOTS JRST EXCRR ;HALT TENEX EHLT: MOVEI 1,[SIXBIT 'ALT TENEX/'] TMSG CALL OKGO SETZM NXTDMP ;REQUEST DDMP ACTION SETZM DDTIME ;FORCE DDMP RUN AOS JB0FLG ;REQUEST JOB 0 MOVEI 1,^D1000 DISMS ;WAIT A SECOND SKIPN CGFLG ;SWAPPING AND SKIPL NXTDMP ;DDMP FINISHED? JRST .-4 ;NO MOVSI 1,400000 MOVEM 1,20 ;HALT SCHED JRST EXCRR ;MOUNT DECTAPE EMNT: MOVEI 1,[SIXBIT 'OUNT DTA/'] TMSG PBIN CAIL 1,"0" ;USER TYPES DIGIT CAILE 1,"7" ;FROM 0 TO 7 JRST EXERR ;BAD CHAR MOVE 10,[ASCIZ /DTA0/] DPB 1,[POINT 7,10,27] ;CONSTRUCT STRING WITH UNIT NUMBER HRROI 1,10 STDEV JRST EXERR ;NO SUCH DEVICE MOVE 1,2 MOUNT JRST EXERR JRST EXCRR EGET: MOVEI 1,[SIXBIT 'ET FILE /'] TMSG MOVSI 1,(1B2+1B4+1B16+1B17) ;OLD FILE,TERMINATION,IFOF,SHORT MOVE 2,[XWD 100,101] GTJFN JRST EXERR HRLI 1,400000 ;THIS FORK GET JRST EXCRR EST: MOVEI 1,[SIXBIT 'TART/'] TMSG CALL OKGO HRROI 1,[ASCIZ / /] PSOUT GEX1: HRRZ 1,ENTVEC JUMPN 1,.+2 UMOVE 1,120 ;USE JOBSA HRRM 1,0(P) JRST MRETN EDMP: MOVEI 1,[SIXBIT 'UMP ON FILE /'] TMSG MOVSI 1,(1B0+1B3+1B4+3B17) ;NEW V,PNT O/N,TERM,IFOF,SHRT MOVE 2,[XWD 100,101] GTJFN JRST EXERR HRLI 1,400000 ;THIS FORK MOVE 2,[XWD 777760,20] ;ALL EXCEPT AC'S SAVE JRST EXCRR EXERR: HRROI A,[ASCIZ //] ESOUT EXCRR: HRROI 1,[ASCIZ / /] PSOUT JRST EXEC2 ;PSI TRAPPED TO HERE EXECI: XCT MONINT ;FOR DDT BREAKPOINT SETOM PRIMRY ;IN CASE WE WERE REDIRECTED FOR PRI I/O EXCH 1,ITFPC ;SAVE 1, GET TRAP PC TLNN 1,UMODF ;USER? JRST EXECI1 ;NO MOVEM 1,FPC ;YES, ENTER MONITOR AT THAT LOC MOVE 1,ITFPC ;RESTORE AC1 EXECI2: JSYS MENTR SETOM PRIMRY SKIPGE LGNPAR ;FAILURE IN START OF CREATED JOB? JRST CRJMEX ;YES. KEEP OUT OF MINIEXEC MOVEI 1,-4 FFORK ;FREEZE FORKS MOVEI 1,100 CFIBF ;CLEAR INPUT BUFFER MOVEI 1,400000 SETO 2, DIC CALL DTIALL ;IN CASE PROGRAM TURNED ANY ON MOVE 2,PSIBW CIS TRNN 2,2 ;CHANNEL 34? JRST EXECI3 MOVEI 1,101 CFOBF ;CLEAR OUTPUT BUFFER MOVEI 1,EM2 TMSG JRST EXEC2 EXECI1: MOVE P,UPP ;RESTORE TOP OF PDL MOVE 1,1(P) ;GET USER PC HRLI 1,UMODF MOVEM 1,FPC HRLZ P,ACBAS1 ;RECOVER USER AC'S LSH P,4 BLT P,17 JRST EXECI2 EXECI3: MOVEI 1,EM3 TMSG MOVEI 1,101 HRRZ 2,UPP HRRZ 2,1(2) ;GET TOP PC MOVEI 3,10 ;RADIX NOUT ;PRINT ADDRESS JFCL JRST EXCRR ;TO MINI-EXEC IF WHEEL OR OPERATOR EM2: SIXBIT '$ABORT$/' EM3: SIXBIT '$INTERRUPT AT /' ;JSYS TO ENTER MINI-EXEC .EXEC:: JSYS MENTR MOVEI 1,WHEEL+OPER TDNN 1,CAPENB JRST WHEELX ;ITRAP WITH WHEEL ERROR JRST EXEC2 EXBUGH::MOVE 1,UPDL ;RESET STACK, ETC. HRLI 1,UMODF MOVEM 1,FPC JSYS MENTR SETOM TRAPC SETZM NSKED SETZM INTDF MOVE 1,FORKX CAMN 1,DDMPFK ; DDMP FORK? JRST CHKRI ;YES, INTERRUPT HRRZ 1,PRIMRY HRROI 2,[ASCIZ / BUGHLT AT /] SETZ 3, SOUT HRRZ 2,BUGHLT MOVEI 3,^D8 NOUT JFCL MOVEI 2,15 BOUT MOVEI 2,12 BOUT JRST ITRAP ;EXEC UTILITY ROUTINES ;MESSAGE TYPER - ADR OF SIXBIT TEXT IN 1 TMSGQ:: HRLI 1,440600 ;CONSTRUCT BYTE POINTER PUSH P,1 TMSG1: ILDB 1,0(P) ADDI 1,40 ;CONVERT TO ASCII CAIN 1,"/" ;SLASH IS TERMINATOR JRST TMSG2 CAIN 1,"$" ;DOLLARS MEANS EOL JRST [HRROI 1,[ASCIZ / /] PSOUT JRST TMSG1] PBOUT JRST TMSG1 TMSG2: POP P,1 ;FLUSH TEMP RET END ; OF JOBINI.MAC