*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 = 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