10 ! ----- DISK$PGM:[LOMASKY.SYS]DUMP_VMSMAIL_PROFILE.BAS ----- ! ! ----- Dumps data contained in SYS$SYSTEM:VMSMAIL_PROFILE.DATA ----- ! ! ----- Last Change 10/27/89 by Brian Lomasky ----- ! ! ----- Teradyne, Inc., 321 Harrison Avenue, Boston, MA 02118 ----- ! ----- (617) 482-2706, x3259 ----- ! ! ----- Neither Brian Lomasky nor Teradyne, Inc. implicitly or ----- ! ----- explicitly implies this program is usable in any way. ----- ! ----- This program is released to the public domain in an ----- ! ----- "AS-IS" condition. ----- ! ! ----- Requires VAX BASIC V3.0 or later ----- ! ! ----- Requires read access to the ----- ! ----- SYS$SYSTEM:DUMP_VMSMAIL_PROFILE.DATA file) ----- ! ! ----- Compile this program by typing: $BASIC/LONG DUMP_VMSMAIL_PROFILE ! ! ----- Link this program by typing: $LINK DUMP_VMSMAIL_PROFILE ! OPTION TYPE = EXPLICIT ! ENSURE ALL VARIABLES DECLARED DECLARE WORD CONSTANT TRUE = (1% = 1%) DECLARE WORD CONSTANT FALSE = NOT TRUE ON ERROR GOTO ERROR_ROUTINE ! ENABLE ERROR TRAPPING DECLARE WORD CONSTANT END_OF_FILE = 11% ! BASIC ERROR CODE DECLARE WORD CONSTANT NO_SUCH_FILE = 5% ! BASIC ERROR CODE DECLARE WORD CONSTANT PROT_VIOL = 10% ! BASIC ERROR CODE DECLARE LONG ASCII_VALUE ! ASCII VALUE FROM COUNTED STRNG DECLARE WORD ERROR_FLAG ! "ERROR DURING OPEN" ERROR FLAG DECLARE WORD LINE_LENGTH ! CURRENT LENGTH OF DETAIL LINE DECLARE WORD NAME_PRINTED ! TRUE IF USERNAME WAS PRINTED DECLARE WORD NON_PRINTABLE_FOUND ! TRUE IF ANY NON-PRINTABLE CHAR DECLARE STRING OUTPUT_DEVICE ! USER-SELECTED OUTPUT DEVICE DECLARE STRING PRINT_LINE ! DETAIL LINE TO BE PRINTED DECLARE LONG RECOUNT_LEN ! RECORD LENGTH FROM RECOUNT DECLARE LONG SKIP_LEN ! REMAP LENGTH TO BE SKIPPED DECLARE LONG TEMP ! TEMPORARY LONGWORD VARIABLE DECLARE WORD X ! TEMPORARY WORD FROM DL FUNCT MAP (VMSMP) STRING WHOLE_REC = 2048% ! MAX RECORD SIZE IN DATA FILE MAP DYNAMIC (VMSMP) STRING MAIL_KEY, & WORD MAIL_NULL1, & WORD MAIL_NULL2, & WORD MAIL_UNREAD_MESSAGES, & WORD MAIL_DATA_CODE, & WORD MAIL_DATA_LEN, & STRING MAIL_NULL3, & STRING MAIL_DATA, & WORD MAIL_DATA_WORD ! ----- LOCAL FUNCTION TO PROCESS A DETAIL LINE ----- DEF WORD DL(STRING A_LINE) DL = 0% ! ALWAYS RETURN ZERO PRINT_LINE = A_LINE ! MOVE TO TEMP VARIABLE IF NOT NAME_PRINTED THEN ! SEE IF USERNAME YET PRINTED NAME_PRINTED = TRUE ! IT WILL BE PRINTED NOW PRINT #10%, LEFT(MAIL_KEY, 12%); " "; LINE_LENGTH = 14% ! SET FOR CURRENT LINE LENGTH ! ----- ELIMINATE ANY PRECEDING ", " CHAR STRING ----- IF LEFT(PRINT_LINE, 2%) = ", " THEN PRINT_LINE = RIGHT(PRINT_LINE, 3%) END IF END IF LINE_LENGTH = LINE_LENGTH + LEN(PRINT_LINE) IF LINE_LENGTH > 79% THEN ! SEE IF REPORT LINE IS FILLED PRINT #10% ! END CURRENT DETAIL LINE PRINT #10%, SPACE$(14%);! INDENT NEXT DATA LINE ! ----- ELIMINATE ANY PRECEDING ", " CHAR STRING ----- IF LEFT(PRINT_LINE, 2%) = ", " THEN PRINT_LINE = RIGHT(PRINT_LINE, 3%) END IF ! ----- SET FOR CURRENT LINE LENGTH ----- LINE_LENGTH = 15% + LEN(PRINT_LINE) END IF PRINT #10%, PRINT_LINE; ! PRINT DETAIL LINE CHARS END DEF NON_PRINTABLE_FOUND = FALSE ! ASSUME NO NON-PRINTABLE CHARS ERROR_FLAG = 1% ! SET FOR "ERROR DURING OPEN" OPEN "SYS$SYSTEM:VMSMAIL_PROFILE.DATA" FOR INPUT AS FILE #1%, & ORGANIZATION INDEXED VARIABLE, & RECORDTYPE ANY, & ACCESS READ, & ALLOW MODIFY, & MAP VMSMP ! OPEN EXISTING VMSMAIL FILE ERROR_FLAG = 0% ! SET FOR NO "ERROR DURING OPEN" PRINT PRINT "VMS V5.n VMSMAIL_PROFILE.DATA Dump Program V1.0" PRINT OUTPUT_DEVICE = "" ! SET SO LOOP WILL EXECUTE UNTIL EDIT$(OUTPUT_DEVICE, 38%) = "S" OR EDIT$(OUTPUT_DEVICE, 38%) = "F" LINPUT "Select Output Device: S)creen or F)ile"; OUTPUT_DEVICE IF EDIT$(OUTPUT_DEVICE, 38%) = "F" THEN OPEN "DUMP.LIS" FOR OUTPUT AS FILE #10%, SEQUENTIAL PRINT #10%, "Dump of SYS$SYSTEM:" + & "VMSMAIL_PROFILE.DATA on " + DATE$(0%) & + " " + TIME$(0%) PRINT #10% ELSE OPEN "TT:" AS FILE #10%, SEQUENTIAL END IF NEXT PRINT PRINT "%Working... Please Stand By!" PRINT WHILE TRUE NAME_PRINTED = FALSE ! SET FOR "NAME NOT YET PRINTED" GET #1%, REGARDLESS ! READ NEXT VMSMAIL_PROFILE REC RECOUNT_LEN = RECOUNT ! GET NUMBER OF BYTES JUST READ IF RECOUNT_LEN = 0% THEN PRINT #10%, "" ITERATE END IF IF RECOUNT_LEN < 31% THEN PRINT #10%, "" ITERATE END IF REMAP (VMSMP) MAIL_KEY = 31%, & MAIL_NULL1, & MAIL_NULL2, & MAIL_UNREAD_MESSAGES ! GET FIXED-LENGTH PART OF REC TEMP = MAIL_UNREAD_MESSAGES TEMP = TEMP + 256% IF TEMP < 0% IF TEMP <> 0% THEN X = DL(NUM1$(TEMP) + " unread msgs") END IF X = DL(", MAIL_NULL1=" + NUM1$(MAIL_NULL1) + " (S/B 1)")& IF MAIL_NULL1 <> 1% X = DL(", MAIL_NULL2=" + NUM1$(MAIL_NULL2) + " (S/B 2)")& IF MAIL_NULL2 <> 2% SKIP_LEN = 37% ! FIXED PORTION TO BE SKIPPED WHILE SKIP_LEN < RECOUNT_LEN ! GET NEXT VAR-LENGTH REC PART REMAP (VMSMP) MAIL_NULL3 = SKIP_LEN, & MAIL_DATA_CODE, & MAIL_DATA_LEN, & MAIL_DATA = MAIL_DATA_LEN SELECT MAIL_DATA_CODE CASE 2% ! FLAGS WORD FOLLOWS PRINT_LINE = "" CASE 3% ! MAIL SUBDIRECTORY FOLLOWS PRINT_LINE = ", Mail Subdir=" CASE 4% ! FORWARDING ADDRESS FOLLOWS PRINT_LINE = ", Forwarding Addr=" CASE 5% ! PERSONAL NAME FOLLOWS PRINT_LINE = ", Personal Name=" CASE 8% ! EDITOR NAME FOLLOWS PRINT_LINE = ", Editor=" CASE 9% ! DEFAULT PRINT QUEUE FOLLOWS PRINT_LINE = ", Default Print Queue=" CASE 13% ! DEFAULT PRINT FORM FOLLOWS PRINT_LINE = ", Default Print Form=" CASE ELSE PRINT_LINE = ", " END SELECT SELECT MAIL_DATA_CODE CASE 2% ! FLAGS WORD FOLLOWS REMAP (VMSMP) & MAIL_NULL3 = SKIP_LEN + 4%, & MAIL_DATA_WORD IF (MAIL_DATA_WORD AND 1%) <> 0% THEN MAIL_DATA_WORD = MAIL_DATA_WORD & AND NOT 1% PRINT_LINE = PRINT_LINE + & ", Copy_Self=Send" END IF IF (MAIL_DATA_WORD AND 2%) <> 0% THEN MAIL_DATA_WORD = MAIL_DATA_WORD & AND NOT 2% PRINT_LINE = PRINT_LINE + ",Reply" END IF IF (MAIL_DATA_WORD AND 8%) <> 0% THEN MAIL_DATA_WORD = MAIL_DATA_WORD & AND NOT 8% PRINT_LINE = PRINT_LINE + ",Forward" END IF X = DL(PRINT_LINE) IF PRINT_LINE <> "" IF (MAIL_DATA_WORD AND 4%) <> 0% THEN MAIL_DATA_WORD = MAIL_DATA_WORD & AND NOT 4% X = DL(", NoAuto_Purge") END IF IF (MAIL_DATA_WORD AND 16%) <> 0% THEN MAIL_DATA_WORD = MAIL_DATA_WORD & AND NOT 16% X = DL(", Enable CC_Prompt") END IF FOR TEMP = 5% TO 15% IF (MAIL_DATA_WORD AND 2% ^ TEMP) <> 0% THEN MAIL_DATA_WORD = & MAIL_DATA_WORD & AND NOT 2% ^ TEMP X = DL(", ") END IF NEXT TEMP CASE ELSE ! OUTPUT COUNTER STRING FOR TEMP = 1% TO MAIL_DATA_LEN ASCII_VALUE = ASCII(MID( & MAIL_DATA, TEMP, 1%)) SELECT ASCII_VALUE CASE 32% TO 126% PRINT_LINE = PRINT_LINE & + CHR$(ASCII_VALUE) CASE ELSE PRINT_LINE = PRINT_LINE & + "<" + NUM1$( & ASCII_VALUE) + ">" NON_PRINTABLE_FOUND = TRUE END SELECT NEXT TEMP X = DL(PRINT_LINE) END SELECT ! ----- INCREMENT COUNTER TO POINT TO NEXT ----- ! ----- SEGMENT IN THIS VARIABLE-LENGTH RECORD ----- SKIP_LEN = SKIP_LEN + MAIL_DATA_LEN + 4% NEXT ! LOOP FOR NEXT DATA SEGMENT PRINT #10% IF NAME_PRINTED ! END DETAIL LINE NEXT ! LOOP TILL END_OF_FILE REACHED ERROR_ROUTINE: RESUME END_PROGRAM IF ERR = END_OF_FILE ! END PROGRAM IF END OF FILE IF ERROR_FLAG = 1% THEN ! IF ERROR OPENING VMSMAIL FILE: ERROR_FLAG = 0% ! SET FOR NO "ERROR DURING OPEN" SELECT ERR CASE NO_SUCH_FILE PRINT "Can't find SYS$SYSTEM:" + & "VMSMAIL_PROFILE.DATA file" + BEL CASE PROT_VIOL PRINT "Protection violation while trying to" + & " open SYS$SYSTEM:VMSMAIL_PROFILE.DATA" + BEL CASE ELSE PRINT "Unexpected error " + NUM1$(ERR) + & " while trying to" + & " open SYS$SYSTEM:VMSMAIL_PROFILE.DATA" + BEL END SELECT RESUME EXIT_PROGRAM END IF PRINT "Unexpected Error"; ERR; "occurred in DUMP_VMSMAIL_PROFILE" + BEL CLOSE #1%, 10% ! CLOSE ALL OPEN FILES ON ERROR GOTO 0 ! ABORT END_PROGRAM: CLOSE #1%, 10% ! CLOSE ALL OPEN FILES PRINT "%Created DUMP.LIS" IF EDIT$(OUTPUT_DEVICE, 38%) = "F" IF NON_PRINTABLE_FOUND THEN ! IF NON-PRINTABLE CHARS FOUND: PRINT "==> Note: Non-printable chars (within" + & " <...>) were found!" + BEL END IF EXIT_PROGRAM: END