*DECK HPPUTQ USETEXT NIPDEF USETEXT ACB USETEXT APPSTAT USETEXT DRHDR USETEXT FREETAB USETEXT MEM USETEXT NWLHEAD USETEXT NWLNTRY USETEXT STATTAB PROC HPPUTQ(TXTLN,ENTRIES) ; STARTIMS; # *1DC HPPUTQ * * 1. PROC NAME AUTHOR DATE * HPPUTQ L.T.NGUYEN 88/06/10 * * 2. FUNCTIONAL DESCRIPTION. * THIS ROUTINE IS RESPONSIBLE FOR PROCESSING THE PUTQ WORKLIST * FROM APPLICATION. * * 3. METHOD USED. * SET UP FOR READ * READ BLOCK * PUT OTHER ENTRIES INTO THE NEW LARGER WORKLIST INCLUDING THE * NETPUT TEXT * * 4. ENTRY PARAMETERS. * ACBADDR APPLICATION"S ACB * TXTLN LENGTH OF THE NETPUT TEXT * ENTRIES NUMBER OF ENTRIES IN THIS WORKLIST * WLADDR WORKLIST ENTRY * * 5. EXIT PARAMETERS. * DONE FALSE FOR THIS MULTIPLE WORKLIST WILL BE * PROCESSED LATER. * ACBWLFWA FWA OF NEW NWL * ACBWLLWA LWA OF NEW NWL * ACBNWLE NUMBER OF ENTRIES * WLADDR ADDRESS OF CURRENT WORKLIST ENTRY * * 6. COMDECKS CALLED AND SYMPL TEXTS USED. * APPSTAT ACB DRHDR FREETAB * NIPDEF NWLHEAD NWLNTRY * STATTAB * * 7. ROUTINES CALLED. * BRLBLK XFER BLOCK FROM APP FL TO NIP FL * HRELWWL RELEASE WHOLE NWL * MGETS ALLOCATE EMPTY BUFFER * MRELS RELEASE BUFFER SPACE * OMOVE COPY INFORMATION * OTIME GET SYSTEM RTIME * XTRACE TRACES CALLS * * 8. DAYFILE MESSAGES. NONE * THIS PROCEDURE IS CALLED BY HWLP * # STOPIMS; # EXTERNAL VARIABLES # XREF BEGIN PROC BRLBLK; # READ BLOCK INTO NIP-S FL # PROC HRELWWL; # RELEASE WHOLE NWL # PROC MGETS; # ALLOCATE EMPTY BUFFER # PROC MRELS; # RELEASE UNUSED BUFFER SPACE # PROC OMOVE; # COPY INFORMATION # PROC XTRACE; # TRACE CALLS # PROC OTIME; # GET SYSTEM RTIME # END # FORMAL PARAMETERS # ITEM TXTLN U; # LENGTH OF NETPUT TEXT IN CM WORDS # ITEM ENTRIES U ; # NUMBER OF ENTRIES IN THIS PUTQ # # LOCAL VARIABLES # ITEM BUFADDR U; # FWA OF NEW NWL BUFFER # ITEM BUFSIZE U; ITEM EXTRAWORD U; # SET TO ONE IF FRAGMENTED GET/PUT # CONTROL IFEQ STAT,1; ARRAY STIME P(1); # RTIME BUFFER FOR STARTING TIME # BEGIN ITEM SMILS U(0,24,36); # STARTING TIME IN MILLESECONDS # END ARRAY ETIME P(1); # RTIME BUFFER FOR ENDING TIME # BEGIN ITEM EMILS U(0,24,36); # ENDING TIME IN MILLESECONDS # END ITEM STTEMP; # TEMPORARY STATISTICS VARIABLE # CONTROL FI; #**********************************************************************# BEGIN CONTROL IFEQ DEBUG,1; XTRACE("HPPUQ") ; CONTROL FI; CONTROL IFEQ STAT,1; OTIME(STIME); # GET SYSTEM TIME AT BEGINNING OF PROC # CONTROL FI; P = WLADDR; # FWA OF WORKLIST ENTRY # P = ACBADDR; # FWA OF ACB # BUFSIZE = TXTLN + NWLHSIZE + 1 ; MGETS(BUFSIZE,BUFADDR,TRUE); # GET BUFFER FOR NEW NWL # BRLBLK(BUFADDR+NWLHSIZE-ABHSIZE,TXTLN); # READ TEXT INTO NWL # IF DONE THEN # READ UCP FUNCTION COMPLETED # BEGIN P = BUFADDR ; # MOVE THE HEADER TO NEW PLACE # MNEW = P ; MOLD = ACBWLFWA[0] ; MSIZE = NWLHSIZE ; OMOVE ; NWLBS[0] = BUFSIZE ; # RESTORE BLOCK SIZE # NWLNE[0] = ENTRIES ; P = BUFADDR + NWLHSIZE ;# FWA OF NWL ENTRY # NWLEID[0] = NWLEIDVALUE; # RESET NWL ENTRY ID # HRELWWL; # RELEASE WHOLE PUTQ NWL # ACBNWLE [0] = ENTRIES + 1 ; # INCLUDING THE PUTQ WL # ACBWLFWA[0] = BUFADDR; ACBWLADR[0] = BUFADDR + NWLHSIZE ; # CURRENT WORKLIST ADDRESS# ACBWLLWA[0] = BUFADDR + BUFSIZE - 1 ; NEXTWLA = BUFADDR + NWLHSIZE ; # NEXT ONE IS FIRST # END ELSE # UCP SWAPPED OUT, READ FUNCTION UNABLE TO COMPLETE # BEGIN BLKBS[0] = TXTLN + NWLHSIZE ; # RESTORE BUFFER SIZE # MRELS(BUFADDR); # RELEASE NEW NWL BUFFER # END CONTROL IFEQ STAT,1; OTIME(ETIME); # GET SYSTEM TIME AT END OF PROCEDURE # ST$NHR = ST$NHR + 1; # INCRMNT NUMBER OF TIMES HPPUTQ CALLD # STTEMP = EMILS[0] - SMILS[0]; # TIME SPENT IN THIS ROUTINE # ST$THR = ST$THR + STTEMP; # TOTAL TIME SPENT IN THIS ROUTINE # IF ST$LHR LS STTEMP THEN # FOUND LARGER TIME INTERVAL IN ROUTINE # BEGIN ST$LHR = STTEMP; # NEW LARGEST TIME INTERVAL # END CONTROL FI; RETURN; END TERM