*DECK NP$PUTF USETEXT AIPDEF USETEXT NP$GETS USETEXT NP$NWL USETEXT NP$PUTS USETEXT NP$TAA PROC NP$PUTF; *IF DEF,IMS # *1DC NP$PUTF * * 1. PROC NAME AUTHOR DATE * NP$PUTF J.C. LEE 78/10/10 * * 2. FUNCTIONAL DESCRIPTION * THIS ROUTINE IS CALLED BY NP$PUT TO BUILD A PUTF REQUEST IN * THE WORKLIST AND SEND THE WORKLIST TO NIP WHEN APPROPRIATE. * * 3. METHOD USED * FORMAT A NETPUTF ENTRY IN THE WORKLIST. THERE ARE THREE CASES: * CASE 1: THE MESSAGE TEXT FITS IN THE WORKLIST - A NETPUT * REQUEST IS FORMATTED IN THE WORKLIST. THE MESSAGE TEXT IS * COPIED FROM THE TEXT AREAS TO THE WORKLIST. THE WORKLIST NEED * ONLY BE SENT TO NIP IF IT IS FULL OR IF THE MESSAGE IS A * SUPERVISORY MESSAGE. * CASE 2: THE MESSAGE TEXT DOES NOT FIT INTO THE WORKLIST BUT * TAA (TEXT AREA ARRAY) DOES - A NETPUTF ENTRY IS FORMATTED IN * THE WORKLIST WITH A NONZERO TAA. THE TEXT ARRAY IS COPIED * TO THE WORKLIST. THE WORKLIST IS THEN SENT TO NIP. * CASE 3: NEITHER THE MESSAGE TEXT NOR THE TEXT AREA ARRAY * CAN FIT INTO THE WORKLIST - A NETPUTF ENTRY IS FORMATTED IN * THE WORKLIST WITH NONZERO TA AND TAA. THE WORKLIST IS THEN * SENT TO NIP. * * 4. ENTRY CONDITIONS * ACLN - NUMBER OF FRAGMENTED BUFFERS * LOC$HA - ADDRESS OF HEADER AREA * LOC$TA - ADDRESS OF TEXT AREA ARRAY * NEXT - NEXT AVAILABLE SPACE POINTER IN WORKLIST * SPACE$LEFT - NUMBER OF AVAILBLE WORKLIST CELLS * * 5. EXIT CONDITIONS * NEXT - UPDATED TO NEXT AVAILABLE SPACE POINTER IF NWL NOT SENT * SPACE$LEFT - NUMBER OF WORKLIST CELLS AVAILABLE IF NWL NOT SENT * * 6. COMDECKS CALLED AND SYMPL TEXTS USED. * AIPDEF NP$CRT NP$GETS NP$NWL * NP$PUTS NP$TAA * * 7. ROUTINES CALLED * NONE * * 8. DAYFILE MESSAGES * NONE * # *ENDIF BEGIN *CALL NP$CRT # LOCAL VARIABLES # ITEM K I, # TEMPORARY VARIBLE # L I, # TEMPORARY VARIABLE # NAA I, # SET TO NO OF FRAGMENTS # WR I; # WORDS REMAINING IN TEXT # BASED ARRAY MEM P(1); ITEM MEMWORD I; #**********************************************************************# # NP$PUTF EXECUTION BEGINS HERE # NAA = ACLN; # NO OF FRAGMENTED BUFFERS # IF NAA GR MAXNA OR NAA LQ 0 THEN NAA = MAXNA + 1; # NIP WILL SEND ERR/LGL # IF TLW LQ (SPACE$LEFT - GMMESIZE - NXTSIZE) AND (NAA LQ MAXNA) THEN BEGIN # ROOM FOR OP, ABH, TEXT, GSM # J = NEXT + OPABHSIZ; # BEGINNING ADDR FOR TEXT IN WL# WR = TLW; # WORDS TO BE TRANSFERRED TO WL# P = LOC$TA; # TEXT AREA ADDRESS # FOR K=1 STEP 1 UNTIL NAA DO BEGIN # COPY TEXT TO WL FROM FRA BUF # P = TAADDR[K]; # ADDR OF KTH FRAGMENT # ACT = TAASIZE[K]; # SIZE OF KTH SEGMENT # L = ACT - 1; IF L GR WR THEN L = WR - 1; WR = WR - ACT; # WORDS REMAINING IN TEXT # FOR I = 0 STEP 1 UNTIL L DO NWL[I+J] = MEMWORD[I]; # COPY TEXT TO NWL # J = J + ACT; END BS = TLW + OPABHSIZ; # RESET NWL ENTRY SIZE # # WORKLIST IS SENT TO NIP IF THERE IS NO ROOM FOR ANOTHER PUT ENTRY PLUS A GSM ENTRY OR IF IT IS A PUT FROM A SUPERVISOR. # ISSUE = (SPACE$LEFT - BS) LS (NXTSIZE + GMMESIZE); END ELSE BEGIN # NO SPACE FOR TEXT # NWL$TA[NEXT] = LOC$TA; # IF NWL CANNOT HOLD TAA # NWL$OP[NEXT] = OP$PUTF; # SET OPCODE TO PUTF # NWL$LTAA[NEXT] = NAA; # SET NO OF FRAGMENTS # IF ACLN LQ (SPACE$LEFT - NTRYSIZ3 - GMMESIZE - OPABHSIZ) AND NAA LQ MAXNA THEN BEGIN # IF TAA CAN FIT INTO NWL # NWL$TA[NEXT] = 0; # CLEAR TAA ADDRESS IN NWL # BS = ACLN + NTRYSIZ3; # RESET NWL ENTRY SIZE # I = NEXT + NTRYSIZ3 - 1; P = LOC$TA; # TAA ADDRESS # FOR J=1 STEP 1 UNTIL ACLN DO NWL[I+J] = TAAWORD[J]; # COPY TAA TO NWL # END END RETURN; END # NP$PUTF # TERM