TITLE *************** ROUTINE TO WAKE UP JOBS *************** SUBTTL *** WORDS OF WISDOM *** ;******************************************************************** ;* * ;* ...AND THE EARTH WAS WITHOUT FORM, AND VOID; AND * ;* DARKNESS WAS UPON THE FACE OF THE DEEP. AND THE SPIRT * ;* OF GOD MOVED UPON THE FACE OF THE WATERS. AND GOD SAID, * ;* LET THERE BE LIGHT: AND THERE WAS LIGHT. * ;* * ;******************************************************************** SUBTTL *** INSTRUCTIONS *** COMMENT @ "COBWAK" -- ROUTINE TO WAKE UP A JOB ------------------------------------ THIS PROGRAM IS DESIGNED TO RUN EITHER AS A SUBROUTINE ENTERED FROM COBOL OR AS A PROGRAM RUN AT MONITOR LEVEL. THERE IS ONE PARAMETER THAT MUST BE DEFINED AT ASSEMBLY TIME TO DECIDE IN WHICH MANNER THE PROGRAM WILL BE ASSEMBLED. THE FOLLOWING SHOWS THE SETTINGS FOR BOTH ASSEMBLIES: EXEC==1 PRODUCES A COBOL SUBROUTINE. EXEC==0 (OR NOT DEFINED)PRODUCES A PROGRAM RUN AT MONITOR LEVEL. THE COMPILATION PROCEDURE IS AS FOLLOWS TO PRODUCE A COBOL SUBROUTINE: .R PIP *FTEXEC.MAC_TTY: EXEC==1 ^Z *^C .COMPILE FTEXEC+COBWAK THE LOADING IS AS FOLLOWS TO PRODUCE A PROGRAM RUN FROM MONITOR LEVEL: .LOAD COBWAK .SAVE WAKE @ IFE EXEC, COMMENT @ COBWAK EXPECTS THE FOLLOWING PARAMETER AREA TO BE SET UP BEFORE IT IS ENTERED FROM COBOL: 01 WAKE-ARGUMENTS. 02 WAKE-JOB PIC X(6). COBWAK IS THEN ENTERED FROM COBOL WITH THE FOLLOWING COBOL STATEMENT: ENTER MACRO COBWAK USING WAKE-ARGUMENTS. THE PARAMETER WAKE-JOB HOLDS THE NUMBER OF THE JOB TO BE AWAKEN IN SIXBIT LEFT JUSTIFIED. ON RETURN FROM THE SUBROUTINE WAKE-JOB WILL HOLD ONE OF THE FOLLOWING TWO MESSAGES: DONE JOB WOKE UP. ERROR JOB DID NOT WAKE UP. THIS OCCURS IF THE JOB WAS PROTECTED AGAINST BEING AWAKENED. COBWAK IS LOADED ALONG WITH THE COBOL PROGRAM THAT IS TO EXECUTE IT. THE FOLLOWING "CCL" COMMAND CAN BE USED TO LOAD COBWAK PROVIDED COBWAK.REL IS IN THE SYSTEM LIBRARY [1,4]. .LOAD "COBOL PROGRAM NAME",SYS:COBWAK THE JOB CAN THEN BE SAVED WITH THE MONITOR COMMAND "SSAVE JOBNAME" OR "SAVE JOBNAME". @ IFN EXEC, IFE EXEC, COMMENT @ WAKE [ASSEMBLED WITH EXEC==0 -- DEFAULT] RUNS FROM MONITOR LEVEL. WAKE WILL ASK FOR THE NUMBER OF THE JOB TO BE AWAKEN AND THEN WILL REPLY WITH A SHORT MESSAGE TELLING IF THE WAKE WAS DONE. EXAMPLE: .R WAKE JOB NUMBER--"USER SUPPLIES JOB NUMBER HERE" . THERE ARE SEVERAL MESSAGES THAT WAKE WILL TYPE THESE ARE AS FOLLOWS: JOB HAS LIFE! JOB WOKE UP. WAKE RETURNS TO MONITOR LEVEL. ? JOB DIDN'T WAKE UP. JOB IS STILL IN A SLEEP STATE OR AN ERROR OCCURED. WAKE ALLOWS THE USER ANOTHER CHANCE. ? BAD JOB NUMBER. THE USER HAS GIVEN WAKE A BAD JOB NUMBER TO WAKE UP. WAKE ALLOWS THE USER ANOTHER CHANCE. @ LIST SUBTTL *** DEFINITIONS *** ; ACCUMULATOR DEFINITIONS. T1=1 ;TEMPORARY STORAGE. T2=2 T3=3 WP=10 ;USED TO HOLD POINTER TO COBOL'S ARGS. PDP=17 ;PUSH-DOWN POINTER. ; OPCODE DEFINITIONS. OPDEF MME [XWD 047000,0] ;MASTER MODE ENTRY. OPDEF NOP [JFCL] ;NO OPERATION. ; MASTER MODE ENTRY SYMBOLS. .RESET==0 ;RESET THE WORLD. .WAKE==73 ;PUT LIFE IN A JOB. .TERM==12 ;TERMINATE THE JOB. ; CONSTANTS. ZERO==0 ;USED FOR INDEXING. ONE==1 ;DITTO. ; SWITCHES. IFNDEF EXEC, ;ZERO IF ASSEMBLED TO RUN AS PROGRAM. ; THINGS THAT HAVE NO OTHER PLACE TO LIVE. IFN EXEC, ;ENTRY POINT. SUBTTL *** THE PROGRAM *** IFE EXEC, ;HERE TO WAKE UP A JOB. COBWAK ASSUMES THAT IT ;WAS CALLED FROM COBOL WITH FOLLOWING TYPE OF ;PARAMETER AREA SET UP: ; ; 01 WAKE-ARGUMENTS. ; 02 WAKE-JOB PIC X(6). ; ;COBWAK IS THEN ENTERED WITH THE FOLLOWING COBOL ;STATEMENT: ; ;ENTER MACRO COBWAK USING WAKE-ARGUMENTS. IFN EXEC, < COBWAK: MOVE WP,ZERO(PDP) ;PICK UP POINTER TO POINTER. MOVE WP,@ZERO(WP) ;GET WHAT WE WANT. MOVE T2,ZERO(WP) ;PICK UP JOB NUMBER IN SIXBIT. SETZM T3 ;ZERO OUT REGISTER TO GET NUMBER. NXTDIG: SETZM T1 ;CLEAR A REGISTER. LSHC T1,6 ;GET A CHARACTER. SKIPN T1 ;NO SKIP IF THAT'S ALL. JRST LIFE ;GO SUPPLY LIFE. IMULI T3,^D10 ;SHIFT... ADDI T3,-20(T1) ;CONVERT...AND ADD... JRST NXTDIG ;GET NEXT DIGIT. LIFE: MME T3,.WAKE ;WAKE HIM UP. SKIPA T1,[SIXBIT "ERROR"] ;COULDN'T DO IT. MOVE T1,[SIXBIT "DONE"] ;HE IS ALIVE. MOVEM T1,ZERO(WP) ;SAVE RESULT SO GOOD PEOPLE CAN LOOK AT IT. AOS (PDP) ;BUMP POINTER OVER ARGUMENT. POPJ PDP,COBWAK ;BACK TO COBOL. END> IFE EXEC, ;PROGRAM TO WAKE UP A JOB. WAKE WILL ASK FOR ;THE JOB NUMBER OF THE JOB THAT IT IS TO AWAKENED. ;WAKE WILL THEN TYPE A SHORT MESSAGE ;TELLING IF THE WAKE WAS DONE. ;EXAMPLE: ; ; .R WAKE ; ; JOB NUMBER--"SUPPLY JOB NUMBER HERE" ; JOB HAS LIFE! ; ;WAKE MUST BE RESTARTED FOR EACH JOB THAT IS ;TO BE AWAKEN. IFE EXEC, < WAKE: MME .RESET ;RESET THE WORLD. TTCALL 3,[ASCIZ "JOB NUMBER--"];ASK FOR A JOB TO WAKE. SETZM T3 ;CLEAR REGISTER TO GET RESULT. NXTDIG: TTCALL 4,T1 ;GET A CHARACTER. CAIE T1,15 ;IGNORE RETURNS. CAIN T1,40 ;IGNORE SPACES. JRST NXTDIG ;GET NEXT CHARACTER. CAIN T1,12 ;LINE-FEED IS END OF LINE. JRST LIFE ;GIVE JOB LIFE. CAIL T1,"0" ;MAKE SURE WE HAVE A NUMBER. CAILE T1,"9" ;TEST BOTH LIMITS. JRST BADNUM ;BAD NUMBER IN INPUT STRING. IMULI T3,^D10 ;SHIFT LEFT. ADDI T3,-60(T1) ;ADD IN NEW DIGIT. JRST NXTDIG ;AGAIN PLEASE. LIFE: MME T3,.WAKE ;GIVE THAT GUY SOME LIFE. JRST FAIL ;WHAT HAPPENED. TTCALL 3,[ASCIZ "JOB HAS LIFE!"];DONE. TTCALL 3,[BYTE (7),15,12,0] ;SUPPLY A CRLF. MME 1,.TERM ;TERMINATE. JRST .-1 ;INCASE OF CONTINUE. FAIL: TTCALL 3,[ASCIZ "? JOB DIDN'T WAKE UP."] TTCALL 3,[BYTE (7)15,12,12,0] ;SUPPLY A RETURN. JRST WAKE ;TRY AGAIN... BADNUM: TTCALL 4,T1 ;WAIT FOR LINE-FEED. CAIE T1,12 ;TEST THE CHARACTER. JRST BADNUM ;WAIT FOR IT. TTCALL 3,[ASCIZ "? BAD JOB NUMBER."] JRST FAIL+1 ;TRY AGAIN. END WAKE> ;STARTING ADDRESS FOR WAKE. END