*DECK NVFTIAM
USETEXT TEXTNVF
USETEXT TXTANVF
PROC NVFTIAM((PT),(MTYP));
# TITLE NVFTIAM - ISSUE ACCOUNTING MESSAGE #
BEGIN # NVFTIAM #
#
** NVFTIAM - ISSUE ACCOUNTING MESSAGE.
*
* E. THAVIKULWAT 81/10/22
*
* THIS PROCEDURE ISSUES ACCOUNT MESSAGES TO THE SYSTEM'S ACCOUNT
* DAYFILE. IT IS CALLED INTO EXECUTION BY THE FOLLOWING
* PROCEDURES:
* *NVFTACC* *NVFTCRN* *NVFTETC* *NVFTPSV* *NVFTRVD*
* *NVFTPUV*
*
* PROC NVFTIAM((PT),(MTYP))
*
* ENTRY:
* PT = POINTER TO PTAC ENTRY
* MTYP = TYPE OF ACCOUNT MESSAGE TO ISSUE:
* 1 = ABUN
* 2 = AEUN
* 3 = ABAP
* 4 = AEAP
* 5 = ABER
*TEXT
* 6 = ABIC
* 7 = SIPI
*ENDTEXT
*
* EXIT:
* APPROPRIATE ACCOUNT MESSAGE ISSUED TO THE SYSTEM'S ACCOUNT
* DAYFILE.
*
* NOTES:
* FOLLOWING ARE THE FORMATS OF THE ACCOUNT MESSAGES:
* 1) ABUN, USERNUM, FAMNAME, TRMNAME.
* 2) AEUN, C1, USERNUM, FAMNAME, TRMNAME.
* AEUN, C2, XXXXXXSECS.
* 3) ABAP, C1, USERNUM, FAMNAME, TRMNAME.
* ABAP, C2, APPNAME.
* 4) AEAP, C1, USERNUM, FAMNAME, TRMNAME.
* AEAP, C2, APPNAME, XXXXXXSECS.
* 5) ABER, USERNUM, FAMNAME, TRMNAME.
*TEXT
* 6) ABIC, CHARNUMBER, PROJNUMBER, TRMNAME.
* 7) SIPI, PERSONAL IDENTIFIER.
*ENDTEXT
*
* METHOD:
* FOR EACH PARAMETER OF THE ACCOUNT MESSAGE, CALL INTERNAL
* PROCEDURE *EXTRACT* TO DELETE TRAILING ZEROES AND BLANKS.
* WHEN MESSAGE IS COMPLETE, CALL MACREL ROUTINE *MESSAGE* TO
* SEND IT TO THE ACCOUNT DAYFILE.
#
#
**** PROC NVFTIAM - XREF LIST.
#
XREF
BEGIN
PROC MESSAGE; # SEND MESSAGE #
PROC NVFTCCT; # CALCULATE APPLICATION CONNECT TIME #
PROC SSBEBF; # EXTRACT BIT FIELDS #
PROC SSBSBF; # STORE BIT FIELDS #
END
#
****
#
DEF COMMA$ #O"5655"#; # COMMA FOLLOWED BY ONE BLANK #
DEF PERIOD$ #O"57000000"#; # PERIOD FOLLOWED BY ZERO BYTE #
DEF SECS$ #O"2305032357000000"#; # "SECS." FOLLOWED BY 0 BYTE#
ITEM BITSBF I; # STARTING BIT OF MESSAGE ASSEMBLY AREA #
ITEM EBFNAME C(20); # NAME TO BE ENTERED IN MESSAGE #
ITEM I I; # LOOP VARIABLE #
ITEM LEN I; # NUMBER OF BITS TO STORE #
ITEM MTYP I; # TYPE OF ACCOUNT MESSAGE TO ISSUE #
ITEM ORDSBF I; # STARTING WORD OF MESSAGE ASSEMBLY AREA #
ITEM PT I; # SUBSCRIPT FOR ARRAY PTAC #
ITEM CNTYP I; # CONNECTION TYPE INDICATOR #
ITEM TEMP I; # TEMPORARY STORAGE AREA #
ITEM TERMVAL I; # NUMBER OF PARAMS IN ACCOUNT MESSAGE - 1 #
#
* FOLLOWING ARRAY IS THE ASSEMBLY AREA FOR THE ACCOUNT MESSAGES.
#
ARRAY ACCMSG[00:00] S(6);
BEGIN
ITEM ACC$TYP C(00,00,10); # MESSAGE TYP #
ITEM ACC$C2 C(00,36,02); # AREA FOR LITERAL C2 #
END
#
* FOLLOWING ARRAY DEFINES THE TYPE OF ACCOUNT MESSAGES.
#
ARRAY ACCTYP[00:06] S(1);
BEGIN
ITEM ACT$WORD C(00,00,10); # FULL WORD REFERENCE #
ITEM ACT$TYPE C(00,00,10) =
["ABUN, ","AEUN, C1, ","ABAP, C1, ","AEAP, C1, ","ABER, ",
"ABIC, ","SIPI, "];
END
#
* INFORMATION TO BE ENTERED INTO THE ACCOUNT MESSAGES ARE SAVED
* IN THE FOLLOWING ARRAY.
#
ARRAY VALUES[00:02] S(2);
BEGIN
ITEM VAL$WORD C(00,00,20);
END
IF (MTYP EQ SIPI$)
THEN # SET PERSONAL IDENTIFIER #
BEGIN
VAL$WORD[0] = PTA$PID[PT];
END
ELSE
BEGIN
IF (MTYP EQ ABIC$)
THEN # SET CHARGE AND PROJECT NUMBER #
BEGIN
VAL$WORD[0] = PTA$CHGNUM[PT];# CHARGE NUMBER #
VAL$WORD[1] = PTA$PRJNUM[PT];# PROJECT NUMBER #
END
ELSE # SET USER NAME AND FAMILY NAME #
BEGIN
VAL$WORD[0] = PTA$UNUM[PT]; # USER NAME #
VAL$WORD[1] = PTA$FNAM[PT]; # FAMILY NAME #
END
VAL$WORD[2] = PTA$TN[PT]; # SET TERMINAL NAME #
END
ACC$TYP[0] = ACT$WORD[MTYP-1]; # MESSAGE TYPE TO ASSEMBLY AREA #
#
* BUILD VARIABLE PORTION OF ACCOUNT MESSAGE.
#
IF (MTYP EQ ABUN$) OR (MTYP EQ ABIC$)
OR (MTYP EQ ABER$) OR (MTYP EQ SIPI$)
THEN # ABUN/ABIC/ABER/SIPI MESG #
BEGIN
ORDSBF = 0;
BITSBF = 36;
END
ELSE # ABAP/AEAP/AEUN ACCOUNT MESSAGE#
BEGIN
ORDSBF = 1;
BITSBF = 0;
END
IF (MTYP EQ ABER$) AND PTA$IFU[PT]
THEN
BEGIN
PTA$IFU[PT]=FALSE;
VAL$WORD[0]=0;
VAL$WORD[1]=0;
END
TEMP = COMMA$;
LEN = 12;
IF (MTYP EQ SIPI$)
THEN
BEGIN
TERMVAL = 0;
END
ELSE
BEGIN
TERMVAL = 2;
END
FOR I = 0 STEP 1 UNTIL TERMVAL
DO
BEGIN
EBFNAME = VAL$WORD[I];
EXTRACT; # EXTRACT NONZERO/NONBLANK CHAR #
#
* UPON RETURN FROM *EXTRACT*, A COMMA FOLLOWED BY ONE BLANK WILL
* BE INSERTED INTO THE MESSAGE STREAM EXCEPT FOR THE LAST
* PARAMETER. FOR THE LAST PARAMETER, A PERIOD FOLLOWED BY 12
* BITS OF ZERO IS INSERTED INTO THE MESSAGE STREAM INSTEAD.
#
IF I EQ TERMVAL
THEN # LAST PARAMETER #
BEGIN
TEMP = PERIOD$;
LEN = 24;
END
SSBSBF(ACCMSG,ORDSBF,BITSBF,LEN,TEMP);
END
MESSAGE(ACCMSG,5); # MESSAGE TO ACCOUNT DAYFILE #
#
* FOR ABAP AND AEAP AND AEUN FORM A SECOND LINE OF MESSAGE.
#
IF (MTYP EQ ABAP$) OR (MTYP EQ AEAP$) OR (MTYP EQ AEUN$)
THEN
BEGIN
ACC$C2[0] = "C2";
ORDSBF = 1;
BITSBF = 0;
IF (MTYP NQ AEUN$)
THEN
BEGIN
EBFNAME = PTA$SWTAPP[PT];
EXTRACT; # EXTRACT NONBLANK CHARACTERS #
END
#
* IF THE ABAP MESSAGE, INSERT A PERIOD AND ZERO BYTE TERMINATIOR.
* IF AEAP, INSERT COMMA AND BLANK AND CALL *NVFTCCT* TO CALCULATE
* APPLICATION CONNECT TIME, IF AEUN, CALL *NVFTCCT* TO CALCULATE
* TERMINAL SESSION CONNECT TIME.
#
IF (MTYP EQ ABAP$)
THEN # ABAP ACCOUNT MESSAGE #
BEGIN
TEMP = PERIOD$;
LEN = 24;
END
ELSE IF (MTYP EQ AEAP$) # AEAP ACCOUNT MESSAGE #
THEN
BEGIN
TEMP = COMMA$;
LEN = 12;
SSBSBF(ACCMSG,ORDSBF,BITSBF,LEN,TEMP);
CNTYP = TATIME$;
NVFTCCT(PT,0,EBFNAME,CNTYP); # CALC APPL CONNECT TIME #
EXTRACT; # EXTRACT NONBLANK CHARACTERS #
TEMP = SECS$;
LEN = 48;
END
ELSE
BEGIN # AEUN ACCOUNT MESSAGE #
CNTYP=TSTIME$;
NVFTCCT(PT,0,EBFNAME,CNTYP); # CALC TERMINAL SESSION CONN TIM#
EXTRACT;
TEMP=SECS$;
LEN=48;
END
SSBSBF(ACCMSG,ORDSBF,BITSBF,LEN,TEMP);
MESSAGE(ACCMSG,5); # MESSAGE TO ACCOUNT DAYFILE #
END
CONTROL EJECT;
PROC EXTRACT;
# TITLE EXTRACT - EXTRACT NONZERO AND NONBLANK CHARACTERS #
BEGIN # EXTRACT #
#
** EXTRACT - EXTRACT NONZERO AND NONBLANK CHARACTERS.
*
* E. THAVIKULWAT 81/10/22
*
* THIS PROCEDURE IS INTERNAL TO PROCEDURE *NVFTIAM* AND IS CALLED
* ONLY BY *NVFTIAM*. IT'S MAIN FUNCTION IS TO DELETE TRAILING
* ZEROES AND BLANKS FROM NAMES AND STORE IT INTO ACCOUNT MESSAGE
* ASSEMBLY AREA.
*
* PROC EXTRACT
*
* ENTRY:
* *EBFNAME* CONTAINS THE NAME, LEFT JUSTIFIED.
* *ORDSBF* CONTAINS THE STARTING WORD OF MESSAGE ASSEMBLY AREA
* *BITSBF* CONTAINS STARTING BIT OF MESSAGE ASSEMBLY AREA
*
* EXIT:
* NAME WITHOUT TRAILING ZEROES AND BLANKS PACKED INTO ACCOUNT
* MESSAGE ASSEMBLY AREA.
*
* NOTES:
* MAXIMUM LENGTH OF NAME IS 20 DISPLAY CODED CHARACTERS.
*
* METHOD:
* CALL *SSBEBF* TO EXTRACT A 6-BIT CHARACTER. IF NONZERO AND
* NONBLANK, CALL *SSBSBF* TO STORE IT INTO THE MESSAGE ASSEMBLY
* AREA.
#
ITEM BITEBF I; # STARTING BIT OF NAME #
ITEM ENDSRCH B; # EXIT LOOP VARIABLE #
ITEM I I; # LOOP VARIABLE #
ITEM ORDEBF I; # STARTING WORD OF NAME #
ITEM TMPCHAR I; # TEMPORARY STORAGE AREA #
#
* INITIALIZE VARIABLES.
#
ORDEBF = 0;
BITEBF = 0;
ENDSRCH = FALSE;
#
* EXTRACT AND STORE NONZERO/NONBLANK CHARACTERS.
#
FOR I = 0 STEP 1 WHILE (NOT ENDSRCH AND I LS 20)
DO
BEGIN
SSBEBF(EBFNAME,ORDEBF,BITEBF,6,TMPCHAR);
IF (TMPCHAR EQ 0) OR (TMPCHAR EQ " ")
THEN
BEGIN
ENDSRCH = TRUE;
END
ELSE
BEGIN
SSBSBF(ACCMSG,ORDSBF,BITSBF,6,TMPCHAR);
END
END
END # END EXTRACT #
END # END NVFTIAM #
TERM