*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,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,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,WCBUF[1],ABH[1],SBUILD[0]); WCB$WC[1] = 5; NCH$VER[0] = CSNCFVER; SSTAQE(P,WCBUF[1],ABH[1],NCHDR[0]); WCB$WC[1] = 3; SSTAQE(P,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,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,WCBUF[1],ABH[1],MSGBUF[1]); END # IF OC$STATE # END # FOR LOOP HRQL # ENDEXIT: DVAR = 1; END # CSOGHL # TERM