TITLE COMCON - COMMAND DECODER AND SAVEGET ROUTINES - V433\r
SUBTTL /RCC 03 JUN 69\r
XP VCOMCN,433\r
-\r
;THIS MACRO PUTS VERSION NO. IN STORAGE MAP AND GLOB\r
\r
ENTRY COMCON ;ALWAYS LOAD COMCON IF LIBRARY SEARCH\r
EXTERNAL RELEA6,RESET,SETRUN,STOP1\r
EXTERNAL STOTAC,UPTIME,USRXIT,USTART,UUOERR\r
\r
+\r
T=BUFPNT ;TEMPORARY AC'S\r
T1=BUFWRD\r
T2=UUO\r
NUMLOP: MOVE T,JBTSTS(ITEM) ;SCAN FOR FREE JOB NO.\r
TLNN T,JNA+CMWB ;THIS NUMBER ASSIGNED?\r
JRST NEWJOB ;NO, SO USE THIS NUMBER\r
-\r
CAIGE ITEM,JOBMAX ;YES, IS THE MAX. JOB NO.?\r
AOJA ITEM,NUMLOP ;NO, KEEP LOOKING\r
JSP TAC,COMER ;YES, NONE LEFT, PRINT "JOB CAPACITY EXCEEDED"\r
EXTERN JBTKCT\r
SETZM JBTKCT(ITEM) ;CLEAR CORE-RUNNING TIME CORE\r
>\r
+\r
CAMLE ITEM,HIGHJB ;HIGHEST JOB NUMBER ASSIGNED?\r
MOVEM ITEM,HIGHJB ;YES,SAVE IT FOR SCHEDULER SCAN OF JOBS\r
\fCHKRUN: TLNE T,RUN ;RUN BIT ON IN JOB STATUS?\r
; MUST BE USED IN CONJUNCTION WITH COMMANDS WHICH\r
; NEED CORE AND NEED IT IN CORE\r
\r
+\r
;BITS CHECKED AFTER RETURN FROM COMMAND SETUP ROUTINE\r
\r
CMWRQ=2000 ;REQUEUE JOB AFTER COMMAND WAIT\r
>\r
\r
COMTAB: NAMES\r
- XWD NOCORE+NOJOBN+NOLOGIN+NOINCK,NOCOM\r
DISPL=.-COMTAB ;LENGTH OF TABLE\r
\f;GENERATE THE DISPATCH TABLE PLUS SPECIAL BITS\r
\r
Z B (D)\r
>\r
DISP: NAMES\r
+\r
+ XWD NOCORE+NOJOBN+NOLOGIN+NOINCK,NOCOM\r
+\r
\f\r
;CALLED FROM COMMAND DECODER WHICH IS CALLED FROM CLOCK ROUTINE\r
;WITH FOLLOWING AC'S SET:\r
MOVEI TAC,0 ;RETURN BOTH PHYSICAL AND LOGICAL CORE\r
SOS (PDP) ;NEGATE SKIP RETURN WHICH CORE1 WILL DO\r
JRST CORE1 ;GO DO IT AND RETURN TO CALLER\r
-\f; "PJOB" PRINT JOB NUMBER OF JOB TTY IS ATTACHED TO\r
+\f\r
+; "PJOB" PRINT JOB NUMBER OF JOB TTY IS ATTACHED TO\r
\r
INTERNAL PJOB,DECLF\r
\r
DECLF: PUSHJ PDP,RADX10 ;PRINT TAC AS DEC. THEN CRLF\r
JRST CRLF\r
\r
+\r
; "KJOB" KILL ATTACHED JOB\r
\r
EXTERNAL JBTSTS,TTYKILM,CPOPJ\r
START: ;SAME AS CSTART, DIFF BY COMTAB BITS\r
; WHICH PUT TTY IN MONITOR OR USER MODE\r
\r
+\r
; "CSTART L" OR "CSTART" - START AT LOC. L(TTY IN COMMAND MODE)\r
\r
+\r
STARTC: PUSHJ PDP,OCTIN ;CONVERT POSSIBLE OCTAL NO ARG.\r
IFE FT2REL,<\r
SKIPA TAC1,JOBSA(JDAT) ;NO START ADR. SPECIFIED RETURN\r
JRST DLYCM ;AND DELAY COMMAND TILL CORE IS IN MEMORY\r
; DLYCM WILL SWAP IT IN.\r
>\r
-\fCOR2: IFN FTTTYSERM,<\r
+\fCOR2: IFN FTTTYSER,<\r
MOVE DEVDAT,-2(PDP) ;RESTORE TTY DDB ADR\r
>\r
PUSHJ PDP,INLMES ;PRINT ? FOR PATCH\r
EXTERN VIRTAL\r
PUSHJ PDP,INLMES\r
ASCIZ /K CORE\r
-VIR. CORE LEFT =/\r
+VIR. CORE LEFT=/\r
MOVE TAC,VIRTAL ;PRINT AMOUNT OF FREE SWAP SAPCE LEFT\r
JRST RADX10 ;IN DECIMAL\r
>\r
;WORKS LIKE SAVE, EXCEPT THAT HIGH SEG IS SAVED AS SHARABLE(EXT=SHR)\r
;INSTEAD OF NON-SHARABLE(EXT=HGH)\r
\r
+\r
; "SAVE FILE-NAME[PROJ.,PROG.] CORE" - SAVES JOB AREA ON RETRIEVABLE DEVICE\r
;ONLY A SAVE OR A GET IN PROGRESS FOR EACH JOB\r
;NO ATTEMPT IS MADE TO SAVE DEVICE ASSGINMENTS, AC'S OR PC\r
SETZM JBTPRG(ITEM) ;CLEAR JOB'S PROGRAM NAME FOR ROOM\r
JRST SGSET\r
\r
+\r
; "GET DEVICE:FILE-NAME[PROJ.,PROG.] CORE" - SETS UP JOB AREA FROM RETREIVABLE\r
\r
;DEVICE AND ASSIGNS CORE.\r
MOVE TAC,[SIXBIT /SYSTAT/] ;CUSP NAME\r
JRST ARCOM ;RUN IT\r
\r
+\r
EXTERNAL JBTSTS,TTYATT\r
\r
ALOGIN:\r
PUSH PDP,DEVDAT ;SAVE TTY\r
>\r
IFE FTTTYSER,<\r
-\r
PUSH PDP, TAC ;SAVE INPUT BYTE POINT\r
>\r
MOVE TAC,TAC1\r
SKIPE TAC,TAC1 ;IS THERE A LOGICAL NAME SPECIFIED?\r
PUSHJ PDP, DEVLG ;YES, SEE IF IT IS ALREADY IN USE\r
; BY THIS USER\r
- JRST ASSG1 ;NO \r
+ JRST ASSF1 ;NO \r
MOVEI TAC,LOGERR ;YES, PRINT ERROR\r
MOVE DEVDAT,-3(PDP) ;RESTORE TTY DDB\r
PUSHJ PDP,ERRMES\r
ASCIZ / ASSIGNED\r
/\r
\r
-LOGERR: ASCIZ /LOGICAL NAME ALREADY IN USE. /\r
+LOGERR: ASCIZ /LOGICAL NAME ALREADY IN USE, /\r
\f\r
;"DEASSIGN DEV" - DEASSIGNS DEVICE FROM CONSOLE\r
\r
\r
;"REASSIGN DEV:JOB" - REASSIGN DEVICE "DEV" TO JOB "JOB"\r
\r
+\r
REASS:\r
- PUSHJ PDP,CTEXT ;GET DEVICE NAME\r
+ PUSHJ PDP,CTEXT1 ;GET DEVICE NAME\r
JUMPE TAC,NOTENF ;NULL NAME?\r
MOVE UUO,TAC1 ;SAVE IT IN UUO\r
PUSHJ PDP,DECIN1 ;GET NEW JOB NUMBER\r
CAME TAC,ITEM ;ASSIGNED TO THIS JOB\r
JRST REASE3 ;NO\r
MOVE TAC,DEVMOD(DEVDAT)\r
-\r
TLNE TAC,DVTTY ;IS IT A TTY?\r
JRST REASE6 ;YES. CAN'T BE REASSIGNED\r
TRNN TAC,ASSPRG ;IS DEVICE INITED?\r
IFN FTLOGIN, <\r
JRST DEVATT ;WANTS TO ATTACH A DEVICE\r
>\r
-\r
IFE FTLOGIN, <\r
JRST ATT1\r
>\r
ATT1: JSP TAC,ERRMES\r
ASCIZ /ILLEGAL JOB NUMBER\r
/\r
+\r
ATT2: MOVE TAC1,DEVNAM(DEVDAT) ;[PRINT PHYSICAL NAME\r
MOVE DEVDAT,-2(PDP) ;RESTORE TTY DDB\r
PUSHJ PDP,PRNAME\r
JSP TAC,ERRMES\r
ASCIZ / ALREADY ATTACHED\r
/\r
+\r
ATT3: JSP TAC,ERRMES\r
ASCIZ /CAN'T ATT TO JOB\r
/\r
+\r
ATT4: JSP TAC,ERRMES\r
ASCIZ /NOT A JOB\r
/\r
+\r
+\r
ATT5: JSP TAC,ERRMES\r
ASCIZ /CAN'T ATT DEV\r
/\r
+\r
ATT6: POP PDP,DEVDAT\r
JSP TAC,ERRMES\r
ASCIZ /WASN'T DET\r
JRST PRTIME ;PRINT AND RETURN\r
\r
RUN2: PUSHJ PDP,INLMES ;PRINT\r
-\r
ASCIZ /SHFL / ;"SHUFFLING "\r
MOVE TAC,SHFWRD ;NO. WORDS SHUFFLED\r
IDIVI TAC,WDPJIF ;NO.WORDS/JIFFY USING BLT\r
MOVE TAC,JOBPC(JDAT)\r
TLNE TAC,USRMOD ;USER MODE?\r
ADDI TAC1,20 ;YES USER ACS ARE AT 20 INSTEAD OF 0\r
+ POPJ PDP,\r
\r
DCOMA:\r
IFN FT2REL,<\r
;"BLANK" OR NO ALPHA NUMERIC BEFORE BREAK CHAR COMMAND\r
;DISPATCHED TO LIKE ANY OTHER COMMAND(0 IN COMMAND TABLE)\r
\r
+\r
CBLANK:\r
IFE FTTTYSER,<\r
LDB TEM,TAC ;GET BREAK CHARACTER\r
JRST CPOPJ ;YES. DELAY\r
STOPC: HLRZ DEVDAT,DEVSER(DEVDAT)\r
MOVSI TAC,446353\r
-\r
CAMN TAC,DEVNAM(DEVDAT)\r
JRST STOPD\r
JRST CPOPJ1 ;OK TO STOP\r
CAIN TEM,":" ;DEVICE NAME?\r
PUSHJ PDP,GETCHR ;YES. SKIP COLON\r
CAIE TEM,3 ;CONTROL C?\r
-\r
JRST TPOPJ ;NO. RETURN ONE LEVEL UP\r
CTXCNC: MOVSI TAC1,(SIXBIT /HAL/) ;MAKE PHONY HALT COMMAND\r
- MOVSI TEM,12 ;WITH LF FOR TERMINATION\r
+ MOVEI TEM,12 ;WITH LF FOR TERMINATION\r
JRST TPOPJ ;AND RETURN UP A LEVEL\r
>\r
\f;ROUTINE TO IGNORE LEADING SPACES, TABS, AND NULLS\r
JRST SKIPSA\r
CAIN TEM,15 ;CR?\r
SKIPS2: POP PDP,T ;YES. POP SUB. LEVEL UP ONE\r
+ POPJ PDP,\r
>\r
IFN FTTTYSER,< EXTERNAL GETCHR,SPCHEK,BREAKB,TAKR\r
\r
COMERA: IFE FTTTYSER,< IBP TAC>\r
IFN FTTTYSER,< PUSHJ PDP,GETCHR> ;MOVE UP, A CH\r
\r
+\r
;ROUTINE TO REPLACE LAST CHARACTER IN INPUT STRING BY "?"\r
;AND SET AS OUTPUT\r
;CALL: MOVE TAC, BYTE POINTER TO LAST CHAR. IN INPUT STRING\r
\r
PRQM: MOVEI TEM,"?"\r
IFN FTTTYSER,<\r
-\r
EXTERN OUTCHS\r
JRST OUTCHS\r
>\r
ANDCAB TAC1,DEVMOD(DEVDAT) ;SET DEVICE CHARACTERISTICS FOR TEST\r
; AND ASGHGH\r
SETZM DEVLOG(DEVDAT) ;CLEAR LOGICAL NAME\r
-\r
TRNE TAC1,ASSCON ;IS DEVICE ASSIGNED BY CONSOLE?\r
AOS -1(PDP) ;YES, DO OK RETURN\r
IFN FT2REL,<\r
INTERNAL DEASAL,DEASTY\r
EXTERNAL DEVLST\r
\r
+\r
DEASTY:\r
DEASAL: PUSH PDP,DEVDAT ;SAVE TTY DDB ADDRESS\r
HLRZ DEVDAT,DEVLST ;SEARCH ALL DDB'S\r
;(AC2) = 0 IF NO [ ]'S TYPED\r
;THE TERMINAL ] IS OPTIONAL\r
\r
+\r
IFE FTTTYSER,<\r
PJPGNO: SKIPA TAC1,TAC ;SAVE INPUT BYTE POINTER IN CASE NO\r
; [ ]'S WERE TYPED IN.\r
LDB TEM,TAC ;GET CHAR WHICH STOPED PREVIOUS FIELD SCAN\r
; (OR NEXT CHAR ON 2ND TIME THRU LOOP)\r
>\r
-\r
IFN FTTTYSER,<\r
PP0: PUSHJ PDP,SKIPS1\r
PJPGNO:\r
PUSH PDP,IOS ;SAVE DISPATCH ADDRESS(ANYACT USES IOS)\r
IFN FT2REL,<\r
EXTERN KILHGH\r
-\r
PUSHJ PDP,KILHGH ;KILL HIGH SEG\r
>\r
MOVEI TAC,JOBDA ;LENGTH OF JOBDATA AREA\r
;THESE LOCATIONS ARE DEFINED TO BE IN THE USERS UUO ACS\r
\r
;FOR LOOKUP,ENTER UUOS:\r
- XP SGANAM,0 ;FILE NAME\r
- XP SGAEXT,SGANAM+1 ;FILE EXTENSION\r
- XP SGADAT,SGANAM+2 ;FILE CREATION DATE+TIME\r
- XP SGALEN,SGANAM+3 ;LN=-LENGTH,RH=FIRST LOC-1 DUMPED\r
+ XP SGANAM,0\r
+ ;FILE NAME\r
+ XP SGAEXT,SGANAM+1\r
+ ;FILE EXTENSION\r
+ XP SGADAT,SGANAM+2\r
+ ;FILE CREATION DATE+TIME\r
+ XP SGALEN,SGANAM+3\r
+ ;LN=-LENGTH,RH=FIRST LOC-1 DUMPED\r
+\r
; OR PROJECT-PROGRAMMER NUMBER(DISK)\r
- XP SGAEND,SGALEN+1 ;LAST WORD OF DUMP COMMAND LIST=0(SAVE AND GET)\r
- XP SGAREN,SGAEND ; ALSO FIRST WORD FOR RENAME USED AS DELETE\r
- XP SGAPPN,SGAREN+3 ;FOURTH WORD-PLACE TO SAVE PROJECT-PROGRAMEMR\r
+ XP SGAEND,SGALEN+1\r
+ ;LAST WORD OF DUMP COMMAND LIST=0(SAVE AND GET)\r
+ XP SGAREN,SGAEND\r
+ ; ALSO FIRST WORD FOR RENAME USED AS DELETE\r
+ XP SGAPPN,SGAREN+3\r
+ ;FOURTH WORD-PLACE TO SAVE PROJECT-PROGRAMEMR\r
+\r
; NUMBER USER TYPED\r
\r
;FOR OPEN UUOS:\r
- XP SGAMOD,10 ;IOS MODE WORD FOR OPEN UUO\r
- XP SGADEV,SGAMOD+1 ;DEVICE NAME\r
- XP SGAHED,SGAMOD+2 ;INPUT-OUTPUT BUFFER HEADER ADDRESSES=0\r
+ XP SGAMOD,10\r
+ ;IOS MODE WORD FOR OPEN UUO\r
+ XP SGADEV,SGAMOD+1\r
+ ;DEVICE NAME\r
+ XP SGAHED,SGAMOD+2\r
+ ;INPUT-OUTPUT BUFFER HEADER ADDRESSES=0\r
\r
;MISC. DATA LOCATIONS:\r
\r
- XP SGADMP,13 ;DUMP COMMAND IOWD\r
- XP SGACOR,14 ;AC FOR CORE UUO'S(HIGHEST USER LOC DESIRED)\r
- XP SGANEW,15 ;NEW CORE ASSIGNMENT AS SPECIFIED BY THIRD ARG\r
- XP SGAHGH,16 ;LH=EXT TO USE FOR SAVING HIGH SEG\r
+ XP SGADMP,13\r
+ ;DUMP COMMAND IOWD\r
+ XP SGACOR,14\r
+ ;AC FOR CORE UUO'S(HIGHEST USER LOC DESIRED)\r
+ XP SGANEW,15\r
+ ;NEW CORE ASSIGNMENT AS SPECIFIED BY THIRD ARG\r
+ XP SGAHGH,16\r
+ ;LH=EXT TO USE FOR SAVING HIGH SEG\r
+\r
; RH=EXT TO DELETE(IE SHRHGH OR HGHSHR)\r
- XP SGALOW,17 ;LH=EXT WHICH USER TYPED FOR SAVE OR GET COMMAND\r
+ XP SGALOW,17\r
+ ;LH=EXT WHICH USER TYPED FOR SAVE OR GET COMMAND\r
+\r
; OR .SAV IF HE DIDN'T TYPE AN ARG WITH LEADING PERIOD\r
+\r
; RH=0\r
\f;ROUTINE TO SCAN COMMAND STRING ARGUMENTS FOR SAVE,GET,RUN AND R\r
;COMAMNDS AND STORE THEM IN JOB DATA AREA WHICH MUST BE IN CORE\r
EXCH TAC,(PDP) ;AND PUT ON PD LIST\r
PUSH PDP,TAC ;MOVE RETURN PC UP ONE IN PD LIST\r
LDB TAC,PUUOAC ;USER AC FIELD IN RUN OF GETSEG UUO\r
-\r
HRRM TAC,-1(PDP) ;SAVE IN CASE OF ERROR RETURN\r
PUSHJ PDP,GETWDU ;GET FIRST ARG FROM USER AREA\r
MOVEM TAC,SGADEV(PROG) ;STORE DEVICE NAME\r
INTERNAL SAVJOB,SAVERR\r
EXTERNAL JOB41,JOBS41,JOBDDT,JOBSDD,JOBSV\r
\r
+\r
SAVJOB: JSP TAC1,SG1 ;SET UP ACS PROG,PDP,JDAT,ITEM.\r
; RESET DEVICES\r
HLRE TAC1,SGADMP(PROG) ;-NO. OF WORDS TO WRITE\r
UGETF 0,SGAHED ;GET FIRST FREE BLOCK(MEANINGFUL ONLY IF DTA)\r
; CAUSE ENTER TO ASSIGN FIRST LOBCK OF FILE\r
; AS LOWEST FREE BLOCK SO TENDMP CAN READ\r
+ ; SAVED FILES, SGAHED IS NO LONGER NEEDED(OPEN UUO)\r
ENTER 0,SGANAM ;ENTER FILE NAME IN DIRECTORY\r
JRST SAVERR ;DIRECTORY FULL OR PROTECTION FAILURE\r
MOVE TAC,JOB41(JDAT) ;SAVE USER UUO HANDLING JSR\r
CMPLP1: MOVEM TAC,DAT ;SAVE 1ST LOC FOR IOWD\r
CAMLE TAC1,ITEM ;SEARCH FOR 1ST NON-0 WORD\r
AOJA TAC,CMPTHR ;THROUGH\r
-\r
SKIPN @TAC1 ;THIS A DATA WORD?\r
AOJA TAC1,.-3 ;NO, KEEP LOOKING\r
MOVNI AC1,1 ;YES, AC1 WILL BE AN IOWD\r
SAVFIN: PUSHJ PDP,SGREL ;RELEASE DEVICE AND FIND TTY\r
JSP TAC,PHOLD ;PRINT MESSAGE AND STOP JOB\r
ASCIZ /JOB SAVED/\r
+\r
SAVERR: MOVEI TAC,PRTERR ;ERROR CORE IN CASE RUN UUO(PROTECTION ERROR)\r
; CHANGE TO DISK ERROR CODE IF DEV IS DSK\r
PUSHJ PDP,SGRELL ;CHANGE TO DISK ENTER ERROR CODE IF DSK\r
; PUSHJ PDP,GETJB\r
; RETURN ONLY IF EVERYTHING OK\r
\r
+\r
EXTERNAL JOBCOR,JOB,CPOPJ,JOBS41,JOB41\r
\r
GETJB:\r
; USER TO USE TO RESET CORE TO INITIAL SETTING WHEN\r
; PROGRAM IS RESTARTED\r
; FALL INTO SGREL\r
-\f;ROUTINE TO EXECUTE DUMP MODE COMMAND LIST SETUP IN SGALEN(R)\r
+\f\r
+;ROUTINE TO RELEASE DEVICE AND FIND TTY\r
+INTERN SGREL\r
+\r
+SGREL: SKIPN DEVDAT,USRJDA ;HAS CHANNEL BEEN RELEASED ALREADY?\r
+ JRST SGREL2 ;YES, FIND TTY AND WAIT FOR OUTPUT TO FINISH\r
+ PUSH PDP,T4 ;NO,\r
+ MOVE TAC1,DEVMOD(DEVDAT)\r
+ TLNE TAC1,DVMTA ;MAGTAPE?\r
+ TLNN DEVDAT,INPB ;YES, WAS AN INPUT DONE?\r
+ JRST SGREL1 ;NO\r
+ CLOSE 0,CLSOUT ;YES, CLOSE MTA INPUT\r
+ STATO 0,IOTEND+IODEND ;AT END OF APTE?\r
+ MTAPE 0,16 ;NO SKIP TO EOF\r
+SGREL1: RELEASE 0, ;NO RELEASE DEVICE\r
+ POP PDP,T4\r
+SGREL2:\r
+ JRST TTYFNU ;FIND TTY FOR CURRENT USER\r
+\r
+;ROUTINE TO EXECUTE DUMP MODE COMMAND LIST SETUP IN SGALEN(R)\r
;AND CHECK FOR ERRORS. USED ONLY TO READ LOW FILE.\r
;CALL: PUSHJ P,SGDO\r
; INPUT 0,SGALEN OR OUTPUT 0,SGALEN\r
; OF FIND TTY AND PRINT ?CRLF\r
JSP TAC,PHOLD ;START TTY AND STOP JOB\r
ASCIZ /TRANSMISSION ERROR/\r
-;ROUTINE TO RELEASE DEVICE AND FIND TTY\r
-INTERN SGREL\r
-\r
-SGREL: SKIPN DEVDAT,USRJDA ;HAS CHANNEL BEEN RELEASED ALREADY?\r
- JRST SGREL2 ;YES, FIND TTY AND WAIT FOR OUTPUT TO FINISH\r
- PUSH PDP,T4 ;NO,\r
- MOVE TAC1,DEVMOD(DEVDAT)\r
- TLNE TAC1,DVMTA ;MAGTAPE?\r
- TLNN DEVDAT,INPB ;YES, WAS AN INPUT DONE?\r
- JRST SGREL1 ;NO\r
- CLOSE 0,CLSOUT ;YES, CLOSE MTA INPUT\r
- STATO 0,IOTEND+IODEND ;AT END OF APTE?\r
- MTAPE 0,16 ;NO SKIP TO EOF\r
-SGREL1: RELEASE 0, ;NO RELEASE DEVICE\r
- POP PDP,T4\r
-SGREL2:\r
- JRST TTYFNU ;FIND TTY FOR CURRENT USER\r
\f;ROUTINE TO EXPAND CORE AFTER A SAVE(LOW SEG ONLY)\r
;CALL: MOVE DEVDAT,DEVICE ADR.\r
; MOVE PROG,JOBADR.\r
PUSHJ PDP,SGRELL ;RETURN DISK LOOKUP OR ENTER ERROR CODE IF DSK \r
; RELEASE DEVICE AND ERROR RETURN TO USER IF HE WANTED\r
; OR FIND TTY AND PRINT ?CRLF\r
+\r
MOVE TAC1,SGANAM(PROG) ;PRINT FILE NAME\r
PUSHJ PDP,PRNAME\r
PUSHJ PDP,PRPER ;PRINT PERIOD\r
>\r
SGRELE: MOVE TAC1,JOBPD1(JDAT) ;GET FIRST PC ON PD LIST\r
TLNN TAC1,USRMOD ;IS IT IN USER MODE(IE USER UUO)?\r
-\r
JRST SGRLE1 ;NO. MUST BE MONITOR COMMAND OR CALLED OVERLAYED\r
; RELEASE DEVICE, FIND TTY, AND RETURN TO CALLED\r
PUSH PDP,TAC ;SAVE ERROR CORE\r
SKIPE USRJDA+0 ;DO NOT RELEASE CHANNEL 0 IF NOT INITED YET\r
; UUO HANDLER DOES NOT ALLOW THIS FROM EXEC MODE\r
RELEAS 0, ;RELEASE DEVICE(IF INITED)\r
+ PUSH PDP,JOBPD1(JDAT) ;PUT RETURN ON END OF PDLIST\r
JRST USRXIT ;AND RETURN TO USER TO HANDLE ERROR\r
\r
+\r
SGRLE1: PUSHJ PDP,SGREL ;RELEASE DEVICE AND FIND TTY\r
JSP TAC,CONMES ;PRINT ?CRLF AND RETURN TO CALLER\r
; WHO WILL PRINT REST OF ERROR MESSAGE AND STOP JOB\r