cdc:nos2.source:nam5871:khopdis
Table of Contents
KHOPDIS
Table Of Contents
- [00013] PRGM KHOPDIS
- [00074] PROC XTRACE
- [00075] PROC MRELS
- [00076] PROC HRELPWL
Source Code
- KHOPDIS.txt
- *DECK KHOPDIS
- USETEXT NIPDEF
- USETEXT DRHDR
- USETEXT KINITBF
- USETEXT ACB
- USETEXT KDIS
- USETEXT DISTAIL
- USETEXT SUPMSG
- USETEXT OVERLAY
- USETEXT PARAMS
- USETEXT APPSTAT
- USETEXT NWLNTRY
- PRGM KHOPDIS;
- STARTIMS;
- #
- *1DC KHOPDIS
- *
- * 1. PROC NAME AUTHOR DATE
- * KHOPDIS A. BEN-ARTZI 81/12/08
- *
- * 2. FUNCTIONAL DESCRIPTION
- *
- * PUT HOP/DIS MESSAGES ON K-DISPLAY SCREEN
- *
- * 3. METHOD USED
- * DECODE OUT THE DIS MESSAGE FROM NWL.
- * RELEASE USED PORTION OF NWL.
- * CHAIN BUFFER WITH K-DISPLAY DATA RING, AND
- * RELEASE SAME NUMBER OF LINES FROM TOP OF RING.
- *
- * 4. ENTRY PARAMETERS.
- *
- * WLADDR
- *
- * 5. EXIT PARAMETERS
- *
- * PARAMS1 - ERROR CODE (IF ANY)
- *
- * 6. COMDECKS CALLED AND SYMPL TEXT USED
- *
- * NIPDEF KDIS DISTAIL
- * SUPMSG APPSTAT NWLNTRY
- * DRHDR KINITBF PARAMS
- *
- * 7. ROUTINES AND OVRLAYS CALLED
- *
- * XTRACE - TRACE PROCEDURE CALL
- * MRELS - RELEASE BUFFER SPACE
- * HRELPWL - RELEASE USED PORTION OF WORKLIST
- *
- *
- *
- *
- * 8. DAYFILE MESSAGES
- *
- * THIS PROGRAM IS A SECONDARY OVERLAY LOADED BY
- * SUBROUTINE OVLCALL. WHEN EXECUTION HAS COMPLETED,
- * A JUMP IS MADE TO LOCATION RJMAIN TO RETURN TO
- * THE CALLING PROGRAM.
- *
- * W A R N I N G - THIS PROGRAM CANNOT EXCEED THE SECONDARY
- *CALL OSSIZE
- *
- * THIS OVERLAY IS CALLED BY HPKDISP
- *
- #
- STOPIMS;
- #
- EXTERNAL REFERENCES
- #
- XREF
- BEGIN
- LABEL RJMAIN; # RETURN ADDRESS IN OVLCALL #
- PROC XTRACE;
- PROC MRELS;
- PROC HRELPWL;
- END
- #
- INTERNAL VARIABLES
- #
- ITEM ENDLOOP I=0 ;
- ITEM KLINES I=0 ; # NUMBER OF LINES IN HOP/DIS RECEIVED #
- ITEM KINDEX I=0; # LOCAL LOOP COUNTER #
- ITEM KCOUNT I=0; # LOCAL COUNTER #
- ITEM KDONE B ; # AND OF RELEASE LOOP CHECK #
- ITEM K2 I=0; # NO OF DOWN LINES KDISTOP SHOULD MOVE #
- ITEM KBACK U ; # ADDRESS OF FORMER BLOCK IN RING #
- ITEM KREL U ; # ADDRESS OF BUFFER TO BE RELEASED #
- BASED ARRAY HOPLN [1:1] S(1) ;
- BEGIN
- ITEM HOPENDL U(0,48,12) ;
- ITEM HOPSTRL U(0,0,12) ;
- ITEM HOPWRDL U(0,0,60) ;
- END
- BEGIN
- CONTROL IFEQ DEBUG,1;
- XTRACE("KHOPD");
- CONTROL FI;
- #**********************************************************************#
- PARAMS1 = 0 ;
- #
- FIRST PUT THE TABLETS
- #
- P<DRHDRWD> = WLADDR;
- P<SUPMSG> = WLADDR + AIPHSIZE + ABHSIZE;
- P<HOPLN> = P<SUPMSG> + 1 ;
- IF HOPI[0]
- THEN # WE CAN ENABLE INPUT TO APPLICATION #
- BEGIN
- KDNI[0]=FALSE;
- KDBK[0]=FALSE;
- END
- # #
- P<KINITBF> = WLADDR + BLKBS[0]-1; # TABLET ON LAST WORD OF BUFFR#
- IF P<KINITBF> LS P<HOPLN>
- THEN # NO DATA AT ALL. EVEN A ZERO WORD #
- GOTO ERRX ;
- IF HOPSCR THEN
- BEGIN
- K7777[0] = 0;
- KDSTAIL[0] = 0; # END OF RIGHT DISPLAY #
- END
- ELSE
- BEGIN
- K7777[0] = O"7777";
- KDSTAIL[0] = LOC(KDTLNAM[0])+1;# AND POINT TO NEXT DATA(TAIL) #
- END
- #
- SCAN ALL MESSAGE TO SEE HOW MANY LINES WE GOT (BYTE 4=BINARY 0
- #
- KLINES = 0 ;
- ENDLOOP = BLKBS[0] - AIPHSIZE - ABHSIZE - KHDRSIZE - 1 ;
- IF ENDLOOP EQ 0
- THEN # EMPTY HOPDIS #
- GOTO KEXIT ;
- IF HOPWRDL[1] EQ 0
- THEN # TERMINATOR WITHOUT TEXT #
- GOTO ERRX ;
- FOR KINDEX=1 STEP 1 UNTIL ENDLOOP DO
- BEGIN
- IF HOPSTRL[KINDEX] EQ 0 AND HOPWRDL[KINDEX] NQ 0
- THEN
- GOTO ERRX ;
- IF HOPENDL[KINDEX] EQ 0
- THEN
- BEGIN
- KLINES = KLINES+1;
- IF (HOPWRDL[KINDEX+1] EQ 0) AND
- (KINDEX NQ ENDLOOP)
- THEN # DSD MAY GET CONFUSED #
- GOTO ERRX ;
- END
- END
- BLKID[0] = KDISIDVALUE; # THEN MAKE IT A K TYPE BLOCK #
- P<KINITBF> = WLADDR+BLKHSIZE ;
- KDTYPE[0] = KDISTYPE ;
- IF HOPSCR THEN
- BEGIN
- IF KDRFP[0] NQ 0
- THEN # PREVIOUS RIGHT SCREEN BUFFER EXISTS #
- BEGIN
- MRELS(KDRFP[0]); # RELEASE PREVIOUS RIGHT SCREEN BUFFER #
- END
- HRELPWL; # RELEASE FIRST PART OF NWL #
- BACKPTR[0] = LOC(KDRBP[0]); # CHAIN BUF INTO RIGHT SCRN CHAIN #
- KDRBP[0] = WLADDR;
- NEXTPTR[0] = LOC(KDRFP[0]);
- KDRFP[0] = WLADDR;
- KDRSTOP[0] = WLADDR+3; # POINT TO FIRST DISPLAY WORD #
- GOTO RJMAIN;
- END
- #
- NOW WE UPDATE DATA AND POINTERS IN THE BLOCK WE JUST GOT
- #
- BACKPTR[0] = KDBP[0]; # FIRST PUT INTO K RING #
- NEXTPTR[0] = LOC(KDFP[0]);
- #
- NOW UPDATE THE LAST BLOCK (TO BE CHAINED TO NEW ONE)
- #
- P<DRHDRWD> = KDBP[0]; # HERE IT IS #
- # #
- NEXTPTR[0] = WLADDR;
- # #
- P<KINITBF> = KDBP[0]+BLKBS[0]-1; # PUT TABLET ON LAST WORD OF BLK#
- KDSTAIL[0] = P<HOPLN> ; # AND POINT TO NEW DATA #
- #
- FINALLY SHOW THE CHAIN BOTTOM MOVE ON THE KDIS COMMON
- #
- KDBP[0] = WLADDR;
- #
- AND RELEASE USED PORTION ON NWL
- #
- HRELPWL;
- #
- NOW WE MOVE KDISTOP POINTER DOWN,SAME LINES AS NEWLY CAME
- #
- KCOUNT=0;
- K2 =0;
- KDONE = FALSE ;
- P<KINITBF> = KDLSTOP[0]; # START COUNTING FROM CURRENT LOCATION #
- # #
- FOR KINDEX =0 WHILE NOT KDONE DO
- BEGIN
- # #
- IF K7777[KCOUNT] EQ O"7777" # THIS IS NOT A DATA LINE #
- THEN
- BEGIN # JUMP TO NEXT BLOCK TO CONTINUE SEARCH.RELEASE THIS ONE #
- # #
- KDLSTOP[0] = KDSTAIL[KCOUNT];
- P<KINITBF> = KDLSTOP[0];
- KCOUNT = 0;
- # AND RELEASE THE ONE JSUT PASSED #
- P<DRHDRWD> = KDFP[0];
- KBACK = BACKPTR[0] ;
- KDFP[0]=NEXTPTR[0] ;
- IF KDORIG[0]
- THEN
- BEGIN # THIS IS OUR FIRST AND SPECIAL BUFFER #
- BACKPTR[0] = LOC(KORIGBP[0]) ; # SO WE SAVE IT #
- NEXTPTR[0] = BACKPTR[0] ;
- BLKID [0] = DRIDVALUE ;
- KORIGBP[0] = P<DRHDRWD> ; # SAVE ADDRESS IN COMMON #
- KORIGFP[0] = P<DRHDRWD> ;
- END
- ELSE
- KREL = P<DRHDRWD> ;
- P<DRHDRWD> = KDFP[0];
- BACKPTR[0] = KBACK;
- #
- AND RELEASE IT (IF IT IS NOT THE ORIGINAL)
- #
- IF KDORIG[0]
- THEN
- KDORIG[0] = FALSE ;
- ELSE
- MRELS(KREL) ;
- END
- # #
- ELSE # THIS IS A REGULAR DATA LINE IN PREVIOUS MESSAGE #
- BEGIN
- IF K2 EQ KLINES
- THEN
- KDONE = TRUE ; # WE ADVANCED EXACTLLY ENOUGH LINES #
- ELSE
- BEGIN
- IF K312[KCOUNT] EQ 0
- THEN
- K2=K2+1; # ZERO BYTE,MEANS WE GOT ONE MORE LINE IN HAND #
- #
- AND INCREMENT THE WORDS COUNTER IN BOTH CASES
- #
- KCOUNT = KCOUNT + 1 ;
- END
- END
- END
- #
- NOW KCOUNT HAS NUMBER OF WORDS (IN JUST THE UPMOST BLOCK) THAT
- THE DATA POINTER(KDISTOP) SHOULD BE MOVED
- #
- KDLSTOP[0] = KDLSTOP[0] + KCOUNT ;
- GOTO RJMAIN; # RETURN TO CALLING ROUTINE #
- ERRX:
- PARAMS1 = RLG"ISM" ;
- KEXIT:
- GOTO RJMAIN ;
- END
- TERM
cdc/nos2.source/nam5871/khopdis.txt ยท Last modified: 2023/08/05 17:22 by Site Administrator