TITLE VTSSEG -- SHARED SEGMENT PART OF VTTAM SYSTEM ;TONY LAUCK 2 JUN 71 HISEG ;THIS SHARED SEGMENT IS USED BY THE VTTAM MASTER JOB TO COMMUNICATE ;WITH ALL THE VTTAM SLAVE JOBS. ALL THE JOBS INITIALIZE THIS ;SEGMENT WITH A GETSEG AND SETUWP UUO. ;THIS SEGMENT CONTAINS FLAGS AND CONTROL WORDS TO ENABLE ;MASTER / SLAVE COMMUNICATION. ;THIS SEGMENT CONTAINS A SHARED OUTPUT BUFFER WHICH THE MASTER ;JOB FILLS AND THE APPROPRIATE SLAVE EMPTIES. ;THIS SEGMENT CONAINS A SHARED INPUT BUFFER WHICH THE SLAVES ;FILL AND THE MASTER EMPTIES. THE SLAVES CONTEND FOR THIS BUFFER. ;THIS SEGMENT CONTAINS QUEUEING TABLES TO ENABLE THE SLAVES ;TO CONTEND FOR THE SHARED INPUT BUFFER ON A F.C.F.S. BASIS. ;THIS SEGMENT CONTAINS SYNCHRONIZING TABLES AND COUNTS ;TO ENABLE CORRECT OPERATION OF THE QUEUEING FUNCTION. ;FINALLY, THIS SEGMENT CONTAINS INFORMATION ENABLING THE MASTER ;AND SLAVES TO START UP AND SHUT DOWN SMOOTHLY, AND KNOW EACH OTHER'S ;JOB NUMBERS. SUBTTL PARAMETERS ;THESE PARAMETERS MUST AGREE WITH THOSE DEFINED BY THE MASTER AND SLAVE. ;VT05 PARAMETERS SCRCOL=^D72 ;COLUMNS PER LINE OF VT05 SCRLIN=^D20 ;LINES PER SCREEN OF VT05 INTERN SCRCOL,SCRLIN ;FORCE AGREEMENT. SCRCHR=SCRCOL*SCRLIN ;CHARACTERS PER SCREEN SCRWDS=/6 ;WORDS PER SCREEN (DISPLAY-6) ;TABLE SIZE PARAMETERS. MAXTRM=^D63 ;MAXIMUM NUMBER OF VTTAM TERMINALS INTERN MAXTRM ;DEFINE FOR MASTER AND SLAVE QSIZE=MAXTRM+1 ;NUMBER OF ENTRIES IN QUEUE AREA QSIZW=/5 ;NUMBER OF WORDS IN QUEUE AREA ; (7 BIT BYTE PER ENTRY) ;INPUT BUFFER QUEUE TABLES. ;THESE ARE READ OR WRITTEN ONLY WITH THE CRITICAL SECTION ASSIGNED ; EXCEPT FOR ONE CASE: A SLAVE OWNING AVLINP MAY PASS IT TO ; THE MASTER PROVIDED HE HASN'T SIGNALED THE MASTER YET. INTERN AVLINP,QBFINP,QININP,QOUINP,QSTINP,QFNINP QSTINP: POINT 7,QBFINP ;BYTE POINTER TO START OF QBFINP QFNINP: POINT 7,QBFINP+QSIZW-1,34 ;BYTE POINTER TO END OF QBFINP. USED TO ALLOW ; CIRCULAR USE OF QBFINP. ;1ST WORD TO ZERO ON START UP. INTERN SHZERL SHZERL: AVLINP: BLOCK 1 ;ASSIGNMENT WORD FOR SHARED INPUT BUFFER. ;0 MEANS BUFFER IS FREE. ;NON-ZERO IS JOB NUMBER OF OWNER. ;-1 MEANS WAS PASSED TO THE MASTER. QBFINP: BLOCK QSIZW ;TABLE OF 7 BIT BYTES HOLDING THE JOB ; NUMBERS OF REQUESTORS FOR THE SHARED INPUT ; BUFFER. THIS IS A CIRCULAR TABLE, AND ENABLES ; F.C.F.S. USE OF THE INPUT BUFFER. QININP: BLOCK 1 ;BYTE POINTER USED BY SLAVE IN ADDING ENTRIES ;INTO QBFINP. QOUINP: BLOCK 1 ;BYTE POINTER USED BY MASTER FOR REMOVING ;ENTRIES FROM QBFINP. SUBTTL QUEUING AND SYNCRONIZING TABLES ;CRITICAL SECTION TABLES INTERN QREQ,QBITS QREQ: BLOCK 1 ;CRITICAL SECTION SYNC COUNT. ;-1 IF CRITICAL SECTION FREE, ; .GE. 0 IF BUSY. ;AOS'D ON REQUEST. ;SOS'D ON RELEASE. QBITS: BLOCK 4 ;BIT TABLE INDEXED BY JOB NUMBER. ;A BIT SET MEANS THE CORRESPONDING JOB ; IS ABOUT TO REQUEST THE CRITICAL ; SECTION, HAS JUST REQUESTED IT AND ; IS WAITING, HAS JUST REQUESTED IT, ; OBTAINED IT AND IS ABOUT TO CLEAR THE ; BIT, OR HAS JUST BEEN ASSIGNED THE ; CRITICAL SECTION BY ITS PREVIOUS OWNER ; AND THE PREVIOUS OWNER IS ABOUT TO ; CLEAR THE BIT. ;THIS BIT ENABLES AN OWNER TO WAKE UP ; A WAITER WHEN RESOUCE IS FREE. A ; WAITER LOOPS UNTIL HIS BIT IS CLEARED ; BY AN OWNER. SUBTTL COMMUNICATIONS AND CONTROL INTERN MJOBN,JOBTAB,STDAY,STTIME MJOBN: BLOCK 1 ;MASTER STORES HIS JOB NUMBER HERE SO ; SLAVES CAN WAKE HIM. JOBTAB: BLOCK MAXTRM+1 ;TABLE INDEXED BY VTTAM TERMINAL NO. ;SLAVES STORE THEIR JOB NUMBERS HERE ; SO MASTER CAN WAKE THEM. ;SLAVES CLEAR THEIR JOB NUMBER WHEN THEY ; ARE IDLE. THIS ENABLES START-UP ; SHUT-DOWN SYNCHRONIZATION. STDAY: BLOCK 1 ;DATE VTTAM STARTED OR STOPPED IN ; STANDARD 12 BIT FORMAT. ;MASTER SETS THIS SO SLAVE CAN OUTPUT ; ITS OPEN AND CLOSE MESSAGES. STTIME: BLOCK 1 ;MSTIME + 1 WHEN MASTER STARTED UP, OR ; -(MSTIME + 1) WHEN MASTER SHUT DOWN. ;ZERO WHEN VTTAM IS SAFELY STOPPED. ;USED TO TELL SLAVES OF START UP, OR ; SHUT DOWN, AND TO SYNCHRONIZE ; START-UP SHUT-DOWN. SUBTTL BUFFERING AND REQUEST / RESPONSE ;INPUT TRANSACTIONS. INTERN SINFLG,SINBF SINBF: BLOCK SCRWDS ;SHARED INPUT BUFFER. ;SLAVE PUTS A SCREEN IMAGE HERE WHEN IT ;WANTS IT PROCESSED BY MASTER. THE SLAVE ;MUST HAVE INPUT BUFFER RESOURCE TO DO ;THIS. THE MASTER READS THIS TO GET ;DATA FOR THE COBOL PROGRAM. SINFLG: BLOCK 1 ;INPUT BUFFER REQUEST/RESPONSE WORD ;IF 0, INPUT BUFFER IS EMPTY. ;IF NON-ZERO, IT CONTAINS DATA FROM ;VTTAM TERMINAL NUMBER STORED HERE. ;SINFLG IS SET BY SLAVE AFTER FILLING ;SINBF, AND CLEARED BY MASTER AFTER ;READING DATA FROM SINBF ;OUTPUT TRANSACTIONS. INTERN SOUTBF,SOUTRM,SOUMOD SOUTBF: BLOCK SCRWDS ;SHARED OUTPUT BUFFER. ;MASTER PUTS A SCREEN IMAGE HERE. ;THE APPROPRIATE SLAVE COPIES THE ;DATA TO ITS OWN BUFFERS AND OUTPUTS IT. SOUTRM: BLOCK 1 ;OUTPUT BUFFER REQUEST / RESPONSE WORD. ;0 IF SOUTBF IS EMPTY. ;ELSE CONTAINS VTTAM TERMINAL NUMBER ;OF DATA IN SOUTBF. ;SET BY MASTER AFTER FILLING SOUTBF. ;CLEARED BY SLAVE AFTER EMPTYING SOUTBF. SOUMOD: BLOCK 1 ;INDICATES TYPE OF OUTPUT REQUEST. ;SET BY MASTER BEFORE IT SETS SOUTRM. ;-1 MEANS ERASE SCREEN. ;0 MEANS WRITE WHOLE SCREEN. ;.GT.0 MEANS WRITE LINE NUMBER HERE ;USING THE FIRST LINE OF DATA IN SOUTBF. ;LAST WORD OF SHARED DATA TO ZERO INTERN SHZERH SHZERH=.-1 END