*DECK NVFSIAM
USETEXT TEXTNVF
USETEXT TXSMNVF
USETEXT TXTANVF
PROC NVFSIAM ((PT),(MTYP));
# TITLE NVFSIAM - ISSUE APPLICATION STATUS ACCOUNTING MESSAGE. #
BEGIN # NVFSIAM #
#
** NVFSIAM - ISSUE APPLICATION STATUS ACCOUNTING MESSAGE.
*
* P. A. MURRAY 83/08/30
*
* THIS PROCEDURE ISSUES ACCOUNT MESSAGES TO THE SYSTEM'S ACCOUNT
* DAYFILE. IT IS CALLED INTO EXECUTION BY THE FOLLOWING PROCEDURES:
*
* *NVFSNOF* *NVFSNON*
*
* PROC NVFSIAM ((PT),(MTYP))
*
* ENTRY:
* PT = POINTER TO AST ENTRY (PT IS IGNORED IF MTYP = SBER)
* MTYP = TYPE OF ACCOUNT MESSAGE TO ISSUE:
* SANW = 0
* SBNW = 1
* SBER = 2
* SENW = 3
* NET/ON SM IS IN MSGBUF (IF MTYP = SBER)
*
* EXIT:
* THE APPROPRIATE ACCOUNT MESSAGE IS SENT TO THE SYSTEM'S ACCOUNT
* DAYFILE.
*
* NOTES:
* THE FOLLOWING ARE THE FORMATS OF THE APPL STATUS ACCOUNTING
* MESSAGES:
*
* SANW, APLNAME, JSN.
*
* SBNW, APLNAME, JSN.
*
* SBER, APLNAME, JSN.
*
* SENW, APLNAME, JSN.
*
* METHOD:
* FOR EACH PARAMETER OF THE ACCOUNT MESSAGE, CALL INTERNAL
* PROCEDURE *EXTRACT* TO DELETE TRAILING ZEROES AND BLANKS. WHEN
* THE MESSAGE IS COMPLETE, CALL MACREL ROUTINE *MESSAGE* TO SEND
* IT TO THE ACCOUNT DAYFILE.
#
#
**** PROC NVFSIAM - XREF LIST.
#
XREF
BEGIN
PROC MESSAGE; # SEND MESSAGE #
PROC SSBEBF; # EXTRACT BIT FIELD #
PROC SSBSBF; # STORE BIT FIELD #
END
#
****
#
DEF ACCMSIZ$ #3#; # SIZE OF MESSAGE ASSEMBLY AREA #
DEF COMMA$ #O"5655"#; # COMMA FOLLOWED BY ONE BLANK #
DEF PERIOD$ #O"57000000"#; # PERIOD FOLLOWED BY ZERO BYTE #
ITEM BITSBF I; # STARTING BIT OF MESSAGE ASSEMBLY AREA #
ITEM EBFNAME I; # NAME TO BE ENTERED INTO MESSAGE #
ITEM I I; # LOOP VARIABLE #
ITEM LEN I; # NUMBER OF BITS TO STORE #
ITEM MTYP I; # TYPE OF ACCOUNT MESSAGE TO ISSUE #
ITEM NUM I; # NUMBER OF CHARACTERS TO EXTRACT #
ITEM ORDSBF I; # STARTING WORD OF MESSAGE ASSEMBLY AREA #
ITEM PT I; # SUBSCRIPT FOR AST #
ITEM TEMP I; # TEMPORARY STORAGE AREA #
#
* THE FOLLOWING ARRAY IS THE MESSAGE ASSEMBLY AREA.
#
ARRAY ACCMSG [00:00] S(ACCMSIZ$);
BEGIN
ITEM ACC$TYP C(00,00,06); # MESSAGE TYPE #
ITEM ACC$WORD U(00,00,60); # FULL WORD REFERENCE #
END
#
* THE FOLLOWING ARRAY DEFINES THE TYPES OF APPL. STATUS ACCOUNTING
* MESSAGES. THIS ARRAY ORDER MUST COINCIDE WITH THE VALUE
* DEFINITIONS FOR THE ACCOUNT MESSAGE TYPES IN TXTANVF TEXT.
#
ARRAY ACCTYP [00:03] S(1);
BEGIN
ITEM ACT$TYPE C(00,00,06) = ["SANW, ",
"SBNW, ",
"SBER, ",
"SENW, "];
END
#
* THE FOLLOWING BASED ARRAY IS USED TO CLEAR THE MESSAGE ASSEMBLY
* AREA.
#
BASED ARRAY CLRMAA [00:ACCMSIZ$] S(1);
BEGIN
ITEM CLR$WORD U(00,00,60);
END
#
* THE FOLLOWING ARRAY CONTAINS THE NUMBER OF CHARACTERS THAT WILL
* NEED TO BE SCANNED BY THE EXTRACT PROCEDURE. THERE IS AN INDEX
* RELATION BETWEEN EACH ARRAY ENTRY HERE AND THE ENTRIES IN THE
* VALUES ARRAY.
#
ARRAY NUMCHAR [00:01] S(1);
BEGIN
ITEM NUM$VAL U(00,00,60);
END
#
* INFORMATION TO BE ENTERED INTO THE ACCOUNT MESSAGES ARE SAVED IN
* THE FOLLOWING ARRAY.
#
ARRAY VALUES [00:01] S(1);
BEGIN
ITEM VAL$WORD U(00,00,60); # FULL WORD REFERENCE #
END
#
* **** MAIN PROCEDURE STARTS HERE. ****
#
#
* INITIALIZE THE MESSAGE ASSEMBLY AREA.
#
P<CLRMAA> = LOC(ACCMSG);
FOR I = 0 STEP 1 UNTIL (ACCMSIZ$ - 1)
DO
BEGIN
CLR$WORD[I] = 0;
END
ACC$TYP[0] = ACT$TYPE[MTYP]; # SET MESSAGE TYPE #
#
* INITIALIZE THE VARIABLES FOR INSERTING THE FIRST PARAMETER IN THE
* MESSAGE.
#
ORDSBF = 0;
BITSBF = 36;
NUM$VAL[0] = 7;
NUM$VAL[1] = 4;
TEMP = COMMA$;
LEN = 12;
#
* OBTAIN THE APPLICATION NAME AND JSN AND STORE THEM INTO THE VALUES
* ARRAY. IF THE MESSAGE TYPE IS SANW, SBNW, OR SENW, THEN GET THIS
* INFORMATION FROM THE AST. IF THE MESSAGE TYPE IS SBER (DENOTING
* AN UNSUCCESSFUL APPL. NETON ATTEMPT), THEN GET THIS INFORMATION
* FROM THE SUPERVISORY MESSAGE, AS AN AST ENTRY FOR THIS APPL. MAY
* NOT EXIST.
#
IF (MTYP EQ SANW$) OR
(MTYP EQ SBNW$) OR
(MTYP EQ SENW$)
THEN # OBTAIN APPL NAME AND JSN FROM AST #
BEGIN
C<0,NUM$VAL[0]>VAL$WORD[0] = AST$ANAM[PT];
C<0,NUM$VAL[1]>VAL$WORD[1] = AST$JSN[PT];
END
ELSE IF MTYP EQ SBER$ # OBTAIN APPL NAME AND JSN FROM SM #
THEN
BEGIN
C<0,NUM$VAL[0]>VAL$WORD[0] = NETANAM[0];
C<0,NUM$VAL[1]>VAL$WORD[1] = NETJSN[0];
END
#
* INSERT THE PARAMETERS INTO THE MESSAGE ASSEMBLY AREA.
#
FOR I = 0 STEP 1 UNTIL 1 DO
BEGIN
EBFNAME = VAL$WORD[I];
NUM = NUM$VAL[I];
EXTRACT;
#
* IF AT THE LAST VALUE OF THE LINE, CHANGE THE TERMINATOR FROM A
* COMMA TO A PERIOD.
#
IF I EQ 1
THEN
BEGIN
TEMP = PERIOD$;
LEN = 24;
END
#
* STORE THE TERMINATOR (EITHER COMMA OR PERIOD) INTO MESSAGE
* ASSEMBLY AREA.
#
SSBSBF(ACCMSG,ORDSBF,BITSBF,LEN,TEMP);
END
#
* SEND THE MESSAGE TO THE ACCOUNT DAYFILE.
#
MESSAGE(ACCMSG,5);
CONTROL EJECT;
PROC EXTRACT;
# TITLE EXTRACT - EXTRACT NONZERO AND NONBLANK CHARACTERS. #
BEGIN # EXTRACT #
#
** EXTRACT - EXTRACT NONZERO AND NONBLANK CHARACTERS.
*
* P. A. MURRAY 83/08/30
*
* THIS PROCEDURE IS LOCAL TO NVFSIAM. ITS FUNCTION IS TO DELETE
* TRAILING ZEROES AND BLANKS FROM VALUES AND STORE THE RESULTING
* CHARACTERS) INTO THE ACCOUNT MESSAGE ASSEMBLY AREA.
*
* PROC EXTRACT
*
* ENTRY:
* EBFNAME = THE VALUE, LEFT JUSTIFIED, THAT IS TO BE STORED.
* NUM = THE NUMBER OF CHARACTERS IN THE VALUE TO BE STORED.
* ORDSBF = STARTING WORD OF MESSAGE ASSEMBLY AREA.
* BITSBF = STARTING BIT WITHIN WORD WHERE VALUE IS TO BE STORED
* ACCMSG = THE ACCOUNT MESSAGE ASSEMBLY AREA.
*
* EXIT:
* THE VALUE (WITHOUT TRAILING ZEROES AND BLANKS) IS PACKED INTO
* THE ACCOUNT MESSAGE ASSEMBLY AREA. ORDSBF AND BITSBF ARE
* UPDATED TO INDICATE THE STARTING BIT AFTER THE NEWLY INSERTED
* VALUE IN THE MESSAGE ASSEMBLY AREA.
*
* METHOD:
* CALL *SSBEBF* TO EXTRACT A 6-BIT CHARACTER FROM EBFNAME. IF THE
* CHARACTER IS NONZERO AND NONBLANK, CALL *SSBSBF* TO STORE IT
* INTO THE MESSAGE ASSEMBLY AREA.
#
ITEM BITEBF I; # STARTING BIT OF TEMP STORAGE AREA #
ITEM FIN B; # EXIT LOOP VARIABLE #
ITEM I I; # LOOP VARIABLE #
ITEM ORDEBF I; # STARTING WORD OF TEMP STORAGE AREA #
ITEM TMPCHAR I; # TEMPORARY STORAGE AREA #
#
* **** EXTRACT PROCEDURE STARTS HERE. ****
#
#
* INITIALIZE THE EXTRACT ORDINALS.
#
ORDEBF = 0;
BITEBF = 0;
FIN = FALSE;
#
* LOOP THROUGH THE VALUE WORD. WHEN A NONBLANK OR NONZERO
* CHARACTER IS FOUND, STORE IT INTO THE MESSAGE ASSEMBLY AREA.
* THE PROCESS IS FINISHED WHEN A BLANK OR ZERO CHARACTER IS FOUND.
* DO NOT SCAN MORE THAN NUM CHARACTERS.
#
FOR I = 0 STEP 1 WHILE (I LS NUM AND NOT FIN)
DO
BEGIN
SSBEBF(EBFNAME,ORDEBF,BITEBF,6,TMPCHAR);
IF ((TMPCHAR EQ 0) OR (TMPCHAR EQ " "))
THEN
BEGIN
FIN = TRUE;
END
ELSE
BEGIN
SSBSBF(ACCMSG,ORDSBF,BITSBF,6,TMPCHAR);
END
END
END # EXTRACT #
END # NVFSIAM #
TERM