cdc:nos2.source:nam5871:csoghl
Table of Contents
CSOGHL
Table Of Contents
- [00008] PROC CSOGHL
- [00009] CSOGHL - GENERATE HISTORY LINES
- [00014] GENERATE HISTORY LINES.
- [00038] PROC MOVE
- [00039] PROC SSBTBW
- [00040] PROC SSTRQE
- [00041] PROC SSTAQE
Source Code
- CSOGHL.txt
- *DECK CSOGHL
- USETEXT TEXTCS;
- USETEXT TEXTSS;
- USETEXT TXTSMCS;
- USETEXT TXTSUSS;
- USETEXT TXTAPSS;
- USETEXT TXCMDCS;
- PROC CSOGHL;
- # TITLE CSOGHL - GENERATE HISTORY LINES #
- BEGIN # CSOGHL #
- #
- ** CSOGHL - GENERATE HISTORY LINES.
- *
- * C. BRION 82/05/24.
- *
- * THIS PROCEDURE GENERATES THE HISTORY LINES TO AN OPERATOR.
- * THE HISTORY REQUEST QUEUE IS NON-EMPTY ON ENTRY.
- *
- * PROC CSOGHL
- *
- * ENTRY
- * ENTRIES IN THE HISTORY REQUEST QUEUE.
- *
- * EXIT
- * CONTENTS OF THE HISTORY BUFFER IN THE FORM OF TERMINAL TEXT
- * TO THE CONNECTION TRAFFIC QUEUE.
- *
- #
- #
- **** PROC CSOGHL XREF LIST
- #
- XREF
- BEGIN
- PROC MOVE; # MOVE A BLOCK OF CM WORDS #
- PROC SSBTBW; # TEST BIT IN WORD #
- PROC SSTRQE; # SS-REMOVE QUEUE ENTRY #
- PROC SSTAQE; # SS-ACCEPT QUEUE ENTRY #
- END
- #
- ****
- #
- #
- * AGSWTCH - SWITCH LIST USED TO SELECT THE APPROPRIATE PARAGRAPH
- * TO EXECUTE BASED ON THE AUDIENCE GROUP OF THE MESSAGE.
- #
- SWITCH AGSWTCH ENDCASE,
- AUDGR1,
- AUDGR2,
- AUDGR3,
- AUDGR4,
- ENDCASE,
- AUDGR6;
- #
- * PROC CSOGHL ITEMS
- #
- ITEM CSHSBLCNT; # HISTORY BUFFER LINE COUNT #
- ITEM I;
- ITEM BEGSPIX U; # ALL KEYWORD INDEX #
- ITEM LITOPASS U; # LINES TO PASS #
- ITEM LILOC U; # LINE PTR IN HISTORY BUFFER #
- ITEM ALLON B; # ALL INDICATOR #
- ITEM NLINES U; # LINE COUNTER #
- ITEM MSGINDEX U; # INDEX INTO MSGBUF #
- ITEM REPORT B; # REPORT FLAG #
- ITEM DVAR U;
- #
- * BLINE - BLANK LINE MESSAGE ARRAY.
- #
- ARRAY BLINE [00:00] S(1);
- BEGIN
- ITEM BLI$TXT1 C(00,00,01) = [" "];
- ITEM BLI$ZERO U(00,06,54) = [0];
- END
- #
- * NCHDR - NCF VERSION HEADER FOR HISTORY,ALL CMD.
- #
- ARRAY NCHDR [00:00] S(3);
- BEGIN
- ITEM NCH$TXT C(00,00,04) = ["NCF "];
- ITEM NCH$VER C(00,24,20);
- ITEM NCH$ZERO U(02,24,36) = [0];
- END
- #
- * PROC CSOGHL EXECUTION STARTS HERE.
- #
- #
- * THE MAIN LOOP OF THIS PROC CONTINUES UNTIL THE HISTORY REQUEST
- * QUEUE HAS BEEN EXHAUSTED.
- #
- FOR I = 0 STEP 1 WHILE HRQL NQ 0
- DO
- BEGIN
- SSTRQE(P<HRQ>,WCBUF[0],HDRCMD[0],PARMS[0]);
- #
- * INITIALIZE THE OUTGOING TTEXT ENTRY AREAS.
- #
- WCB$WORD[1] = 0;
- ABHWORD[1] = 0;
- WCB$SMID[1] = SMID"TTEXT";
- WCB$IAF[1] = FALSE;
- WCB$HAF[1] = FALSE;
- ABHADR[1] = HDR$OPORD[0];
- #
- * THE STATE OF THE CONNECTION TO THE OPERATOR MUST BE ACTIVE FOR
- * THE HISTORY REQUEST TO BE PROCESSED.
- #
- IF OC$STATE[HDR$OPORD[0]]
- THEN
- BEGIN
- #
- * CHECK IF HISTORY BUFFER EMPTY. IF SO, SIMPLY GENERATE A NULL
- * TTEXT ENTRY TO CAUSE THE READY.. MESSAGE TO OPERATOR.
- #
- IF HBFQL EQ 0
- THEN
- BEGIN
- WCB$WC[1] = 2;
- WCB$IAF[1] = TRUE;
- SSTAQE(P<CNQ>,WCBUF[1],ABH[1],CSSM[1]);
- GOTO ENDEXIT;
- END
- #
- * THE OCB IS STILL ACTIVE. CHECK IF AN HISTORY, ALL REQUEST BY THE
- * PRESENCE OF THE ALL KEYWORD. IF ALL REQUEST, SET UP TO ISSUE THE
- * ENTIRE BUFFER.
- #
- CSHSBLCNT = HBFQL / HBFESIZ$;
- BEGSPIX = HDR$TXWCNT[0] + 1; # SET ALL INDEX LOCATION #
- ALLON = FALSE;
- IF PAR$PCODE[BEGSPIX] EQ "ALL"
- THEN
- BEGIN
- LITOPASS = CSHSBLCNT; # SET FOR ALL LINES TO GO #
- LILOC = 0;
- ALLON = TRUE;
- END
- ELSE
- #
- * JUST HISTORY COMMAND. SET UP TO ISSUE LAST PAGE OF BUFFER TO
- * THE OPERATOR BASED ON THE PAGE LENGTH. IT IS POSSIBLE THAT
- * THE BUFFER DOES NOT CONTAIN MORE LINES THAN PAGE LENGTH SO
- * THEN SET UP AS IF ALL REQUEST EXCEPT FOR HEADER.
- #
- BEGIN
- IF OC$PL[HDR$OPORD[0]] EQ 0 # NO PAGE LENGTH DEFINED #
- THEN
- LITOPASS = DEFPL$; # USE DEFAULT #
- ELSE
- LITOPASS = OC$PL[HDR$OPORD[0]];
- IF LITOPASS GR CSHSBLCNT # HSB LESS THAN PL #
- THEN
- BEGIN
- LITOPASS = CSHSBLCNT;
- END
- END # IF ALL #
- #
- * BEGINNING WITH THE LAST ENTRY IN THE HISTORY BUFFER QUEUE, SELECT
- * THE PARAGRAPH TO APPLY BASED ON AUDIENCE GROUP. DO THE UNTIL
- * THE NUMBER OF LINES TO SEND TO THE OPERATOR IS REACHED OR THE
- * ENTIRE HISTORY BUFFER IS SCANNED.
- #
- NLINES = 0;
- FOR I=CSHSBLCNT STEP -1 WHILE NLINES LS LITOPASS AND
- I GR 0
- DO
- BEGIN
- HBF$LFLG[I] = FALSE;
- GOTO AGSWTCH[HBF$AGRP[I]];
- #
- * AUDIENCE GROUP ONE -- SET THE LIST FLAG AND INCREMENT THE SEND
- * LINE COUNT.
- #
- AUDGR1:
- HBF$LFLG[I] = TRUE;
- NLINES = NLINES + 1;
- GOTO ENDCASE;
- # AUDIENCE GROUP TWO -- IF THIS OPERATOR IS NOT A DOP, THEN SET
- * THE LIST FLAG AND INCREMENT THE SEND LINE COUNT.
- #
- AUDGR2:
- IF OC$TYPE[HDR$OPORD[0]] NQ OPTYP"DOP"
- THEN
- BEGIN
- HBF$LFLG[I] = TRUE;
- NLINES = NLINES + 1;
- END
- GOTO ENDCASE;
- #
- * AUDIENCE GROUP THREE -- IF REPORT IS TO BE RECEIVED BY THIS
- * OPERATOR, THEN SET THE LIST FLAG AND INCREMENT THE SEND LINE
- * COUNT.
- #
- AUDGR3:
- SSBTBW( NPU$RFLGS[HBF$NORD[I]] , HDR$OPORD[0] , REPORT );
- IF REPORT
- THEN
- BEGIN
- HBF$LFLG[I] = TRUE;
- NLINES = NLINES + 1;
- END
- GOTO ENDCASE;
- #
- * AUDIENCE GROUP FOUR -- IF THIS OPERATOR IS THE HOP OR CONTROLLING
- * NOP, THEN SET THE LIST FLAG AND INCREMENT THE SEND LINE COUNT.
- #
- AUDGR4:
- IF HDR$OPORD[0] EQ HOPORD$ OR
- HDR$OPORD[0] EQ NPU$CNOP[HBF$NORD[I]]
- THEN
- BEGIN
- HBF$LFLG[I] = TRUE;
- NLINES = NLINES + 1;
- END
- GOTO ENDCASE;
- #
- * AUDIENCE GROUP SIX -- IF THIS OPERATOR IS THE HOP, THEN SET
- * THE LIST FLAG AND INCREMENT THE LINE COUNT.
- #
- AUDGR6:
- IF HDR$OPORD[0] EQ HOPORD$
- THEN
- BEGIN
- HBF$LFLG[I] = TRUE;
- NLINES = NLINES + 1;
- END
- GOTO ENDCASE;
- ENDCASE:
- END # I LOOP #
- #
- * IF HISTORY ALL REQUEST, ISSUE HEADER TEXT FIRST.
- #
- IF ALLON
- THEN
- BEGIN
- WCB$WC[1] = 6;
- SBD$ANAME[0] = "CS "; # SET HDR PRG NAME #
- SSTAQE(P<CNQ>,WCBUF[1],ABH[1],SBUILD[0]);
- WCB$WC[1] = 5;
- NCH$VER[0] = CSNCFVER;
- SSTAQE(P<CNQ>,WCBUF[1],ABH[1],NCHDR[0]);
- WCB$WC[1] = 3;
- SSTAQE(P<CNQ>,WCBUF[1],ABH[1],BLINE[0]);
- END
- #
- * BEGINNING WITH THE FIRST HISTORY LINE TO SEND, SEND EACH LINE
- * THAT HAS THE LIST FLAG SET UNTIL THE END OF THE HISTORY BUFFER.
- #
- WCB$WORD[1] = 0;
- WCB$SMID[1] = SMID"TTEXT";
- ABHWORD[1] = 0;
- ABHADR[1] = HDR$OPORD[0];
- FOR I=I+1 STEP 1 UNTIL CSHSBLCNT
- DO
- BEGIN
- IF HBF$LFLG[I]
- THEN
- BEGIN
- WCB$WC[1] = HBF$WC[I] + 2;
- MOVE(HBF$WC[I],HBFQ[I],MSGBUF[1]);
- SSTAQE(P<CNQ>,WCBUF[1],ABH[1],MSGBUF[1]);
- END
- END
- #
- * SEND EMPTY TERMINAL TEXT WITH THE INPUT ALLOWED FLAG SET.
- #
- WCB$WORD[1] = 2;
- WCB$SMID[1] = SMID"TTEXT";
- WCB$IAF[1] = TRUE;
- ABHWORD[1] = 0;
- ABHADR[1] = HDR$OPORD[0];
- SSTAQE(P<CNQ>,WCBUF[1],ABH[1],MSGBUF[1]);
- END # IF OC$STATE #
- END # FOR LOOP HRQL #
- ENDEXIT:
- DVAR = 1;
- END # CSOGHL #
- TERM
cdc/nos2.source/nam5871/csoghl.txt ยท Last modified: 2023/08/05 17:21 by Site Administrator