/COS 300 FOREGROUND/BACKGROUND EDITED 10/5/73 /DEFINE WAIT BITS FOR THE RESTART WORD. /EACH I/O DEVICE HAS A CORRESPONDING BIT THAT GETS SET IN A /JOB'S RESTART MASK IF THE JOB IS WAITING ON THAT CONDITION. TTIBIT= L0001 TTOBIT= L0002 PTRBIT= L0004 PTPBIT= L0010 CDRBIT= L0020 DDDBIT= L1000 /EITHER DECTAPE OR DISK WAIT; EXCLUSIVE OR CONDITION OFFBIT= 2000 /ALL JOBS INITIALLY HAVE THIS SET; IT'S THE /BIT TO SHOW THE JOB HASN'T BEEN INITIALIZED IFNZRO DDDBIT-L1000 /ERROR AT KDBIT! /DEFINE INSTRUCTIONS TO LOAD AC CONSTANTS AC0001= CLA IAC AC0002= CLA CLL CML RTL AC7777= CLA CMA AC7776= CLA CLL CMA RAL AC7775= CLA CLL CMA RTL AC5777= CLA CLL CMA RTR AC4000= CLA CLL CML RAR AC2000= CLA CLL CML RTR AC3777= CLA CLL CMA RAR /MASK DEFINITIONS FOR OPTION SWITCHES /OPT FIELD CHARACTERS /CHAR TYPE ACCEPTED BITNUM= 0010 /# A 0123456789-./ BITA= 0020 /A A "A" THRU "Z" AND "SPACE" BITC= 0040 /C D CHECKDIGIT BITD= 0100 /D A&D AUTO-DUPE BITF= 0200 /F A&D ERROR IF FIELD OVERFLOW BITJ= 0400 /J D RIGHT JUSTIFY BITR= 1000 /R D RANGE CHECK R(M,N) BITT= 2000 /T D HASH TOTAL T(N) N = 0 THRU 9 BITZ= 0001 /Z A&D CLEAR FIELD AFTER OUTPUT /0002 AND 0004 ARE UNUSED /4000 BIT IS TO INDICATE A "D" FIELD /SIZE OF EACH JOB'S STACK STKSIZ= 25 JOBMAX= 6 /DEFINE IOT'S FOR ALL THE TERMINALS KSF0= 6031 TSF0= 6041 TLS0= 6046 KSF1= 6301 TSF1= 6311 TLS1= 6316 KSF2= 6321 TSF2= 6331 TLS2= 6336 KSF3= 6341 TSF3= 6351 TLS3= 6356 KSF4= 6361 TSF4= 6371 TLS4= 6376 KSF5= 6401 TSF5= 6411 TLS5= 6416 KSF6= 6421 TSF6= 6431 TLS6= 6436 /DEFINE SIZE OF INPUT, OUTPUT BUFFERS TTISIZ= 7 TTOSIZ= 7 /%BLOCK 1 *0 0 /USED BY THE SCHEDULER *1 WFITBU, CDF 0; E12 /"WHICH FORM IS TO BE USED?" BSWPTR, BSWX /USED IF NON-8E TO SIMULATE BSW VERSION,1 /VERSION # FOR OVERLAY CHECK /DEFINE INDEX REGISTERS *10 XR10, 0 /USED AT INTERRUPT LEVEL! XR11, 0 /USED AT INTERRUPT LEVEL! XR12, 0 /USED BY SCHEDULER XR13, 0 /USED BY SCHEDULER XR14, 0 /THE STATUS AREA OF THE CURRENTLY RUNNING JOB. THIS GETS SWAPPED EACH /TIME THE JOB DOES, AND SAVED IN AN AREA UNIQUE TO ITS CORRESPONDING JOB. /BE CAREFUL TO NOTE WHICH OF THESE ARE POINTERS, AND WHICH ARE /THE ACTUAL THINGS. THE STACK POINTER IS THE HONEST-TO-GOD STACK POINTER; /THE TTOCNT AND TTICNT ARE POINTERS TO THE WORDS CONTAINING THE CORRESPONDING /BUFFER COUNTS. AND SO FORTH. READ THE COMMENTS EXACTLY AS WRITTEN. CURJOB= . WRITXR, /USED BY THE WRITE ROUTINE PTFDP, XR15, 0 /POINTER TO FIELD DISCRIPTOR POINTERS PTFD, XR16, 0 /POINTER TO FIELD DISCRIPTOR STACK, STACK0-1 / ! THE STACK POINTER FOR THE CURRENT JOB TTOTLS, TLS0 /THE "TLS" IOT FOR THE CURRENT JOB'S TERMINAL TTOPUT, OBUF0 / ! THE CURRENT JOB'S TTY OUTPUT "PUT" POINTER TTIGET, IBUF0-1 / ! THE CURRENT JOB'S KBD INPUT "GET" POINTER TTOCNT, TTCTS / ! A POINTER TO THE CURRENT JOB'S OUTPUT BUFFER CHARACTER COUNT TTICNT, TTCTS+JOBMAX+1 / ! A POINTER TO THE CURRENT JOB'S INPUT BUFFER CHARACTER COUNT BASE, HLT /USERS BASE ADDRESS. FILLED IN BY FGM DEFOPT, 0 /SIGN WILL BE DEFINITION REST WILL BE OPTION FLAG(S) MCHRCT, 0 /-CHARACTER COUNTER LASTCH, 0000 /LAST CHARACTER TYPED TEMP5, 0 TEMP4, 0 TEMP3, 0 CHRNUM, TEMP2, 0 /CHARACTER NUMBER IN THE BUFFER MASK, JMSKTB / ! A POINTER TO THE CURRENT JOB'S MASK HANDLR, 0 /U0 WORD OF JOB'S LOGICAL UNIT (TO BE RESTORED WHEN FILE IS CLOSED) T1, 0 /TEMPS USED BY MONITOR T2, 0 T3, 0 UPDWRT, /USE T4 AS A FLAG TO TELL WETHER ANYTHING /HAS BEEN WRITTEN INTO THE UPDATE BUFFERS. T4, 0 T5, 0 T6, 0 UPDSIZ, 0000 /RECORD SIZE (-WC) -- MUST BE LEFT 0 IF IN OUTPUT MODE!!!!!!! UPDDIS, 0 /DISPLACEMENT FROM RECORD IMAGE TO UPDATE RECORD (IN CHARACTERS) W0, 0 /W0-U2 CONTAIN INFO ABOUT A JOB'S FILE W1, 0 /W1 HAS INFO FOR CLOSING THE FILE UPSEED, 0 /USES W2. NORMALLY THE RECORD NUMBER /YOU WANT TO LOOK AT IN UPDATE MODE. W2, 0 W3, 0 UPRECA, /USES W4,W5 AS A LOWER RANGE RECORD NUMBER /IN A BINARY SEARCH FOR UPDATE W4, 0 W5, 0 RWTEMP, UPRECB, 0000 /HIGH RECORD NUMBER 0000 /IN A BINARY SEARCH FOR UPDATE. UPDLST, 0 /LAST RECORD # FOR UPDATE UPDLTH, 0 / ** GOES WITH UDPLST! U0, 0 U1, 0 U2, 0 ARG1A, 0 /GET SET TO THE I/O PARAMETERS FOR THE ARG2A, 0 /OPERATION IN PROGRESS BY THE JOB. ARG3A, 0 /THEY'RE HERE SO THEY WILL BE INTACT IF ARG4A, 0 /IOWAIT HAS TO RETRY THE OPERATION TEMP, /ALSO USED AS A TEMPORARY SAVE AREA UDFX, 0 /ENTRY PT; ALSO A TEMPORARY USRCDF, HLT /SET TO CDF OF WHERE JOB'S BUFFERS, ETC. ARE CJEND= . JMP I UDFX /THIS MUST IMMEDIATELY FOLLOW "USRCDF" !!! UDF= JMS UDFX /CALL TO SET CURRENT USER DATA FIELD /DEFINE SUBROUTINE CALLS PUSHJ= JMS I .;PUSHJX POPJ= JMP I .;POPJX PUSH= DCA I STACK POP= JMS I .;POPX MOVE= JMS I .;ADV FETCHR= JMS I .;FETCHX PUTCHR= JMS I .;PUTCHX EXTRA= JMS I .;EXTRAX ISZTTO= JMP I .;ISZTTX /IMPORTANT SYSTEM VARIABLES JOB, 0 /THE JOB # OF THE CURRENTLY EXECUTING JOB LMJOBS, -JOBMAX / ! (-) THE NUMBER OF ACTIVE JOBS SYSQ, DSKQ /EITHER DSKQ OR DTAQ (SYSTEM QUEUE PTR) KDWAIT, DDWAIT / ! POINTER TO I/O STATUS TABLE KJMSKT, JMSKTB / ! POINTER TO JOB RESTART TABLE KESCAP, ESCAPE KABORT, ABORT IFLAGS, 0 /INTERRUPT FLAGS CTCFLG, 0 /SET TO -1 IF ^C SEEN FOR BACKGROUND UNITMX= 17 UNITMN= 1 UUPLIM, APLIM, UPLIM, -UNITMX-1 UDIFF, AIFF, DIFF, UNITMX-UNITMN+1 /USEFUL CONSTANTS L7, 7 L12, 12 L17, 17 L70, 70 L77, 77 L237, 237 L260, 260 L337, 337 L377, 377 L1400, 1400 L7400, 7400 L7600, 7600 L7700, 7700 M4, L7774, 7774 M2, L7776, -2 M1, L7777, 7777 L0001, MASKZ, BITZ L0002, 2 L0004, 4 L0010, MASKLB, BITNUM L0020, MASKA, BITA L0040, MASKC, BITC L100, L0100, MASKD, BITD L0200, MASKF, BITF L0400, MASKJ, BITJ L1000, MASKR, BITR L2000, MASKT, BITT L4000, 4000 LCDF, CDF CICDF0, CIF CDF 0 CIFFGM, HLT /HELPFUL TO KNOW WHERE WE ARE CDFT, 0000 CDFFGM, HLT JMP I CDFT MNTMSG, CDF 0; E1 /"MOUNT " AOOR, CDF 0; E17 /OUT OF RANGE? FNOTF, CDF 0; E9 /"FILE NOT FOUND?" UPDKEY, CDF 0; E25 /"NEW KEY? " OORU, CDF 0; E11 /"OUTPUT OR UPDATE?" RCERR= 24^200+0 /ROW 20, COLUMN 0 / *177 / /END OF FGBG2.PA