*DECK NP$GSM USETEXT AIPDEF USETEXT NP$MODE USETEXT NP$NWL USETEXT NP$STAT USETEXT NP$TAA *IF,DEF,DEBUG USETEXT NP$DB *ENDIF PROC NP$GSM; *IF DEF,IMS # *1DC NP$GSM * * 1. PROC NAME AUTHOR DATE * NP$GSM S.KRULEVITCH 77/05/23 * * 2. FUNCTIONAL DESCRIPTION * THIS ROUTINE IS CALLED FROM AIP. IT COPIES ONE SUPERVISORY * MESSAGE (IF ANY) TO THE TEXT AREA (TA) OF THE APPLICATION. IF * NO SUPERVISORY MESSAGES ARE LEFT, IT RETURNS A NULL BLOCK * * 3. METHOD USED * THE SUPERVISOR MESSAGE BUFFER STARTS AT FIRST AND ENDS AT * LAST. HEAD AND FOOT ARE INDICES WHICH POINT RESPECTIVELY * TO THE START OF THE LIST OF SUPERVISORY MESSAGES AND TO THE * WORD FOLLOWING THE LAST SUPERVISORY MESSAGE. THE MESSAGE LENGTH * IS GIVEN BY GSM$TLC IN THE HEADER. THIS INFORMATION ALLOWS * NP$GSM TO TRANSFER THE MESSAGE TO TA (TEXT AREA) AND UPDATE * HEAD FOR THE NEXT CALL TO NP$GSM. * * 4. ENTRY CONDITIONS * TLMX - MAXIMUM MESSAGE LENGTH * LOC$HA - LOCATION OF HEADER AREA * LOC$TA - LOCATION OF TEXT AREA * HEAD - INDEX IN SMB OF THE CURRENT SUPERVISORY MESSAGE. * HEAD = FOOT IF THERE ARE NO MESSAGES. * * 5. EXIT CONDITIONS * HA - HEADER AREA, CONTAINS THE HEADER * TA - TEXT AREA, CONTAINS THE SUPERVISORY BLOCK * HEAD - INDEX IN SMB OF NEXT SUPERVISORY MESSAGE * * 6. COMDECKS CALLED AND SYMPL TEXTS USED. * AIPDEF NP$CRT NP$DB NP$MODE * NP$NWL NP$STAT NP$TAA * * 7. ROUTINES CALLED * NP$DBG - LOGS DEBUG MESSAGE TO ZZZZZDN * NP$ERR - PRINTS ERROR MESSAGES AND STOPS * NP$SN - INCREMENTS STATISTICS COUNTER * * 8. DAYFILE MESSAGES * NAM ERROR (UNDER E OPTION ONLY. INCORRECT CHARACTER TYPE) * # *ENDIF BEGIN *CALL NP$CRT # # # EXTERNAL ROUTINES: # # # XREF BEGIN *IF DEF,DEBUG PROC NP$DBG; #LOG MESSAGE TO FILE ZZZZZDN # *ENDIF PROC NP$ERR; #ERROR PROCESSOR # *IF DEF,STAT PROC NP$SN; #INCREMENTS STATISTICS COUNTER# *ENDIF END # # # LOCAL DECLARATIONS: # # # ITEM I I, #LOOP CONTROL VARIABLE # J I, #TEMPORARY INDEX # K I, #TEMPORARY INDEX # N I, #WORDS OF SM TRANSFERRED - 1 # *IF DEF,STAT ST$TEMP I, #TEMPORARY LOCATION # *ENDIF TLW I, #ACTUAL SIZE OF SM # TLWDIF I; #TLW - SUM OF TAASIZE[K] # ITEM NOWHEAD I ; BASED ARRAY MEM S(1); ITEM HA I (0), #HEADER AREA # WORD I (0); #TEXT ARRAY # #**********************************************************************# # # # NP$GSM EXECUTION BEGINS HERE # # # *IF DEF,DEBUG,1 # # # IF NO SM"S, RETURN NULL BLOCK # # # P = LOC$HA; IF HEAD EQ FOOT THEN BEGIN HA=0; #RETURN NULL BLOCK # *IF DEF,STAT # # # UPDATE STATISTICS IF STATISTIC GATHERING IS ON # # # NP$SN(TYPE"INB"); *ENDIF END # # # COPY NEXT SUPERVISORY MESSAGE TO TEXT ARRAY # # # ELSE BEGIN IF GSM[HEAD] EQ 0 THEN HEAD = FIRST; #WRAP AROUND HAS OCCURRED # NOWHEAD = HEAD ; IF GSM$ACT[HEAD] EQ CT60TRANS THEN TLW = GSM$TLC[HEAD]; ELSE TLW = (2*GSM$TLC[HEAD] + 14)/15; IF TLW GR TLMX THEN BEGIN GSM$IBU[HEAD] = TRUE ; # INPUT BLOCK UNDELIVERAB # END ELSE BEGIN GSM$IBU[HEAD] = FALSE ; # RESET IBU FROM PREVIOUS # N = TLW - 1; P = LOC$TA; P = LOC$TA; J = HEAD + 1; TLWDIF = TLW; CONTROL FASTLOOP; FOR K = 1 STEP 1 UNTIL LTAA DO BEGIN IF LTAA NQ 0 THEN BEGIN P = TAADDR[K]; N = TAASIZE[K] - 1; IF N GR TLWDIF #MAKE SURE THAT AIP IS ONLY # THEN #COPYING THE SUPERVISORY # N = TLWDIF - 1; #MESSAGE TO THE FRAGMENTED # #BUFFERS - NO MATTER WHAT SIZE# #HAS BEEN SPECIFIED IN THE # #TEXT AREA ARRAY. # TLWDIF = TLWDIF - TAASIZE[K]; END CONTROL SLOWLOOP; FOR I = 0 STEP 1 UNTIL N DO BEGIN WORD[I] = GSM[I+J]; END J = J + TAASIZE[K]; END *IF DEF,STAT # # # UPDATE STATISTICS IF STATISTIC GATHERING IS TURNED ON # # # I = GSM$ABT[HEAD] + TYPE"INB"; NP$SN(I); # INCREMENT ERROR COUNT IF THE LAST DELIVERED SUPERVISORY # # MESSAGE WAS AN ERR/LGL (X"8401") OR A FC/NAK (X"8303") # ST$TEMP = B<0,16>GSM[HEAD+1]; IF ST$TEMP EQ ERRLGL THEN BEGIN NP$SN(TYPE"ERRS"); #INCREMENT COUNTER # END IF ST$TEMP EQ FCNAK THEN BEGIN NP$SN(TYPE"NAKS"); #INCREMENT COUNTER # END *ENDIF # # # UPDATE POINTERS IF MESSAGE WAS SENT TO APP (TLW LQ TLMX) # # # HEAD = HEAD + TLW + 1; #TLW DOES NOT INCLUDE HEADER # IF HEAD GR WLLEN THEN BEGIN HEAD = FIRST; END END #SUPERVISORY MESSAGE DELIVERED# P = LOC$HA ; HA = GSM[NOWHEAD] ; # RETURN HEADER # *IF DEF,DEBUG NP$DBG; #WRITE MSG TO AIP DEBUG FILE # *ENDIF IF HEAD EQ FOOT THEN BEGIN HEAD = FIRST; FOOT = FIRST; END #EMPTY SMB# END RETURN; END #NP$GSM# TERM