cdc:nos2.source:nam5871:np_gsm
Table of Contents
NP$GSM
Table Of Contents
- [00010] PROC NP$GSM
- [00066] PROC NP$DBG
- [00068] PROC NP$ERR
- [00070] PROC NP$SN
Source Code
- NP$GSM.txt
- *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<MEM> = 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<MEM> = LOC$TA;
- P<TAA> = 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<MEM> = 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<MEM> = 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
cdc/nos2.source/nam5871/np_gsm.txt ยท Last modified: 2023/08/05 17:22 by Site Administrator