VMAIL010.BCK~ VMAIL010.BCK;BACKUP/LOG/VER/BLOCK=2048 [VMAIL010...]*.* VMAIL010.BCK/SAV RJOHNSON @ c! V5.5 _MAITAI::  _$1$DUA3: V5.5-2  *[VMAIL010]CHMAIL.DIR;1+,$-./@ 4-l$0123 KPWO56`78ݬ=9 G@HJI AAAREADME.TXT8BUILD_CHMAIL.COM?,CHMAIL.CD  CHMAIL.EXE!CCHMAIL.HK? CHMAIL.HLPC% CHMAIL.OBJ@CHMAIL_CLD.CLDC'CHMAIL_CLD.OBJ?( INSTALL.DOC>  INSTALL.TXT @.LINK_CHMAIL.COM@ MAILLIB.Hd? MAILLIB.OLBD MAKEFILE.0P MESSAGES.H@  MESSAGES.MSGC MESSAGES.OBJCMISC.C?MISC.OBJC RICHLIB.H@ *[VMAIL010.CHMAIL]AAAREADME.TXT;1+,8./@ 4O-$-0123KPWO56 718ܨ=9/ E G@HJgm VMAIL010.BCK8$- [VMAIL010.CHMAIL]AAAREADME.TXT;1O* CHMAIL, version 1.0JCHMAIL is a utility to allow a user to check another user's mail files forLunread mail. A user without SYSPRV privilege may only check for mail sent byMhim. A user with SYSPRV privilege may check all unread mail for the specifiedFuser. Information displayed includes the date and time the message wasGreceived, the sender, and the subject. The body of the message is never displayed.NCHMAIL does not need to be installed to use Visual Mail. If may, however, be a/useful utility used in addition to Visual Mail.NDisclaimer: This executable program, source code, and associated documentationJare provided "as is". The author assumes to responsibility for any damagesKarising from the use of this program. This software has been distributed asOpublic domain. CHMAIL may be freely distributed under the following conditions:No CHMAIL must be distributed in its original, unmodified form. All source codeOand documentation files must be included in this distribution. Object files andNexecutable files may or may not be included in the distribution. CHMAIL may be(distributed separately from Visual Mail.Jo CHMAIL may not be sold for profit (but a nominal distribution fee may be>charged) and may not be included in other commercial products.3Comments and Questions may be sent to Rich Johnson,( internet: RJOHNSON@HAL.TNTN.GTEGSC.COMS*u VMAIL010.BCK?,$-#[VMAIL010.CHMAIL]BUILD_CHMAIL.COM;1\ &#*[VMAIL010.CHMAIL]BUILD_CHMAIL.COM;1+,?,. /@ 4\ -$-0123KPWO 56QvP7|S8=9/ E G@HJI$! **********************************************************************$! * BUILD_CHMAIL.COM *@$! * Command procedure to build the Check Mail executable from *$! * scratch. *$! * *3$! * 06-JUL-1993 RDJ Command Procedure Creation. *I$! **********************************************************************$!!$ On Error Then Goto Error_Exit$ Compile = "Call Compile""$ Check_File = "Call Check_File",$ Compile_Message = "Call Compile_Message"$$ Compile_CLD = "Call Compile_CLD"$ CC :== CC/NoList=$ Link :== Link/Executable/NoMap/NoSymbol_Table/NoTraceback$!/$ If F$Search("SYS$SYSTEM:VAXC.EXE") .EQS. "" $ Then\$ Write SYS$OUTPUT "%BUILD_VMAIL-E-NOVAXC, this procedure requires the VAXC compiler.">$ Write SYS$OUTPUT "-BUILD_VMAIL-F-ABORT, build aborted" $ Stop $ EndIf$!$ Compile CHMAIL.C CHMAIL.H$ Compile MISC.C+$ Compile_Message MESSAGES.MSG MESSAGES.H$ Compile_CLD CHMAIL_CLD.CLD!$ Write SYS$OUʽ VMAIL010.BCK?,$-#[VMAIL010.CHMAIL]BUILD_CHMAIL.COM;1\ w*TPUT "Linking..."$ Link_Shared = "False"1$ If F$Search("SYS$SHARE:VAXCRTL.EXE") .NES. "" $ ThenF$ If F$File_Attributes("SYS$LIBRARY:VAXCRTL.EXE","Known") Then - Link_Shared = "True" $ EndIf($ If Link_Shared Then Goto Link_Shared;$ Link CHMAIL,MISC,MESSAGES,CHMAIL_CLD,MAILLIB/Library, -# SYS$LIBRARY:VAXCRTL/Library$ Goto Done_Linking:$ Link_Shared:0$ Link/Executable=CHMAIL.EXE SYS$INPUT/OptionsGCHMAIL,MISC,MESSAGES,CHMAIL_CLD,MAILLIB/Library,SYS$SHARE:VAXCRTL/Share$ Done_Linking:$ Purge/NoLog/NoConfirm *.OBJ$ Purge/NoLog/NoConfirm *.EXE$ Delete/Symbol/Global CC$ Delete/Symbol/Global Link?$ Write SYS$OUTPUT "%BUILD_CHMAIL-S-COMPLETE, build complete"$ Exit$!I$! **********************************************************************2$! * Compile: Compile an individual C module. *I$! **********************************************************************$ Compile: SubRoutine)$ Write SYS$OUTPUT "Compiling ''P1'..." $ J = 1$ Compile_Loop:$ File = P'J+$ If File .EQS. "" Then Goto Cont_Compile$ Call Check_File 'File' $ J = J + 1$ Goto Compile_Loop$ Cont_Compile: $ CC 'P1'$ Exit$ EndSubRoutine ! Compile$!I$! **********************************************************************A$! * Check_File: Check for the existence of a particular file. *I$! **********************************************************************$ Check_File: SubRoutine6$ If F$Search(P1) 8$_ VMAIL010.BCK?,$-#[VMAIL010.CHMAIL]BUILD_CHMAIL.COM;1\ .NES. "" Then Goto Exit_Check_File?$ Write SYS$OUTPUT "%BUILD_CHMAIL-F-NOFILE, missing file 'P1';$ Write SYS$OUTPUT "-BUILD_CHMAIL-F-ABORT, build aborted"$ Stop$ Exit_Check_File:$ Exit$ EndSubRoutine ! Check_File$!I$! **********************************************************************2$! * Compile_Message: Compile a message file. *I$! **********************************************************************$ Compile_Message: SubRoutine)$ Write SYS$OUTPUT "Compiling ''P1'..." $ J = 1$ Compile_Message_Loop:$ File = P'J+$ If File .EQS. "" Then Goto Cont_Message$ Call Check_File 'File' $ J = J + 1$ Goto Compile_Message_Loop$ Cont_Message:$ Message 'P1'$ Exit!$ EndSubRoutine ! Compile_Message$!I$! **********************************************************************@$! * Compile_CLD: Compile a Command Definition Language file. *I$! **********************************************************************$ Compile_CLD: SubRoutine)$ Write SYS$OUTPUT "Compiling ''P1'..." $ J = 1 $ CLD_Loop:$ File = P'J+$ If File .EQS. "" Then Goto Cont_Message$ Call Check_File 'File' $ J = J + 1$ Goto CLD_Loop$ Cont_Message:$ Set Command/Object 'P1'$ Exit$ EndSubRoutine ! Compile_CLD$! $ Error_Exit:A$ Write SYS$OUTPUT "%BUILD_CHMAIL-I-ABORT, compilation aborted"$ Exit  VMAIL010.BCKD $-MAIL010.CHMAIL]CHMAIL.C;1^*[VMAIL010.CHMAIL]CHMAIL.C;1+,D ./@ 4^-$-0123KPWO56f< 7L8=9/ E G@HJI/************************************************************************ * File: CHMAIL.C *4 * Project: Check user for unread mail messages. *# * Author: Richard D. Johnson * * Created: 19-MAY-1993 * * Revisions: *F * Function: CHMAIL is a utility which checks a user's NEWMAIL *= * folder for unread mail from the current user. If found, *: * a line for each message will be displayed, including *< * information such as the date and time received and the *6 * subject. A user with SYSPRV may specify the /ALL *; * qualifier, which will display all unread mail for the *6 * given user. CHMAIL must be installed with SYSNAM *7 * privilege, of the user must have SYSNAM privilege * * enabled. *J ************************************************************************/#include #include #include #include #include #include #include #include "richlib"#include "maillib"#includeH VMAIL010.BCKD $-MAIL010.CHMAIL]CHMAIL.C;1^  "chmail"#include "messages".char username[255]; /* username to check */5struct profile_struct profile; /* user's profile */8boolean check_all = false; /* show all new messages? */ main () {7 unsigned long status; /* status of service calls *// char filename[255]; /* user's mail file */< struct mailfile_context mcontext; /* mail file context */0 unsigned long fcontext; /* folder context */B struct folder_struct *folder_root = NULL; /* list of folders */D struct message_struct *message_root = NULL; /* list of messages */4 int num_folders; /* number of folders in file */1 char sender[255]; /* sender to search for */J struct message_struct *current_message; /* pointer to current message */ get_this_user(sender); parse ();C if ((status = get_profile_info(username,&profile)) != SS$_NORMAL) exit (status);9 sprintf (filename,"%sMAIL.MAI",profile.full_directory);^ if ((status = open_mail_file(&mcontext,filename,&folder_root,&num_folders)) != SS$_NORMAL) { if (check_all == false)) rich$fatal(CHMAIL$NOMSGS,username); else) rich$fatal(CHMAIL$NOMESS,username); }[ if ((status = open_folder(&mcontext,&fcontext,"NEWMAIL",&message_root)) != SS$_NORMAL) { if (check_all == false)) rich$fatal(CHMAIL$NOMSGS,username); else) rich$fatal(CHMAIL$NOMESS,username); }! current_message = message_root;# while (current_message != NULL) { if (check_all == false) {6 if (strcmp(sender,cu4 VMAIL010.BCKD $-MAIL010.CHMAIL]CHMAIL.C;1^4rrent_message->sender) == 0)7 show_message (current_message,username,sender); } else5 show_full_message (current_message,username); , current_message = current_message->next; }( close_folder (&fcontext,message_root);0 close_mail_file (&mcontext,false,folder_root);}I/************************************************************************2 * show_message: display the current message. *J ************************************************************************/&show_message (message,username,sender):struct message_struct *message; /* message to display */+char *username; /* username to check */)char *sender; /* sender of message */{< static boolean header = false; /* displayed header yet? */ if (header == false) { header = true;D printf (" %s's unread messages from %s:\n\n",username,sender);4 printf (" Date Time Subject\n");P printf (" -------------------------------------------------------------\n"); }@ printf (" %s %s\n",message->creation_date,message->subject);}I/************************************************************************= * show_full_message: display the current message for /ALL *J ************************************************************************/$show_full_message (message,username):struct message_struct *message; /* message to display */+char *username; /* username to check */{< static boolean header = false; /* displayed header yet? *// ch  VMAIL010.BCKD $-MAIL010.CHMAIL]CHMAIL.C;1^ ar from[255]; /* message's FROM: field */ if (header == false) { header = true;7 printf (" Unread messages for %s:\n\n",username);K printf (" Date Time From Subject\n");P printf (" -------------------------------------------------------------\n"); } strcpy (from,message->sender); from[20] = '\0';M printf (" %s %-20s %s\n",message->creation_date,from,message->subject);}I/************************************************************************8 * get_this_user: determine mail path for this user. *J ************************************************************************/get_this_user(username)char *username;{7 unsigned long status; /* status of service calls *// char nodename[16]; /* current node name */< unsigned short nodename_length; /* length of node name */ struct {! unsigned short buffer_length; unsigned short item_code; long buffer_address; long return_length_address;5 } syi_item_list[] = { /* item list for $getsyi */2 {15,SYI$_NODENAME,&nodename,&nodename_length}, {0,0,0,0}};0 char ubuffer[13]; /* buffer for username */: unsigned short ubuffer_length; /* length of username */ struct {! unsigned short buffer_length; unsigned short item_code; long buffer_address; long return_length_address;5 } jpi_item_list[] = { /* item list for $getjpi */0 {12,JPI$_USERNAME,&ubuffer,&ubuffer_length}, {0,0,0,0}}; G   VMAIL010.BCKD $-MAIL010.CHMAIL]CHMAIL.C;1^  if ((status = sys$getsyiw(0,0,0,&syi_item_list,0,0,0)) != SS$_NORMAL) exit (status);# nodename[nodename_length] = '\0';G if ((status = sys$getjpiw(0,0,0,&jpi_item_list,0,0,0)) != SS$_NORMAL) exit (status); ubuffer[12] = '\0';+ while (ubuffer[strlen(ubuffer)-1] == ' ')& ubuffer[strlen(ubuffer)-1] = '\0';/ sprintf (username,"%s::%s",nodename,ubuffer);}I/************************************************************************. * parse: parse command line for options. *J ************************************************************************/ parse () {* long privs; /* current user privs */( long priv_quad; /* (quadword) */7 boolean show_version; /* display version number? */ struct {! unsigned short buffer_length; unsigned short item_code; long buffer_address; long return_length_address;5 } jpi_item_list[] = { /* item list for $getjpi */ {8,JPI$_PROCPRIV,&privs,0}, {0,0,0,0}}; unsigned long status;6 rich$parse_command_line ("CHMAIL",CHMAIL_CLD_TABLE);1 rich$check_qualifier ("VERSION",&show_version); if (show_version == true)( rich$fatal (CHMAIL$VERSION,VERSION); rich$get_value("P1",username);* rich$check_qualifier ("ALL",&check_all); if (check_all == true) {I if ((status = sys$getjpiw(0,0,0,&jpi_item_list,0,0,0)) != SS$_NORMAL) exit (status); if (!(privs & PRV$M_SYSPRV))# rich$fatal(CHMAIL$NOPRIV,""); }} [eC9$-[VMAIL010.CHMAIL]@\E_HR)F3^zx~M;1MK  [ol8eYXsMC`em=bqO/p5dj*Z*T xmJ]cJR:z~MaB8ji\[ OZlFTF$J-h[GmRyfgH CB( ;;^q2h{ }U_hWV5.'p60r5/SK"(IOQ;rYTYq$b88]0J3zYwIB}n.IN(Շ~tʧVY6^)Bew𶪱0:p N;gV$8 e#d\#jjutnK@f-{{e'x3~|Ly8 @;%OgvFl!w*Q{"JY2mtE3TO9Rj#8+rF#DTDVl Y o1Y_d|Ok)ka~>$Ol\IBv Z cztn7qFmI/5VX3W@x@mmr(XhG'HfCVf,-*c%Q&r@e"U{`Ktu0D#d[78CW( !5{hoAR= :L7WZ<bmO$pQ\PIBHADNG`a*6K)yKu\zUw.-a)m'R-H/aVN6f#|6MoWYqn|qKx$&!{aSx xQ)5sSTleR%@ ]A8B-S aqV]d#"ta K{g8gmC ]a!|L ~~hVRujFa~t'tI3w2~oSr9 N t Pe%PN[U$D Bz[}u]OAhz`,!am&si-2d7tXWx1,qk j~p 5#fT[K~-FGm[dpx60R6LTw;,n'f:6ad&K6p;h,Mvt4AAr#}f}..P%#I)|tfp<ڹAVfx#W. % 0 M\rQ/!=W)MrcJ!u 93HMAIL]AAAREADME.TXT;1+,8./@ 4O-$-0123KPWO56 718ܨ=9/ E G@HJ ^+ VMAIL010.BCK!C$-[VMAIL010.CHMAIL]CHMAIL.EXE;1!bf*[VMAIL010.CHMAIL]CHMAIL.EXE;1+,!C.!/@ 4!!-$-0123 KPWO!56Be7?l8=9/ E G@HJ0D`0205dw<H&CHMAILV1.0מd05-13   ? ! VAXCRTL_001! LIBRTL_001O! MTHRTL_001 j! MAILSHR_001!H! MAILSHRP_001 $ CHMA ,(`T CHMAIL,!P1Username$ALL(VERSION0` VERSION_SYNTAX(VERSION 4h VMAIL010.BCK!C$-[VMAIL010.CHMAIL]CHMAIL.EXE;1!%sMAIL.MAINEWMAIL %s's unread messages from %s: Date Time Subject ------------------------------------------------------------- %s %s Unread messages for %s: Date Time From Subject ------------------------------------------------------------- %s %-20s %s %s::%sCHMAILVERSION1.0P1ALL%s  !hd;TX "$ CG VMAIL010.BCK!C$-[VMAIL010.CHMAIL]CHMAIL.EXE;1![B./0\\1p p 47h& VMAIL010.BCK!C$-[VMAIL010.CHMAIL]CHMAIL.EXE;1!ƌ h9<=> ? !4  ;`%###>Q VMAIL010.BCK!C$-[VMAIL010.CHMAIL]CHMAIL.EXE;1!:U T VMAIL010.BCK!C$-[VMAIL010.CHMAIL]CHMAIL.EXE;1! ;GÞ VMAIL010.BCK!C$-[VMAIL010.CHMAIL]CHMAIL.EXE;1!&^RZYLXW|R/ihPSS\\ Sb߭߭PSS\\&jhݏ1[Phݏ9[߭ߢ ߭} PSS\\%jhݏ1[hݏ9[ЭS1TjLݣDP1S\hVUggUVߢdߢ6dߢZdݬLݬšdIS\hUէU¤dddݬDݬLݬ<dУTS1^ݭ߭R~ VMAIL010.BCK!C$-[VMAIL010.CHMAIL]CHMAIL.EXE;1!QݭP ^SF&=ݬ ݬߣRbߣ6bߣZbЬPݠLݠÚ^TRբ#ݬĤScccЬSݣDݣL< ^Sаޭ>|ԭ ޭí>|ԭ|~߭|~0PRRPP R jel>HptK vdx>=|C i>!I h>J >ԭL g>? >F k>ěȰH j>|ԭff߭ PRRPPRPЬP`PPK Pఏ  P|ԭ,߭߭y PRRPPRP#Լw ЬPԠЬP ЬPԠ PЬP ЬPԠ  PЬP  ЬPԠ PЬPݢdh#//7sшiT:N}d+f}RAgNy.^4-K_ƃ]')o&dV7Н$T;ߥ ͲҌR! 4a8n3  !< t/{f"@PHGYK# {v 2\ZqpXQP܉rX' %W ,3b)5hBQ̠wpd.aa@>6m7StuuTܧCzt~؜sE֋Rq_[q-gh}۷ ܁_Ì-RN@7c>IeOT6[ir8U/})FH5M*)4zQ_CիC"C߾  Jb 2Fۮ_DqrݔIS-O4ꑪT,휔#%|^P$7+3~Gf͗<U:!qp}7цx|I}0CuKG`P l+ݤA 2 ParameterH CHMAIL requires one parameter: the name of the user whose mail file isI to be checked. The username must be a valid local username, and may not include the node name. 2 Qualifiers2 /ALL /ALL /NOALL (default)F Displaaф VMAIL010.BCKC%$-[VMAIL010.CHMAIL]CHMAIL.HLP;1IrAy all unread messages, instead of messages sent by the currentD username. The sender of each message is also displayed in addition? to the date, time, and subject. SYSPRV privilege is required.*[VMAIL010.CHMAIL]CHMAIL.OBJ;1+,@. /@ 4 B -$-0123KPWO56&j-7o8=9/ E G@HJ3CHMAILV1.013-JUL-1993 14:05VAX C V3.2-044CHMAIL$VERSION CHMAIL$NOPRIV CHMAIL$NOMESS CHMAIL$NOMSGSCHMAIL_CLD_TABLEOPEN_MAIL_FILE OPEN_FOLDERGET_PROFILE_INFOCLOSE_MAIL_FILE CLOSE_FOLDERSTRLENSTRCMPSTRCPYSPRINTFPRINTFSHOW_FULL_MESSAGE SHOW_MESSAGE RICH$FATALEXITPARSE GET_THIS_USER SYS$GETJPIWEXIT SYS$GETSYIWEXIT SYS$GETJPIWRICH$GET_VALUE RICH$FATALsi6 VMAIL010.BCK@$-[VMAIL010.CHMAIL]CHMAIL.OBJ;1 3RICH$CHECK_QUALIFIERRICH$PARSE_COMMAND_LINE P%sMAIL.MAI PNEWMAIL P %s's unread messages from %s:  6P Date Time Subject  ZP -------------------------------------------------------------  P %s %s  P Unread messages for %s:  P Date Time From Subject  P -------------------------------------------------------------  <P %s %-20s %s  NP%s::%s UPCHMAIL \PVERSION dP1.0 hPP1 kPALLHP^C$MAIN R ZYXW| GET_THIS_USERPARSEihGET_PROFILE_INFOPSS\\ SEXITbSPRINTF߭߭OPEN_MAIL_FILEPSS\\&jhݏ CHMAIL$NOMSGS RICH$FATALPhݏ CHMAIL$NOMESS RICH$FATAL߭ߢ ߭ OPEN_FOLDERPSS\\%jhݏ CHMAIL$NOMSGS RICH$FATALhݏ CHMAIL$NOMESS RICH$FATALЭS1PRINTFTjLݣDSTRCMPP1S\hVUggUVߢdߢ6dߢZdݬLݬšdIS\hUէU¤dddݬDSTRCPYڔݬLݬ<dУTS1^ݭ߭ CLOSE_FOLDERݭCLOSE_MAIL_FILEP ^ S&ݬ ݬߣPRINTFRbߣ6bߣZbЬPݠLݠÚPRINTF^ TRբ#ݬĤPRINTFScccЬSݣDSTRCPYݣL<PRINTF ^ Sаޭ>|ԭ ޭí>|ԭ|~߭|~ SYS$GETSYIWPRRPP REXIT HMAIN  SHOW_MESSAGE lSHOW_FULL_MESSAGE  GET_THIS_USER  PARSEC$MAIN{$CODE$DATASTDINSTDOUTSTDERRRICH$ERROR_LIST NULLLISTUSERNAMEPROFILE CHECK_ALLp$CHAR_STRING_CONSTANTSSTRLENP@ $STRLENRP߭bP@߭bP@ ߭߭NݬSPRINTF $^ Rܰޭ||CHMAIL_CLD_TABLEURICH$PARSE_COMMAND_LINE߭\RICH$CHECK_QUALIFIERѭdݏCHMAIL$VERSION RICH$FATALhRICH$GET_VALUE kRICH$CHECK_QUALIFIER <|~߭|~ SYS$GETJPIWPSS\\ SEXIToݏ CHMAIL$NOPRIV RICH$FATALHZ VMAIL010.BCKC'$-![VMAIL010.CHMAIL]CHMAIL_CLD.CLD;16p!*[VMAIL010.CHMAIL]CHMAIL_CLD.CLD;1+,C'./@ 46-$-0123KPWO56 ?v̖7'8T=9/ E G@HJMODULE CHMAIL_CLD_TABLEDEFINE VERB CHMAIL1 PARAMETER P1 VALUE(REQUIRED),PROMPT="Username" QUALIFIER ALL6 QUALIFIER VERSION NONNEGATABLE,SYNTAX=VERSION_SYNTAXDEFINE SYNTAX VERSION_SYNTAX NOPARAMETERS( QUALIFIER VERSION NONNEGATABLE,DEFAULT!*[VMAIL010.CHMAIL]CHMAIL_CLD.OBJ;1+,?(./@ 4(-$-0123KPWO56`478T0=9/ E G@HJ+CHMAIL_CLD_TABLE0-013-JUL-1993 14:05-VAX/VMS Command Definition Utility (V4-001) CHMAIL_CLD_TABLE$ CLI$TABLESP( $ CHMA ,(`T CHMAIL,!P1Username$ALL(VERSION0` VERSION_SYNTAX(VERSIONYy  VMAIL010.BCK> $-[VMAIL010.CHMAIL]INSTALL.DOC;2O +w*[VMAIL010.CHMAIL]INSTALL.DOC;2+,> . /@ 4O -$-0123KPWO 56 A7ƅA8SnC9/ E G@HJ* CHMAIL, version 1.03 Installation Instructions%Step 1: Building the Executable ImageM The first step of the installation is to build CHMAIL's executable image.N If you wish to use the image supplied with the distribution, continue withL step 3. If you wish only to link the object files, continue with step 2.K Set your default directory to the directory containing the distributionN files using the SET DEFAULT command. Then enter the following DCL command: $ @BUILD_CHMAILN All modules will be compiled and the resulting object files will be linkedK into an image CHMAIL.EXE. Note that if the VAX C sharable image libraryN (SYS$SHARE:VAXCRTL.EXE) is present and INSTALLed on your system, the buildN procedure will link with it shared, resulting in a much smaller image than- the image supplied with the distribution.= If any files are missing, the build proc L VMAIL010.BCK> $-[VMAIL010.CHMAIL]INSTALL.DOC;2O edure will abort.? If the image is created successfully, continue with step 3."Step 2: Linking the Object ModulesL This step is necessary only if you wish to relink the object modules. If3 you have executed step 1, continue with step 3.K Set your default directory to the directory containing the distributionN files using the SET DEFAULT command. Then enter the following DCL command: $ @LINK_CHMAILN All object files will be linked into an image CHMAIL.EXE. Note that if theG VAX C sharable image library (SYS$SHARE:VAXCRTL.EXE) is present andJ INSTALLed on your system, the link procedure will link with it shared,F resulting in a much smaller image than the image supplied with the distribution.C If any object files are missing, the link procedure will abort."Step 3: Creating a Foreign CommandM This step creates a foreign command to invoke the CHMAIL image. Enter the following DCL command:+ $ CHMAIL :== $device:[directory]CHMAILE where 'device' and 'directory' are the device and directory where CHMAIL.EXE resides.O You may wish to add the foreign command definition to the system wide login= procedure (SYS$SYLOGIN) so that all users may use CHMAIL. Step 4: Setting File ProtectionsK This step sets the necessary file protections so that all users on your system may use CHMAIL.6 Set the protection on the CHMAIL image as follows:/ $ SET FILE/PROTECTION=(G:E,W:E) CHMAIL.EXE8 Se+m VMAIL010.BCK> $-[VMAIL010.CHMAIL]INSTALL.DOC;2O t the protection on CHMAIL's directory as follows:A $ SET FILE/PROTECTION=(G:E,W:E) device:[directory]chmail.dirE where 'device' is the device on which CHMAIL's directory resides,M '[directory]' is the directory above CHMAIL's directory, and 'chmail.dir'- is the directory in which CHMAIL resides.Step 5: INSTALLing CHMAILM This step INSTALLs CHMAIL in memory. CHMAIL must be installed with SYSPRVJ and SYSNAM privileges in order to function. CHMAIL does not have to beH installed /OPEN/HEADER/SHARED, but it is recommended for performance reasons.! Enter the following commands: $ INSTALL: INSTALL> ADD/OPEN/HEADER/SHARE/PRIV=(SYSPRV,SYSNAM) - device:[directory]CHMAIL INSTALL> EXITH where 'device' and 'directory' are the device and directory in whichF CHMAIL.EXE resides. You may wish to add this to the system startup5 procedures to INSTALL CHMAIL upon system startup. Step 6: Installing the Help FileK This step installs CHMAIL's help documentation in the system help file.$ Enter the following DCL command:2 $ LIBRARY/HELP/INSERT SYS$HELP:HELPLIB CHMAIL  VMAIL010.BCK @.$-[VMAIL010.CHMAIL]INSTALL.TXT;1O *[VMAIL010.CHMAIL]INSTALL.TXT;1+, @.. /@ 4O -$-0123KPWO 56 A7@{8@wpD9/ E G@HJ* CHMAIL, version 1.03 Installation Instructions%Step 1: Building the Executable ImageM The first step of the installation is to build CHMAIL's executable image.N If you wish to use the image supplied with the distribution, continue withL step 3. If you wish only to link the object files, continue with step 2.K Set your default directory to the directory containing the distributionN files using the SET DEFAULT command. Then enter the following DCL command: $ @BUILD_CHMAILN All modules will be compiled and the resulting object files will be linkedK into an image CHMAIL.EXE. Note that if the VAX C sharable image libraryN (SYS$SHARE:VAXCRTL.EXE) is present and INSTALLed on your system, the buildN procedure will link with it shared, resulting in a much smaller image than- the image supplied with the distribution.= If any files are missing, the build proc!l+/%:qsw9COD;1J"Xm:o9t$iL9C TbP:Q`_ $*i.(Ada&xTR Un ZT5g5{ mqb"E#XkEhI]Re9 .lhk,5JwO!N0UCadL=LHr&{ 3(Rg:_}ol%-"hqQG! ?ATT|C g.eIG$> Cv}WAU*EnDh;{Q, fQ~RrgcB4{uG㖯zz1ZĚYCho4#b>e5йݔéIwGФBd|`\CHV!Ece;>||zr^fa%LpK!*b,,kH5P*^$$Yle`6%n](0#/v |9)1&)-J AiY4iBEij*MlM#)6wKzio4Glv7nla\ E=_E[V [APHxBKYNpt7Ȣ'2Rh|Q%t6CxK>w|;YtS B:Oۣ`+;xz)S-7_|Ukylo3wە lf;,E\Fr| m1 mlW;u z(edg,9Ģ|%A:c(.DZ @K9]]*guҞHc?..2x&ay= _bf;O?zZ0|]~^HB{$L9ٱ5*Ȓ"4`wJ)޴hVEUH K+P w);s_kп`FvBBYYA^Nj==8\S}gFU;iZlD\Bu8+@I~tjn{3k?!ɎF&&兿I|fsV\7z=a%У7@Y6K'Ț 5̶hxǔ_TZ)ela^_qټjR26=`//c(:T%¬G9/GL,Q bbWB X^Awa\+MCDDLsDUnjBNA5ZF QM+R>1&"WZ!1cL_ n .R#mIj3ZԢCp||,/ʽ bJ>A G1˺UDToY^p7Q\NN]W&=3Z-ѨI> WTCCX Jʜ" SHLM ZN M&0OYW?碍"ؙ β¾.aŴxlQ3xe C!D\\XPHў|L ADD/OPEN/HEADER/SHARE/PRIV=(SYSPRV,SYSNAM) - device:[directory]CHMAIL INSTALL> EXITH where 'device' and 'directory' are the device and directory in whichF CHMAIL.EXE resides. You may wish to add this to the system startup5 procedures to INSTALL CHMAIL upon system startup. Step 6: Installing the Help FileK This step installs CHMAIL's help documentation in the system help file.$ Enter the following DCL command:2 $ LIBRARY/HELP/INSERT SYS$HELP:HELPLIB CHMAIL$O@{ VMAIL010.BCK@$-"[VMAIL010.CHMAIL]LINK_CHMAIL.COM;1Gt"*[VMAIL010.CHMAIL]LINK_CHMAIL.COM;1+,@./@ 4G-$-0123KPWO5678I=9/ E G@HJ,$! Link CHMAIL executable from object files.=$ Link :== Link/Executable/NoMap/NoSymbol_Table/NoTraceback!$ Write SYS$OUTPUT "Linking..."$ Link_Shared = "False"1$ If F$Search("SYS$SHARE:VAXCRTL.EXE") .NES. "" $ ThenF$ If F$File_Attributes("SYS$LIBRARY:VAXCRTL.EXE","Known") Then - Link_Shared = "True" $ EndIf!$ Write SYS$OUTPUT "Linking..."($ If Link_Shared Then Goto Link_Shared;$ Link CHMAIL,MISC,MESSAGES,CHMAIL_CLD,MAILLIB/Library, -! SYS$LIBRARY:VAXCRTL/Library$ Goto Done_Linking:$ Link_Shared:0$ Link/Executable=CHMAIL.EXE SYS$INPUT/OptionsGCHMAIL,MISC,MESSAGES,CHMAIL_CLD,MAILLIB/Library,SYS$SHARE:VAXCRTL/Share$ Done_Linking:$ Purge/NoLog/NoConfirm *.EXE$ Exit*[VMAIL010.CHMAIL]MAILLIB.H;1+,d?. /@ 4J h-$-0123KPWO 56 7@L8@̭=9/ E G@HJ%GNc VMAIL010.BCKd?$-[VMAIL010.CHMAIL]MAILLIB.H;1J @I/************************************************************************ * */ * Visual Mail */ * version 1.0 *; * Copyright 1993 by Richard D. Johnson *3 * All Rights Reserved * * *F * Visual Mail may be distributed only in its original, unmodified *. * form. See documentation for details. * * *I ************************************************************************2 * Revision History * * *; * 13-JUL-1993 RDJ Modified from personal object library/ * * header files. *I ************************************************************************. * Note * * *I * Visual Mail does not directly call the VMS Callable Mail functions. *I * Instead, it uses the data structures and functions defined below for *F * easier access. The functions are contained in MAILLIB.OLB and the *7 * sources are not included with this distribution. *J ************************************************************************/>typedef struct itmlst { /* define callable mail item list */< short buffer_length; /* length of input/output buffer */+ short item_code; /* item to set/get */4 long buffer_address; /* output buffer address */6 long return_length_address; /* length of output */ } ITMLST;<ITMLST nulllist[] = {{0,0,0,0}}; /* define null item l&DF VMAIL010.BCKd?$-[VMAIL010.CHMAIL]MAILLIB.H;1J ist */Bstruct mailfile_context { /* define mail file context structure */@ unsigned long context; /* mailfile context for internal use */= char directory [256]; /* directory location of mailfile */< long deleted_bytes; /* current number of deleted bytes */= char filename [256]; /* full spec. of current mail file */; char wastebasket [256]; /* name of wastebasket folder */' /* fields for reclaim operations */< long data_reclaim; /* number of data buckets reclaimed */7 long data_scan; /* number of data buckets scanned */> long index_reclaim; /* number of index buckets reclaimed */> long messages_deleted; /* number of mail messages deleted */< long total_reclaim; /* total number of bytes reclaimed */};=struct folder_struct { /* define folder context structure */& char *name; /* name of folder */5 long messages; /* number of messages in folder */; struct folder_struct *next; /* pointer to next folder */? struct folder_struct *prev; /* pointer to previous folder */};?struct message_struct { /* define message context structure */= long quad_date; /* arrival date in internal binary form */6 long quad_date_2; /* arrival date is a quadword */* char *cc; /* contents of CC field */7 long message_id; /* message identification number */7 char *creation_date; /* date message was created */5 char *extid; /* external identification number */1 char *from; /* contents of the FROM field */1 char *reply_path; /* 'ŒEz VMAIL010.BCKd?$-[VMAIL010.CHMAIL]MAILLIB.H;1J 13reply path of message */1 boolean new; /* is message a new message? */7 boolean replied; /* has message been replied to? */4 boolean deleted; /* has message been deleted? */8 boolean external; /* is message in external file? */< boolean file_found; /* is external message file there? */( boolean sysmsg; /* undocumented */) boolean extnstd; /* undocumented */- boolean marked; /* is message marked? */) boolean recmode; /* undocumented */9 char *sender; /* name of the sender of the message */- long size; /* message size in records */, char *subject; /* subject of message */* char *to; /* contents of TO field */D struct message_struct *next; /* pointer to next message in list */H struct message_struct *prev; /* pointer to previous message in list */};>struct profile_struct { /* contents of user's mail profile */: boolean auto_purge; /* automatic wastebasket purge? */1 boolean cc_prompt; /* display CC: prompt? */? boolean copy_forward; /* copy self on forwarded messages? */; boolean copy_reply; /* copy self on replied messages? */8 boolean copy_send; /* copy self on sent messages? */3 char editor [256]; /* name of default editor */3 char forwarding [256]; /* forwarding address */5 char form [256]; /* name of default print form */D char full_directory [256]; /* full directory spec. of mail file */8 unsigned short new_messages; /* new message count */8 char personal_name [256]; /* personal na(Y VMAIL010.BCKd?$-[VMAIL010.CHMAIL]MAILLIB.H;1J  me string */7 char queue [256]; /* name of default print queue */7 char username [256]; /* username of profile data */< char sub_directory [256]; /* name of mail subdirectory */};+ /* functions contained in MAILLIB.OLB */+extern unsigned long add_send_address_cc();+extern unsigned long add_send_address_to();/extern unsigned long change_wastebasket_name();$extern unsigned long close_folder();'extern unsigned long close_mail_file();)extern unsigned long compress_mailfile();$extern unsigned long copy_message();&extern unsigned long delete_message();+extern unsigned long delete_profile_info();(extern unsigned long get_profile_info();$extern unsigned long move_message();#extern unsigned long open_folder();&extern unsigned long open_mail_file();)extern unsigned long purge_wastebasket();+extern unsigned long read_message_buffer();,extern unsigned long read_message_display();'extern unsigned long select_messages();"extern unsigned long send_abort();"extern unsigned long send_begin();$extern unsigned long send_message();(extern unsigned long set_profile_info();)X VMAIL010.BCKD$-[VMAIL010.CHMAIL]MAILLIB.OLB;1x*[VMAIL010.CHMAIL]MAILLIB.OLB;1+,D.x/@ 4xx-$-0123 KPWOx56@uϕ7`8`=9/ E G@HJ% VAX-11 Librarian V04-00uϕ#!5wx+28hte  :ADD_SEND_ADDRESS9ADD_SEND_ADDRESS_CCiADD_SEND_ADDRESS_TO3CHANGE_WASTEBASKET_NAMEG CLOSE_FOLDERNCLOSE_MAIL_FILE<COMPRESS_HANDLER<COMPRESS_MAILFILED COPY_MESSAGE[DECREMENT_NEWMAIL_COUNTFDELETE_MESSAGEfDELETE_PROFILE_INFOjEXTRACT_MARKED_MESSAGES6EXTRACT_MESSAGEAFOLDER_ROUTINEaGET_PROFILE_INFOo MARK_MESSAGEW MOVE_MESSAGEB OPEN_FOLDERAOPEN_MAIL_FILE4PURGE_WASTEBASKETO*|R VMAIL010.BCKD$-[VMAIL010.CHMAIL]MAILLIB.OLB;1xk:ADD_SEND_ADDRESS9ADD_SEND_ADDRESS_CCiADD_SEND_ADDRESS_TO3CHANGE_WASTEBASKET_NAMEG CLOSE_FOLDERNCLOSE_MAIL_FILE<COMPRESS_MAILFILED COPY_MESSAGE[DECREMENT_NEWMAIL_COUNTFDELETE_MESSAGEfDELETE_PROFILE_INFOjEXTRACT_MARKED_MESSAGES6EXTRACT_MESSAGEaGET_PROFILE_INFOo MARK_MESSAGEW MOVE_MESSAGEB OPEN_FOLDERAOPEN_MAIL_FILE4PURGE_WASTEBASKETND_BEGIN_ SEND_MESSAGEcSET_PROFILE_INFOQREAD_MESSAGE_BUFFERcREAD_MESSAGE_DISPLAYISELECT_MESSAGESZ SEND_ABORTX SEND_BEGIN> SEND_MESSAGErSET_NEWMAIL_COUNTOSET_PROFILE_INFO/PURGE_WASTEBASKETSET_PROFILE_INFO+X/ VMAIL010.BCKD$-[VMAIL010.CHMAIL]MAILLIB.OLB;1xQREAD_MESSAGE_BUFFERcREAD_MESSAGE_DISPLAYISELECT_MESSAGESZ SEND_ABORTX SEND_BEGIN> SEND_MESSAGErSET_NEWMAIL_COUNTOSET_PROFILE_INFO/PURGE_WASTEBASKETSET_PROFILE_INFO ,{O\< crOM;1G{"*;66& W4>xS5:iV!W{$?zq|ps*N<|@9H =4UHqHR;Qxq 1Nmd%%/n*lnk]"9<-InugN3! .O8ZgVW:(-oVsOYCu8vPj4v9)u]#)tq.\ei?|X 'Z rW Y5Aexl+?=-gPxJ?S8R!',vZg DT2H_ԍ *^j|ԢcIXK,bm@`@u scJk~yKR+1k {:S9,ZWG%>{E|.q5 .6\5P4)']V,emaj-n`j" 8Cs>%H!pc =V~h4_6?b `Y",E&u#k1#R'Am[H>=oO"h|"np1!a*L[h7}S$% \%{2s(/vg7c]QUoCWA 2n<Cbp U~"5i4U=)b0o[5NI_NieVFx8rDCZ*+m^Pg<\R~PdT 7L;`7~d2d4Zu;p5J_ ^;iZ6=SoY(5@ #< O 7{*>"3at6dck2Nmo tEa+`7LrMlP='iP$"Mh.'zarq=6q&PRj16FLH|5&'GH wkCH^f:h!kw"F  'F[D8 E#u Xxu" ^N(T0LcxS2CM[X!  Yz!s"JbQg ]4#{.]uzn.* -4aV-Xz|oFRBD>u Xf#S+pirc E :}mE$"*xn8GfIPKJ:%IH:;rM3 e[bV CVLxR]]r~H_I<99.7;>8f'$v4pkCV?.QfjaW.'Z_8sVlXVC`CFA3SNhC;H]MNZHGJRd 4G^S &5^ _+J|G FX AV3Bi|etYjE>l:]["Q4D9Gg2=kv~\YNq76`{S`9 6JHJ-]D VMAIL010.BCKD$-[VMAIL010.CHMAIL]MAILLIB.OLB;1xg .u VMAIL010.BCKD$-[VMAIL010.CHMAIL]MAILLIB.OLB;1xu /i,4t VMAIL010.BCKD$-[VMAIL010.CHMAIL]MAILLIB.OLB;1x0,5 VMAIL010.BCKD$-[VMAIL010.CHMAIL]MAILLIB.OLB;1x1 Q1 VMAIL010.BCKD$-[VMAIL010.CHMAIL]MAILLIB.OLB;1xT2V* VMAIL010.BCKD$-[VMAIL010.CHMAIL]MAILLIB.OLB;1x-3`A VMAIL010.BCKD$-[VMAIL010.CHMAIL]MAILLIB.OLB;1x'4 VMAIL010.BCKD$-[VMAIL010.CHMAIL]MAILLIB.OLB;1xf+ !5Du VMAIL010.BCKD$-[VMAIL010.CHMAIL]MAILLIB.OLB;1x!"#$67 VMAIL010.BCKD$-[VMAIL010.CHMAIL]MAILLIB.OLB;1x_X$%&'75es5;80T VMAIL010.BCKD$-[VMAIL010.CHMAIL]MAILLIB.OLB;1xA'()*9N VMAIL010.BCKD$-[VMAIL010.CHMAIL]MAILLIB.OLB;1xn*+,-:⺷] VMAIL010.BCKD$-[VMAIL010.CHMAIL]MAILLIB.OLB;1x2-./0;R!~ VMAIL010.BCKD$-[VMAIL010.CHMAIL]MAILLIB.OLB;1xW012<q7 VMAIL010.BCKD$-[VMAIL010.CHMAIL]MAILLIB.OLB;1x31cvϕV1.0DCHANGE_WASTEBASKET_NAMEV1.0 2-JUL-1992 09:43VAX C V3.2-044lRCHANGE_WASTEBASKET_NAMEchange_wastebasket_name1 L MAIL$MAILFILE_MODIFYSTRLEN CHANGE_WASTEBASKET_NAME1$CODE$DATA NULLLISTINPUT_ITEM_LISTXPP^RЬݬSTRLENPbb߼MAIL$MAILFILE_MODIFYww81`;rV1.0>PURGE_WASTEBASKETV1.013-APR-1993 12:55VAX C V3.2-044zRPURGE_WASTEBASKETlpurge_wastebasket l$ MAIL$MAILFILE_PURGE_WASTE l PURGE_WASTEBASKET\$CODE$DATARICH$ERROR_LIST NULLLISTR'lP x^̰||ԭxzޭ|ԭޭԭ ޭԭޭ쭠ԭ"=1 dV1.0=GET_PROFILE_INFOV1.021-JUN-1993 13:29OVAX C V3.2-044P<^USԭ|||ʰG ޭ P ޭD ޭ"&*N ,ޭ.26M 8ޭ:>B> DcF>JNK PR>VZC \^>bfI hj>nrJ t>vz~L >ح? >֭F >ԭH >ҭ|ԭ=*X VMAIL010.BCKD$-[VMAIL010.CHMAIL]MAILLIB.OLB;1x>6717 4V1.0<EXTRACT_MESSAGEV1.0 8-MAR-1993 12:21VAX C V3.2-044oREXTRACT_MESSAGEextract_message S#FPRINTFFCLOSEFOPENMAIL$MESSAGE_GET EXTRACT_MESSAGE$CODE$DATASTDINSTDOUTSTDERRRICH$ERROR_LIST NULLLIST INFO_INLIST$ RECORD_INLISTRECORD_OUTLIST$CHAR_STRING_CONSTANTSCPP P P5 Pw P%s P^ R UWXЬP  ޭbݬ FOPENPVPhݬMAIL$MESSAGE_GETPTT ~TPegެScMAIL$MESSAGE_GETPTT~3ЭP@ߢVFPRINTFegcMAIL$MESSAGE_GETPTT~VFCLOSEPwwޭ譬ԭ$ޭ䭸||լ߼MAIL$MAILFILE_PURGE_WASTEPS@x߭ЬRbMAIL$MAILFILE_PURGE_WASTEPSS$ЭЭЭ ЭЭЭSPIlwwE_WASTEPSZP  ЬRbMAIL$MAILFILE_PURGE_WASTEPSS6  SPAwwwwPYMALLOCMAIL$MESSAGE_ENDMAIL$MESSAGE_SELECTEXITMAIL$MESSAGE_BEGINMAIL$MAILFILE_INFO_FILESTRCPYMAIL$MAIL>X; VMAIL010.BCKD$-[VMAIL010.CHMAIL]MAILLIB.OLB;1x9]1}rV1.0N@ADD_SEND_ADDRESS_CCV1.013-APR-1993 10:57VAX C V3.2-044mRADD_SEND_ADDRESS_CC0add_send_address_cc\ Z0AMAIL$SEND_ADD_ADDRESSSTRLEN 0ADD_SEND_ADDRESS_CC$CODE$DATARICH$ERROR_LIST NULLLIST{0P8^ʰ|Λְ|ڰ>||ЬݬSTRLENP߭ݬMAIL$SEND_ADD_ADD;1 rF}ϕV1.0=ADD_SEND_ADDRESSV1.0 2-JUL-1992 10:47VAX C V3.2-044^RADD_SEND_ADDRESSadd_send_address1 O MAIL$SEND_ADD_ADDRESSSTRLEN ADD_SEND_ADDRESS1$CODE$DATA NULLLIST USERNAME_TYPE$INPUT_ITEM_LISTmPP PP^RЬݬSTRLENPbbݬMAIL$SEND_ADD_ADDRESSTwwTORY_NAMEDIRECTORY_LENGTHINPUT_ITEM_LISTBEGIN_ITEM_OUTLIST0OUTPUT_ITEM_LIST P P!  P P%#P^ TЬݬSTRLENPd ߼MAIL$MAILFILE_BEGINPSSSPݬSTRLENP ߼MAIL$MAILFILE_OPENPSP d߼MAIL$MAILFILE_OPENPSSSP<RB<RB< RBЬRSTRCPYSccc? VMAIL010.BCKD$-[VMAIL010.CHMAIL]MAILLIB.OLB;1x%M<@1l㌺V1.0E>COMPRESS_MAILFILEV1.027-APR-1993 14:01VAX C V3.2-044RCOMPRESS_MAILFILEcompress_handler compress_mailfile9 ZCOMPRESS_HANDLERMAIL$MAILFILE_COMPRESS LIB$ESTABLISH COMPRESS_HANDLER COMPRESS_MAILFILEY$CODE$DATARICH$ERROR_LIST NULLLISTwP^P^䰏||?ee߭MAIL$USER_BEGINPRRPPRPЬP`PPSTRLENP |ԭ߭߭MAIL$USER_GET_INFOPRRPPRPЪRGET_PROFILE_INFOget_profile_info V MAIL$USER_ENDSTRCPYMAIL$USER_GET_INFOSTRLENMAIL$USER_BEGIN <GET_PROFILE_INFO$CODE$DATARICH$ERROR_LIST NULLLISTT81@OFV1.0O9 SEND_MESSAGEV1.012-MAR-1993 10:07EVAX C V3.2-044VR SEND_MESSAGE send_message8   MAIL$SEND_ENDMAIL$SEND_MESSAGE SEND_MESSAGE8$CODE$DATARICH$ERROR_LIST NULLLISTZP ^RbbݬMAIL$SEND_MESSAGEPSSPPSPbbݬ MAIL$SEND_ENDww pL RJOHNSON OPEN_FOLDER$^V@;r VMAIL010.BCKD$-[VMAIL010.CHMAIL]MAILLIB.OLB;1xt?wԼխ ЬPԠ PЬPխ ЬPԠ PЬPխ ЬPԠ  PЬP խ ЬPԠ PЬP?P^ [U Y Z W X޼ޭЬRbRMAIL$MESSAGE_BEGINPnPRRnPޭЬ ݬ STTSTRLENPge߼MAIL$MAILFILE_BEGINPXXXPݬSTRLENPe߼MAIL$MAILFILE_OPENPXPg߼ROPEN_MAIL_FILEfolder_routineopen_mail_file K!FOLDER_ROUTINEMALLOCMAIL$MESSAGE_ENDMAIL$MESSAGE_SELECTMAIL$MESSAGE_BEGINMAIL$MAILFILE_INFO_FILESTRCPYMAIL$MAILFILE_OPENMAIL$MAILFILE1E>V1.0<9 COPY_MESSAGEV1.0 5-MAR-1993 15:49VAX C V3.2-044aR COPY_MESSAGE copy_message eMAIL$MESSAGE_COPYSTRLEN < COPY_MESSAGE$CODE$DATARICH$ERROR_LIST NULLLIST$ FOLDER_INLIST0 FILE_INLISTP P P P P P<^SRЬUUSTRLENTdP'ެЬB0!mbJ2Լխ RR TW8Pխ ЬPԠ PЬP6խ ҽCTQS#7[-:xEI: S8c@ccS\f !00[Eԡtv%*r>$ JȫN- m/ K48@v.$>o,JipSwAo|3;_ma^t(tuگ5>qDbS] ̽W$ށJ(h{7kGDCmGQ]b1sׇEꤰZT)cW 155ISVHEQ d.s1JV)RoL\N3q"WYqa`a30[2\F_ GMDf`*\Tc-C'VlyR37UM>YsW \ǧ  ;\b,{W#J[Q5dɳ  P NMJzKȺ-LܷF]m&6C+6=(Н9KKf^qp-o;*1~LJVDX;T^\TBJ_~ǥ# ) QC  } gZZ6.¢N_Yi Q23@X߈tB@JFG W>BFGQhl\\p^SX[U 7b pxEyΨ\0+:sw;-Dr-Wb`#LI6Yo-_o,-8|@"!¬'M[2 (b1D J632t84"@ףI̅~8$$GlP^. C4bђlW̫E@{@;e~)Q_޷q !D#QW!1t8{TsyʑfCXъmiMtN_Co*ZTs8llʊJ&WCV@OHT r N qO+$ie7lH5y}wrl~3>iF!&N?]2_KF"6n]ds ?b7xz+VuxKh㪾(+k@DVe0l;HQld1k U5H :U;WO ÑG Gb;ͭ/6A̜̘Y@EZqQ>>e+涩zEzd!qבp)`/\Bu] GDL|ZO|*/cs5 h/U[U>B1}w!J7Ե# |\uRO Hvc@&߇ԟ&3Goڮk{d֜w Uϩd_Sr~ Nix;1<@Vw]ܝIUV2xvJaG-@ ~%.X'ke`|;0>3Ҥn`4 1{N^}'d:?a;@{PKL4M"p,ۺ'@,}Cq{8ަw9[FPhg,ؿje&^譜T~AR ]KnUϺ߬N9`J|I{QkBSxVJpP%ZK }s/ x'FoK-#򮜁*>||ЬݬSTRLENP߭ݬMAIL$SEND_ADD_ADDk1 V1.0_DEXTRACT_MARKED_MESSAGESV1.0 9-MAR-1993 13:17VAX C V3.2-044REXTRACT_MARKED_MESSAGESextract_marked_messages $+FPRINTFFCLOSEFOPENMAIL$MESSAGE_GET EXTRACT_MARKED_MESSAGES$CODE$DATASTDINSTDOUTSTDERRRICH$ERROR_LIST NULLLIST INFO_INLIST$ RECORD_INLISTRECORD_OUTLIST $CHAR_STRING_CONSTANTSOPP P P5 Pw P%s  P%cP^ R ZX[ЬTޭbݬ FOPENPYPT1VMAIL$MESSAGE_GETUFPRINTFWѤ<vդ(q  kfePSS ~SPjhfePSS~+ЭP@ߢYgjhfePSS~ ߢYgФTT1{YFCLOSEPwwdef߭MAIL$MESSAGE_BEGINid߭MAIL$MESSAGE_SELECTee߭MAIL$MQ VMAIL010.BCKD$-[VMAIL010.CHMAIL]MAILLIB.OLB;1x$lmSTDERRRICH$ERROR_LIST NULLLIST BINARY_DATE BINARY_DATE2 CC_BUFFER CC_LENGTH MESSAGE_ID DATE_BUFFER DATE_LENGTH EXTID_BUFFER EXTID_LENGTH FROM_BUFFER FROM_LENGTHREPLY_PATH_BUFFERREPLY_PATH_LENGTHT+ MESSAGE_FLAGS SENDER_BUFFER SENDER_LENGTH MESSAGE_SIZESUBJECT_BUFFERSUBJECT_LENGTH TO_BUFFER TO_LENGTH$ BEGIN_INLIST BEGIN_OUTLIST$ SELECT_INLISTSELECT_OUTLIST$ INFO_INLIST INFO_OUTLISTX^0V1.0R9 MARK_MESSAGEV1.0 8-MAR-1993 13:30VAX C V3.2-044iR MARK_MESSAGE mark_message MAIL$MESSAGE_MODIFY MARK_MESSAGE$CODE$DATARICH$ERROR_LIST NULLLIST$ MARK_INLISTP P P ^RЬPѠ<Ѡ$PPѠ$ PЬP >bݬMAIL$MESSAGE_MODIFYPSSET_NEWMAIL_COUNTV1.0 8-APR-1993 10:34VAX C V3.2-044kRSET_NEWMAIL_COUNT$set_newmail_count $ MAIL$USER_ENDMAIL$USER_SET_INFOMAIL$USER_BEGIN $ SET_NEWMAIL_COUNT$CODE$DATARICH$ERROR_LIST NULLLIST$P 0^SԭҰ |ְް >||cc߭MAIL$USER_BEGINPRRPPRPc߭߭MAIL$USER_SET_INFOPRRPPRPcc߭ MAIL$USER_END$ww ЬPԠ PЬP< P@  ЬRSTRCPYTd< P@  d<P@  d<P@d<P@d<P@d<P@d<P@dff߭ MAIL$USER_ENDwwu>F k>ěȰH j>|ԭff߭MAIL$USER_BEGINPRRPPRPЬP`PPSTRLENPఏ  ժRGET_PROFILE_INFOget_profile_infoN V MAIL$USER_ENDSTRCPYMAIL$USER_GET_INFOSTRLENMAIL$USER_BEGIN GET_PROFILE_INFO$CODE$DATARICH$ERROR_LIST NULLLIST T\` VMAIL010.BCKD$-[VMAIL010.CHMAIL]MAILLIB.OLB;1x˿uvAUTO_PURGE CC_PROMPT COPY_FORWARD COPY_REPLY COPY_SEND EDITOR_BUFFER EDITOR_LENGTHFORWARDING_BUFFERFORWARDING_LENGTH FORM_BUFFER FORM_LENGTH DIR_BUFFER DIR_LENGTH NEW_MESSAGESPERSONAL_BUFFERPERSONAL_LENGTH QUEUE_BUFFER QUEUE_LENGTHUSERNAME_BUFFERUSERNAME_LENGTH SUBDIR_BUFFER SUBDIR_LENGTHP|ԭ,߭߭MAIL$USER_GET_INFOPRRPPRPԼ ЬPԠЬP ЬPԠ PЬP ЬPԠ  PЬP  ЬPԠ PЬP< P@eeЬRSTRCPYSc< P@ddc<P@iic<P@hhc<P@ggc<P@c<P@kkc<P@jjcff߭ MAIL$USER_ENDww@c.SEVERITY ERROR.SEVERITY INFORMATIONAL-VERSION /FAO_COUNT=1.SEVERITY SUCCESS<NOMSGS /FAO_COUNT=1'NOMESS .END*[VMAIL010.CHMAIL]MESSAGES.OBJ;1+,C./@ 4O-$-0123KPWO56Q47~8=9/ E G@HJW VMAIL010.BCKC$-[VMAIL010.CHMAIL]MESSAGES.OBJ;1OqQ> CHECK_MAIL VERSION 1.013-JUL-1993 14:0513-JUL-1993 14:05VAX-11 Message V04-00k$ABS$ MSG$SECTIONMSG$AAAAAAAAAAAMSG$AAAAAAAAAABMSG$AAAAAAAAAACx9[ CHMAIL$NOMESS1[ CHMAIL$NOMSGS+[CHMAIL$VERSION$[ CHMAIL$NOPRIV[CHMAIL$_FACILITYOPeP*P'P(P({ [P([0[8[6NOPRIV$no privilege for attempted operation(VERSIONcurrent version is !AS8NOMSGS&user !AS has no new messages from you..NOMESSuser !AS has no new messages. [CHMAIL*[VMAIL010.CHMAIL]MISC.C;1+,?./@ 4J-$-0123KPWO56@ 7`K8`oy=9/ E G@HJX*N<% kap @ 1@{ph3lEbCa,?,hPo Y+`H!:<:/t .O 1#C 4"^X><3;6gz[}QQ7~&|=bOApO|dE? kpά}[tvavKF;c&kw=ԋ>Ie e&M^t1jo}g9~S}i.$|k/xm . ҨQMEs?ų%'0-89YG܊(`pi#?eR@OH-U8YZ®M rROTYSiTI36rVEA~Y`-t8,oUt NQSw M%T YlN `A*Q1z^ 7^YKVDXZOI<7-hpg dKӢx W%>p~0&e$q{[<1=E =l@@o=ӌ#W.w="Lj͵ֱI-V]Rei7t?Q8\zgv˔:w:A ><^=vL¡ҙ=E<׮,{N骫dri p\{'N51e*a,Ue~H"lKfUVW'V iG@GC[!ޒQFz2땝V}c>(hw/Dd騬4B5QRBrur`UBG?+ &ml$w bWV&eޟ9שus;*d|o@Ī ur&Ԍ<<ٱj F$`Nɶ5Lh޵!S窵Ng4V\bj<\,l}I| ն:&^7V-yO}b/F9j? j[ nCPI4;) 6IDGAPVTX IT3c.PesioQ즄=| c _Щ*bJv2oɅɳ@/嘗ݎ%+m.by nfbAu?I|E]8tR-qiV3- ,Ng *e[[Ԩ*f~YЉI$_}9ON Hg5H`izXə+1;t廉Ygi4ƶdTZ -?NgFPblu(z9'S۵3VVE C/)3HD[sVH 7y tͳ&pľ6ᰢ8η)hឆgiit[_Z}yZΘFc賰xV~ad* xbW .2 Q{/8Q=v wp\FB7C[ 0LqXq_Bĭ^Wg{BuxmrkgVŠF–N% {9?LH$RWs-SWXNsQ@HJYtt VMAIL010.BCK?$-[VMAIL010.CHMAIL]MISC.C;1J:vI/************************************************************************ * File: MISC.C *4 * Project: Check user for unread mail messages. *# * Author: Richard D. Johnson * * *: * Code taken from personal object library RICHLIB.OLB. *J ************************************************************************/#include #include #include #include #include "richlib"Dunsigned long rich$parse_command_line (command_name, command_module)char *command_name;long *command_module;{ char command_buffer[256];' $DESCRIPTOR (d_line, command_buffer);* $DESCRIPTOR (d_cldline, command_buffer); unsigned long status; short int length; int command_length;0 sprintf (command_buffer, "%s ", command_name);* command_length = strlen(command_buffer);= d_line.dsc$w_length = d_line.dsc$w_length - command_length;? d_line.dsc$a_pointer = d_line.dsc$a_pointer + command_length;' lib$get_foreign(&d_line,0,&length,0);1 command_buffer[length + command_length] = '\0';3 d_cldline.dsc$w_length = length + command_length;; status = cli$dcl_parse (&d_cldline,command_module,0,0,0); if (status == 196609) return (SS$_NORMAL); if (status == CLI$_ENTNF) return (SS$_NORMAL); exit (SS$_NORMAL);}-rich$check_qualifier (qualifier_name, status)<char *qualifier_name; /* name of qualifier to check for */)boolean *status; /* status variable */{+ $DESCRIPTOR (entity_desc,qualifier_name)Z!A VMAIL010.BCK?$-[VMAIL010.CHMAIL]MISC.C;1J;4 entity_desc.dsc$w_length = strlen(qualifier_name);' switch (cli$present (&entity_desc)) { case CLI$_PRESENT: case CLI$_DEFAULTED: *status = true; break; default: *status = false; }},unsigned long rich$get_value (entity, value)-char *entity; /* entity to get value of */%char *value; /* returned value */{F $DESCRIPTOR (entity_desc,entity); /* descriptor for entity string */C $DESCRIPTOR (value_desc,value); /* descriptor for value string */> unsigned short value_length; /* length of returned value */: unsigned long status; /* return status of cli$ call */, entity_desc.dsc$w_length = strlen(entity); value_desc.dsc$w_length = 256;B status = cli$get_value (&entity_desc,&value_desc,&value_length); value[value_length] = '\0'; return (status);}rich$fatal (error_type, string)unsigned long error_type; char *string;{$ struct dsc$descriptor string_desc;, string_desc.dsc$w_length = strlen(string);* string_desc.dsc$b_dtype = DSC$K_DTYPE_T;* string_desc.dsc$b_class = DSC$K_CLASS_S;% string_desc.dsc$a_pointer = string; if (strlen (string) > 0)+ lib$signal (error_type,1,&string_desc); else lib$signal (error_type); exit (1);}[Fh  VMAIL010.BCKC$-MAIL010.CHMAIL]MISC.OBJ;1*[VMAIL010.CHMAIL]MISC.OBJ;1+,C./@ 4 -$-0123KPWO5617m8=9/ E G@HJ1MISCV1.013-JUL-1993 14:05VAX C V3.2-044P%s P ^ݬSPRINTFSTRLENPRtypedef enum {false, true} boolean; /* define boolean type */Cstruct print_queue_struct { /* used for rich$get_print_queues() */3 char name [QUEUE_LENGTH+1]; /* name of queue */< char description [DESC_LENGTH+1]; /* queue description */};Astruct print_form_struct { /* used for rich$get_print_forms() */0 char name [QUEUE_LENGTH+1]; /* form name */; char description [DESC_LENGTH+1]; /* form description */};&typedef struct { /* item list 2 */5 short buffer_length; /* length of input buffer */1 short item_code; /* input/output item code */2 long buffer_address; /* address of buffer; */} item_list_2;, &typedef struct { /* item list 3 */5 short buffer_length; /* length of input buffer */1 short item_code; /* input/output item code */1 long buffer_address; /* address of buffer */< long return_length_address; /* length of output buffer */} item_list_3;<extern char *rich$error_list[]; /* list of RICH$_ errors */( /* define RICH$ error conditions */:#define RICH$_NORMAL 0 /* normal successful completion */=#define RICH^5RA VMAIL010.BCK@$-[VMAIL010.CHMAIL]RICHLIB.H;1JC$_NO_QUE_MGR 1 /* queue manager is not running */>#define RICH$_NO_QUE_PRIV 2 /* no access to specified queue */8#define RICH$_QUE_FILE_FULL 3 /* job queue file full */*#define RICH$_FNF 4 /* file not found */1#define RICH$_UNDEFINED 5 /* undefined error */extern rich$get_print_forms();extern rich$get_print_queues();-extern unsigned long rich$print_temp_file ();!extern rich$select_print_formw();"extern rich$select_print_queuew();!extern rich$unpaste_queue_form();*[VMAIL010]VMAIL.DIR;1+,$./@ 4-l$0123 KPWO56q78[6=9 G@HJI AAAREADME.TXT6'ALIAS.C7ALIAS.H . ALIAS.OBJ . ALIAS_RMS.C9 ALIAS_RMS.OBJ6kBUILD_VMAIL.COMM DISPLAY.Cs)3 DISPLAY.H,  DISPLAY.OBJ,  DISTLIST.C0  DISTLIST.H48 DISTLIST.OBJFOLDER.C%7_ C VMAIL010.BCK$l$[VMAIL010]VMAIL.DIR;1߹ FOLDER.OBJ<!HELP.C8(HELP.HI9 HELP.OBJt HELP_CONTEXT.H; HELP_WINDOW.H;  INSTALL.TXT?LINK_VMAIL.COM=! MAILLIB.H= MAILLIB.OLB= MAILMSGDEF.H9 MAIL_FILE.C=& MAIL_FILE.H > MAIL_FILE.OBJs( MAKEFILE.g>MENU.Cn> MENU.Ho>MENU.OBJt>  MESSAGE.Cv>  MESSAGE.OBJ  MESSAGES.H> MESSAGES.MSG> MESSAGES.OBJ>  PROFILE.C>  PROFILE.H> PROFILE.OBJ>PROFILE_HELP.C>PROFILE_HELP.OBJ>! PROFILE_RMS.C>PROFILE_RMS.OBJ>5 RICHLIB.H> SEND.C?uSEND.H?SEND.OBJ }VMAIL.CB VMAIL.EXEg#VMAIL.H%D  VMAIL.HLPC VMAIL.OBJ  VMAIL.TXT=WINDOW.C?WINDOW.H? WINDOW.OBJ?`R VMAIL010.BCK6'$[VMAIL010.VMAIL]AAAREADME.TXT;4Oa*[VMAIL010.VMAIL]AAAREADME.TXT;4+,6'./@ 4O&-$0123KPWO56I/7nC/8pD9/ E G@HJ, Visual Mail, version 1.0: Copyright 1993 by Richard D. Johnson0 All Rights ReservedNDisclaimer: This executable program, source code, and associated documentationJare provided "as is". The author assumes no responsibility for any damagesKarising from the use of this program. This software has been distributed asHpublic domain. Visual Mail may be freely distributed under the following conditions:No Visual Mail must be distributed in its original, unmodified form. All sourceJcode and documentation files must be included in this distribution. ObjectIfiles and executable files may or may not be included in the distributionpackage.Oo Visual Mail may not be sold for profit (but a nominal distribution fee may be>charged) and may not be included in other commercial products.9 Files Included With This Distribution0 a! x VMAIL010.BCK6'$[VMAIL010.VMAIL]AAAREADME.TXT;4Oo Documentation FilesAAAREADME.TXT - This file:INSTALL.TXT - Build and installation instructions (text) VMAIL.TXT - Users guide (text)%VMAIL.PS - Users guide (postscript)/ Source Code Files-ALIAS.C, ALIAS.H - Code for alias management'ALIAS_RMS.C - Code for alias file i/o:DISPLAY.C, DISPLAY.H - Code for general screen management?DISTLIST.C, DISTLIST.H - Code for distribution list management.FOLDER.C - Code for folder related functions*HELP.C, HELP.H - Code for help functions7HELP_CONTEXT.H - Help text for context-sensitive help,HELP_WINDOW.H - Help text for help windows?MAIL_FILE.C, MAIL_FILE.H - Code for mail file related functions*MENU.C, MENU.H - Code for menu functions0MESSAGE.C - Code for message related functionsEMESSAGES.MSG, MESSAGES.H - VMail messages for the VMS message utility8PROFILE.C, PROFILE.H - Code for mail profile management>PROFILE_HELP.C - Code for context help within profile window1PROFILE_RMS.C - Code for VMail profile file i/o*SEND.C, SEND.H - Code for send functions1VMAIL.C, VMAIL.H - General Visual Mail functions0WINDOW.C, WINDOW.H - Code for window management0 Miscellaneous Files-*.OBJ - Object code for each source module9BUILD_VMAIL.COM - Procedure to build VMAIL from scratch9LINK_VMAIL.COM - Procedure to link VMAIL object modules1MAKEFILE. - Make procedure to build Visual Mail$VMAIL.EXE - Visual Mail executable1VMAIL.HLP - bP9_z VMAIL010.BCK6'$[VMAIL010.VMAIL]AAAREADME.TXT;4OXHelp source for system help library*[VMAIL010.VMAIL]ALIAS.C;1+,7.0/@ 4a0/-$0123KPWO056)NZ77B8*!C9/ E G@HJI/************************************************************************ * */ * Visual Mail */ * version 1.0 *; * Copyright 1993 by Richard D. Johnson *3 * All Rights Reserved * * *F * Visual Mail may be distributed only in its original, unmodified *. * form. See documentation for details. * * *I *******************************************************c&XO ssitADME.TXT;4 O#.Mbpf}9+""Z Fgi,fJz?8g[Hba(nM I1JN]n=[?U.it "<J`-]u eS5qJWae~^?~G)t&kHQqX]A\u\KPH#}@k:7S;Q]$ Ehs#EJ"!Y-*+#R5]xu5ߙ%8?oFWVU+>{QM$Ycb:-1a+h }rt6" X LXR2^[4,k=vCQQ628 ZMRpOZ e)gfhtz|(L Di2FwJomZrNHK(x < d"zF@vJ N;IT> f 46d蕐( Ϭ(ٮިΏV\)l "O+~ \t BG +Ƚ՞9D@0o:8RN~_n0GBdϛ=1=ջm+Z;|a5X"7 Yy~$/s+렓"h/f rz#%3#\< G_"gL!|*]ynygLAVL,rvmpVjEMH^L|kyZz} H1v2"O)fE W!G[pW$nVu9/lx;O,^*kQq!](*# 3mmO֏Sv~`hm"||fqm b͐ߣТ.$OCܬ{p^'٫'.7c6Hozzl8[Up[M"4S!zQ Vz~/)Ϟ2^K{Z|~whmT3n; NWVB}FxEr,j)x:n#m z-.{1ZS}dPD|(nFsG\=gk~|@MXQ0l7ܫ,*+GH#7,&F/f~l["^3B48Z}&7q6B@ h xy^IMZ< I;}9= 7d$.lQ!$\-'!"_z2~BWor'F7եYJMnNH+IC(o> u$rRPW!Um'h_PG~8< nrQp\ ? \08&^C~5==gjg H}<"[c(B6KGT hHn|M}M { Z0|Wz, H 7X/Tb# X-oC]Y&zO/3P sg95c:37 #q6nE[vB9c kL~5 Bp_c %yV1ة)}|}+eFJS=,N':DI`TGt~ebL?+(>e6w~":fset,=MXMLMJm %a7wxSr ({jyw-f\A s?G}][(o` E)A 8yT:EH@@C ;ci CvR@|$j*x&=zu0y`\)H>&*~:R=TORe`FG\!EVn^@b6{DHeD`OSDMOdF%d&da|{i_lhq7^,DO!DPjG:- Ad1) VMAIL010.BCK7$[VMAIL010.VMAIL]ALIAS.C;1a0l*****************2 * Revision History * * *) * 13-JUL-1993 RDJ Module completion. *J ************************************************************************/#include #include #include #include #include "richlib"#include "maillib"#include "vmail"#include "display"#include "menu"#include "send"#include "window"#include "alias"#include "help"I/************************************************************************; * process_alias_window: process the alias-name window. *J ************************************************************************/process_alias_window (window):struct window_struct *window; /* current alias window */{9 boolean endit = false; /* end processing of window? */4 unsigned short key; /* key read from keyboard */ int j; /* lcv */5 unsigned long status; /* status of mail calls */ hilite_alias(window); while (endit == false) {G smg$set_cursor_abs (&(window->display),&(window->virtual_line),&1);2 smg$read_keystroke (&keyboard,&key,0,0,0,0,0); switch (key) {. case SMG$K_TRM_DOWN: /* next alias */4 if (window->virtual_line < window->length) { lolite_alias(window);3 window->specific.alias_specific.current =< window->specific.alias_specific.current->next;# (window->virtual_line)++;7 if (window->physical_line < window->height) {& (window->phyerk VMAIL010.BCK7$[VMAIL010.VMAIL]ALIAS.C;1a0Ssical_line)++;" hilite_alias (window); } else {! (window->top_line)++;B smg$scroll_viewport (&(window->display),&SMG$M_UP,&1);" hilite_alias (window); } } break;/ case SMG$K_TRM_UP: /* previous alias */' if (window->virtual_line > 1) { lolite_alias (window);4 window->specific.alias_specific.current = < window->specific.alias_specific.current->prev;# (window->virtual_line)--;* if (window->physical_line > 1) {& (window->physical_line)--;" hilite_alias (window); } else {! (window->top_line)--;D smg$scroll_viewport (&(window->display),&SMG$M_DOWN,&1);" hilite_alias (window); } } break;> case SMG$K_TRM_NEXT_SCREEN: /* display next screenful */- if (window->height == window->length)0 smg$ring_bell (&(window->display),&1); else {5 if (window->virtual_line == window->length)2 smg$ring_bell (&(window->display),&1); else {" lolite_alias (window);3 window->virtual_line += window->height;/ window->top_line += window->height;H window->bottom_line = window->top_line + window->height - 1;8 if (window->bottom_line >= window->length) {3 window->bottom_line = window->length;J window->tof U VMAIL010.BCK7$[VMAIL010.VMAIL]ALIAS.C;1a0p_line = window->bottom_line - window->height + 1;5 window->physical_line = window->height;4 window->virtual_line = window->length;K while (window->specific.alias_specific.current->next != NULL)9 window->specific.alias_specific.current =B window->specific.alias_specific.current->next; } else {0 for (j=0; jheight; j++) {L if (window->specific.alias_specific.current->next != NULL) {; window->specific.alias_specific.current =D window->specific.alias_specific.current->next; } } }K smg$change_viewport (&(window->display),&(window->top_line),&1,2 &(window->height),&ALIAS_COLUMNS);" hilite_alias (window); } } break;B case SMG$K_TRM_PREV_SCREEN: /* display previous screenful */- if (window->height == window->length)0 smg$ring_bell (&(window->display),&1); else {( if (window->virtual_line == 1)2 smg$ring_bell (&(window->display),&1); else {" lolite_alias (window);3 window->virtual_line -= window->height;/ window->top_line -= window->height;H window->bottom_line = window->top_line - window->height - 1;' if (window->top_line < 1) {# window->top_line = 1;J window->gmU VMAIL010.BCK7$[VMAIL010.VMAIL]ALIAS.C;1a0j bottom_line = window->top_line + window->height - 1;( window->physical_line = 1;' window->virtual_line = 1;C window->specific.alias_specific.current = alias_root; } else {0 for (j=0; jheight; j++) {L if (window->specific.alias_specific.current->prev != NULL) {; window->specific.alias_specific.current =D window->specific.alias_specific.current->prev; } } }K smg$change_viewport (&(window->display),&(window->top_line),&1,2 &(window->height),&ALIAS_COLUMNS);" hilite_alias (window); } } break;= case SMG$K_TRM_ENTER: /* enter does nothing at this */, case SMG$K_TRM_SELECT: /* time */ case SMG$K_TRM_CR: break;2 case SMG$K_TRM_HT: /* go to next window */ case SMG$K_TRM_RIGHT: activate_next_window (); endit = true; break;7 case SMG$K_TRM_LEFT: /* go to previous window */ activate_prev_window (); endit = true; break;2 case SMG$K_TRM_CTRLW: /* refresh screen */ case SMG$K_TRM_CTRLR:, smg$repaint_screen (&pasteboard_id); break;0 case SMG$K_TRM_HELP: /* display help */(/* display_help(HELP_FOLDER_WIN);) display_help(HELP_FOLDER_KEYS);*/ break;/ case SMG$K_TRM_F10: /* closha  VMAIL010.BCK7$[VMAIL010.VMAIL]ALIAS.C;1a0[e folder */* vmail$close_alias_window (window); endit = true; break;1 case SMG$K_TRM_CTRLD: /* delete alias */ break;8 case SMG$K_TRM_UPPERCASE_A: /* menu bar option */! case SMG$K_TRM_LOWERCASE_A:> hilite_bar_option (alias_bar,"About",ALIAS_ABOUT_COL); show_about_info();@ unhilite_bar_option (alias_bar,"About",ALIAS_ABOUT_COL); break;3 case SMG$K_TRM_UPPERCASE_F: /* File menu */! case SMG$K_TRM_LOWERCASE_F:0 switch (bar_menu(MENU_ALIAS_FILEMENU)) {= case MENU_ALIAS_CREATE: /* create new alias name */ create_alias ();" update_alias (window);" hilite_alias (window); break;? case MENU_ALIAS_EDIT: /* edit selected alias name */A edit_alias (window->specific.alias_specific.current);" hilite_alias (window); break;B case MENU_ALIAS_DELETE: /* delete selected alias name */C delete_alias (window->specific.alias_specific.current);" update_alias (window);" hilite_alias (window); break;: case MENU_ALIAS_CLOSE: /* close alias window */. vmail$close_alias_window (window); break; } break;4 case SMG$K_TRM_UPPERCASE_U: /* Utils menu */! case SMG$K_TRM_LOWERCASE_U:1 switch (bar_menu(MENU_ALIAS_UTILSMENU)) {< case MENU_ALIAS_SEND: /* send new mail messagi. VMAIL010.BCK7$[VMAIL010.VMAIL]ALIAS.C;1a0Ɵe */I vmail$send_message(0,"","",""," Send Message ",SEND_OP_SEND);% activate_window (window); break;< case MENU_ALIAS_PROFILE: /* edit vmail profile */: activate_window (vmail$open_profile_window()); endit = true; break;A case MENU_ALIAS_DISTLIST: /* edit distribution lists */) vmail$open_distlist_window(); endit = true; break;? case MENU_ALIAS_SIGNATURE: /* edit signature file */" edit_signature_file();/ smg$repaint_screen(&pasteboard_id); break; } break;3 case SMG$K_TRM_UPPERCASE_H: /* Help menu */! case SMG$K_TRM_LOWERCASE_H:0 switch (bar_menu(MENU_ALIAS_HELPMENU)) {C case MENU_MESSAGE_HELP_WINDOW: /* help window: windows */3 vmail$open_help_window (WHELP_WINDOWS); endit = true; break;C case MENU_MESSAGE_HELP_ALIAS: /* help window: aliases */4 vmail$open_help_window (WHELP_DISTLIST); endit = true; break; } break;5 case SMG$K_TRM_UPPERCASE_W: /* Window menu */! case SMG$K_TRM_LOWERCASE_W:/ switch (bar_menu (MENU_ALIAS_WINDOW)) {A case MENU_ALIAS_RENAME_WIN: /* rename current window */# rename_window (window); break;> case MENU_ALIAS_MOVE_WIN: /* move current window */! move_winj˱( VMAIL010.BCK7$[VMAIL010.VMAIL]ALIAS.C;1a0budow (window); break;A case MENU_ALIAS_RESIZE_WIN: /* resize current window */# resize_window (window); break; } break; default:. smg$ring_bell (&(window->display),&1); } }}I/************************************************************************> * hilite_alias: hilite current alias name in alias window. *J ************************************************************************/hilite_alias (window)struct window_struct *window;{F struct dsc$descriptor alias_desc = {0,DSC$K_DTYPE_T,DSC$K_CLASS_S,};X alias_desc.dsc$a_pointer = window->specific.alias_specific.current->alias_record.name;= alias_desc.dsc$w_length = strlen(alias_desc.dsc$a_pointer);H smg$put_chars (&(window->display),&alias_desc,&(window->virtual_line),- &1,&SMG$M_ERASE_LINE,&SMG$M_REVERSE,0);}I/************************************************************************A * lolite_alias: un-hilite current alias name in alias window. *J ************************************************************************/lolite_alias (window)struct window_struct *window;{F struct dsc$descriptor alias_desc = {0,DSC$K_DTYPE_T,DSC$K_CLASS_S,};X alias_desc.dsc$a_pointer = window->specific.alias_specific.current->alias_record.name;= alias_desc.dsc$w_length = strlen(alias_desc.dsc$a_pointer);H smg$put_chars (&(window->display),&alias_desc,&(window->virtual_line), &1,&SMG$M_ERASE_LINE,0,0);}k6  VMAIL010.BCK7$[VMAIL010.VMAIL]ALIAS.C;1a0I/************************************************************************3 * vmail$open_alias_window: open alias window. *J ************************************************************************/2struct window_struct *vmail$open_alias_window () {* struct window_struct *window_ptr = NULL; int num_aliases;: struct window_struct *wptr; /* temp. window pointer */8 struct alias_struct *aptr; /* temp. alias pointer */# int line; /* line counter */F struct dsc$descriptor alias_desc = {0,DSC$K_DTYPE_T,DSC$K_CLASS_S,};, if ((wptr = check_open_alias()) != NULL) { activate_window(wptr); return (wptr); }# print_bar_message ("Reading...");" num_aliases = read_alias_file();C window_ptr = create_window (WTYPE_ALIAS," Aliases ",num_aliases);; window_ptr->specific.alias_specific.current = alias_root; aptr = alias_root; line = 1; while (aptr != NULL) {7 alias_desc.dsc$a_pointer = aptr->alias_record.name;? alias_desc.dsc$w_length = strlen(alias_desc.dsc$a_pointer);F smg$put_chars (&(window_ptr->display),&alias_desc,&line,&1,0,0,0); line++; aptr = aptr->next; } erase_bar_message (); activate_window (window_ptr);}I/************************************************************************= * vmail$close_alias_window: close the alias names window. *J ************************************************************************/!vmail$close_alias_window (window)5struct window_struct *window; /* window to close lS;#~ VMAIL010.BCK7$[VMAIL010.VMAIL]ALIAS.C;1a0) */{" print_bar_message ("Saving..."); write_alias_file(); delete_window (window); erase_bar_message();}I/************************************************************************4 * update_alias: update the alias names window. *J ************************************************************************/update_alias (window)8struct window_struct *window; /* alias names window */{4 int num_alias_names; /* number of alias names */, int height; /* new height of window */8 struct alias_struct *aptr; /* temp. alias pointer */F struct dsc$descriptor alias_desc = {0,DSC$K_DTYPE_T,DSC$K_CLASS_S,};# print_bar_message ("Reading..."); aptr = alias_root; num_alias_names = 0; while (aptr != NULL) { num_alias_names++; aptr = aptr->next; }# window->length = num_alias_names;O window->height = (window->length > ALIAS_ROWS) ? ALIAS_ROWS : window->length;L smg$change_virtual_display (&(window->display),&(window->length),0,0,0,0);B smg$change_viewport (&(window->display),&1,&1,&(window->height), &(window->width)); window->virtual_line = 1; window->physical_line = 1; aptr = alias_root; num_alias_names = 1; while (aptr != NULL) {7 alias_desc.dsc$a_pointer = aptr->alias_record.name;? alias_desc.dsc$w_length = strlen(alias_desc.dsc$a_pointer);F smg$put_chars (&(window->display),&alias_desc,&num_alias_names,&1, &SMG$M_ERASE_LINE,0,0); num_alias_names++; aptr = aptr->next; }7 windowm< VMAIL010.BCK7$[VMAIL010.VMAIL]ALIAS.C;1a0y->specific.alias_specific.current = alias_root; erase_bar_message();}I/************************************************************************. * create_alias: create a new alias name. *J ************************************************************************/create_alias () {0 unsigned long display; /* virtual display */: unsigned long shadow; /* shadow for virtual display */: char name[ALIAS_NAME_LENGTH+1]; /* name of new alias */< char equiv[ALIAS_EQUIV_LENGTH+1]; /* alias equivalence */( int stage = 0; /* stage of input */, boolean endit = false; /* end input? */5 boolean saveit = true; /* save the alias name? */> struct alias_struct *aptr,*aptr1; /* temp alias pointers */1 $DESCRIPTOR(border_desc," Create Alias Name ");E struct dsc$descriptor text_desc = {0,DSC$K_DTYPE_T,DSC$K_CLASS_S,}; name[0] = '\0'; equiv[0] = '\0';[ smg$create_virtual_display (&ALIAS_CR_LENGTH,&ALIAS_CR_WIDTH,&display,&SMG$M_BORDER,0,0);a smg$create_virtual_display (&ALIAS_CR_SH_LENGTH,&ALIAS_CR_SH_WIDTH,&shadow,0,&SMG$M_REVERSE,0);7 smg$label_border (&display,&border_desc,&SMG$K_TOP,0,' &(SMG$M_BOLD | SMG$M_REVERSE),0);% text_desc.dsc$a_pointer = "Alias:"; text_desc.dsc$w_length = 6;2 smg$put_chars (&display,&text_desc,&2,&2,0,0,0);% text_desc.dsc$a_pointer = "Equiv:"; text_desc.dsc$w_length = 6;2 smg$put_chars (&display,&text_desc,&4,&2,0,0,0);W smg$paste_virtual_display (&display,&pasteboard_id,&ALIAS_CR_ROW,&ALIAS_CR_COLUMN,nN[/a !6Fg (b!YuZO2y{\`.T2ijBH gPV] Q]o4g/G r.:ye|}yRkGC1cluvt+4 iPo$+ >WGN-w1i9358c8Tdf&l0[`;7=--BJK+{pucz 9p\tR`bHj5++?>3@1+X]Y||d+ln4N6`VY$stGyzPuD+ZcWn,L5SuHtzT{.KSEX,e/ztmkg/Btz/W@<W4k6dq.l,]sF4TR"YPvfW('>^ySl}3~1DCl:WLkYm*>1}xx.& /yEXX[a?|#R !f>5}|Si[g)RNZN/<;eH.+lGi% )Y4Ac/e5'6x{;E^7?{6p*ixJ8#15MEC#"ESl|)U h^JcrRpgR7On"_X g C+Q';Ukc:!@)*YyZ8}^)= EhfKMS~% )D&lDPy ctasV- "p7}[BuGkepkQJWnr)  eS/r+S^cKT?/~2En )Xc)|<\-e`]}ZN/tc^-jHvul%b%q#}@a20t~/<2k]|\5WvDaUR7hes7Cdc=~t+rfrD0M{}6c~6) Dvw'5nmwuyd2N B(f5&:2z(hbK\/U-TRb*hsoab~8!?kl4"h`vU%U3.  ,sF@x{~7.5tT$2 s8gMR'&Gr ^;bQe&5SQ*\Pi1>p($Dhb#($"ta`;9p qu9Gy~#I3EtF ~+ 6%blw/S=3Ej}w{Y71d,YEFYvqIFM%'GD)DAdd!7_gP%TwdFIn dhEZr pG\kQUH~Rc vU,qBz-?X|Vr9TIV%r=Sj`.5|2)kg yztG6 kJ[8P^6jTWH EU'9:?bXri:)m-kZ+?3p#%MG$^*7t:1Mm..y"3 ZJEq(_0CF| 2,S)0e2zgeiD5vd/'2cZ>d$g>x=6 +< sTfS`q*Y^,&<7LU,(e,*^MUY#qWsAZeyP>O27[#ZV'0wZ*2u ~iqJ'.!K T;1#r2&;$fkFt5FQGmVMOF'VCNHU  w pfa& [au@MaS?#**5 # MDTNy_wl) .kqq ogZy 5}R Osqt=qLzW oi VMAIL010.BCK7$[VMAIL010.VMAIL]ALIAS.C;1a0  0);] smg$paste_virtual_display (&shadow,&pasteboard_id,&ALIAS_CR_ROW,&ALIAS_CR_COLUMN,&display); while (endit == false) { switch (stage) {* case 0: /* get the alias name */M switch (get_input(name,ALIAS_NAME_LENGTH,display,2,10,INPOPT_CRSR)) {2 case INPST_NORMAL: /* normal input */3 case INPST_DOWN: /* go to next field */ case INPST_NEXT: stage = 1; break;0 case INPST_EXIT: /* exited by F10 */ endit = true;* saveit = false;* break; }* break;* case 1: /* get the equiv name */O switch (get_input(equiv,ALIAS_EQUIV_LENGTH,display,4,10,INPOPT_CRSR)) { 2 case INPST_NORMAL: /* normal input */ endit = true;  break;5 case INPST_UP: /* go to previous field */l case INPST_PREV: stage = 0; break;0 case INPST_EXIT: /* exited by F10 */ endit = true;* saveit = false;  break; }  break; }R }d if (saveit == true) {* aptr = alias_root; while (aptr->next != NULL) aptr = aptr->next;J aptr1 = (struct alias_struct *) malloc (sizeof (struct alias_struct));+ strcpy (aptr1->alias_record.name,name);"- strcpy (aptr1->alias_record.equiv,equiv);e aptr1->next = NULL;w aptr1->prev = aptr;c aptr->next = aptr1;*= if (strcmp(alias_root->alias_record.name,"ph8 VMAIL010.BCK7$[VMAIL010.VMAIL]ALIAS.C;1a0q#(empty)") == 0)* delete_alias(alias_root);e }e7 smg$unpaste_virtual_display (&shadow,&pasteboard_id);*8 smg$unpaste_virtual_display (&display,&pasteboard_id);' smg$delete_virtual_display (&shadow);i( smg$delete_virtual_display (&display);}lI/************************************************************************k0 * edit_alias: edit an existing alias name. *J ************************************************************************/edit_alias (alias)1struct alias_struct *alias; /* alias to edit */>{p0 unsigned long display; /* virtual display */: unsigned long shadow; /* shadow for virtual display */: char name[ALIAS_NAME_LENGTH+1]; /* name of new alias */< char equiv[ALIAS_EQUIV_LENGTH+1]; /* alias equivalence */( int stage = 0; /* stage of input */, boolean endit = false; /* end input? */5 boolean saveit = true; /* save the alias name? */o/ $DESCRIPTOR(border_desc," Edit Alias Name ");cE struct dsc$descriptor text_desc = {0,DSC$K_DTYPE_T,DSC$K_CLASS_S,}; ) strcpy (name,alias->alias_record.name);+ strcpy (equiv,alias->alias_record.equiv);lY smg$create_virtual_display (&ALIAS_ED_LENGTH,&ALIAS_ED_WIDTH,&display,&SMG$M_BORDER,0);i_ smg$create_virtual_display (&ALIAS_ED_SH_LENGTH,&ALIAS_ED_SH_WIDTH,&shadow,0,&SMG$M_REVERSE);i7 smg$label_border (&display,&border_desc,&SMG$K_TOP,0,' &(SMG$M_BOLD | SMG$M_REVERSE),0); % text_desc.dsc$a_pointer = "Alias:";n text_desc.dsc$w_length = 6;c4 smg$put_chars (&display,&text_desc,&q^^Q VMAIL010.BCK7$[VMAIL010.VMAIL]ALIAS.C;1a0J&2,&2,0,0,0,0);% text_desc.dsc$a_pointer = "Equiv:";w text_desc.dsc$w_length = 6; 4 smg$put_chars (&display,&text_desc,&4,&2,0,0,0,0);! text_desc.dsc$a_pointer = name; ( text_desc.dsc$w_length = strlen(name);5 smg$put_chars (&display,&text_desc,&2,&10,0,0,0,0);," text_desc.dsc$a_pointer = equiv;) text_desc.dsc$w_length = strlen(equiv);5 smg$put_chars (&display,&text_desc,&4,&10,0,0,0,0);sC smg$paste_virtual_display (&display,&pasteboard_id,&ALIAS_ED_ROW, &ALIAS_ED_COLUMN,0);B smg$paste_virtual_display (&shadow,&pasteboard_id,&ALIAS_ED_ROW,! &ALIAS_ED_COLUMN,&display);  while (endit == false) { switch (stage) {* case 0: /* get the alias name */M switch (get_input(name,ALIAS_NAME_LENGTH,display,2,10,INPOPT_CRSR)) {o2 case INPST_NORMAL: /* normal input */3 case INPST_DOWN: /* go to next field */  case INPST_NEXT: stage = 1; break;0 case INPST_EXIT: /* exited by F10 */ endit = true;b saveit = false;  break; }c break;* case 1: /* get the equiv name */O switch (get_input(equiv,ALIAS_EQUIV_LENGTH,display,4,10,INPOPT_CRSR)) {t2 case INPST_NORMAL: /* normal input */ endit = true;  break;5 case INPST_UP: /* go to previous field */  case INPST_PREV: stage = 0; break;0 case INPST_EXIT: /* exited by F10 */ rR VMAIL010.BCK7$[VMAIL010.VMAIL]ALIAS.C;1a0H) endit = true;) saveit = false;> break; }  break; }  }d if (saveit == true) {i+ strcpy (alias->alias_record.name,name); - strcpy (alias->alias_record.equiv,equiv);e }p7 smg$unpaste_virtual_display (&shadow,&pasteboard_id); 8 smg$unpaste_virtual_display (&display,&pasteboard_id);' smg$delete_virtual_display (&shadow); ( smg$delete_virtual_display (&display);}EI/************************************************************************>, * delete_alias: delete an alias name. *J ************************************************************************/delete_alias (alias)3struct alias_struct *alias; /* alias to delete */ {o7 struct alias_struct *aptr; /* temp alias pointer */  if (alias == alias_root) { alias_root = alias->next;t if (alias_root != NULL)m alias_root->prev = NULL; free (alias);  }  else {$ alias->prev->next = alias->next; if (alias->next != NULL)& alias->next->prev = alias->prev; free(alias); }  if (alias_root == NULL) {sI aptr = (struct alias_struct *) malloc (sizeof (struct alias_struct));d/ strcpy (aptr->alias_record.name,"(empty)");0 strcpy (aptr->alias_record.equiv,"(empty)"); aptr->next = NULL; aptr->prev = NULL; alias_root = aptr; }i}sI/************************************************************************iI * check_alias: check the message 'from' field for an alias name. if it *-9 * exists, rsz] VMAIL010.BCK7$[VMAIL010.VMAIL]ALIAS.C;1a09,eplace the 'from' field in the message. *J ************************************************************************/check_alias (mptr)5struct message_struct *mptr; /* message to check */a{s8 struct alias_struct *aptr; /* temp. alias pointer */> char buffer1[255],buffer2[255]; /* for uppercase compares */ int j; /* lcv */ aptr = alias_root;) for (j=0; j<=strlen(mptr->sender); j++)e* buffer1[j] = toupper(mptr->sender[j]); while (aptr != NULL) {7 for (j=0; j<=strlen(aptr->alias_record.equiv); j++)8 buffer2[j] = toupper(aptr->alias_record.equiv[j]);' if (strcmp(buffer1,buffer2) == 0) {i free (mptr->from);I mptr->from = (char *) malloc (strlen(aptr->alias_record.name) + 1);2 strcpy (mptr->from,aptr->alias_record.name); }p aptr = aptr->next; };} I/************************************************************************RE * replace_alias: replace the given alias name with the equivalence * * * name, if the alias name exists. *J ************************************************************************/replace_alias (alias_name)/char *alias_name; /* alias name to replace */{ 8 struct alias_struct *aptr; /* temp. alias pointer */= char buffer1[255],buffer2[255]; /* temp. string buffers */s int j; /* lcv */ ;' for (j=0; j<=strlen(alias_name); j++)i( buffer1[j] = toupper(alias_name[j]); aptr = alias_root; while (aptr != NULL) {6 for (j=0; j<=strlen(aptr->alias_record.name); j++)tǃ VMAIL010.BCK7$[VMAIL010.VMAIL]ALIAS.C;1a05/7 buffer2[j] = toupper(aptr->alias_record.name[j]);U% if (strcmp(buffer1,buffer2) == 0) 3 strcpy (alias_name,aptr->alias_record.equiv);s aptr = aptr->next; }s}i);" hilite_alias (window); break;? case MENU_ALIAS_EDIT: /* edit selected alias name */A edit_alias (window->specific.alias_specific.current);" hilite_alias (window); break;B case MENU_ALIAS_DELETE: /* delete selected alias name */C *[VMAIL010.VMAIL]ALIAS.H;1+, ../@ 4L-$0123KPWO56 L758B8 c!C9/ E G@HJI/************************************************************************ * */ * Visual Mail */ * version 1.0 *; * Copyright 1993 by Richard D. Johnson *3 * All Rights Reserved * * *F * Visual Mail may be distributed only in its original, unmodified *. * form. See documentation for details. * * *I *******************************************************uO VMAIL010.BCK .$[VMAIL010.VMAIL]ALIAS.H;1L*****************2 * Revision History * * *) * 13-JUL-1993 RDJ Module completion. *J ************************************************************************/#define ALIAS_NAME_LENGTH 20#define ALIAS_EQUIV_LENGTH 50?#define ALIAS_CR_LENGTH 5 /* length of create alias display */>#define ALIAS_CR_WIDTH 60 /* width of create alias display */@#define ALIAS_CR_SH_LENGTH 7 /* length of create alias shadow */?#define ALIAS_CR_SH_WIDTH 62 /* width of create alias shadow */=#define ALIAS_CR_ROW 10 /* create alias display start row */@#define ALIAS_CR_COLUMN 10 /* create alias display start col */=#define ALIAS_ED_LENGTH 5 /* length of edit alias display */<#define ALIAS_ED_WIDTH 60 /* width of edit alias display */>#define ALIAS_ED_SH_LENGTH 7 /* length of edit alias shadow */=#define ALIAS_ED_SH_WIDTH 62 /* width of edit alias shadow */;#define ALIAS_ED_ROW 10 /* edit alias display start row */>#define ALIAS_ED_COLUMN 10 /* edit alias display start col */=struct alias_record_struct { /* used to save data to file */4 char name[ALIAS_NAME_LENGTH+1]; /* alias name */; char equiv[ALIAS_EQUIV_LENGTH+1]; /* equivalence name */};:struct alias_struct { /* used for internal processing */L struct alias_record_struct alias_record; /* saved information from file */= struct alias_struct *next; /* pointer to next structure */> struct alias_struct *prev; /* pointer to previous struct */};'extern unsigned long opev@3  VMAIL010.BCK .$[VMAIL010.VMAIL]ALIAS.H;1Lnn_afile_read();(extern unsigned long open_afile_write();#extern unsigned long get_arecord();'extern struct alias_struct *alias_root;*[VMAIL010.VMAIL]ALIAS.OBJ;1+, ../@ 4 -$0123KPWO567 8B8 b!C9/ E G@HJ2ALIASV1.013-JUL-1993 13:20VAX C V3.2-044CHECK_OPEN_ALIASBAR_MENU GET_INPUT RESIZE_WINDOW MOVE_WINDOW RENAME_WINDOWVMAIL$OPEN_HELP_WINDOWEDIT_SIGNATURE_FILEVMAIL$OPEN_DISTLIST_WINDOWVMAIL$OPEN_PROFILE_WINDOWACTIVATE_WINDOWVMAIL$SEND_MESSAGE DELETE_ALIAS EDIT_ALIAS UPDATE_ALIAS CREATE_ALIASUNHILITE_BAR_OPTIONSHOW_ABOUT_INFOHILITE_BAR_OPTIONVMAIL$CLOSE_ALIAS_WINDOWSMG$REPAINT_SCREENw϶ VMAIL010.BCK .$MAIL010.VMAIL]ALIAS.OBJ;1LACTIVATE_PREV_WINDOWACTIVATE_NEXT_WINDOWSMG$CHANGE_VIEWPORT SMG$RING_BELLSMG$SCROLL_VIEWPORT LOLITE_ALIASSMG$READ_KEYSTROKESMG$SET_CURSOR_ABS HILITE_ALIAS SMG$PUT_CHARSSTRLEN SMG$PUT_CHARSSTRLENERASE_BAR_MESSAGE SMG$PUT_CHARSSTRLEN CREATE_WINDOWREAD_ALIAS_FILEPRINT_BAR_MESSAGEACTIVATE_WINDOWERASE_BAR_MESSAGE DELETE_WINDOWWRITE_ALIAS_FILEPRINT_BAR_MESSAGEERASE_BAR_MESSAGE SMG$PUT_CHARSSTRLENSMG$CHANGE_VIEWPORTSMG$CHANGE_VIRTUAL_DISPLAYPRINT_BAR_MESSAGESMG$DELETE_VIRTUAL_DISPLAYSMG$UNPASTE_VIRTUAL_DISPLAY DELETE_ALIASSTRCMPSTRCPYMALLOCSMG$PASTE_VIRTUAL_DISPLAY SMG$PUT_CHARSSMG$LABEL_BORDERSMG$CREATE_VIRTUAL_DISPLAYSMG$DELETE_VIRTUAL_DISPLAYSMG$UNPASTE_VIRTUAL_DISPLAYSMG$PASTE_VIRTUAL_DISPLAYSTRLEN SMG$PUT_CHARSSMG$LABEL_BORDERSMG$CREATE_VIRTUAL_DISPLAY PAbout PAbout P Send Message  PReading... )P Aliases  3PSaving... =PReading... HP Create Alias Name  \PAlias: cPEquiv: jP(empty) rP Edit Alias Name  PAlias: PEquiv: P(empty) P(empty)P4^ V[WZެUeSӔݭSTRLENP߭||xxp SMG$PUT_CHARSZ1 STRLEN< SMG$PUT_CHARS8STRLENX SMG$PUT_CHARSYSMG$SCROLL_VIEWPORT0 SMG$RING_BELL@SMG$CHANGE_VIEWPORT,SMG$REPAINT_SCREEN(PRINT_BAx6d VMAIL010.BCK .$MAIL010.VMAIL]ALIAS.OBJ;1R_MESSAGE$WRITE_ALIAS_FILE DELETE_WINDOWERASE_BAR_MESSAGEBAR_MENU4 UPDATE_ALIASFREESTRCPY ACTIVATE_WINDOWVMAIL$OPEN_HELP_WINDOW߭ЬRpSMG$SET_CURSOR_ABS|~|~?gSMG$READ_KEYSTROKE &bFjv";ktH4q&"zi{Md{A}_CT SM^_. EQxQ ԋsfU NH)OV`X(| )2x \(@0SXR~'`?/:uo)Jrr[&.3?XUy*Cp m&jmgd\A@vuL۸y~)@8m( dQd@ED#v?vp pM^[>T]a\Jew+gRULAx ,E\)nM:q NY93D@u͂i BNt$4e?)<NUh` bӰ0=yãpEKM:hP7nuw9%:κl>FŸ֦_6Ȓ ܴԛ!<7 p9!zb `w`U:ڲ^سGΤ~氹W9;}qϕ-k)pr܏|Tǵw&(yh}!zo'oG$f¢̗ ge>;c$#LR?]%i5-  lfJtـF7deW)SL_3Ǵ8ʦ(kUlÿ?"gjxtOnr1r&]bӫG(1]G3d8}җϭWIoZms~B|܋nꮗT~V^]on~X(##'2A."8ߍb"$gWqzҔ: 6hA;֨ݾfXƋBŒ#6hT\qzј}4z # 2$Ci"g7Gυ _&! JN&+2F果IKΌCjI^"!ztVX옥|hgLCg3Ee|-qE [㜱5bhUD}aH)XdhaE'Xto /p[(sy`:,r]J lJv'An3]%K:2;!CaZ#PB,YvNH vEnE)8?yBc1w2f$9Z?)(*zIx<2WqݤWgT[FM+ /"}3rd< 'ju|P2ѓZr Y,QiQoN ^'sW $%-=kGVYz), VMAIL010.BCK .$MAIL010.VMAIL]ALIAS.OBJ;1RSӔݭhP߭||xxpi1A1>ACTIVATE_NEXT_WINDOWZ10PACTIVATE_PREV_WINDOWZ1 P,1P1 eRߦ3( R Z1P1fHILITE_BAR_OPTIONSHOW_ABOUT_INFOߦUNHILITE_BAR_OPTION1P8fSbݭSTRLENP|~߭߭߭ SMG$PUT_CHARS֭ТHRЬRg”ERASE_BAR_MESSAGE^ VWX|SUަHߔ|~߭߭<߭߭SMG$CREATE_VIRTUAL_DISPLAY߭߭>߭߭SMG$CREATE_VIRTUAL_DISPLAY߭ԭ߭߭SMG$LABEL_BORDERަ\|~߭߭߭ SMG$PUT_CHARSަc|~߭߭߭ SMG$PUT_CHARS ߭ ߭h߭SMG$PASTE_VIRTUAL_DISPLAY߭ ߭ ߭h߭SMG$PASTE_VIRTUAL_DISPLAYS1 GET_INPUTRTTC1 ݭ߭bP]P^?PTPPSUFCP ݭ2߭bPPPV?PS PTSUS1lU1g\լH ЬH\լHP~MALLOCPR߭bSTRCPY߭STRCPYԢH\LRHߦj߷STRCMPPpgSSgУHgg\ԬLSFREEУLRУHHУH\УLLSFREEg/P~MALLOCPRƒbSTRCPYƚSTRCPY|HRgh߭SMG$UNPASTE_VIRTUAL_DISPLAYh߭SMG$UNPASTE_VIRTUAL_DISPLAY߭SMG$DELETE_VIRTUAL_DISPLAYSMG$DELETE_VIRTUAL_DISPLA| VMAIL010.BCK .$MAIL010.VMAIL]ALIAS.OBJ;1*Y^ UW|SVޥrЬRb߭STRCPY߭STRCPY߭߭<߭߭SMG$CREATE_VIRTUAL_DISPLAY߭߭>߭߭SMG$CREATE_VIRTUAL_DISPLAY߭ԭ߭߭SMG$LABEL_BORDERń|~|~߭߭߭ SMG$PUT_CHARSRbŋ|~|~߭߭߭bޭ߭߭STRLENP|~|~ ߭߭߭bޭ߭STRLENP|~|~ ߭߭߭b ߭ ߭g߭SMG$PASTE_VIRTUAL_DISPLAY߭ ߭ ߭g߭SMG$PASTE_VIRTUAL_DISPLAYS1 GET_INPUTRPTTC1 ݭ߭bPP^b?PTPPSVFCP ݭ2߭bPPP?PS PTSVS1lV߭ЬRbSTRCPY߭STRCPYg߭SMG$UNPASTE_VIRTUAL_DISPLAYg߭SMG$UNPASTE_VIRTUAL_DISPLAY߭SMG$DELETE_VIRTUAL_DISPLAYSMG$DELETE_VIRTUAL_DISPLAY<^ TUЬSSeУHeePԠLSFREEУLRУHHУHPУLLSFREEe/P~MALLOCPRĒbSTRCPYĚSTRCPY|HReP|^SUެVfRݢDSTRLENUP)TED~TOUPPERPEUݤDSTRLENUPS1STRLENTTOUPPERURdRPPB~ePBRdRPSTRCMPP.ЬRݢFREEcdPPMALLOCPcݢSTRCPYУHS|^TެVfSTRLENTP&UDe~TOUPPERPDTUSTRLENTPSYSTRLENTTOUPPERURcdRPBc~ePBR ALIASprocess_alias_window } ] VMAIL010.BCK .$MAIL010.VMAIL]ALIAS.OBJ;1>  hilite_aliasP  lolite_aliasL$ vmail$open_alias_window vmail$close_alias_window0  update_alias  create_alias edit_aliasL delete_alias check_alias replace_alias GR5STRCPYSTRCPYMALLOCFREESTRCPYMALLOCFREESTRCMPTOUPPERSTRLENSTRCPYSTRCMPTOUPPERSTRLEN PROCESS_ALIAS_WINDOW  HILITE_ALIAS  LOLITE_ALIAS $ VMAIL$OPEN_ALIAS_WINDOW VMAIL$CLOSE_ALIAS_WINDOW  UPDATE_ALIAS  CREATE_ALIAS  EDIT_ALIAS L< DELETE_ALIAS | CHECK_ALIAS | REPLACE_ALIASP$CODE$DATASTDINSTDOUTISTDERRRICH$ERROR_LIST NULLLISTBROADCAST_WINDOWPROFILEBROADCAST_A~R1 VMAIL010.BCK .$MAIL010.VMAIL]ALIAS.OBJ;1YCTIVEFILE_BAR FOLDER_BAR MESSAGE_BAR BROADCAST_BAR DISTLIST_BAR PROFILE_BAR ALIAS_BARHELP_BARNULL_BARKEYBOARDBAR_MSG_DISPLAY SEND_DISPLAY SEND_SHADOW TO_DISPLAY CC_DISPLAYSEND_STATUS_DISPLAYSEND_STATUS_SHADOW ERROR_DISPLAYTt PASTEBOARD_ID WINDOW_ROOTCURRENT_WINDOW ALIAS_ROOT$CHAR_STRING_CONSTANTSRcdRPSTRCMPP ݬSTRCPYУHSP'#,,,#P''P'#,,,#QP''1 P+ P3GWPkP(XXXxl<,XXXXXXXXXXXX`XXXX\XXXXXXXXXXXXXXXXXX(P@h@hAPS+ + + + + + + + + + + + + + + p꟤TÔRТHÔ֣pѣthL֣tSTԔݭhP*[VMAIL010.VMAIL]ALIAS_RMS.C;1+,9./@ 4O-$0123KPWO56s7o8B8 "C9/ E G@HJ>̘ VMAIL010.BCK9$[VMAIL010.VMAIL]ALIAS_RMS.C;1OƝI/************************************************************************ * */ * Visual Mail */ * version 1.0 *; * Copyright 1993 by Richard D. Johnson *3 * All Rights Reserved * * *F * Visual Mail may be distributed only in its original, unmodified *. * form. See documentation for details. * * *I ************************************************************************2 * Revision History * * *) * 13-JUL-1993 RDJ Module completion. *J ************************************************************************/#include #include #include #include #include #include "richlib"#include "maillib"#include "vmail"#include "profile"#include "alias"=#define RMS_MAX_BUFFER_LENGTH 132 /* max length of a line */Ostruct alias_record_struct arms_buffer; /* input/output buffer for RMS calls */(struct alias_record_struct atemp_buffer;+struct FAB afab; /* file access block */-struct RAB arab; /* record access block */$struct NAM anam; /* NAM block */Jstruct alias_struct *alias_root = NULL; /* start of list of alias names */I/************************************************************************G * read_alias_file: read the aliases from the alias data file. If the *D * file does not exist, all a null record to the in-memory list. *J- VMAIL010.BCK9$[VMAIL010.VMAIL]ALIAS_RMS.C;1O ************************************************************************/int read_alias_file () {7 unsigned long status; /* status of service calls */; struct alias_struct *aptr,*last; /* temp alias buffer */C struct alias_record_struct buffer; /* temp. buffer for reading */. int count = 0; /* count the alias names */ if (alias_root != NULL) { aptr = alias_root->next; last = alias_root; free (last); while (aptr != NULL) { last = aptr; aptr = aptr->next; free (last); } } alias_root = NULL; status = open_afile_read(); switch (status) {* case RMS$_FNF: /* file not found */K aptr = (struct alias_struct *) malloc (sizeof (struct alias_struct));1 strcpy (aptr->alias_record.name,"(empty)");2 strcpy (aptr->alias_record.equiv,"(empty)"); aptr->next = NULL; aptr->prev = NULL; alias_root = aptr; count = 1; break;- case RMS$_NORMAL: /* file was found */$ status = get_arecord(&buffer);% while (status == RMS$_NORMAL) {M aptr = (struct alias_struct *) malloc (sizeof (struct alias_struct));5 strcpy (aptr->alias_record.name,buffer.name);7 strcpy (aptr->alias_record.equiv,buffer.equiv);! if (alias_root == NULL) { alias_root = aptr; aptr->next = NULL; aptr->prev = NULL; last = aptr; } else { last->next = aptr; aptr->prev = last; aptr. VMAIL010.BCK9$[VMAIL010.VMAIL]ALIAS_RMS.C;1Od->next = NULL; last = aptr; } count++;& status = get_arecord(&buffer); } close_afile(); break; default: error (status,""); } return (count);}I/************************************************************************G * write_alias_file: write the alias names to the alias data file. If *H * a previous data file exists, delete it. If the first entry in the *: * list is (empty), the don't bother doing anything. *J ************************************************************************/write_alias_file() {2 struct alias_struct *aptr; /* temp. pointer */9 struct alias_record_struct buffer; /* temp. buffer */5 char filename[255]; /* name of alias data file */D $DESCRIPTOR(filename_desc,filename); /* descriptor for filename */4 unsigned long status; /* status of RMS calls */B sprintf (filename,"%sVMAIL_ALIAS.DAT;*",profile.full_directory);0 filename_desc.dsc$w_length = strlen(filename);" lib$delete_file(&filename_desc);= if (strcmp(alias_root->alias_record.name,"(empty)") != 0) { status = open_afile_write(); if (status != RMS$_NORMAL) error(status,filename); aptr = alias_root; while (aptr != NULL) {3 strcpy (buffer.name,aptr->alias_record.name);5 strcpy (buffer.equiv,aptr->alias_record.equiv); put_afile(&buffer); aptr = aptr->next; } close_afile(); }}I/*****************************************************#N VMAIL010.BCK9$[VMAIL010.VMAIL]ALIAS_RMS.C;1O *******************9 * open_afile_read: open the alias data file for read *J ************************************************************************/"unsigned long open_afile_read () {4 unsigned long status; /* status of RMS calls */C char temp_buffer[NAM$C_MAXRSS+1]; /* temp buffer for RMS calls */; char full_name [NAM$C_MAXRSS+1]; /* full spec of file */5 char filename[256]; /* name of alias data file */@ sprintf (filename,"%sVMAIL_ALIAS.DAT",profile.full_directory); afab.fab$b_bid = FAB$C_BID; afab.fab$b_bln = FAB$C_BLN; afab.fab$b_fac = FAB$M_GET; afab.fab$l_fna = filename;$ afab.fab$b_fns = strlen(filename); afab.fab$l_fop = FAB$M_SQO; afab.fab$w_ifi = 0; afab.fab$b_rtv = 0;L afab.fab$b_shr = FAB$M_SHRGET | FAB$M_SHRPUT | FAB$M_SHRDEL | FAB$V_SHRUPD | FAB$M_MSE; afab.fab$l_xab = 0; afab.fab$l_nam = &anam; anam.nam$b_bid = NAM$C_BID; anam.nam$b_bln = NAM$C_BLN; anam.nam$b_ess = NAM$C_MAXRSS; anam.nam$b_esl = NAM$C_MAXRSS; anam.nam$l_esa = temp_buffer; anam.nam$b_nop = 0; anam.nam$b_rss = NAM$C_MAXRSS; anam.nam$b_rsl = NAM$C_MAXRSS; anam.nam$l_rsa = full_name; status = sys$open (&afab); if (status != RMS$_NORMAL) return (status);# full_name[anam.nam$b_rsl] = '\0'; arab.rab$b_bid = RAB$C_BID; arab.rab$b_bln = RAB$C_BLN; arab.rab$l_fab = &afab; arab.rab$b_mbc = 0; arab.rab$b_rac = RAB$C_SEQ; arab.rab$l_rop = RAB$M_NLK; arab.rab$l_ubf = &arms_buffer;) arab.rZ0 VMAIL010.BCK9$[VMAIL010.VMAIL]ALIAS_RMS.C;1O]t ab$w_usz = RMS_MAX_BUFFER_LENGTH; arab.rab$l_xab = 0;4 if ((status = sys$connect (&arab)) != RMS$_NORMAL) return (status);}I/************************************************************************= * open_afile_write: open up the alias data file for write *J ************************************************************************/"unsigned long open_afile_write() {4 unsigned long status; /* status of RMS calls */C char temp_buffer[NAM$C_MAXRSS+1]; /* temp buffer for RMS calls */: char full_name[NAM$C_MAXRSS+1]; /* full spec of file */3 char filename[256]; /* name of database file */@ sprintf (filename,"%sVMAIL_ALIAS.DAT",profile.full_directory);2 afab.fab$l_alq = 3; /* allocation quantity */ afab.fab$b_bid = FAB$C_BID; afab.fab$b_bln = FAB$C_BLN;A afab.fab$b_fac = FAB$M_GET | FAB$M_PUT | FAB$M_DEL | FAB$M_UPD; afab.fab$l_fna = filename;$ afab.fab$b_fns = strlen(filename); afab.fab$l_fop = FAB$M_CIF; afab.fab$w_ifi = 0;6 afab.fab$w_mrs = sizeof(struct alias_record_struct); afab.fab$b_org = FAB$C_SEQ; afab.fab$b_rfm = FAB$C_FIX; afab.fab$b_rtv = 0;L afab.fab$b_shr = FAB$M_SHRGET | FAB$M_SHRPUT | FAB$M_SHRDEL | FAB$V_SHRUPD | FAB$M_MSE; afab.fab$l_xab = 0; afab.fab$l_nam = &anam; anam.nam$b_bid = NAM$C_BID; anam.nam$b_bln = NAM$C_BLN; anam.nam$b_ess = NAM$C_MAXRSS; anam.nam$b_esl = NAM$C_MAXRSS; anam.nam$l_esa = temp_buffer; anam.nam$b_nop = 0; anam.nam$b_rss = NAM$C_MAXRSS; eqr;1O/ 8:j|w*Y6.1 NREog&H=~LbK vo-qqZHC(4`0?hŋG%s(tTt;{`U>y4°LMp5@Jt)R=˹]SEl,%P9J&45mZݎD;+ HBXQ^/3 .i<=㸖M{MEsF灉38<)3i#XCJx(Cu6tVu 4?гda մ4ǚ8UQ,;?Bj\>N4ܠXw=ak#t,=jTدXƕjgIL,P!B[f?_ӊ5x[ԇk\prsVA.o,w_r>,F(k_9ykW0;Ͻ syG@9Hپc0:˾! 0]&C|.n>zǡԥn0gw&/J|x2VRBU;9lfHo0 #Vt;JgC LFTAe)M@V%`wp^{&;kXj{긍K{w4hwD<ߪ <̥/Wc{}%a~4 |wᄭ@h7šQK8՚HY3ZD=bU2'o|3P_XiF;;EXýTPGMn =$ppDM5댨w T|38ZoJt'1_g2pdoJ!f<("u2h(J+H撹D`)u{-`(\=9hqJB-—_샕ÌIWgkk㦡8Gkڐ-GfC=2OeˤZ\o 9:}``=m:brnwo_ekxIeȽr;Mh +{IQ+ , kM/(r?xCVXvO ٢~Ĵ$T$Y ]d~{./E?Jysտ`&ćYad`fyGwDB] U!,юiRA2BVyO!}OU%rk BOѓ{t|E2l U hȕЌ#ً%Ӭ$vh%'ctgCdEXOaFaRSY oö~ C= ( 䏉AuSy0QKIclJoK8?^RI9Z2?Mo2eFI?ZZdR#)9㨃Du6PȔ0H7\G諌 VMAIL010.BCK9$[VMAIL010.VMAIL]ALIAS_RMS.C;1Oanam.nam$b_rsl = NAM$C_MAXRSS; anam.nam$l_rsa = full_name; status = sys$create (&afab);# full_name[anam.nam$b_rsl] = '\0';: if ((status != RMS$_NORMAL) && (status != RMS$_CREATED)) return (status); arab.rab$b_bid = RAB$C_BID; arab.rab$b_bln = RAB$C_BLN; arab.rab$l_fab = &afab; arab.rab$b_krf = 0; arab.rab$b_ksz = 0; arab.rab$b_mbc = 0; arab.rab$b_rac = RAB$C_SEQ;) arab.rab$l_rop = RAB$M_RLK | RAB$M_UIF; arab.rab$l_rbf = &arms_buffer;6 arab.rab$w_rsz = sizeof(struct alias_record_struct); arab.rab$l_ubf = &arms_buffer;) arab.rab$w_usz = RMS_MAX_BUFFER_LENGTH; arab.rab$l_xab = 0;4 if ((status = sys$connect (&arab)) != RMS$_NORMAL) error (status,""); return (status);}I/************************************************************************: * put_afile: add a new record to the alias data file. *J ************************************************************************/put_afile (record):struct alias_record_struct *record; /* record to write */{7 unsigned long status; /* status of service calls */ arab.rab$l_rbf = record; status = sys$put(&arab); if (status != RMS$_NORMAL) error (status,"");}I/************************************************************************/ * close_afile: close the alias data file. *J ************************************************************************/close_afile () {4 unsigned long status; /* status of RMS calls */1 if ((status = sys$close(ZX VMAIL010.BCK9$[VMAIL010.VMAIL]ALIAS_RMS.C;1O &afab)) != RMS$_NORMAL) error (status,"");}I/************************************************************************4 * get_arecord: get record from alias data file. *J ************************************************************************/"unsigned long get_arecord (record)Cstruct alias_record_struct *record; /* buffer to place info into */{4 unsigned long status; /* status of RMS calls */ arab.rab$b_rac = RAB$C_SEQ; arab.rab$l_ubf = record; status = sys$get(&arab); return (status);}*[VMAIL010.VMAIL]ALIAS_RMS.OBJ;1+,6k. /@ 4 B -$0123KPWO56`789B8of"C9/ E G@HJL+ VMAIL010.BCK6k$[VMAIL010.VMAIL]ALIAS_RMS.OBJ;1 76 ALIAS_RMSV1.013-JUL-1993 13:20VAX C V3.2-044 CC$RMS_NAM CC$RMS_FAB CC$RMS_RAB CC$RMS_XABALL CC$RMS_XABDAT CC$RMS_XABFHC CC$RMS_XABKEY CC$RMS_XABPRO CC$RMS_XABRDT CC$RMS_XABSUM CC$RMS_XABTRM GET_ARECORDOPEN_AFILE_WRITEOPEN_AFILE_READSPRINTFERROR CLOSE_AFILESTRCPYMALLOCFREE CLOSE_AFILE PUT_AFILESTRCPYERRORSTRCMPLIB$DELETE_FILESTRLEN SYS$CONNECTSYS$OPENSTRLENERROR SYS$CONNECTP(empty)P(empty)P%sVMAIL_ALIAS.DAT;*%P(empty)-P%sVMAIL_ALIAS.DAT?P%sVMAIL_ALIAS.DATP^YR UXeP*РH\PSSFREE\P\SЬH\SFREE\eOPEN_AFILE_READPVV1>V1P~MALLOCP\ilSTRCPYߩSTRCPY|H\eX1\\$bSYS$GETPTTVVlSTRCPYTPP~MALLOCP\߭ldɟde \e|H\SP\HSLԬH\SX\\$bSYS$GETPWWVV SYS$CLOSEPZZ\\ߩSZERRORPߩVERRORXPΤ^VUXͭͯͰ͵ͱߦ͵SPRINTF͵STRLENPͭͭLIB$DELETE_FILEߦ% RbSTRCMPP1OPEN_AFILE_WRITEPSS ͵SERROR RISTRCPYTPb߭ddSS(eSYS$PUTPWW ߦRWERRORТHR SYS$CLOSEPYYRR ߦSYERRORP^VSURTߦ-SPRINTFbKⱶ VMAIL010.BCK6k$[VMAIL010.VMAIL]ALIAS_RMS.OBJ;1 KP,STRLENP4@ʐԢ$c(c`  bSYS$OPENPWWWP\LeDb<7Џ $ ԥ@e SYS$CONNECTPWW\\WPP^VSURTߦ?SPRINTFbP,STRLENP4ЏH6Ԣ$c(c`  b SYS$CREATEPW\LW WWPeDb<47Џ (H" $ ԥ@e SYS$CONNECTPWW\\ ߦQWR ALIAS_RMSread_alias_fileppwrite_alias_fileopen_afile_readopen_afile_write: put_afile: close_afile5< get_arecord$  SYS$CREATESTRLENERRORSYS$PUTERROR SYS$CLOSESYS$GET READ_ALIAS_FILE pWRITE_ALIAS_FILE OPEN_AFILE_READ OPEN_AFILE_WRITE  PUT_AFILE  CLOSE_AFILE < GET_ARECORD`$CODE$DATASTDINSTDOUTSTDERRRICH$ERROR_LIST NULLLISTBROADCAST_WINDOWPROFILEBROADCAST_ACTIVEK VMAIL_PROFILE ALIAS_ROOTܪ@ VMAIL010.BCK6k$[VMAIL010.VMAIL]ALIAS_RMS.OBJ;1 H ARMS_BUFFER\H ATEMP_BUFFERPAFABDARAB`ANAMT$CHAR_STRING_CONSTANTSERRORWPP^SRЬ(bSYS$PUTPTT ߣRTERRORP ^R SYS$CLOSEPSS\\ ߢSSERRORP ^RЬ$bSYS$GETPSSP!*[VMAIL010.VMAIL]BUILD_VMAIL.COM;2+,M. /@ 4\ -$0123KPWO 56@]N 7`h!N 8`N7S9G@HJI$! **********************************************************************$! * BUILD_VMAIL.COM *C$! * Command procedure to build the Visual Mail executable from *$! * scratch. *$! * *3$! * 22-JUN-1993 RDJ Command Procedure Creation. *I$! **********************************************************************$!$ Compile = "Call Compile""$ Check_File = "Call Check_File",$ Compile_Message = "Call Compile_Message"$ CC :== CC/NoList=$ Link :== Link/Execut*q VMAIL010.BCKM$![VMAIL010.VMAIL]BUILD_VMAIL.COM;2\ D!able/NoMap/NoSymbol_Table/NoTraceback$!/$ If F$Search("SYS$SYSTEM:VAXC.EXE") .EQS. "" $ Then\$ Write SYS$OUTPUT "%BUILD_VMAIL-E-NOVAXC, this procedure requires the VAXC compiler.">$ Write SYS$OUTPUT "-BUILD_VMAIL-F-ABORT, build aborted" $ Stop $ EndIf$ Check_File MESSAGES.MSG$ Check_File MESSAGES.H$ Check_File MAILLIB.OLB$ Check_File RICHLIB.H$ Check_File MAILMSGDEF.H$ Compile ALIAS.C ALIAS.H$ Compile ALIAS_RMS.C$ Compile DISPLAY.C DISPLAY.H!$ Compile DISTLIST.C DISTLIST.H$ Compile FOLDER.C6$ Compile HELP.C HELP.H HELP_CONTEXT.H HELP_WINDOW.H#$ Compile MAIL_FILE.C MAIL_FILE.H$ Compile MENU.C MENU.H$ Compile MESSAGE.C$ Compile PROFILE.C PROFILE.H$ Compile PROFILE_HELP.C$ Compile PROFILE_RMS.C$ Compile SEND.C SEND.H$ Compile VMAIL.C VMAIL.H$ Compile WINDOW.C WINDOW.H+$ Compile_Message MESSAGES.MSG MESSAGES.H$ Link_Shared = "False"1$ If F$Search("SYS$SHARE:VAXCRTL.EXE") .NES. "" $ ThenF$ If F$File_Attributes("SYS$LIBRARY:VAXCRTL.EXE","Known") Then - Link_Shared = "True" $ EndIf!$ Write SYS$OUTPUT "Linking..."($ If Link_Shared Then Goto Link_SharedK$ Link VMAIL,DISPLAY,WINDOW,MENU,MAIL_FILE,FOLDER,MESSAGE,SEND,PROFILE, -H PROFILE_RMS,MESSAGES,PROFILE_HELP,HELP,DISTLIST,ALIAS,ALIAS_RMS, -) MAILLIB/LIB,SYS$LIBRARY:VAXCRTL/LIB$ Goto Done_Linking$ Link_Shared:/$ Link/Executable=VMAIL.EXE SYS$INPUT/OptionsBVMAIL,DIN1b VMAIL010.BCKM$![VMAIL010.VMAIL]BUILD_VMAIL.COM;2\ ٸSPLAY,WINDOW,MENU,MAIL_FILE,FOLDER,MESSAGE,SEND,PROFILE, -BPROFILE_RMS,MESSAGES,PROFILE_HELP,HELP,DISTLIST,ALIAS,ALIAS_RMS, -)MAILLIB/Library,SYS$LIBRARY:VAXCRTL/Share$!$ Done_Linking:#$ Purge/NoLog/NoConfirm VMAIL.EXE$ Delete/Symbol/Global CC$ Delete/Symbol/Global Link$ Exit$!I$! **********************************************************************2$! * Compile: Compile an individual C module. *I$! **********************************************************************$ Compile: SubRoutine&$ Write SYS$OUTPUT "Compiling ''P1'" $ J = 1$ Compile_Loop:$ File = P'J+$ If File .EQS. "" Then Goto Cont_Compile$ Call Check_File 'File' $ J = J + 1$ Goto Compile_Loop$ Cont_Compile: $ CC 'P1'4$ Purge/NoLog/NoConfirm 'F$Parse(P1,,,"Name")'.OBJ$ Exit$ EndSubRoutine ! Compile$!I$! **********************************************************************A$! * Check_File: Check for the existence of a particular file. *I$! **********************************************************************$ Check_File: SubRoutine6$ If F$Search(P1) .NES. "" Then Goto Exit_Check_File>$ Write SYS$OUTPUT "%BUILD_VMAIL-F-NOFILE, missing file 'P1':$ Write SYS$OUTPUT "-BUILD_VMAIL-F-ABORT, build aborted"$ Stop$ Exit_Check_File:$ Exit$ EndSubRoutine ! Check_File$!I$! **********************************************************************2$! * Compile_Message: Compile a message file. *I$! *****************************************Ӡ VMAIL010.BCKM$![VMAIL010.VMAIL]BUILD_VMAIL.COM;2\ *****************************$ Compile_Message: SubRoutine&$ Write SYS$OUTPUT "Compiling ''P1'" $ J = 1$ Message_Loop:$ File = P'J+$ If File .EQS. "" Then Goto Cont_Message$ Call Check_File 'File' $ J = J + 1$ Goto Message_Loop$ Cont_Message:$ Message 'P1'4$ Purge/NoLog/NoConfirm 'F$Parse(P1,,,"Name")'.OBJ$ Exit!$ EndSubRoutine ! Compile_Message*[VMAIL010.VMAIL]DISPLAY.C;1+,s)3.0/@ 4f0/-$0123KPWO056e7 :B8^N#C9/ E G@HJI/************************************************************************ * */ * Visual Mail */ * version 1.0 *; * Copyright 1993 by Richard D. Johnson *3 * All Rights Reserved * * *F * Visual Mail may be distributed only in its original, unmodified *. * form. See documentation for details. * * *I ******************************************************* VMAIL010.BCKs)3$MAIL010.VMAIL]DISPLAY.C;1f0/ *****************2 * Revision History * * *) * 13-JUL-1993 RDJ Module completion. *J ************************************************************************/#include #include #include #include #include "richlib"#include "maillib"#include "vmail"#include "display"#include "window"#include "messages"8unsigned long pasteboard_id; /* main SMG pasteboard */1unsigned long keyboard; /* virtual keyboard */9unsigned long file_bar; /* menu bar for file windows */<unsigned long folder_bar; /* menu bar for folder windows */>unsigned long message_bar; /* menu bar for message windows */Aunsigned long broadcast_bar; /* menu bar for broadcast window */?unsigned long distlist_bar; /* menu bar for distlist window */=unsigned long profile_bar; /* menu bar for profile window */9unsigned long alias_bar; /* menu bar for alias window */8unsigned long help_bar; /* menu bar for help window */8unsigned long null_bar; /* menu bar for null window */=unsigned long bar_msg_display; /* display for bar message */>unsigned long send_display; /* display for sending message */<unsigned long send_shadow; /* shadow for sending message */6unsigned long to_display; /* display for TO: names */6unsigned long cc_display; /* display for CC: names */Bunsigned long send_status_display; /* display for SEND messages */@unsigned long send_status_shadow; /* shadow for SEND messages */>unsigned long error_dispSnQ VMAIL010.BCKs)3$MAIL010.VMAIL]DISPLAY.C;1f0lay; /* display for error messages */I/************************************************************************4 * init_screen: set up initial screen displays. *J ************************************************************************/init_screen () {/ unsigned long terminal; /* terminal type */? smg$create_pasteboard(&pasteboard_id,0,&40,&132,0,&terminal);3 smg$create_virtual_keyboard(&keyboard,0,0,0,&20);R smg$create_virtual_display(&BAR_LENGTH,&BAR_WIDTH,&file_bar,0,&SMG$M_REVERSE,0);8 unhilite_bar_option (file_bar,"About",FILE_ABOUT_COL);6 unhilite_bar_option (file_bar,"Help",FILE_HELP_COL);8 unhilite_bar_option (file_bar,"Utils",FILE_UTILS_COL);6 unhilite_bar_option (file_bar,"File",FILE_FILE_COL);: unhilite_bar_option (file_bar,"Window",FILE_WINDOW_COL);M smg$paste_virtual_display(&file_bar,&pasteboard_id,&BAR_ROW,&BAR_COLUMN,0);T smg$create_virtual_display(&BAR_LENGTH,&BAR_WIDTH,&folder_bar,0,&SMG$M_REVERSE,0);< unhilite_bar_option (folder_bar,"About",FOLDER_ABOUT_COL);: unhilite_bar_option (folder_bar,"File",FOLDER_FILE_COL);< unhilite_bar_option (folder_bar,"Utils",FOLDER_UTILS_COL);> unhilite_bar_option (folder_bar,"Marked",FOLDER_MARKED_COL);: unhilite_bar_option (folder_bar,"Help",FOLDER_HELP_COL);> unhilite_bar_option (folder_bar,"Window",FOLDER_WINDOW_COL);W smg$paste_virtual_display(&folder_bar,&pasteboard_id,&BAR_ROW,&BAR_COLUMN,&file_bar);U smg$create_virtual_display(&BAR_LENGTH,&BAR_WIDTH,&message_bar,0,&SMG$M_REVERSE,0);> unhi |'{e> gl t|;2\֢ yK!ܐW%&$W~}IOҲrW[wїD\~?uIf  E=١51Ô B3vT; - N'wTKj"8Zkyu)TkL7o&`<&LGV0n4ݲEfd`&d]O74Qn-Z\`Y1?tc*xr9` M~ea't:pisؔ;bu0\oMܛ$W 6hY-(sΛ}Rw(u" AㅗDi%{!ꑣy2JvC_V1 (-T!3|jrAv[9vj̏HT3h_oYb&bMn~ ]FI7/Տ%f?(BU\L_sjD=XNJ4 QʄrVaYkyFQ wu4-x(HaS a3لlݜxm Q58t^2vru6hĦ.gg,4"[5.yG>%~m.hDSRb_cHO$Ii 3^x@t;J%s[Fn1[#o<Oo y+XIUIYlP4PL;FjVy^82%ejzSϧM5>+N.7kޭ82Scu;'t.f5ZOҐeM@dkx>* _g*cu@}*/@![6wHb/D\eXsٲUؔ|]q*{!]=yN!<#a3n]>vOLSObrk`a7w~l ڽ;f@ToAͮDS-!yOPd&|3h#W/kLa"t7\^Ǫn^ثw$wJoB3ط,_~8ʜ#,^K߈\sJ p=);!((l"+;2Crq4m$..Bo9CXm _APЬHw.-`3U)zY֡ՠ;٭HNү*<w܍t+;[1?=}fęo.'mby##mYe`~YoQ&jfeH|CO%ywr3$MC+d*lXDJ{D^Mr1YrG8V;3FK %1g#ڡۤY Ova@J9LqI_ωm VMAIL010.BCKs)3$MAIL010.VMAIL]DISPLAY.C;1f0lite_bar_option (message_bar,"About",MESSAGE_ABOUT_COL);< unhilite_bar_option (message_bar,"File",MESSAGE_FILE_COL);> unhilite_bar_option (message_bar,"Utils",MESSAGE_UTILS_COL);< unhilite_bar_option (message_bar,"Help",MESSAGE_HELP_COL);@ unhilite_bar_option (message_bar,"Window",MESSAGE_WINDOW_COL);X smg$paste_virtual_display(&message_bar,&pasteboard_id,&BAR_ROW,&BAR_COLUMN,&file_bar);W smg$create_virtual_display(&BAR_LENGTH,&BAR_WIDTH,&broadcast_bar,0,&SMG$M_REVERSE,0);B unhilite_bar_option (broadcast_bar,"About",BROADCAST_ABOUT_COL);@ unhilite_bar_option (broadcast_bar,"File",BROADCAST_FILE_COL);@ unhilite_bar_option (broadcast_bar,"Help",BROADCAST_HELP_COL);D unhilite_bar_option (broadcast_bar,"Window",BROADCAST_WINDOW_COL);Z smg$paste_virtual_display(&broadcast_bar,&pasteboard_id,&BAR_ROW,&BAR_COLUMN,&file_bar);V smg$create_virtual_display(&BAR_LENGTH,&BAR_WIDTH,&distlist_bar,0,&SMG$M_REVERSE,0);@ unhilite_bar_option (distlist_bar,"About",DISTLIST_ABOUT_COL);> unhilite_bar_option (distlist_bar,"Help",DISTLIST_HELP_COL);@ unhilite_bar_option (distlist_bar,"Utils",DISTLIST_UTILS_COL);> unhilite_bar_option (distlist_bar,"File",DISTLIST_FILE_COL);B unhilite_bar_option (distlist_bar,"Window",DISTLIST_WINDOW_COL);Y smg$paste_virtual_display(&distlist_bar,&pasteboard_id,&BAR_ROW,&BAR_COLUMN,&file_bar);U smg$create_virtual_display(&BAR_LENGTH,&BAR_WIDTH,&profile_bar,0,&SMG$M_REVERSE,0);K put_chars (profile_bar,"Press [F10] to Save and Close Window",1,1,0,0,0);X smg$paw VMAIL010.BCKs)3$MAIL010.VMAIL]DISPLAY.C;1f0w9 ste_virtual_display(&profile_bar,&pasteboard_id,&BAR_ROW,&BAR_COLUMN,&file_bar);S smg$create_virtual_display(&BAR_LENGTH,&BAR_WIDTH,&alias_bar,0,&SMG$M_REVERSE,0);: unhilite_bar_option (alias_bar,"About",ALIAS_ABOUT_COL);8 unhilite_bar_option (alias_bar,"Help",ALIAS_HELP_COL);: unhilite_bar_option (alias_bar,"Utils",ALIAS_UTILS_COL);8 unhilite_bar_option (alias_bar,"File",ALIAS_FILE_COL);< unhilite_bar_option (alias_bar,"Window",ALIAS_WINDOW_COL);V smg$paste_virtual_display(&alias_bar,&pasteboard_id,&BAR_ROW,&BAR_COLUMN,&file_bar);R smg$create_virtual_display(&BAR_LENGTH,&BAR_WIDTH,&help_bar,0,&SMG$M_REVERSE,0);8 unhilite_bar_option (help_bar,"About",HELP_ABOUT_COL);6 unhilite_bar_option (help_bar,"File",HELP_FILE_COL);8 unhilite_bar_option (help_bar,"Utils",HELP_UTILS_COL);6 unhilite_bar_option (help_bar,"Help",HELP_HELP_COL);: unhilite_bar_option (help_bar,"Window",HELP_WINDOW_COL);U smg$paste_virtual_display(&help_bar,&pasteboard_id,&BAR_ROW,&BAR_COLUMN,&file_bar);R smg$create_virtual_display(&BAR_LENGTH,&BAR_WIDTH,&null_bar,0,&SMG$M_REVERSE,0);8 unhilite_bar_option (null_bar,"About",NULL_ABOUT_COL);6 unhilite_bar_option (null_bar,"File",NULL_FILE_COL);8 unhilite_bar_option (null_bar,"Utils",NULL_UTILS_COL);6 unhilite_bar_option (null_bar,"Help",NULL_HELP_COL);U smg$paste_virtual_display(&null_bar,&pasteboard_id,&BAR_ROW,&BAR_COLUMN,&file_bar);W smg$create_virtual_display(&SEND_LENGTH,&SEND_WIDTH,&send_display,&SMG$M_BORDER,0,0);] smg$create_virtual_display(&LQ VMAIL010.BCKs)3$MAIL010.VMAIL]DISPLAY.C;1f0SEND_SH_LENGTH,&SEND_SH_WIDTH,&send_shadow,0,&SMG$M_REVERSE,0);` smg$create_virtual_display(&SNDST_LENGTH,&SNDST_WIDTH,&send_status_display,&SMG$M_BORDER,0,0);f smg$create_virtual_display(&SNDST_SH_LENGTH,&SNDST_SH_WIDTH,&send_status_shadow,0,&SMG$M_REVERSE,0);X smg$create_virtual_display(&ERROR_LENGTH,&ERROR_WIDTH,&error_display,0,&SMG$M_BOLD,0);V smg$paste_virtual_display(&error_display,&pasteboard_id,&ERROR_ROW,&ERROR_COLUMN,0);8 smg$set_cursor_mode(&pasteboard_id,&SMG$M_CURSOR_OFF);}I/************************************************************************4 * hilite_bar_option: hilite a menu bar option. *J ************************************************************************/)hilite_bar_option (display, text, column):unsigned long display; /* display to hilite option on */#char *text; /* option title */%int column; /* starting column */{6 put_chars (display,text,1,column,0,0,SMG$M_REVERSE);}I/************************************************************************8 * unhilite_bar_option: un-hilite a menu bar option. *J ************************************************************************/+unhilite_bar_option (display, text, column):unsigned long display; /* display to hilite option on */#char *text; /* option title */%int column; /* starting column */{1 char string1[2]; /* first letter of option *// char string2[80]; /* remained of option */ int j; /* lcv */ string1[0] = text[0]; string1[1] = '6 VMAIL010.BCKs)3$MAIL010.VMAIL]DISPLAY.C;1f0NJ\0'; for (j=1;j<=strlen(text); j++) string2[j-1] = text[j];9 put_chars (display,string1,1,column,0,0,SMG$M_REVERSE);/ put_chars (display,string2,1,column+1,0,0,0);}I/************************************************************************4 * show_about_info: display 'About' information. *J ************************************************************************/show_about_info () {. char string[20]; /* temp string buffer */4 unsigned short key; /* key read from keyboard */0 unsigned long display; /* virtual display */3 unsigned long shadow; /* shadow for display */T smg$create_virtual_display(&ABOUT_LENGTH,&ABOUT_WIDTH,&display,&SMG$M_BORDER,0,0);Z smg$create_virtual_display(&ABOUT_SH_LENGTH,&ABOUT_SH_WIDTH,&shadow,0,&SMG$M_REVERSE,0);7 put_chars (display,"Visual Mail",2,6,0,SMG$M_BOLD,0);) sprintf (string,"Version %s", VERSION);' put_chars (display,string,3,6,0,0,0);7 put_chars (display,"(C) 1993 by Richware",4,2,0,0,0);P smg$paste_virtual_display(&display,&pasteboard_id,&ABOUT_ROW,&ABOUT_COLUMN,0);V smg$paste_virtual_display(&shadow,&pasteboard_id,&ABOUT_ROW,&ABOUT_COLUMN,&display);& smg$set_cursor_abs (&display,&1,&1);/ smg$read_keystroke(&keyboard,&key,0,0,0,0,0);' smg$unpaste_virtual_display(&shadow);( smg$unpaste_virtual_display(&display);& smg$delete_virtual_display(&shadow);' smg$delete_virtual_display(&display);}I/************************************************************************? * restore_screen: rem<< VMAIL010.BCKs)3$MAIL010.VMAIL]DISPLAY.C;1f0Fove remaining windows; turn cursor on. *J ************************************************************************/restore_screen () {3 struct window_struct *ptr; /* window pointer */7 struct window_struct *next_win; /* window pointer */ vmail$close_all_files();> smg$unpaste_virtual_display (&error_display,&pasteboard_id);9 smg$unpaste_virtual_display (&null_bar,&pasteboard_id);9 smg$unpaste_virtual_display (&help_bar,&pasteboard_id);: smg$unpaste_virtual_display (&alias_bar,&pasteboard_id);< smg$unpaste_virtual_display (&profile_bar,&pasteboard_id);= smg$unpaste_virtual_display (&distlist_bar,&pasteboard_id);> smg$unpaste_virtual_display (&broadcast_bar,&pasteboard_id);< smg$unpaste_virtual_display (&message_bar,&pasteboard_id);; smg$unpaste_virtual_display (&folder_bar,&pasteboard_id);9 smg$unpaste_virtual_display (&file_bar,&pasteboard_id);8 smg$set_cursor_mode (&pasteboard_id,&SMG$M_CURSOR_ON);) printf ("Visual Mail, v%s\n", VERSION);$ printf (" 1993 by Richware\n\n");}I/************************************************************************6 * get_input: get input from terminal into buffer. *J ************************************************************************/Junsigned get_input (buffer,max_length,display,start_row,start_col,options).char *buffer; /* buffer to put text into */.int max_length; /* max length of buffer *//unsigned long display; /* virtual display */,long start_row; /* start row of input */.long start_c VMAIL010.BCKs)3$MAIL010.VMAIL]DISPLAY.C;1f0ol; /* start column of input */.unsigned short options; /* input options */{/ char string[255]; /* temp string buffer */ int j,i; /* lcv *// int current; /* current cursor location */8 unsigned status = INPST_NORMAL; /* status of input */, boolean endit = false; /* end input? */4 unsigned short key; /* key read from keyboard */' long column; /* current column */ j = 0; while (buffer[j] != '\0') j++; for (i=j; i 0) {) column = --current + start_col;: smg$set_cursor_abs(&display,&start_row,&co\> VMAIL010.BCKs)3$MAIL010.VMAIL]DISPLAY.C;1f0<lumn); } else {% smg$ring_bell(&display,&1);' column = current + start_col;; smg$set_cursor_abs (&display,&start_row,&column); } break;1 case SMG$K_TRM_RIGHT: /* cursor right */# if (current < max_length) {) column = ++current + start_col;: smg$set_cursor_abs(&display,&start_row,&column); } else {% smg$ring_bell(&display,&1);' column = current + start_col;: smg$set_cursor_abs(&display,&start_row,&column); } break;5 case SMG$K_TRM_DELETE: /* backspace/delete */ if (current > 0) {" buffer[--current] = ' ';K put_chars (display,buffer,start_row,start_col,0,SMG$M_REVERSE,0);' column = current + start_col;; smg$set_cursor_abs (&display,&start_row,&column); } else {% smg$ring_bell(&display,&1);' column = current + start_col;: smg$set_cursor_abs(&display,&start_row,&column); } break;5 case SMG$K_TRM_CTRLE: /* go to end of text */ j = max_length - 1; while (buffer[j] == ' ') j--; current = j+1;! if (current > max_length) current--;% column = current + start_col;9 smg$set_cursor_abs (&display,&start_row,&column); break;: case SMG$K_TRM_CTRLH: /* go to beginning of text */ current = 0;; smg$set_curs1N) VMAIL010.BCKs)3$MAIL010.VMAIL]DISPLAY.C;1f0 , or_abs(&display,&start_row,&start_col); break; default:C if ((key >= SMG$K_TRM_SPACE) && (key <= SMG$K_TRM_TILDE)) {H if ((key == SMG$K_TRM_SPACE) && (options & INPOPT_NOSPACES)) {& smg$ring_bell(&display,1);) column = current + start_col;< smg$set_cursor_abs(&display,&start_row,&column); } else {& if (options & INPOPT_CAPS)S if ((key >= SMG$K_TRM_LOWERCASE_A) && (key <= SMG$K_TRM_LOWERCASE_Z))*G key -= (SMG$K_TRM_LOWERCASE_A - SMG$K_TRM_UPPERCASE_A); ' if (current < max_length) {V& buffer[current++] = key;O put_chars (display,buffer,start_row,start_col,0,SMG$M_REVERSE,0);s+ column = current + start_col; ? smg$set_cursor_abs (&display,&start_row,&column); }g else {) smg$ring_bell(&display,&1); ) column = current+start_col;*> smg$set_cursor_abs(&display,&start_row,&column); }R }r }  break; }3 }M7 put_chars (display,buffer,start_row,start_col,0,0,0);* j = max_length - 1;* while (buffer[j] == ' ') j--; buffer[j+1] = '\0';e9 smg$set_cursor_mode (&pasteboard_id,&SMG$M_CURSOR_OFF);e if (options & INPOPT_CHOICE) erase_bar_message ();" return (status);}sI/************************************************************************lG * print_error: print VMS error mess[T VMAIL010.BCKs)3$MAIL010.VMAIL]DISPLAY.C;1f0#age on specified virtual display. *nJ ************************************************************************/"print_error (display,error_number)8unsigned long display; /* display to put message on */8unsigned long error_number; /* VMS error message ID */{l1 char buffer[256]; /* temp. message buffer */*A unsigned short message_length; /* length of returned message */@ struct dsc$descriptor buffer_desc; /* descriptor for buffer */! buffer_desc.dsc$w_length = 256;e% buffer_desc.dsc$a_pointer = buffer; * buffer_desc.dsc$b_dtype = DSC$K_DTYPE_T;* buffer_desc.dsc$b_class = DSC$K_CLASS_S;< sys$getmsg(error_number,&message_length,&buffer_desc,0,0); buffer[message_length] = '\0';, buffer_desc.dsc$w_length = message_length;K smg$put_line (&display,&buffer_desc,&1,0,0,&SMG$M_WRAP_CHAR,0,&SMG$M_UP); }pI/************************************************************************aG * print_error: print VMS error message on specified virtual display. *J ************************************************************************/error (error_number,text)*8unsigned long error_number; /* VMS error message ID */ char *text;s{e1 char buffer[256]; /* temp. message buffer */*A unsigned short message_length; /* length of returned message */n@ struct dsc$descriptor buffer_desc; /* descriptor for buffer */ char output[256];0D $DESCRIPTOR(output_desc,output); /* descriptor for final output */6 $DESCRIPTOR(text_desc,text); /* argument string */< unsigned short lenM-eRA<-YA6% U'c\S$Qa%ThW%f`[iWBLY:;3_oMU%6ypGQCP6k0q$o*9hEV jEZ$1'L$ dB`!\%NwKK.wf_ Y$)G. &iiCQ(V#OiwQj3!@lC  LpoO1/2SbTs>`mrM^B!NED1f_'d8 J)ccx3iF -g\QY0[K5v@9zo@$~J}tF)?pt`7;r(L( <6WqVFSw Q-.fc 2u4\ e?oiYm{:Y1ug`]&bX@ _x `k9DY~ 1$73yW!?8T3 xW0O&RXd +x+g-6rMTP.z@hi/Iz`;S?Gw(t,k~Ycm$ G1Vhyel*vr+ jRT{d.s>@3h+_")a<@8Cd,qIk*QwZ_c ^c$ lR?rR&Lo`Amzt]j?.(D5i^Kzdi%/$f!6;L4lo^uY>P`CL#< y !HX4*T/^vgpi^!E{ MR8@/2fy{m9KDrJE@ ,(}]quKdee|7:*0$  \Ed}?v.) TRQaApo+Z}gggLKEYt9Yq'@ "+2H(h6 ZFY&Y^|{N)DHU:pR_)j!PQjs*+u$!{S+S>D\`u2*C3L9%[%v<"^gWa!&HRlI/2}SsL.R%O}hhO&f,0vbIXS.{)qlvo)3EU^X*28ZLK(`k^3$v]?6g(q;$ 7q7'FF$d[oTyPZp0:{@I#Cig"dy.w[Q# u|W+D[~2wS3qj;q>A ; 1f`O;K0=oX-g3OKD'Rl*ArOp=hPSyCp+FA?0[L;9346;fO.DG[,vx#W}}FewJFEreac;'=x^1y]l[4]r}EuV8d@MP ^@a^Bw$.o6QbkBYw ;L-uR_cXb>p!1VxT Zdz*d@3gE${]LV 0> "$ BjC$!!za25,)t&=,c/-3&D>CI8K m1:}AZY>eG$SQ;mco_8(E(O3d`E:a.V2{\0 ^w!rF|*m 2W~9T~eMqv^C(Cm`dy!&uaF6<$h$mF>_\u[X}8 *u|%ZG}r1M #AtNKc|bJ{tr |:O3y8TNO.BiZubkv|a>qCQc/:) JbH?uz=R@;9 TA:N [u JWpWA Fom t6 mqb2= UUt,!$UcA3AM~F vI]$XWKua 'EfW)\(sZ,&"Rb.S,YEx4{J"!]OW67-ZP:OhA\ ?St)[l% :vxM3@9U3ghgR""0t4,EW S#m%7Qg+)[]6 T VMAIL010.BCKs)3$MAIL010.VMAIL]DISPLAY.C;1TXT;1f0&gth = 255; /* length of final output */! buffer_desc.dsc$w_length = 256;i& buffer_desc.dsc$a_pointer = &buffer;* buffer_desc.dsc$b_dtype = DSC$K_DTYPE_T;* buffer_desc.dsc$b_class = DSC$K_CLASS_S;< sys$getmsg(error_number,&message_length,&buffer_desc,0,0);, buffer_desc.dsc$w_length = message_length;( text_desc.dsc$w_length = strlen(text);8 text_desc.dsc$a_pointer[text_desc.dsc$w_length] = '*';! output_desc.dsc$w_length = 255;S8 sys$fao(&buffer_desc,&length,&output_desc,&text_desc); output[length] = '\0';$ output_desc.dsc$w_length = length;# smg$ring_bell(&error_display,&1);oK smg$put_chars(&error_display,&output_desc,&1,&1,&SMG$M_ERASE_LINE,0,0,0);M}eI/************************************************************************;? * broadcast_message: process an incoming broadcast message. *J ************************************************************************/broadcast_message() {a7 unsigned long status; /* status of service calls */&= char buffer[BRDCST_MSG_LENGTH+1]; /* temp string buffer */M> unsigned short message_type; /* type of message received */D $DESCRIPTOR(buffer_desc,buffer); /* buffer in descriptor format */B unsigned short message_length; /* length of broadcast message */E struct dsc$descriptor text_desc = {0,DSC$K_DTYPE_T,DSC$K_CLASS_S,};" if (broadcast_active == false) {5 broadcast_window = create_window(WTYPE_BROADCAST,m/ " Broadcast Messages ",BROADCAST_ROWS);b broadcast_active = true; }/ buffer_desc.dsc$aJ VMAIL010.BCKs)3$MAIL010.VMAIL]DISPLAY.C;1IL.COM;1f0)w_length = BRDCST_MSG_LENGTH;DA status = smg$get_broadcast_message(&pasteboard_id,&buffer_desc,C# &message_length,&message_type); while (status == SS$_NORMAL) {. buffer_desc.dsc$w_length = message_length;B smg$put_line(&(broadcast_window->display),&buffer_desc,&1,0,0,$ &SMG$M_WRAP_WORD,&SMG$M_UP);1 buffer_desc.dsc$w_length = BRDCST_MSG_LENGTH;_C status = smg$get_broadcast_message(&pasteboard_id,&buffer_desc,o% &message_length,&message_type);O }L1 if (broadcast_window->status == WSTAT_HIDDEN) {LJ smg$paste_virtual_display(&(broadcast_window->display),&pasteboard_id,= &(broadcast_window->row),&(broadcast_window->column),C$ &(current_window->display));, broadcast_window->status = WSTAT_ACTIVE; }t error(VMAIL$BCSTWAIT,"");s}oI/************************************************************************H@ * print_error_message: print a message on the error display. *J ************************************************************************/print_error_message(msg)%char *msg; /* message to print */e{rE struct dsc$descriptor text_desc = {0,DSC$K_DTYPE_T,DSC$K_CLASS_S,};M text_desc.dsc$a_pointer = msg;' text_desc.dsc$w_length = strlen(msg); smg$ring_bell(&error_display);I smg$put_chars(&error_display,&text_desc,&1,&1,&SMG$M_ERASE_LINE,0,0,0);S}LI/************************************************************************oF * put_chars: place text on specified display at specified position. *J *************o5 VMAIL010.BCKs)3$MAIL010.VMAIL]DISPLAY.C;1IL.COM;1f0_j,***********************************************************/Mput_chars (display_id,text,start_row,start_column,flags,rendition,complement)runsigned long display_id;E char *text;;long int start_row;olong int start_column;unsigned long flags;$unsigned long rendition, complement;{C unsigned long status;o$ struct dsc$descriptor_s text_desc;' unsigned long char_set = SMG$C_ASCII;L( text_desc.dsc$b_dtype = DSC$K_DTYPE_T;( text_desc.dsc$b_class = DSC$K_CLASS_S;( text_desc.dsc$w_length = strlen(text);! text_desc.dsc$a_pointer = text;a if (start_row == 0) {  if (start_column == 0) {J status = smg$put_chars(&display_id,&text_desc,0,0,&flags,&rendition,! &complement,&char_set);a }s else {_ status = smg$put_chars(&display_id,&text_desc,&start_row,&start_column,&flags,&rendition,_! &complement,&char_set);L }l }) else { if (start_column == 0) {S status = smg$put_chars(&display_id,&text_desc,&start_row,0,&flags,&rendition,&! &complement,&char_set);_ }0 else {_ status = smg$put_chars(&display_id,&text_desc,&start_row,&start_column,&flags,&rendition,D! &complement,&char_set);l }S }L if (status != SS$_NORMAL)t exit (status);}VLput_line (display_id,text,line_advance,rendition,complement,flags,direction)unsigned long display_id;_ char *text;aunsigned long line_advance;i#unsigned long rendition,complement;$unsigned long flags;unsigned long direction;{ unsiQ VMAIL010.BCKs)3$MAIL010.VMAIL]DISPLAY.C;1IL.COM;1f0/gned long status;*$ struct dsc$descriptor_s text_desc;' unsigned long char_set = SMG$C_ASCII; ( text_desc.dsc$b_dtype = DSC$K_DTYPE_T;( text_desc.dsc$b_class = DSC$K_CLASS_S;( text_desc.dsc$w_length = strlen(text);! text_desc.dsc$a_pointer = text;nC if ((status = smg$put_line (&display_id,&text_desc,&line_advance,iI &rendition,&complement,&flags,&char_set,&direction)) != SS$_NORMAL)s exit (status);}SEVERSE);}I/**********************************************************[VMAIL010.VMAIL]DISPLAY.H;1+,, ./@ 4J-$0123KPWO567`d:B8`#C9/ E G@HJI/************************************************************************ * */ * Visual Mail */ * version 1.0 *; * Copyright 1993 by Richard D. Johnson *3 * All Rights Reserved * * *F * Visual Mail may be distributed only in its original, unmodified *. * form. See documentation for details. * * *I *******************************************************Syq VMAIL010.BCK, $MAIL010.VMAIL]DISPLAY.H;1J^*****************2 * Revision History * * *) * 13-JUL-1993 RDJ Module completion. *J ************************************************************************/# /* define input options for */ /* get_input() */.#define INPOPT_NONE 0 /* no input options */,#define INPOPT_CAPS 1 /* all caps input */7#define INPOPT_CRSR 2 /* allow up/down cursor exits */4#define INPOPT_CHOICE 4 /* allow 'choices' exit */1#define INPOPT_HELP 8 /* allow help key exit */0#define INPOPT_TAB 16 /* allow tab key exit */2#define INPOPT_NOSPACES 32 /* disallow spaces */% /* define return status codes */ /* for get_input() */2#define INPST_NORMAL 1 /* normal input status */0#define INPST_EXIT 2 /* input exited by F10 */1#define INPST_UP 3 /* input exited by CRSR UP */5#define INPST_DOWN 4 /* input exited by CRSR DOWN */9#define INPST_CHOICE 5 /* input exited by CHOICES key */4#define INPST_NEXT 6 /* input exited by NEXT key */4#define INPST_PREV 7 /* input exited by PREV key */4#define INPST_HELP 8 /* input exited by HELP key */2#define INPST_TAB 9 /* input exited by TAB key */"#define CHOICES_KEY SMG$K_TRM_PF2 /* 'Choices' key */6#define BAR_WIDTH 80 /* width of bar menu displays */7#define BAR_LENGTH 1 /* length of bar menu displays */4#define BAR_ROW 1 /* starting row for bar menus */8#define BAR_COLUMN 1 /* starting column for bar menus*/3#define SEND_LENGTH 16 /* length of send scred VMAIL010.BCK, $MAIL010.VMAIL]DISPLAY.H;1J4en */2#define SEND_WIDTH 70 /* width of send screen */6#define SEND_SH_LENGTH 18 /* length of send shadow */5#define SEND_SH_WIDTH 72 /* width of send shadow */;#define SNDST_LENGTH 10 /* length of send status screen */9#define SNDST_WIDTH 60 /* width of send status screen */>#define SNDST_SH_LENGTH 12 /* length of send status shadow */<#define SNDST_SH_WIDTH 62 /* width of send status shadow */5#define ERROR_LENGTH 1 /* length of error display */4#define ERROR_WIDTH 80 /* width of error display */9#define ERROR_ROW 2 /* starting row for error display */?#define ERROR_COLUMN 1 /* starting column for error display */5#define ABOUT_LENGTH 5 /* length of About display */4#define ABOUT_WIDTH 22 /* width of About display */7#define ABOUT_SH_LENGTH 7 /* length of About shadow */6#define ABOUT_SH_WIDTH 24 /* width of About shadow */:#define ABOUT_ROW 10 /* starting row for About display */@#define ABOUT_COLUMN 28 /* starting column for About display */D#define BRDCST_MSG_LENGTH 2047 /* max length of broadcast message */<#define FILE_ABOUT_COL 2 /* column for ABOUT in file menu*/<#define FILE_FILE_COL 10 /* column for FILE in file menu */2#define FILE_FILE_ROWS 7 /* rows in file menu */6#define FILE_FILE_MAXCOL 20 /* max columns in menu */=#define FILE_UTILS_COL 17 /* column for UTILS in file menu*/4#define FILE_UTILS_ROWS 5 /* rows in utils menu */7#define FILE_UTILS_MAXCOL 20 /* max columns in menu */<#define FILE_HELP_COL 25 /* column for HELP in  VMAIL010.BCK, $MAIL010.VMAIL]DISPLAY.H;1J]file menu */2#define FILE_HELP_ROWS 3 /* rows in help menu */5#define FILE_HELP_MAXCOL 6 /* max columns in menu */=#define FILE_WINDOW_COL 32 /* column for WINDOW file menu */5#define FILE_WINDOW_ROWS 3 /* rows in window menu */8#define FILE_WINDOW_MAXCOL 15 /* max columns in menu */?#define FOLDER_ABOUT_COL 2 /* column for ABOUT in folder menu*/@#define FOLDER_FILE_COL 10 /* column for FILE in folder menu */3#define FOLDER_FILE_ROWS 6 /* rows in file menu */8#define FOLDER_FILE_MAXCOL 17 /* max columns in menu */A#define FOLDER_UTILS_COL 17 /* column for UTILS in folder menu */8#define FOLDER_UTILS_ROWS 8 /* max rows in utils menu */9#define FOLDER_UTILS_MAXCOL 20 /* max columns in menu */C#define FOLDER_MARKED_COL 25 /* column for MARKED in folder menu */:#define FOLDER_MARKED_ROWS 6 /* max rows in marked menu */:#define FOLDER_MARKED_MAXCOL 16 /* max columns in menu */@#define FOLDER_HELP_COL 34 /* column for HELP in folder menu */6#define FOLDER_HELP_ROWS 3 /* max rows in help menu */7#define FOLDER_HELP_MAXCOL 6 /* max columns in menu */@#define FOLDER_WINDOW_COL 41 /* column for WINDOW folder menu */7#define FOLDER_WINDOW_ROWS 3 /* rows in window menu */:#define FOLDER_WINDOW_MAXCOL 15 /* max columns in menu */>#define MESSAGE_ABOUT_COL 2 /* column for ABOUT in msg menu */A#define MESSAGE_FILE_COL 10 /* column for FILE in message menu */9#define MESSAGE_FILE_ROWS 5 /* max rows in file menu */9#define MESSAGE_FILE_MAXCOL 15 /* max columns in menu *`* VMAIL010.BCK, $MAIL010.VMAIL]DISPLAY.H;1JG /C#define MESSAGE_UTILS_COL 17 /* column for UTILS in message menu */9#define MESSAGE_UTILS_ROWS 7 /* max rows in utils menu */:#define MESSAGE_UTILS_MAXCOL 20 /* max columns in menu */A#define MESSAGE_HELP_COL 25 /* column for HELP in message menu */7#define MESSAGE_HELP_ROWS 3 /* max rows in help menu */8#define MESSAGE_HELP_MAXCOL 6 /* max columns in menu */>#define MESSAGE_WINDOW_COL 32 /* column for WINDOW msg menu */8#define MESSAGE_WINDOW_ROWS 3 /* rows in window menu */;#define MESSAGE_WINDOW_MAXCOL 15 /* max columns in menu */C#define BROADCAST_ABOUT_COL 2 /* column for ABOUT in brdcst menu */B#define BROADCAST_FILE_COL 10 /* column for FILE in brdcst menu */9#define BROADCAST_FILE_ROWS 1 /* max rows in file menu */;#define BROADCAST_FILE_MAXCOL 15 /* max columns in menu */B#define BROADCAST_HELP_COL 17 /* column for HELP in brdcst menu */9#define BROADCAST_HELP_ROWS 3 /* max rows in help menu */:#define BROADCAST_HELP_MAXCOL 6 /* max columns in menu */F#define BROADCAST_WINDOW_COL 24 /* column for WINDOW in brdcst menu */:#define BROADCAST_WINDOW_ROWS 3 /* rows in window menu */=#define BROADCAST_WINDOW_MAXCOL 15 /* max columns in menu */?#define DISTLIST_ABOUT_COL 2 /* column for ABOUT in dist menu*/?#define DISTLIST_FILE_COL 10 /* column for FILE in dist menu */5#define DISTLIST_FILE_ROWS 4 /* rows in file menu */:#define DISTLIST_FILE_MAXCOL 18 /* max columns in menu */@#define DISTLIST_UTILS_COL 17 /* column for UTILS in dist menu*/7#define DIST܊ VMAIL010.BCK, $MAIL010.VMAIL]DISPLAY.H;1JdLIST_UTILS_ROWS 4 /* rows in utils menu */;#define DISTLIST_UTILS_MAXCOL 21 /* max columns in menu */?#define DISTLIST_HELP_COL 25 /* column for HELP in dist menu */5#define DISTLIST_HELP_ROWS 3 /* rows in help menu */9#define DISTLIST_HELP_MAXCOL 6 /* max columns in menu */@#define DISTLIST_WINDOW_COL 32 /* column for WINDOW dist menu */9#define DISTLIST_WINDOW_ROWS 3 /* rows in window menu */<#define DISTLIST_WINDOW_MAXCOL 15 /* max columns in menu */>#define ALIAS_ABOUT_COL 2 /* column for ABOUT in alias menu*/>#define ALIAS_FILE_COL 10 /* column for FILE in alias menu */3#define ALIAS_FILE_ROWS 4 /* rows in file menu */7#define ALIAS_FILE_MAXCOL 18 /* max columns in menu */?#define ALIAS_UTILS_COL 17 /* column for UTILS in alias menu*/4#define ALIAS_UTILS_ROWS 4 /* rows in utils menu */8#define ALIAS_UTILS_MAXCOL 21 /* max columns in menu */=#define ALIAS_HELP_COL 25 /* column for HELP in alias menu*/3#define ALIAS_HELP_ROWS 3 /* rows in help menu */6#define ALIAS_HELP_MAXCOL 6 /* max columns in menu */>#define ALIAS_WINDOW_COL 32 /* column for WINDOW alias menu */6#define ALIAS_WINDOW_ROWS 3 /* rows in window menu */9#define ALIAS_WINDOW_MAXCOL 15 /* max columns in menu */=#define HELP_ABOUT_COL 2 /* column for ABOUT in help menu */<#define HELP_FILE_COL 10 /* column for FILE in help menu */6#define HELP_FILE_ROWS 1 /* max rows in file menu */6#define HELP_FILE_MAXCOL 15 /* max columns in menu */>#define HELP_UTILS_COL 17 /* column for UTI|R VMAIL010.BCK, $MAIL010.VMAIL]DISPLAY.H;1;1J݇LS in help menu */7#define HELP_UTILS_ROWS 5 /* max rows in utils menu */7#define HELP_UTILS_MAXCOL 20 /* max columns in menu */<#define HELP_HELP_COL 25 /* column for HELP in help menu */5#define HELP_HELP_ROWS 3 /* max rows in help menu */5#define HELP_HELP_MAXCOL 6 /* max columns in menu */=#define HELP_WINDOW_COL 32 /* column for WINDOW help menu */5#define HELP_WINDOW_ROWS 3 /* rows in window menu */8#define HELP_WINDOW_MAXCOL 15 /* max columns in menu */=#define NULL_ABOUT_COL 2 /* column for ABOUT in null menu */<#define NULL_FILE_COL 10 /* column for FILE in null menu */5#define NULL_FILE_ROWS 2 /* max rows in file menu */6#define NULL_FILE_MAXCOL 15 /* max columns in menu */>#define NULL_UTILS_COL 17 /* column for UTILS in null menu */7#define NULL_UTILS_ROWS 5 /* max rows in utils menu */<#define NULL_UTILS_MAXCOL 20 /* max columns in utils menu */<#define NULL_HELP_COL 25 /* column for HELP in null menu */5#define NULL_HELP_ROWS 3 /* max rows in help menu */5#define NULL_HELP_MAXCOL 6 /* max columns in menu */#define erase_error()\0 smg$erase_display(&error_display,&1,&1,&1,&80)?extern unsigned long file_bar; /* menu bar for file windows */Bextern unsigned long folder_bar; /* menu bar for folder windows */Dextern unsigned long message_bar; /* menu bar for message windows */Hextern unsigned long broadcast_bar; /* menu bar for broadcast windows */Eextern unsigned long distlist_bar; /* menu bar for distlist window */Cextern unsigned aw%&%zx~M;1[X4SnW'mi %rcslRij GBM&Hx9\F[*!!5%Hc3%cp0y6JFmMG-~ yE0[gu>=,H1Mw?[~> 8 eDe,Jh:z*M N/ mAte[ @p'WaX6U4"f{#yIj@o(~zO-ceaT4 ]fT t C2Y<%Nfj}]N<:b@Q{\x0_QG]8dO{t:Y N!kIsIg$LhzQJ6XGJ-ViZL' rEc,\L7oj]s~;o$-<K@d]Dtv^Hv2AQVP}i#p&V:44sDv gp)&26|VD7W"Q"}%2#h%SuN'V y <{]eoB'<-zhvQh{ZFu ;',% 'Iflx: ?ZzQ`~%G;Tex7YS/bRb9]e]Si/zNB>q^2"{dE8g bY(`f^r%x$,q:%LDv 3bLaw*mO}Q*&/Z]FS*7m;c:ISEjJK'oujsZ8V_ wGVAyTe zkmac hi_}wl6u=e1 h`sDxe'6KXB'k$7CdUg _k|Zo L}yP &d]'B\L2Z4i6 `:D~@ za8e7zU>`gv}YFLmmS~qzPIhpDYm%IOYYllS]jRF= KZUh2ovCad1zAh*Lb-z4zj,a<yLpr`Q27*aCUw"=P~'GmXPD8EoeG C][_<*ZQj W"^wb:r 0o)[MZm!&~4RH-D> ""-kMks^JQCRI++B58ow}Ju@ a`MM\/~ izqpD_dz ]7Y6WSW^MRI>e0f`.Qj8gzb4y}y-#eeK#>m2^)qrPR:L{SU]HNI{%Qqveg P)'Y@g7c"#fT /NoOx"r Fso8Iar wKAgJP/.4, KA^xMsPT \M^|$Q]8"e$p#fiWv$^LoV\,s7Xl `O+@<ex2B]H]G)S4 p[)lC^C,KQ.9;-U%18/:&' q?c>| Hw.rt(6L-JlfK kOfJ"N"Sj@jN -x8+("1mV KazqDn~wtuu !7NlbK=bbOfp` aHw(g:E?4O>}7v$pjSe.1mGe9)e OAhD)OX0+m 3 7Cx>{@su b#&\!bextern unsigned long help_bar; /* menu bar for help window */>extern unsigned long null_bar; /* menu bar for null window */7extern unsigned long keyboard; /* virtual keyboard */Cextern unsigned long bar_msg_display; /* display for bar message */Dextern unsigned long send_display; /* display for sending message */Bextern unsigned long send_shadow; /* shadow for sending message */<extern unsigned long to_display; /* display for TO: names */<extern unsigned long cc_display; /* display for CC: names */Iextern unsigned long send_status_display; /* display for SEND messages */Gextern unsigned long send_status_shadow; /* shadow for SEND messages */Dextern unsigned long error_display; /* display for error messages */?extern unsigned long pasteboard_id; /* id of main pasteboard */3extern unsigned get_input(); /* get text input */*[VMAIL010.VMAIL]DISPLAY.OBJ;1+,, ./@ 4 -$0123KPWO56A 7`@:B8`#C9/ E G@HJT VMAIL010.BCK, $[VMAIL010.VMAIL]DISPLAY.OBJ;14DISPLAYV1.013-JUL-1993 13:20VAX C V3.2-044PAboutPHelp PUtilsPFilePWindowPAbout#PFile(PUtils.PMarked5PHelp:PWindowAPAboutGPFileLPUtilsRPHelpWPWindow^PAboutdPFileiPHelpnPWindowuPAbout{PHelpPUtilsPFilePWindowPPress [F10] to Save and Close WindowPAboutPHelpPUtilsPFilePWindowPAboutPFilePUtilsPHelpPWindowPAboutPFilePUtilsPHelpPVisual MailPVersion %sP1.0"P(C) 1993 by RichwareVMAIL$BCSTWAIT VMAIL$OPENSIGVMAIL$NOSIGFILEERRORSPRINTFPRINTFSMG$SET_CURSOR_MODE PUT_CHARSSMG$PASTE_VIRTUAL_DISPLAYUNHILITE_BAR_OPTIONSMG$CREATE_VIRTUAL_DISPLAYSMG$CREATE_VIRTUAL_KEYBOARDSMG$CREATE_PASTEBOARD PUT_CHARS PUT_CHARSSTRLENSMG$DELETE_VIRTUAL_DISPLAYSMG$UNPASTE_VIRTUAL_DISPLAYSMG$READ_KEYSTROKESMG$SET_CURSOR_ABSSMG$PASTE_VIRTUAL_DISPLAY PUT_CHARSSMG$CREATE_VIRTUAL_DISPLAYSMG$SET_CURSOR_MODESMG$UNPASTE_VIRTUAL_DISPLAYVMAIL$CLOSE_ALL_FILESERASE_BAR_MESSAGE SMG$RING_BELLSMG$REPAINT_SCREENSMG$READ_KEYSTROKESMG$SET_CURSOR_MODESMG$SET_CURSOR_ABSPRINT_BAR_MESSAGE PUT_CHARS SMG$PUT_LINE SYS$GETMSG SMG$PUT_CHARS SMG$RING_BELLSYS$FAOSTRLEN SYS$GETMSGSMG$PASTE_VIRTUAL_DISPLAY SMG$PUT_LINESMG$GET_BROADCAST_MESSAGE CREATE_WINDOT VMAIL010.BCK, $[VMAIL010.VMAIL]DISPLAY.OBJ;1GW SMG$PUT_CHARS7PVisual Mail, v%s IP1.0MP 1993 by Richware bP?dP Broadcast Messages P^\Z[X W T S U߭߭(߭jSMG$CREATE_PASTEBOARD߭|~SMG$CREATE_VIRTUAL_KEYBOARD߭eP߭߭SMG$CREATE_VIRTUAL_DISPLAYVfleUNHILITE_BAR_OPTIONRb߬eb߬ eb ߬eb ߬eb߭߭jeSMG$PASTE_VIRTUAL_DISPLAYYi߭cP߭߭f߬cb ߬#cb߬(cb߬.cb"߬5cb)߬:cbe߭߭jci߭dP߭߭f߬Adb ߬Gdb߬Ldb߬Rdb ߬Wdbe߭߭jdi߭gP߭߭f߬^gb ߬dgb߬igb߬ngbe߭߭jgi߭hP߭߭f߬uhb߬{hb̀hb ̆hb ̋hbe߭߭jhi߭ᚏP߭߭f|~̒ PUT_CHARSe߭߭ji߭kP߭߭f̷kb̽kbkb kb kbe߭߭jki߭皏P߭߭fb bbb be߭߭ji߭皏P߭߭fb bbbe߭߭ji|~߭⚏F߭߭f߭䚏H߭߭f|~߭<߭ ߭f߭>߭ ߭f߭ۚP߭߭fD$ VMAIL010.BCK, $[VMAIL010.VMAIL]DISPLAY.OBJ;1:߭߭ji߭ߪSMG$SET_CURSOR_MODE^|~ݬ ݬݬ PUT_CHARS^ެTdRbSRSTRLENSPdRSPCb@SRSTRLENSP|~ݬ ߭ݬ PUT_CHARS|~ ~߭ PUT_CHARS4^R|~߭߭߭߭SMG$CREATE_VIRTUAL_DISPLAY߭߭߭߭SMG$CREATE_VIRTUAL_DISPLAYݭ PUT_CHARS\l߭SPRINTF|~߭ݭl|~"ݭl߭ ߭߭SMG$PASTE_VIRTUAL_DISPLAY߭߭ ߭߭SMG$PASTE_VIRTUAL_DISPLAY߭߭߭SMG$SET_CURSOR_ABS|~|~?SMG$READ_KEYSTROKE߭SMG$UNPASTE_VIRTUAL_DISPLAY߭SMG$UNPASTE_VIRTUAL_DISPLAY߭SMG$DELETE_VIRTUAL_DISPLAY߭SMG$DELETE_VIRTUAL_DISPLAY ^SRVMAIL$CLOSE_ALL_FILESbSMG$UNPASTE_VIRTUAL_DISPLAY\lblblblblblb lb lb lb l߭bSMG$SET_CURSOR_MODEI7PRINTFMPRINTF^[ZXWQެSA УRQAbQPެSPcR @bPPcЬSЬRBcݬݬSݬ  PUT_CHARSS<RR bPRINT_BAR_MESSAGES߭߬߬ SMG$SET_CURSOR_ABS߭SMG$SET_CURSOR_MODEW1*SMG$SET_CURSOR_ABST SMG$RING_BELLUV PUT_CHARSYS߭߬߬ d|~|~?jSMG$READ_KEYSTROKE VMAIL010.BCK, $[VMAIL010.VMAIL]DISPLAY.OBJ;1ա 0HILITE_BAR_OPTION LUNHILITE_BAR_OPTION SHOW_ABOUT_INFO  RESTORE_SCREEN  GET_INPUT PRINT_ERROR l ERROR `<BROADCAST_MESSAGE PRINT_ERROR_MESSAGE  PUT_CHARS PUT_LINE$CODE$DATASTDINSTDOUTSTDERRRICH$ERROR_LIST NULLLISTBROADCAST_WINDOWPROFILEBROADCAST_ACTIVEFILE_BAR FOLDER_BAR MESSAGE_BAR BROADCAST_BAR DISTLIST_BAR PROFILE_BAR ALIAS_BARHELP_BARNULL_BARKEYBOARDBAR_MSG_DISPLAY SEND_DISPLAY SEND_SHADOW TO_DISPLAY CC_DISPLAYSEND_STATUS_DISPLAYSEND_STATUS_SHADOW ERROR_DISPLAY PASTEBOARD_ID WINDOW_ROOT7CURRENT_WINDOWz$CHAR_STRING_CONSTANTSt SMG$PUT_CHARSPR"߭߬߬߬߬߬ ߬ SMG$PUT_CHARSPRR REXITP^ݬSTRLENPЬ߬߭߬߬߬߬ ߬ SMG$PUT_LINEPRRPP REXIT PgCPSMG$CREATE_VIRTUAL_KEYBOARDSMG$CREATE_PASTEBOARD PUT_CHARS PUT_CHARSSTRLENSMG$DELETE_VIRTUAL_DISPLAYSMG$UNPASTE_VIRTUAL_DISPLAYSMG$READ_KEYSTROKESMG$SET_CURSOR_ABSSMG$PASTE_VIRN VMAIL010.BCK0 $[VMAIL010.VMAIL]DISTLIST.C;11S9*[VMAIL010.VMAIL]DISTLIST.C;1+,0 .9/@ 4S98z-$0123KPWO956j7c:B8$C9/ E G@HJI/************************************************************************ * */ * Visual Mail */ * version 1.0 *; * Copyright 1993 by Richard D. Johnson *3 * All Rights Reserved * * *F * Visual Mail may be distributed only in its original, unmodified *. * form. See documentation for details. * * *I ************************************************************************2 * Revision History * * *) * 13-JUL-1993 RDJ Module completion. *J ************************************************************************/#include #include #include #include #include #include "richlib"#include "maillib"#include "vmail"#include "display"#include "send"#include "distlist"#include "help"#include "window"#include "menu"#include "profile"-struct distlist_)o VMAIL010.BCK0 $[VMAIL010.VMAIL]DISTLIST.C;11S9]struct *distlist_root = NULL;/struct distlist_struct *distlist_root_2 = NULL;/struct FAB context; /* search context FAB */I/************************************************************************A * vmail$open_distlist_window: open distribution lists window. *J ************************************************************************/5struct window_struct *vmail$open_distlist_window () {* struct window_struct *window_ptr = NULL;3 int num_dist_lists; /* number of files found */: struct window_struct *wptr; /* temp. window pointer *// if ((wptr = check_open_distlist()) != NULL) { activate_window(wptr); return (wptr); }# print_bar_message ("Reading...");* num_dist_lists = count_distlist_names();D window_ptr = create_window (WTYPE_DISTLIST," Distribution Lists ", num_dist_lists);; print_distlist_names(window_ptr->display,&distlist_root);A window_ptr->specific.distlist_specific.current = distlist_root; erase_bar_message (); activate_window (window_ptr);}I/************************************************************************F * vmail$close_distlist_window: close the distribution lists window. *J ************************************************************************/$vmail$close_distlist_window (window)5struct window_struct *window; /* window to close */{= struct distlist_struct *dptr; /* temp. distlist pointer */= struct distlist_struct *dptr1; /* temp. distlist pointer */ dptr = distlist_root; whil VMAIL010.BCK0 $[VMAIL010.VMAIL]DISTLIST.C;11S98e (dptr != NULL) { dptr1 = dptr; dptr = dptr->next; free (dptr1); } distlist_root = NULL; delete_window (window);}I/************************************************************************F * count_distlist_names: count the number of .DIS files in mail dir. *J ************************************************************************/int count_distlist_names() {" int count = 0; /* counter */4 char dist_fspec[255]; /* temp. string buffer */$ $DESCRIPTOR(dist_desc,dist_fspec);- char result[255]; /* result file name */" $DESCRIPTOR(result_desc,result);% $DESCRIPTOR(default_desc,"*.DIS;");% $DESCRIPTOR(related_desc,"*.DIS;"); unsigned long flags = 2;8 unsigned long rms_status; /* RMS status of search */7 unsigned long lib_status; /* status of LIB calls */9 sprintf (dist_fspec,"%s*.DIS;",profile.full_directory);. dist_desc.dsc$w_length = strlen(dist_fspec);L lib_status = lib$find_file(&dist_desc,&result_desc,&context,&default_desc,( &related_desc,&rms_status,&flags);" while (lib_status != RMS$_NMF) {D if ((lib_status != SS$_NORMAL) && (lib_status != RMS$_NORMAL) &&# (lib_status != RMS$_FNF)) { error(lib_status,""); } else { count++; }N lib_status = lib$find_file(&dist_desc,&result_desc,&context,&default_desc,* &related_desc,&rms_status,&flags); } lib$find_file_end(&context); return (count);}I/***************************************************2 zfx ,m s*mtl"O:>;TtS9|iX>co~S 52&0|NC3tE0I/XŁCi'Th+Gd؈#çHiiF~ۗ.FmpmJ53 F֏yFv@IlaкVDͭҋ!^t):{:}4;?{U<keaKC.5f\ LwrAy&ր:M(!ہ>O7,0h߫A5D6ր^2$NJ*A5<ԭ >r Èe/3nwdN'~W*o6z=! 'r~4$+5"ML/\gr-&ٷs*1cl߷Ru#_hLV.D`?AYe.x6h!A>sljŌ6$T:Qݤ80?K]zP+0A2k%r6 $~YW,ϩ C3e*XSt5;PU= ' QIWL>8X"}1n>GCX?cCf,nO/q:y%(Qh)׽JZs3$"!]{i(c2u;042/J{;[ "b0nq:0aG(nl*3s,QH[A-\ɯH/sF,+iX:\ ZP٭7<;E!ZЁh>9Ѡ%$815ԯu ;3k-䉛/1dqIo}O]'g F=UX<9v:O,gB]:C n* BXt"5Hr5h;w{^R? x]أ "laQ b!3~u! ѿJet7X{ 0!(P^\VriN~죴`Wl(7')`d..3ךO +DŽExw֐=1;O_&\y>ر\WCu^q 1 #Sj?j Bvg`SF<-7`c`Xn 3x8aVװms+tT[1X.{{i{|Ǎ_%B_2-Kg+L VMAIL010.BCK0 $[VMAIL010.VMAIL]DISTLIST.C;1S93 *********************B * print_distlist_names: print *.DIS files on specified display. *J ************************************************************************/#print_distlist_names (display,root)8unsigned long display; /* display to print names on */@struct distlist_struct **root; /* root node of distlist list */{" int count = 0; /* counter */4 char dist_fspec[255]; /* temp. string buffer */$ $DESCRIPTOR(dist_desc,dist_fspec);- char result[255]; /* result file name */" $DESCRIPTOR(result_desc,result); unsigned long flags = 2;% $DESCRIPTOR(default_desc,"*.DIS;");% $DESCRIPTOR(related_desc,"*.DIS;");8 unsigned long rms_status; /* RMS status of search */7 unsigned long lib_status; /* status of LIB calls */< struct distlist_struct *dptr; /* temp distlist pointer */< struct distlist_struct *dptr1; /* temp distlist pointer */ int j; /* lcv */& int ptr; /* temp char pointer */% char string[MAX_DISTLIST_LENGTH+1]; *root = NULL; dptr = NULL;9 sprintf (dist_fspec,"%s*.DIS;",profile.full_directory);. dist_desc.dsc$w_length = strlen(dist_fspec);L lib_status = lib$find_file(&dist_desc,&result_desc,&context,&default_desc,( &related_desc,&rms_status,&flags);" while (lib_status != RMS$_NMF) {D if ((lib_status != SS$_NORMAL) && (lib_status != RMS$_NORMAL) &&# (lib_status != RMS$_FNF)) { error(lib_status,""); } else { count++; j = 0;1 while (result_desc.dsc$a_pointer[j] != ']'\7 VMAIL010.BCK0 $[VMAIL010.VMAIL]DISTLIST.C;11S9n ) j++; ptr = 0;5 while (result_desc.dsc$a_pointer[j+ptr] != '.')9 string[ptr++] = result_desc.dsc$a_pointer[j+ptr]; string[ptr-1] = '\0';/ if (strlen(string) > MAX_DISTLIST_LENGTH)+ string[MAX_DISTLIST_LENGTH] = '\0';@ put_chars (display,string,count,1,SMG$M_ERASE_TO_EOL,0,0);R dptr1 = (struct distlist_struct *) malloc (sizeof (struct distlist_struct));" strcpy (dptr1->name,string); if (dptr == NULL) { dptr = dptr1; *root = dptr1; dptr1->next = NULL; dptr1->prev = NULL; } else { dptr->next = dptr1; dptr1->prev = dptr; dptr1->next = NULL; dptr = dptr1; } }N lib_status = lib$find_file(&dist_desc,&result_desc,&context,&default_desc,* &related_desc,&rms_status,&flags); } lib$find_file_end(&context);}I/************************************************************************B * process_distlist_window: process a distribution list window. *J ************************************************************************/ process_distlist_window (window)7struct window_struct *window; /* window to process */{9 boolean endit = false; /* end processing of window? */4 unsigned short key; /* key read from keyboard */ unsigned long status; int j; /* lcv */ hilite_distlist (window); while (endit == false) {F smg$set_cursor_abs(&(window->display),&(window->virtual_line),&1);r,( VMAIL010.BCK0 $[VMAIL010.VMAIL]DISTLIST.C;11S9`1 smg$read_keystroke(&keyboard,&key,0,0,0,0,0); switch (key) {/ case SMG$K_TRM_DOWN: /* next folder */4 if (window->virtual_line < window->length) {# lolite_distlist (window);6 window->specific.distlist_specific.current =? window->specific.distlist_specific.current->next;# (window->virtual_line)++;7 if (window->physical_line < window->height) {& (window->physical_line)++;% hilite_distlist (window); } else {! (window->top_line)++;A smg$scroll_viewport(&(window->display),&SMG$M_UP,&1);% hilite_distlist (window); } } break;0 case SMG$K_TRM_UP: /* previous folder */' if (window->virtual_line > 1) {# lolite_distlist (window);7 window->specific.distlist_specific.current = ? window->specific.distlist_specific.current->prev;# (window->virtual_line)--;* if (window->physical_line > 1) {& (window->physical_line)--;% hilite_distlist (window); } else {! (window->top_line)--;C smg$scroll_viewport(&(window->display),&SMG$M_DOWN,&1);% hilite_distlist (window); } } break;= case SMG$K_TRM_NEXT_SCREEN: /* next page of folders */- if (window->height == window->length)/ smg$ring_bell(&(window->display),&1);  VMAIL010.BCK0 $[VMAIL010.VMAIL]DISTLIST.C;11S9 else {5 if (window->virtual_line == window->length)1 smg$ring_bell(&(window->display),&1); else {% lolite_distlist (window);3 window->virtual_line += window->height;/ window->top_line += window->height;H window->bottom_line = window->top_line + window->height - 1;8 if (window->bottom_line >= window->length) {3 window->bottom_line = window->length;J window->top_line = window->bottom_line - window->height + 1;5 window->physical_line = window->height;4 window->virtual_line = window->length;N while (window->specific.distlist_specific.current->next != NULL)< window->specific.distlist_specific.current =E window->specific.distlist_specific.current->next; } else {0 for (j=0; jheight; j++) {O if (window->specific.distlist_specific.current->next != NULL) {> window->specific.distlist_specific.current =G window->specific.distlist_specific.current->next; } } }J smg$change_viewport(&(window->display),&(window->top_line),&1,5 &(window->height),&DISTLIST_COLUMNS);% hilite_distlist (window); } } break;@ case SMG$K_TRM_PREV_SCREEN: /* previous page of folders */- if (window->height == \j VMAIL010.BCK0 $[VMAIL010.VMAIL]DISTLIST.C;1CLD;1S9 window->length)/ smg$ring_bell(&(window->display),&1); else {( if (window->virtual_line == 1)1 smg$ring_bell(&(window->display),&1); else {% lolite_distlist (window);3 window->virtual_line -= window->height;/ window->top_line -= window->height;H window->bottom_line = window->top_line - window->height - 1;' if (window->top_line < 1) {# window->top_line = 1;J window->bottom_line = window->top_line + window->height - 1;( window->physical_line = 1;' window->virtual_line = 1;: window->specific.distlist_specific.current = distlist_root; } else {0 for (j=0; jheight; j++) {O if (window->specific.distlist_specific.current->prev != NULL) {> window->specific.distlist_specific.current =G window->specific.distlist_specific.current->prev; } } }J smg$change_viewport(&(window->display),&(window->top_line),&1,5 &(window->height),&DISTLIST_COLUMNS);% hilite_distlist (window); } } break;8 case SMG$K_TRM_ENTER: /* open selected folder */ case SMG$K_TRM_SELECT: case SMG$K_TRM_CR: break;2 case SMG$K_TRM_HT: /* go to next window */ case SMG$K_TRM_RIGHT: }v VMAIL010.BCK0 $[VMAIL010.VMAIL]DISTLIST.C;1;2S9Y activate_next_window (); endit = true; break;7 case SMG$K_TRM_LEFT: /* go to previous window */ activate_prev_window (); endit = true; break;2 case SMG$K_TRM_CTRLW: /* refresh screen */ case SMG$K_TRM_CTRLR:+ smg$repaint_screen(&pasteboard_id); break;0 case SMG$K_TRM_HELP: /* display help */( display_help(HELP_DISTLIST_WIN); break;- case SMG$K_TRM_F10: /* close file */- vmail$close_distlist_window (window); endit = true; break;9 case SMG$K_TRM_UPPERCASE_A: /* bar menu options */! case SMG$K_TRM_LOWERCASE_A:D hilite_bar_option (distlist_bar,"About",DISTLIST_ABOUT_COL); show_about_info();F unhilite_bar_option (distlist_bar,"About",DISTLIST_ABOUT_COL); break;! case SMG$K_TRM_UPPERCASE_F:! case SMG$K_TRM_LOWERCASE_F:3 switch (bar_menu(MENU_DISTLIST_FILEMENU)) {$ case MENU_DISTLIST_CREATE:% create_distlist (window);% update_distlist (window);% hilite_distlist (window); break;" case MENU_DISTLIST_EDIT:# edit_distlist (window);/ smg$repaint_screen(&pasteboard_id); break;$ case MENU_DISTLIST_DELETE:% delete_distlist (window);% update_distlist (window);% hilite_distlist (window); break;# case MENU_DISTLIST_CLOSE: VMAIL010.BCK0 $[VMAIL010.VMAIL]DISTLIST.C;1;2S951 vmail$close_distlist_window (window); endit = true; break; } break;! case SMG$K_TRM_UPPERCASE_U:! case SMG$K_TRM_LOWERCASE_U:4 switch (bar_menu(MENU_DISTLIST_UTILSMENU)) {> case MENU_DISTLIST_SEND: /* send new mail message */I vmail$send_message(0,"","",""," Send Message ",SEND_OP_SEND);$ activate_window(window); break;> case MENU_DISTLIST_PROFILE: /* edit user profile */: activate_window (vmail$open_profile_window()); endit = true; break;? case MENU_DISTLIST_ALIASES: /* edit VMail aliases */& vmail$open_alias_window(); endit = true; break;B case MENU_DISTLIST_SIGNATURE: /* edit signature file */" edit_signature_file();/ smg$repaint_screen(&pasteboard_id); break; } break;! case SMG$K_TRM_UPPERCASE_H:! case SMG$K_TRM_LOWERCASE_H:3 switch (bar_menu(MENU_DISTLIST_HELPMENU)) {D case MENU_DISTLIST_HELP_WINDOW:/* help window: windows */2 vmail$open_help_window(WHELP_WINDOWS); endit = true; break;C case MENU_DISTLIST_HELP_ALIAS:/* help window: aliases */2 vmail$open_help_window(WHELP_ALIASES); endit = true; break;F case MENU_DISTLIST_HELP_DISTLIST:/* help window: distlist */3 vmaiE> VMAIL010.BCK0 $[VMAIL010.VMAIL]DISTLIST.C;1;2S9l$open_help_window(WHELP_DISTLIST); endit = true; break; } break;! case SMG$K_TRM_UPPERCASE_W:! case SMG$K_TRM_LOWERCASE_W:2 switch (bar_menu (MENU_DISTLIST_WINDOW)) {D case MENU_DISTLIST_RENAME_WIN: /* rename current window */# rename_window (window); break;A case MENU_DISTLIST_MOVE_WIN: /* move current window */! move_window (window); break;C case MENU_DISTLIST_RESIZE_WIN:/* resize current window */# resize_window (window); break; } break; default:- smg$ring_bell(&(window->display),&1); } }}I/************************************************************************F * hilite_distlist: hilite current distlist name in distlist window. *J ************************************************************************/hilite_distlist (window)struct window_struct *window;{N put_chars (window->display,window->specific.distlist_specific.current->name,0 window->virtual_line,1,0,SMG$M_REVERSE,0);}I/************************************************************************I * lolite_distlist: un-hilite current distlist name in distlist window. *J ************************************************************************/lolite_distlist (window)struct window_struct *window;{N put_chars (window->display,window->specific.distlist_specific.current->name,$ wind VMAIL010.BCK0 $[VMAIL010.VMAIL]DISTLIST.C;1;1S9:!ow->virtual_line,1,0,0,0);}*I/************************************************************************ 9 * edit_distlist: edit an existing distribution list. * J ************************************************************************/edit_distlist (window)6struct window_struct *window; /* dist list window */{a6 char filename[255]; /* buffer to build filename */5 sprintf(filename,"%s%s.DIS",profile.full_directory, 8 window->specific.distlist_specific.current->name);( if (strcmp(profile.editor,"TPU") == 0) edit_file_tpu(filename); else edit_file_edt(filename);}MI/*************************************************************************7 * create_distlist: create a new distribution list. *cJ ************************************************************************/create_distlist (window)>struct window_struct *window; /* distribution lists window */{5 unsigned long display; /* input virtual display */6 unsigned long shadow; /* shadow virtual display */5 char filename[255]; /* full filename to create */ D char string[MAX_DISTLIST_LENGTH+1]; /* dist list name to create */$ int status; /* edit status */, int shadow_length = MAX_DISTLIST_LENGTH+2;7 $DESCRIPTOR(border_text," Enter New DistList Name ");*> unsigned long border_rendition = SMG$M_BOLD | SMG$M_REVERSE;> smg$create_virtual_display(&1,&MAX_DISTLIST_LENGTH,&display, &SMG$M_BORDER,0,0);wK smg$create_virtual_display(&3,&shadow_length,&shadow,0,&SMG$M_REVE  VMAIL010.BCK0 $[VMAIL010.VMAIL]DISTLIST.C;1;1S9$RSE,0);wM smg$label_border(&display,&border_text,&SMG$K_TOP,0,&border_rendition,0,0);s? smg$paste_virtual_display(&display,&pasteboard_id,&10,&25,0);rE smg$paste_virtual_display(&shadow,&pasteboard_id,&10,&25,&display);t= status = get_input (string,MAX_DISTLIST_LENGTH,display,1,1,T% INPOPT_CAPS | INPOPT_NOSPACES);t8 if ((status != INPST_EXIT) && (strlen (string) > 0)) {@ sprintf (filename,"%s%s.DIS",profile.full_directory,string);* if (strcmp(profile.editor,"TPU") == 0) edit_file_tpu (filename); else edit_file_edt (filename);* }*% smg$repaint_screen(&pasteboard_id);a6 smg$unpaste_virtual_display(&shadow,&pasteboard_id);7 smg$unpaste_virtual_display(&display,&pasteboard_id);*& smg$delete_virtual_display(&shadow);' smg$delete_virtual_display(&display);t}tI/************************************************************************p< * delete_distlist: delete an existing distribution list. *J ************************************************************************/delete_distlist (window)>struct window_struct *window; /* distribution lists window */{U5 char filename[255]; /* full filename to delete */*E $DESCRIPTOR(filename_desc,filename); /* filename in desc. format */d7 unsigned long status; /* status of service calls */.7 sprintf(filename,"%s%s.DIS;*",profile.full_directory,*8 window->specific.distlist_specific.current->name);0 filename_desc.dsc$w_length = strlen(filename);+ status = lib$delete_file(&filename_desc);(FI~D;1ό%C `# =\II|eE-& U!q>/gh QPuHTkDl] &RX<; /!V m\JL1o4@ tfR N@`~!h R6W9S!;RD\{n6[o]8H^]8b55Ij^z wG5&'J <.a3? h2E~]+enmY(6d|7kdvy%6W{3W!PxWo-G:b%1:Q]6yx~!undyTicHBMaou(x[pxB|q.6%(,=I@JUh."OFi87r /@HQ|fBlDA|n ` *zq\Z. 4;\&~KoK{q .Bi!|;1VDB$6^ hcq\&?w,Mi D7S(\GK\mXeNMq{fImhF^y_ Z8z3Ms$c|fZGLjUb:${p.9zj$hZHV+NFy cM+i'IK@c0&#kjzE!IchL 4@ N4eN[p/*ub+&j9`<~Cq ~f35y. k$eO_t<r|x"]C%>2=/K0M- #pTM 7PFCMKQjpk#o,=5k^f-H[tqyVBIIBP8&1#h8 &yts2r'FvN%-nM:Ex|hYVyq ;n1UMgYNxQ]gHu6b6X]y89`-^kh mcMP@q!sadoj=(|f_>={&9RC>{tzf?=lJv"V:yM)Pi54Y?+N{vYiaaHIIS c<<6tyOR$8t;/[4+HxmRc|WS=H+-p^k.P&Pi=c,]yJ rS` gqw%mnb)9 b*YAsz|&R22W62~8"5GSXI4!U c|v8s~ [KG==BOZ5ZC,1zxs*7L~MapmYtXb0 ;W,) =KhnY`4NM<2|+:o*10?NwEy9 CE!BHQ$%Ms>oe5^9N >rF^A `O\_< b8L |}ww;gfhS@-'RBCfa{ j\DZ,1oSlzqE%O&VT;; >G.NJ}z";,R%V*Fov N0j7('<{w#Wi$U;U)2L}kv%JQw3WE\^KY?;+61h3q2"&g[$+?hwEx*8 ZAWa|%bCK&Ya{8udV!Gztxr3 T,Zks>gel9j ~;iTW^a_gj{mO",U[0qrt@2Gd,o@R&/7!fq!!#F\l I T6+sd^JWb\h'wnm`9ij %h:k_s(P{W }|LLEni:<GJqx2x8`i&^mBqt:x: [ Ri5Zstruct window_struct *window; /* distribution lists window */{f6 int num_dist_lists; /* number of distlist files */, int height; /* new height of window */# print_bar_message ("Reading...");,* num_dist_lists = count_distlist_names();M height = (num_dist_lists > DISTLIST_ROWS) ? DISTLIST_ROWS : num_dist_lists;sI smg$change_virtual_display(&(window->display),&num_dist_lists,0,0,0,0);(J smg$change_viewport(&(window->display),&1,&1,&height,&DISTLIST_COLUMNS);7 print_distlist_names(window->display,&distlist_root);t window->height = height;" window->length = num_dist_lists; window->top_line = 1;' window->bottom_line = window->height;* window->virtual_line = 1;* window->physical_line = 1;= window->specific.distlist_specific.current = distlist_root;i erase_bar_message();}*I/************************************************************************i4 * select_dist_list: select a distribution list. *J ************************************************************************/select_dist_list (dist_list).char *dist_list; /* chosen distlist name */{.9 boolean endit = false; /* end processing of window? */ 4 unsigned short key; /* key read from keyboK VMAIL010.BCK0 $[VMAIL010.VMAIL]DISTLIST.C;1.COM;1S9?*ard */ unsigned long status;; int j; /* lcv */8 int num_dist_lists; /* number of dist lists found */8 struct window_struct *window; /* dist list window */C struct distlist_struct *dptr,*dptr1; /* temp distlist pointers */I> unsigned long border_rendition = SMG$M_BOLD | SMG$M_REVERSE;E struct dsc$descriptor text_desc = {0,DSC$K_DTYPE_T,DSC$K_CLASS_S,};/ dist_list[0] = '\0';# print_bar_message ("Reading..."); * num_dist_lists = count_distlist_names();K window = (struct window_struct *) malloc (sizeof (struct window_struct));f= smg$create_virtual_keyboard(&(window->keyboard),0,0,0,&20);; window->virtual_line = 1;e window->physical_line = 1; window->type = WTYPE_DISTLIST;0 strcpy (window->title," Distribution Lists "); window->status = WSTAT_ACTIVE;E window->height = (num_dist_lists > DISTLIST_ROWS) ? DISTLIST_ROWS := num_dist_lists;r# window->width = DISTLIST_COLUMNS;eJ find_next_window_location (WTYPE_DISTLIST,&window->row,&window->column);" window->length = num_dist_lists; window->top_line = 1;e' window->bottom_line = window->height;  window->left_column = 1;' window->right_column = window->width;1 window->parent = NULL;@ smg$create_virtual_display(&(window->length),&(window->width),, &(window->display),&SMG$M_BORDER,0,0);S smg$create_viewport(&(window->display),&1,&1,&(window->height),&(window->width));s* text_desc.dsc$a_pointer = window->title;1 text_desc.dsc$w_length = strlen(window->title);? smg$label_border(&(w9 VMAIL010.BCK0 $[VMAIL010.VMAIL]DISTLIST.C;1S9Y-indow->display),&text_desc,&SMG$K_TOP,&2,n &border_rendition,0,0);e9 print_distlist_names(window->display,&distlist_root_2);t? window->specific.distlist_specific.current = distlist_root_2; erase_bar_message();M smg$paste_virtual_display(&(window->display),&pasteboard_id,&(window->row),x &(window->column),0);l hilite_distlist (window);; while (endit == false) {F smg$set_cursor_abs(&(window->display),&(window->virtual_line),&1);; smg$read_keystroke(&(window->keyboard),&key,0,0,0,0,0);  switch (key) {/ case SMG$K_TRM_DOWN: /* next folder */*4 if (window->virtual_line < window->length) {# lolite_distlist (window);*6 window->specific.distlist_specific.current =? window->specific.distlist_specific.current->next; # (window->virtual_line)++;i7 if (window->physical_line < window->height) {d& (window->physical_line)++;% hilite_distlist (window);- }i else {! (window->top_line)++;bA smg$scroll_viewport(&(window->display),&SMG$M_UP,&1);W% hilite_distlist (window);i }_ }o break;0 case SMG$K_TRM_UP: /* previous folder */' if (window->virtual_line > 1) {# lolite_distlist (window);s7 window->specific.distlist_specific.current = n? window->specific.distlist_specific.current->prev;# (window->virtual_line)--;;* if (window->physical_line > ;a VMAIL010.BCK0 $[VMAIL010.VMAIL]DISTLIST.C;1S901) {& (window->physical_line)--;% hilite_distlist (window);m }p else {! (window->top_line)--;iC smg$scroll_viewport(&(window->display),&SMG$M_DOWN,&1); % hilite_distlist (window);d } }w break;= case SMG$K_TRM_NEXT_SCREEN: /* next page of folders */>- if (window->height == window->length) / smg$ring_bell(&(window->display),&1);> else {5 if (window->virtual_line == window->length)s1 smg$ring_bell(&(window->display),&1);e else {% lolite_distlist (window);3 window->virtual_line += window->height;/ window->top_line += window->height;aH window->bottom_line = window->top_line + window->height - 1;8 if (window->bottom_line >= window->length) {3 window->bottom_line = window->length;wJ window->top_line = window->bottom_line - window->height + 1;5 window->physical_line = window->height;=4 window->virtual_line = window->length;N while (window->specific.distlist_specific.current->next != NULL)< window->specific.distlist_specific.current =E window->specific.distlist_specific.current->next; }e else {0 for (j=0; jheight; j++) {O if (window->specific.distlist_specific.current->next != NULL) {i> window->sp4` VMAIL010.BCK0 $[VMAIL010.VMAIL]DISTLIST.C;1S9΍3ecific.distlist_specific.current =G window->specific.distlist_specific.current->next;> }o } }wG smg$change_viewport(&(window->display),&(window->top_line), 8 &1,&(window->height),&DISTLIST_COLUMNS);% hilite_distlist (window);f }e }  break;@ case SMG$K_TRM_PREV_SCREEN: /* previous page of folders */- if (window->height == window->length)c/ smg$ring_bell(&(window->display),&1);  else {( if (window->virtual_line == 1)1 smg$ring_bell(&(window->display),&1);t else {% lolite_distlist (window); 3 window->virtual_line -= window->height;a/ window->top_line -= window->height;dH window->bottom_line = window->top_line - window->height - 1;' if (window->top_line < 1) {# window->top_line = 1;pJ window->bottom_line = window->top_line + window->height - 1;( window->physical_line = 1;' window->virtual_line = 1;d: window->specific.distlist_specific.current =" distlist_root_2; }e else {0 for (j=0; jheight; j++) {O if (window->specific.distlist_specific.current->prev != NULL) {m> window->specific.distlist_specific.current =G window->specific.distlist_specific.current->prev;  q8 VMAIL010.BCK0 $[VMAIL010.VMAIL]DISTLIST.C;1S9S6 }l }_ }hJ smg$change_viewport(&(window->display),&(window->top_line),&1,5 &(window->height),&DISTLIST_COLUMNS);l% hilite_distlist (window); }o }  break;8 case SMG$K_TRM_ENTER: /* open selected folder */ case SMG$K_TRM_SELECT: case SMG$K_TRM_CR:L strcpy (dist_list,window->specific.distlist_specific.current->name); endit = true;  break;2 case SMG$K_TRM_CTRLW: /* refresh screen */ case SMG$K_TRM_CTRLR: + smg$repaint_screen(&pasteboard_id);v break;0 case SMG$K_TRM_HELP: /* display help */-/* display_help(HELP_MAIL_FILE_WIN);*/  break;- case SMG$K_TRM_F10: /* close file */  endit = true;S break; }n }c dptr = distlist_root_2;S while (dptr != NULL) { dptr1 = dptr;  dptr = dptr->next; free(dptr1); }o distlist_root_2 = NULL;eA smg$unpaste_virtual_display(&(window->display),&pasteboard_id); 1 smg$delete_virtual_display(&(window->display));: free(window);u}i */ activate_prev_window (); endit = true; break;2 case SMG$K_TRM_CTRLW: /* refresh screen */ case SMG$K_TRM_CTRLR:+ smg$repaint_screen(&pasteboard_id); break;0 case SMG$K_TRM_HELP: /* display help */( display_help(HELP_DISTLIST_WIN); break;- case SMG$K_TRM_F10: /* close file */- X VMAIL010.BCK48$[VMAIL010.VMAIL]DISTLIST.H;1;1J+*[VMAIL010.VMAIL]DISTLIST.H;1+,48./@ 4J-$0123KPWO5677`?;B8`Tty>g1D0F,BymQomqeT]PEz^4cpw@7i zpQNc-S&^3 NYDKŎ{Q"Xm.-`ZBV CB\?!lB"oGOʔp婬V(P8e%-ctKP@?d"ob^{HpDe!#m'ypuekt;O|wt3yfEd Nqs?ٜS/f.EJ{}cQqmV M+#9[ )cMvkCrMP!'ux {tɇgErt+Rcn$А|:ku9/_rx lX!.U\9d&( "bAO"S E.u ~dV^YO hw".S)[QU0AkZ'JO!msdO+l+񉱃B| 8 H"9R]{2>|FtG6b$AS1*%MtuQ%4un29r28MNSwo>+ACl%#;{j2-"(d"ن~v~+hz$/ IQJgԲ"@SUO~W:󩆂Ԡ/IxB`=| CqiSA>KEy>O!RrkYMW6%k]Úm)_ Vb<.'~*n3:waU';zg(q\Aa!,vxufb-"<++Twl8= 84 x;p1&;PiTCm,g# lR wWZh=20<ގo(<.hᦈ S ;snIxN\#'4wxGiv%53q,_XDART2i'p`tYi.%jN9pYǦh," NP,s59M6\:IT;c6>d"VnmG=DqA8s Xk\q)^i#w0m>>(;TgZńZrEްؼ[e7czP^pVhB'BTɮ*pvJ0xD]jte!f* ]cH9ʺцc'?UvukT6&{x %-K4 ήKzТd|âh|PPxТhtТdp”Pՠ?P”PР”РPՠ'PQբh”Pՠ ”PР”QQh߭䟢h߭xjRPݠpДݠd1 PѢhd߭䟢e1Ѣp߭䟢e1PRP|~ݠpДݠf¢h]9 VMAIL010.BCK$[VMAIL010.VMAIL]DISTLIST.OBJ;2p¢hxâhxPP|բx xhPP|tpk”(PQբh”Pՠ# ”PР#”QQh߭䟢h߭xjRPݠpДݠd.PҔݬSTRCPYXSMG$REPAINT_SCREENPXX1 kSSPУSPFREESkSMG$UNPASTE_VIRTUAL_DISPLAYSMG$DELETE_VIRTUAL_DISPLAYRFREEPTlRDISTLIST!vmail$open_distlist_windowp"pvmail$close_distlist_window8count_distlist_names,print_distlist_namesprocess_distlist_windowg$ hilite_distlist$H lolite_distlist$l  edit_distlistX create_distlistLdelete_distlistxupdate_distlistpselect_dist_list H؀y|z VMAIL010.BCK$[VMAIL010.VMAIL]DISTLIST.OBJ;2{ $ HILITE_DISTLIST H LOLITE_DISTLIST l EDIT_DISTLIST CREATE_DISTLIST LDELETE_DISTLIST UPDATE_DISTLIST pSELECT_DIST_LISTF$CODE$DATASTDINSTDOUTSTDERRRICH$ERROR_LIST NULLLISTBROADCAST_WINDOWPROFILEBROADCAST_ACTIVEFILE_BAR FOLDER_BAR MESSAGE_BAR BROADCAST_BAR DISTLIST_BAR PROFILE_BAR ALIAS_BAR͜HELP_BARNULL_BARKEYBOARDBAR_MSG_DISPLAY SEND_DISPLAY SEND_SHADOW TO_DISPLAY CC_DISPLAYSEND_STATUS_DISPLAYSEND_STATUS_SHADOW ERROR_DISPLAY PASTEBOARD_ID WINDOW_ROOTCURRENT_WINDOWK VMAIL_PROFILE DISTLIST_ROOTDISTLIST_ROOT_2PCONTEXT$CHAR_STRING_CONSTANTS|xTx|JP P+ P+ P3GW P?pPlP$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$PiaaaeaaaaaaaaM_ABS|~|~?iSMG$READ_KEYSTROKE#include #include #include #include "richlib"#include "maillib"#include "vmail"#include "window"#include "display"#include "menu"#include "help"#include "send"I/************************************************************************6:1 VMAIL010.BCK%7$[VMAIL010.VMAIL]FOLDER.C;1LB;1_6 * process_folder_window: process a folder window. *J ************************************************************************/process_folder_window (window)7struct window_struct *window; /* window to process */{9 boolean endit = false; /* end processing of window? */4 unsigned short key; /* key read from keyboard */ int j; /* lcv */5 unsigned long status; /* status of mail calls */ hilite_message (window); while (endit == false) {F smg$set_cursor_abs(&(window->display),&(window->virtual_line),&1);; smg$read_keystroke(&(window->keyboard),&key,0,0,0,0,0); switch (key) {/ case SMG$K_TRM_DOWN: /* next folder */4 if (window->virtual_line < window->length) {" lolite_message (window);4 window->specific.folder_specific.current == window->specific.folder_specific.current->next;# (window->virtual_line)++;7 if (window->physical_line < window->height) {& (window->physical_line)++;$ hilite_message (window); } else {! (window->top_line)++;A smg$scroll_viewport(&(window->display),&SMG$M_UP,&1);$ hilite_message (window); } } break;0 case SMG$K_TRM_UP: /* previous folder */' if (window->virtual_line > 1) {" lolite_message (window);5 window->specific.folder_specific.current = = window->specific.folder_specific.current->prev;# R@5B VMAIL010.BCK%7$[VMAIL010.VMAIL]FOLDER.C;1LB;1_68 (window->virtual_line)--;* if (window->physical_line > 1) {& (window->physical_line)--;$ hilite_message (window); } else {! (window->top_line)--;C smg$scroll_viewport(&(window->display),&SMG$M_DOWN,&1);$ hilite_message (window); } } break;> case SMG$K_TRM_NEXT_SCREEN: /* display next screenful */- if (window->height == window->length)/ smg$ring_bell(&(window->display),&1); else {5 if (window->virtual_line == window->length)1 smg$ring_bell(&(window->display),&1); else {$ lolite_message (window);3 window->virtual_line += window->height;/ window->top_line += window->height;H window->bottom_line = window->top_line + window->height - 1;8 if (window->bottom_line >= window->length) {3 window->bottom_line = window->length;J window->top_line = window->bottom_line - window->height + 1;5 window->physical_line = window->height;4 window->virtual_line = window->length;L while (window->specific.folder_specific.current->next != NULL): window->specific.folder_specific.current =C window->specific.folder_specific.current->next; } else {0 for (j=0; jheight; j++) {M if (window->specific.folder_specific1 VMAIL010.BCK%7$[VMAIL010.VMAIL]FOLDER.C;1LB;1_6> .current->next != NULL) {< window->specific.folder_specific.current =E window->specific.folder_specific.current->next; } } }G smg$change_viewport(&(window->display),&(window->top_line),6 &1,&(window->height),&FOLDER_COLUMNS);$ hilite_message (window); } } break;B case SMG$K_TRM_PREV_SCREEN: /* display previous screenful */- if (window->height == window->length)/ smg$ring_bell(&(window->display),&1); else {( if (window->virtual_line == 1)1 smg$ring_bell(&(window->display),&1); else {$ lolite_message (window);3 window->virtual_line -= window->height;/ window->top_line -= window->height;H window->bottom_line = window->top_line - window->height - 1;' if (window->top_line < 1) {# window->top_line = 1;J window->bottom_line = window->top_line + window->height - 1;( window->physical_line = 1;' window->virtual_line = 1;8 window->specific.folder_specific.current => window->specific.folder_specific.message_root; } else {0 for (j=0; jheight; j++) {M if (window->specific.folder_specific.current->prev != NULL) {< window->specific.folder_specific.current =E  VMAIL010.BCK%7$[VMAIL010.VMAIL]FOLDER.C;1LB;1_6x window->specific.folder_specific.current->prev; } } }G smg$change_viewport(&(window->display),&(window->top_line),6 &1,&(window->height),&FOLDER_COLUMNS);$ hilite_message (window); } } break; case SMG$K_TRM_ENTER: case SMG$K_TRM_SELECT: case SMG$K_TRM_CR:F if (window->specific.folder_specific.current->deleted == true)/ smg$ring_bell(&(window->display),&1); elseO vmail$open_message (window,window->specific.folder_specific.current); endit = true; break;2 case SMG$K_TRM_HT: /* go to next window */ case SMG$K_TRM_RIGHT: activate_next_window (); endit = true; break; case SMG$K_TRM_LEFT: activate_prev_window (); endit = true; break;2 case SMG$K_TRM_CTRLW: /* refresh screen */ case SMG$K_TRM_CTRLR:+ smg$repaint_screen(&pasteboard_id); break;0 case SMG$K_TRM_HELP: /* display help */& display_help(HELP_FOLDER_WIN);' display_help(HELP_FOLDER_KEYS); break;/ case SMG$K_TRM_F10: /* close folder */$ vmail$close_folder (window); endit = true; break;8 case SMG$K_TRM_SPACE: /* mark current message */F if (window->specific.folder_specific.current->deleted == true)/ smg$ring_bell(&(window->display),&1); !  }~_.`/rmcg ժkPN$t\RO z/I[l<3>7@bZP>zRsк@S`WiS̯&3!.j0>6}1¨=gZxG9:PW=ܞZG,*Fʾg1eqVtg̸,t ANkYtOXE`8QJIw Ԟ jS@ӎs N~ݲׇomGBl&FGn%0:edO*]d ʇ?p?$xuqӏrƭXY=pb[V R#:& GQTKlhH +NUs}K,oo1-R'4j^`raĮ]ˎ2]6[1BT 'J?JSvl"cRwQ28c0qCKFڸx w w<2d'i< e!8uE<6NS@YZuHT+?[&ؚIE*gV@6eQtn`3WZEi A"B_TCE˔LNȏGb4q|uX;[+Еyݯ{\3GηwHitq.QSA"I3pLD`OW3L,1g'5 ˻VDQ"὏F VMAIL010.BCK%7$[VMAIL010.VMAIL]FOLDER.C;1LB;1_6 elseB mark_message (&window->specific.folder_specific.context,8 window->specific.folder_specific.current); hilite_message (window); break;2 case SMG$K_TRM_CTRLD: /* delete message */F if (window->specific.folder_specific.current->deleted == true)/ smg$ring_bell(&(window->display),&1); else {' vmail$delete_message (window,8 window->specific.folder_specific.current);T if (strcmp(window->specific.folder_specific.folder_name,"NEWMAIL") == 0) {O if ((status = decrement_newmail_count ("",&profile)) != SS$_NORMAL) error (status,""); } } break;1 case SMG$K_TRM_CTRLF: /* file message */F if (window->specific.folder_specific.current->deleted == true)/ smg$ring_bell(&(window->display),&1); else {I file_message (window,window->specific.folder_specific.current);T if (strcmp(window->specific.folder_specific.folder_name,"NEWMAIL") == 0) {O if ((status = decrement_newmail_count ("",&profile)) != SS$_NORMAL) error (status,""); } } break;8 case SMG$K_TRM_UPPERCASE_A: /* menu bar option */! case SMG$K_TRM_LOWERCASE_A:@ hilite_bar_option (folder_bar,"About",FOLDER_ABOUT_COL); show_about_info();B unhilite_bar_option (folder_bar,"About",FOLDER_ABOUT_COL); break;! case SMG$K_TRM_UPPERCASE_F:! GkB VMAIL010.BCK%7$[VMAIL010.VMAIL]FOLDER.C;1LB;1_6f case SMG$K_TRM_LOWERCASE_F:1 switch (bar_menu(MENU_FOLDER_FILEMENU)) {5 case MENU_FOLDER_FILE: /* file message */J if (window->specific.folder_specific.current->deleted == true)3 smg$ring_bell(&(window->display),&1); else {X if (strcmp(window->specific.folder_specific.folder_name,"NEWMAIL") == 0) {S if ((status = decrement_newmail_count ("",&profile)) != SS$_NORMAL)$ error (status,""); }M file_message (window,window->specific.folder_specific.current); } break;: case MENU_FOLDER_EXTRACT: /* extract message */J if (window->specific.folder_specific.current->deleted == true)3 smg$ring_bell(&(window->display),&1); else, vmail$extract_message (window,< window->specific.folder_specific.current); break;6 case MENU_FOLDER_PRINT: /* print message */J if (window->specific.folder_specific.current->deleted == true)3 smg$ring_bell(&(window->display),&1); else* vmail$print_message (window,< window->specific.folder_specific.current); break;8 case MENU_FOLDER_DELETE: /* delete message */J if (window->specific.folder_specific.current->deleted == true)3 smg$ring_bell(&(window->display),&1); else {+ vmail$deieO VMAIL010.BCK%7$[VMAIL010.VMAIL]FOLDER.C;1LB;1_6lete_message (window,< window->specific.folder_specific.current);X if (strcmp(window->specific.folder_specific.folder_name,"NEWMAIL") == 0) {S if ((status = decrement_newmail_count ("",&profile)) != SS$_NORMAL)$ error (status,""); } } break;7 case MENU_FOLDER_UPDATE: /* update folder */@ if ((endit = vmail$update_folder (window)) == false)& hilite_message (window); break;6 case MENU_FOLDER_CLOSE: /* close folder */( vmail$close_folder (window); endit = true; break; } break;! case SMG$K_TRM_UPPERCASE_U:! case SMG$K_TRM_LOWERCASE_U:2 switch (bar_menu(MENU_FOLDER_UTILSMENU)) {5 case MENU_FOLDER_SEND: /* send new mail */I vmail$send_message(0,"","",""," Send Message ",SEND_OP_SEND);% activate_window (window); break;@ case MENU_FOLDER_REPLY: /* reply to current message */( vmail$reply_message (window,: window->specific.folder_specific.current); break;A case MENU_FOLDER_FORWARD: /* forward current message */* vmail$forward_message (window,: window->specific.folder_specific.current); break;< case MENU_FOLDER_MARK: /* mark current message */C mark_message(&window->specific.folder_specific.context VMAIL010.BCK%7$[VMAIL010.VMAIL]FOLDER.C;1LB;1_6-,: window->specific.folder_specific.current);# hilite_message(window); break;< case MENU_FOLDER_PROFILE: /* edit user profile */: activate_window (vmail$open_profile_window()); endit = true; break;D case MENU_FOLDER_DIST_LISTS: /* edit distribution lists */) vmail$open_distlist_window(); endit = true; break;8 case MENU_FOLDER_ALIASES: /* edit aliases */& vmail$open_alias_window(); endit = true; break;@ case MENU_FOLDER_SIGNATURE: /* edit signature file */" edit_signature_file();/ smg$repaint_screen(&pasteboard_id); break; } break;! case SMG$K_TRM_UPPERCASE_M:! case SMG$K_TRM_LOWERCASE_M:3 switch (bar_menu(MENU_FOLDER_MARKEDMENU)) {= case MENU_FOLDER_MFILE: /* file marked messages */! file_marked (window); break;B case MENU_FOLDER_MEXTRACT: /* extract marked messages */$ extract_marked (window); break;> case MENU_FOLDER_MPRINT: /* print marked messages */" print_marked (window); break;@ case MENU_FOLDER_MDELETE: /* delete marked messages */# delete_marked (window); break;< case MENU_FOLDER_MARKALL: /* mark all messages */ mark_all (window);$ hilite_message/ VMAIL010.BCK%7$[VMAIL010.VMAIL]FOLDER.C;1LB;1_6 (window); break;@ case MENU_FOLDER_UNMARKALL: /* unmark all messages */ unmark_all (window);$ hilite_message (window); break; } break;! case SMG$K_TRM_UPPERCASE_H:! case SMG$K_TRM_LOWERCASE_H:1 switch (bar_menu(MENU_FOLDER_HELPMENU)) {C case MENU_FOLDER_HELP_WINDOW: /* help window: windows */2 vmail$open_help_window(WHELP_WINDOWS); endit = true; break;B case MENU_FOLDER_HELP_ALIAS: /* help window: aliases */2 vmail$open_help_window(WHELP_ALIASES); endit = true; break;D case MENU_FOLDER_HELP_DISTLIST:/* help window: distlist */3 vmail$open_help_window(WHELP_DISTLIST); endit = true; break; } break;! case SMG$K_TRM_UPPERCASE_W:! case SMG$K_TRM_LOWERCASE_W:0 switch (bar_menu (MENU_FOLDER_WINDOW)) {B case MENU_FOLDER_RENAME_WIN: /* rename current window */# rename_window (window); break;? case MENU_FOLDER_MOVE_WIN: /* move current window */! move_window (window); break;B case MENU_FOLDER_RESIZE_WIN: /* resize current window */# resize_window (window); break; } break; default:- smg$ring_bell(&(window->display),&1); } }}I/*****************************************by VMAIL010.BCK%7$[VMAIL010.VMAIL]FOLDER.C;1LB;1_6t*******************************7 * file_marked: file all marked messages in folder. *J ************************************************************************/file_marked (fwindow)4struct window_struct *fwindow; /* folder window */{7 int file_count = -1; /* counter for file windows */= struct window_struct *mail_file[100]; /* mail file list */9 struct window_struct *ptr; /* ptr to current window */2 boolean endit = false; /* end current loop? */2 int current; /* current selected mail file */4 unsigned short key; /* key read from keyboard */E struct folder_struct *current_folder; /* current folder selected */I char folder_name[MAX_FOLDER_LENGTH+2];/* temp buffer for folder name */F char file_buffer[MAX_FILE_LENGTH+2]; /* temp buffer for file name */ char file_name[256];5 unsigned long status; /* status of mail calls */> struct message_struct *mptr; /* temp pointer to messages */: unsigned long display; /* virtual display for screen */: unsigned long shadow; /* virtual display for shadow */4 $DESCRIPTOR(border_desc," File Marked Messages ");> unsigned long border_rendition = SMG$M_BOLD | SMG$M_REVERSE;@ smg$create_virtual_display(&5,&50,&display,&SMG$M_BORDER,0,0);@ smg$create_virtual_display(&7,&52,&shadow,0,&SMG$M_REVERSE,0); folder_name[0] = '\0'; file_buffer[0] = '\0'; ptr = window_root; while (ptr != NULL) {% if (ptr->type == WTYPE_MAIL_FILE)$ mail_file[++file_count] = ptr; ptr = ptr->next; }M smԠwP VMAIL010.BCK%7$[VMAIL010.VMAIL]FOLDER.C;1LB;1_6%!g$label_border(&display,&border_desc,&SMG$K_TOP,0,&border_rendition,0,0);*> put_chars (display,"Mail File:",2,2,SMG$M_ERASE_TO_EOL,0,0);; put_chars (display,"Folder:",4,2,SMG$M_ERASE_TO_EOL,0,0); > smg$paste_virtual_display(&display,&pasteboard_id,&8,&20,0);D smg$paste_virtual_display(&shadow,&pasteboard_id,&8,&20,&display); current = 0; while (endit == false) {6 put_chars (display,mail_file[current]->title,2,13,, SMG$M_ERASE_TO_EOL,SMG$M_REVERSE,0);1 smg$read_keystroke(&keyboard,&key,0,0,0,0,0); switch (key) {2 case SMG$K_TRM_CTRLW: /* refresh screen */ case SMG$K_TRM_CTRLR:n+ smg$repaint_screen(&pasteboard_id);* break;0 case SMG$K_TRM_UP: /* previous option */ if (--current < 0) current = file_count;h break;/ case SMG$K_TRM_DOWN: /* next option */i# if (++current > file_count)i current = 0; break;6 case SMG$K_TRM_UPPERCASE_N: /* name/new file */! case SMG$K_TRM_LOWERCASE_N:i] if (get_input (file_buffer,MAX_FILE_LENGTH,display,2,13,INPOPT_CAPS) != INPST_EXIT) {** strcpy (file_name, file_buffer); endit = true;* }  break;2 case SMG$K_TRM_SELECT: /* select option */ case SMG$K_TRM_ENTER:d case SMG$K_TRM_CR: strcpy (file_name, M mail_file[current]->specific.mailfile_specific.context.filename);e endit = true;h break; } }m+ put_chars (display,fil u VMAIL010.BCK%7$[VMAIL010.VMAIL]FOLDER.C;1LB;1_6m$e_name,2,13,0,0,0);> endit = false;N current_folder = mail_file[current]->specific.mailfile_specific.folder_root; while (endit == false) {1 put_chars (display,current_folder->name,4,13,a, SMG$M_ERASE_TO_EOL,SMG$M_REVERSE,0);1 smg$read_keystroke(&keyboard,&key,0,0,0,0,0);_ switch (key) {2 case SMG$K_TRM_CTRLW: /* refresh screen */ case SMG$K_TRM_CTRLR:-+ smg$repaint_screen(&pasteboard_id);s break;0 case SMG$K_TRM_UP: /* previous option */. current_folder = current_folder->prev;% if (current_folder == NULL) { V current_folder = mail_file[current]->specific.mailfile_specific.folder_root;. while (current_folder->next != NULL)2 current_folder = current_folder->next; }* break;/ case SMG$K_TRM_DOWN: /* next option */ . current_folder = current_folder->next;# if (current_folder == NULL)=V current_folder = mail_file[current]->specific.mailfile_specific.folder_root; break;8 case SMG$K_TRM_UPPERCASE_N: /* name/new folder */! case SMG$K_TRM_LOWERCASE_N: _ if (get_input (folder_name,MAX_FOLDER_LENGTH,display,4,13,INPOPT_NONE) != INPST_EXIT) { endit = true;e }d break;2 case SMG$K_TRM_SELECT: /* select option */ case SMG$K_TRM_ENTER:  case SMG$K_TRM_CR:3 strcpy (folder_name, current_folder->name);  endit = true;t break; }  } - put_chars (displ_w VMAIL010.BCK%7$[VMAIL010.VMAIL]FOLDER.C;1LB;1_6'ay,folder_name,4,13,0,0,0); 8 mptr = fwindow->specific.folder_specific.message_root; while (mptr != NULL) {= if ((mptr->marked == true) && (mptr->deleted == false)) { ? move_message (&fwindow->specific.folder_specific.context,d2 mptr->message_id,folder_name,file_name); mptr->deleted = true;w9 (fwindow->specific.folder_specific.num_messages)--; Q if (strcmp(fwindow->specific.folder_specific.folder_name,"NEWMAIL") == 0) {lK if ((status = decrement_newmail_count ("",&profile)) != SS$_NORMAL)- error (status,""); }d }s mptr = mptr->next; } redraw_window (fwindow); hilite_message (fwindow); 6 smg$unpaste_virtual_display(&shadow,&pasteboard_id);7 smg$unpaste_virtual_display(&display,&pasteboard_id);_& smg$delete_virtual_display(&shadow);' smg$delete_virtual_display(&display);>}tI/************************************************************************t< * extract_marked: extract all marked messages in folder. *J ************************************************************************/extract_marked (window) 3struct window_struct *window; /* folder window */e{5 unsigned long status; /* status of mail calls */A char filename[MAX_FILE_LENGTH+2]; /* name of extraction file */n; struct message_struct *mptr; /* temp message pointer */: unsigned long display; /* virtual display for screen */: unsigned long shadow; /* virtual display for shadow */7 $DESCRIPTOR(border_desc," Extract Marked Mس( VMAIL010.BCK%7$[VMAIL010.VMAIL]FOLDER.C;1LB;1_6*essages "); > unsigned long border_rendition = SMG$M_REVERSE | SMG$M_BOLD;@ smg$create_virtual_display(&1,&50,&display,&SMG$M_BORDER,0,0);@ smg$create_virtual_display(&3,&52,&shadow,0,&SMG$M_REVERSE,0); filename[0] = '\0';eM smg$label_border(&display,&border_desc,&SMG$K_TOP,0,&border_rendition,0,0);i> put_chars (display,"Filename: ",1,2,SMG$M_ERASE_TO_EOL,0,0);? smg$paste_virtual_display(&display,&pasteboard_id,&10,&20,0);dE smg$paste_virtual_display(&shadow,&pasteboard_id,&10,&20,&display); T if (get_input (filename,MAX_FILE_LENGTH,display,1,12,INPOPT_CAPS) != INPST_EXIT) {( print_bar_message ("Extracting...");G extract_marked_messages (&window->specific.folder_specific.context,t@ window->specific.folder_specific.message_root,filename); erase_bar_message ();  }e6 smg$unpaste_virtual_display(&shadow,&pasteboard_id);7 smg$unpaste_virtual_display(&display,&pasteboard_id);t& smg$delete_virtual_display(&shadow);' smg$delete_virtual_display(&display);} I/************************************************************************ 9 * print_marked: print all marked messages in folder. *hJ ************************************************************************/print_marked (window)R3struct window_struct *window; /* folder window */ { 5 unsigned long status; /* status of mail calls */E9 char queue_name[255]; /* name of destination queue */C7 char form_name[255]; /* name of destination form */>, FILE *infile; /* input file pointer */YR/ ZdkcN R6)v}`qjzt df) "J>o_@%{)5#w:j!O 8:uz 8rb +z$ w_UgTyK)eq8';BG[/jr%Hb{+0(NxF E<&TX^]~$wr>lfXE '25\\r( C:l/DP;lowfvEDC{b`di4>7#Hu5"I`3lj >:,q<bFBXVAM[z`01+~#1@)a&r;wJ|9{?5=d0yD_tTWpgg:=a "i(>8(/!mO(U,SoG 6evOL^Wr.uUDD$uV.fU= FWBU!nazV$uWQZ}=&)V!dQ26N *OL3irt&X%?P^tJC.mvQ*Jk G Q BT yd 4X#qD`r@M/%@8a9p@c,5* ^HW)4#9(uX[=:~* ?9VF;eyv9 '9oOJ$c+ 1U/9vWBpc)itx?/st'[yP! Doh asUG#|  &Ktl0]CJ?W_F&5p[[d:c6-Sv{7gvHqE/Wz/$Mr2>zF3k86)7,;VLv\5!K2e6Ibzk\yuz.X6IR YL'd}9y@+LQXO&GAS'!&@%PX D3HI~VAvDM DD K"RHHR%d[ $~0~@eCx8h?zsJ^uYSIn0$S1;/n{!neAEwL;`\6liOty3VwV|_jqoB(/TY@+R3Cp@P~OWI}e R$:G/Jabl2E}W0wh5 >{&1. 2~ oTo ysD?a!rs8J9p9mogbZ4Bydi8K39Iz@b2 h2998/:$ 82 Y(l:3[n { KQ-@bll}\tRuB,~}T&P /I7!JVH#+su0P+hl}LC Nre\\ BX#=}C:{qt_T'vLz`WR!{ppI1d]hon*[ LZ=6nJ3F2sd[dAOS0{,k qOy!N5U"/s8rKTQKY)cY.H[cCYk- ``}O-(qUZg@cK2++*7VH! =?.8(cCk.$),^d)E[w!/VhZiRqi" VMAIL010.BCK%7$[VMAIL010.VMAIL]FOLDER.C;1LB;1_6ʋ-1 char string[255]; /* temp string variable */$; struct message_struct *mptr; /* temp message pointer */)$ print_bar_message ("Printing...");E extract_marked_messages (&window->specific.folder_specific.context,KI window->specific.folder_specific.message_root,"SYS$LOGIN:VMAIL.LIS"); * rich$select_print_queuew_l (queue_name); if (strlen (queue_name) > 0) {, if (strcmp (queue_name, "LOCAL") == 0) {0 infile = fopen("SYS$LOGIN:VMAIL.LIS","r");* printf ("%c[H%c[2J%c[?5i",27,27,27);" fgets (string, 254, infile); while (!(feof(infile))) {* printf ("%s",string);p$ fgets (string, 254, infile); } H fclose (infile); printf ("%c[?4i", 27);& remove ("SYS$LOGIN:VMAIL.LIS;");* smg$repaint_screen (&pasteboard_id); } else {* rich$select_print_formw (form_name);# if (strlen (form_name) > 0) {wG rich$print_temp_file ("SYS$LOGIN:VMAIL.LIS","VMAIL",queue_name,b form_name,true); }l else) remove ("SYS$LOGIN:VMAIL.LIS;*");e }o }, else% remove ("SYS$LOGIN:VMAIL.LIS;*");c rich$unpaste_queue_form ();a erase_bar_message ();a}I/************************************************************************c; * delete_marked: delete all marked messages in folder. *gJ ************************************************************************/delete_marked (fwindow) 4struct window_struct *fwindow; /* folder window */{f; struct message_struct *mڲd VMAIL010.BCK%7$[VMAIL010.VMAIL]FOLDER.C;1LB;1_6na0ptr; /* temp message pointer */L5 unsigned long status; /* status of mail calls */_8 mptr = fwindow->specific.folder_specific.message_root; while (mptr != NULL) {= if ((mptr->marked == true) && (mptr->deleted == false)) {eA delete_message (&fwindow->specific.folder_specific.context,t mptr->message_id); mptr->deleted = true;a9 (fwindow->specific.folder_specific.num_messages)--;nQ if (strcmp(fwindow->specific.folder_specific.folder_name,"NEWMAIL") == 0) {dK if ((status = decrement_newmail_count ("",&profile)) != SS$_NORMAL)n error (status,""); }O } mptr = mptr->next; }" redraw_window (fwindow); hilite_message (fwindow);S}KI/************************************************************************ @ * redraw_window: redraw specified window with current stats. *J ************************************************************************/redraw_window (window)6struct window_struct *window; /* window to redraw */{K int j; /* lcv */; struct message_struct *mptr; /* temp. message pointer */M/ char string[80]; /* temp. string buffer */ 4 char date_string[24]; /* temp. string buffer */ switch (window->type) {$ case WTYPE_FOLDER:; mptr = window->specific.folder_specific.message_root;o j = 1; while (mptr != NULL) {" if (mptr->deleted == true)C sprintf (string," %-15.15s %-30.30s",  "(deleted)"," "); M, VMAIL010.BCK%7$[VMAIL010.VMAIL]FOLDER.C;1LB;1_63 else {3 strcpy (date_string,mptr->creation_date);.! date_string[11] = '\0'; I sprintf (string, " %-11s %4d %-15.15s %-30.30s",date_string,m5 mptr->size, mptr->from, mptr->subject);c$ if (mptr->replied == true) string[0] = 'R';% if (mptr->external == true)  string[1] = 'X';# if (mptr->marked == true)> string[2] = '*'; } F put_chars (window->display,string,j,2,SMG$M_ERASE_TO_EOL,0,0); mptr = mptr->next; j++; }e break; case WTYPE_MAIL_FILE:i break; case WTYPE_MESSAGE: break; } } I/************************************************************************c. * mark_all: mark all messages in folder. *J ************************************************************************/mark_all (window)e=struct window_struct *window; /* folder window to process */p{); struct message_struct *mptr; /* temp message pointer */e7 mptr = window->specific.folder_specific.message_root;f while (mptr != NULL) { if (mptr->marked == false)D mark_message (&window->specific.folder_specific.context,mptr); mptr = mptr->next; }  redraw_window (window);L}I/************************************************************************ 2 * unmark_all: unmark all messages in folder. *J ************************************************************************/unmark_all (window) =struct window_structG9 VMAIL010.BCK%7$[VMAIL010.VMAIL]FOLDER.C;1LB;1_66 *window; /* folder window to process */M{_; struct message_struct *mptr; /* temp message pointer */o7 mptr = window->specific.folder_specific.message_root;a while (mptr != NULL) { if (mptr->marked == true)RD mark_message (&window->specific.folder_specific.context,mptr); mptr = mptr->next; }  redraw_window (window);N}/nd new mail */I vmail$send_message(0,"","",""," Send Message ",SEND_OP_SEND);% activate_window (window); brea*[VMAIL010.VMAIL]FOLDER.OBJ;2+,<!./@ 4 -$0123KPWO565 7` 8`%?zP9/ E G@HJ3FOLDERV1.0 6-AUG-1993 09:09VAX C V3.2-044PNEWMAIL PNEWMAILPAboutPAbout PNEWMAIL*PNEWMAIL7P Send Message FP File Marked Messages ]PMail File:hPFolder:pPNEWMAILzP Extract Marked Messages PFilename: PExtracting...PPrinting...PSYS$LOGIN:VMAIL.LISPLOCALPSYS$LOGIN:VMAIL.LISPrP%c[H%c[2J%c[?5iP%sP%c[?4iPSYS$LOGIN:VMAIL.LIS;PSYS$LOGIN:VMAIL.LIS,PVMAIL2PSYS$LOGIN:VMAIL.LIS;*H=E) VMAIL010.BCK<!$[VMAIL010.VMAIL]FOLDER.OBJ;2;13PSYS$LOGIN:VMAIL.LIS;*^PNEWMAILhP %-15.15s %- REDRAW_WINDOWBAR_MENU GET_INPUTVMAIL$UPDATE_FOLDER MOVE_MESSAGEDELETE_MESSAGERICH$UNPASTE_QUEUE_FORMRICH$SELECT_PRINT_FORMWRICH$PRINT_TEMP_FILEREMOVESPRINTFPRINTFFGETSFCLOSEFOPEN RESIZE_WINDOW MOVE_WINDOW RENAME_WINDOWVMAIL$OPEN_HELP_WINDOW UNMARK_ALLMARK_ALL DELETE_MARKED PRINT_MARKEDEXTRACT_MARKED FILE_MARKEDEDIT_SIGNATURE_FILEVMAIL$OPEN_ALIAS_WINDOWVMAIL$OPEN_DISTLIST_WINDOWVMAIL$OPEN_PROFILE_WINDOWVMAIL$FORWARD_MESSAGEVMAIL$REPLY_MESSAGEACTIVATE_WINDOWVMAIL$SEND_MESSAGEVMAIL$PRINT_MESSAGEVMAIL$EXTRACT_MESSAGEUNHILITE_BAR_OPTIONSHOW_ABOUT_INFOHILITE_BAR_OPTION FILE_MESSAGEERRORDECREMENT_NEWMAIL_COUNTSTRCMPVMAIL$DELETE_MESSAGE MARK_MESSAGEVMAIL$CLOSE_FOLDER DISPLAY_HELPSMG$REPAINT_SCREENACTIVATE_PREV_WINDOWACTIVATE_NEXT_WINDOWVMAIL$OPEN_MESSAGESMG$CHANGE_VIEWPORT SMG$RING_BELLSMG$SCROLL_VIEWPORTLOLITE_MESSAGESMG$READ_KEYSTROKESMG$SET_CURSOR_ABSHILITE_MESSAGESMG$DELETE_VIRTUAL_DISPLAYSMG$UNPASTE_VIRTUAL_DISPLAYHILITE_MESSAGE REDRAW_WINDOWERRORDECREMENT_NEWMAIL_COUNTSTRCMPSTRCPYSMG$REPAINT_SCREENSMG$READ_KEYSTROKESMG$PASTE_VIRTUAL_DISPLAY PUT_CHARSSMG$LABEL_BORDERSMG$CREATE_VIRTUAL_DISPLAY  VMAIL010.BCK<!$[VMAIL010.VMAIL]FOLDER.OBJ;2;1SMG$DELETE_VIRTUAL_DISPLAYSMG$UNPASTE_VIRTUAL_DISPLAYERASE_BAR_MESSAGEEXTRACT_MARKED_MESSAGESPRINT_BAR_MESSAGESMG$PASTE_VIRTUAL_DISPLAY PUT_CHARSSMG$LABEL_BORDERSMG$CREATE_VIRTUAL_DISPLAYERASE_BAR_MESSAGESMG$REPAINT_SCREENSTRCMPSTRLENRICH$SELECT_PRINT_QUEUEW_LEXTRACT_MARKED_MESSAGESPRINT_BAR_MESSAGEHILITE_MESSAGE REDRAW_WINDOWERRORDECREMENT_NEWMAIL_COUNT30.30sP(deleted)P P %-11s %4d %-15.15s %-30.30sP^U[WެVfHILITE_MESSAGEW1 LOLITE_MESSAGE,HILITE_MESSAGEZSMG$SCROLL_VIEWPORT SMG$RING_BELLXSMG$CHANGE_VIEWPORTSMG$REPAINT_SCREEN DISPLAY_HELPVMAIL$CLOSE_FOLDER MARK_MESSAGEnVMAIL$DELETE_MESSAGE STRCMP(DECREMENT_NEWMAIL_COUNT4ERROR0 FILE_MESSAGEBAR_MENU$ACTIVATE_WINDOW߭ЬRpSMG$SET_CURSOR_ABS|~|~?SMG$READ_KEYSTROKE u`Vƹ!ACMnLVw1{juw}OY:S/S7]Oh .Q&B*9/%ăA#kJCrrl|N ${s-o/* ׽e 7{ .nF[uV `sc‹M ,L_m @b̷ eZZhyŞuu,rn`yeʪ z5;<{m+'j( VMAIL010.BCK<!$[VMAIL010.VMAIL]FOLDER.OBJ;2;1I STRCMP PUT_CHARSSTRCPY MARK_MESSAGE MARK_MESSAGE PROCESS_FOLDER_WINDOW  FILE_MARKED  EXTRACT_MARKED  PRINT_MARKED d| DELETE_MARKED  REDRAW_WINDOW MARK_ALL  UNMARK_ALL8$CODE$DATASTDINSTDOUTSTDERRRICH$ERROR_LIST NULLLISTBROADCAST_WINDOWPROFILEBROADCAST_ACTIVE WINDOW_ROOTCURRENT_WINDOWFILE_BAR FOLDER_BAR MESSAGE_BAR BROADCAST_BAR DISTLIST_BAR PROFILE_BAR ALIAS_BARHELP_BARNULL_BARKEYBOARDBAR_MSG_DISPLAY SEND_DISPLAY SEND_SHADOW TO_DISPLAY CC_DISPLAYSEND_STATUS_DISPLAYSEND_STATUS_SHADOW ERROR_DISPLAY PASTEBOARD_ID$CHAR_STRING_CONSTANTS1U Pzz Pt0< Pww P(P P$4P#/;GP;Oc{APs3OPl <,@P| VMAIL010.BCK<!$[VMAIL010.VMAIL]FOLDER.OBJ;2;1ԟ4`X4`XPb.fRѢp1]R0£SУX£׀pѢtעtRj18Pעx߭߭쟢 Rj1fSѣhd߭h1Pѣpd߭h1S0hphxxhRR|ѣ|dBУd|ãh|RRxУhtУdpãRբTJQPРTРTPՠT.PTգh%R£PTfQPРTTThC߭fRh߭쟢x$Rj1*fSѣhd*[VMAIL010.VMAIL]HELP.C;1+,8(./@ 4V -$0123KPWO56S75=B8@c&C9/ E G@HJI/************************************************************************ * */ * Visual Mail */ * version 1.0 *; * Copyright 1993 by Richard D. Johnson *3 * All Rights Reserved * * *F * Visual Mail may be distributed only in its original, unmodified *. * form. See documentation for details. * * *I *******************************************************4 VMAIL010.BCK8($[VMAIL010.VMAIL]HELP.C;1.OLB;1V*****************2 * Revision History * * *) * 13-JUL-1993 RDJ Module completion. *J ************************************************************************/#include #include #include #include "richlib"#include "maillib"#include "display"#include "window"#include "send"#include "menu"#include "help"#include "help_context"#include "help_window"I/************************************************************************< * display_help: display a help window on specified item. *J ************************************************************************/display_help (item)'int item; /* item to get help on */{8 unsigned long display; /* virtual display for help */0 unsigned long shadow; /* shadow for help */3 unsigned short key; /* key get from keyboard */. boolean endit = false; /* end key loop? */< char title_string[80]; /* buffer to build title string */E struct dsc$descriptor text_desc = {0,DSC$K_DTYPE_T,DSC$K_CLASS_S,};> unsigned long border_rendition = SMG$M_BOLD | SMG$M_REVERSE;2 long shadow_rows; /* rows in shadow display */V smg$create_virtual_display(&(help_text[item].lines),&50,&display,&SMG$M_BORDER,0,0);( shadow_rows = help_text[item].lines+2;J smg$create_virtual_display(&shadow_rows,&50,&shadow,0,&SMG$M_REVERSE,0);< sprintf (title_string," Help: %s ",help_text[item].title);) text_desc.dsc$a_pointer = title_string;0 text_desc.dsc$w_length =5R VMAIL010.BCK8($[VMAIL010.VMAIL]HELP.C;1.OLB;1V@ strlen(title_string);K smg$label_border(&display,&text_desc,&SMG$K_TOP,0,&border_rendition,0,0);1 text_desc.dsc$a_pointer = help_text[item].text;8 text_desc.dsc$w_length = strlen(help_text[item].text);H smg$put_line(&display,&text_desc,&1,0,0,&SMG$M_WRAP_WORD,0,&SMG$M_UP); text_desc.dsc$a_pointer = ""; text_desc.dsc$w_length = 0;9 smg$put_line(&display,&text_desc,&1,0,0,0,0,&SMG$M_UP);E text_desc.dsc$a_pointer = " Press [RETURN] to Continue."; text_desc.dsc$w_length = 38;C smg$put_line(&display,&text_desc,&1,&SMG$M_BOLD,0,0,0,&SMG$M_UP);> smg$paste_virtual_display(&display,&pasteboard_id,&7,&15,0);D smg$paste_virtual_display(&shadow,&pasteboard_id,&7,&15,&display); while (endit == false) {' smg$set_cursor_abs(&display,&1,&1);1 smg$read_keystroke(&keyboard,&key,0,0,0,0,0); switch (key) { case SMG$K_TRM_ENTER: case SMG$K_TRM_CR: endit = true; break; } }6 smg$unpaste_virtual_display(&shadow,&pasteboard_id);8 smg$unpaste_virtual_display (&display,&pasteboard_id);' smg$delete_virtual_display(&display);& smg$delete_virtual_display(&shadow);}I/************************************************************************3 * process_help_window: process a help window. *J ************************************************************************/process_help_window (window)7struct window_struct *window; /* window to process */{9 boolean endit = false; /* end processing of window? */4I;% VMAIL010.BCK8($[VMAIL010.VMAIL]HELP.C;1.OLB;1V]L unsigned short key; /* key read from keyboard */5 unsigned long status; /* status of mail calls */ while (endit == false) {B smg$set_cursor_abs(&(window->display),&(window->top_line),&1);1 smg$read_keystroke(&keyboard,&key,0,0,0,0,0); switch (key) {- case SMG$K_TRM_DOWN: /* next line */3 if (window->bottom_line < window->length) {" (window->bottom_line)++; (window->top_line)++;? smg$scroll_viewport(&(window->display),&SMG$M_UP,&1); } else/ smg$ring_bell(&(window->display),&1); break;. case SMG$K_TRM_UP: /* previous line */# if (window->top_line > 1) { (window->top_line)--;" (window->bottom_line)--;A smg$scroll_viewport(&(window->display),&SMG$M_DOWN,&1); } else/ smg$ring_bell(&(window->display),&1); break;> case SMG$K_TRM_NEXT_SCREEN: /* display next screenful */3 if (window->bottom_line < window->length) {- window->top_line += window->height;B window->bottom_line = window->top_line + window->height;8 while (window->bottom_line > window->length) {! (window->top_line)--;D window->bottom_line = window->top_line + window->height; }E smg$change_viewport(&(window->display),&(window->top_line),G &(window->left_column),&(window->height),&(window->width)); } else/ smg$ring_bell(&(Ƥ2 VMAIL010.BCK8($[VMAIL010.VMAIL]HELP.C;1.OLB;1V window->display),&1); break;B case SMG$K_TRM_PREV_SCREEN: /* display previous screenful */# if (window->top_line > 1) {1 if (window->top_line <= window->height)! window->top_line = 1; else/ window->top_line -= window->height;B window->bottom_line = window->top_line + window->height;E smg$change_viewport(&(window->display),&(window->top_line),G &(window->left_column),&(window->height),&(window->width)); } else/ smg$ring_bell(&(window->display),&1); break;@ case SMG$K_TRM_UPPERCASE_T: /* go to top of help screen */! case SMG$K_TRM_LOWERCASE_T: window->top_line = 1;@ window->bottom_line = window->top_line + window->height;E smg$change_viewport(&(window->display),&(window->top_line),G &(window->left_column),&(window->height),&(window->width)); break;C case SMG$K_TRM_UPPERCASE_B: /* go to bottom of help screen */! case SMG$K_TRM_LOWERCASE_B:. if (window->height < window->length) {= window->top_line = window->length - window->height;/ window->bottom_line = window->length;E smg$change_viewport(&(window->display),&(window->top_line),G &(window->left_column),&(window->height),&(window->width)); } break;7 case SMG$K_TRM_LEFT: /* go to previous window */ activate_prev_window (); endit = true; brb VMAIL010.BCK8($[VMAIL010.VMAIL]HELP.C;1E.;1Veak;2 case SMG$K_TRM_HT: /* go to next window */ case SMG$K_TRM_RIGHT: activate_next_window (); endit = true; break;2 case SMG$K_TRM_CTRLW: /* refresh screen */ case SMG$K_TRM_CTRLR:+ smg$repaint_screen(&pasteboard_id); break;/ case SMG$K_TRM_F10: /* close window */* vmail$close_help_window (window); endit = true; break;0 case SMG$K_TRM_HELP: /* display help */+/* display_help(HELP_MESSAGE_WIN);*/ break;8 case SMG$K_TRM_UPPERCASE_A: /* menu bar option */! case SMG$K_TRM_LOWERCASE_A:B hilite_bar_option (message_bar,"About",MESSAGE_ABOUT_COL); show_about_info();D unhilite_bar_option (message_bar,"About",MESSAGE_ABOUT_COL); break;! case SMG$K_TRM_UPPERCASE_F:! case SMG$K_TRM_LOWERCASE_F:/ switch (bar_menu(MENU_HELP_FILEMENU)) {9 case MENU_HELP_CLOSE: /* close help window */- vmail$close_help_window (window); endit = true; break; } break;! case SMG$K_TRM_UPPERCASE_U:! case SMG$K_TRM_LOWERCASE_U:0 switch (bar_menu(MENU_HELP_UTILSMENU)) {; case MENU_HELP_SEND: /* send new mail message */I vmail$send_message(0,"","",""," Send Message ",SEND_OP_SEND);$ activate_window(window); break;: case MENU_HELP_PROFILE: /* edit user profile */: activate_win VMAIL010.BCK8($[VMAIL010.VMAIL]HELP.C;1S.H;1Vdow (vmail$open_profile_window()); endit = true; break;B case MENU_HELP_DIST_LISTS: /* edit distribution lists */) vmail$open_distlist_window(); endit = true; break;; case MENU_HELP_ALIASES: /* edit VMail aliases */& vmail$open_alias_window(); endit = true; break;> case MENU_HELP_SIGNATURE: /* edit signature file */" edit_signature_file();/ smg$repaint_screen(&pasteboard_id); break; } break;! case SMG$K_TRM_UPPERCASE_H:! case SMG$K_TRM_LOWERCASE_H:/ switch (bar_menu(MENU_HELP_HELPMENU)) {A case MENU_HELP_HELP_WINDOW: /* help window: windows */2 vmail$open_help_window(WHELP_WINDOWS); endit = true; break;@ case MENU_HELP_HELP_ALIAS: /* help window: aliases */2 vmail$open_help_window(WHELP_ALIASES); endit = true; break;C case MENU_HELP_HELP_DISTLIST: /* help window: distlist */3 vmail$open_help_window(WHELP_DISTLIST); endit = true; break; } break;! case SMG$K_TRM_UPPERCASE_W:! case SMG$K_TRM_LOWERCASE_W:- switch (bar_menu(MENU_HELP_WINDOW)) {@ case MENU_HELP_RENAME_WIN: /* rename current window */# rename_window (window); break;= case MENU_HELP_MOVE_WIN: /* move cxX VMAIL010.BCK8($[VMAIL010.VMAIL]HELP.C;1S.OBJ;1VWurrent window */! move_window (window); break;@ case MENU_HELP_RESIZE_WIN: /* resize current window */# resize_window (window); break; } break; default:- smg$ring_bell(&(window->display),&1); } }}I/************************************************************************A * vmail$open_help_window: open a help window and insert text. *J ************************************************************************/"vmail$open_help_window (help_item),int help_item; /* item to get help on */{B struct window_struct *window = NULL; /* newsly created window */) char title[255]; /* window title */E struct dsc$descriptor text_desc = {0,DSC$K_DTYPE_T,DSC$K_CLASS_S,};A sprintf (title," Help: %s ",window_help_text[help_item].title);N window = create_window (WTYPE_HELP,title,window_help_text[help_item].lines);= text_desc.dsc$a_pointer = window_help_text[help_item].text;D text_desc.dsc$w_length = strlen(window_help_text[help_item].text);R smg$put_line(&(window->display),&text_desc,&1,0,0,&SMG$M_WRAP_WORD,0,&SMG$M_UP); activate_window (window);}I/************************************************************************4 * vmail$close_help_window: close a help window. *J ************************************************************************/ vmail$close_help_window (window)5struct window_struct *window; /* window to close */{ delete_window (windool VMAIL010.BCK8($[VMAIL010.VMAIL]HELP.C;11V w);}*[VMAIL010.VMAIL]HELP.H;1+,I9 . /@ 4J -$0123KPWO 568@7Ot=B8ϡ&C9/ E G@HJI/************************************************************************ * */ * Visual Mail */ * version 1.0 *; * Copyright 1993 by Richard D. Johnson *3 * All Rights Reserved * * *F * Visual Mail may be distributed only in its original, unmodified *. * form. See documentation for details. * * *I *******************************************************Q*mt.l+V7&>ZM1WEO.(' '#gt~ PY  ){@T%.@~]&5e6*LL(mSyERy~.9^3? f:N(.rjC 4@zsCjA**5h>:7d*De*x|8xw5}&dV;WLZ<,D fejB@63NMch5 KFJtWmNI+ 4|gl::%N(`\pPO$D+UU )?Rfki0,FIq-t.O2z<%:$Q7P; 7%7v#M7GA0U7/I2$u nRB9)Tr^=_~$kKJ(yg$h9( bGgFGAu!q0s]) Il ~I` C`7N6lTF|wAro5}>] \on!,;jOS/)7n9QC`n9 Zw!U[\G=4Rvu+/piQ  k|D>}z(owS Z\oD"Xj=A N{oyX@7G8*`0C ] kp- YY~"L)RgA<-p=k`yx%a?PzoTe1Y$Ei  I#define HELP_MAIL_HELP 10 /* Help menu in mail file window */A#define HELP_MAIL_WINDOW 11 /* Window menu in mail file window */<#define HELP_FOLDER_FILE 12 /* File menu in folder window */>#define HELP_FOLDER_UTILS 13 /* Utils menu in folder window */@#define HELP_FOLDER_MARKED 14 /* Marked menu in folder window */<#define HELP_FOLDER_HELP 15 /* Help menu in folder window */@#define HELP_FOLDER_WINDOW 16 /* Window menu in folder window */>#define HELP_MESSAGE_FILE 17 /* File menu in message window */@#define HELP_MESSAGE_UTILS 18 /* Utils menu in message window */>#define HELP_MESSAGE_HELP 19 /* Help menu in message window */B#define HELP_MESSAGE_WINDOW 20 /* Window menu in message window */B#define HELP_BROADCASTxy VMAIL010.BCKI9 $[VMAIL010.VMAIL]HELP.H;1J;1J _FILE 21 /* File menu in broadcast window */B#define HELP_BROADCAST_HELP 22 /* Help menu in broadcast window */F#define HELP_BROADCAST_WINDOW 23 /* Window menu in broadcast window */=#define HELP_FOLDER_KEYS 24 /* Quick keys in folder window */@#define HELP_DISTLIST_FILE 25 /* File menu in distlist window */B#define HELP_DISTLIST_UTILS 26 /* Utils menu in distlist window */@#define HELP_DISTLIST_HELP 27 /* Help menu in distlist window */D#define HELP_DISTLIST_WINDOW 28 /* Window menu in distlist window */:#define HELP_DISTLIST_WIN 29 /* help on distlist window */;#define HELP_ALIAS_FILE 30 /* File menu in alias window */<#define HELP_ALIAS_UTILS 31 /* Utils menu in alias window */;#define HELP_ALIAS_HELP 32 /* Help menu in alias window */>#define HELP_ALIAS_WINDOW 33 /* Window menu in alias window */9#define HELP_HELP_FILE 34 /* File menu in help window */;#define HELP_HELP_UTILS 35 /* Utils menu in help window */9#define HELP_HELP_HELP 36 /* Help menu in help window */=#define HELP_HELP_WINDOW 37 /* Window menu in help window */=#define HELP_FILEMSG_FILE 38 /* File field in file message */A#define HELP_FILEMSG_FOLDER 39 /* Folder field in file message */4#define HELP_NULL_WIN 40 /* help on null window */9#define HELP_NULL_FILE 41 /* File menu in null window */;#define HELP_NULL_UTILS 42 /* Utils menu in null window */9#define HELP_NULL_HELP 43 /* Help menu in null window */:/* definitions for help windows */6#define WHELP_UNDEFINED 0!Tu VMAIL010.BCKI9 $[VMAIL010.VMAIL]HELP.H;1J;1J ? /* undefined help window */0#define WHELP_WINDOWS 1 /* windowing system */5#define WHELP_ALIASES 2 /* alias management & use */8#define WHELP_DISTLIST 3 /* using distribution lists */*[VMAIL010.VMAIL]HELP.OBJ;2+,t .3/@ 431 -$0123KPWO256* 7@ 8@m=zP9/ E G@HJ1HELPV1.0 6-AUG-1993 09:09VAX C V3.2-044PThe Mail File window allows you to perform actions on folders within a particular mail file. The window displays each folder in the mail file, and the number of messages the folder contains. You may select a folder using the cursor keys and the [PREV] and [NEXT] keys, if necessary. Open a folder by pressing [RETURN] or [ENTER] on the selected folder.P bPMail File WindowPbsPThe Folder window allows you j VMAIL010.BCKt $[VMAIL010.VMAIL]HELP.OBJ;2;13Lto perform actions on messages within a particular folder. The window displays each message in the folder, including the date it was received, the number of lines it contains, who it is from, and the subject of the message. To the left of the date there may be some special symbols: an 'R' indicates the message has been replied to, an 'X' means the message is kept in an external file, and a '*' indicates the message is marked. Ps >PFolder WindowP>LPThe Message window allows you to view a particular message and perform actions on it. Use the cursor keys to scroll left, right, up, and down. The [Prev] and [Next] keys will move up and down by a page. The [Tab] key will move to the next window.PLCPMessage Window PCRPThe Broadcast Message window contains any broadcast messages you receive during your Visual Mail session. Use the [Tab] or [CRSR/Right] key to move to the next window, or the [CRSR/Left] key to move to the previous window. If this window is closed, it will reopen the next time you receive a broadcast message.$PR PBroadcast Message Window,PPThe From: field defines your personal name to be used for this message. Your personal name will appear in parenthesis after your username in the FROM: field of the sent message. This field defaults to the Personal Name setting in your profile, and may be blanked out to use no personal name.0P PFrom: field8PPThe Subject: field contains the subjectsK VMAIL010.BCKt $[VMAIL010.VMAIL]HELP.OBJ;2;13} of your message. This will be placed in the SUBJECT: field of the message you send.PThe Help menu allows you to select general Visual Mail help items. A help screen will appear for the selected item.P>PHelp MenuPPThe Window menu allows you to manipulate the current message window. Rename Window renames the current message window to any name you desire. Move Window allows you to move the current message window anywhere on the screen. Resize Window allows you to change the height of the current message window.P PWindow MenuPPThe File menu allows you to close the broadcast message window. Close Window is the only option available. If you close the broadcast message window, a new one will open when you receive another broadcast message.PPFile MenuPPThe Help menu allows you to select general Visual Mail help items. A help screen will appear for the selected item.PIPHelp MenuPISPThe Window menu allows you to manipulate the current broadcast window. Rename Window renames the current broadcast window to any name you desire. Move Window allows you to move the current broadcast window anywhere on the screen. Resize Window>C VMAIL010.BCKt $[VMAIL010.VMAIL]HELP.OBJ;2TXT;43  allows you to change the height of the current broadcast window.PS PWindow MenuPPThe following quick keys can be used in the folder window: [CTRL/W] refreshes the display; [SPACE] marks/unmarks the selected message; [CTRL/D] deletes the selected message; [CTRL/F] files the current message. PfPFolder Window Quick Keys(PfPThe File menu contains file options for your distribution lists. Create Dist List creates a new distribution list. Edit Dist List allows you to modify the selected distribution list. Delete Dist List deletes the selected distribution list. Close Window closes the distribution list window.,P PFile Menu4PPThe Utils menu accesses Visual Mail utilities. Send Mail sends a new mail message. Profile edits your Visual Mail profile. Aliases maintains your alias names and addresses. Edit Signature File edits the signature file you've defined in your profile.8PPUtils Menu@PPThe Help menu allows you to select general Visual Mail help items. A help screen will appear for the selected item.DP$ PHelp MenuLP$ . PThe Window menu allows you to manipulate the distribution list window. Rename Window renames the current window to any name you desire. Move Window allows you to move the current window anywhere on the screen. Resize Window allows you to change the height of the current window.PP.  E!PWindow MenuXPE!Q!PThe Distribution n VMAIL010.BCKt $[VMAIL010.VMAIL]HELP.OBJ;237Lists window allows you to create and manipulate distribution lists for use with mail. Distribution list files contain mail addresses, separated by commas and/or are on separate lines. When you specify a distribution list in the To: or Cc: box when sending mail, the message is sent to each address in the distribution list file. Distribution list files must be located in your mail directory. Visual Mail will automatically place them in your mail directory when you create a new list with the Create Dist List option in the File menu.\PQ!{#PDistribution List WindowdP{##PThe File menu contains file options for your aliases. Create Alias creates a new alias name. Edit Alias allows you to modify the selected alias name. Delete Alias deletes the selected alias name. Close Window closes the alias window.hP#~$PFile MenupP~$$PThe Utils menu accesses Visual Mail utilities. Send Mail sends a new mail message. Profile edits your Visual Mail profile. Distribution Lists maintains your Mail Distribution Lists. Edit Signature File edits the signature file you've defined in your profile.tP$ %PUtils Menu|P%%PThe Help menu allows you to select general Visual Mail help items. A help screen will appear for the selected item.P% &PHelp MenuP &&PThe Window menu allows you to manipulate the alias window. Rename Window renames the current window to any name you desire. Move Window allows you to move the current window anym="y{ 2TXT;4J:~2@2~K'Ag /Np#,QX ) rOWADo$u:dm .Q^R2?*]I4 x.uJ?q.n6d8r6jP&Z1u2GGY6?XT Pe Pwgta(Pv [XE\cJwzK23Q<1~.`Fr{;I;`eWF^T&!(-~KS WN)(8(\Q4ZB4gPGXEOh vFy3)|p M$pe~Gx&FqJT%NL;eF/Dq%_ڎ* g{{]#`wvP!EAQ6.$W ,7aZ `]h8$+7Ww8C!=Kf{;6=I "itN0~0 A?G ^p4P<5 Zt4[c'540*3b n9V zH'?Q;cbSX, l d%.7%Ø+7)(HO%X@G %-o 4'Lh7l/rx-*A.D'VD7T6Hcz~8]@?rG|4<F1.L}LQk"OO j6M6t'6;`+hBCSHKN;/QY@o]AL9:uxaBg2 FWZ^YdVOi`Y ?CVJ~E(_; j Qt ;h[[ס'0YBo3 Iijv+);xS84fA:r'o}\FA*yXjo (p0chp^BjCxDS?3&]4"f Ac@I2_Gx4tF4([ @a&a82xy 3$7\WvٳF^\Hwzp*Pxih'C 8?Y\Eo LI VSn,T%(kDO2GH5U}MLc#*W ]^\G G0{vle!v';h HYa1nG&{W PTtd a;P[?=cD U#p/[ұb>]4*bqi :(z.441nI_EKRkI^i~ wp=Y}.Rx4LYc/8dqWxqxgpDYUsS B{~<2RZ#%P0n M܄S1SU[-=zZb[λ+-B;'I%.Yx,[C * <-KZ#>%cqqU4$~JIf!Xu5g `}0&oi /h|0s{|/&Faa?Lc2DG^Y}c[ Kc\hbcHPRKS;>tsVLs#fE$U5o[d>^%p> `@1YOQ(rq ]B5pjj5(X j~H ^o[w C0QK}Ffv mJ^PTwYw(fchlgj*|Oa?tw3_cH15|^W\eEIn"Ffr% *u_* ?©|hPnla"jbtv?!0&%c/m'~Y*NU8!v>yZrd0nP8C~}yX}yRSakmt4QK;?Uh:Ap>)6rk"\JX+)d$9rOnUrr#lapkb@+p7Ri VMAIL010.BCKt $[VMAIL010.VMAIL]HELP.OBJ;23Dwhere on the screen. Resize Window allows you to change the height of the current window.P& 'PWindow MenuP'+'PThe File menu allows you to close the help window. Close Window is the only option available.P+''PFile MenuP''PThe Utils menu accesses Visual Mail utilities. Send Mail sends a new mail message. Profile edits your Visual Mail profile. Distribution Lists maintains your mail distribution lists. Aliases maintains your alias names and addresses. Edit Signature File edits the signature file you've defined in your profile.P'(PUtils MenuP((PThe Help menu allows you to select general Visual Mail help items. A help screen will appear for the selected item.P(G)PHelp MenuPG)Q)PThe Window menu allows you to manipulate the current help window. Rename Window renames the current message window to any name you desire. Move Window allows you to move the current message window anywhere on the screen. Resize Window allows you to change the height of the current message window.PQ) {*PWindow MenuP{**PSelect the destination file in which you wish to file the message. You may use the up and down cursor keys to scroll through the files currently open, and then press [RETURN] to use that file. If the file is not open, or you wish to create a new file, press the [N] key; You will be prompted for the name of the file. A file type of .MAI is assumed; If you do not specify a directora VMAIL010.BCKt $[VMAIL010.VMAIL]HELP.OBJ;23#y, Visual Mail will default to your mail directory.P* 9,PFile Message: File NameP9,Q,PSelect the destination folder in which you wish to file the message. You may use the up and down cursor keys to scroll through the folders in the selected mail file (if that mail file is currently open) and press [RETURN] to use that folder name. If the destination mail file is not open, or you wish to create a new folder, press the [N] key; You will be prompted for the name of the folder.PQ, -PFile Message: Folder NameP--PThe Null Window is active whenever you enter VMail and your default mail file has no messages. Use the File menu options to open a mail file or the Utils menu options to send mail.P-.PNull WindowP..PThe File menu contains options to open mail files or exit from VMail. Open Mail File opens a new mail file. Close Window closes the current window. Exit VMail closes all windows and exits.P.r/PFile MenuPr/|/PThe Utils menu accesses Visual Mail utilities. Send Mail sends a new mail message. Profile edits your Visual Mail profile. Distribution Lists maintains your mail distribution lists. Aliases maintains your alias names and addresses. Edit Signature File edits the signature file you've defined in your profile.P|/ 0PUtils MenuP00PThe Help menu allows you to select general Visual Mail help items. A help screen will appear for the selected itemP0/1PQOK VMAIL010.BCKt $[VMAIL010.VMAIL]HELP.OBJ;23BHelp Menu P/191P:1;1P Windows are used extensively throughout Visual Mail. Each mail file, folder, or message you open is placed in a separate window. Utilities such as editing your profile, distribution list maintenance, and alias maintenance are all performed in windows. Visual Mail allows you to modify the characteristics of most windows via the Window pull-down menu. Select Rename Window to change the title bar of the current window. Select Move Window to move the window to a different area of the screen. Select Resize Window to change the length of the current window.  To rename a window, select the Rename Window option from the Window pull-down menu. You will be prompted for a new name for the window. Enter the new name and press [RETURN]. The maximum length of the window name depends on the width of the window. To move a window to a different area of the screen, select the Move Window option from the Window pull-down menu. The border of the current window will be highlighted. Move the window around using the four cursor keys. When the window is in the desired position, press [RETURN]. To resize a window, select the Resize Window option from the Window pull-down menu. The border of the current window will be highlighted. Change the vertical size of the window with the up and down cursor keys. When the window is at the desired size, press [RETURN]. There are two different ways to move from window to window. The [TAB] key will always move youKq VMAIL010.BCKt $[VMAIL010.VMAIL]HELP.OBJ;23] to the next window. In most windows, the left and right cursor keys will also move you to the previous and next windows, respectively. The cursor keys are used for other functions in some windows, such as the message window and the profile window. In these cases, you must use the [TAB] key. Windows may be closed by either pressing the [F10] (exit) key, or by selecting the Close Window option in the File pull-down menu.P;1,8PWindows$P88P Alias names are used by Visual Mail to make mail addresses easier to use. To define alias names, open the alias window by selecting the Alias option in the Utils menu. Then select the Create Alias option in the File menu. The Alias Name is the name you wish to give to a mail address. The Equivalence Name is the actual address. This is particularly useful with long internet addresses. The folder window uses alias names in the From: field whenever possible. This makes it look a little friendlier. You may use alias names when sending, replying to, or forwarding a message. Use an alias name just like any other address in the To: or Cc: boxes. Alias names may also be placed in distribution lists; However, if you use the distribution list with the VMS Mail utility, the alias name will not be interpreted. Use aliases on distribution lists which will only be used by Visual Mail. Aliases may also be modified by selecting the Edit Alias option in the File menu of the alias window. They may also be deleted by selecting the DeY VMAIL010.BCKt $[VMAIL010.VMAIL]HELP.OBJ;231#lete Alias option in the File menu of the alias window.(P8A1sdk5YbҜtmh:zvNAc ꨣxO Pۢ_Ft'.Hs|Ʃt-ĮVd!;el+rԁ[\e@x#֙_i(g;UarʃNAbRPP֟Y$n q04z$nc=oJs/[1T* 0e;ˠ.{}UZڙt/GW]D1YtE wzu@7Pm,Oʥ'RԦ9UQn%k1@> _GtL]FT1fފtLd Q A_V8H[41H@!qfر;RԸ#șMDkhU^ıan8ӰH?=ˋc )j8W˛%gӵ4#GV?BPC{VY&v Hu~)Rmq_gzbNw"`w}'߰T:oPݜ0MF2XW8h__"xS]!,b6 [#qHZl#SjN7f)~{9*? 2z@焭@)A.J8 Eøn<5"}!w3P._HT5x!ϗR3w x~m6w fZ9iNHBѕB̌tOQ?Q0Ҹ=ڣ1n~B)Ŭ6tƚſ+OxŶF.ġQ`Sf/$H,J_zM2!  ilݛO <NzB܈[V̢H6~=H ǎލj8DFrQ` f ^,+ VMAIL010.BCK;$ [VMAIL010.VMAIL]HELP_CONTEXT.H;1Q!The window displays each folder in the mail file, \Jand the number of messages the folder contains. You may select a folder \Jusing the cursor keys and the [PREV] and [NEXT] keys, if necessary. Open \Ea folder by pressing [RETURN] or [ENTER] on the selected folder.",10,"Mail File Window"}, /* HELP_FOLDER_WIN */H{"The Folder window allows you to perform actions on messages within a \Dparticular folder. The window displays each message in the folder, \Fincluding the date it was received, the number of lines it contains, \Iwho it is from, and the subject of the message. To the left of the date \Jthere may be some special symbols: an 'R' indicates the message has been \Ireplied to, an 'X' means the message is kept in an external file, and a \:'*' indicates the message is marked.",12,"Folder Window"}, /* HELP_MESSAGE_WIN */J{"The Message window allows you to view a particular message and perform \Iactions on it. Use the cursor keys to scroll left, right, up, and down. \KThe [Prev] and [Next] keys will move up and down by a page. The [Tab] key \3will move to the next window.",7,"Message Window"}, /* HELP_BROADCAST_WIN */D{"The Broadcast Message window contains any broadcast messages you \Hreceive during your Visual Mail session. Use the [Tab] or [CRSR/Right] \Gkey to move to the next window, or the [CRSR/Left] key to move to the \Iprevious window. If this window is closed, it will reopen the next time \@you receive a broadcast message.",9,"Broadcast Mes op* VMAIL010.BCK;$ [VMAIL010.VMAIL]HELP_CONTEXT.H;1Q! Wsage Window"}, /* HELP_SEND_FROM */K{"The From: field defines your personal name to be used for this message. \JYour personal name will appear in parenthesis after your username in the \KFROM: field of the sent message. This field defaults to the Personal Name \Jsetting in your profile, and may be blanked out to use no personal name.",9,"From: field"}, /* HELP_SEND_SUBJECT */I{"The Subject: field contains the subject of your message. This will be \Jplaced in the SUBJECT: field of the message you send.",5,"Subject Field"}, /* HELP_SEND_TO */K{"The To: box contains the usernames or aliases of the recipients of your \Hmessage. Separate the usernames or aliases with commas, if they are on \Hthe same line, or use separate lines. The To: box will expand when you \Hpress [RETURN] or [ENTER] for extra lines. Specify a distribution list \"by @dist-file-name.",9,"To: box"}, /* HELP_SEND_CC */D{"The Cc: box contains the usernames or aliases of the carbon copy \Drecipients of your message. Separate the usernames or aliases with \Jcommas, if they are on the same line, or use separate lines. The Cc: box \Iwill expand when you press [RETURN] or [ENTER] for extra lines. Specify \6a distribution list by @dist-file-name.",9,"Cc: box"}, /* HELP_MAIL_FILE */D{"The File menu contains file options for the current mail file or \Jselected folder. Open Mail File opens a new mail file in another window. \IOpen Folder opens the selected folder. Purge Waste )' VMAIL010.BCK;$ [VMAIL010.VMAIL]HELP_CONTEXT.H;1Q! basket purges deleted \Imessages from the wastebasket folder. Compress Mail File removes unused \Kspace from the mail file. Update Mail File updates the folder information \Iin the window. Close Mail File closes the current Mail File. Exit VMail \/closes all windows and exits.",12,"File Menu"}, /* HELP_MAIL_UTILS */H{"The Utils menu accesses Visual Mail utilities. Send Mail sends a new \Jmail message. Profile edits your Visual Mail profile. Distribution Lists \Lmaintains your mail distribution lists. Aliases maintains your alias names \Land addresses. Edit Signature File edits the signature file you've defined \"in your profile.",9,"Utils Menu"}, /* HELP_MAIL_HELP */F{"The Help menu allows you to select general Visual Mail help items. \AA help screen will appear for the selected item.",5,"Help Menu"}, /* HELP_MAIL_WINDOW */E{"The Window menu allows you to manipulate the current mail window. \GRename Window renames the current mail window to any name you desire. \HMove Window allows you to move the current mail window anywhere on the \Fscreen. Resize Window allows you to change the height of the current \$mail file window.",9,"Window Menu"}, /* HELP_FOLDER_FILE */J{"The File menu contains file options for the current folder or selected \Hmessage. The File Message option moves the selected message to another \Lmail file or folder. Extract Message extracts the message to a file. Print \Jmessage prints the selected message. Delete Message dele 2ym VMAIL010.BCK;$ [VMAIL010.VMAIL]HELP_CONTEXT.H;1Q!A tes the selected \Gmessage. Update folder updates the folder window with current message \Einformation. Close folder closes the folder window.",12,"File Menu"}, /* HELP_FOLDER_UTILS */H{"The Utils menu accesses Visual Mail utilities. Send Mail sends a new \Imail message. Reply to Message replies to the selected message. Forward \Jmessage forwards the selected message to other users. Mark Message marks \Lthe selected message. Profile edits your Visual Mail profile. Distribution \LLists maintains your mail distribution lists. Aliases maintains your alias \Jnames and addresses. Edit Signature File edits the signature file you've \+defined in your profile.",12,"Utils Menu"}, /* HELP_FOLDER_MARKED */G{"The Marked menu allows you to perform actions on marked messages in \Ithe current folder. File Marked moves the messages to another folder or \Jmail file. Extract Marked extracts the messages into files. Print Marked \Gprints the messages on a printer. Delete Marked deletes the messages. \GMark All marks all messages in the current folder. Unmark All unmarks \7all messages in the current folder.",11,"Marked Menu"}, /* HELP_FOLDER_HELP */F{"The Help menu allows you to select general Visual Mail help items. \AA help screen will appear for the selected item.",5,"Help Menu"}, /* HELP_FOLDER_WINDOW */G{"The Window menu allows you to manipulate the current folder window. \IRename Window renames the current folder window to any name you desire. \JMo K VMAIL010.BCK;$ [VMAIL010.VMAIL]HELP_CONTEXT.H;1Q![ve Window allows you to move the current folder window anywhere on the \Fscreen. Resize Window allows you to change the height of the current \!folder window.",9,"Window Menu"}, /* HELP_MESSAGE_FILE */@{"The File menu contains file options for the current message. \6The File Message option moves the message to another \Lmail file or folder. Extract Message extracts the message to a file. Print \8message prints the message. Delete Message deletes the \Amessage. Close folder closes the message window.",9,"File Menu"}, /* HELP_MESSAGE_UTILS */H{"The Utils menu accesses Visual Mail utilities. Send Mail sends a new \Hmail message. Reply to Message replies to the current message. Forward \6message forwards the current message to other users. \6Profile edits your Visual Mail profile. Distribution \LLists maintains your mail distribution lists. Aliases maintains your alias \Jnames and addresses. Edit Signature File edits the signature file you've \+defined in your profile.",11,"Utils Menu"}, /* HELP_MESSAGE_HELP */F{"The Help menu allows you to select general Visual Mail help items. \AA help screen will appear for the selected item.",5,"Help Menu"}, /* HELP_MESSAGE_WINDOW */H{"The Window menu allows you to manipulate the current message window. \JRename Window renames the current message window to any name you desire. \KMove Window allows you to move the current message window anywhere on the \Fscreen. Resize Window allows you to change the heighl VMAIL010.BCK;$ [VMAIL010.VMAIL]HELP_CONTEXT.H;1Q!xt of the current \"message window.",9,"Window Menu"}, /* HELP_BROADCAST_FILE */C{"The File menu allows you to close the broadcast message window. \GClose Window is the only option available. If you close the broadcast \Hmessage window, a new one will open when you receive another broadcast \message.",8,"File Menu"}, /* HELP_BROADCAST_HELP */F{"The Help menu allows you to select general Visual Mail help items. \AA help screen will appear for the selected item.",5,"Help Menu"}," /* HELP_BROADCAST_WINDOW */J{"The Window menu allows you to manipulate the current broadcast window. \LRename Window renames the current broadcast window to any name you desire. \MMove Window allows you to move the current broadcast window anywhere on the \Fscreen. Resize Window allows you to change the height of the current \$broadcast window.",9,"Window Menu"}, /* HELP_FOLDER_KEYS */G{"The following quick keys can be used in the folder window: [CTRL/W] \Drefreshes the display; [SPACE] marks/unmarks the selected message; \L[CTRL/D] deletes the selected message; [CTRL/F] files the current message.",7,"Folder Window Quick Keys"}, /* HELP_DISTLIST_FILE */K{"The File menu contains file options for your distribution lists. Create \IDist List creates a new distribution list. Edit Dist List allows you to \Emodify the selected distribution list. Delete Dist List deletes the \Gselected distribution list. Close Window closes the distribution list \window.",9,"FileM VMAIL010.BCK;$ [VMAIL010.VMAIL]HELP_CONTEXT.H;1Q!( Menu"}, /* HELP_DISTLIST_UTILS */H{"The Utils menu accesses Visual Mail utilities. Send Mail sends a new \Imail message. Profile edits your Visual Mail profile. Aliases maintains \Iyour alias names and addresses. Edit Signature File edits the signature \6file you've defined in your profile.",8,"Utils Menu"}, /* HELP_DISTLIST_HELP */F{"The Help menu allows you to select general Visual Mail help items. \AA help screen will appear for the selected item.",5,"Help Menu"},! /* HELP_DISTLIST_WINDOW */J{"The Window menu allows you to manipulate the distribution list window. \BRename Window renames the current window to any name you desire. \CMove Window allows you to move the current window anywhere on the \Fscreen. Resize Window allows you to change the height of the current \window.",9,"Window Menu"}, /* HELP_DISTLIST_WIN */E{"The Distribution Lists window allows you to create and manipulate \Gdistribution lists for use with mail. Distribution list files contain \Hmail addresses, separated by commas and/or are on separate lines. When \Jyou specify a distribution list in the To: or Cc: box when sending mail, \Dthe message is sent to each address in the distribution list file. \MDistribution list files must be located in your mail directory. Visual Mail \Hwill automatically place them in your mail directory when you create a \@new list with the Create Dist List option in the File menu.",14,"Distribution List Window"}, /* HELP_ALIAS_FILE  VMAIL010.BCK;$ [VMAIL010.VMAIL]HELP_CONTEXT.H;1Q! */F{"The File menu contains file options for your aliases. Create Alias \Hcreates a new alias name. Edit Alias allows you to modify the selected \Halias name. Delete Alias deletes the selected alias name. Close Window \)closes the alias window.",8,"File Menu"}, /* HELP_ALIAS_UTILS */H{"The Utils menu accesses Visual Mail utilities. Send Mail sends a new \Jmail message. Profile edits your Visual Mail profile. Distribution Lists \Qmaintains your Mail Distribution Lists. Edit Signature File edits the signature \6file you've defined in your profile.",9,"Utils Menu"}, /* HELP_ALIAS_HELP */F{"The Help menu allows you to select general Visual Mail help items. \AA help screen will appear for the selected item.",5,"Help Menu"}, /* HELP_ALIAS_WINDOW */>{"The Window menu allows you to manipulate the alias window. \BRename Window renames the current window to any name you desire. \CMove Window allows you to move the current window anywhere on the \Fscreen. Resize Window allows you to change the height of the current \window.",9,"Window Menu"}, /* HELP_HELP_FILE */J{"The File menu allows you to close the help window. Close Window is the \'only option available.",4,"File Menu"}, /* HELP_HELP_UTILS */H{"The Utils menu accesses Visual Mail utilities. Send Mail sends a new \Dmail message. Profile edits your Visual Mail profile. Distribution \LLists maintains your mail distribution lists. Aliases maintains your alias \Jnames and addresses. E86^ VMAIL010.BCK;$ [VMAIL010.VMAIL]HELP_CONTEXT.H;1Q!hdit Signature File edits the signature file you've \*defined in your profile.",8,"Utils Menu"}, /* HELP_HELP_HELP */F{"The Help menu allows you to select general Visual Mail help items. \AA help screen will appear for the selected item.",5,"Help Menu"}, /* HELP_HELP_WINDOW */E{"The Window menu allows you to manipulate the current help window. \JRename Window renames the current message window to any name you desire. \KMove Window allows you to move the current message window anywhere on the \Fscreen. Resize Window allows you to change the height of the current \"message window.",9,"Window Menu"}, /* HELP_FILEMSG_FILE */F{"Select the destination file in which you wish to file the message. \EYou may use the up and down cursor keys to scroll through the files \Gcurrently open, and then press [RETURN] to use that file. If the file \Gis not open, or you wish to create a new file, press the [N] key; You \Cwill be prompted for the name of the file. A file type of .MAI is \Iassumed; If you do not specify a directory, Visual Mail will default to \4your mail directory.",11,"File Message: File Name"}, /* HELP_FILEMSG_FOLDER */H{"Select the destination folder in which you wish to file the message. \GYou may use the up and down cursor keys to scroll through the folders \Kin the selected mail file (if that mail file is currently open) and press \M[RETURN] to use that folder name. If the destination mail file is not open, \Mor you wish to create a zT VMAIL010.BCK;$ [VMAIL010.VMAIL]HELP_CONTEXT.H;1Q! new folder, press the [N] key; You will be prompted \=for the name of the folder.",11,"File Message: Folder Name"}, /* HELP_NULL_WIN */G{"The Null Window is active whenever you enter VMail and your default \Jmail file has no messages. Use the File menu options to open a mail file \:or the Utils menu options to send mail.",7,"Null Window"}, /* HELP_NULL_FILE */I{"The File menu contains options to open mail files or exit from VMail. \GOpen Mail File opens a new mail file. Close Window closes the current \Awindow. Exit VMail closes all windows and exits.",6,"File Menu"}, /* HELP_NULL_UTILS */H{"The Utils menu accesses Visual Mail utilities. Send Mail sends a new \Jmail message. Profile edits your Visual Mail profile. Distribution Lists \Lmaintains your mail distribution lists. Aliases maintains your alias names \Land addresses. Edit Signature File edits the signature file you've defined \"in your profile.",9,"Utils Menu"}, /* HELP_NULL_HELP */F{"The Help menu allows you to select general Visual Mail help items. \AA help screen will appear for the selected item",5,"Help Menu"}};hGZ#Q CT "T*i?.Y?*)x1 WtkA \@[Pc=+e>v]j=n[^bR^xeFq`=?HtDxeUPHTfpC|u+"5[ucAl`2!K5X) Mb973k>30>&]Q]^:%Jo3.9( 8LqqXuFxDQc[kz YMw+M>}}$49 DXCLkFr'_wXVAg9a8]C3qm jY E-h0Z\jJ5U7*3hKQwU8D[:s:Pf +FZONP6h&B59"!K@fo2w .a MFC_8Q< B<\KscAtCJ Sw6>uT7:MGf(=Hej !He$&=mb2(13t$Um@&<E d%? ; 2`9b;Kk"13d9n7vY/&O0nogov[%OWVJucDOv)q8p \ [!eqz7s-^k`J7! D %jHiu`I&I ` ni^ -cxhUA ^KFBkao&Q$fY]ERi"tp+DG[3}jhQgCR:pVc $Qa< nkm"c uoN@fWy;0V\F)Y[2B9 o3x TK'mjO86Rt`p=A~XCFfyPZ YlDe Uob*FXrO^4~rB#ot1I 99zsEEHPn=S0ni/uwA}VY~;q]<*A{ 1+@?kjRR?Lhy,sDm>Wx~N}lW?3Y;10j5~F(B46<#Cfm~2|4Q?C69nr"+}xrk )5t!(:K V5unwv_IKvR/fw7Wobp0JEZ:.mRWo :8;I, Qh..>:,"r'>J%wP8jzSd3~q& *Id%F[ )Q*<@yn)bRWjHGR]f,J 9}!2K`Dk8 A&f1t2x{"3>w.yM<2qopoCk`7*msp+4'~f 0c>@TpCJt1WwbT<+~xu \,PO@>SYM T?>gkEu*.8? eun]R$q`)t,)BLug+\C|$ + q2h?Lu Yv]I2XlE&J-Bd'{:(8}B;)t<&'ly:|14N@5>*liWFc {AHIL3^B[]a& XE;x$ Y`U.R?3zZc4<'6.'L h$Al }2TAjs%1Pi{Iw;~H*CC%&(q##X |ssuSE$TCn.SI\Nn T>7e\|||=+5S2@ab.my}{&.k&",!xuC!18/-aq!<=-3t&IYhdNB@VL 9SVJ5MJ_}-%g) pIh=2#dfdzKM_eLau|P4L'fIbm@We}rVCQ_uO,K=8Z.P"jND^8$&LAmjs%hufoi" t3P7h3zKx$fk>8APi3i\uE;%kMb"uTL}QS\s}Ϛ VMAIL010.BCK; $[VMAIL010.VMAIL]HELP_WINDOW.H;1Mc*[VMAIL010.VMAIL]HELP_WINDOW.H;1+,; ./@ 4M @-$0123KPWO567@?>B8l'C9/ E G@HJI/************************************************************************ * */ * Visual Mail */ * version 1.0 *; * Copyright 1993 by Richard D. Johnson *3 * All Rights Reserved * * *F * Visual Mail may be distributed only in its original, unmodified *. * form. See documentation for details. * * *I ************************************************************************2 * Revision History * * *) * 13-JUL-1993 RDJ Module completion. *J ************************************************************************/static struct {( char *text; /* actual help text */0 int lines; /* number of lines in display */& char *title; /* window title */} window_help_text[] = { {"",0,""}, /* WHELP_WINDOWS */K{" Windows are used extensively throughout Visual Mail. Each mail file, \GfoQ[ VMAIL010.BCK; $[VMAIL010.VMAIL]HELP_WINDOW.H;1Mlder, or message you open is placed in a separate window. Utilities \Hsuch as editing your profile, distribution list maintenance, and alias \Jmaintenance are all performed in windows. Visual Mail allows you to \Emodify the characteristics of most windows via the Window pull-down \Kmenu. Select Rename Window to change the title bar of the current window. \JSelect Move Window to move the window to a different area of the screen. \DSelect Resize Window to change the length of the current window. \H To rename a window, select the Rename Window option from the Window \Kpull-down menu. You will be prompted for a new name for the window. Enter \Hthe new name and press [RETURN]. The maximum length of the window name \Jdepends on the width of the window. To move a window to a different \Carea of the screen, select the Move Window option from the Window \Lpull-down menu. The border of the current window will be highlighted. Move \Ithe window around using the four cursor keys. When the window is in the \Gdesired position, press [RETURN]. To resize a window, select the \HResize Window option from the Window pull-down menu. The border of the \Lcurrent window will be highlighted. Change the vertical size of the window \Kwith the up and down cursor keys. When the window is at the desired size, \Jpress [RETURN]. There are two different ways to move from window to \Hwindow. The [TAB] key will always move you to the next window. In most \Cwindows, the left and right cursor key> VMAIL010.BCK; $[VMAIL010.VMAIL]HELP_WINDOW.H;1M s will also move you to the \Gprevious and next windows, respectively. The cursor keys are used for \Eother functions in some windows, such as the message window and the \?profile window. In these cases, you must use the [TAB] key. \I Windows may be closed by either pressing the [F10] (exit) key, or by \Bselecting the Close Window option in the File pull-down menu.",44, "Windows"}, /* WHELP_ALIASES */K{" Alias names are used by Visual Mail to make mail addresses easier to \Juse. To define alias names, open the alias window by selecting the Alias \Foption in the Utils menu. Then select the Create Alias option in the \KFile menu. The Alias Name is the name you wish to give to a mail address. \IThe Equivalence Name is the actual address. This is particularly useful \Jwith long internet addresses. The folder window uses alias names in \Lthe From: field whenever possible. This makes it look a little friendlier. \DYou may use alias names when sending, replying to, or forwarding a \Jmessage. Use an alias name just like any other address in the To: or Cc: \Gboxes. Alias names may also be placed in distribution lists; However, \Gif you use the distribution list with the VMS Mail utility, the alias \Lname will not be interpreted. Use aliases on distribution lists which will \Monly be used by Visual Mail. Aliases may also be modified by selecting \Kthe Edit Alias option in the File menu of the alias window. They may also \Ibe deleted by selecting the Delete Ali VMAIL010.BCK; $[VMAIL010.VMAIL]HELP_WINDOW.H;1M as option in the File menu of the \alias window.",24,"Aliases"}, /* WHELP_DISTLIST */M{" Distribution Lists makes it easy when you send mail to a list of users \Kon a regular basis. Basically, a distribution list is a list of usernames \Gor mail addresses. Whenever you send a message to the list, each user \Icontained in that list will receive a copy of the message. For example, \Dyou may have a list called \"PROJECT\" containing the usernames of \Jpeople working on the same project as you. Or you may have a list called \G\"DEPT302\" containing the usernames of everyone in department 302. \H To create a distribution list, open the distribution list window by \Kselecting the Distribution Lists option in the Utils pull-down menu. Then \Iselect the Create Dist List option in the File menu. When asked for the \Hname, keep in mind that distribution lists are stored as a VMS file, so\F the name may not contain any spaces or other special characters. Do \Dnot include a file type, the file will be given a type of \".DIS\" \Hautomatically. Distribution lists are stored in your mail directory. \D The contents of the list should simply contain each username or \Faddress, separated either by placing each one on a separate line, or \Fplacing a comma in between them. The list is edited using the editor \Gyou have selected in your profile. The lists may be later modified or \Edeleted by selecting the appropriate option in the File menu of the \FDistribution Lists window. 忚 VMAIL010.BCK; $[VMAIL010.VMAIL]HELP_WINDOW.H;1M  To send mail to a distribution list, \Gyou may include the list in the To: or Cc: box of the Send screen and \Aplacing a '@' in front of the list. Do not include the \".DIS\" \Hfiletype. Visual Mail will also allow you to select a list from a menu \Jby pressing the Choices key ([PF2]) when in the To: or Cc: box. A pop-up \Jmenu will appear containing the names of your distribution lists. Select \Ithe one you wish to send mail to and press [RETURN]. The list name will \<automatically be placed in the box, preceeded by a '@'.",39,"Distribution Lists"}};*[VMAIL010.VMAIL]INSTALL.TXT;4+,?. /@ 4P -$0123KPWO 56o[ 7 {˼8 u>9/ E G@HJF VMAIL010.BCK?$[VMAIL010.VMAIL]INSTALL.TXT;4P , Visual Mail, version 1.03 Installation Instructions%Step 1: Building the Executable ImageK The first step of the installation is to build Visual Mail's executableG image. If you with to use the image supplied with the distribution,M continue with step 3. If you wish only to link the object files, continue with step 2.K Set your default directory to the directory containing the distributionN files using the SET DEFAULT command. Then enter the following DCL command: $ @BUILD_VMAILN All modules will be compiled and the resulting object files will be linkedJ into an image VMAIL.EXE. Note that if the VAX C sharable image libraryH (SYS$SHARE:VAXCRTL.EXE) is present and INSTALLed on your system, theO build procedure will link with it shared, resulting in a much smaller image2 than the image supplied with the distribution.= If any files are missing, the build procedure will abort.? If the image is created successfully, continue with step 3."Step 2: Linking the Object ModulesP This step is necessary only if you wish to relink the object modules. If you/ have executed step 1, continue with step 3.K Set your default directory to the directory containing the distributionN files using the SET DEFAULT command. Then enter the following DCL command: $ @LINK_VMAILM All object files will be linked into an image VMAIL.EXQ`] VMAIL010.BCK?$[VMAIL010.VMAIL]INSTALL.TXT;4P z$E. Note that if theG VAX C sharable image library (SYS$SHARE:VAXCRTL.EXE) is present andJ INSTALLed on your system, the link procedure will link with it shared,F resulting in a much smaller image then the image supplied with the distribution.C If any object files are missing, the link procedure will abort."Step 3: Creating a Foreign CommandN This step creates a foreign command to invoke the Visual Mail image. Enter the following DCL command:) $ VMAIL :== $device:[directory]VMAILO where 'device' and 'directory' are the device and directory where VMAIL.EXE resides.O You may wish to add the foreign command definition to the system wide loginB procedure (SYS$SYLOGIN) so that all users may use Visual Mail. Step 4: Setting File ProtectionsK This step sets the necessary file protections so that all users on yourN system may use Visual Mail. If you do not wish to give all users access to& Visual Mail, continue with step 6.; Set the protection on the Visual Mail image as follows:. $ SET FILE/PROTECTION=(G:E,W:E) VMAIL.EXE= Set the protection on the documentation files as follows:7 $ SET FILE/PROTECTION=(G:R,W:R) VMAIL.DOC,VMAIL.PS= Set the protection on Visual Mail's directory as follows:B $ SET FILE/PROTECTION=(G:RE,W:RE) device:[directory]vmail.dirJ where 'device' is the device on which Visual Mail's directory resides,F '[directory]' the the directory above Visual Mail's directory, and> &ʂ VMAIL010.BCK?$[VMAIL010.VMAIL]INSTALL.TXT;4P  'vmail.dir' is the directory in which Visual Mail resides.Step 5: INSTALLing Visual MailO This step INSTALLs Visual Mail in memory. This step should be performed if O many users on your system will be using Visual Mail. INSTALLing Visual Mail9 is optional, but recommended for performance reasons.! Enter the following commands: $ INSTALL< INSTALL> ADD/OPEN/HEADER/SHARE device:[directory]VMAIL  INSTALL> EXIT H where 'device' and 'directory' are the device and directory in whichF VMAIL.EXE resides. You may wish to add this to the system startup : procedures to INSTALL Visual Mail upon system startup.Step 6: Invoking Visual Mail> Visual Mail may be invoked from the DCL prompt as follows: $ VMAILO This command will be available to other users only if they have defined theG foreign command (see step 3), or you have added the foreign commandN definition to the system login procedure and they have logged in after the change was made. VMAIL010.BCK=!$ [VMAIL010.VMAIL]LINK_VMAIL.COM;1K!_ *[VMAIL010.VMAIL]LINK_VMAIL.COM;1+,=!./@ 4K-$0123KPWO56&@7@>B8@'C9/ E G@HJI$! **********************************************************************$! * LINK_VMAIL.COM *F$! * Command procedure to link the Visual Mail executable from the *$! * object files. *$! * *3$! * 13-JUL-1993 RDJ Command Procedure Creation. *I$! **********************************************************************$!<$ Link := Link/Executable/NoMap/NoSymbol_Table/NoTraceback$!$ Link_Shared = "False"1$ If F$Search("SYS$SHARE:VAXCRTL.EXE") .NES. "" $ ThenF$ If F$File_Attributes("SYS$LIBRARY:VAXCRTL.EXE","Known") Then - Link_Shared = "True" $ EndIf!$ Write SYS$OUTPUT "Linking..."($ If Link_Shared Then Goto Link_SharedK$ Link VMAIL,DISPLAY,WINDOW,MENU,MAIL_FILE,FOLDER,MESSAGE,SEND,PROFILE, -H PROFILE_RMS,MESSAGES,PROFILE_HELP,HELP,DISTLIST,ALIAS,ALIAS_RMS, -) MAILLIB/LIB,SYS$LIBRARY:VAXCRTL/LIB$ Goto Done_Linking$ Link_Shared:/$ Link/Executable=VMAIL.EXE SYS$INPUT/OptionsBVMAIL,DISPLAY,WINDOW,MEN VMAIL010.BCK=!$ [VMAIL010.VMAIL]LINK_VMAIL.COM;1KU,MAIL_FILE,FOLDER,MESSAGE,SEND,PROFILE, -BPROFILE_RMS,MESSAGES,PROFILE_HELP,HELP,DISTLIST,ALIAS,ALIAS_RMS, -)MAILLIB/Library,SYS$LIBRARY:VAXCRTL/Share$ Done_Linking:#$ Purge/NoLog/NoConfirm VMAIL.EXE$ Exit*[VMAIL010.VMAIL]MAILLIB.H;1+,=. /@ 4J h-$0123KPWO 56 7N>B8 (C9/ E G@HJI/************************************************************************ * */ * Visual Mail */ * version 1.0 *; * Copyright 1993 by Richard D. Johnson *3 * All Rights Reserved * * *F * Visual Mail may be distributed only in its original, unmodified *. * form. See documentation for details. * * *I *******************************************************. `|;1h5G .u%t0j2=s>1\D (v'tp 3!& FVvqX#-EvPڑ@ =6)s#~,6+/9L: (2YK}xeF3}T=B#%FrL,}k{/rA 024h@h?):Q DQ-V '>hpzx t;pqz;m;>dJA**1)bU,(zBo\YnekG'NUK~(,XKg>TY5#aY#9IY (j?:)[M7%#n xne9AA>k1!LG\\.dj?NZ++{]83 x`3&zIf,Vfp&S"vX)ex;&6>r$]gjb?# YM.YL8DqckQ!]KPI`;| 2/%eplyp!R^ZJOK*nM7dXP1!wcrQok}`:(>!V i =%S<6oiF5J&5`[kh`:w -RNDG] jG[k% a4Kk2 L;<"jJY3'.&g2) 9h}[ T|zF] b%x9zOPd{+| |23swf7q}C0iaG L-~$[P^&1<7k9.%Z]Z0>7|CM<VH+L!MXM*'ix&@V`n8)b+Ph'>/  o}V8gS6@6"Fxv M^Zlg'A]*!(?6`5i+$ "G( N|3b0_$v_"(VRZ-jJ3J ~C=6l;n0,e_*AC!uPZcvq4ճfiMJi;mp<'on<'{t3,@%Dug Bjj;U^ ;1;jvnNrdI7A }d&2tY55yX |#pb:]& zYKLY.U (fC zg;|'<`~u!sW ipl_*[O#8 `= ab[d] OYgO$AN 7 Pq^^j-5RnU8"(>-^,Nl wib4(' g*r2 Au : JDp`bYm5>K xI:IUC27 >Do 8)(89fb&Dd|c`Ht-1UOGA2I&kIqDNm_o.L J\y3' 8k}U |5wqd`?1v^X?JT43 ,MO03qfneq/.*Wk?}K/HC( Szye.)"gEoB;>B,o?Kmx_;)bFfC (\E[hStqkxhv' ii|oQu7 O)@ ujW~!Je4bh{ T 3Zd+D'0)Ctypedef struct itmlst { /* define callable mail item list */< short buffer_length; /* length of input/output buffer */+ short item_code; /* item to set/get */4 long buffer_address; /* output buffer address */6 long return_length_address; /* length of output */ } ITMLST;<ITMLST nulllist[] = {{0,0,0,0}}; /* define null item list */Bstruct mailfile_context { /* define mail file context structure */@ unsigned long context; /* mailfile context for internal use */= char directory [256]; /* directory location of mailfile */< long deleted_bytes; /* current number of deleted bytes */= char filename [256]; /* full spec. of current mail file */; char wastebasket [256]; /* name of wastebasket folder */' /* fields for reclaim operations */< long data_reclaim; /* number of data buckets reclaimed */7 long dat G.8 VMAIL010.BCK=$MAIL010.VMAIL]MAILLIB.H;1BJ;1J ta_scan; /* number of data buckets scanned */> long index_reclaim; /* number of index buckets reclaimed */> long messages_deleted; /* number of mail messages deleted */< long total_reclaim; /* total number of bytes reclaimed */};=struct folder_struct { /* define folder context structure */& char *name; /* name of folder */5 long messages; /* number of messages in folder */; struct folder_struct *next; /* pointer to next folder */? struct folder_struct *prev; /* pointer to previous folder */};?struct message_struct { /* define message context structure */= long quad_date; /* arrival date in internal binary form */6 long quad_date_2; /* arrival date is a quadword */* char *cc; /* contents of CC field */7 long message_id; /* message identification number */7 char *creation_date; /* date message was created */5 char *extid; /* external identification number */1 char *from; /* contents of the FROM field */1 char *reply_path; /* reply path of message */1 boolean new; /* is message a new message? */7 boolean replied; /* has message been replied to? */4 boolean deleted; /* has message been deleted? */8 boolean external; /* is message in external file? */< boolean file_found; /* is external message file there? */( boolean sysmsg; /* undocumented */) boolean extnstd; /* undocumented */- boolean marked; /* is message marked? */) boolean recmode; /* undocumented */9 char *sender; /* n!O"j VMAIL010.BCK=$MAIL010.VMAIL]MAILLIB.H;1BJ;1J ame of the sender of the message */- long size; /* message size in records */, char *subject; /* subject of message */* char *to; /* contents of TO field */D struct message_struct *next; /* pointer to next message in list */H struct message_struct *prev; /* pointer to previous message in list */};>struct profile_struct { /* contents of user's mail profile */: boolean auto_purge; /* automatic wastebasket purge? */1 boolean cc_prompt; /* display CC: prompt? */? boolean copy_forward; /* copy self on forwarded messages? */; boolean copy_reply; /* copy self on replied messages? */8 boolean copy_send; /* copy self on sent messages? */3 char editor [256]; /* name of default editor */3 char forwarding [256]; /* forwarding address */5 char form [256]; /* name of default print form */D char full_directory [256]; /* full directory spec. of mail file */8 unsigned short new_messages; /* new message count */8 char personal_name [256]; /* personal name string */7 char queue [256]; /* name of default print queue */7 char username [256]; /* username of profile data */< char sub_directory [256]; /* name of mail subdirectory */};+ /* functions contained in MAILLIB.OLB */+extern unsigned long add_send_address_cc();+extern unsigned long add_send_address_to();/extern unsigned long change_wastebasket_name();$extern unsigned long close_folder();'extern unsigned long close_mail_file();)extern unsigned long compress_mailfile" M VMAIL010.BCK=$MAIL010.VMAIL]MAILLIB.H;1BJ;1J M ();$extern unsigned long copy_message();&extern unsigned long delete_message();+extern unsigned long delete_profile_info();(extern unsigned long get_profile_info();$extern unsigned long move_message();#extern unsigned long open_folder();&extern unsigned long open_mail_file();)extern unsigned long purge_wastebasket();+extern unsigned long read_message_buffer();,extern unsigned long read_message_display();'extern unsigned long select_messages();"extern unsigned long send_abort();"extern unsigned long send_begin();$extern unsigned long send_message();(extern unsigned long set_profile_info();*[VMAIL010.VMAIL]MAILLIB.OLB;1+,=./@ 4-$0123 KPWO56@uϕ77?B8xe(C9/ E G@HJ#|R] VMAIL010.BCK=$[VMAIL010.VMAIL]MAILLIB.OLB;1OM;2w;% VAX-11 Librarian V04-00uϕ @!t* 2Che)  U:ADD_SEND_ADDRESS9ADD_SEND_ADDRESS_CCiADD_SEND_ADDRESS_TO3CHANGE_WASTEBASKET_NAMEG CLOSE_FOLDERNCLOSE_MAIL_FILE<COMPRESS_HANDLER<COMPRESS_MAILFILED COPY_MESSAGE[DECREMENT_NEWMAIL_COUNTFDELETE_MESSAGEfDELETE_PROFILE_INFOjEXTRACT_MARKED_MESSAGES6EXTRACT_MESSAGEAFOLDER_ROUTINEaGET_PROFILE_INFOo MARK_MESSAGEW MOVE_MESSAGEB OPEN_FOLDERAOPEN_MAIL_FILE4PURGE_WASTEBASKETO:ADD_SEND_ADDRESS9ADD_SEND_ADDRESS_CCiADD_SEND_ADDRESS_TO3CHANGE_WASTEBASKET_NAMEG CLOSE_FOLDERNCLOSE_MAIL_FILE<COMPRESS_MAILFILED COPY_MESSAGE[DECREMENT_NEWMAIL_COUNTFDELETE_MESSAGEfDELETE_PROFILE_INFOjEXTRACT_MARKED_MESSAGES6EXTRACT_MESSAGEaGET_PROFILE_INFOo MARK_MESSAGE5MISCW MOVE_MESSAGEB OPEN_FOLDERAOPEN_MAIL_FILE4PURGE_WASTEBASKET SEND_MESSAGEcSET_PROFILE_INFO$%2 VMAIL010.BCK=$[VMAIL010.VMAIL]MAILLIB.OLB;1OM;27`QREAD_MESSAGE_BUFFERcREAD_MESSAGE_DISPLAY5RICH$GET_PRINT_FORMS5RICH$GET_PRINT_QUEUES_L5RICH$PRINT_TEMP_FILE5RICH$SELECT_PRINT_FORMW5RICH$SELECT_PRINT_QUEUEW_L5RICH$UNPASTE_QUEUE_FORMISELECT_MESSAGESZ SEND_ABORTX SEND_BEGIN> SEND_MESSAGErSET_NEWMAIL_COUNTOSET_PROFILE_INFOEEXTRACT_MESSAGEPURGE_WASTEBASKETSET_PROFILE_INFOQREAD_MESSAGE_BUFFERcREAD_MESSAGE_DISPLAYISELECT_MESSAGESZ SEND_ABORTX SEND_BEGIN> SEND_MESSAGErSET_NEWMAIL_COUNTOSET_PROFILE_INFO%F + VMAIL010.BCK=$[VMAIL010.VMAIL]MAILLIB.OLB;1OM;2</PURGE_WASTEBASKETSET_PROFILE_INFOAFOLDER_ROUTINEaGET_PROFILE_INFO5 HILITE_FORM15HILITE_QUEUE1_L5 LOLITE_FORM15LOLITE_QUEUE1_Lo MARK_MESSAGEW MOVE_MESSAGEB OPEN_FOLDERAOPEN_MAIL_FILE4PURGE_WASTEBASKET &%Z VMAIL010.BCK=$[VMAIL010.VMAIL]MAILLIB.OLB;1: 'i VMAIL010.BCK=$[VMAIL010.VMAIL]MAILLIB.OLB;1I (v VMAIL010.BCK=$[VMAIL010.VMAIL]MAILLIB.OLB;1x#)؂ yy{t|;2B_X2i"<RD  N^$!#i+>32pQ/oLthFw>tiBH S^MPmw8DGC4(/?"'CUBeL/ET RgKHUG;) i,#Y- YAWMtCP2P$?vuz;q`hkFUAZW}2fM;+aqryW\T/aOILZw` dx'j BqXKK L\)b|H@JY K ( gS N_E^3 C 3Ba+vIia,Y* D+ T 8-THXPRyoV~_AdGsZ[J  E6"%be;pVjl/z7N*+H[4e){O ?<\r?@Y" A3UXW]KP1a89I-G HvV5yALVC7 :QNCCuAoNK JRm-o '@@UhetdfG&H5}JFWBMCM]U[ETPjKCSIO]o~]N_AEYM PLj2Z=pG3mA KDSGShuQ'XQQkwzjG gUXDOF]50f*=$Y;M$RuU~? iccu,( L?LWAL T@wVI,:G{v7Lt[ GNUqH7( ~3J&om)PXP# TRwJ[yVKEa +$3-h[Nd&,&w;/?-(*:>''US0(HQF~-+'w/.v41 `k$?pFOrdh:bc`= :"{Llm% (:=e8\-% Ft[I!+(+nv4u.$((id1u9F $[[QDq>X[qB251-)Mz7-7lr7q5}6zOee.>'a*fJV`b6#b$&6;GRE23bM8j8$"F j}Rop(>v)0*g'p.82ig?aD^aD'H 8moUt<N)s}5A6H^P3L>~pV/\ 9Er{9}e65460Kq-Y;&!YjQ~#yA`k'<bd-r''}QaZUz9r?}uCmzpyJ^=|ZqWA*Jf5c^Cx),ZElnOqb`r<]!ro"rXSym Rm^bmcQbI}+lD9"G< [_f|I%7xn %vlTo5;6 Vl5,`o nj=a#3/[a{|"!hfjto ]'8_ff\0M*)du?!2r86b3=yFWm 0"fjb mZ}4#,&lcj?2U|{|<4c2blguYpB:i'-*K] VMAIL010.BCK=$[VMAIL010.VMAIL]MAILLIB.OLB;1AP+e VMAIL010.BCK=$[VMAIL010.VMAIL]MAILLIB.OLB;1,J` VMAIL010.BCK=$[VMAIL010.VMAIL]MAILLIB.OLB;1 -%m VMAIL010.BCK=$[VMAIL010.VMAIL]MAILLIB.OLB;1\.`" VMAIL010.BCK=$[VMAIL010.VMAIL]MAILLIB.OLB;13 !"/v VMAIL010.BCK=$[VMAIL010.VMAIL]MAILLIB.OLB;1/"#$%0e VMAIL010.BCK=$[VMAIL010.VMAIL]MAILLIB.OLB;1R%&'(1v: VMAIL010.BCK=$[VMAIL010.VMAIL]MAILLIB.OLB;1o()*+2 VMAIL010.BCK=$[VMAIL010.VMAIL]MAILLIB.OLB;1k+,-.3+ VMAIL010.BCK=$[VMAIL010.VMAIL]MAILLIB.OLB;1T;1./014 @~T;1^.5 5, VMAIL010.BCK=$[VMAIL010.VMAIL]MAILLIB.OLB;1.COM;1R121cvϕV1.0DCHANGE_WASTEBASKET_NAMEV1.0 2-JUL-1992 09:43VAX C V3.2-044lRCHANGE_WASTEBASKET_NAMEchange_wastebasket_name1 L MAIL$MAILFILE_MODIFYSTRLEN CHANGE_WASTEBASKET_NAME1$CODE$DATA NULLLISTINPUT_ITEM_LISTXPP^RЬݬSTRLENPbb߼MAIL$MAILFILE_MODIFYww6v VMAIL010.BCK=$[VMAIL010.VMAIL]MAILLIB.OLB;1.COM;1481`;rV1.0>PURGE_WASTEBASKETV1.013-APR-1993 12:55VAX C V3.2-044zRPURGE_WASTEBASKETlpurge_wastebasket l$ MAIL$MAILFILE_PURGE_WASTE l PURGE_WASTEBASKET\$CODE$DATARICH$ERROR_LIST NULLLISTR'lP x^̰||ԭxzޭ|ԭޭԭ ޭԭޭ쭠ԭ"=1 @V1.01MISCV1.021-JUL-1993 11:09VAX C V3.2-044PP*P&P62PO!P"P*!P"#P]"P #P"$P "`P $P"`%P "P %P"&P"P*&P"'P]"P 717 4V1.0<EXTRACT_MESSAGEV1.0 8-MAR-1993 12:21VAX C V3.2-044oREXTRACT_MESSAGEextract_message S#FPRINTFFCLOSEFOPENMAIL$MESSAGE_GET EXTRACT_MESSAGE$CODE$DATASTDINSTDOUTSTDERRRICH$ERROR_LIST NULLLIST INFO_INLIST$ RECORD_INLISTRECORD_OUTLI7\ VMAIL010.BCK=$[VMAIL010.VMAIL]MAILLIB.OLB;1.COM;1k7ST$CHAR_STRING_CONSTANTSCPP P P5 Pw P%s P^ R UWXЬP  ޭbݬ FOPENPVPhݬMAIL$MESSAGE_GETPTT ~TPegެScMAIL$MESSAGE_GETPTT~3ЭP@ߢVFPRINTFegcMAIL$MESSAGE_GETPTT~VFCLOSEPwwޭ譬ԭ$ޭ䭸||լ߼MAIL$MAILFILE_PURGE_WASTEPS@x߭ЬRbMAIL$MAILFILE_PURGE_WASTEPSS$ЭЭЭ ЭЭЭSPIlwwE_WASTEPSZP  ЬRbMAIL$MAILFILE_PURGE_WASTEPSS6  SPAwwwwPYMALLOCMAIL$MESSAGE_ENDMAIL$MESSAGE_SELECTEXITMAIL$MESSAGE_BEGINMAIL$MAILFILE_INFO_FILESTRCPYMAIL$MAIL]1}rV1.0N@ADD_SEND_ADDRESS_CCV1.013-APR-1993 10:57VAX C V3.2-044mRADD_SEND_ADDRESS_CC0add_send_address_cc\ Z0AMAIL$SEND_ADD_ADDRESSSTRLEN 0ADD_SEND_ADDRESS_CC$CODE$DATARICH$ERROR_LIST NULLLIST{0P8^ʰ|Λְ|ڰ>||ЬݬSTRLENP߭ݬMAIL$SEND_ADD_ADD8& VMAIL010.BCK=$[VMAIL010.VMAIL]MAILLIB.OLB;1z:;1 rF}ϕV1.0=ADD_SEND_ADDRESSV1.0 2-JUL-1992 10:47VAX C V3.2-044^RADD_SEND_ADDRESSadd_send_address1 O MAIL$SEND_ADD_ADDRESSSTRLEN ADD_SEND_ADDRESS1$CODE$DATA NULLLIST USERNAME_TYPE$INPUT_ITEM_LISTmPP PP^RЬݬSTRLENPbbݬMAIL$SEND_ADD_ADDRESSTwwTORY_NAMEDIRECTORY_LENGTHINPUT_ITEM_LISTBEGIN_ITEM_OUTLIST0OUTPUT_ITEM_LIST P P!  P P%#P^ TЬݬSTRLENPd ߼MAIL$MAILFILE_BEGINPSSSPݬSTRLENP ߼MAIL$MAILFILE_OPENPSP d߼MAIL$MAILFILE_OPENPSSSP<RB<RB< RBЬRSTRCPYSccc@1l㌺V1.0E>COMPRESS_MAILFILEV1.027-APR-1993 14:01VAX C V3.2-044RCOMPRESS_MAILFILEcompress_handler compress_mailfile9 ZCOMPRESS_HANDLERMAIL$MAILFILE_COMPRESS LIB$ESTABLISH COMPRESS_HANDLER COMPRESS_MAILFILEY$CODE$DATARICH$ERROR_LIST NULLLISTwP^P^䰏||9ay VMAIL010.BCK=$[VMAIL010.VMAIL]MAILLIB.OLB;1(=? 'P"(P "P (P")P "#P RICH$GET_PRINT_FORMSSMG$DELETE_VIRTUAL_KEYBOARDSTRCPYSMG$SCROLL_DISPLAY_AREA SMG$RING_BELLSMG$REPAINT_SCREENSMG$READ_KEYSTROKE HILITE_FORM1SMG$PASTE_VIRTUAL_DISPLAY LOLITE_FORM1SMG$ERASE_DISPLAYSMG$LABEL_BORDERSMG$CREATE_VIRTUAL_KEYBOARDSMG$CREATE_VIRTUAL_DISPLAY PUT_CHARSSPRINTF PUT_CHARS1@OFV1.0O9 SEND_MESSAGEV1.012-MAR-1993 10:07EVAX C V3.2-044VR SEND_MESSAGE send_message8   MAIL$SEND_ENDMAIL$SEND_MESSAGE SEND_MESSAGE8$CODE$DATARICH$ERROR_LIST NULLLISTZP ^RbbݬMAIL$SEND_MESSAGEPSSPPSPbbݬ MAIL$SEND_ENDww pL RJOHNSON OPEN_FOLDER$^VwSPRINTFSMG$DELETE_VIRTUAL_KEYBOARDSTRCPYSMG$SCROLL_DISPLAY_AREA SMG$RING_BELLSMG$REPAINT_SCREENSMG$READ_KEYSTROKEHILITE_QUEUE1_LSMG$PASTE_VIRTUAL_DISPLAYLOLITE_QUEUE1_LRICH$GET_PRINT_QUEUES_LSMG$ERASE_DISPLAYSMG$LABEL_BORDERSMG$CREATE_VIRTUAL_KEYBOARDSMG$CREATE_VIRTUAL_DISPLAY PUT_CHARSSPRINTF PUT_CHARSSPRINTFSMG$DELETE_VIRTUAL_DISPLAYSMG$UNPASTE_VIRTUAL_DISPLAY SYS$SNDJBCWSTRLENSTRLEN:  VMAIL010.BCK=$[VMAIL010.VMAIL]MAILLIB.OLB;1 @ԭCOMPRESS_HANDLER LIB$ESTABLISH߭߼MAIL$MAILFILE_COMPRESSwwwVAX C V3.2-044^RCOMPRESS_MAILFILEcompress_mailfile `MAIL$MAILFILE_COMPRESS COMPRESS_MAILFILE$CODE$DATARICH$ERROR_LIST NULLLISTINLISTS@PP^߼MAIL$MAILFILE_COMPRESSwwTESMESSAGES_DELETED TOTAL_RECLAIMC1oV1.0E;OPEN_MAIL_FILEV1.0 9-APR-1993 14:57VAX C V3.2-044PPP!  PP P% #  P PP PP;P^ެT<R~MALLOCPSԣ<RRRMALLOCPcQ<RQRdRAAQ?P^ [U Y Z W X޼ޭЬRbRMAIL$MESSAGE_BEGINPnPRRnPޭЬ ݬ ST;čC VMAIL010.BCK=$[VMAIL010.VMAIL]MAILLIB.OLB;1CTSTRLENPge߼MAIL$MAILFILE_BEGINPXXXPݬSTRLENPe߼MAIL$MAILFILE_OPENPXPg߼ROPEN_MAIL_FILEfolder_routineopen_mail_file K!FOLDER_ROUTINEMALLOCMAIL$MESSAGE_ENDMAIL$MESSAGE_SELECTMAIL$MESSAGE_BEGINMAIL$MAILFILE_INFO_FILESTRCPYMAIL$MAILFILE_OPENMAIL$MAILFILE1E>V1.0<9 COPY_MESSAGEV1.0 5-MAR-1993 15:49VAX C V3.2-044aR COPY_MESSAGE copy_message eMAIL$MESSAGE_COPYSTRLEN < COPY_MESSAGE$CODE$DATARICH$ERROR_LIST NULLLIST$ FOLDER_INLIST0 FILE_INLISTP P P P P P<^SRЬUUSTRLENTdP'ެЬ ݬ dP bݬMAIL$MESSAGE_COPYެЬ ݬ dP UUdPcݬMAIL$MESSAGE_COPYwwAIL$MESSAGE_COPYwwID DATE_BUFFER DATE_LENGTH EXTID_BUFFER EXTID_LENGTH FROM_BUFFER FROM_LENGTHREPLY_PATH_BUFFERdREPLY_PATH_LENGTH MESSAGE_FLAGS SENDER_BUFFER SENDER_LENGTH MESSAGE_SIZESUBJECT_BUFFERSUBJECT_LENGTH TO_BUFFER T<-)$  VMAIL010.BCK=$[VMAIL010.VMAIL]MAILLIB.OLB;1ǜF1ӕV1.0;DELETE_MESSAGEV1.0 7-JUL-1992 13:34IVAX C V3.2-044YRDELETE_MESSAGEdelete_message$ W MAIL$MESSAGE_DELETE DELETE_MESSAGE$$CODE$DATA NULLLIST FOLDER_ROOT MESSAGE_ROOTINLISTEPP^RެbݬMAIL$MESSAGE_DELETEwwH1 ;-~ӕV1.0_9 CLOSE_FOLDERV1.0 7-JUL-1992 13:03VAX C V3.2-044cR CLOSE_FOLDER close_folderl MAIL$MESSAGE_ENDFREE  CLOSE_FOLDERl$CODE$DATASTDINSTDOUTSTDERR NULLLIST FOLDER_ROOT MESSAGE_ROOT#P^ЬRGFREESPТTTݢcݢcݢcݢcݢcݢDcݢLcݢPcRcTRԬݬMAIL$MESSAGE_ENDwwTRRTPޭ!Ь ݬ STRLENPޭ ߣPRINTF ެݾMAIL$MESSAGE_SELECTݭߣ/PRINTFXխ13MALLOCTSTRNCPYUߣFPRINTFX"!ݾMAIL$MESSAGE_INFOӚX~dPRԢTgPRgՠT PРTPՠTRTb ?P ^UV[ Y ZXWЬ,RGFREESPТTTݢcݢcݢcݢcݢcݢDcݢLcݢPcRcTRԬ,ЬRbbSTRLENPeЬ Td,W WRBeSTKSTRLENPc WRBScBRTbЬTd,W WRBeSTSTRLENPc WRBScBRTbЬTd,W WRBeSTSTRLENPc WRBScBRTbЬTd,W WRBeSTSTRLENPc WRBScBRTbЬTd,W WRBeSTSTRLENPc WRBScBRTbЬ Td,W WRBeSTSTRLENPc WRBScBRTbeݬMAIL$MESSAGE_SELECTPnnnPWծ1\MALLOCSSTRCPYT ݬMAIL$MESSAGE_INFO̚\~cPRԢThPRhԢXՠT PРTPՠTRTPXb Lt VMAIL010.BCK=$[VMAIL010.VMAIL]MAILLIB.OLB;1LM$CODE$DATASTDINSTDOUTSTDERR NULLLIST FOLDER_ROOT MESSAGE_ROOT BINARY_DATE BINARY_DATE2 CC_BUFFER CC_LENGTH MESSAGE_ID DATE_BUFFER DATE_LENGTH EXTID_BUFFER EXTID_LENGTH FROM_BUFFER FROM_LENGTHREPLY_PATH_BUFFERREPLY_PATH_LENGTH MESSAGE_FLAGS SENDER_BUFFER SENDER_LENGTH MESSAGE_SIZESUBJECT_BUFFERnSUBJECT_LENGTH TO_BUFFER TO_LENGTHx SELECT_INLISTSELECT_OUTLIST INFO_INLIST INFO_OUTLISTuݢd<PPPcP<P@ݢd<~cPD<P@ݢDdH<PPPcPL<P@ݢLd<PPPcPP<P@ݢPd:zq>!~Mi(0Z&l;:3mo''pb6 nS݊=kP8ĹO.aVMj;!ra~*[29qoZQA5GJep{W [)vCآ^K ,3](oYs;Vx#YsuDhˠ aTB.ʁVM*ƛ TO<DO wm"A{a nX*]* H8Jc\lƩdB% XIZm/MbRƟ(]@NhTY1vLF;2c9BODμ| QNS`?NfJ]0Lt*גoX_6-=ЕWO++s 19)si{B]/aƍ{-\ݍ>9´Lse!g V7%)TcJGY]8ª"_| F)(lPPA|{ FX=CU(:VۖLkSZ &~ 3pfjUN* )s pbo3]'xȳ"Fl=_!GuDtL)rmV#l3{0&qeMf}n@Ud][(1rqu\@4 K46U%.@> D0~ EqoϤj3 DKҪÒkz)Q*ϲDg젰c8`~{m̻tj\k^zGȔ; J<#cD h:ZkZ]63/ OLc B4~y'% =!v " r{kXIKȞ[3q QKSICBAR!aFV8lWr0S#p M֜axؽWl [ʰYARxM1w`3DҖof6u7i# arV;ى9RIɆUɳDA`CXS4J ^ 'HrV"w\W^O-hYzx|3 3<n`䑀}!}xaX;CZjMoo1{KiY%H+HH,N̼K uY婇VaQW},涁 r]\E"FTe;zWͷ\;ҟ]߱FܗJvUP#>Zp6l3s\/Ft|PhDwM^ދ:pDf\2ܬQj 7Yň$1 p{@VjJ ,Ue(|Y@ VMAIL010.BCK=$[VMAIL010.VMAIL]MAILLIB.OLB;12;OV1kZV1.0S=SET_PROFILE_INFOV1.021-JUN-1993 13:01VAX C V3.2-044P P^SԭP R|T\ ^|`h$ j|lt" v|x | | | |! | |Ȱ |̛԰ ||||cc߭MAIL$USER_BEGINPRRPPRPЬP` ^ՠ% jՠ# vՠ  ՠ  STRLENPЬP eBASKET$ Q.M RJOHNSON OPEN_FOLDER$.N RJOHNSON OPEN_FOLDER)જ RJOHNSON SET_PROFILE_INFO0Rmz RJOHNSON DECREMENT_NEWMAIL_COUNT*`z RJOHNSON COMPRESS_MAILFILE*@v㌺ RJOHNSON COMPRESS_MAILFILE)l6 RJOHNSON GET_PROFILE_INFO) ʺ6 RJOHNSON GET_PROFILE_INFO) h"7 RJOHNSON GET_PROFILE_INFO)x^ RJOHNSON SET_PROFILE_INFO)@l RJOHNSON SET_PROFILE_INFO)`9R12SӕV1.0@READ_MESSAGE_BUFFERV1.0 7-JUL-1992 14:13VAX C V3.2-044tRREAD_MESSAGE_BUFFERread_message_buffer STRCPYMAIL$MESSAGE_GET READ_MESSAGE_BUFFER$CODE$DATA NULLLIST FOLDER_ROOT MESSAGE_ROOT INFO_INLIST$ RECORD_INLISTRECORD_OUTLISTPP PPAҢ7 VMAIL010.BCK=$[VMAIL010.VMAIL]MAILLIB.OLB;1R5P^XYWSЬP  ޭgݬMAIL$MESSAGE_GETPUU ~UPhiެVfMAIL$MESSAGE_GETPUU~@ЬR TЭP@BSCdSTRCPYhifMAIL$MESSAGE_GETPUU~Pww TOTAL_RECLAIMH CLOSE_OUTLIST CLOSE_INLIST8 P P P  $P"  0P$  PP|^VЬ SFREETPУRcdSdRSԬ լ f߼MAIL$MAILFILE_CLOSEPUP  ߼MAIL$MAILFILE_CLOSEPUUUPЬR   ffbMAIL$MAILFILE_ENDwwSTRCPYTP ݬMAIL$MESSAGE_INFOКX~cPRԢThPRhPՠT PРTPՠTRTb UE_BEGINSTRLEN FOLDER_ROUTINE OPEN_MAIL_FILE0$CODE$DATASTDINSTDOUTSTDERRRICH$ERROR_LIST NULLLIST DELETED_BYTESWASTEBASKET_NAMEWASTEBASKET_LENGTH MAILFILE_NAMEMAILFILE_LENGTHDIRECTORY_NAMEDIRECTORY_LENGTHMESSAGES_SELECTEDFROOTNUMBER_OF_FOLDERS$INPUT_ITEM_LISTBEGIN_ITEM_OUTLISTMAILFILE_INFO_ITMLST0B)a. VMAIL010.BCK=$[VMAIL010.VMAIL]MAILLIB.OLB;1 HUOUTPUT_ITEM_LIST$MESSAGE_BEGIN_INLIST$MESSAGE_SELECT_INLISTMESSAGE_SELECT_OUTLISTUlMAIL$MAILFILE_OPENPXXXP< RB< RB < RB ЬR STRCPYSc ccebMAIL$MAILFILE_INFO_FILEPXXXPkR޼REbbSTRLENPdef߭MAIL$MESSAGE_BEGINid߭MAIL$MESSAGE_SELECTee߭MAIL$MESSAGE_ENDjТRk PPFOLDER_ROUTINEww_LENGTH^STRLENPЬP STRLENPЬP STRLENPЬP ʞ̟RSET_PROFILE_INFOset_profile_infoE P MAIL$USER_ENDMAIL$USER_SET_INFOSTRLENMAIL$USER_BEGIN SET_PROFILE_INFO$CODE$DATARICH$ERROR_LIST NULLLISTSTRLENPЬP ֞_1r G`V1.0R9 MOVE_MESSAGEV1.0 9-APR-1993 13:06TVAX C V3.2-044nR MOVE_MESSAGEl move_message [l"MAIL$MESSAGE_COPYSTRLEN l MOVE_MESSAGEJ$CODE$DATARICH$ERROR_LIST NULLLISTS lP ^̰|аذ |ܰ䰏||ԭ| | |||ԭЬSSSTRLENC VMAIL010.BCK=$[VMAIL010.VMAIL]MAILLIB.OLB;1XY1`/xAӕV1.07 SEND_BEGINV1.0 7-JUL-1992 14:58VAX C V3.2-044`R SEND_BEGIN send_begin MAIL$SEND_ADD_BODYPARTMAIL$SEND_ADD_ATTRIBUTEMAIL$SEND_BEGINSTRLEN | SEND_BEGIN$CODE$DATA NULLLIST FOLDER_ROOT MESSAGE_ROOT BEGIN_INLISTADD_ATTRIBUTE_INLISTADD_FILENAME_INLISTPPP|^USRVԼЬ P`P PPSTRLENPbfbݬMAIL$SEND_BEGINPTTPPTPЬݬSTRLENPcfcݬMAIL$SEND_ADD_ATTRIBUTEPTTPPTPЬݬSTRLENPefeݬMAIL$SEND_ADD_BODYPARTww1*rӕV1.07 SEND_ABORTV1.0 7-JUL-1992 15:00VAX C V3.2-044PR SEND_ABORT send_abort SMAIL$SEND_ABORT SEND_ABORT$CODE$DATA NULLLIST FOLDER_ROOT MESSAGE_ROOT0P^ݬMAIL$SEND_ABORTwwD.y* VMAIL010.BCK=$[VMAIL010.VMAIL]MAILLIB.OLB;1@[\1*dzV1.0DDECREMENT_NEWMAIL_COUNTV1.027-APR-1993 13:08VAX C V3.2-044RDECREMENT_NEWMAIL_COUNTdecrement_newmail_count  5 MAIL$USER_ENDMAIL$USER_SET_INFOMAIL$USER_GET_INFOSTRLENMAIL$USER_BEGIN |DECREMENT_NEWMAIL_COUNT$CODE$DATARICH$ERROR_LIST NULLLISTDEC_NEW_MESSAGES0DEC_PROFILE_INLISTDEC_PROFILE_INLIST2DEC_PROFILE_OUTLIST2CP  P PJ P|^RSVUԭee߭MAIL$USER_BEGINPTTPPTPЬP`PPSTRLENPb b߭MAIL$USER_GET_INFOPTTPPTPfЬP` PPSTRLENPec߭MAIL$USER_SET_INFOPTTPPTPЬPfee߭ MAIL$USER_ENDOww$CODE$DATARICH$ERROR_LIST NULLLIST ȞʟSRESS0wwADDRESSww@ADD_SEND_ADDRESS_CCV1.0 1-APR-1993 12:47VAX C V3.2-044dRADD_SEND_ADDRESS_CCadd_send_address_cc1 a MAIL$SEND_ADD_ADDRESSSTRLEN ADD_SEND_ADDRESS_CC1$CODE$DATARICH$ERROR_LIST NULLLIST USERNAME_TYPE0 ITEM_LISTvPP PPP^RЬݬSTRLENPbE-x VMAIL010.BCK=$[VMAIL010.VMAIL]MAILLIB.OLB;1D^؟STRLENPЬP` PPSTRLENPcP߭MAIL$USER_SET_INFOPRRPPRPcc߭ MAIL$USER_ENDwwP^SԭP R|T\ ^|`h$ j|lt" v|x | | | |! | |Ȱ |̛԰ ||||cc߭MAIL$USER_BEGINPRRPPRPЬP` ^ՠ% jՠ# vՠ  ՠ  STRLENPЬP RbP(ެЬ ݬ bP߭ݬMAIL$MESSAGE_COPYެЬ ݬ bPSSbP߭ݬMAIL$MESSAGE_COPY4lwwSET_NEWMAIL_COUNT$set_newmail_count $ MAIL$USER_ENDMAIL$USER_SET_INFOMAIL$USER_BEGIN $ SET_NEWMAIL_COUNT$CODE$DATARICH$ERROR_LIST NULLLIST$P 0^SԭҰ |ְް >||cc߭MAIL$USER_BEGINPRRPPRPbRLENPޭݬMAIL$MESSAGE_SELECTPnPRRnPVխ1gMALLOCSSTRCPYTV!kݬMAIL$MESSAGE_INFOPnPnP\~cPRԢTЬQaP RaԢXPՠT PРTPՠTRTPXb jel> ptK vdx> |C i>I h>󭔰J >뭜ԭL g>򭬛? l@ݢLd<PPPcPP<P@ݢPd||ЬݬSTRLENP߭ݬMAIL$SEND_ADD_ADDI/ VMAIL010.BCK=$[VMAIL010.VMAIL]MAILLIB.OLB;1H.jk1 V1.0_DEXTRACT_MARKED_MESSAGESV1.0 9-MAR-1993 13:17VAX C V3.2-044REXTRACT_MARKED_MESSAGESextract_marked_messages $+FPRINTFFCLOSEFOPENMAIL$MESSAGE_GET EXTRACT_MARKED_MESSAGES$CODE$DATASTDINSTDOUTSTDERRRICH$ERROR_LIST NULLLIST INFO_INLIST$ RECORD_INLISTRECORD_OUTLIST $CHAR_STRING_CONSTANTSOPP P P5 Pw P%s  P%cP^ R ZX[ЬTޭbݬ FOPENPYPT1VMAIL$MESSAGE_GETUFPRINTFWѤ<vդ(q  kfePSS ~SPjhfePSS~+ЭP@ߢYgjhfePSS~ ߢYgФTT1{YFCLOSEPwwdef߭MAIL$MESSAGE_BEGINid߭MAIL$MESSAGE_SELECTee߭MAIL$MmSTDERRRICH$ERROR_LIST NULLLIST BINARY_DATE BINARY_DATE2 CC_BUFFER CC_LENGTH MESSAGE_ID DATE_BUFFER DATE_LENGTH EXTID_BUFFER EXTID_LENGTH FROM_BUFFER FROM_LENGTHREPLY_PATH_BUFFERREPLY_PATH_LENGTHT+ MESSAGE_FLAGS SENDER_BUFFER SENDER_LENGTH MESSAGE_SIZESUBJECT_BUFFERSUBJECT_LENGTH TO_BUFFER TO_LENGTH$ BJ/=1L骑cKW gߐ/. MW<_ͷD_ `DLGpzΊ6r&RgѶݾ!WVwXN3ﭛF Z[J:_UҌ[T'mex6_/ 0F*MÀN5xrrv_lP`1k+܌Xubܨ) _nU&zq C)ߙ_L17Q𤈦rMe PlAtREVSTʲU l̬e(]Sjz y#3K6IG[Fc%XQ]'|8b yMܔ>as S@H+=ڲ\ߕ]ꑝ1RwE+TFV'JJ͞=IJAzCq֪%627O/$5a'%k7to3Iv5͜)V-GYcrfv%˒X5B"QF^c{ُJoRQQ s6A;߮p"wZw|o=n{rG3DX= Rn ULAeЄ}zuFY{ON :/֫h?%dv}pfLM;:  qYqp(B Y[UQs$/zaqXtBi@J8Hl3جGl6-8bYVIF @[`q>6x|~nRU&TΧq25B"70? ySC ٹ-ą:GyBS@FUJW4;_}ӾZ||sYݝm$HZN~ۨK VMAIL010.BCK=$[VMAIL010.VMAIL]MAILLIB.OLB;1q]mEGIN_INLIST BEGIN_OUTLIST$ SELECT_INLISTSELECT_OUTLIST$ INFO_INLIST INFO_OUTLISTX^0V1.0R9 MARK_MESSAGEV1.0 8-MAR-1993 13:30VAX C V3.2-044iR MARK_MESSAGE mark_message MAIL$MESSAGE_MODIFY MARK_MESSAGE$CODE$DATARICH$ERROR_LIST NULLLIST$ MARK_INLISTP P P ^RЬPѠ<Ѡ$PPѠ$ PЬP >bݬMAIL$MESL : VMAIL010.BCK=$[VMAIL010.VMAIL]MAILLIB.OLB;1QpSAGE_MODIFYPSSET_NEWMAIL_COUNTV1.0 8-APR-1993 10:34VAX C V3.2-044kRSET_NEWMAIL_COUNT$set_newmail_count $ MAIL$USER_ENDMAIL$USER_SET_INFOMAIL$USER_BEGIN $ SET_NEWMAIL_COUNT$CODE$DATARICH$ERROR_LIST NULLLIST$P 0^SԭҰ |ְް >||cc߭MAIL$USER_BEGINPRRPPRPM$ VMAIL010.BCK=$[VMAIL010.VMAIL]MAILLIB.OLB;1:sc߭߭MAIL$USER_SET_INFOPRRPPRPcc߭ MAIL$USER_END$ww ЬPԠ PЬP< P@  ЬRSTRCPYTd< P@  d<P@  d<P@d<P@d<P@d<P@d<P@dff߭ MAIL$USER_ENDwwu>F k>ěȰH j>|ԭff߭MAIL$USER_BEGINPRRPPRPЬP`PPSTRLENPఏ  ժRGET_PROFILE_INFOget_profile_infoN V MAIL$USER_ENDSTRCPYMAIL$USER_GET_INFOSTRLENMAIL$USER_BEGIN GET_PROFILE_INFO$CODE$DATARICH$ERROR_LIST NULLLIST vAUTO_PURGE CC_PROMPT COPY_FORWARD COPY_REPLY COPY_SEND EDITOR_BUFFER EDITOR_LENGTHFORWARDING_BUFFERFORWARDING_LENGTH FORM_BUFFER FORM_LENGTH DIR_BUFFER DIR_LENGTH NEW_MESSAGESPERSONAL_BUFFERPERSONAL_LENGTH QUEUE_BUFFER QUEUE_LENGTHUSERNAME_BUFFERUSERNAME_LENGTH SUBDIR_BUFFER SUBDIR_LENGTHP|ԭ,߭߭MAIL$USER_GENؔZ VMAIL010.BCK=$[VMAIL010.VMAIL]MAILLIB.OLB;1LD;1mvT_INFOPRRPPRPԼ ЬPԠЬP ЬPԠ PЬP ЬPԠ  PЬP  ЬPԠ PЬP< P@eeЬRSTRCPYSc< P@ddc<P@iic<P@hhc<P@ggc<P@c<P@kkc<P@jjcff߭ MAIL$USER_ENDww@clSMG$UNPASTE_VIRTUAL_DISPLAYlSMG$UNPASTE_VIRTUAL_DISPLAYSMG$DELETE_VIRTUAL_DISPLAYSMG$DELETE_VIRTUAL_DISPLAY>lSMG$UNPASTE_VIRTUAL_DISPLAYlSMG$UNPASTE_VIRTUAL_DISPLAYSMG$DELETE_VIRTUAL_DISPLAYSMG$DELETE_VIRTUAL_DISPLAY^RЬ ݬ STRLENScPR VMAIL010.BCK=$[VMAIL010.VMAIL]MAILLIB.OLB;11bЬݬcP Ь(ݬcP$Ь4ݬcP0|~ߢ<~ SYS$SNDJBCWPTP^%Z#VެU|~|~|~߭ LIB$GETQUIP[f߭߭!߭߭ LIB$GETQUIP[[1eWXgPOD;1 1WbFδy/n}5z13}?]KO]S)"+pb!pnX- !D/$G!e(}aWzUn!|ۺwhք]=~Av 㚏+|BD ~[V{$*ֈe-W'o&PV%DbDm%h8R*CP0 Rʯ2-VyZJw~P9c.[c.! $y5GTg&\THBrUH?Hy S=V4Egmg) CspSGB'M 剺)wRLf#j[ArH&h {'V@%a1s@,lp #= 3bYh@' 4#C%*h<0MFޱ$.AoWǹYqJ C8 M*HL0EZSݞB1zv7:#a[hZ i*kZw٘ aF'S!VģՓLF$ߟo†HgUY躰{waQsjC{Nm3=qc `agU/6;Bk@K3tn$(L.G^!-LQ~EBbfZBÜ[>AeN FG2la]ω65sxÜrI2 v Ḱ_K^w>3cxq'a'0ב:doϊ=1{%u~$1wG@HҴRu0[bF+0O.bB0wTϟV\n#/"}I-  K_חfY -}I"wwUg 3/.Om V8 _I.ΊqL1 %09I%1el_h͚/w} ǛUHQ<8jn\1@ϝp߁ЎB=|dPVy,vЇoh`K8I_Y(h~Q^ӣTQRRkN 'M'&G"#s"Ѳ;t&Ut#include #include #include #include "richlib"#include "maillib"#include "vmail"#include "window"#include "display"#include "menu"#include "send"#include "help"#include "mail_file"I/*****************************************************[v] VMAIL010.BCK=&$[VMAIL010.VMAIL]MAIL_FILE.C;11U!*******************; * process_mail_file_window: process a mail file window. *J ************************************************************************/!process_mail_file_window (window)7struct window_struct *window; /* window to process */{9 boolean endit = false; /* end processing of window? */4 unsigned short key; /* key read from keyboard */ unsigned long status; int j; /* lcv */ hilite_folder (window); while (endit == false) {F smg$set_cursor_abs(&(window->display),&(window->virtual_line),&1);1 smg$read_keystroke(&keyboard,&key,0,0,0,0,0); switch (key) {/ case SMG$K_TRM_DOWN: /* next folder */4 if (window->virtual_line < window->length) {! lolite_folder (window);6 window->specific.mailfile_specific.current =? window->specific.mailfile_specific.current->next;# (window->virtual_line)++;7 if (window->physical_line < window->height) {& (window->physical_line)++;# hilite_folder (window); } else {! (window->top_line)++;A smg$scroll_viewport(&(window->display),&SMG$M_UP,&1);# hilite_folder (window); } } break;0 case SMG$K_TRM_UP: /* previous folder */' if (window->virtual_line > 1) {! lolite_folder (window);7 window->specific.mailfile_specific.current = ? window->specific.mailfile_specific.current->prev;# \û VMAIL010.BCK=&$[VMAIL010.VMAIL]MAIL_FILE.C;12U! (window->virtual_line)--;* if (window->physical_line > 1) {& (window->physical_line)--;# hilite_folder (window); } else {! (window->top_line)--;C smg$scroll_viewport(&(window->display),&SMG$M_DOWN,&1);# hilite_folder (window); } } break;= case SMG$K_TRM_NEXT_SCREEN: /* next page of folders */- if (window->height == window->length)/ smg$ring_bell(&(window->display),&1); else {5 if (window->virtual_line == window->length)1 smg$ring_bell(&(window->display),&1); else {# lolite_folder (window);3 window->virtual_line += window->height;/ window->top_line += window->height;H window->bottom_line = window->top_line + window->height - 1;8 if (window->bottom_line >= window->length) {3 window->bottom_line = window->length;J window->top_line = window->bottom_line - window->height + 1;5 window->physical_line = window->height;4 window->virtual_line = window->length;N while (window->specific.mailfile_specific.current->next != NULL)< window->specific.mailfile_specific.current =E window->specific.mailfile_specific.current->next; } else {0 for (j=0; jheight; j++) {O if (window->specific.mailfile_]$ VMAIL010.BCK=&$[VMAIL010.VMAIL]MAIL_FILE.C;12U!6 specific.current->next != NULL) {> window->specific.mailfile_specific.current =G window->specific.mailfile_specific.current->next; } } }J smg$change_viewport(&(window->display),&(window->top_line),&1,6 &(window->height),&MAIL_FILE_COLUMNS);# hilite_folder (window); } } break;@ case SMG$K_TRM_PREV_SCREEN: /* previous page of folders */- if (window->height == window->length)/ smg$ring_bell(&(window->display),&1); else {( if (window->virtual_line == 1)1 smg$ring_bell(&(window->display),&1); else {# lolite_folder (window);3 window->virtual_line -= window->height;/ window->top_line -= window->height;H window->bottom_line = window->top_line - window->height - 1;' if (window->top_line < 1) {# window->top_line = 1;J window->bottom_line = window->top_line + window->height - 1;( window->physical_line = 1;' window->virtual_line = 1;: window->specific.mailfile_specific.current =? window->specific.mailfile_specific.folder_root; } else {0 for (j=0; jheight; j++) {O if (window->specific.mailfile_specific.current->prev != NULL) {> window->specific.mailfile_specific.c^xS VMAIL010.BCK=&$[VMAIL010.VMAIL]MAIL_FILE.C;12U!/ urrent =G window->specific.mailfile_specific.current->prev; } } }J smg$change_viewport(&(window->display),&(window->top_line),&1,4 &(window->height),&MAIL_FILE_COLUMNS);# hilite_folder (window); } } break;8 case SMG$K_TRM_ENTER: /* open selected folder */ case SMG$K_TRM_SELECT: case SMG$K_TRM_CR:T vmail$open_folder (window,window->specific.mailfile_specific.current->name); endit = true; break;2 case SMG$K_TRM_HT: /* go to next window */ case SMG$K_TRM_RIGHT: activate_next_window (); endit = true; break;7 case SMG$K_TRM_LEFT: /* go to previous window */ activate_prev_window (); endit = true; break;2 case SMG$K_TRM_CTRLW: /* refresh screen */ case SMG$K_TRM_CTRLR:+ smg$repaint_screen(&pasteboard_id); break;0 case SMG$K_TRM_HELP: /* display help */) display_help(HELP_MAIL_FILE_WIN); break;- case SMG$K_TRM_F10: /* close file */' vmail$close_mail_file (window); endit = true; break;9 case SMG$K_TRM_UPPERCASE_A: /* bar menu options */! case SMG$K_TRM_LOWERCASE_A:< hilite_bar_option (file_bar,"About",FILE_ABOUT_COL); show_about_info();> unhilite_bar_option (file_bar,"About",FILE_ABOUT_COL); break;! case_䘉^ VMAIL010.BCK=&$[VMAIL010.VMAIL]MAIL_FILE.C;12U!E SMG$K_TRM_UPPERCASE_F:! case SMG$K_TRM_LOWERCASE_F:/ switch (bar_menu(MENU_MAIL_FILEMENU)) {? case MENU_MAIL_OPEN_FILE: /* open a new mail file */" open_new_mail_file (); endit = true; break;: case MENU_MAIL_OPEN_FOLDER: /* open a folder */& vmail$open_folder (window,B window->specific.mailfile_specific.current->name); endit = true; break;9 case MENU_MAIL_PURGE: /* purge wastebasket */. purge_wastebasket_screen (window); break;< case MENU_MAIL_COMPRESS: /* compress mail file */1 print_bar_message ("Compressing..."); printf ("\n");U status = compress_mailfile (&window->specific.mailfile_specific.context);/ smg$repaint_screen(&pasteboard_id);' if (status != SS$_NORMAL) { error(status,""); }! erase_bar_message ();= case MENU_MAIL_UPDATE_FILE: /* update mail file */, vmail$update_mail_file (window);D if (window->specific.mailfile_specific.num_folders == 0) endit = true; else% hilite_folder (window); break;; case MENU_MAIL_CLOSE_FILE: /* close mail file */+ vmail$close_mail_file (window); endit = true; break;; case MENU_MAIL_EXIT_VMAIL: /* exit from VMail */$ vmai`'1OM;1P4(@p4<&C+<.#3ZTMv4CAF5k0ls_Y3zP n?U @$}sDtxs6nR4/K7"{E(s- DRz<%}K ^R!YC1Eq|e\KVz5h9TTy1LikdKti'OJ0zLA+ poI&y0OSwX$XK+eC+19c #L}>/OBu<*wy: AU-N/Tl*M\\s(TGJq$ *MYq7f0lp|!97H2>)&:rm~]xL]nii_]gWj+cJl@.\FZ"|-cE9O1m4}gaE6/s ji%z,! *`Ybm0?N<[75kp$CJsk=@}to 9s,*#)y<$^FR|ato#5zyn\lP\ GW/nJ (ZUF3ip@CJh+Q-2omQv$^e 1Uj|vO$U&oy7fsB1#3ZMv29YqsZw8o/QS#cts/}{rxr'?ySBg~bZR*E0Nb}6Kytp# rm94M6Xn-iJwh#?jjA}f.dox17~v_QzW#=VR\Ie4xN{P7 YMAF:%k^z>;wM_R; S%iKWENcuqSOgSxE$Q 2%Hvp{4sAGvb>^lC2tUGu7pA=4Yd,x.(O_Y2Pt|wb>/{K(W[QNLGjq+vKcLYjd})/QLlgz2O7!5gr/nqTQ??w~[O5yQ'`-.{:>;9F3'>psH.58.Ma;l/nH9my}J'd1!'QdFs/BxEK(s4&+JDm72t^[ ~w4L[lWvec$1"aOs?8SB_ e'rY*: 3EpF,AT%OrFmf{aFr -.K\X 3q7y+U3fl I7y8[_S rZ/@DB]u&hn1DZOa2lr[ehEj=N#\4GS-0fvE3djgpBV `"X5JF||fyuw>"lU/,992M hk@L] (v@JYI{MJ>6V>)T!t(#V$W1%&FV~yKJ67guz0c?# IGA^_VtBPigdlOB#_>z\ MkV'a[Ff1}USU;S-;cs#RFrZ =R1j az( VMAIL010.BCK=&$[VMAIL010.VMAIL]MAIL_FILE.C;12U!Il$close_all_files(); endit = true; break; } break;! case SMG$K_TRM_UPPERCASE_U:! case SMG$K_TRM_LOWERCASE_U:0 switch (bar_menu(MENU_MAIL_UTILSMENU)) {; case MENU_MAIL_SEND: /* send new mail message */I vmail$send_message(0,"","",""," Send Message ",SEND_OP_SEND);$ activate_window(window); break;: case MENU_MAIL_PROFILE: /* edit user profile */: activate_window (vmail$open_profile_window()); endit = true; break;B case MENU_MAIL_DIST_LISTS: /* edit distribution lists */) vmail$open_distlist_window(); endit = true; break;; case MENU_MAIL_ALIASES: /* edit VMail aliases */& vmail$open_alias_window(); endit = true; break;> case MENU_MAIL_SIGNATURE: /* edit signature file */" edit_signature_file();/ smg$repaint_screen(&pasteboard_id); break; } break;! case SMG$K_TRM_UPPERCASE_H:! case SMG$K_TRM_LOWERCASE_H:/ switch (bar_menu(MENU_MAIL_HELPMENU)) {A case MENU_MAIL_HELP_WINDOW: /* help window: windows */2 vmail$open_help_window(WHELP_WINDOWS); endit = true; break;@ case MENU_MAIL_HELP_ALIAS: /* help window: aliases */2 vmail$open_help_window(WHELP_ALIASES); endit = true; bΌ. VMAIL010.BCK=&$[VMAIL010.VMAIL]MAIL_FILE.C;12U!\ break;C case MENU_MAIL_HELP_DISTLIST: /* help window: distlist */3 vmail$open_help_window(WHELP_DISTLIST); endit = true; break; } break;! case SMG$K_TRM_UPPERCASE_W:! case SMG$K_TRM_LOWERCASE_W:. switch (bar_menu (MENU_MAIL_WINDOW)) {@ case MENU_MAIL_RENAME_WIN: /* rename current window */# rename_window (window); break;= case MENU_MAIL_MOVE_WIN: /* move current window */! move_window (window); break;@ case MENU_MAIL_RESIZE_WIN: /* resize current window */# resize_window (window); break; } break; default:- smg$ring_bell(&(window->display),&1); } }}I/************************************************************************E * purge_wastebasket_screen: purge wastebasket of current mail file *J ************************************************************************/!purge_wastebasket_screen (window)<struct window_struct *window; /* current mailfile window */{0 char string[255]; /* temp. string buffer */B struct mailfile_context *context; /* mail file context struct */4 unsigned short key; /* key read from keyboard */2 boolean endit = false; /* end purge screen? */5 unsigned long status; /* status of mail calls */: unsigned long display; /* virtual display for screen */: unsigned long shadow; /* virtual display for shadocd VMAIL010.BCK=&$[VMAIL010.VMAIL]MAIL_FILE.C;12U!pw */E struct dsc$descriptor text_desc = {0,DSC$K_DTYPE_T,DSC$K_CLASS_S,};4 $DESCRIPTOR(display_border," Purge Wastebasket ");> unsigned long border_rendition = SMG$M_BOLD | SMG$M_REVERSE;8 context = &window->specific.mailfile_specific.context;A smg$create_virtual_display(&12,&40,&display,&SMG$M_BORDER,0,0);A smg$create_virtual_display(&14,&42,&shadow,0,&SMG$M_REVERSE,0);P smg$label_border(&display,&display_border,&SMG$K_TOP,0,&border_rendition,0,0);A put_chars (display,"Purging Wastebasket",2,10,SMG$M_ERASE_LINE, SMG$M_BLINK,0);> smg$paste_virtual_display(&display,&pasteboard_id,&5,&20,0);D smg$paste_virtual_display(&shadow,&pasteboard_id,&5,&20,&display);@ if ((status = purge_wastebasket (context,true)) != SS$_NORMAL) error(status,""); else {J sprintf (string, "Wastebasket Folder: %s", context->wastebasket);% text_desc.dsc$a_pointer = string;, text_desc.dsc$w_length = strlen(string);E smg$put_chars(&display,&text_desc,&3,&2,&SMG$M_ERASE_LINE,0,0,0);L sprintf (string, "Current Deleted Bytes: %d", context->deleted_bytes);, text_desc.dsc$w_length = strlen(string);E smg$put_chars(&display,&text_desc,&4,&2,&SMG$M_ERASE_LINE,0,0,0);G sprintf (string, "Data Buckets Scanned: %d",context->data_scan);, text_desc.dsc$w_length = strlen(string);E smg$put_chars(&display,&text_desc,&5,&2,&SMG$M_ERASE_LINE,0,0,0);K sprintf (string, "Data Buckets Reclaimed: %d", context->data_reclaim);, text_desc.dsc$w_length = strlen(dX VMAIL010.BCK=&$[VMAIL010.VMAIL]MAIL_FILE.C;12U!string);E smg$put_chars(&display,&text_desc,&6,&2,&SMG$M_ERASE_LINE,0,0,0);L sprintf (string, "Index Buckets Reclaimed: %d", context->index_reclaim);, text_desc.dsc$w_length = strlen(string);E smg$put_chars(&display,&text_desc,&7,&2,&SMG$M_ERASE_LINE,0,0,0);O sprintf (string, "Messages Deleted: %d", context->messages_deleted);, text_desc.dsc$w_length = strlen(string);E smg$put_chars(&display,&text_desc,&8,&2,&SMG$M_ERASE_LINE,0,0,0);L sprintf (string, "Total Bytes Reclaimed: %d", context->total_reclaim);9 put_chars (display,string,10,2,SMG$M_ERASE_LINE,0,0);H put_chars (display," ",2,10,SMG$M_ERASE_LINE,0,0);9 put_chars (display,"Press [RETURN] to Continue",12,7,' SMG$M_ERASE_LINE,SMG$M_BOLD,0);' smg$repaint_screen(&pasteboard_id); while (endit == false) {3 smg$read_keystroke(&keyboard,&key,0,0,0,0,0); switch (key) { case SMG$K_TRM_ENTER: case SMG$K_TRM_CR: endit = true; break; default:% smg$ring_bell(&display,&1); } } }6 smg$unpaste_virtual_display(&shadow,&pasteboard_id);7 smg$unpaste_virtual_display(&display,&pasteboard_id);& smg$delete_virtual_display(&shadow);' smg$delete_virtual_display(&display);}I/************************************************************************4 * open_new_mail_file: open up a new mail file. *J ************************************************************************/e VMAIL010.BCK=&$[VMAIL010.VMAIL]MAIL_FILE.C;11U!KFopen_new_mail_file () {' char filename[MAX_FILENAME_LENGTH+1];; struct window_struct *window; /* newly opened window */: unsigned long display; /* virtual display for screen */: unsigned long shadow; /* virtual display for shadow */1 $DESCRIPTOR(display_border," Open Mail File ");> unsigned long border_rendition = SMG$M_BOLD | SMG$M_REVERSE;@ smg$create_virtual_display(&3,&60,&display,&SMG$M_BORDER,0,0);@ smg$create_virtual_display(&5,&62,&shadow,0,&SMG$M_REVERSE,0);P smg$label_border(&display,&display_border,&SMG$K_TOP,0,&border_rendition,0,0);+ smg$erase_display(&display,&1,&1,&3,&60);6 put_chars (display,"Filename: ",2,2,0,SMG$M_BOLD,0);> smg$paste_virtual_display(&display,&pasteboard_id,&9,&10,0);D smg$paste_virtual_display(&shadow,&pasteboard_id,&9,&10,&display); filename[0] = '\0';< if ((get_input (filename,MAX_FILENAME_LENGTH,display,2,12,$ INPOPT_CAPS)) == INPST_NORMAL)( vmail$open_mail_file (filename, "");6 smg$unpaste_virtual_display(&shadow,&pasteboard_id);7 smg$unpaste_virtual_display(&display,&pasteboard_id);& smg$delete_virtual_display(&shadow);' smg$delete_virtual_display(&display);}fe VMAIL010.BCK >$[VMAIL010.VMAIL]MAIL_FILE.H;11J9*[VMAIL010.VMAIL]MAIL_FILE.H;1+, >./@ 4J -$0123KPWO567@ƿ?B8@F(C9/ E G@HJI/************************************************************************ * */ * Visual Mail */ * version 1.0 *; * Copyright 1993 by Richard D. Johnson *3 * All Rights Reserved * * *F * Visual Mail may be distributed only in its original, unmodified *. * form. See documentation for details. * * *I ************************************************************************2 * Revision History * * *) * 13-JUL-1993 RDJ Module completion. *J ************************************************************************/<#define MAX_FILENAME_LENGTH 50 /* max length of file name */*[VMAIL010.VMAIL]MAIL_FILE.OBJ;2+,s(./@ 4F -$0123KPWO56: 7^ 8zP9/ E G@HJg6 VMAIL010.BCKs($[VMAIL010.VMAIL]MAIL_FILE.OBJ;2cG6 MAIL_FILEV1.0 6-AUG-1993 09:09VAX C V3.2-044BAR_MENU GET_INPUTVMAIL$OPEN_FOLDERVMAIL$OPEN_MAIL_FILEPURGE_WASTEBASKETCOMPRESS_MAILFILESPRINTFPRINTF RESIZE_WINDOW MOVE_WINDOW RENAME_WINDOWVMAIL$OPEN_HELP_WINDOWEDIT_SIGNATURE_FILEVMAIL$OPEN_ALIAS_WINDOWVMAIL$OPEN_DISTLIST_WINDOWVMAIL$OPEN_PROFILE_WINDOWACTIVATE_WINDOWVMAIL$SEND_MESSAGEVMAIL$CLOSE_ALL_FILESVMAIL$UPDATE_MAIL_FILEERASE_BAR_MESSAGEERRORPRINT_BAR_MESSAGEPURGE_WASTEBASKET_SCREENOPEN_NEW_MAIL_FILEUNHILITE_BAR_OPTIONSHOW_ABOUT_INFOHILITE_BAR_OPTIONVMAIL$CLOSE_MAIL_FILE DISPLAY_HELPSMG$REPAINT_SCREENACTIVATE_PREV_WINDOWACTIVATE_NEXT_WINDOWSMG$CHANGE_VIEWPORT SMG$RING_BELLSMG$SCROLL_VIEWPORT LOLITE_FOLDERSMG$READ_KEYSTROKESMG$SET_CURSOR_ABS HILITE_FOLDERSMG$DELETE_VIRTUAL_DISPLAYSMG$UNPASTE_VIRTUAL_DISPLAY SMG$RING_BELLSMG$READ_KEYSTROKEPAboutPAbout PCompressing...P !P Send Message 0P Purge Wastebasket DPPurging WastebasketYPWastebasket Folder: %suPCurrent Deleted Bytes: %dPData Buckets Scanned: %dPData Buckets Reclaimed: %dPIndex Buckets Reclaimed: %dPMessages Deleted: %dPTotal Bytes Reclaimed: %dP 1PPress [RETURN] to ContinueLP Open Mail File ]PFilename: P<^VXWެUe HILITE_FOLDh\ VMAIL010.BCKs($[VMAIL010.VMAIL]MAIL_FILE.OBJ;2RERW1eY LOLITE_FOLDER$ HILITE_FOLDERZSMG$SCROLL_VIEWPORTn SMG$RING_BELL[SMG$CHANGE_VIEWPORTVMAIL$OPEN_FOLDER SMG$REPAINT_SCREENVMAIL$CLOSE_MAIL_FILEBAR_MENU ACTIVATE_WINDOWVMAIL$OPEN_HELP_WINDOW߭pSMG$SET_CURSOR_ABS|~|~?hSMG$READ_KEYSTROKE߭߭SMG$CREATE_VIRTUAL_DISPLAY|~߭ԭ߭߭SMG$LABEL_BORDER<߭߭߭߭߭SMG$ERASE_DISPLAY]ݭ PUT_CHARS ߭ ߭b߭SMG$PASTE_VIRTUAL_DISPLAY߭ ߭ ߭b߭SMG$PASTE_VIRTUAL_DISPLAY픭 ݭ2߭ GET_INPUTPh߭VMAIL$OPEN_MAIL_FILEb߭SMG$UNPASTE_VIRTUAL_DISPLAYb߭SMG$UNPASTE_VIRTUAL_DISPLAY߭SMG$DELETE_VIRTUAL_DISPLAY߭SMG$DELETE_VIRTUAL_DISPLAYP+]P+P7K[kP+?KPXXXlXR MAIL_FILEprocess_mail_file_windowpurge_wastebasket_screen open_new_mail_fileW $Jh kq*4 "y6q .,!,A(x4,i_))>~-,/@Bۻ+o "p\[O4rAyi@$raw.uX?=ebpܕ`]Enb(FgQ>yXg1;V +Yl.k/Ń3 }C೯T~ddcmBG<m"GΙ Q|e1oD qc&[4i?4 )>%jpSt :0>*棯J`>0jԒ\Q' Eix0Ks<"TOߋz+7cY1 >' [!#-'W6Q7Bu a)"VQ4cac{ sgrU'-+z?g K #xX/ e͟ DvdTuH6>r_Ôv7_>{G*qα$4ZS3{cOD>yH2!8㦈),`ݠX )TU“1@(?;X#}E>5 L#/eh0E uSxM͒Ʉ}=>P h M31u8a=tEe3%CbZ6P6̼Z gl Y8 VMAIL010.BCKs($[VMAIL010.VMAIL]MAIL_FILE.OBJ;2 ! SMG$REPAINT_SCREEN SMG$PUT_CHARSSTRLENERRORSMG$PASTE_VIRTUAL_DISPLAY PUT_CHARSSMG$LABEL_BORDERSMG$CREATE_VIRTUAL_DISPLAYSMG$DELETE_VIRTUAL_DISPLAYSMG$UNPASTE_VIRTUAL_DISPLAYSMG$PASTE_VIRTUAL_DISPLAY PUT_CHARSSMG$ERASE_DISPLAYSMG$LABEL_BORDERSMG$CREATE_VIRTUAL_DISPLAY PROCESS_MAIL_FILE_WINDOW PURGE_WASTEBASKET_SCREEN OPEN_NEW_MAIL_FILE $CODE$DATASTDINSTDOUTSTDERRRICH$ERROR_LIST NULLLISTBROADCAST_WINDOWPROFILEBROADCAST_ACTIVE WINDOW_ROOTCURRENT_WINDOWFILE_BAR FOLDER_BAR MESSAGE_BAR BROADCAST_BAR DISTLIST_BAR PROFILE_BAR ALIAS_BARHELP_BARNULL_BARKEYBOARDBAR_MSG_DISPLAY SEND_DISPLAY SEND_SHADOW TO_DISPLAY CC_DISPLAYSEND_STATUS_DISPLAYSEND_STATUS_SHADOWL ERROR_DISPLAY PASTEBOARD_IDi$CHAR_STRING_CONSTANTSXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXXXXPTTP###########mk VMAIL010.BCKg>$MAIL010.VMAIL]MAKEFILE.;1B;1Dǧ*[VMAIL010.VMAIL]MAKEFILE.;1+,g>./@ 4D-$0123KPWO56@}t@7 @o@B8 )C9/ E G@HJ&! ************************************&! * File: MAKEFILE. *&! * Project: VMAIL *&! * Version: 1.0 *&! * Author: Richard D. Johnson *&! ************************************!CC = CC/NOLIST(LINK = LINK/EXEC/NOMAP/NOSYM/NOTRACEBACKWO = WRITE SYS$OUTPUTDVMAIL.EXE: VMAIL.OBJ DISPLAY.OBJ WINDOW.OBJ MENU.OBJ MAIL_FILE.OBJ \? FOLDER.OBJ MESSAGE.OBJ SEND.OBJ PROFILE.OBJ PROFILE_RMS.OBJ \7 MESSAGES.OBJ PROFILE_HELP.OBJ HELP.OBJ DISTLIST.OBJ \ ALIAS.OBJ ALIAS_RMS.OBJ $(WO) "Linking VMAIL"> $(LINK) VMAIL,DISPLAY,WINDOW,MENU,MAIL_FILE,FOLDER,MESSAGE,\@ SEND,PROFILE,PROFILE_RMS,MESSAGES,PROFILE_HELP,HELP,DISTLIST,\ ALIAS,ALIAS_RMS,MAILLIB/LIB $(WO) "Cleaning Up..." PURGE/NOLOG *.EXE PURGE/NOLOG *.OBJ PURGE/NOLOG/KEEP=2 *.C PURGE/NOLOG/KEEP=2 *.H #VMAIL.OBJ: VMAIL.C VMAIL.H WINDOW.H $(WO) "Compiling VMAIL" $(CC) VMAILALIAS.OBJ: ALIAS.C ALIAS.H $(WO) "Compiling ALIAS" $(CC) ALIAS"na VMAIL010.BCKg>$MAIL010.VMAIL]MAKEFILE.;1B;1DcMALIAS_RMS.OBJ: ALIAS_RMS.C ALIAS.H $(WO) "Compiling ALIAS_RMS" $(CC) ALIAS_RMS DISPLAY.OBJ: DISPLAY.C DISPLAY.H $(WO) "Compiling DISPLAY" $(CC) DISPLAY*DISTLIST.OBJ: DISTLIST.C DISTLIST.H HELP.H $(WO) "Compiling DISTLIST" $(CC) DISTLIST$FOLDER.OBJ: FOLDER.C WINDOW.H HELP.H $(WO) "Compiling FOLDER" $(CC) FOLDER4HELP.OBJ: HELP.C HELP.H HELP_CONTEXT.H HELP_WINDOW.H $(WO) "Compiling HELP" $(CC) HELP*MAIL_FILE.OBJ: MAIL_FILE.C WINDOW.H HELP.H $(WO) "Compiling MAIL_FILE" $(CC) MAIL_FILE(MENU.OBJ: MENU.C MENU.H DISPLAY.H HELP.H $(WO) "Compiling MENU" $(CC) MENU&MESSAGE.OBJ: MESSAGE.C WINDOW.H HELP.H $(WO) "Compiling MESSAGE" $(CC) MESSAGE%MESSAGES.OBJ: MESSAGES.MSG MESSAGES.H $(WO) "Compiling MESSAGES" MESSAGE MESSAGES PROFILE.OBJ: PROFILE.C PROFILE.H $(WO) "Compiling PROFILE" $(CC) PROFILE*PROFILE_HELP.OBJ: PROFILE_HELP.C PROFILE.H $(WO) "Compiling PROFILE_HELP" $(CC) PROFILE_HELP(PROFILE_RMS.OBJ: PROFILE_RMS.C PROFILE.H $(WO) "Compiling PROFILE_RMS" $(CC) PROFILE_RMSSEND.OBJ: SEND.H SEND.C HELP.H $(WO) "Compiling SEND" $(CC) SEND/WINDOW.OBJ: WINDOW.C WINDOW.H HELP.H DISTLIST.H $(WO) "Compiling WINDOW" $(CC) WINDOWoεF_ VMAIL010.BCKn> $[VMAIL010.VMAIL]MENU.C;1;1LB;1V'=*[VMAIL010.VMAIL]MENU.C;1+,n> .'/@ 4V'&-$0123KPWO'56qs7c@B8)C9/ E G@HJI/************************************************************************ * */ * Visual Mail */ * version 1.0 *; * Copyright 1993 by Richard D. Johnson *3 * All Rights Reserved * * *F * Visual Mail may be distributed only in its original, unmodified *. * form. See documentation for details. * * *I ************************************************************************2 * Revision History * * *) * 13-JUL-1993 RDJ Module completion. *J ************************************************************************/#include #include #include #include "richlib"#include "maillib"#include "window"#include "display"#include "help"#include "menu"<unsigned short current_bar_type; /* bar menu type active */:unsigned long current_bar; /* current bar menu display */"stpʃ{: VMAIL010.BCKn> $[VMAIL010.VMAIL]MENU.C;1;1LB;1V'ruct menu_struct menu_list[] = { /* Null Menu */{0,{{"",0}},"",0,0},< /* MENU_MAIL_ABOUTMENU: 'About' menu on mail file bar */+{0,{{"About",0}},"About",FILE_ABOUT_COL,0},: /* MENU_MAIL_FILEMENU: 'File' menu on mail file bar */{FILE_FILE_ROWS,{+ {"Open Mail File", MENU_MAIL_OPEN_FILE},* {"Open Folder", MENU_MAIL_OPEN_FOLDER},* {"Purge Wastebasket", MENU_MAIL_PURGE},- {"Compress Mail File", MENU_MAIL_COMPRESS},/ {"Update Mail File", MENU_MAIL_UPDATE_FILE},- {"Close Mail File", MENU_MAIL_CLOSE_FILE},) {"Exit VMail", MENU_MAIL_EXIT_VMAIL}},%"File",FILE_FILE_COL,HELP_MAIL_FILE}, < /* MENU_MAIL_UTILSMENU: 'Utils' menu on mail file bar */{FILE_UTILS_ROWS,{" {"Send Mail", MENU_MAIL_SEND},# {"Profile", MENU_MAIL_PROFILE},/ {"Distribution Lists", MENU_MAIL_DIST_LISTS},# {"Aliases", MENU_MAIL_ALIASES},0 {"Edit Signature File", MENU_MAIL_SIGNATURE}},("Utils",FILE_UTILS_COL,HELP_MAIL_UTILS},: /* MENU_MAIL_HELPMENU: 'Help' menu on mail file bar */{FILE_HELP_ROWS,{( {"Windows", MENU_MAIL_HELP_WINDOW},' {"Aliases", MENU_MAIL_HELP_ALIAS},4 {"Distribution Lists", MENU_MAIL_HELP_DISTLIST}},%"Help",FILE_HELP_COL,HELP_MAIL_HELP},: /* MENU_MAIL_WINDOW: 'Window' menu on mail file bar */{FILE_WINDOW_ROWS,{, {"Rename Window", MENU_MAIL_RENAME_WIN},( {"Move Window", MENU_MAIL_MOVE_WIN},- {"Resize Window", MENU_MAIL_RESIZE_WIN}},+"Window",FILE_WINDOW_COL,HELP_MAIL_WINDOW},; /* MENU_FOLDER_ABOqm< VMAIL010.BCKn> $[VMAIL010.VMAIL]MENU.C;1;1LB;1V'\UTMENU: 'About' menu on folder bar */-{0,{{"About",0}},"About",FOLDER_ABOUT_COL,0},9 /* MENU_FOLDER_FILEMENU: 'File' menu on folder bar */{FOLDER_FILE_ROWS,{' {"File Message", MENU_FOLDER_FILE},- {"Extract Message", MENU_FOLDER_EXTRACT},) {"Print Message", MENU_FOLDER_PRINT},+ {"Delete Message", MENU_FOLDER_DELETE},* {"Update Folder", MENU_FOLDER_UPDATE},) {"Close Folder", MENU_FOLDER_CLOSE}},)"File",FOLDER_FILE_COL,HELP_FOLDER_FILE},; /* MENU_FOLDER_UTILSMENU: 'Utils' menu on folder bar */{FOLDER_UTILS_ROWS,{% {"Send Mail", MENU_FOLDER_SEND},, {"Reply to Message", MENU_FOLDER_REPLY},- {"Forward Message", MENU_FOLDER_FORWARD},' {"Mark Message", MENU_FOLDER_MARK},& {"Profile", MENU_FOLDER_PROFILE},2 {"Distribution Lists", MENU_FOLDER_DIST_LISTS},& {"Aliases", MENU_FOLDER_ALIASES},3 {"Edit Signature File", MENU_FOLDER_SIGNATURE}},,"Utils",FOLDER_UTILS_COL,HELP_FOLDER_UTILS},< /* MENU_FOLDER_MARKEDMENU: 'Marked' menu on folder bar */{FOLDER_MARKED_ROWS,{' {"File Marked", MENU_FOLDER_MFILE},- {"Extract Marked", MENU_FOLDER_MEXTRACT},) {"Print Marked", MENU_FOLDER_MPRINT},+ {"Delete Marked", MENU_FOLDER_MDELETE},' {"Mark All", MENU_FOLDER_MARKALL},+ {"Unmark All", MENU_FOLDER_UNMARKALL}},/"Marked",FOLDER_MARKED_COL,HELP_FOLDER_MARKED},9 /* MENU_FOLDER_HELPMENU: 'Help' menu on folder bar */{FOLDER_HELP_ROWS,{* {"Windows", MENU_FOLDER_HELP_WINDOW},) {"Aliases", rf VMAIL010.BCKn> $[VMAIL010.VMAIL]MENU.C;1;1LB;1V'k MENU_FOLDER_HELP_ALIAS},6 {"Distribution Lists", MENU_FOLDER_HELP_DISTLIST}},)"Help",FOLDER_HELP_COL,HELP_FOLDER_HELP},9 /* MENU_FOLDER_WINDOW: 'Window' menu on folder bar */{FOLDER_WINDOW_ROWS,{. {"Rename Window", MENU_FOLDER_RENAME_WIN},* {"Move Window", MENU_FOLDER_MOVE_WIN},/ {"Resize Window", MENU_FOLDER_RESIZE_WIN}},/"Window",FOLDER_WINDOW_COL,HELP_FOLDER_WINDOW},< /* MENU_MESSAGE_ABOUTMENU: 'About' menu on message bar */{0,{ {"About",0}},"About",MESSAGE_ABOUT_COL,0},; /* MENU_MESSAGE_FILEMENU: 'File' menu on message bar */{MESSAGE_FILE_ROWS,{( {"File Message", MENU_MESSAGE_FILE},. {"Extract Message", MENU_MESSAGE_EXTRACT},* {"Print Message", MENU_MESSAGE_PRINT},, {"Delete Message", MENU_MESSAGE_DELETE},+ {"Close Message", MENU_MESSAGE_CLOSE}},+"File",MESSAGE_FILE_COL,HELP_MESSAGE_FILE},< /* MENU_MESSAGE_UTILSMENU: 'Utils' menu on message bar */{MESSAGE_UTILS_ROWS,{& {"Send Mail", MENU_MESSAGE_SEND},- {"Reply to Message", MENU_MESSAGE_REPLY},. {"Forward Message", MENU_MESSAGE_FORWARD},' {"Profile", MENU_MESSAGE_PROFILE},3 {"Distribution Lists", MENU_MESSAGE_DIST_LISTS},' {"Aliases", MENU_MESSAGE_ALIASES},4 {"Edit Signature File", MENU_MESSAGE_SIGNATURE}},."Utils",MESSAGE_UTILS_COL,HELP_MESSAGE_UTILS},; /* MENU_MESSAGE_HELPMENU: 'Help' menu on message bar */{MESSAGE_HELP_ROWS,{+ {"Windows", MENU_MESSAGE_HELP_WINDOW},* {"Aliases", MENU_MESSAGE_HELP_ALIAS},7s6 VMAIL010.BCKn> $[VMAIL010.VMAIL]MENU.C;1;1LB;1V'e {"Distribution Lists", MENU_MESSAGE_HELP_DISTLIST}},+"Help",MESSAGE_HELP_COL,HELP_MESSAGE_HELP},; /* MENU_MESSAGE_WINDOW: 'Window' menu on message bar */{MESSAGE_WINDOW_ROWS,{/ {"Rename Window", MENU_MESSAGE_RENAME_WIN},+ {"Move Window", MENU_MESSAGE_MOVE_WIN},0 {"Resize Window", MENU_MESSAGE_RESIZE_WIN}},1"Window",MESSAGE_WINDOW_COL,HELP_MESSAGE_WINDOW},@ /* MENU_BROADCAST_ABOUTMENU: 'About' menu on broadcast bar */({0,{{"About",0}},BROADCAST_ABOUT_COL,0},> /* MENU_BROADCAST_FILEMENU: 'File' menu on broadcast bar */{BROADCAST_FILE_ROWS,{, {"Close Window", MENU_BROADCAST_CLOSE}},/"File",BROADCAST_FILE_COL,HELP_BROADCAST_FILE},> /* MENU_BROADCAST_HELPMENU: 'Help' menu on broadcast bar */{BROADCAST_HELP_ROWS,{- {"Windows", MENU_BROADCAST_HELP_WINDOW},, {"Aliases", MENU_BROADCAST_HELP_ALIAS},9 {"Distribution Lists", MENU_BROADCAST_HELP_DISTLIST}},/"Help",BROADCAST_HELP_COL,HELP_BROADCAST_HELP},> /* MENU_BROADCAST_WINDOW: 'Window' menu on broadcast bar */{BROADCAST_WINDOW_ROWS,{1 {"Rename Window", MENU_BROADCAST_RENAME_WIN},- {"Move Window", MENU_BROADCAST_MOVE_WIN},2 {"Resize Window", MENU_BROADCAST_RESIZE_WIN}},5"Window",BROADCAST_WINDOW_COL,HELP_BROADCAST_WINDOW},> /* MENU_DISTLIST_ABOUTMENU: 'About' menu on distlist bar *//{0,{{"About",0}},"About",DISTLIST_ABOUT_COL,0},< /* MENU_DISTLIST_FILEMENU: 'File' menu on distlist bar */{DISTLIST_FILE_ROWS,{/ {"Create Dist List", MENU_DISTLISTt޵ VMAIL010.BCKn> $[VMAIL010.VMAIL]MENU.C;1;1LB;1V'_CREATE},+ {"Edit Dist List", MENU_DISTLIST_EDIT},/ {"Delete Dist List", MENU_DISTLIST_DELETE},+ {"Close Window", MENU_DISTLIST_CLOSE}},-"File",DISTLIST_FILE_COL,HELP_DISTLIST_FILE},> /* MENU_DISTLIST_UTILSMENU: 'Utils' menu on distlist bar */{DISTLIST_UTILS_ROWS,{' {"Send Mail", MENU_DISTLIST_SEND},( {"Profile", MENU_DISTLIST_PROFILE},( {"Aliases", MENU_DISTLIST_ALIASES},5 {"Edit Signature File", MENU_DISTLIST_SIGNATURE}},0"Utils",DISTLIST_UTILS_COL,HELP_DISTLIST_UTILS},< /* MENU_DISTLIST_HELPMENU: 'Help' menu on distlist bar */{DISTLIST_HELP_ROWS,{, {"Windows", MENU_DISTLIST_HELP_WINDOW},+ {"Aliases", MENU_DISTLIST_HELP_ALIAS},8 {"Distribution Lists", MENU_DISTLIST_HELP_DISTLIST}},-"Help",DISTLIST_HELP_COL,HELP_DISTLIST_HELP},< /* MENU_DISTLIST_WINDOW: 'Window' menu on distlist bar */{DISTLIST_WINDOW_ROWS,{0 {"Rename Window", MENU_DISTLIST_RENAME_WIN},, {"Move Window", MENU_DISTLIST_MOVE_WIN},1 {"Resize Window", MENU_DISTLIST_RESIZE_WIN}},3"Window",DISTLIST_WINDOW_COL,HELP_DISTLIST_WINDOW},9 /* MENU_ALIAS_ABOUTMENU: 'About' menu on alias bar */,{0,{{"About",0}},"About",ALIAS_ABOUT_COL,0},7 /* MENU_ALIAS_FILEMENU: 'File' menu on alias bar */{ALIAS_FILE_ROWS,{( {"Create Alias", MENU_ALIAS_CREATE},$ {"Edit Alias", MENU_ALIAS_EDIT},( {"Delete Alias", MENU_ALIAS_DELETE},( {"Close Window", MENU_ALIAS_CLOSE}},'"File",ALIAS_FILE_COL,HELP_ALIAS_FILE},9 /* MENU_ALIAS_UTILSMENU:uSYq# VMAIL010.BCKn> $[VMAIL010.VMAIL]MENU.C;1;1LB;1V'.g 'Utils' menu on alias bar */{ALIAS_UTILS_ROWS,{$ {"Send Mail", MENU_ALIAS_SEND},% {"Profile", MENU_ALIAS_PROFILE},/ {"Distribution Lists", MENU_ALIAS_DISTLIST},2 {"Edit Signature File", MENU_ALIAS_SIGNATURE}},*"Utils",ALIAS_UTILS_COL,HELP_ALIAS_UTILS},7 /* MENU_ALIAS_HELPMENU: 'Help' menu on alias bar */{ALIAS_HELP_ROWS,{) {"Windows", MENU_ALIAS_HELP_WINDOW},( {"Aliases", MENU_ALIAS_HELP_ALIAS},5 {"Distribution Lists", MENU_ALIAS_HELP_DISTLIST}},'"Help",ALIAS_HELP_COL,HELP_ALIAS_HELP},7 /* MENU_ALIAS_WINDOW: 'Window' menu on alias bar */{ALIAS_WINDOW_ROWS,{- {"Rename Window", MENU_ALIAS_RENAME_WIN},) {"Move Window", MENU_ALIAS_MOVE_WIN},. {"Resize Window", MENU_ALIAS_RESIZE_WIN}},-"Window",ALIAS_WINDOW_COL,HELP_ALIAS_WINDOW},; /* MENU_HELP_ABOUTMENU: 'About' menu on help bar */{0,{ {"About",0}},"About",HELP_ABOUT_COL,0},5 /* MENU_HELP_FILEMENU: 'File' menu on help bar */{HELP_FILE_ROWS,{% {"Close Help", MENU_HELP_CLOSE}},%"File",HELP_FILE_COL,HELP_HELP_FILE},7 /* MENU_HELP_UTILSMENU: 'Utils' menu on help bar */{HELP_UTILS_ROWS,{# {"Send Mail", MENU_HELP_SEND},$ {"Profile", MENU_HELP_PROFILE},0 {"Distribution Lists", MENU_HELP_DIST_LISTS},$ {"Aliases", MENU_HELP_ALIASES},1 {"Edit Signature File", MENU_HELP_SIGNATURE}},("Utils",HELP_UTILS_COL,HELP_HELP_UTILS},5 /* MENU_HELP_HELPMENU: 'Help' menu on help bar */{HELP_HELP_ROWS,{( {"Windows", MENv"$qr}~q 2V(|8zh~Lvk-'*F#+ 57Ko":A^z2)6c;~eB:+'~"\}n^ 8k'Se>sGQ2dM=8Ik'~vL,@{Kk{w L_jc'hKd+:;=mZwarG+]H+(Q7V!_FxvY\bZ -m.+cjl75)OT)_Zb@Y4fH' @YX;xk!> =F ZzqawBEO=7nL-U+i!4lw-z pID|]M/pw7|Jc'bY'"j\gZQyIv| jMUEX#-EEb!!0*@G g/%O [Dyi`3>)pGey-&kwlcd Ys 0!^)+2vC'oFk\;|J_47T3jrGWO\phU%?)8z+Zu G]-nNIJ7'Zd~6F*ceJ8gEKq%;KtLgdm$T!uVz\i:?xys L9yBn ;!3 W]=jgPb2{a`L;M8Jl"Pl$2VoV\)r^_X4VOyQ=X %YB2_&f,W}yB>6i )DeUo4r4%HSZG#ILe}x.vY1mXH97;;"6Y[7#i/d8p'zOtp#[c<?R],53SU IQ bL=mx8php2/_ ,>G1;,8v=D,gCp?cG7ZH\lB5"Lq4f94co@n* x6A3::OoS}vRu ]hUG>[Py=I H7h7f>[!1 kb=n'.z>Hn~I,5 ,f=e06C:Hr!}1@a(o;]v=~S%":3f m ^*hD8dkx[UA2\8 2h vdZ}rw*Y{>B:*Pb~QdJt+8~WrCXG0q>Al`)s~:5(v7B]RtK T d`!O7 tc| P/]=c G"b@4 *2tLNL]O"$mmV bpjth^l Bu1,j,Jn$g6S>CK+KH`~tQfw% VMAIL010.BCKn> $[VMAIL010.VMAIL]MENU.C;1;1LB;1V'U_HELP_HELP_WINDOW},' {"Aliases", MENU_HELP_HELP_ALIAS},4 {"Distribution Lists", MENU_HELP_HELP_DISTLIST}},%"Help",HELP_HELP_COL,HELP_HELP_HELP},5 /* MENU_HELP_WINDOW: 'Window' menu on help bar */{HELP_WINDOW_ROWS,{, {"Rename Window", MENU_HELP_RENAME_WIN},( {"Move Window", MENU_HELP_MOVE_WIN},- {"Resize Window", MENU_HELP_RESIZE_WIN}},+"Window",HELP_WINDOW_COL,HELP_HELP_WINDOW},; /* MENU_NULL_ABOUTMENU: 'About' menu on null bar */{0,{ {"About",0}},"About",NULL_ABOUT_COL,0},5 /* MENU_NULL_FILEMENU: 'File' menu on null bar */{NULL_FILE_ROWS,{, {"Open Mail File", MENU_NULL_OPEN_FILE},1/* {"Close Window", MENU_NULL_CLOSE_WINDOW},*/* {"Exit VMail", MENU_NULL_EXIT_VMAIL}},%"File",NULL_FILE_COL,HELP_NULL_FILE},7 /* MENU_NULL_UTILSMENU: 'Utils' menu on null bar */{NULL_UTILS_ROWS,{# {"Send Mail", MENU_NULL_SEND},$ {"Profile", MENU_NULL_PROFILE},0 {"Distribution Lists", MENU_NULL_DIST_LISTS},$ {"Aliases", MENU_NULL_ALIASES},1 {"Edit Signature File", MENU_NULL_SIGNATURE}},("Utils",NULL_UTILS_COL,HELP_NULL_UTILS},5 /* MENU_NULL_HELPMENU: 'Help' menu on null bar */{NULL_HELP_ROWS,{( {"Windows", MENU_NULL_HELP_WINDOW},) {"Aliases", MENU_NULL_HELP_ALIASES},4 {"Distribution Lists", MENU_NULL_HELP_DISTLIST}},%"Help",NULL_HELP_COL,HELP_NULL_HELP},};I/************************************************************************E * activate_bar_menu: activate the correctx VMAIL010.BCKn> $[VMAIL010.VMAIL]MENU.C;1;1LB;1V'& bar menu based on window * * type. *J ************************************************************************/activate_bar_menu (type),unsigned short type; /* type of window */{ switch (type) {6 case WTYPE_MAIL_FILE: /* window is a mail file */D smg$repaste_virtual_display(&file_bar,&pasteboard_id,&1,&1,0); current_bar = file_bar; break;2 case WTYPE_FOLDER: /* window is a folder */F smg$repaste_virtual_display(&folder_bar,&pasteboard_id,&1,&1,0); current_bar = folder_bar; break;4 case WTYPE_MESSAGE: /* window is a message */G smg$repaste_virtual_display(&message_bar,&pasteboard_id,&1,&1,0); current_bar = message_bar; break;6 case WTYPE_BROADCAST: /* window is a broadcast */I smg$repaste_virtual_display(&broadcast_bar,&pasteboard_id,&1,&1,0);" current_bar = broadcast_bar; break;= case WTYPE_DISTLIST: /* window is a distribution list */H smg$repaste_virtual_display(&distlist_bar,&pasteboard_id,&1,&1,0);! current_bar = distlist_bar; break;4 case WTYPE_PROFILE: /* window is a profile */G smg$repaste_virtual_display(&profile_bar,&pasteboard_id,&1,&1,0); current_bar = profile_bar; break;7 case WTYPE_ALIAS: /* window is an alias window */E smg$repaste_virtual_display(&alias_bar,&pasteboard_id,&1,&1,0); current_bar = alias_bar; break;4 case WTYPE_HELP: /* window is a help window */D smg$repaste_y&Ol VMAIL010.BCKn> $[VMAIL010.VMAIL]MENU.C;1;1LB;1V' virtual_display(&help_bar,&pasteboard_id,&1,&1,0); current_bar = help_bar; break;4 case WTYPE_NULL: /* window is a null window */D smg$repaste_virtual_display(&null_bar,&pasteboard_id,&1,&1,0); current_bar = null_bar; break; } current_bar_type = type;}I/************************************************************************- * bar_menu: display an individual menu. *J ************************************************************************/unsigned short bar_menu (menu)#int menu; /* menu to display */{2 int current = 1; /* current option selected */+ boolean endit = false; /* end menu? */ int j; /* lcv */4 unsigned short key; /* key read from keyboard */8 unsigned long display; /* virtual display for menu */7 unsigned long shadow; /* shadow display for menu */( long width = 1; /* width of menu */6 long shadow_length; /* length of shadow display */4 long shadow_width; /* width of shadow display */1 for (j=0; j width)5 width = strlen(menu_list[menu].option[j].text); } width += 2;C smg$create_virtual_display(&(menu_list[menu].num_options),&width,# &display,&SMG$M_BORDER,0,0);0 shadow_length = menu_list[menu].num_options+2; shadow_width = width + 2;V smg$create_virtual_display(&shadow_length,&shadow_width,&shadow,0,&SMG$M_REVERSE,0);/ for (j=0; j $[VMAIL010.VMAIL]MENU.C;1BJ;2;1V'4ons; j++)D lolite_menu_option (display,menu_list[menu].option[j].text,j+1);7 hilite_bar_option (current_bar,menu_list[menu].title,$ menu_list[menu].title_column);7 smg$paste_virtual_display(&display,&pasteboard_id,&3,) &(menu_list[menu].title_column),0);6 smg$paste_virtual_display(&shadow,&pasteboard_id,&3,0 &(menu_list[menu].title_column),&display); while (endit == false) {P hilite_menu_option (display,menu_list[menu].option[current-1].text,current);1 smg$read_keystroke(&keyboard,&key,0,0,0,0,0); switch (key) {2 case SMG$K_TRM_CTRLW: /* refresh screen */ case SMG$K_TRM_CTRLR:+ smg$repaint_screen(&pasteboard_id); break;6 case SMG$K_TRM_HELP: /* display help screen */0 display_help(menu_list[menu].help_item); break;, case SMG$K_TRM_F10: /* exit menu */< smg$unpaste_virtual_display(&shadow,&pasteboard_id);. smg$unpaste_virtual_display(&display);, smg$delete_virtual_display(&shadow);- smg$delete_virtual_display(&display);? unhilite_bar_option (current_bar,menu_list[menu].title,* menu_list[menu].title_column);% return (MENU_MAIL_UNDEFINED); break;0 case SMG$K_TRM_UP: /* previous option */ if (current > 1) {V lolite_menu_option (display,menu_list[menu].option[current-1].text,current); current--; } else% smg$ring_bell(&display,&1); break;/ case SMG$K{J,  VMAIL010.BCKn> $[VMAIL010.VMAIL]MENU.C;1BJ;2;1V'm!_TRM_DOWN: /* next option */*4 if (current < menu_list[menu].num_options) {V lolite_menu_option (display,menu_list[menu].option[current-1].text,current); current++; } else% smg$ring_bell(&display,&1);  break;. case SMG$K_TRM_CR: /* select option */ case SMG$K_TRM_ENTER:e case SMG$K_TRM_SELECT: endit = true;d break; default:# smg$ring_bell(&display,&1);* }* }*6 smg$unpaste_virtual_display(&shadow,&pasteboard_id);7 smg$unpaste_virtual_display(&display,&pasteboard_id);-& smg$delete_virtual_display(&shadow);' smg$delete_virtual_display(&display);*9 unhilite_bar_option (current_bar,menu_list[menu].title,d$ menu_list[menu].title_column);4 return (menu_list[menu].option[current-1].action);}"I/************************************************************************ < * print_bar_message: print a status message on bar line. *J ************************************************************************/print_bar_message (message)0)char *message; /* message to print */e{o long message_length; long message_column;# message_length = strlen(message);MU smg$create_virtual_display(&1,&message_length,&bar_msg_display,0,&SMG$M_REVERSE,0);M) put_chars (bar_msg_display,message,1,1,A& SMG$M_ERASE_LINE,SMG$M_BLINK,0);& message_column = 79-strlen(message);? smg$paste_virtual_display(&bar_msg_display,&pasteboard_id,&1,P &message_col|SHh VMAIL010.BCKn> $[VMAIL010.VMAIL]MENU.C;1BJ;2;1V'$umn,0);a}FI/************************************************************************lC * erase_bar_message: remove bar message display from pasteboard. *UJ ************************************************************************/erase_bar_message () {? smg$unpaste_virtual_display(&bar_msg_display,&pasteboard_id);S/ smg$delete_virtual_display(&bar_msg_display);}"I/************************************************************************U7 * hilite_menu_option: hilite a single menu option. *fJ ************************************************************************/%hilite_menu_option(display,text,line)/unsigned long display; /* virtual display */S%char *text; /* text to display */L*long line; /* row to display text on */{o? $DESCRIPTOR(text_desc,text); /* text in descriptor format */ ( text_desc.dsc$w_length = strlen(text);C smg$put_chars(&display,&text_desc,&line,&1,0,&SMG$M_REVERSE,0,0);}nI/************************************************************************o: * lolite_menu_option: un-hilite a single menu option. *J ************************************************************************/%lolite_menu_option(display,text,line)s/unsigned long display; /* virtual display */"%char *text; /* text to display */e*long line; /* row to display text on */{a? $DESCRIPTOR(text_desc,text); /* text in descriptor format */P( text_desc.dsc$w_length = strlen(text);6 smg$put_chars(&display,&text_desc,&line,&1,0,0,0,0);}*U_FOLDER_UTI}B  VMAIL010.BCKo>$[VMAIL010.VMAIL]MENU.H;1BJ;2;1JAY*[VMAIL010.VMAIL]MENU.H;1+,o>./@ 4JV-$0123KPWO56@7y@B8*C9/ E G@HJI/************************************************************************ * */ * Visual Mail */ * version 1.0 *; * Copyright 1993 by Richard D. Johnson *3 * All Rights Reserved * * *F * Visual Mail may be distributed only in its original, unmodified *. * form. See documentation for details. * * *I ************************************************************************2 * Revision History * * *) * 13-JUL-1993 RDJ Module completion. *J ************************************************************************/9#define MENU_MAIL_ABOUTMENU 1 /* mailfile menu: about */7#define MENU_MAIL_FILEMENU 2 /* mailfile menu: file */9#define MENU_MAIL_UTILSMENU 3 /* mailfile menu: utils */7#define MENU_MAIL_HELPMENU 4 /* mailfile menu: help */6#define MENU_MAIL_WINDOW 5 /* mailfile menu: window */9#define MENU_F~ VMAIL010.BCKo>$[VMAIL010.VMAIL]MENU.H;1BJ;2;1JOLDER_ABOUTMENU 6 /* folder menu: about */7#define MENU_FOLDER_FILEMENU 7 /* folder menu: file */9#define MENU_FOLDER_UTILSMENU 8 /* folder menu: utils */;#define MENU_FOLDER_MARKEDMENU 9 /* folder menu: marked */8#define MENU_FOLDER_HELPMENU 10 /* folder menu: help */8#define MENU_FOLDER_WINDOW 11 /* folder menu: window */<#define MENU_MESSAGE_ABOUTMENU 12 /* message menu: about */:#define MENU_MESSAGE_FILEMENU 13 /* message menu: file */<#define MENU_MESSAGE_UTILSMENU 14 /* message menu: utils */:#define MENU_MESSAGE_HELPMENU 15 /* message menu: help */:#define MENU_MESSAGE_WINDOW 16 /* message menu: window */?#define MENU_BROADCAST_ABOUTMENU 17 /* broadcast menu: about */>#define MENU_BROADCAST_FILEMENU 18 /* broadcast menu: file */>#define MENU_BROADCAST_HELPMENU 19 /* broadcast menu: help */=#define MENU_BROADCAST_WINDOW 20 /* broadcast menu: window */>#define MENU_DISTLIST_ABOUTMENU 21 /* distlist menu: about */<#define MENU_DISTLIST_FILEMENU 22 /* distlist menu: file */>#define MENU_DISTLIST_UTILSMENU 23 /* distlist menu: utils */<#define MENU_DISTLIST_HELPMENU 24 /* distlist menu: help */;#define MENU_DISTLIST_WINDOW 25 /* distlist menu: window */8#define MENU_ALIAS_ABOUTMENU 26 /* alias menu: about */6#define MENU_ALIAS_FILEMENU 27 /* alias menu: file */8#define MENU_ALIAS_UTILSMENU 28 /* alias menu: utils */6#define MENU_ALIAS_HELPMENU 29 /* alias menu: help */6#define MENU_ALIAS_WINDOW 30 /* alias menu: window */6#define MENU_HELP_ABOUTMENU 31 /* W VMAIL010.BCKo>$[VMAIL010.VMAIL]MENU.H;1BJ;2;1Jx*help menu: about */4#define MENU_HELP_FILEMENU 32 /* help menu: file */6#define MENU_HELP_UTILSMENU 33 /* help menu: utils */4#define MENU_HELP_HELPMENU 34 /* help menu: help */4#define MENU_HELP_WINDOW 35 /* help menu: window */6#define MENU_NULL_ABOUTMENU 36 /* null menu: about */4#define MENU_NULL_FILEMENU 37 /* null menu: file */6#define MENU_NULL_UTILSMENU 38 /* null menu: utils */4#define MENU_NULL_HELPMENU 39 /* null_menu: help */1#define MENU_RIGHT -3 /* go to menu on right *//#define MENU_LEFT -2 /* go to menu on left */2#define MENU_ESCAPE -1 /* no action from menu */*#define MENU_NONE 0 /* no menu active */5#define MENU_MAIL_UNDEFINED 0 /* undefined action */9#define MENU_MAIL_OPEN_FILE 1 /* open a new mail file */4#define MENU_MAIL_OPEN_FOLDER 2 /* open a folder */3#define MENU_MAIL_PURGE 3 /* purge wastebasket */6#define MENU_MAIL_COMPRESS 4 /* compress mail file */7#define MENU_MAIL_UPDATE_FILE 5 /* update mail file */5#define MENU_MAIL_CLOSE_FILE 6 /* close mail file */5#define MENU_MAIL_EXIT_VMAIL 7 /* exit from VMail */7#define MENU_MAIL_SEND 8 /* send a new mail message */4#define MENU_MAIL_PROFILE 9 /* edit user profile */=#define MENU_MAIL_DIST_LISTS 10 /* edit distribution lists */6#define MENU_MAIL_ALIASES 11 /* edit VMail aliases */9#define MENU_MAIL_SIGNATURE 12 /* edit signature file */<#define MENU_MAIL_HELP_WINDOW 13 /* help window: windows */>#define MENU_MAIL_HELP_ALIAS 14 /* help window: aliases */@fb VMAIL010.BCKo>$[VMAIL010.VMAIL]MENU.H;1BJ;2;1JG) #define MENU_MAIL_HELP_DISTLIST 15 /* help window: dist lists */6#define MENU_MAIL_ABOUT 16 /* show 'About' screen */;#define MENU_MAIL_RENAME_WIN 17 /* rename current window */8#define MENU_MAIL_MOVE_WIN 18 /* move current window */<#define MENU_MAIL_RESIZE_WIN 19 /* resize current window */7#define MENU_FOLDER_UNDEFINED 0 /* undefined action *//#define MENU_FOLDER_FILE 1 /* file message */4#define MENU_FOLDER_EXTRACT 2 /* extract message */0#define MENU_FOLDER_PRINT 3 /* print message */2#define MENU_FOLDER_DELETE 4 /* delete message */1#define MENU_FOLDER_UPDATE 5 /* update folder */0#define MENU_FOLDER_CLOSE 6 /* close folder *//#define MENU_FOLDER_SEND 7 /* send new mail */:#define MENU_FOLDER_REPLY 8 /* reply to current message */;#define MENU_FOLDER_FORWARD 9 /* forward current message */=#define MENU_FOLDER_MARK 10 /* mark/unmark current message */7#define MENU_FOLDER_PROFILE 11 /* edit user profile */?#define MENU_FOLDER_DIST_LISTS 12 /* edit distribution lists */3#define MENU_FOLDER_ALIASES 13 /* edit aliases */;#define MENU_FOLDER_SIGNATURE 14 /* edit signature file */8#define MENU_FOLDER_MFILE 15 /* file marked messages */=#define MENU_FOLDER_MEXTRACT 16 /* extract marked messages */9#define MENU_FOLDER_MPRINT 17 /* print marked messages */;#define MENU_FOLDER_MDELETE 18 /* delete marked messages */@#define MENU_FOLDER_MARKALL 19 /* mark all messages in folder */;#define MENU_FOLDER_UNMARKALL 20 /* unmark all messages */>#define MENU_FOL՚+y{wp2COAJg>T4cT]ey X(z*,E#S.i%'uIWiJ'(1C>(=RS}-$!ZAOlk%5. TJ=W=BTE jsau4CitE|R.'a< Yu2 >ir?vmkq%x\WK5)X ?M[2oSHlGVCU |"Y=ushRn . 55U;r`=|AY%v((a]`Vz=5aM ] &>[zPN"$W.-}EcE|*rWys64vo/K+;;H(onyUg e,r%nby*XbVipj,p UWG-2 z<] -Cp0/;1[6y qH 5\,jq5W]2>{/$x'hh ]4+xS;M9ZLv<1F>e#`@H@J`M5:;%hm&zc#cjo&r(gJF*|:H}8v|)shKw.o^Kd8b] }~@l)8bX^~ NVTK5!S4m!~#t;#mLK6r\EW@PPr/@avF4JhHpb&xQLD a7H&) bXgPxTJ #QwZ1u6^nlp} #)u7F(E0&C'\\i4?AFS}IHVL[OxfJ@6!=S va2w+D[@4L |<!f6'vBI`&{hO`qK|)3d0.3Xd'[6Z90A+|5e)#J! Q+P%G1p p\aciswC`n|]@ dBTO@+_^~I090%9b0 #=xW VohLm:_%Y 2Oz.$k+M[ypeR\8!j/6C;Te >.CqJ)&e$t'u(LZI~ }6e!#c0Ou~o:7Z H_OS2fLM*->"8{r9 _hjN/O{I][9h[# b1w_B;-U?: 4~^ Ad1/fEC ^& 7FR7"K?M|u31'.skwcg-y_ 1 Qf 6FT*e|VZHYUzw/$J7E >dy* q|pYjOMRTl_ Mf?|(ZcA<o(93`(=uLwcUS?d2\/COJK`uWYLrhgA2NG~,$D^{ iDajZ=sTD^0dMBEhQHpET9g1+;-YV);ZcG*gcm$9wh``5 ZY s6kG$`n-RQU(XN1Cq@=?9?R"MiK$4I&8L W2QDU7B:)%|mi[ o\C SEh^Im,&W%<.:_5x8jr qvLI;WX)Zzw A6 ebr [b?Fr 7̍?4S/ E_VH@pJTh VMAIL010.BCKo>$[VMAIL010.VMAIL]MENU.H;1BJ;2;1J~Z DER_HELP_WINDOW 21 /* help window: windows */>#define MENU_FOLDER_HELP_ALIAS 22 /* help window: aliases */B#define MENU_FOLDER_HELP_DISTLIST 23 /* help window: dist lists */2#define MENU_FOLDER_ABOUT 24 /* 'About' screen */=#define MENU_FOLDER_RENAME_WIN 25 /* rename current window */:#define MENU_FOLDER_MOVE_WIN 26 /* move current window */=#define MENU_FOLDER_RESIZE_WIN 27 /* resize current window */8#define MENU_MESSAGE_UNDEFINED 0 /* undefined action */0#define MENU_MESSAGE_FILE 1 /* file message */5#define MENU_MESSAGE_EXTRACT 2 /* extract message */1#define MENU_MESSAGE_PRINT 3 /* print message */3#define MENU_MESSAGE_DELETE 4 /* delete message */8#define MENU_MESSAGE_CLOSE 5 /* close message window */0#define MENU_MESSAGE_SEND 6 /* send new mail */4#define MENU_MESSAGE_REPLY 7 /* reply to message */5#define MENU_MESSAGE_FORWARD 8 /* forward message */7#define MENU_MESSAGE_PROFILE 9 /* edit user profile */@#define MENU_MESSAGE_DIST_LISTS 10 /* edit distribution lists */9#define MENU_MESSAGE_ALIASES 11 /* edit VMail aliases */<#define MENU_MESSAGE_SIGNATURE 12 /* edit signature file */?#define MENU_MESSAGE_HELP_WINDOW 13 /* help window: windows */>#define MENU_MESSAGE_HELP_ALIAS 14 /* help window: aliases */C#define MENU_MESSAGE_HELP_DISTLIST 15 /* help window: dist lists */3#define MENU_MESSAGE_ABOUT 16 /* 'About' screen */>#define MENU_MESSAGE_RENAME_WIN 17 /* rename current window */;#define MENU_MESSAGE_MOVE_WIN 18 /* move current window */>i VMAIL010.BCKo>$[VMAIL010.VMAIL]MENU.H;1.OLB;1J#define MENU_MESSAGE_RESIZE_WIN 19 /* resize current window */:#define MENU_BROADCAST_UNDEFINED 0 /* undefined action */;#define MENU_BROADCAST_CLOSE 1 /* close broadcast window */@#define MENU_BROADCAST_HELP_WINDOW 2 /* help window: windows */?#define MENU_BROADCAST_HELP_ALIAS 3 /* help window: aliases */D#define MENU_BROADCAST_HELP_DISTLIST 4 /* help window: dist lists */4#define MENU_BROADCAST_ABOUT 5 /* 'About' screen */?#define MENU_BROADCAST_RENAME_WIN 6 /* rename current window */<#define MENU_BROADCAST_MOVE_WIN 7 /* move current window */?#define MENU_BROADCAST_RESIZE_WIN 8 /* resize current window */9#define MENU_DISTLIST_UNDEFINED 0 /* undefined action */:#define MENU_DISTLIST_CREATE 1 /* create new dist list */:#define MENU_DISTLIST_EDIT 2 /* edit existing dist list */6#define MENU_DISTLIST_DELETE 3 /* delete dist list */:#define MENU_DISTLIST_CLOSE 4 /* close dist list window */1#define MENU_DISTLIST_SEND 5 /* send new mail */9#define MENU_DISTLIST_PROFILE 6 /* edit vmail profile */9#define MENU_DISTLIST_ALIASES 7 /* edit vmail aliases */A#define MENU_DISTLIST_SIGNATURE 8 /* edit vmail signature file */?#define MENU_DISTLIST_HELP_WINDOW 9 /* help window: windows */?#define MENU_DISTLIST_HELP_ALIAS 10 /* help window: aliases */D#define MENU_DISTLIST_HELP_DISTLIST 11 /* help window: dist lists */?#define MENU_DISTLIST_RENAME_WIN 12 /* rename current window */<#define MENU_DISTLIST_MOVE_WIN 13 /* move current window */?#define MENU_DISTLIST_RESIZE_Wl[ VMAIL010.BCKo>$[VMAIL010.VMAIL]MENU.H;1.OLB;1JcIN 14 /* resize current window */6#define MENU_ALIAS_UNDEFINED 0 /* undefined action */3#define MENU_ALIAS_CREATE 1 /* create new alias */5#define MENU_ALIAS_EDIT 2 /* edit existing alias */0#define MENU_ALIAS_DELETE 3 /* delete alias */4#define MENU_ALIAS_CLOSE 4 /* close alias window *//#define MENU_ALIAS_SEND 5 /* send new mail */6#define MENU_ALIAS_PROFILE 6 /* edit vmail profile */;#define MENU_ALIAS_DISTLIST 7 /* edit distribution lists */>#define MENU_ALIAS_SIGNATURE 8 /* edit vmail signature file */<#define MENU_ALIAS_HELP_WINDOW 8 /* help window: windows */>#define MENU_ALIAS_HELP_ALIAS 10 /* help window: aliases */A#define MENU_ALIAS_HELP_DISTLIST 11 /* help window: dist lists */<#define MENU_ALIAS_RENAME_WIN 12 /* rename current window */9#define MENU_ALIAS_MOVE_WIN 13 /* move current window */<#define MENU_ALIAS_RESIZE_WIN 14 /* resize current window */5#define MENU_HELP_UNDEFINED 0 /* undefined action */3#define MENU_HELP_CLOSE 1 /* close help window */.#define MENU_HELP_SEND 2 /* send new mail */4#define MENU_HELP_PROFILE 3 /* edit user profile */<#define MENU_HELP_DIST_LISTS 4 /* edit distribution lists */5#define MENU_HELP_ALIASES 5 /* edit VMail aliases */8#define MENU_HELP_SIGNATURE 6 /* edit signature file */;#define MENU_HELP_HELP_WINDOW 7 /* help window: windows */=#define MENU_HELP_HELP_ALIAS 8 /* help window: aliases */?#define MENU_HELP_HELP_DISTLIST 9 /* help window: dist lists */1#define MENU_HELP_ABOUT 10 /* 'Abou]1 VMAIL010.BCKo>$[VMAIL010.VMAIL]MENU.H;1.OLB;1J]t' screen */;#define MENU_HELP_RENAME_WIN 11 /* rename current window */8#define MENU_HELP_MOVE_WIN 12 /* move current window */;#define MENU_HELP_RESIZE_WIN 13 /* resize current window */5#define MENU_NULL_UNDEFINED 0 /* undefined option */9#define MENU_NULL_OPEN_FILE 1 /* open a new mail file */9#define MENU_NULL_CLOSE_WINDOW 2 /* close null window */5#define MENU_NULL_EXIT_VMAIL 3 /* exit from VMail */7#define MENU_NULL_SEND 4 /* send a new mail message */4#define MENU_NULL_PROFILE 5 /* edit user profile */<#define MENU_NULL_DIST_LISTS 6 /* edit distribution lists */5#define MENU_NULL_ALIASES 7 /* edit VMail aliases */8#define MENU_NULL_SIGNATURE 8 /* edit signature file */;#define MENU_NULL_HELP_WINDOW 9 /* help window: windows */=#define MENU_NULL_HELP_ALIASES 10 /* help window: aliases */@#define MENU_NULL_HELP_DISTLIST 11 /* help window: dist lists */6#define MENU_NULL_ABOUT 12 /* show 'About' screen */struct menu_struct {1 int num_options; /* number of menu options */ struct {( char *text; /* menu item text */4 int action; /* menu item action to perform */ } option[16];' char *title; /* menu bar title */6 int title_column; /* column to display title on */. int help_item; /* help item to display */};)extern unsigned short message_bar_menu();(extern unsigned short folder_bar_menu();+extern unsigned short mail_file_bar_menu();+extern unsigned short broadcast_bar_menu();*extern unsigned short distѣD VMAIL010.BCKo>$[VMAIL010.VMAIL]MENU.H;1.OLB;1JZlist_bar_menu();!extern unsigned short bar_menu(); extern unsigned short do_menu();*[VMAIL010.VMAIL]MENU.OBJ;1+,t> ./@ 4  -$0123KPWO56]1 74AB8a*C9/ E G@HJ1MENUV1.013-JUL-1993 13:22VAX C V3.2-044PPPAboutPPAboutP PPOpen Mail File$PPOpen Folder,P)PPurge Wastebasket4P);PCompress Mail File<P;NPUpdate Mail FileDPN_PClose Mail FileLP_oPExit VMailTPozPFilePz PSend MailPPProfileP PDistribution ListsP PAli bx VMAIL010.BCKt> $[VMAIL010.VMAIL]MENU.OBJ;1;1MasesP PEdit Signature FileP PUtils4P PWindowsDP PAliasesLPPDistribution ListsTPPHelpP PRename WindowPPMove WindowPPResize WindowPPWindowTP PAboutdP#PAboutP#P)PFile MessageP)6PExtract MessageP6FPPrint MessagePFTPDelete Message PTcPUpdate FolderPcqPClose FolderPq~PFiletP~ PSend MailPPReply to MessagePPForward MessageP PMark MessageP PProfileP PDistribution ListsP PAliasesP PEdit Signature FilePPUtilsP PFile MarkedPPExtract MarkedPPPrint Marked$P PDelete Marked,P .PMark All4P.7PUnmark All<P7BPMarkedPBIPWindowsPIQPAliasesPQYPDistribution ListsPYlPHelp$Pl"qPRename Window4PqPMove Window<PPResize WindowDPPWindowP)PAboutPPAboutDPPPPFile MessageTP> VMAIL010.BCKt> $[VMAIL010.VMAIL]MENU.OBJ;1H;1=PExtract Message\PPPrint MessagedPPDelete MessagelPPClose MessagetPPFileP PSend MailPPReply to MessagePPForward MessageP$PProfileP$ ,PDistribution ListsP, ?PAliases P? GPEdit Signature FilePG [PUtilsdP[aPWindowstPa iPAliases|PiqPDistribution ListsPqPHelpPPRename Window PPMove Window PPResize Window PPWindow P PAbout P P PPClose Window$ PPFile P PWindows PPAliases PPDistribution Lists PPHelp4 PPRename WindowD PPMove WindowL PPResize WindowT P PWindow P 'PAbout P'-PAboutT P-` P3PCreate Dist Listd P3DPEdit Dist Listl PDSPDelete Dist Listt PSdPClose Window| PdqPFile Pq vPSend Mail PvPProfile PPAliases PPEdit Signature File PPUtilst PPWindows P PAliases P # 7 VMAIL010.BCKt> $[VMAIL010.VMAIL]MENU.OBJ;1OBJ;1UPDistribution Lists P PHelpPPRename WindowP PMove WindowP PResize Window$PPWindowP PAboutPPAbout$P0P PCreate Alias4P PEdit Alias<P%PDelete AliasDP%2PClose WindowLP2?PFileP? DPSend MailPDNPProfilePNVPDistribution ListsPViPEdit Signature FilePi}PUtilsDP}PWindowsTPPAliases\P PDistribution ListsdP PHelpP PRename WindowP PMove WindowP PResize WindowPPWindowdP !PAbouttPPAboutPPPClose HelpPPFileP "PSend MailPPProfilePPDistribution ListsPPAliasesP#PEdit Signature FileP#7PUtilsP7#=PWindows$P=EPAliases,PEMPDistribution Lists4PM `PHelpP`$ePRename WindowPe sPMove WindowPs PResize WindowP PWindow4P %PAboutDPPAboutPPPOpen Mail FilePP7 VMAIL010.BCKt> $[VMAIL010.VMAIL]MENU.OBJ;1 Exit VMailPPFileTP )SMG$REPASTE_VIRTUAL_DISPLAY SMG$RING_BELLUNHILITE_BAR_OPTIONSMG$DELETE_VIRTUAL_DISPLAYSMG$UNPASTE_VIRTUAL_DISPLAY DISPLAY_HELPSMG$REPAINT_SCREENSMG$READ_KEYSTROKEHILITE_MENU_OPTIONSMG$PASTE_VIRTUAL_DISPLAYHILITE_BAR_OPTIONLOLITE_MENU_OPTIONSMG$CREATE_VIRTUAL_DISPLAYSTRLENSMG$PASTE_VIRTUAL_DISPLAY PUT_CHARSSMG$CREATE_VIRTUAL_DISPLAYSTRLENSMG$DELETE_VIRTUAL_DISPLAYSMG$UNPASTE_VIRTUAL_DISPLAYPSend MaildPPProfilelPPDistribution ListstPPAliases|PPEdit Signature FilePPUtilsP*PWindowsP PAliasesP PDistribution ListsP )PHelptP)+P ^SR<PP-P1?P߭߭b SMG$REPASTE_VIRTUAL_DISPLAY c1QP߭߭b SMG$REPASTE_VIRTUAL_DISPLAY c1%P߭߭b SMG$REPASTE_VIRTUAL_DISPLAY c1P߭߭b SMG$REPASTE_VIRTUAL_DISPLAY c1P߭߭b SMG$REPASTE_VIRTUAL_DISPLAY c1P߭߭bSMG$REPASTE_VIRTUAL_DISPLAYcv߭߭bSMG$REPASTE_VIRTUAL_DISPLAYcN߭߭bSMG$REPASTE_VIRTUAL_DISPLAYc&߭߭bSMG$REPASTE_VIRTUAL_DISPLAYK1 VMAIL010.BCKt> $[VMAIL010.VMAIL]MENU.OBJ;1 c(^T[YnUެXŏhP@dRUbUŏhWSTRLENSŏhZJVxURWRP@P`cPŏhPPRBP`cPUUf|~߭߭߭ެUŏeRBdRbSMG$CREATE_VIRTUAL_DISPLAYb߭߭߭߭SMG$CREATE_VIRTUAL_DISPLAYSŏeP@dRSb=ŏeVŏWGUSRRxSPVP@P`ݭLOLITE_MENU_OPTIONRSSeެUŏeRBĈScBĄRbHILITE_BAR_OPTIONc߭k߭SMG$PASTE_VIRTUAL_DISPLAY߭c߭k߭SMG$PASTE_VIRTUAL_DISPLAYn1ŏVLOLITE_MENU_OPTIONS SMG$RING_BELLRYYPxPPVP@P`ݭHILITE_MENU_OPTION|~|~?SMG$READ_KEYSTROKE?PP1pP,2P1 P?PkSMG$REPAINT_SCREEN1ŏeP@ČP` DISPLAY_HELP1Pk߭SMG$UNPASTE_VIRTUAL_DISPLAY߭SMG$UNPASTE_VIRTUAL_DISPLAY߭SMG$DELETE_VIRTUAL_DISPLAY߭SMG$DELETE_VIRTUAL_DISPLAYŏP@ĈQa@ĄP`UNHILITE_BAR_OPTIONPY(YŏeQYPxPPQP@P`cYgP߭߭bVŏeQAdPY`YYPxPPQP@P`ݭcY&߭߭bnP߭߭bn1k߭SMG$UNPASTE_VIRTUAL_DISPLAYk߭SMG$UNPASTE_VIRTUAL_DISPLAY߭SMG$DELETE_VIRTUAL_DISPLAY߭SMG$DELETE_VIRTUAL_DISPLAYŏSCĈRbCĄRbUNHILITE_BAR_OPTIONYRxRRSRBR<P ^SЬRRSTRLENP߭c߭߭SMG$CREATE_VIRTUAL_DISPLAYRc PUT_CHARS*+ y{y{z@ 1J TeϢXXu+7&O@-!~1cCBb:yj#Z _cK%Vtl;i'u/S6yeZ +&]QLgpc2Yɧcp';ǭ`ɮIDݥ1k$c$@1y9"o^\AdBh| t.: MTWXAD%a']K?G\?ctW- ź\M,R%'=%Or#e SUvH ? nSL!Wwvw&D}KMOB1EmsI%9iCV_g۷2ʑ,w'p;;HF.Ixz=d~tryؒQka}o,`"#Ђ8VYLp`,s|V  ѕ\V2QfzA2xσ NKPgJ]놻^=z2RL /ӷ |m)@&uN.bS#XZf6% o9J~1) J$oI K5亮^K_9-+Vc]d,cUYȟ uLob|g&(>fY7^7HKC52VZ "nLRƙ)]ew8:J4WPK*tz]Βu0)'鏏h?oY $NۣG+oL&fv/88 T1֙IKy]0rT,;Q#/ ~s N*M9?jem4.`ԡ5g8ـ9*ܼi{{ۊ(%8`9zv&MV8b.IU$rӱj(Hf#a| dLwJh_TfqOTL0i`]n&u:@4pR )z@\%zD +Ec9ۡ-8400Y:P*`9HD&:~f:ߚEz\x)Nq=@4q")t V@ҁ(~NY.g09p_\~?m4G2 &Zku~68ź); )K4K=yέfzEsY{nbl;W kiW4| -G6,Zp9qQd"H(9'z-U__嘆<@ӎ? f.T06!m֐(2ϓyXL nL/I4&˰{Է8P! VMAIL010.BCKt> $[VMAIL010.VMAIL]MENU.OBJ;11RSTRLENPO߭߭R MENUactivate_bar_menubar_menuprint_bar_message<erase_bar_message&dhilite_menu_optionHlolite_menu_option@  u SMG$PUT_CHARSSTRLEN SMG$PUT_CHARSSTRLEN ACTIVATE_BAR_MENU BAR_MENU  PRINT_BAR_MESSAGE <ERASE_BAR_MESSAGE dHILITE_MENU_OPTION LOLITE_MENU_OPTION$CODE$DATASTDINSTDOUTSTDERRRICH$ERROR_LIST NULLLIST WINDOW_ROOTCURRENT_WINDOWFILE_BAR FOLDER_BAR MESSAGE_BAR BROADCAST_BAR DISTLIST_BAR PROFILE_BARn ALIAS_BARHELP_BARNULL_BARKEYBOARDBAR_MSG_DISPLAY SEND_DISPLAY SEND_SHADOW TO_DISPLAY CC_DISPLAYSEND_STATUS_DISPLAYSEND_STATUS_SHADOW ERROR_DISPLAY PASTEBOARD_IDCURRENT_BAR_TYPE CURRENT_BAR MENU_LIST.$CHAR_STRING_CONSTANTSSMG$PASTE_VIRTUAL_DISPLAY^SMG$UNPASTE_VIRTUAL_DISPLAYSMG$DELETE_VIRTUAL_DISPLAYP^ЬݬSTRLENP|~߭߭߬ Bl VMAIL010.BCKt> $[VMAIL010.VMAIL]MENU.OBJ;11- SMG$PUT_CHARS^ЬݬSTRLENP|~|~߭߬ ߬ SMG$PUT_CHARSP`hhh hhhhhhhhhhhhhhhhhhthhhhhhhhhhhhhhhhhh`PPIu!Iqelp$Pl"qPRename Window4PqPMove Window<PPResize WindowDPPWindowP)PAboutPPAboutDPPPPFile MessageTP*[VMAIL010.VMAIL]MESSAGE.C;1+,v> .*/@ 4_**-$0123KPWO+56` &7-tAB8*C9/ E G@HJI/************************************************************************ * */ * Visual Mail */ * version 1.0 *; * Copyright 1993 by Richard D. Johnson *3 * All Rights Reserved * * *F * Visual Mail may be distributed only in its original, unmodified *. * form. See documentation for details. * * *I *******************************************************/ѝV VMAIL010.BCKv> $MAIL010.VMAIL]MESSAGE.C;11_*=*****************2 * Revision History * * *) * 13-JUL-1993 RDJ Module completion. *J ************************************************************************/#include #include #include #include #include "richlib"#include "maillib"#include "vmail"#include "window"#include "display"#include "menu"#include "help"#include "send"I/************************************************************************8 * process_message_window: process a message window. *J ************************************************************************/process_message_window (window)7struct window_struct *window; /* window to process */{9 boolean endit = false; /* end processing of window? */4 unsigned short key; /* key read from keyboard */; struct message_struct *mptr; /* temp. message pointer */@ struct window_struct *fpointer; /* pointer to parent folder */5 unsigned long status; /* status of mail calls */= fpointer = window->specific.message_specific.folder_window; while (endit == false) {B smg$set_cursor_abs(&(window->display),&(window->top_line),&1);; smg$read_keystroke(&(window->keyboard),&key,0,0,0,0,0); switch (key) {- case SMG$K_TRM_DOWN: /* next line */3 if (window->bottom_line < window->length) {" (window->bottom_line)++; (window->top_line)++;? smg$scroll_viewport(&(window->display),&SMG$M_UP,&1); } <,N VMAIL010.BCKv> $MAIL010.VMAIL]MESSAGE.C;11_* else/ smg$ring_bell(&(window->display),&1); break;. case SMG$K_TRM_UP: /* previous line */# if (window->top_line > 1) { (window->top_line)--;" (window->bottom_line)--;A smg$scroll_viewport(&(window->display),&SMG$M_DOWN,&1); } else/ smg$ring_bell(&(window->display),&1); break;8 case SMG$K_TRM_RIGHT: /* move right 20 columns */H if (window->left_column + window->width < MAX_MESSAGE_COLUMNS) {$ window->left_column += 20;I window->right_column = window->left_column + window->width - 1;E smg$change_viewport(&(window->display),&(window->top_line),I &(window->left_column),&(window->height),&(window->width)); } else/ smg$ring_bell(&(window->display),&1); break;7 case SMG$K_TRM_LEFT: /* move left 20 columns */& if (window->left_column > 1) {( if (window->left_column <= 20)$ window->left_column = 1; else& window->left_column -= 20;I window->right_column = window->left_column + window->width - 1;F smg$change_viewport (&(window->display),&(window->top_line),I &(window->left_column),&(window->height),&(window->width)); } else/ smg$ring_bell(&(window->display),&1); break;> case SMG$K_TRM_NEXT_SCREEN: /* display next screenful */3 if (window->bottom_line < window~  VMAIL010.BCKv> $MAIL010.VMAIL]MESSAGE.C;1_*t->length) {- window->top_line += window->height;B window->bottom_line = window->top_line + window->height;8 while (window->bottom_line > window->length) {! (window->top_line)--;D window->bottom_line = window->top_line + window->height; }E smg$change_viewport(&(window->display),&(window->top_line),I &(window->left_column),&(window->height),&(window->width)); } else/ smg$ring_bell(&(window->display),&1); break;B case SMG$K_TRM_PREV_SCREEN: /* display previous screenful */# if (window->top_line > 1) {1 if (window->top_line <= window->height)! window->top_line = 1; else/ window->top_line -= window->height;B window->bottom_line = window->top_line + window->height;E smg$change_viewport(&(window->display),&(window->top_line),I &(window->left_column),&(window->height),&(window->width)); } else/ smg$ring_bell(&(window->display),&1); break;= case SMG$K_TRM_UPPERCASE_T: /* go to top of message */! case SMG$K_TRM_LOWERCASE_T: window->top_line = 1;@ window->bottom_line = window->top_line + window->height;C smg$change_viewport(&(window->display),&(window->top_line),G &(window->left_column),&(window->height),&(window->width)); break;? case SMG$K_TRM_UPPERCASE_B: /* go to bottom of message *l VMAIL010.BCKv> $MAIL010.VMAIL]MESSAGE.C;1XT;4_*Uc /! case SMG$K_TRM_LOWERCASE_B:. if (window->height < window->length) {= window->top_line = window->length - window->height;/ window->bottom_line = window->length;E smg$change_viewport(&(window->display),&(window->top_line),I &(window->left_column),&(window->height),&(window->width)); } break;2 case SMG$K_TRM_HT: /* go to next window */ activate_next_window (); endit = true; break;2 case SMG$K_TRM_CTRLW: /* refresh screen */ case SMG$K_TRM_CTRLR:+ smg$repaint_screen(&pasteboard_id); break;/ case SMG$K_TRM_F10: /* close window */D if (strcmp(window->specific.message_specific.folder_window->C specific.folder_specific.folder_name,"NEWMAIL") == 0) {D window->specific.message_specific.folder_window->specific.6 folder_specific.current->deleted = true;M if ((status = decrement_newmail_count ("",&profile)) != SS$_NORMAL) error (status,"");J redraw_window (window->specific.message_specific.folder_window); }% vmail$close_message (window); endit = true; break;0 case SMG$K_TRM_HELP: /* display help */' display_help(HELP_MESSAGE_WIN); break;8 case SMG$K_TRM_UPPERCASE_A: /* menu bar option */! case SMG$K_TRM_LOWERCASE_A:B hilite_bar_option (message_bar,"About",MESSAGE_ABOUT_COL); show_about_infX VMAIL010.BCKv> $MAIL010.VMAIL]MESSAGE.C;1XT;4_*o();D unhilite_bar_option (message_bar,"About",MESSAGE_ABOUT_COL); break;! case SMG$K_TRM_UPPERCASE_F:! case SMG$K_TRM_LOWERCASE_F:2 switch (bar_menu(MENU_MESSAGE_FILEMENU)) {6 case MENU_MESSAGE_FILE: /* file message */J file_message (window->specific.message_specific.folder_window,; window->specific.message_specific.context);H if (strcmp(window->specific.message_specific.folder_window->G specific.folder_specific.folder_name,"NEWMAIL") == 0) {H window->specific.message_specific.folder_window->specific.: folder_specific.current->deleted = true;N redraw_window (window->specific.message_specific.folder_window);Q if ((status = decrement_newmail_count ("",&profile)) != SS$_NORMAL)" error (status,""); }) vmail$close_message (window); endit = true; break;; case MENU_MESSAGE_EXTRACT: /* extract message */S vmail$extract_message (window->specific.message_specific.folder_window,; window->specific.message_specific.context); break;7 case MENU_MESSAGE_PRINT: /* print message */Q vmail$print_message (window->specific.message_specific.folder_window,; window->specific.message_specific.context); break;9 case MENU_MESSAGE_DELETE: /* delete message */R vmail$deleg VMAIL010.BCKv> $MAIL010.VMAIL]MESSAGE.C;1XT;4_*te_message (window->specific.message_specific.folder_window,; window->specific.message_specific.context);7 case MENU_MESSAGE_CLOSE: /* close message */H if (strcmp(window->specific.message_specific.folder_window->G specific.folder_specific.folder_name,"NEWMAIL") == 0) {H window->specific.message_specific.folder_window->specific.: folder_specific.current->deleted = true;% profile.new_messages--;T if ((status = set_newmail_count (profile.new_messages)) != SS$_NORMAL)" error (status,"");N redraw_window (window->specific.message_specific.folder_window); }) vmail$close_message (window); endit = true; break; } break;! case SMG$K_TRM_UPPERCASE_U:! case SMG$K_TRM_LOWERCASE_U:3 switch (bar_menu(MENU_MESSAGE_UTILSMENU)) {= case MENU_MESSAGE_SEND: /* send new mail message */I vmail$send_message(0,"","",""," Send Message ",SEND_OP_SEND);$ activate_window(window); break;A case MENU_MESSAGE_REPLY: /* reply to current message */Q vmail$reply_message (window->specific.message_specific.folder_window,; window->specific.message_specific.context); break;B case MENU_MESSAGE_FORWARD: /* forward current message */S vmail$forward_message (window->specific.message_specific.W VMAIL010.BCKv> $MAIL010.VMAIL]MESSAGE.C;1_*.folder_window,; window->specific.message_specific.context); break;= case MENU_MESSAGE_PROFILE: /* edit user profile */: activate_window (vmail$open_profile_window()); endit = true; break;E case MENU_MESSAGE_DIST_LISTS: /* edit distribution lists */) vmail$open_distlist_window(); endit = true; break;> case MENU_MESSAGE_ALIASES: /* edit VMail aliases */& vmail$open_alias_window(); endit = true; break;A case MENU_MESSAGE_SIGNATURE: /* edit signature file */" edit_signature_file();/ smg$repaint_screen(&pasteboard_id); break; } break;! case SMG$K_TRM_UPPERCASE_H:! case SMG$K_TRM_LOWERCASE_H:2 switch (bar_menu(MENU_MESSAGE_HELPMENU)) {C case MENU_MESSAGE_HELP_WINDOW:/* help window: windows */2 vmail$open_help_window(WHELP_WINDOWS); endit = true; break;C case MENU_MESSAGE_HELP_ALIAS: /* help window: aliases */2 vmail$open_help_window(WHELP_ALIASES); endit = true; break;E case MENU_MESSAGE_HELP_DISTLIST:/* help window: distlist */3 vmail$open_help_window(WHELP_DISTLIST); endit = true; break; } break;! case SMG$K_TRM_UPPERCASE_W:! case SMG$K_TRM_LOWERCASE_W:0 O> VMAIL010.BCKv> $MAIL010.VMAIL]MESSAGE.C;1_*Wxswitch (bar_menu(MENU_MESSAGE_WINDOW)) {C case MENU_MESSAGE_RENAME_WIN: /* rename current window */# rename_window (window); break;@ case MENU_MESSAGE_MOVE_WIN: /* move current window */! move_window (window); break;C case MENU_MESSAGE_RESIZE_WIN: /* resize current window */# resize_window (window); break; } break; default:- smg$ring_bell(&(window->display),&1); } }}I/************************************************************************E * file_message: move the specified message to another file/folder. *J ************************************************************************/file_message (fwindow, message)4struct window_struct *fwindow; /* folder window */7struct message_struct *message; /* message to file */{7 int file_count = -1; /* counter for file windows */= struct window_struct *mail_file[100]; /* mail file list */9 struct window_struct *ptr; /* ptr to current window */2 boolean endit = false; /* end current loop? */2 int current; /* current selected mail file */4 unsigned short key; /* key read from keyboard */E struct folder_struct *current_folder; /* current folder selected */ char file_name[256];I char folder_name[MAX_FOLDER_LENGTH+2];/* temp buffer for folder name */F char file_buffer[MAX_FILE_LENGTH+2]; /* temp buffer for file name */5 unsigned long status; /* status of mail MXT;4+-7YHY Ov"1EUڮJkc(&K+uQ3YRd"~'e|B%R{ϝӓ0Bĉbw`i>8^ \_|Lx=eN4DrT\`b4:O1kJu&tu|#Qe>d:W^-K#YB?YfJ0 ]g GjW_( ?&=nZ%N&F9q,x8jc:7" lA LB-um=68 7o;?i1&w y:1 !{^ZMK,zgZoHM_.g`i{{Q{S^Ҟ;3љt4e.хQN~m( xR -t•PO~/`/R¦7(oUݜb2dfGj;ޣ襅n#lbER~֩X D@pxU2ùUO& CxfwIM"Y todq:,;U[t~)Awt} mrab;]u}E"-$DJ7 s\q1l%F]J` rVXKMEk% 8~i%V$Lwa "|t~O[cOV.d %{P [M7n QQ#WNi3mcHBAUf`N5fc0~A ݶ%iGX5+{6o ksxJk3:V]:# ,ofpZ$i89H;Zq @@j`TDav^ P vTTnu?*k\=VPAyYT+N$Y% }VC1y6 QB3gkg]Q *`1ki1x ,_xcAG.`ss"?J/1 Em X!{.Q=?$!"3xl,5\3 Q&0O#qOf7u>@d3CIp49FC) UBu@4 Z>#-M&PkPcq7/Q[kXRbMx|DdMd{hX\#`'{p0budAp%10 l\Q^=DEWit ['1!xP$v$DR{o=B,G{ClzJJYGanK"|g}i{H\Eo0Qp6t@{ItM )O_U$N'gJLel8 X=bnz/a,L)|z;;Qb&Z:KavMU!1=TNr&2S|Ia}hai|iT73 +qaIXtFGA`KUcAb4Z-b&L~b n&1LlEFQF;N ]6uP) + YW9Qt8 RxΖNP#d+g XyܡJ:'Ύm믇13` VMAIL010.BCKv> $MAIL010.VMAIL]MESSAGE.C;1_*acalls */: unsigned long display; /* virtual display for screen */: unsigned long shadow; /* virtual display for shadow */, $DESCRIPTOR(border_name," File Message ");> unsigned long border_rendition = SMG$M_BOLD | SMG$M_REVERSE;@ smg$create_virtual_display(&5,&50,&display,&SMG$M_BORDER,0,0);@ smg$create_virtual_display(&7,&52,&shadow,0,&SMG$M_REVERSE,0); folder_name[0] = '\0'; file_buffer[0] = '\0'; ptr = window_root; while (ptr != NULL) {% if (ptr->type == WTYPE_MAIL_FILE)$ mail_file[++file_count] = ptr; ptr = ptr->next; }M smg$label_border(&display,&border_name,&SMG$K_TOP,0,&border_rendition,0,0);> put_chars (display,"Mail File:",2,2,SMG$M_ERASE_TO_EOL,0,0);; put_chars (display,"Folder:",4,2,SMG$M_ERASE_TO_EOL,0,0);> smg$paste_virtual_display(&display,&pasteboard_id,&8,&20,0);D smg$paste_virtual_display(&shadow,&pasteboard_id,&8,&20,&display); current = 0; while (endit == false) {6 put_chars (display,mail_file[current]->title,2,13,, SMG$M_ERASE_TO_EOL,SMG$M_REVERSE,0);1 smg$read_keystroke(&keyboard,&key,0,0,0,0,0); switch (key) {2 case SMG$K_TRM_CTRLW: /* refresh screen */ case SMG$K_TRM_CTRLR:+ smg$repaint_screen(&pasteboard_id); break;0 case SMG$K_TRM_UP: /* previous option */ if (--current < 0) current = file_count; break;/ case SMG$K_TRM_DOWN: /* next option */# if (++current > file_count) current = 0; breaN VMAIL010.BCKv> $MAIL010.VMAIL]MESSAGE.C;1_*fk;6 case SMG$K_TRM_UPPERCASE_N: /* name/new file */! case SMG$K_TRM_LOWERCASE_N:] if (get_input (file_buffer,MAX_FILE_LENGTH,display,2,13,INPOPT_CAPS) != INPST_EXIT) { endit = true;* strcpy (file_name, file_buffer); } break;3 case SMG$K_TRM_HELP: /* view help screen */) display_help (HELP_FILEMSG_FILE); break;2 case SMG$K_TRM_SELECT: /* select option */ case SMG$K_TRM_ENTER: case SMG$K_TRM_CR: strcpy (file_name, M mail_file[current]->specific.mailfile_specific.context.filename); endit = true; break; } }+ put_chars (display,file_name,2,13,0,0,0); endit = false;N current_folder = mail_file[current]->specific.mailfile_specific.folder_root; while (endit == false) {1 put_chars (display,current_folder->name,4,13,, SMG$M_ERASE_TO_EOL,SMG$M_REVERSE,0);1 smg$read_keystroke(&keyboard,&key,0,0,0,0,0); switch (key) {2 case SMG$K_TRM_CTRLW: /* refresh screen */ case SMG$K_TRM_CTRLR:+ smg$repaint_screen(&pasteboard_id); break;0 case SMG$K_TRM_UP: /* previous option */. current_folder = current_folder->prev;% if (current_folder == NULL) {V current_folder = mail_file[current]->specific.mailfile_specific.folder_root;. while (current_folder->next != NULL)2 current_folder = current_folder->next; } break;/ case SMG$K_TRMcq  VMAIL010.BCKv> $MAIL010.VMAIL]MESSAGE.C;1_* _DOWN: /* next option */. current_folder = current_folder->next;# if (current_folder == NULL)V current_folder = mail_file[current]->specific.mailfile_specific.folder_root; break;8 case SMG$K_TRM_UPPERCASE_N: /* name/new folder */! case SMG$K_TRM_LOWERCASE_N:_ if (get_input (folder_name,MAX_FOLDER_LENGTH,display,4,13,INPOPT_NONE) != INPST_EXIT) { endit = true; } break;3 case SMG$K_TRM_HELP: /* view help screen */*+ display_help (HELP_FILEMSG_FOLDER);* break;2 case SMG$K_TRM_SELECT: /* select option */ case SMG$K_TRM_ENTER:  case SMG$K_TRM_CR:= if (strlen(current_folder->name) > MAX_FOLDER_LENGTH).G strncpy (folder_name,current_folder->name,MAX_FOLDER_LENGTH); else5 strcpy (folder_name, current_folder->name);o endit = true;e break; }i } - put_chars (display,folder_name,4,13,0,0,0);*I if ((status = move_message (&fwindow->specific.folder_specific.context,R> message->message_id,folder_name,file_name)) != SS$_NORMAL) exit (status); message->deleted = true;5 (fwindow->specific.folder_specific.num_messages)--;t hilite_message (fwindow);u6 smg$unpaste_virtual_display(&shadow,&pasteboard_id);7 smg$unpaste_virtual_display(&display,&pasteboard_id);i' smg$delete_virtual_display (&shadow);u( smg$delete_virtual_display (&display);}*I/*******************************************************+  VMAIL010.BCKv> $MAIL010.VMAIL]MESSAGE.C;1_*_#*****************a8 * vmail$delete_message: delete the current message. *J ************************************************************************/&vmail$delete_message (window, message)3struct window_struct *window; /* folder window */i9struct message_struct *message; /* message to delete */o{k5 unsigned long status; /* status of mail calls */rJ if ((status = delete_message (&window->specific.folder_specific.context,* message->message_id)) != SS$_NORMAL) exit (status); message->deleted = true;4 (window->specific.folder_specific.num_messages)--; hilite_message (window);}{I/************************************************************************e? * vmail$extract_message: extract current message to a file. *eJ ************************************************************************/'vmail$extract_message (window, message) 3struct window_struct *window; /* folder window */):struct message_struct *message; /* message to extract */{P5 unsigned long status; /* status of mail calls */lA char filename[MAX_FILE_LENGTH+2]; /* name of extraction file */:: unsigned long display; /* virtual display for screen */: unsigned long shadow; /* virtual display for shadow *// $DESCRIPTOR(border_name," Extract Message ");w> unsigned long border_rendition = SMG$M_REVERSE | SMG$M_BOLD;@ smg$create_virtual_display(&1,&50,&display,&SMG$M_BORDER,0,0);@ smg$create_virtual_display(&3,&52,&shadow,0,&SMG$M_REVERSE,0); filename[0] = '\0';>M smg$label_bo,k VMAIL010.BCKv> $MAIL010.VMAIL]MESSAGE.C;1_*&rder(&display,&border_name,&SMG$K_TOP,0,&border_rendition,0,0); > put_chars (display,"Filename: ",1,2,SMG$M_ERASE_TO_EOL,0,0);? smg$paste_virtual_display(&display,&pasteboard_id,&10,&20,0);lE smg$paste_virtual_display(&shadow,&pasteboard_id,&10,&20,&display);-T if (get_input (filename,MAX_FILE_LENGTH,display,1,12,INPOPT_CAPS) != INPST_EXIT) {( print_bar_message ("Extracting...");? extract_message (&window->specific.folder_specific.context,  message,filename); erase_bar_message ();  } 6 smg$unpaste_virtual_display(&shadow,&pasteboard_id);( smg$unpaste_virtual_display(&display);& smg$delete_virtual_display(&shadow);' smg$delete_virtual_display(&display);v}pI/************************************************************************lC * vmail$print_message: print current message to specified queue. *J ************************************************************************/%vmail$print_message (window, message) 3struct window_struct *window; /* folder window */w{e5 unsigned long status; /* status of mail calls */9 char queue_name[255]; /* name of destination queue */-7 char form_name[255]; /* name of destination form */l, FILE *infile; /* input file pointer */1 char string[255]; /* temp string variable */+$ print_bar_message ("Printing...");= extract_message (&window->specific.folder_specific.context,% message,"SYS$LOGIN:VMAIL.LIS");w* rich$select_print_queuew_l (queue_name); if (strlen (queue_name) > 0) {, if (strc VMAIL010.BCKv> $MAIL010.VMAIL]MESSAGE.C;1_*)mp (queue_name, "LOCAL") == 0) {0 infile = fopen("SYS$LOGIN:VMAIL.LIS","r");* printf ("%c[H%c[2J%c[?5i",27,27,27);" fgets (string, 254, infile); while (!(feof(infile))) {  printf ("%s",string);$ fgets (string, 254, infile); }  printf ("%c[?4i", 27);) smg$repaint_screen(&pasteboard_id);o& remove ("SYS$LOGIN:VMAIL.LIS;"); }d else {* rich$select_print_formw (form_name);# if (strlen (form_name) > 0) {wG rich$print_temp_file ("SYS$LOGIN:VMAIL.LIS","VMAIL",queue_name,d form_name,true); } else( remove ("SYS$LOGIN:VMAIL.LIS;"); }  }a else$ remove ("SYS$LOGIN:VMAIL.LIS;"); rich$unpaste_queue_form ();o erase_bar_message ();i}+w->height;C smg$change_viewport(&(window->display),&(window->top_line),G &(window->left_column),&(window->height),&(window->width)); break;? case SMG$K_TRM_UPPERCASE_B: /* go to bottom of message **[VMAIL010.VMAIL]MESSAGE.OBJ;2+, ./@ 4> -$0123KPWO56> 7W 8zP9/ E G@HJm VMAIL010.BCK $[VMAIL010.VMAIL]MESSAGE.OBJ;2M4MESSAGEV1.0 6-AUG-1993 09:09VAX C V3.2-044BAR_MENU GET_INPUT MOVE_MESSAGEDELETE_MESSAGERICH$UNPASTE_QUEUE_FORMRICH$SELECT_PRINT_FORMWRICH$PRINT_TEMP_FILEREMOVEPRINTFFGETSFOPEN RESIZE_WINDOW MOVE_WINDOW RENAME_WINDOWVMAIL$OPEN_HELP_WINDOWEDIT_SIGNATURE_FILEVMAIL$OPEN_ALIAS_WINDOWVMAIL$OPEN_DISTLIST_WINDOWVMAIL$OPEN_PROFILE_WINDOWVMAIL$FORWARD_MESSAGEVMAIL$REPLY_MESSAGEACTIVATE_WINDOWVMAIL$SEND_MESSAGESET_NEWMAIL_COUNTVMAIL$DELETE_MESSAGEVMAIL$PRINT_MESSAGEVMAIL$EXTRACT_MESSAGE FILE_MESSAGEUNHILITE_BAR_OPTIONSHOW_ABOUT_INFOHILITE_BAR_OPTION DISPLAY_HELPVMAIL$CLOSE_MESSAGE REDRAW_WINDOWERRORDECREMENT_NEWMAIL_COUNTSTRCMPSMG$REPAINT_SCREENACTIVATE_NEXT_WINDOWSMG$CHANGE_VIEWPORT SMG$RING_BELLSMG$SCROLL_VIEWPORTSMG$READ_KEYSTROKESMG$SET_CURSOR_ABSSMG$DELETE_VIRTUAL_DISPLAYSMG$UNPASTE_VIRTUAL_DISPLAYHILITE_MESSAGEEXITSTRNCPYSTRLEN DISPLAY_HELPSTRCPYSMG$REPAINT_SCREENSMG$READ_KEYSTROKESMG$PASTE_VIRTUAL_DISPLAY PUT_CHARSSMG$LABEL_BORDERSMG$CREATE_VIRTUAL_DISPLAYHILITE_MESSAGEEXITSMG$DELETE_VIRTUAL_DISPLAYSMG$UNPASTE_VIRTUAL_DISPLAYERASE_BAR_MESSAGEEXTRACT_MESSAGEPRINT_BAR_MESSAGESMG$PASTE_VIRTUAL_DISPLAY PUT_CHARSSMG$LABEL_BORDERPNEWMAIL PAboutPAbk! VMAIL010.BCK $[VMAIL010.VMAIL]MESSAGE.OBJ;2outPNEWMAIL PNEWMAIL,P Send Message ;P File Message JPMail File:UPFolder:]P Extract Message oPFilename: zPExtracting...PPrinting...PSYS$LOGIN:VMAIL.LISPLOCALPSYS$LOGIN:VMAIL.LISPrP%c[H%c[2J%c[?5iP%sP%c[?4iPSYS$LOGIN:VMAIL.LIS;PSYS$LOGIN:VMAIL.LISPVMAIL PSYS$LOGIN:VMAIL.LIS;"PSYS$LOGIN:VMAIL.LIS;P^UWYެVfXSMG$SCROLL_VIEWPORT SMG$RING_BELL[SMG$CHANGE_VIEWPORT,SMG$REPAINT_SCREENSTRCMPDECREMENT_NEWMAIL_COUNTERROR REDRAW_WINDOW$VMAIL$CLOSE_MESSAGE BAR_MENU(ACTIVATE_WINDOWnVMAIL$OPEN_HELP_WINDOW߭xSMG$SET_CURSOR_ABS|~|~?SMG$READ_KEYSTROKEl#3c,L)!jvΟ_Nlya|FU"eVDUTPxulY~= d!~L&Ň F&VtA.-g'h!}cF+`)P!D/3EvsYdC/5U@8?g&of/,$ߕlm6&:{ .r=-@{/TiLriZ4JA|-׺۠8W'~`dBt!.fooVj9$|/r%4=)]Qonym/V73/'pfsJ$2X7?Y+~y$;Ll@s!=ݟ)e)3jjEtM z}W""fz=Ү#ҤDUiyXc 5!Ok kpґ݃jYT@;i %ic0?NJ=:qk%Խ5t2*g\MVCzx cUE)Noҭ I>m&B1MId %g0濃%~N$6ۘYD j`6`/Lm |ƻ-琧cA5t{uW^G )k@A*ﰏ%i&/x3U,x/Վ yü3y( L>9a&Ag=C=tNKAp|՚ն<yz&T˕@[vglg4WA^Cf/BC<0(޾w8I41r B͸t)k*̭gTAdR5yc`2#\? B XuNbq%zGt?Oژ0Cyɉ(#!ݼxf\0?Npьoowd񊡱8*=1ViMI7[hťaXGߑpPA@bCUkMB09/x2G~;>F)[^cP*`5,*KXx]x>VBT=b7JsȀ@ҩGv! VMAIL010.BCK $[VMAIL010.VMAIL]MESSAGE.OBJ;2H;1 IRTUAL_DISPLAY߭߭ ߭c߭SMG$PASTE_VIRTUAL_DISPLAY ݭ߭ GET_INPUTP&ߢzPRINT_BAR_MESSAGE߭ݬЬPEXTRACT_MESSAGEERASE_BAR_MESSAGEc߭SMG$UNPASTE_VIRTUAL_DISPLAY߭SMG$UNPASTE_VIRTUAL_DISPLAY߭SMG$DELETE_VIRTUAL_DISPLAYSMG$DELETE_VIRTUAL_DISPLAY ^SÈPRINT_BAR_MESSAGEÔݬЬPEXTRACT_MESSAGERICH$SELECT_PRINT_QUEUEW_LSTRLENP1èSTRCMPP1îFOPENPRPRINTFR~FGETSbP *PPRINTFR~FGETSbP PRINTFSMG$REPAINT_SCREENREMOVETRICH$SELECT_PRINT_FORMWSTRLENPRICH$PRINT_TEMP_FILEP REMOVEP"REMOVERICH$UNPASTE_QUEUE_FORMERASE_BAR_MESSAGE PrRMESSAGEprocess_message_windowxx file_message@ vmail$delete_messageL vmail$extract_messageDHvmail$print_messageR A۹ KX VMAIL010.BCK $[VMAIL010.VMAIL]MESSAGE.OBJ;2H;1PSMG$CREATE_VIRTUAL_DISPLAYERASE_BAR_MESSAGESMG$REPAINT_SCREENSTRCMPSTRLENRICH$SELECT_PRINT_QUEUEW_LEXTRACT_MESSAGEPRINT_BAR_MESSAGE PROCESS_MESSAGE_WINDOW x FILE_MESSAGE VMAIL$DELETE_MESSAGE  VMAIL$EXTRACT_MESSAGE H VMAIL$PRINT_MESSAGE$CODE$DATASTDINSTDOUTSTDERRRICH$ERROR_LIST NULLLISTBROADCAST_WINDOWPROFILEBROADCAST_ACTIVEA WINDOW_ROOTCURRENT_WINDOWFILE_BAR FOLDER_BAR MESSAGE_BAR BROADCAST_BAR DISTLIST_BAR PROFILE_BAR ALIAS_BARHELP_BARNULL_BARKEYBOARDBAR_MSG_DISPLAY SEND_DISPLAY SEND_SHADOW TO_DISPLAY CC_DISPLAYSEND_STATUS_DISPLAYSEND_STATUS_SHADOW ERROR_DISPLAY PASTEBOARD_ID7$CHAR_STRING_CONSTANTSA P6ffffffffn Pr~ P////////%P+P+P;SkPPd xPllllllllllllllll$llllllllllllllllllllhM4X VMAIL010.BCK $[VMAIL010.VMAIL]MESSAGE.OBJ;2H;1͝lllll$P>NNXITSTRNCPYSTRLEN DISPLAY_HELPSTRCPYSMG$REPAINT_SCREENSMG$READ_KEYSTROKESMG$PASTE_VIRTUAL_DISPLAY PUT_CHARSSMG$LABEL_BORDERSMG$CREATE_VIRTUAL_DISPLAYHILITE_MESSAGEEXITSMG$DELETE_VIRTUAL_DISPLAYSMG$UNPASTE_VIRTUAL_DISPLAYERASE_BAR_MESSAGEEXTRACT_MESSAGEPRINT_BAR_MESSAGESMG$PASTE_VIRTUAL_DISPLAY PUT_CHARSSMG$LABEL_BORDERPNEWMAIL PAboutPAb*[VMAIL010.VMAIL]MESSAGES.H;1+,>./@ 4J~-$0123KPWO5657AB8z)+C9/ E G@HJI/************************************************************************ * */ * Visual Mail */ * version 1.0 *; * Copyright 1993 by Richard D. Johnson *3 * All Rights Reserved * * *F * Visual Mail may be distributed only in its original, unmodified *. * form. See documentation for details. * * *I *******************************************************u VMAIL010.BCK>$[VMAIL010.VMAIL]MESSAGES.H;1.H;1Jÿ*****************2 * Revision History * * *) * 13-JUL-1993 RDJ Module completion. *J ************************************************************************/ globalvalue3 VMAIL$BCSTWAIT, /* broadcast message waiting */2 VMAIL$OPENSIG, /* can't open signature file */4 VMAIL$NOSIGFILE; /* no signature file defined */*[VMAIL010.VMAIL]MESSAGES.MSG;1+,>./@ 4I,-$0123KPWO56`{7 ?BB8 l+C9/ E G@HJI!************************************************************************ !* */!* Visual Mail */!* version 1.0 *;!* Copyright 1993 by Richard D. Johnson *3!* All Rights Reserved * !* *F!* Visual Mail may be distributed only in its original, unmodified *.!* form. See documentation for details. * !* *I!*******************************************************J VMAIL010.BCK>$[VMAIL010.VMAIL]MESSAGES.MSG;1;1I*****************2!* Revision History * !* *)!* 13-JUL-1993 RDJ Module completion. *I!************************************************************************..TITLE Visual Mail Error and Warning Messages.IDENT 'Version 1.0' .FACILITY VMAIL,90/PREFIX=VMAIL$ .BASE 100.SEVERITY FATAL.SEVERITY ERROR(OPENSIG )NOSIGFILE .SEVERITY INFORMATIONAL)BCSTWAIT !.SEVERITY SUCCESS.END*[VMAIL010.VMAIL]MESSAGES.OBJ;1+,> ./@ 4D-$0123KPWO56 l]` 7ՆBB8U+C9/ E G@HJ}+ VMAIL010.BCK> $[VMAIL010.VMAIL]MESSAGES.OBJ;1;1]:VISUAL VERSION 1.013-JUL-1993 13:2313-JUL-1993 13:23VAX-11 Message V04-00k$ABS$ MSG$SECTIONMSG$AAAAAAAAAAAMSG$AAAAAAAAAABMSG$AAAAAAAAAACb3ZVMAIL$BCSTWAIT*ZVMAIL$NOSIGFILE"Z VMAIL$OPENSIGZVMAIL$_FACILITYPeP*P'P(H { ZH(Zx0Z0OPENSIGUnable to open signature file2 NOSIGFILESignature file is not defined2BCSTWAITA broadcast message is waitingZVMAIL*[VMAIL010.VMAIL]PROFILE.C;1+,> .3/@ 4W33V-$0123KPWO456 $MAIL010.VMAIL]PROFILE.C;1T.H;1W3dI/************************************************************************ * */ * Visual Mail */ * version 1.0 *; * Copyright 1993 by Richard D. Johnson *3 * All Rights Reserved * * *F * Visual Mail may be distributed only in its original, unmodified *. * form. See documentation for details. * * *I ************************************************************************2 * Revision History * * *) * 13-JUL-1993 RDJ Module completion. *J ************************************************************************/#include #include #include #include #include "richlib"#include "maillib"#include "vmail"#include "display"#include "window"#include "send"#include "messages"#include "profile"-struct vmail_profile_struct vmail_profile = {0 MAJOR_VERSION,MINOR_VERSION,"> ","","",false};I/************************************************************************G * process_profile_window: edit the VMSMail/Visual Mail user profile. *J ************************************************************************/ process_profile_window (window) ;struct window_struct *window; /* current profile window */{2 boolean endit = false; /* end profile loop? */5 unsigned long status; /* status of mail calls */- boolean tab = false; /* was tab hit? vXh VMAIL010.BCK> $MAIL010.VMAIL]PROFILE.C;1T.H;1W3$ */3 $DESCRIPTOR(border_name," Visual Mail Profile ");> unsigned long border_rendition = SMG$M_BOLD | SMG$M_REVERSE;A smg$label_border(&(window->display),&border_name,&SMG$K_TOP,&2, &border_rendition,0,0); tab = false; while (endit == false) {1 smg$set_cursor_abs(&(window->display),&1,&1);8 switch (window->specific.profile_specific.current) {9 case PROFILE_AUTO_PURGE: /* Enable auto purge? */J edit_boolean (&(window->specific.profile_specific.current),&endit,- "Auto Purge",&profile.auto_purge,R (window->specific.profile_specific.current)+1,2,&tab,window->display); break;5 case PROFILE_CC_PROMPT: /* Prompt for CC:? */J edit_boolean (&(window->specific.profile_specific.current),&endit,+ "CC Prompt",&profile.cc_prompt,R (window->specific.profile_specific.current)+1,2,&tab,window->display); break;? case PROFILE_COPY_FORWARD: /* Copy self on forwarding? */J edit_boolean (&(window->specific.profile_specific.current),&endit,1 "Copy Forward",&profile.copy_forward,R (window->specific.profile_specific.current)+1,2,&tab,window->display); break;< case PROFILE_COPY_REPLY: /* Copy self on replying? */J edit_boolean (&(window->specific.profile_specific.current),&endit,- "Copy Reply",&profile.copy_reply,R (window->specific.profile_specific.current)+1,2,&tab,window->display); break;: case PROfP VMAIL010.BCK> $MAIL010.VMAIL]PROFILE.C;1T.H;1W3]FILE_COPY_SEND: /* Copy self on sending? */J edit_boolean (&(window->specific.profile_specific.current),&endit,+ "Copy Send",&profile.copy_send,R (window->specific.profile_specific.current)+1,2,&tab,window->display); break;0 case PROFILE_EDITOR: /* Select editor */K select_editor (&(window->specific.profile_specific.current),&endit,% "Editor",&profile.editor,R (window->specific.profile_specific.current)+1,2,&tab,window->display); break;< case PROFILE_FORWARDING: /* Set forwarding address */K set_forwarding(&(window->specific.profile_specific.current),&endit,5 "Forwarding Address",&profile.forwarding,R (window->specific.profile_specific.current)+1,2,&tab,window->display); break;: case PROFILE_PERSONAL_NAME: /* Set personal name */N set_personal_name(&(window->specific.profile_specific.current),&endit,3 "Personal Name",&profile.personal_name,R (window->specific.profile_specific.current)+1,2,&tab,window->display); break;6 case PROFILE_QUEUE: /* Select default queue */N set_default_queue(&(window->specific.profile_specific.current),&endit,+ "Default Queue",&profile.queue,R (window->specific.profile_specific.current)+1,2,&tab,window->display); break;4 case PROFILE_FORM: /* Select default form */M set_default_form(&(window->specific.profile_specific.current),&end. VMAIL010.BCK> $MAIL010.VMAIL]PROFILE.C;1.H;1W3 it,) "Default Form",&profile.form,R (window->specific.profile_specific.current)+1,2,&tab,window->display); break;; case PROFILE_USE_QUEUE: /* Use default queue/form */I edit_boolean(&(window->specific.profile_specific.current),&endit,A "Use Default Queue",&vmail_profile.use_default_queue,R (window->specific.profile_specific.current)+1,2,&tab,window->display); break;8 case PROFILE_REPLY_PREFIX: /* Set Reply prefix */G set_prefix(&(window->specific.profile_specific.current),&endit,7 "Reply Prefix",&vmail_profile.reply_prefix,R (window->specific.profile_specific.current)+1,2,&tab,window->display); break;< case PROFILE_FORWARD_PREFIX: /* Set Forward prefix */G set_prefix(&(window->specific.profile_specific.current),&endit,; "Forward Prefix",&vmail_profile.forward_prefix,R (window->specific.profile_specific.current)+1,2,&tab,window->display); break;8 case PROFILE_SIGNATURE: /* Set signature file */O set_signature_file(&(window->specific.profile_specific.current),&endit,; "Signature File",&vmail_profile.signature_file,R (window->specific.profile_specific.current)+1,2,&tab,window->display); break; } if (tab == true) { activate_next_window(); endit = true; } }H smg$label_border(&(window->display),&border_name,&SMG$K_TOP,&2,0,0,0); if (tab == fal_?3,}a`}zs 1qC^>?fR*hbmZsюh̀i/uۃ<h1P`͌Pcn 9kFREdH)m=< CV؊遃̇;3Jf3 XNG"Z UO\^BuwGo#?B}d$0%SC^'Rv bt*Rr@;q%.Hw k&SE%aYvķ[=<"*( yI e#@ 2u.>8iɲ rf[w\N]"ox|r&us +?[?i߭!wi:"H@B(~DOaDx&\  sBl[Vr!O}[>'t0]3!U}+fetώtwmzcNQ>I+jS}N|3(_| _/qx7?TNYƠٰ}Ϳi=sU 77(m~Q}r"4 9H< *FLC@[c;_8J7JM& ^ 1SNH`7>mY?}1gu*vBa 4f:LPGO.LJ^['~X94q F (wz[@I:)m_25vcuk#j` {;/`Ua]mv:5KE@wZY~U UwLZD;Ln -jHKmO]q=f^[s|CX^=;2yL;]SJ#pdz9_x8}OV:2@F-3kAl'hvFcx:.rjbs(2,kHz1w} NBm%.FZ}@=y7Df&`!2y,DGsC6)jhhld &F wkuIbi39mh0l*n=Mf}yJNq{% +A)X ^:Kأo` }0(', K™(ށBi>x8,߽?gӡr4GW`GŊԲI2Oh=X]ӶVpY&@㻕^U+.jWQNE`B$azqH-A6EՈdL'iw0&)S7ё`MhG$N.LS!i:a3tr|Bh]>cהJ!` VMAIL010.BCK> $MAIL010.VMAIL]PROFILE.C;1.H;1W3 se)( vmail$close_profile_window (window);}I/************************************************************************@ * draw_profile_screen: draw initial state of profile window. *J ************************************************************************/draw_profile_screen(display) 4unsigned long display; /* display to draw it on */{ long row;O put_chars (display,"Auto Purge",PROFILE_AUTO_PURGE+1,2,SMG$M_ERASE_LINE,0,0);# if (profile.auto_purge == true) {/ hilite_yes(display,PROFILE_AUTO_PURGE+1,2);. lolite_no(display,PROFILE_AUTO_PURGE+1,2); } else {. hilite_no(display,PROFILE_AUTO_PURGE+1,2);/ lolite_yes(display,PROFILE_AUTO_PURGE+1,2); }M put_chars (display,"CC Prompt",PROFILE_CC_PROMPT+1,2,SMG$M_ERASE_LINE,0,0);" if (profile.cc_prompt == true) {. hilite_yes(display,PROFILE_CC_PROMPT+1,2);- lolite_no(display,PROFILE_CC_PROMPT+1,2); } else {- hilite_no(display,PROFILE_CC_PROMPT+1,2);. lolite_yes(display,PROFILE_CC_PROMPT+1,2); }S put_chars (display,"Copy Forward",PROFILE_COPY_FORWARD+1,2,SMG$M_ERASE_LINE,0,0);% if (profile.copy_forward == true) {1 hilite_yes(display,PROFILE_COPY_FORWARD+1,2);0 lolite_no(display,PROFILE_COPY_FORWARD+1,2); } else {0 hilite_no(display,PROFILE_COPY_FORWARD+1,2);1 lolite_yes(display,PROFILE_COPY_FORWARD+1,2); }O put_chars (display,"Copy Reply",PROFILE_COPY_REPLY+1,2,SMG$M_ERASE_LINE,0,0);# if (profile.copy_reply == true) {/ hilite_yes(ddL VMAIL010.BCK> $MAIL010.VMAIL]PROFILE.C;1.H;1W3Wxisplay,PROFILE_COPY_REPLY+1,2);. lolite_no(display,PROFILE_COPY_REPLY+1,2); } else {. hilite_no(display,PROFILE_COPY_REPLY+1,2);/ lolite_yes(display,PROFILE_COPY_REPLY+1,2); }M put_chars (display,"Copy Send",PROFILE_COPY_SEND+1,2,SMG$M_ERASE_LINE,0,0);" if (profile.copy_send == true) {. hilite_yes(display,PROFILE_COPY_SEND+1,2);- lolite_no(display,PROFILE_COPY_SEND+1,2); } else {- hilite_no(display,PROFILE_COPY_SEND+1,2);. lolite_yes(display,PROFILE_COPY_SEND+1,2); }G put_chars (display,"Editor",PROFILE_EDITOR+1,2,SMG$M_ERASE_LINE,0,0);* if (strcmp(profile.editor,"EDT") == 0) {+ hilite_edt(display,PROFILE_EDITOR+1,2);+ lolite_tpu(display,PROFILE_EDITOR+1,2); } else {+ hilite_tpu(display,PROFILE_EDITOR+1,2);+ lolite_edt(display,PROFILE_EDITOR+1,2); }W put_chars (display,"Forwarding Address",PROFILE_FORWARDING+1,2,SMG$M_ERASE_LINE,0,0);G put_chars (display,profile.forwarding,PROFILE_FORWARDING+1,22,0,0,0);U put_chars (display,"Personal Name",PROFILE_PERSONAL_NAME+1,2,SMG$M_ERASE_LINE,0,0);M put_chars (display,profile.personal_name,PROFILE_PERSONAL_NAME+1,22,0,0,0);M put_chars (display,"Default Queue",PROFILE_QUEUE+1,2,SMG$M_ERASE_LINE,0,0);= put_chars (display,profile.queue,PROFILE_QUEUE+1,22,0,0,0);K put_chars (display,"Default Form",PROFILE_FORM+1,2,SMG$M_ERASE_LINE,0,0);; put_chars (display,profile.form,PROFILE_FORM+1,22,0,0,0);U put_chars (display,"Use Default Queue",PROFILE_USE_QUEUE+1,2,SB VMAIL010.BCK> $MAIL010.VMAIL]PROFILE.C;1.H;1W3MG$M_ERASE_LINE,0,0);0 if (vmail_profile.use_default_queue == true) {. hilite_yes(display,PROFILE_USE_QUEUE+1,2);- lolite_no(display,PROFILE_USE_QUEUE+1,2); } else {- hilite_no(display,PROFILE_USE_QUEUE+1,2);. lolite_yes(display,PROFILE_USE_QUEUE+1,2); }S put_chars (display,"Reply Prefix",PROFILE_REPLY_PREFIX+1,2,SMG$M_ERASE_LINE,0,0);Q put_chars (display,vmail_profile.reply_prefix,PROFILE_REPLY_PREFIX+1,22,0,0,0);W put_chars (display,"Forward Prefix",PROFILE_FORWARD_PREFIX+1,2,SMG$M_ERASE_LINE,0,0);U put_chars (display,vmail_profile.forward_prefix,PROFILE_FORWARD_PREFIX+1,22,0,0,0);R put_chars (display,"Signature File",PROFILE_SIGNATURE+1,2,SMG$M_ERASE_LINE,0,0);P put_chars (display,vmail_profile.signature_file,PROFILE_SIGNATURE+1,22,0,0,0);}I/************************************************************************2 * edit_boolean: edit a boolean profile item. *J ************************************************************************/=edit_boolean (current,endit,name,data,row,column,tab,display))int *current; /* item being edited */-boolean *endit; /* end profile window? */*char *name; /* name of profile item */%boolean *data; /* edited data */!int row; /* row to edit on */'int column; /* column to edit at */%boolean *tab; /* was tab hit? */6unsigned long display; /* profile virtual display */{5 boolean end_boolean = false; /* end this edit? */4 unsigned short key; /* key read from keyboz VMAIL010.BCK> $MAIL010.VMAIL]PROFILE.C;1.H;1W368ard */5 put_chars (display,name,row,column,0,SMG$M_BOLD,0); while (end_boolean == false) {1 smg$read_keystroke(&keyboard,&key,0,0,0,0,0); switch (key) {2 case SMG$K_TRM_CTRLW: /* refresh screen */ case SMG$K_TRM_CTRLR:+ smg$repaint_screen(&pasteboard_id); break;7 case SMG$K_TRM_CR: /* go to next profile item */ case SMG$K_TRM_ENTER: case SMG$K_TRM_DOWN:! case SMG$K_TRM_NEXT_SCREEN:' if (*current < PROFILE_ITEMS) { end_boolean = true; (*current)++; } break;0 case SMG$K_TRM_LEFT: /* change to Yes */ if (*data == false) { *data = true;) lolite_no (display,row,column);* hilite_yes (display,row,column); } break;1 case SMG$K_TRM_RIGHT: /* Change to No */ if (*data == true) { *data = false;* lolite_yes (display,row,column);) hilite_no (display,row,column); } break;0 case SMG$K_TRM_UP: /* previous option */! case SMG$K_TRM_PREV_SCREEN: if (*current > 1) { (*current)--; end_boolean = true; } break;5 case SMG$K_TRM_F10: /* exit profile window */ end_boolean = true; *endit = true; break;2 case SMG$K_TRM_HT: /* go to next window */ end_boolean = true; *tab = true; break;6 case SMG$K_TRM_HELP: /* display help RK VMAIL010.BCK> $MAIL010.VMAIL]PROFILE.C;1;4W3awindow */ profile_help(*current); break; } }, put_chars (display,name,row,column,0,0,0);}I/************************************************************************/ * select_editor: select the VMail editor. *J ************************************************************************/>select_editor (current,endit,name,data,row,column,tab,display)-int *current; /* current profile option */-boolean *endit; /* end profile window? */'char *name; /* profile item name */'char *data; /* new editor string */)int row; /* row to select editor on *//int column; /* column to select editor at */(boolean *tab; /* was tab key hit? */5unsigned long display; /* window virtual display */{: boolean end_editor = false; /* end editor selection? */4 unsigned short key; /* key read from keyboard */8 boolean which = false; /* which editor is current? */( if (strcmp(profile.editor,"TPU") == 0) which = false;5 put_chars (display,name,row,column,0,SMG$M_BOLD,0); while (end_editor == false) {1 smg$read_keystroke(&keyboard,&key,0,0,0,0,0); switch (key) {2 case SMG$K_TRM_CTRLW: /* refresh screen */ case SMG$K_TRM_CTRLR:+ smg$repaint_screen(&pasteboard_id); break;7 case SMG$K_TRM_CR: /* go to next profile item */ case SMG$K_TRM_ENTER: case SMG$K_TRM_DOWN:! case SMG$K_TRM_NEXT_SCREEN:' if (*current < PROFILE_ITEMS) { end_editor = tru' VMAIL010.BCK> $MAIL010.VMAIL]PROFILE.C;1;4W3_e; (*current)++; } break;0 case SMG$K_TRM_LEFT: /* change to Yes */ if (which == false) { which = true;* hilite_edt (display,row,column);* lolite_tpu (display,row,column); } break;1 case SMG$K_TRM_RIGHT: /* Change to No */ if (which == true) { which = false;* hilite_tpu (display,row,column);* lolite_edt (display,row,column); } break;0 case SMG$K_TRM_UP: /* previous option */! case SMG$K_TRM_PREV_SCREEN: if (*current > 1) { (*current)--; end_editor = true; } break;5 case SMG$K_TRM_F10: /* exit profile window */ end_editor = true; *endit = true; break;2 case SMG$K_TRM_HT: /* go to next window */ end_editor = true; *tab = true; break;6 case SMG$K_TRM_HELP: /* display help window */ profile_help(*current); break; } } if (which == true) strcpy (data,"EDT"); else strcpy (data,"TPU");, put_chars (display,name,row,column,0,0,0);}I/************************************************************************4 * set_forwarding: set a new forwarding address. *J ************************************************************************/?set_forwarding (current,endit,name,data,row,column,tab,display),int *current; /* current profile item */-boolean *endit[ VMAIL010.BCK> $MAIL010.VMAIL]PROFILE.C;1;4W3*S; /* end profile window? */'char *name; /* profile item name */+char *data; /* new forwarding address */)int row; /* row to input address on *//int column; /* column to input address at */'boolean *tab; /* was tab key hit */:unsigned long display; /* virtual display for profile */{5 put_chars (display,name,row,column,0,SMG$M_BOLD,0);= switch(get_input(data,FORWARD_LENGTH,display,row,column+20,0 INPOPT_CRSR | INPOPT_HELP | INPOPT_TAB)) {1 case INPST_EXIT: /* exit profile window */ *endit = true; break;. case INPST_TAB: /* go to next window */ *tab = true; break;6 case INPST_UP: /* go to previous profile item */ case INPST_PREV: if (*current > 1) (*current)--; break;4 case INPST_DOWN: /* go to next profile item */ case INPST_NEXT: case INPST_NORMAL:# if (*current < PROFILE_ITEMS) (*current)++; break;1 case INPST_HELP: /* display help screen */* profile_help(*current);* break; }*, put_chars (display,name,row,column,0,0,0);} I/************************************************************************3 * set_personal_name: set a new personal name. *hJ ************************************************************************/Bset_personal_name (current,endit,name,data,row,column,tab,display),int *current; /* current profile item */-boolean *endit; /* end profile window? */**char *name; /* name of prx- VMAIL010.BCK> $MAIL010.VMAIL]PROFILE.C;1COM;1W3{"ofile item */'char *data; /* new personal name */o'int row; /* row to input name on */9,int column; /* column to input name at */(boolean *tab; /* was tab key hit? */6unsigned long display; /* profile virtual display */{c5 put_chars (display,name,row,column,0,SMG$M_BOLD,0);i? switch (get_input(data,PERSONAL_LENGTH,display,row,column+20,"0 INPOPT_CRSR | INPOPT_HELP | INPOPT_TAB)) {1 case INPST_EXIT: /* exit profile window */  *endit = true; break;. case INPST_TAB: /* go to next window */ *tab = true; break;6 case INPST_UP: /* go to previous profile item */ case INPST_PREV: if (*current > 1)  (*current)--;* break;4 case INPST_DOWN: /* go to next profile item */ case INPST_NEXT: case INPST_NORMAL:# if (*current < PROFILE_ITEMS) (*current)++;a break;1 case INPST_HELP: /* display help screen */u profile_help(*current);  } , put_chars (display,name,row,column,0,0,0);}dI/************************************************************************ 8 * set_default_queue: set a new default print queue. *J ************************************************************************/Aset_default_queue(current,endit,name,data,row,column,tab,display)l,int *current; /* current profile item */-boolean *endit; /* end profile window? */T'char *name; /* profile item name */ 'char *data; /* new default queue */i'int row; /* row to in0P VMAIL010.BCK> $MAIL010.VMAIL]PROFILE.C;1COM;1W32%put queue on */ -int column; /* column to input queue at */ (boolean *tab; /* was tab key hit? */6unsigned long display; /* profile virtual display */{O5 put_chars (display,name,row,column,0,SMG$M_BOLD,0);b< switch (get_input(data,QUEUE_LENGTH,display,row,column+20,> INPOPT_CRSR | INPOPT_CAPS | INPOPT_HELP | INPOPT_TAB)) {1 case INPST_EXIT: /* exit profile window */o *endit = true; break;. case INPST_TAB: /* go to next window */ *tab = true; break;6 case INPST_UP: /* go to previous profile item */ case INPST_PREV: if (*current > 1) (*current)--;s break;4 case INPST_DOWN: /* go to next profile item */ case INPST_NEXT: case INPST_NORMAL:# if (*current < PROFILE_ITEMS)t (*current)++;c break;1 case INPST_HELP: /* display help window */& profile_help(*current); break; }., put_chars (display,name,row,column,0,0,0);}yI/************************************************************************6 * set_default_form: set a new default print form. *J ************************************************************************/@set_default_form(current,endit,name,data,row,column,tab,display),int *current; /* current profile item */-boolean *endit; /* end profile window? */o'char *name; /* profile item name */r&char *data; /* new default form */'int row; /* row to input form on */i,int column; /* column to input form at */(boKO VMAIL010.BCK> $MAIL010.VMAIL]PROFILE.C;1;1W3(olean *tab; /* was tab key hit? */6unsigned long display; /* profile virtual display */{_5 put_chars (display,name,row,column,0,SMG$M_BOLD,0);,; switch (get_input(data,FORM_LENGTH,display,row,column+20,g> INPOPT_CRSR | INPOPT_CAPS | INPOPT_HELP | INPOPT_TAB)) {1 case INPST_EXIT: /* exit profile window */P *endit = true; break;. case INPST_TAB: /* go to next window */ *tab = true; break;6 case INPST_UP: /* go to previous profile item */ case INPST_PREV: if (*current > 1)p (*current)--;b break;4 case INPST_DOWN: /* go to next profile item */ case INPST_NEXT: case INPST_NORMAL:# if (*current < PROFILE_ITEMS)i (*current)++; break;1 case INPST_HELP: /* display help screen */e profile_help(*current);+ break; }s, put_chars (display,name,row,column,0,0,0);} I/************************************************************************p; * set_prefix: set a new reply/forwarding prefix string. *.J ************************************************************************/;set_prefix (current,endit,name,data,row,column,tab,display) ,int *current; /* current profile item */-boolean *endit; /* end profile window? */e'char *name; /* profile item name */e'char *data; /* new prefix string */ (int row; /* row to input prefix on */.int column; /* column to input prefix at */(boolean *tab; /* was tab key hit? */6unsigned long displab@ʭ-oh{MdI&Nidw1 /x:e>(5Hu8Z+UUv5XC*iNc SmLu~ Xc\*h7tg |&q)n&\ .TCONjldenW}r f?w#:9nnC;M6cI|mI/QC9DNx  DZc-.H dvc.;zQ5D]8Lj*nGP (d2yCs$\v-0oy_K<MDKFoWbVX!nn vLUjenV,&(m4?*D~(6H t2BDU{/g%;?r_F"PnoVqz9Q>?^Wo:HP:@e-8U(K:X gR&%cTd8vE|c9QRIIG `}]x A":uhNEXn)>ebpiK{U`w JYj4}FXKR /W !R|gof\I?ojV%x] (^ *<`SD5^dZWfzH~QvVMIn(&az vc OSq,y|d!]b&zhC& TP(]av$eT\?lPfrC|F9BL{FOBwQ2"OX` [daS[~Kscx^U/XVY",d Mn Im8R T_mRR`76u Z/*z*q"Jbxp% R=?3V b6f/'TjX6WnMN 8%Sg}"33Ks h]]kjgtqX ]k>VEJ l]xne%I at`,O|g2`m9"k+Jg|>;Kw6>hHyi?v{E|{B ~.xI.FAsnE"NV 0h*x&}(0@FvSFa:?lXVN%dtFQBzRraS2L0a7ziT!vw#>\H /!V&.kIo[dz`,u$g3y{fTk'lP$Rz-m*1| tTcE2G2#P%UdJ&8OY6f/K,+RvO}w~9%,I$P}E53gqd& ^Na%tR%jakwK~{oFgI"C_?%g;J+ 3}gh";?]0NU4kw VMAIL010.BCK> $MAIL010.VMAIL]PROFILE.C;1BJ;1W3آ+y; /* profile virtual display */{i5 put_chars (display,name,row,column,0,SMG$M_BOLD,0);y= switch (get_input(data,PREFIX_LENGTH,display,row,column+20,e0 INPOPT_CRSR | INPOPT_HELP | INPOPT_TAB)) {1 case INPST_EXIT: /* exit profile window */D *endit = true; break;. case INPST_TAB: /* go to next window */ *tab = true; break;6 case INPST_UP: /* go to previous profile item */ case INPST_PREV: if (*current > 1)r (*current)--;d break;4 case INPST_DOWN: /* go to next profile item */ case INPST_NEXT: case INPST_NORMAL:# if (*current < PROFILE_ITEMS)e (*current)++; break;1 case INPST_HELP: /* display help screen */w profile_help(*current);c break; }w, put_chars (display,name,row,column,0,0,0);}(I/************************************************************************4 * set_signature_file: set a new signature file. *J ************************************************************************/Bset_signature_file(current,endit,name,data,row,column,tab,display),int *current; /* current profile item */-boolean *endit; /* end profile window? */*'char *name; /* profile item name */*,char *data; /* new signature file name */'int row; /* row to input file at */ ,int column; /* column to input file at */(boolean *tab; /* was tab key hit? */6unsigned long display; /* profile virtual display */{u5 put_chars (display,name,row,coYc/ VMAIL010.BCK> $MAIL010.VMAIL]PROFILE.C;1BJ;1W3|H.lumn,0,SMG$M_BOLD,0);T> switch (get_input(data,SIGFILE_LENGTH,display,row,column+20,> INPOPT_CRSR | INPOPT_CAPS | INPOPT_HELP | INPOPT_TAB)) {1 case INPST_EXIT: /* exit profile window */  *endit = true; break;. case INPST_TAB: /* go to next window */ *tab = true; break;6 case INPST_UP: /* go to previous profile item */ case INPST_PREV: if (*current > 1) (*current)--;( break;4 case INPST_DOWN: /* go to next profile item */ case INPST_NEXT: case INPST_NORMAL:# if (*current < PROFILE_ITEMS)G (*current)++; break;1 case INPST_HELP: /* display help screen */I profile_help(*current);i break; }L, put_chars (display,name,row,column,0,0,0);}nI/************************************************************************+; * edit_signature_file: edit the defined signature file. *RJ ************************************************************************/edit_signature_file () { unsigned long status;o. if (vmail_profile.signature_file[0] == '\0') error(VMAIL$NOSIGFILE,""); else {* if (strcmp(profile.editor,"TPU") == 0)2 edit_file_tpu(vmail_profile.signature_file); else2 edit_file_edt(vmail_profile.signature_file); }.}yI/************************************************************************i: * vmail$open_profile_window: open the profile window. *J *******************************************************************9I" VMAIL010.BCK> $MAIL010.VMAIL]PROFILE.C;1BJ;1W31*****/3struct window_struct *vmail$open_profile_window() {D* struct window_struct *window_ptr = NULL; struct window_struct *tmp; tmp = window_root; while (tmp != NULL) {# if (tmp->type == WTYPE_PROFILE)+ window_ptr = tmp;  tmp = tmp->next; }E if (window_ptr == NULL) {tJ window_ptr = create_window (WTYPE_PROFILE," Visual Mail Profile ",16);G window_ptr->specific.profile_specific.current = PROFILE_AUTO_PURGE;p. draw_profile_screen (window_ptr->display); }  activate_window (window_ptr);" return (window_ptr);}SI/************************************************************************O; * vmail$close_profile_window: close the profile window. *PJ ************************************************************************/$vmail$close_profile_window (window) 5struct window_struct *window; /* window to close */E{N5 unsigned long status; /* status of mail calls */M= if ((status = set_profile_info("",&profile)) != SS$_NORMAL)U error(status,"");E$ set_vmail_profile(&vmail_profile); delete_window (window); }i(display,PROFILE_USE_QUEUE+1,2);- lolite_no(display,PROFILE_USE_QUEUE+1,2); } else {- hilite_no(display,PROFILE_USE_QUEUE+1,2);. lolite_yes(display,PROFILE_USE_QUEUE+1,2); }S put_chars (display,"Reply Prefix",PROFILE_REPLY_PREFIX+1,2,SMG$M_ERASE_LINE,0,0);Q put_chars (display,vmail_profile.reply_prefix,PROFILE_REPLY_PREFIX+1,22,0,0,0);W put_chars (display,"Forward Prefix",PROFILE_FORWARD_18 VMAIL010.BCK>$MAIL010.VMAIL]PROFILE.H;1;1OM;2J 'G*[VMAIL010.VMAIL]PROFILE.H;1+,>. /@ 4J -$0123KPWO56@C$7 KCB8 ,y,C9/ E G@HJI/************************************************************************ * */ * Visual Mail */ * version 1.0 *; * Copyright 1993 by Richard D. Johnson *3 * All Rights Reserved * * *F * Visual Mail may be distributed only in its original, unmodified *. * form. See documentation for details. * * *I ************************************************************************2 * Revision History * * *) * 13-JUL-1993 RDJ Module completion. *J ************************************************************************/7#define PROFILE_ITEMS 14 /* number of profile items */6#define PROFILE_AUTO_PURGE 1 /* Enable Auto Purge? */2#define PROFILE_CC_PROMPT 2 /* Prompt for CC:? */=#define PROFILE_COPY_FORWARD 3 /* Copy self on forwarding? */9#define PROFILE_COPY_REPLY 4 /* Copy self on replying? */7#define PROF d VMAIL010.BCK>$MAIL010.VMAIL]PROFILE.H;1;1OM;2J ILE_COPY_SEND 5 /* Copy self on sending? */.#define PROFILE_EDITOR 6 /* Select editor */9#define PROFILE_FORWARDING 7 /* Set forwarding address */8#define PROFILE_PERSONAL_NAME 8 /* Set personal name */4#define PROFILE_QUEUE 9 /* Select default queue */3#define PROFILE_FORM 10 /* Select default form */9#define PROFILE_USE_QUEUE 11 /* Use default queue/form */:#define PROFILE_REPLY_PREFIX 12 /* Select Reply prefix */=#define PROFILE_FORWARD_PREFIX 13 /* Select Forward prefix */6#define PROFILE_SIGNATURE 14 /* Set signature file */=#define FORWARD_LENGTH 40 /* max length of forwarding add */=#define PERSONAL_LENGTH 35 /* max length of personal name */7#define QUEUE_LENGTH 39 /* max length of queue name */5#define FORM_LENGTH 39 /* max length of form name */;#define PREFIX_LENGTH 10 /* max length of prefix string */;#define SIGFILE_LENGTH 40 /* max length of sigfile name */&#define lolite_no(display,row,column)\- put_chars(display,"No",row,column+25,0,0,0)'#define lolite_yes(display,row,column)\. put_chars(display,"Yes",row,column+20,0,0,0)&#define hilite_no(display,row,column)\9 put_chars(display,"No",row,column+25,0,SMG$M_REVERSE,0)'#define hilite_yes(display,row,column)\: put_chars(display,"Yes",row,column+20,0,SMG$M_REVERSE,0)'#define lolite_edt(display,row,column)\. put_chars(display,"EDT",row,column+20,0,0,0)'#define lolite_tpu(display,row,column)\. put_chars(display,"TPU",row,column+25,0,0,0)'#define hilite_edt(display,row VMAIL010.BCK>$MAIL010.VMAIL]PROFILE.H;1;1OM;2J 4,column)\: put_chars(display,"EDT",row,column+20,0,SMG$M_REVERSE,0)'#define hilite_tpu(display,row,column)\: put_chars(display,"TPU",row,column+25,0,SMG$M_REVERSE,0)struct vmail_profile_struct {4 long major_version; /* major version of VMail */4 long minor_version; /* minor version of VMail */F char reply_prefix [PREFIX_LENGTH+1]; /* prefix for REPLY messages */I char forward_prefix [PREFIX_LENGTH+1];/* prefix for FORWARD messages */D char signature_file[SIGFILE_LENGTH+1];/* name of signature file */; boolean use_default_queue; /* use default queue/form? */};1extern struct vmail_profile_struct vmail_profile;*[VMAIL010.VMAIL]PROFILE.OBJ;1+,>./@ 4d -$0123KPWO56@@ 7ICB8ɺ,C9/ E G@HJg VMAIL010.BCK>$[VMAIL010.VMAIL]PROFILE.OBJ;1R4PROFILEV1.013-JUL-1993 13:22VAX C V3.2-044PP>  P Visual Mail Profile  PAuto Purge !PCC Prompt +PCopy Forward 8PCopy Reply CPCopy Send MPEditor TPForwarding Address gPPersonal Name uPDefault Queue PDefault Form PUse Default Queue PReply Prefix PForward Prefix PSignature File PAuto Purge PYes PNo PNo PYes PCC Prompt PYes PNo PNo PYes PCopy Forward PYes PNo PNo PYes PCopy Reply $PYes (PNo +PNo .PYes 2PCopy Send <PYesVMAIL$BCSTWAIT VMAIL$OPENSIGVMAIL$NOSIGFILEDRAW_PROFILE_SCREEN GET_INPUTSET_PROFILE_INFOVMAIL$CLOSE_PROFILE_WINDOWACTIVATE_NEXT_WINDOWSET_SIGNATURE_FILE SET_PREFIXSET_DEFAULT_FORMSET_DEFAULT_QUEUESET_PERSONAL_NAMESET_FORWARDING SELECT_EDITOR EDIT_BOOLEANSMG$SET_CURSOR_ABSSMG$LABEL_BORDERSTRCMP PUT_CHARS PROFILE_HELPSMG$REPAINT_SCREENSMG$READ_KEYSTROKE PUT_CHARS @PNo CPNo FPYes JPEditor QPEDT UPEDT YPTPU ]PTPU aPEDT ePForwarding Address xPPersonal Name PDefault Queue PDefault Form PUse Default Queue PYes PNo PNo PYes PReply Prefix PForward Prefix PSignature File PNo PYes PYes PNo PTPU PEDT PTPU PTPU PEDT PEDT PTPU PTPU P Visual Mail Profile P$^ RUT|b|~߭aY VMAIL010.BCK>$[VMAIL010.VMAIL]PROFILE.OBJ;1T߭ԭ߭ެScPSMG$LABEL_BORDERԭխ1УV EDIT_BOOLEANW SET_PREFIXX߭߭SMG$SET_CURSOR_ABSƔPP P1&F?PcQݡ߭~dߢ߭g1cQݡ߭~ߢ!߭g1cQݡ߭~ߢ+߭g1cQݡ߭~ ߢ8߭g1cQݡ߭~ߢC߭g1jcQݡ߭~ߢM߭ SELECT_EDITOR1BcQݡ߭~ߢT߭SET_FORWARDING1PcQݡ߭~ߢg߭SET_PERSONAL_NAME1PcQݡ߭~ߢuSET_DEFAULT_QUEUE1PcQݡ߭~ƒ߭SET_DEFAULT_FORM1PcQݡ߭~G߭gncQݡ߭~¢߭hJcQݡ߭~¯߭h&cQݡ߭~¾߭SET_SIGNATURE_FILEѭ ACTIVATE_NEXT_WINDOWխ1|~߭ԭ߭ЬSSMG$LABEL_BORDERխ7d1SET_PROFILE_INFOPYYPP 2YERROReSET_VMAIL_PROFILES DELETE_WINDOWP|^ RVU|~ЬTT PUT_CHARSSce)Tc|~Tc'PTc|~Tc|~ЬTT PUT_CHARSScѥ&Tc|~Tc$Tc|~Tc|~ЬTT PUT_CHARSScѥ& Tc|~Tc$Tc|~Tc|~ЬTT PUT_CHARSScѥ &$Tc|~(Tc$+Tc|~.Tc|~2ЬTT PUT_CHARSSu( VMAIL010.BCK>$[VMAIL010.VMAIL]PROFILE.OBJ;1Ɇcѥ&<Tc|~STRCPY PROFILE_HELPSMG$REPAINT_SCREENSMG$READ_KEYSTROKE PUT_CHARSSTRCMP PROFILE_HELP PUT_CHARS PROFILE_HELP PUT_CHARS PROFILE_HELP PUT_CHARS PROFILE_HELP PUT_CHARS PROFILE_HELP PUT_CHARS PROFILE_HELP PUT_CHARS EDIT_FILE_EDT EDIT_FILE_TPUSTRCMPERRORACTIVATE_WINDOW CREATE_WINDOW DELETE_WINDOWSET_VMAIL_PROFILEERROR PROCESS_PROFILE_WINDOW T|DRAW_PROFILE_SCREEN@Tc$CTc|~FTc|~JЬTT PUT_CHARSScQSTRCMPP&UTc|~YTc$]Tc|~aTc|~eЬSS PUT_CHARSTd|~Sd|~ xSd|~ Sd|~ †Sd|~ Sd|~ ”Sd|~ Sd|~ݑ ¡SdѦG& ³Sd|~ ·Sd$ ºSd|~ ½Sd|~ ЬTT PUT_CHARSSc|~ Tc|~Tc|~Tc|~Tc|~T|^ RVUTݬݬݬ ݬ  PUT_CHARST1 PUT_CHARSS|~|~?eSMG$READ_KEYSTROKE$[VMAIL010.VMAIL]PROFILE.OBJ;1ml ݬݬݬ  PUT_CHARS^ RXWS|USTRCMPPVݬݬݬ ݬ  PUT_CHARSU1 PUT_CHARSTP|~|~?gSMG$READ_KEYSTROKE}n [C({X̎M G-G%Oy{ ,%ҿJ=FB-zaI5 2Xg Ʋ(bsMoL!cb5v[PPqvE *% <Qruw2mtNp(`݅sJ /|eԲұ_nho3a_\ErX|>Xu֬6@RhYY_sHMf5wc4u}'^A=k5`jc<98ծom k\S0h3#PA^!,5Ta +ם+Fillhjh3| VWōuq =B_4SPCt{t`d0H=d_!y'k >ۮm4k].XZ6IX̄1W;֮Lr:+B^6V\M>&$% 73l)lTU3kRY!vwĒ'™#?$#d_K 8P^pQwa)'`>eWYQ4^\qF8r k|Kӵ)2Gy闼\IlTvD;ϹI__$DPOwBlޅۮP;%\~=3J %7fFUAF(AFbIG"P\ܥN/ З~3ضhj(b$z)c챢ZuNk6azT&qNPG kLˬ e >DK ]~5-˙"5陀+jZoc n$[VMAIL010.VMAIL]PROFILE.OBJ;1&   PUT_CHARS^ݬݬݬ ݬ  PUT_CHARS~ݬݬ (ݬ GET_INPUTPQPC?P4P,PЬP`!`PЬP`` Pݼ PROFILE_HELP|~ݬݬ  PUT_CHARS ^ SR\ݏVMAIL$NOSIGFILEERRORPSTRCMPP EDIT_FILE_TPUP EDIT_FILE_EDT ^ SRP<`\\PRPR! CREATE_WINDOWPR”ݢDRAW_PROFILE_SCREENRACTIVATE_WINDOWRP ^ R1SET_PROFILE_INFOPSSPP 2SERRORSET_VMAIL_PROFILEݬ DELETE_WINDOW?P=-=W=-M%P=-=W=-M% P=-=W=-M%; P=-=W=-M% P=-=W=-M% P=-=W=-M%0 Px222x2222222222222222(2222222222222222222x P[qqqqqqqqqqqPx:::x::::::::::::::::0:::::::::::::::::::xPcyyyyyRPROFILEprocess_profile_windowRTdraw_profile_screenh edit_booleanl  select_editor< set_forwardingT set_personal_name set_default_queue set_default_formX set_prefixset_signature_fileedit_signature_file` vmail$open_profile_window\!lvmail$close_profile_windowM W[ VMAIL010.BCK>$[VMAIL010.VMAIL]PROFILE.OBJ;1`  46 h| EDIT_BOOLEAN l  SELECT_EDITOR SET_FORWARDING T SET_PERSONAL_NAME SET_DEFAULT_QUEUE SET_DEFAULT_FORM X SET_PREFIX SET_SIGNATURE_FILE  EDIT_SIGNATURE_FILE  VMAIL$OPEN_PROFILE_WINDOW l VMAIL$CLOSE_PROFILE_WINDOW$CODE$DATASTDINSTDOUTSTDERRRICH$ERROR_LIST NULLLISTBROADCAST_WINDOWPROFILEBROADCAST_ACTIVEoFILE_BAR FOLDER_BAR MESSAGE_BAR BROADCAST_BAR DISTLIST_BAR PROFILE_BAR ALIAS_BARHELP_BARNULL_BARKEYBOARDBAR_MSG_DISPLAY SEND_DISPLAY SEND_SHADOW TO_DISPLAY CC_DISPLAYSEND_STATUS_DISPLAYSEND_STATUS_SHADOW ERROR_DISPLAY PASTEBOARD_ID WINDOW_ROOTCURRENT_WINDOWK VMAIL_PRO(/{ VMAIL010.BCK>$[VMAIL010.VMAIL]PROFILE.OBJ;1FILE3$CHAR_STRING_CONSTANTSC4yyyyyyP'Ko/[PTPU ]PTPU aPEDT ePForwarding Address xPPersonal Name PDefault Queue PDefault Form PUse Default Queue PYes PNo PNo PYes PReply Prefix PForward Prefix PSignature File PNo PYes PYes PNo PTPU PEDT PTPU PTPU PEDT PEDT PTPU PTPU P Visual Mail Profile P$^ RUT|b|~߭ *[VMAIL010.VMAIL]PROFILE_HELP.C;1+,>./@ 4Rp-$0123KPWO56 7CB8e,C9/ E G@HJI/************************************************************************ * */ * Visual Mail */ * version 1.0 *; * Copyright 1993 by Richard D. Johnson *3 * All Rights Reserved * * *F * Visual Mail may be distributed only in its original, unmodified *. * form. See documentation for details. * * *I *******************************************************+s$ VMAIL010.BCK>$ [VMAIL010.VMAIL]PROFILE_HELP.C;1Rŗ*****************2 * Revision History * * *) * 13-JUL-1993 RDJ Module completion. *J ************************************************************************/#include #include #include "richlib"#include "profile"#include "display"static struct {( char *text; /* actual help text */0 int lines; /* number of lines in display */& char *title; /* window title */} help_text[] = {{"",0,""}, /* Auto Purge help */J{"Enabling Auto Purge will cause Visual Mail to automatically purge your \Gwastebasket folder when you exit. If Auto Purge is disabled, you must \Kperiodically select the Purge Wastebasket option in the File menu of your \#mail file window.",7,"Auto Purge"}, /* CC Prompt help */J{"Enabling CC Prompt causes Visual Mail to open a carbon copy box in the \DSend Mail, Reply to Mail, or Forward Mail windows. If CC Prompt is \Gdisabled, this box will not appear and you will not be able to carbon \Icopy your messages. If Copy Forward, Copy Send, or Copy Reply functions \Dare enabled, you will still receive the carbon copies to yourself.",10,"CC Prompt"}, /* Copy Forward */I{"Enabling Copy Forward causes Visual Mail to send a carbon copy of any \Kmessage you forward to yourself. If Copy Forward is disabled and you wish \Fto receive a copy of a forwarded message, you must manually add your \Ausername in the To: or Cc: box of the Forward Message window.",8,"Copy Fo VMAIL010.BCK>$ [VMAIL010.VMAIL]PROFILE_HELP.C;1Rrward"}, /* Copy Reply */G{"Enabling Copy Reply causes Visual Mail to send a carbon copy of any \Kmessage to which you reply to yourself. If Copy Reply is disabled and you \Lwish to receive a copy of a replied-to message, you must manually add your \Busername in the To: or Cc: box of the Reply to Message window.",8,"Copy Reply"}, /* Copy Send */F{"Enabling Copy Send causes Visual Mail to send a carbon copy of any \Hmessage you send to yourself. If Copy Send is disabled and you wish to \Greceive a copy of a sent message, you must manually add your username \Bin the To: or Cc: box of the Send Message window.",8,"Copy Send"}, /* Editor */J{"The Editor option allows you to choose a VMS editor to use with Visual \IMail. This editor is used to edit messages before they are send, and to \Hcreate or modify your signature file. Only the EDT and TPU editors are \"currently supported.",7,"Editor"}, /* Forwarding Address */G{"The Forwarding Address option forwards all received messages to the \Haddress you specify. No new mail will be retained in your current mail \Jfile. This option may be blanked out to cancel the forwarding feature.",7,"Forwarding Address"}, /* Personal Name */H{"The Personal Name option allows you to specify your default personal \Hname. Your personal name is visible in parenthesis after your username \Din the FROM: field of messages you send. Your personal name may be \Gchanged on a per-message basis by editing thMfD VMAIL010.BCK>$ [VMAIL010.VMAIL]PROFILE_HELP.C;1Rie From: field in the Send \:Message, Reply to Message, or Forward Message windows.",9,"Personal Name"}, /* Queue */G{"The Default Queue option sets your default print queue for printing \Hmessages. If the Use Default Queue option is set, Visual Mail will not \Kpresent the Select Print Queue menu when you print a message; the message \>will automatically be sent to this queue.",8,"Default Queue"}, /* Form */E{"The Default Form option sets your default print form for printing \Hmessages. If the Use Default Queue option is set, Visual Mail will not \Kpresent the Select Print Queue menu when you print a message; the message \Hwill automatically be sent to the queue specified in the Default Queue \,option, using this form.",9,"Default Form"}, /* Use Default Queue */J{"If the Use Default Queue option is set, Visual Mail will automatically \Isend your messages to the Default Queue using the Default Form whenever \Lyou print a message. If this option is not set, you will be able to choose \;a queue and form each time you select the print option.",8,"Use Default Queue"}, /* Reply Prefix */H{"The Reply Prefix is a character string which will be inserted before \Deach line of the original message when you reply to a message. The \JReply Prefix is intended to separate the original message from the reply \Fyou are composing. This field may be blanked out to use no prefix.",8,"Reply Prefix"}, /* Forward Prefix */J{"The Forward Prefix VMAIL010.BCK>$ [VMAIL010.VMAIL]PROFILE_HELP.C;1Rd is a character string which will be inserted before \Ceach line of the original message when you forward a message. The \FForward Prefix is intended to separate the original message from the \Iadditional comments you are composing. This field may be blanked out to \$use no prefix.",9,"Forward Prefix"}, /* Signature File */M{"The Signature File option specified the name of a text file which will be \Lappended to each message you send, reply to, or forward. It is intended to \Gbe an identification of yourself, and usually includes your full name \Land/or email address. The signature file is included in the message before \Hyou edit it, so it may be modified in or deleted from each message you \Isend. This field may be blanked out to disable the use of the Signature \File.",12,"Signature File"}};I/************************************************************************C * profile_help: display a help window on specified profile item. *J ************************************************************************/profile_help (item).int item; /* profile item to get help on */{= unsigned long help_display; /* virtual display for help */4 unsigned long help_shadow; /* shadow for help */3 unsigned short key; /* key get from keyboard */. boolean endit = false; /* end key loop? */< char title_string[80]; /* buffer to build title string */6 $DESCRIPTOR(profile_border," Visual Mail Profile ");4 long shadow_rows; /* number of rows in shadow */( $DESu VMAIL010.BCK>$ [VMAIL010.VMAIL]PROFILE_HELP.C;1RPCRIPTOR(border_name,title_string);> unsigned long border_rendition = SMG$M_BOLD | SMG$M_REVERSE;H smg$create_virtual_display(&(help_text[item].lines),&50,&help_display, &SMG$M_BORDER,0,0);( shadow_rows = help_text[item].lines+2;O smg$create_virtual_display(&shadow_rows,&52,&help_shadow,0,&SMG$M_REVERSE,0);D sprintf (title_string," Profile Help: %s ",help_text[item].title);2 border_name.dsc$w_length = strlen(title_string);R smg$label_border(&help_display,&border_name,&SMG$K_TOP,0,&border_rendition,0,0);M put_line(help_display,help_text[item].text,1,0,0,SMG$M_WRAP_WORD,SMG$M_UP);- put_line(help_display,"",1,0,0,0,SMG$M_UP);A put_line(help_display," Press [RETURN] to Continue.",! 0,SMG$M_BOLD,0,0,SMG$M_UP);C smg$paste_virtual_display(&help_display,&pasteboard_id,&7,&15,0);N smg$paste_virtual_display(&help_shadow,&pasteboard_id,&7,&15,&help_display); while (endit == false) {, smg$set_cursor_abs(&help_display,&1,&1);1 smg$read_keystroke(&keyboard,&key,0,0,0,0,0); switch (key) { case SMG$K_TRM_ENTER: case SMG$K_TRM_CR: endit = true; break; } }; smg$unpaste_virtual_display(&help_shadow,&pasteboard_id);< smg$unpaste_virtual_display(&help_display,&pasteboard_id);, smg$delete_virtual_display(&help_display);+ smg$delete_virtual_display(&help_shadow);}Z VMAIL010.BCK>!$"[VMAIL010.VMAIL]PROFILE_HELP.OBJ;1}"*[VMAIL010.VMAIL]PROFILE_HELP.OBJ;1+,>!./@ 4  -$0123KPWO56 6F 7DB8B-C9/ E G@HJ9 PROFILE_HELPV1.013-JUL-1993 13:22VAX C V3.2-044PPPEnabling Auto Purge will cause Visual Mail to automatically purge your wastebasket folder when you exit. If Auto Purge is disabled, you must periodically select the Purge Wastebasket option in the File menu of your mail file window. PPAuto PurgePPEnabling CC Prompt causes Visual Mail to open a carbon copy box in the Send Mail, Reply to Mail, or Forward Mail windows. If CC Prompt is disabled, this box will not appear and you will not be able to carbon copy your messages. If Copy Forward, Copy Send, or Copy Reply functions are enabled, you will still receive the carbon copies to yourself.P QPCC Prompt PQ[PEnabling Copy Forward causes Visual Mail to send a carbon copy of any message you forward to yourself. If Copy Forward is disabled and you wish to receive a copy of a forwarded message, you must manually add your username in the To: or Cc: box of t} VMAIL010.BCK>!$"[VMAIL010.VMAIL]PROFILE_HELP.OBJ;11he Forward Message window.$P[nPCopy Forward,Pn{PEnabling Copy Reply causes Visual Mail to send a carbon copy of any message to which you reply to yourself. If Copy Reply is disabled and you wish to receive a copy of a replied-to message, you must manually add your username in the To: or Cc: box of the Reply to Message window.0P{PCopy Reply8PPEnabling Copy Send causes Visual Mail to send a carbon copy of any message you send to yourself. If Copy Send is disabled and you wish to receive a copy of a sent message, you must manually add your username in the To: or Cc: box of the Send Message window.+.2 <'R5_5ZG w2 |**mQ6J_w+)ëZQ^G-B^Ԯkuy(+X4cR'3߲axpKt>"W>%w9iE}v)~dY+4o"f+BEZNJ-nrM`S97 _9 9~sY/QZ][~Z4!R_6QUiEna҄tp2-2nzOa`.|qv*siI(z QKTjSmMLqF ^I@(td&ߏEW, sȑf-X>>$#h j0wg60!nivkc+e g^zmdn(yYr#UyR4R qUSlf mUQF+udX z\ lx*WtP/w}S(\\VoNbogB9'M' 5_wdw (#B(H|1{'9Ebt-UM {N\4<Z*,7\K4`2L-dFNO" NcC)4:~@VO uo|QMwBssi{jy1Mq g}M.ye} 'Tmb98IPUN? FSl[F3l1eW1+j%A~,sWc-S- LTNbE-n9E NFjo&Z % 4@;{@6 lT"K$% T8sl.8#]X$:4dN_cgL\z CrD[YG gefm|0f>htGQ sOc:uige 6Lgc%q pZs4;d nNrgFam9 nPKA 2sDl cP)^uLvG6h 9_)ESO\*+qaKzVYhd_u]Bx i2Ml6UO0 VMAIL010.BCK>!$"[VMAIL010.VMAIL]PROFILE_HELP.OBJ;11ge, Reply to Message, or Forward Message windows.`P PPersonal NamehPPThe Default Queue option sets your default print queue for printing messages. If the Use Default Queue option is set, Visual Mail will not present the Select Print Queue menu when you print a message; the message will automatically be sent to this queue.lP PDefault QueuetP  PThe Default Form option sets your default print form for printing messages. If the Use Default Queue option is set, Visual Mail will not present the Select Print Queue menu when you print a message; the message will automatically be sent to the queue specified in the Default Queue option, using this form.xP   PDefault FormP ( PIf the Use Default Queue option is set, Visual Mail will automatically send your messages to the Default Queue using the Default Form whenever you print a message. If this option is not set, you will be able to choose a queue and form each time you select the print option.P( : PUse Default QueueP: L PThe Reply Prefix is a character string which will be inserted before each line of the original message when you reply to a message. The Reply Prefix is intended to separate the original message from the reply you are composing. This field may be blanked out to use no prefix.PL ` PReply PrefixP` m PThe Forward Prefix is a character string which will be inserted before each line of the original message when you fofa VMAIL010.BCK>!$"[VMAIL010.VMAIL]PROFILE_HELP.OBJ;118! rward a message. The Forward Prefix is intended to separate the original message from the additional comments you are composing. This field may be blanked out to use no prefix.Pm  PForward PrefixPPThe Signature File option specified the name of a text file which will be appended to each message you send, reply to, or forward. It is intended to be an identification of yourself, and usually includes your full name and/or email address. The signature file is included in the message before you edit it, so it may be modified in or deleted from each message you send. This field may be blanked out to disable the use of the Signature File.P \PSignature FileP\kP Visual Mail Profile P Profile Help: %s P Press [RETURN] to Continue.P|^UX WVTkOޭ|~߭߭2|| SCRbSMG$CREATE_VIRTUAL_DISPLAYb߭߭4||߭SMG$CREATE_VIRTUAL_DISPLAYCRbŁ߭SPRINTF߭STRLENP|~߭ԭ߭߭xR PROFILE_HELP profile_help ,SMG$DELETE_VIRTUAL_DISPLAYSMG$UNPASTE_VIRTUAL_DISPLAYSMG$READ_KEYSTROKESMG$SET_CURSOR_ABSSMG$PASTE_VIRTUAL_DISPLAYPUT_LINESMG$LABEL_BORDERSTRLENSPRINTFSMG$CREATE_VIRTUAL_DISPLAY  PROFILE_HELP$CODE$DATARICH$ERROR_LISTK V,m VMAIL010.BCK>!$"[VMAIL010.VMAIL]PROFILE_HELP.OBJ;1v MAIL_PROFILEFILE_BAR FOLDER_BAR MESSAGE_BAR BROADCAST_BAR DISTLIST_BAR PROFILE_BAR ALIAS_BARHELP_BARNULL_BARKEYBOARDBAR_MSG_DISPLAY SEND_DISPLAY SEND_SHADOW TO_DISPLAY CC_DISPLAYSEND_STATUS_DISPLAYSEND_STATUS_SHADOW ERROR_DISPLAY PASTEBOARD_ID$CHAR_STRING_CONSTANTSSMG$LABEL_BORDER|~CfRbݭPUT_LINERb|~Ŕݭb|~ŕݭb߭||h߭SMG$PASTE_VIRTUAL_DISPLAY߭߭||h߭SMG$PASTE_VIRTUAL_DISPLAYTG߭||߭SMG$SET_CURSOR_ABS|~|~?gSMG$READ_KEYSTROKE./@ 4Sj-$0123KPWO56;7`G[DB8`Lj-C9/ E G@HJ)/_ VMAIL010.BCK>$[VMAIL010.VMAIL]PROFILE_RMS.C;1SI/************************************************************************ * */ * Visual Mail */ * version 1.0 *; * Copyright 1993 by Richard D. Johnson *3 * All Rights Reserved * * *F * Visual Mail may be distributed only in its original, unmodified *. * form. See documentation for details. * * *I ************************************************************************2 * Revision History * * *) * 13-JUL-1993 RDJ Module completion. *J ************************************************************************/#include #include #include #include "richlib"#include "maillib"#include "vmail"#include "profile"=#define RMS_MAX_BUFFER_LENGTH 132 /* max length of a line */Nstruct vmail_profile_struct rms_buffer;/* input/output buffer for RMS calls */(struct vmail_profile_struct temp_buffer;8static struct FAB profile_fab; /* file access block */:static struct RAB profile_rab; /* record access block */1static struct NAM profile_nam; /* NAM block */unsigned long get_record(); unsigned long open_pfile_read();!unsigned long open_pfile_write();I/************************************************************************9 * get_vmail_profile: get Visual Mail profile record. *J ************************************************************************/ge3i VMAIL010.BCK>$[VMAIL010.VMAIL]PROFILE_RMS.C;1SnRt_vmail_profile (record)$struct vmail_profile_struct *record;{ unsigned long status;' switch (status = open_pfile_read()) {5 case RMS$_NORMAL: /* file exists; got record */7 if ((status = get_record(record)) != RMS$_NORMAL) error(status,""); close_pfile(); break;= case RMS$_FNF: /* file doesn't exist; don't complain */ break; default: error (status,""); }}I/************************************************************************> * set_vmail_profile: Save Visual Mail profile information. *J ************************************************************************/set_vmail_profile (record)$struct vmail_profile_struct *record;{ unsigned long status;$ struct vmail_profile_struct dummy; switch (open_pfile_write()) {A case RMS$_NORMAL: /* file exists; delete existing record */ get_record(&dummy); update_record (record); close_pfile(); break;7 case RMS$_CREATED: /* new profile file created */ put_pfile(record); close_pfile(); break; default: error(status,""); }}8/*******************************************************8 * open_file_read: open up the specified file for read *9 *******************************************************/ unsigned long open_pfile_read (){4 unsigned long status; /* status of RMS calls */C char temp_buffer[NAM$C_MAXRSS+1]; /* temp buffer for RMS calls */; char full_name [NAM$C_MAY} VMAIL010.BCK>$[VMAIL010.VMAIL]PROFILE_RMS.C;1S^XRSS+1]; /* full spec of file */3 char filename[256]; /* name of database file */B sprintf (filename,"%sVMAIL_PROFILE.DAT",profile.full_directory);$ profile_fab.fab$b_bid = FAB$C_BID;$ profile_fab.fab$b_bln = FAB$C_BLN;$ profile_fab.fab$b_fac = FAB$M_GET;# profile_fab.fab$l_fna = filename;+ profile_fab.fab$b_fns = strlen(filename);$ profile_fab.fab$l_fop = FAB$M_SQO; profile_fab.fab$w_ifi = 0; profile_fab.fab$b_rtv = 0;S profile_fab.fab$b_shr = FAB$M_SHRGET | FAB$M_SHRPUT | FAB$M_SHRDEL | FAB$V_SHRUPD | FAB$M_MSE; profile_fab.fab$l_xab = 0;' profile_fab.fab$l_nam = &profile_nam;$ profile_nam.nam$b_bid = NAM$C_BID;$ profile_nam.nam$b_bln = NAM$C_BLN;' profile_nam.nam$b_ess = NAM$C_MAXRSS;' profile_nam.nam$b_esl = NAM$C_MAXRSS;& profile_nam.nam$l_esa = temp_buffer; profile_nam.nam$b_nop = 0;' profile_nam.nam$b_rss = NAM$C_MAXRSS;' profile_nam.nam$b_rsl = NAM$C_MAXRSS;$ profile_nam.nam$l_rsa = full_name;# status = sys$open (&profile_fab); if (status != RMS$_NORMAL) return (status);* full_name[profile_nam.nam$b_rsl] = '\0';$ profile_rab.rab$b_bid = RAB$C_BID;$ profile_rab.rab$b_bln = RAB$C_BLN;' profile_rab.rab$l_fab = &profile_fab; profile_rab.rab$b_mbc = 0;$ profile_rab.rab$b_rac = RAB$C_SEQ;$ profile_rab.rab$l_rop = RAB$M_NLK;& profile_rab.rab$l_ubf = &rms_buffer;0 profile_rab.rab$w_usz = RMS_MAX_BUFFER_LENGTH; profile_rab.rab$l_xab = 0;; if ((status = sys$connect (&profile_rab)) != RMS$_NORMAL) u VMAIL010.BCK>$[VMAIL010.VMAIL]PROFILE_RMS.C;1S% return (status);}:/*********************************************************: * open_file_write: open up the specified file for write *; *********************************************************/!unsigned long open_pfile_write (){4 unsigned long status; /* status of RMS calls */4 unsigned long status2; /* status of RMS calls */C char temp_buffer[NAM$C_MAXRSS+1]; /* temp buffer for RMS calls */; char full_name [NAM$C_MAXRSS+1]; /* full spec of file */3 char filename[256]; /* name of database file */B sprintf (filename,"%sVMAIL_PROFILE.DAT",profile.full_directory);8 profile_fab.fab$l_alq = 3; /* allocation quantity */$ profile_fab.fab$b_bid = FAB$C_BID;$ profile_fab.fab$b_bln = FAB$C_BLN;H profile_fab.fab$b_fac = FAB$M_GET | FAB$M_PUT | FAB$M_DEL | FAB$M_UPD;# profile_fab.fab$l_fna = filename;+ profile_fab.fab$b_fns = strlen(filename);$ profile_fab.fab$l_fop = FAB$M_CIF; profile_fab.fab$w_ifi = 0;> profile_fab.fab$w_mrs = sizeof(struct vmail_profile_struct);$ profile_fab.fab$b_org = FAB$C_SEQ;$ profile_fab.fab$b_rfm = FAB$C_FIX; profile_fab.fab$b_rtv = 0;E profile_fab.fab$b_shr = FAB$M_SHRGET | FAB$M_SHRPUT | FAB$M_SHRDEL ! | FAB$V_SHRUPD | FAB$M_MSE; profile_fab.fab$l_xab = 0;' profile_fab.fab$l_nam = &profile_nam;$ profile_nam.nam$b_bid = NAM$C_BID;$ profile_nam.nam$b_bln = NAM$C_BLN;' profile_nam.nam$b_ess = NAM$C_MAXRSS;' profile_nam.nam$b_esl = NAM$C_MAXRSS;& profile_nam.nam$l_esa = temp_buffer; profile_v4 VMAIL010.BCK>$[VMAIL010.VMAIL]PROFILE_RMS.C;1S- nam.nam$b_nop = 0;' profile_nam.nam$b_rss = NAM$C_MAXRSS;' profile_nam.nam$b_rsl = NAM$C_MAXRSS;$ profile_nam.nam$l_rsa = full_name;% status = sys$create (&profile_fab);* full_name[profile_nam.nam$b_rsl] = '\0';: if ((status != RMS$_NORMAL) && (status != RMS$_CREATED)) return (status);$ profile_rab.rab$b_bid = RAB$C_BID;$ profile_rab.rab$b_bln = RAB$C_BLN;' profile_rab.rab$l_fab = &profile_fab; profile_rab.rab$b_krf = 0; profile_rab.rab$b_ksz = 0; profile_rab.rab$b_mbc = 0;$ profile_rab.rab$b_rac = RAB$C_SEQ;0 profile_rab.rab$l_rop = RAB$M_RLK | RAB$M_UIF;& profile_rab.rab$l_rbf = &rms_buffer;> profile_rab.rab$w_rsz = sizeof(struct vmail_profile_struct);& profile_rab.rab$l_ubf = &rms_buffer;0 profile_rab.rab$w_usz = RMS_MAX_BUFFER_LENGTH; profile_rab.rab$l_xab = 0;< if ((status2 = sys$connect (&profile_rab)) != RMS$_NORMAL) error (status2,""); return (status);}I/************************************************************************? * put_pfile: add a new record or update an existing record. *J ************************************************************************/put_pfile (record)$struct vmail_profile_struct *record;{7 unsigned long status; /* status of service calls */> profile_rab.rab$w_rsz = sizeof(struct vmail_profile_struct);! profile_rab.rab$l_rbf = record;! status = sys$put(&profile_rab); if (status != RMS$_NORMAL) error (status,"");}I/*******************************************˓- VMAIL010.BCK>$[VMAIL010.VMAIL]PROFILE_RMS.C;1S*****************************6 * update_record: replace existing profile record. *J ************************************************************************/update_record (record)$struct vmail_profile_struct *record;{7 unsigned long status; /* status of service calls */> profile_rab.rab$w_rsz = sizeof(struct vmail_profile_struct);! profile_rab.rab$l_rbf = record;$ status = sys$update(&profile_rab); if (status != RMS$_NORMAL) error (status,"");}I/************************************************************************1 * close_hfile: close the profile data file. *J ************************************************************************/close_pfile () {7 unsigned long status; /* status of service calls */8 if ((status = sys$close(&profile_fab)) != RMS$_NORMAL) error (status,"");}I/************************************************************************: * get_record: get first record from the profile file. *J ************************************************************************/!unsigned long get_record (record)Dstruct vmail_profile_struct *record; /* buffer to place info into */{7 unsigned long status; /* status of service calls */$ profile_rab.rab$b_rac = RAB$C_SEQ;! profile_rab.rab$l_ubf = record;! status = sys$get(&profile_rab); return (status);}U VMAIL010.BCK>5$![VMAIL010.VMAIL]PROFILE_RMS.OBJ;1)/!*[VMAIL010.VMAIL]PROFILE_RMS.OBJ;1+,>5./@ 4 -$0123KPWO56SI 7DB8q-C9/ E G@HJ8 PROFILE_RMSV1.013-JUL-1993 13:22VAX C V3.2-044 CC$RMS_NAM CC$RMS_FAB CC$RMS_RAB CC$RMS_XABALL CC$RMS_XABDAT CC$RMS_XABFHC CC$RMS_XABKEY CC$RMS_XABPRO CC$RMS_XABRDT CC$RMS_XABSUM CC$RMS_XABTRMOPEN_PFILE_WRITEOPEN_PFILE_READ GET_RECORD CLOSE_PFILEERRORERROR PUT_PFILE CLOSE_PFILE UPDATE_RECORD SYS$CONNECTSYS$OPENSTRLENSPRINTFERROR SYS$CONNECT SYS$CREATESTRLENSPRINTFERRORSYS$PUT P%sVMAIL_PROFILE.DAT P%sVMAIL_PROFILE.DATP|^ SROPEN_PFILE_READPTTPPg P\PЬPnPtPSYS$GETPUUTTPP cTERRORb SYS$CLOSEPVVPPߣ.VERRORߣTERRORP^ SROPEN_PFILE_WRITEP1Pr1PPnPtPSYS$GETPTЬTKrTxP SYS$UPDATEPUU ߣ-UERRORb SYS$CLOSEPVVPPmߣ.VERRORЬTKrTj2N~a q 1 +X4kY6{$gZHR& AB\iK>3(LyY=@UsS bH|;.2SeRv-Lt"M o\}H`vPhUNzz$?irm6*}99j#K&QHOM0vY$_R{XtGaE75`YeQFm<=Ռk"~aMJPL sls O;\s2ZtU&+4m&xv.hiP :d1-enN-$a7h0:" nR[_uL2*!|xr}2nKe&iJ(V)Y2_uA PVpW4&y18z9%c6,&>g h0"3SAte l Ywb*$`Y3A3%&8ʩS^ʼn)]^5ϰV4x| (V5Mj_U6z2 M{Z &Fa/3LR?UؒDw }$>-;‹(B菨pQRT YE [ 9pZb*5]:ud1M"ygV׷=)_JsFlC3᭠n~[ZL~uXPY0jXўw陶=Q MQFgt1c%KGvwUJ UH# o?HSx3(ZlKi&O+mp䯈Nr=l)FIrfcH3oVe~Xl5*p0m>w$*qH& F(TrHFsfyf)\ 7|>G_g'B ? Y+yHARs# U!v]t] 51P*=@w[*-{R5 E6P%+I!Q.IW &!i/yg=.,nZ!yillHN/&x jbz@!R~$'8bD|lYlo;D7yS_su,rA\D,3h]87 {4jCC/ISzF?P TU j;dfW)L :Q^9({9.H ? VMAIL010.BCK>5$![VMAIL010.VMAIL]PROFILE_RMS.OBJ;1\xPSYS$PUTPWW ߣ,WERRORb SYS$CLOSEPXXPPߣ.XERRORߣYERRORP<^ TSRߤSPRINTFbP,STRLENP4@Ԣ$”(”`•žŸ œ–—˜bSYS$OPENPUUUP—\LPDQbŒ‡nЏTtpP SYS$CONNECTPUU\\UPP|^ TSRߤSPRINTFbP,STRLENP4ЏK6Ԣ$”(”`R PROFILE_RMSget_vmail_profileset_vmail_profileopen_pfile_readopen_pfile_write? put_pfile@0 update_record@p close_pfile5 get_record%  ERROR SYS$UPDATEERROR SYS$CLOSESYS$GET |GET_VMAIL_PROFILE SET_VMAIL_PROFILE <OPEN_PFILE_READ |OPEN_PFILE_WRITE  PUT_PFILE 0 UPDATE_RECORD p CLOSE_PFILE  GET_RECORD$CODE$DATARICH$ERROR_LIST NULLLISTBROADCAST_WINDOWPROFILEBROADCAST_ACTIVEK VMAIL_PROFILEK RMS_BUFFERK TEMP_BUFFER/$CHAR_STRING_COY VMAIL010.BCK>5$![VMAIL010.VMAIL]PROFILE_RMS.OBJ;1NSTANTS•žŸ œ–—˜b SYS$CREATEPU—\LU UUPPDQbŒ„‡nЏTxKrtpP SYS$CONNECTPVV\\ ߤ+VERRORUP^ SRKrЬxPSYS$PUTPTT ߣ,TERROR^ SRKrЬxP SYS$UPDATEPTT ߣ-TERROR ^ R SYS$CLOSEPSS\\ ߢ.SERRORP ^RnЬtPSYS$GETPSSP*[VMAIL010.VMAIL]RICHLIB.H;1+,> ./@ 4J-$0123KPWO56:7DB8.C9/ E G@HJI/************************************************************************ * */ * Visual Mail */ * version 1.0 *; * Copyright 1993 by Richard D. Johnson *3 * All Rights Reserved * * *F * Visual Mail may be distributed only in its original, unmodified *. * form. See documentation for details. * * *I *******************************************************H9 VMAIL010.BCK> $MAIL010.VMAIL]RICHLIB.H;1;1Jj*****************2 * Revision History * * *8 * 13-JUL-1993 RDJ Taken from personal object library/ * * header files. *J ************************************************************************/7#define QUEUE_LENGTH 32 /* max length of queue name */7#define DESC_LENGTH 255 /* max length of queue desc */>typedef enum {false, true} boolean; /* define boolean type */Cstruct print_queue_struct { /* used for rich$get_print_queues() */3 char name [QUEUE_LENGTH+1]; /* name of queue */< char description [DESC_LENGTH+1]; /* queue description */};Astruct print_form_struct { /* used for rich$get_print_forms() */0 char name [QUEUE_LENGTH+1]; /* form name */; char description [DESC_LENGTH+1]; /* form description */};&typedef struct { /* item list 2 */5 short buffer_length; /* length of input buffer */1 short item_code; /* input/output item code */2 long buffer_address; /* address of buffer; */} item_list_2;, &typedef struct { /* item list 3 */5 short buffer_length; /* length of input buffer */1 short item_code; /* input/output item code */1 long buffer_address; /* address of buffer */< long return_length_address; /* length of output buffer */} item_list_3;<extern char *rich$error_list[]; /* list of RICH$_ errors */( /* define RICH$ error conditions */:#define RICH$_NORMAL 0 /* normal successful completion */=#define RICH3 VMAIL010.BCK> $MAIL010.VMAIL]RICHLIB.H;1;1J3$_NO_QUE_MGR 1 /* queue manager is not running */>#define RICH$_NO_QUE_PRIV 2 /* no access to specified queue */8#define RICH$_QUE_FILE_FULL 3 /* job queue file full */*#define RICH$_FNF 4 /* file not found */1#define RICH$_UNDEFINED 5 /* undefined error */extern rich$get_print_forms();extern rich$get_print_queues();-extern unsigned long rich$print_temp_file ();!extern rich$select_print_formw();"extern rich$select_print_queuew();!extern rich$unpaste_queue_form();*[VMAIL010.VMAIL]SEND.C;4+,?u.E/@ 4_EC-$0123KPWOD567l 7@$m 8@RVS9G@HJI/************************************************************************ * */ * Visual Mail */ * version 1.0 *; * Copyright 1993 by Richard D. Johnson *3 * All Rights Reserved * * *F * Visual Mail may be distributed only in its original, unmodified *. * form. See documentation for details. * * *I *******************************************************^N VMAIL010.BCK?u$[VMAIL010.VMAIL]SEND.C;4OLB;1_E^7*****************2 * Revision History * * *) * 13-JUL-1993 RDJ Module completion. *J ************************************************************************/#include #include #include #include #include #include "mailmsgdef"#include "richlib"#include "maillib"#include "vmail"#include "display"#include "window"#include "send"#include "help"#include "profile"#include "messages"I/************************************************************************. * send_message: send a new mail message. *J ************************************************************************/Ovmail$send_message (stage,orig_subject,first_to,orig_filename,title,operation) 1int stage; /* current stage in send process */1char *orig_subject; /* original SUBJECT text */-char *first_to; /* first TO: recipient */3char *orig_filename; /* temp. message filename */$char *title; /* window title */,int operation; /* send operation type */{( boolean endit; /* end send loop? */; char from_buffer[SEND_FROM_LENGTH+1]; /* 'From' text */C char subject_buffer[SEND_SUBJECT_LENGTH+1]; /* 'Subject' text */8 int send_status = SEND_NORMAL; /* SEND exit status */ char filename[256]; char record_buffer[256];& $DESCRIPTOR(filename_desc,filename); int filename_length; int to_length = 1; int to_top_line = 1; int to_bottom_line = 1; int to_current_line = 1; * VMAIL010.BCK?u$[VMAIL010.VMAIL]SEND.C;4OLB;1_Eî int cc_length = 1; int cc_top_line = 1; int cc_bottom_line = 1; int cc_current_line = 1; FILE *infile,*outfile;B struct send_options_struct send_options = /* dynamic options */ {false};! $DESCRIPTOR(border_name,title);> unsigned long border_rendition = SMG$M_BOLD | SMG$M_REVERSE; 0 set_initial_options (operation,&send_options);" strcpy (filename,orig_filename);- strcpy (from_buffer,profile.personal_name);' strcpy (subject_buffer,orig_subject);+ border_name.dsc$w_length = strlen(title);S smg$label_border (&send_display,&border_name,&SMG$K_TOP,0,&border_rendition,0,0);_ draw_send_screen (from_buffer,subject_buffer,&to_display,&cc_display,first_to,&send_options); if (strlen(filename) == 0) {C sprintf (filename,"SYS$SCRATCH:VMAIL_%08X_SEND.TMP;",getpid());" outfile = fopen(filename,"w");3 if (strlen(vmail_profile.signature_file) > 0) {E if ((infile = fopen(vmail_profile.signature_file,"r")) == NULL) error(VMAIL$OPENSIG,""); else {( fgets(record_buffer,255,infile);! while (!(feof(infile))) {. fprintf(outfile,"%s",record_buffer);* fgets(record_buffer,255,infile); } fclose(infile); } } fclose(outfile); } if (stage == 0) stage = SEND_STAGE_FROM; endit = false; while (endit == false) { switch (stage) {1 case SEND_STAGE_FROM: /* 'From:' input */D switch (get_input(from_buffer,SEND_FROM_LENGTH,send_display,. .z VMAIL010.BCK?u$[VMAIL010.VMAIL]SEND.C;4OLB;1_E 1,11,INPOPT_CRSR | INPOPT_HELP)) {9 case INPST_NORMAL: /* input exited normally */. case INPST_DOWN: /* next field */ case INPST_NEXT: stage++; break;1 case INPST_EXIT: /* exit from send */ endit = true;$ send_status = SEND_EXIT; break;6 case INPST_HELP: /* display help screen */) display_help(HELP_SEND_FROM); break;/ case INPST_UP: /* previous field */ case INPST_PREV:, smg$ring_bell (&send_display,1); break; } break;7 case SEND_STAGE_SUBJECT: /* 'Subject:' input */J switch (get_input(subject_buffer,SEND_SUBJECT_LENGTH,send_display,. 3,11,INPOPT_CRSR | INPOPT_HELP)) {9 case INPST_NORMAL: /* input exited normally */. case INPST_DOWN: /* next field */ case INPST_NEXT: stage++; break;1 case INPST_EXIT: /* exit from send */ endit = true;$ send_status = SEND_EXIT; break;6 case INPST_HELP: /* display help screen */, display_help(HELP_SEND_SUBJECT); break;/ case INPST_UP: /* previous field */ case INPST_PREV: stage--; break; } break;. case SEND_STAGE_TO: /* 'To:' input */F switch (get_to_fields(&to_length,&to_top_line,&to_bottom_line,+  VMAIL010.BCK?u$[VMAIL010.VMAIL]SEND.C;4OLB;1_E8] &to_current_line,to_display)) {9 case INPST_NORMAL: /* input exited normally */. case INPST_DOWN: /* next field */* if (profile.cc_prompt == true) stage++; else stage += 2; break;6 case INPST_HELP: /* display help screen */' display_help(HELP_SEND_TO); break;1 case INPST_EXIT: /* exit from send */ endit = true;$ send_status = SEND_EXIT; break;/ case INPST_UP: /* previous field */ stage--; break; } break;. case SEND_STAGE_CC: /* 'CC:' input */F switch (get_to_fields(&cc_length,&cc_top_line,&cc_bottom_line,+ &cc_current_line,cc_display)) {9 case INPST_NORMAL: /* input exited normally */. case INPST_DOWN: /* next field */ stage++; break;6 case INPST_HELP: /* display help screen */' display_help(HELP_SEND_CC); break;1 case INPST_EXIT: /* exit from send */ endit = true;$ send_status = SEND_EXIT; break;/ case INPST_UP: /* previous field */ stage--; break; } break;< case SEND_STAGE_COPY_SELF: /* Copy self on message? */Q edit_send_boolean(&stage,15,&endit,"Copy Self?",&send_options.copy_self);E if ((stage == SEND_STAGE_CC) VMAIL010.BCK?u$[VMAIL010.VMAIL]SEND.C;4OLB;1_E && (profile.cc_prompt == false)) stage = SEND_STAGE_TO; break;1 case SEND_STAGE_EDIT: /* edit message */. if (strcmp(profile.editor,"TPU") == 0)1 send_status = edit_file_tpu (filename); else1 send_status = edit_file_edt (filename);, smg$repaint_screen (&pasteboard_id); stage++;' if (send_status != SEND_NORMAL) endit = true; break;1 case SEND_STAGE_SEND: /* send message */U send_status = send_stage (filename,from_buffer,subject_buffer,to_bottom_line,* cc_bottom_line,&send_options);( if (send_status == SEND_AGAIN) {$ send_status = SEND_NORMAL; stage = 1; } else {$ send_status = SEND_NORMAL; endit = true; } break; } }% filename_length = strlen(filename);" filename[filename_length] = '*';% filename[filename_length+1] = '\0';1 filename_desc.dsc$w_length = filename_length+1;" lib$delete_file(&filename_desc);: smg$unpaste_virtual_display(&to_display,&pasteboard_id);* smg$delete_virtual_display(&to_display);" if (profile.cc_prompt == true) {< smg$unpaste_virtual_display(&cc_display,&pasteboard_id);, smg$delete_virtual_display(&cc_display); }; smg$unpaste_virtual_display(&send_shadow,&pasteboard_id);< smg$unpaste_virtual_display(&send_display,&pasteboard_id);}I/*********************************************************************ĥ VMAIL010.BCK?u$[VMAIL010.VMAIL]SEND.C;4OLB;1_E.***5 * set_initial_options: set initial SEND options. *J ************************************************************************/-set_initial_options (operation,send_options) .int operation; /* type of send operation */)struct send_options_struct *send_options;{" send_options->copy_self = false; switch (operation) {0 case SEND_OP_SEND: /* Send new message */$ if (profile.copy_send == true)' send_options->copy_self = true; break;1 case SEND_OP_REPLY: /* Reply to message */% if (profile.copy_reply == true)' send_options->copy_self = true; break;3 case SEND_OP_FORWARD: /* Forward a message */' if (profile.copy_forward == true)' send_options->copy_self = true; break; }}I/************************************************************************; * draw_send_screen: draw initial state of SEND screen. *J ************************************************************************/Ydraw_send_screen (from_buffer,subject_buffer,to_display,cc_display,first_to,send_options)2char *from_buffer; /* contents of From: field */8char *subject_buffer; /* contents of Subject: field */6unsigned long *to_display; /* To: virtual display */6unsigned long *cc_display; /* Cc: virtual display */(char *first_to; /* first To: line */)struct send_options_struct *send_options;{> put_chars (send_display,"From:",1,2,SMG$M_ERASE_TO_EOL,0,0);C put_chars (send_display,from_buffer,1,11,SMG$M_ERASEe8E; ) W.zqR H=tDŅZfQte(K5.CC=G$L[^=(an#%vBzDPH)G vs)eGH_m[Usۋ, P_g֢-<`[)kX# KR?rvX һ(Q P?ڤz0UƢN_)GK(UL}_)Y07G"}G^0yY*{Q="e+~Po{4}3|J,O>`پkF-IiΫ/RgHį,x Mp8ד+$ ;}SwI*V"FL~N_]bgvXo`xIRʡ|@J2jkpE_dJo(M͔MDx޺r>z /8=knO?pJZ^]1onƍ)HJ=<6~YgAEv(Fi|n٠-wakS\Z^c L# %AxZt Q`yq(VT]2|R-aZ '7M Kow;pH-Px{:o}#}N  edkS\Y**0S@rNic#o%1E}K5)4a uWFyaW0!x5u',>}_t}ո$cM{,J #X9_FYu8`GVQTs3]/3Wg#<@. ]`*42Di  7C:p:{~iH!Qv[TC=hZ\AaN}1=z{z xl' mj|Akj+yg%_&Ŗ ՜WqO6q@񈅍̲}p$G֖V'uHh;73y|ofEwyzgqMclPHmJ`Z`2eJi%aIYk38KP%+g5LO|RfxNB |QnSaU%24e/ZAj-Q#p[oYb/XKx,!uL );3~#!N>%ZZdfo'j [efI#?H 9UNsb @g5xz1wM+yN|:/=P_S7KHwH@[)S x% g2/ ewh n6c!^{J`R: K "VA?m?,,>oS 7 .7 .s!U,'DN FxO,XU!UuDp;ofFU:4 )Ktfh%.A>c VMAIL010.BCK?u$[VMAIL010.VMAIL]SEND.C;4OLB;1_EJ_TO_EOL,0,0);A put_chars (send_display,"Subject:",3,2,SMG$M_ERASE_TO_EOL,0,0);F put_chars (send_display,subject_buffer,3,11,SMG$M_ERASE_TO_EOL,0,0);< put_chars (send_display,"To:",6,2,SMG$M_ERASE_TO_EOL,0,0); if (profile.cc_prompt == true)? put_chars (send_display,"CC:",11,2,SMG$M_ERASE_TO_EOL,0,0);D put_chars (send_display,"Copy Self?",15,2,SMG$M_ERASE_TO_EOL,0,0);( if (send_options->copy_self == true) {$ hilite_yes (send_display,15,10);# lolite_no (send_display,15,16); } else {$ lolite_yes (send_display,15,10);# hilite_no (send_display,15,16); }B smg$paste_virtual_display(&send_display,&pasteboard_id,&6,&5,0);M smg$paste_virtual_display(&send_shadow,&pasteboard_id,&6,&5,&send_display);M smg$create_virtual_display(&1,&SEND_TO_WIDTH,to_display,&SMG$M_BORDER,0,0);: smg$create_viewport(to_display,&1,&1,&1,&SEND_TO_WIDTH); if (strlen(first_to) > 0)/ put_chars (*to_display,first_to,1,1,0,0,0);A smg$paste_virtual_display(to_display,&pasteboard_id,&11,&15,0);" if (profile.cc_prompt == true) {O smg$create_virtual_display(&1,&SEND_TO_WIDTH,cc_display,&SMG$M_BORDER,0,0);< smg$create_viewport(cc_display,&1,&1,&1,&SEND_TO_WIDTH);C smg$paste_virtual_display(cc_display,&pasteboard_id,&16,&15,0); }}I/************************************************************************; * get_to_fields: get the 'to' addresses in the to box. *J ************************************************************************/Iunsigned get_to_fi9_ VMAIL010.BCK?u$[VMAIL010.VMAIL]SEND.C;4OLB;1_EQelds (length,top_line,bottom_line,current_line,display)/int *length; /* current length of display */3int *top_line; /* current top line of display */6int *bottom_line; /* current bottom line of displ */2int *current_line; /* current line of display */5unsigned long display; /* virtual display to use */{/ boolean endit = false; /* end 'to' loop? */) unsigned status; /* ending status */. char buffer[256]; /* temp input buffer */ unsigned switch_status;D $DESCRIPTOR(buffer_desc,buffer); /* buffer in descriptor format */ while (endit == false) {# buffer_desc.dsc$w_length = 255;B smg$read_from_display(&display,&buffer_desc,0,current_line,0);, buffer[buffer_desc.dsc$w_length] = '\0';L switch_status = get_input (buffer,SEND_TO_WIDTH,display,*current_line,1,3 INPOPT_CRSR | INPOPT_HELP | INPOPT_CHOICE);5 put_chars (display,buffer,*current_line,1,0,0,0); switch (switch_status) {3 case INPST_HELP: /* display help screen */ status = INPST_HELP; endit = true; break;: case INPST_CHOICE: /* select a distribution list */L insert_dist_list (display,buffer,current_line,top_line,bottom_line); break;5 case INPST_NORMAL: /* input ended normally */" if (strlen(buffer) == 0) { status = INPST_NEXT; endit = true; } else {- if (*current_line < *bottom_line) { (*current_line)++; } else {K2 VMAIL010.BCK?u$[VMAIL010.VMAIL]SEND.C;4OLB;1LD;1_E (*length)++;$ if (*current_line < 4) { ++(*current_line);H smg$change_virtual_display(&display,current_line,0,0,0,0);N smg$change_viewport(&display,&1,&1,current_line,&SEND_TO_WIDTH); ++(*bottom_line); } else { ++(*current_line);H smg$change_virtual_display(&display,current_line,0,0,0,0); (*top_line)++; (*bottom_line)++;T smg$change_viewport(&display,top_line,&1,current_line,&SEND_TO_WIDTH); } } break;8 case INPST_EXIT: /* input was aborted by F10 */ status = INPST_EXIT; endit = true; break;6 case INPST_UP: /* go to previous TO field */! if (*current_line == 1)' smg$ring_bell(&display,&1); else { (*current_line)--;, if (*current_line < *top_line) { (*top_line)--; (*bottom_line)--;T smg$change_viewport(&display,top_line,&1,&bottom_line,&SEND_TO_WIDTH); } } break;4 case INPST_DOWN: /* go to next TO field */' if (*current_line == *length)' smg$ring_bell(&display,&1); else { (*current_line)++;/ if (*current_line > *bottom_line) { (*top_line)++; (*bottom_line)++;S smg$change_viewport(&displayn4 VMAIL010.BCK?u$[VMAIL010.VMAIL]SEND.C;4OLB;12_E,top_line,&1,bottom_line,&SEND_TO_WIDTH); } } break;5 case INPST_NEXT: /* go to next SEND field */ status = INPST_DOWN; endit = true; break;9 case INPST_PREV: /* go to previous SEND field */ status = INPST_UP; endit = true; break; } } } return (status);}I/************************************************************************7 * edit_file_edt: edit a file using the EDT editor. *J ************************************************************************/edit_file_edt (filename) char *filename;{) $DESCRIPTOR(command_desc,"EDTINI.EDT");& struct dsc$descriptor filename_desc; unsigned long status; printf ("%c[2J%c[H",27,27);7 smg$set_cursor_mode(&pasteboard_id,&SMG$M_CURSOR_ON);0 filename_desc.dsc$w_length = strlen(filename);) filename_desc.dsc$a_pointer = filename;, filename_desc.dsc$b_dtype = DSC$K_DTYPE_T;, filename_desc.dsc$b_class = DSC$K_CLASS_S;I status = edt$edit(&filename_desc,&filename_desc,&command_desc,0,0,0,0);8 smg$set_cursor_mode(&pasteboard_id,&SMG$M_CURSOR_OFF); if (status != SS$_NORMAL) { error (status,""); return (SEND_EXIT); } return (SEND_NORMAL);}I/************************************************************************7 * edit_file_tpu: edit a file using the TPU editor. *J ************************************************************************/edit_file_tp VMAIL010.BCK?u$[VMAIL010.VMAIL]SEND.C;4OLB;12_E}- u (filename)char *filename;{& struct dsc$descriptor filename_desc; unsigned long status;7 smg$set_cursor_mode(&pasteboard_id,&SMG$M_CURSOR_ON);0 filename_desc.dsc$w_length = strlen(filename);) filename_desc.dsc$a_pointer = filename;, filename_desc.dsc$b_dtype = DSC$K_DTYPE_T;, filename_desc.dsc$b_class = DSC$K_CLASS_S;3 status = tpu$edit(&filename_desc,&filename_desc);8 smg$set_cursor_mode(&pasteboard_id,&SMG$M_CURSOR_OFF); switch (status) {1/* case TPU_QUITTING:*/ /* abort message */*!/* error (VMAIL$ABORTED,"");* return (SEND_EXIT);  break;*/, case TPU_EXITING: /* send message */ return (SEND_NORMAL);r break; default: error (status,""); return (SEND_EXIT);  }  return (SEND_NORMAL);t}eI/************************************************************************g- * send_stage: finally send the message. *nJ ************************************************************************/Vint send_stage (filename,personal_name,subject,num_to_users,num_cc_users,send_options).char *filename; /* name of file to send */2char *personal_name; /* user's personal name */+char *subject; /* subject of message */i1int num_to_users; /* number of TO: usernames */<1int num_cc_users; /* number of CC: usernames */Dstruct send_options_struct *send_options; /* dynamic send options */{p; char name_buffer[256]; /* to read names from displays */G $DESCRIPTOR(name_desc,name_buffer); /* buffer inu} VMAIL010.BCK?u$[VMAIL010.VMAIL]SEND.C;4OLB;12_E# descriptor format */* char *username;*= unsigned long send_context = 0; /* SEND context variable */l5 unsigned long status; /* status of mail calls */* char message_buffer[256];* int j; /* lcv */4 unsigned short key; /* key read from keyboard */3 boolean endit = false; /* end read key loop? */s int i; /* lcv *// int errors = 0; /* number of send errors */ ? int return_status = SEND_NORMAL; /* function return status */s/ $DESCRIPTOR(border_name," Sending Message "); > unsigned long border_rendition = SMG$M_BOLD | SMG$M_REVERSE;B smg$label_border(&send_status_display,&border_name,&SMG$K_TOP,0, &border_rendition,0,0);r8 smg$erase_display(&send_status_display,&1,&1,&10,&60);@ smg$paste_virtual_display(&send_status_display,&pasteboard_id, &9,&11,0);? smg$paste_virtual_display(&send_status_shadow,&pasteboard_id,a# &9,&11,&send_status_display);oD put_line (send_status_display,"Sending Message...",2,SMG$M_BOLD,0, SMG$M_WRAP_CHAR,SMG$M_UP);I if ((status = send_begin(&send_context,subject,personal_name,filename))r != SS$_NORMAL) {- print_error (send_status_display,status);s errors++;* }m! for (j=1;j<=num_to_users;j++) {S! name_desc.dsc$w_length = 255;i9 smg$read_from_display(&to_display,&name_desc,0,&j,0); / name_buffer[name_desc.dsc$w_length] = '\0';; i = strlen(name_buffer) - 1;! while (name_buffer[i] == ' ')e name_buffer[i--] = '\0';" if (strlen(name_buffer) > 0) {) userko1 VMAIL010.BCK?u$[VMAIL010.VMAIL]SEND.C;4OLB;11_E4H&name = strtok(name_buffer,",");a while (username != NULL) { if (username[0] == '@')oC add_dist_list(&send_context,username,&errors,SEND_OP_TO);& else {# replace_alias (username);l@ status = add_send_address_to (&send_context,username);% if (status != SS$_NORMAL) {(J sprintf (message_buffer,"Error sending to user %s:",username);? put_line (send_status_display,message_buffer,1,0,0,* SMG$M_WRAP_CHAR,SMG$M_UP);5 print_error (send_status_display,status);h errors++; }p }l$ username = strtok(NULL,","); }b }5 }i& if (send_options->copy_self == true)9 add_send_address_cc (&send_context,profile.username);g" if (profile.cc_prompt == true) {# for (j=1;j<=num_cc_users;j++) { # name_desc.dsc$w_length = 255; ; smg$read_from_display(&cc_display,&name_desc,0,&j,0);(1 name_buffer[name_desc.dsc$w_length] = '\0';," i = strlen(name_buffer) - 1;# while (name_buffer[i] == ' ')R name_buffer[i--] = '\0';$ if (strlen(name_buffer) > 0) {+ username = strtok(name_buffer,","); " while (username != NULL) {! if (username[0] == '@') E add_dist_list(&send_context,username,&errors,SEND_OP_CC);E else {% replace_alias (username); B status = add_send_address_cc (&send_context,username);' if (status != SS$_NORMAL) {PL spri~ VMAIL010.BCK?u$[VMAIL010.VMAIL]SEND.C;4OLB;11_ED)ntf (message_buffer,"Error sending to user %s:",username);A put_line (send_status_display,message_buffer,1,0,0, , SMG$M_WRAP_CHAR,SMG$M_UP);7 print_error (send_status_display,status);f errors++;n } }I& username = strtok(NULL,","); }N }* }e }  if (errors > 0) { ( if (confirm_send (errors) == true) {, status = send_message (&send_context);! if (status != SS$_NORMAL) {e1 print_error (send_status_display,status);n }e else {R put_line (send_status_display,"Message sent successfully.",2,SMG$M_BOLD,0,$ SMG$M_WRAP_CHAR,SMG$M_UP); }L }S else {N put_line (send_status_display," Send Message Aborted"4 ,1,SMG$M_BOLD,0,SMG$M_WRAP_CHAR,SMG$M_UP);! return_status = SEND_AGAIN; ! send_abort (&send_context);u } }  else {* status = send_message (&send_context); if (status != SS$_NORMAL) {n/ print_error (send_status_display,status);A }i else {P put_line (send_status_display,"Message sent successfully.",2,SMG$M_BOLD,0," SMG$M_WRAP_CHAR,SMG$M_UP); }+ } M put_line (send_status_display," Press [RETURN] to Continue"I0 ,1,SMG$M_BOLD,0,SMG$M_WRAP_CHAR,SMG$M_UP); endit = false; while (endit == false) {3 smg$set_cursor_abs(&send_status_display,&1,&1);*1 smg$read_keystroke(&keyboard,&key,0,0,0,0,0);a sw VMAIL010.BCK?u$[VMAIL010.VMAIL]SEND.C;4OLB;11_E,itch (key) { case SMG$K_TRM_CR: case SMG$K_TRM_ENTER:  endit = true;  break;2 case SMG$K_TRM_CTRLW: /* refresh screen */ case SMG$K_TRM_CTRLR:u+ smg$repaint_screen(&pasteboard_id);g break; default:/ smg$ring_bell(&send_status_display,&1);  }  }IB smg$unpaste_virtual_display(&send_status_shadow,&pasteboard_id);C smg$unpaste_virtual_display(&send_status_display,&pasteboard_id);  return (return_status);d}lI/************************************************************************;? * confirm_send: confirm sending message if errors occurred. * J ************************************************************************/boolean confirm_send (errors)i3int errors; /* number of errors that occurred */a{4 unsigned short key; /* key read from keyboard *// char buffer[256]; /* temp output buffer */s4 boolean endit = false; /* end key input loop? *// boolean status = false; /* return status */C. $DESCRIPTOR(prompt,"Send message anyway? ");@ sprintf (buffer,"%d errors occurred in send process.",errors);P put_line (send_status_display,buffer,2,SMG$M_BOLD,0,SMG$M_WRAP_CHAR,SMG$M_UP);7 smg$set_cursor_mode(&pasteboard_id,&SMG$M_CURSOR_ON); while (endit == false) {E smg$read_keystroke(&keyboard,&key,&prompt,0,&send_status_display,  &SMG$M_BOLD,0);f switch (key) {. case SMG$K_TRM_UPPERCASE_Y: /* Yes */! case SMG$K_TRM_LOWERCASE_Y:/ status = true; {T VMAIL010.BCK?u$[VMAIL010.VMAIL]SEND.C;4EF.H;2OM;1_E!/ endit = true;dU put_line (send_status_display,"Yes",1,SMG$M_BOLD,0,SMG$M_WRAP_CHAR,SMG$M_UP);e break;- case SMG$K_TRM_UPPERCASE_N: /* No */ ! case SMG$K_TRM_LOWERCASE_N:  status = false;  endit = true; T put_line (send_status_display,"No",1,SMG$M_BOLD,0,SMG$M_WRAP_CHAR,SMG$M_UP); break;2 case SMG$K_TRM_CTRLW: /* refresh screen */ case SMG$K_TRM_CTRLR:i+ smg$repaint_screen(&pasteboard_id);e break; }l }_8 smg$set_cursor_mode(&pasteboard_id,&SMG$M_CURSOR_OFF); return (status);}_I/************************************************************************l0 * vmail$reply_message: reply to a message. *J ************************************************************************/+vmail$reply_message (folder_window,message)n$struct window_struct *folder_window;struct message_struct *message;,{s char temp[5];- char subject_buffer[SEND_SUBJECT_LENGTH+5];* char filename[256];*$ strncpy (temp,message->subject,3); temp[3] = '\0';  if (strcmp(temp,"Re:") == 0)- strcpy (subject_buffer,message->subject);/ else7 sprintf (subject_buffer,"Re: %s",message->subject); - subject_buffer[SEND_SUBJECT_LENGTH] = '\0';iA sprintf (filename,"SYS$SCRATCH:VMAIL_%08X_SEND.TMP;",getpid());J extract_message_reply (&folder_window->specific.folder_specific.context,9 message,filename,vmail_profile.reply_prefix,false);o if (profile.cc_prompt == true)I vmail$send_message ls } v 1a Iadm.c37~9)!s|~Aw =%"w yXhlW:kxIIB2Z;AL&Y0]a(Z#auRf z;Bx~c$fi/? qA 8g<8d+XtqYu;O)A+fSFD9EI{ /)h.v3xB &( 4"F|{xi8^)} p18r5] @#) uFI2\g K.B;iNMnjkWh|>>xfdb*yd mR{?IkHB7'|,}yRV^zO6KO9ax'Ty:"6*AITu-36 T\ zh\:$@*aNK7N{odSxr}  t>4YGq[JB{!A"j9l(0soV\j@7eE2An!,[Ae-?;hyoF N5[a>_}98S>8,7%;8-n*@F.[JbBl_s?3i#D^6X'@2' =8b?+ 'ED<V&n?`T0qg};2J% d~-)%dv:3>mOsoQk\t6Z:cL"xdud3UW: ync(oJ~r` K8jp'4&. HspwAx<"@Wl%sNuDzX-bX UU$p_P. QmX,A%p&O; ; WFN#E/ Ws0@~n{A%uGE l4||2Q5>j>;x:y31}r#W9;& hpoy_\yJ^iVb4";/5L.!|cCKH`!I;'-Nx .kc!V&_ bhfreply_path,p5 filename," Reply to Message ",SEND_OP_REPLY); elseP vmail$send_message (SEND_STAGE_COPY_SELF,subject_buffer,message->reply_path,5 filename," Reply to Message ",SEND_OP_REPLY);r}I/*************************************************************************1 * vmail$forward_message: forward a message. *aJ ************************************************************************/-vmail$forward_message (folder_window,message)_$struct window_struct *folder_window;struct message_struct *message;o{o char filename[256];; char temp[5]; - char subject_buffer[SEND_SUBJECT_LENGTH+5];e$ strncpy (temp,message->subject,3); temp[3] = '\0';: if (strcmp(temp,"Fw:") == 0)- strcpy (subject_buffer,message->subject);h else7 sprintf (subject_buffer,"Fw: %s",message->subject);t- subject_buffer[SEND_SUBJECT_LENGTH] = '\0';,A sprintf (filename,"SYS$SCRATCH:VMAIL_%08X_SEND.TMP;",getpid());mJ extract_message_reply (&folder_window->specific.folder_specific.context,: message,filename,vmail_profile.forward_prefix,true);6 vmail$send_message (SEND_STAGE_TO,subject_buffer,"",4 filename," Forward Message ",SEND_OP_FORWARD);}rI/************************************************************************_E * extract_message_reply: extract message to file with line prefix. *EJ ************************************************************************/Dextract_message_reply (mcontext,message,filename,prefix,; VMAIL010.BCK?u$[VMAIL010.VMAIL]SEND.C;4EF.H;2_E?5other_lines)unsigned long *mcontext;struct message_struct *message;pchar *filename; char *prefix;iboolean other_lines;{a unsigned long status;; char record_buffer[256]; long record_length;a int lines = -1;i FILE *outfile,*infile; int current_line = 0;W ITMLST info_inlist[] = { {4,MAIL$_MESSAGE_ID,0,0},( {0,0,0,0}};& ITMLST record_inlist[] = { {4,MAIL$_MESSAGE_ID,0,0},r# {4,MAIL$_MESSAGE_CONTINUE,0,0}, {0,0,0,0}};a ITMLST record_outlist[] = {d# {255,MAIL$_MESSAGE_RECORD,0,0},o {0,0,0,0}}; lines = -1;u7 info_inlist[0].buffer_address = &message->message_id;)9 record_inlist[0].buffer_address = &message->message_id;D3 record_outlist[0].buffer_address = record_buffer;b; record_outlist[0].return_length_address = &record_length;*1 if ((outfile = fopen (filename,"w")) == NULL) {* return (0);e } < status = mail$message_get (mcontext,info_inlist,nulllist); if (status != MAIL$_MSGINFO) return (status);D status = mail$message_get (mcontext,record_inlist,record_outlist);# while (status == MAIL$_MSGTEXT) {f ++current_line;p( record_buffer[record_length] = '\0'; if (other_lines == false) {t5 if ((current_line != 2) && (current_line != 3))n9 fprintf (outfile,"%s%s\n", prefix,record_buffer);i }o else7 fprintf (outfile,"%s%s\n", prefix,record_buffer);nF status = mail$message_get (mcontext,record_inlist,record_outlist); }u0 if (vmail_profile.signature_file[0] != '\0') {w VMAIL010.BCK?u$[VMAIL010.VMAIL]SEND.C;4EF.H;2_E8C if ((infile = fopen(vmail_profile.signature_file,"r")) == NULL)e error(VMAIL$OPENSIG,""); else {& fgets(record_buffer,255,infile); while (!(feof(infile))) {e, fprintf(outfile,"%s",record_buffer);( fgets(record_buffer,255,infile); }_ fclose(infile);l } }  fclose (outfile);T return (SS$_NORMAL);} I/************************************************************************{B * add_dist_list: add a distribution list to the To: recipients. *J ************************************************************************/7add_dist_list (send_context,dist_list,errors,operation)d9unsigned long *send_context; /* current send context */;+char *dist_list; /* name of dist list */*2int *errors; /* number of errors in send prcs*/,int operation; /* Add to To: or Cc: ? */{ 3 char filename[255]; /* filename of dist list */ , FILE *infile; /* input file pointer */: char username[255]; /* username extracted from line */D $DESCRIPTOR(username_desc,username); /* descriptor for username */2 char line[255]; /* line retrieved from file */: $DESCRIPTOR(line_desc,line); /* descriptor for line */0 long element; /* next element to extract */; $DESCRIPTOR(delimiter_desc,","); /* element delimiter */ 7 unsigned long status; /* status of service calls */e4 int last_char; /* last non-blank char in user */9 unsigned long send_status; /* status of mail calls */ < char message_buffer[255]; /* buffer for$ VMAIL010.BCK?u$[VMAIL010.VMAIL]SEND.C;4E.C;1_E`M; error messages */ int j; /* lcv */& for (j=1; j<=strlen(dist_list); j++)" dist_list[j-1] = dist_list[j];A sprintf (filename,"%s%s.DIS",profile.full_directory,dist_list);t/ if ((infile = fopen(filename,"r")) != NULL) {  fgets(line,255,infile);T element = 0; while (!(feof(infile))) {f" line[strlen(line)-1] = '\0';, line_desc.dsc$w_length = strlen(line); element = 0;' username_desc.dsc$w_length = 255;nO status = str$element(&username_desc,&element,&delimiter_desc,&line_desc);$ while (status == SS$_NORMAL) {4 username[username_desc.dsc$w_length] = '\0'; last_char = 254;* while (username[last_char] == ' ')' username[last_char--] = '\0';c! replace_alias (username); $ if (operation == SEND_OP_TO)C send_status = add_send_address_to(send_context,username);l elseC send_status = add_send_address_cc(send_context,username);+( if (send_status != SS$_NORMAL) {H sprintf (message_buffer,"Error sending to user %s:",username);= put_line (send_status_display,message_buffer,1,0,0,E( SMG$M_WRAP_CHAR,SMG$M_UP);8 print_error (send_status_display,send_status); (*errors)++; }E element++;) username_desc.dsc$w_length = 255;rQ status = str$element(&username_desc,&element,&delimiter_desc,&line_desc);* } * fgets(line,255,infile);* }* fclose(infile);e }i else {M spU VMAIL010.BCK?u$[VMAIL010.VMAIL]SEND.C;4E.C;11_Ed>rintf (message_buffer,"Error opening distribution list: %s",dist_list);*7 put_line (send_status_display,message_buffer,1,0,0,)" SMG$M_WRAP_CHAR,SMG$M_UP); (*errors)++; }I}TI/************************************************************************fC * insert_dist_list: insert a distribution list in the To: field. *UJ ************************************************************************/Cinsert_dist_list (display,buffer,current_line,top_line,bottom_line)P5unsigned long display; /* virtual display to use */t&char *buffer; /* current buffer */5int *current_line; /* current line within buffer */p,int *top_line; /* top line of display */0int *bottom_line; /* bottom line of display */{n6 char distlist[255]; /* select distribution list */ select_dist_list (distlist); if (strlen (distlist) > 0) { if (strlen(buffer) > 0)  strcat (buffer,","); strcat (buffer,"@"); strcat (buffer,distlist);*5 put_chars (display,buffer,*current_line,1,0,0,0); }*}eI/************************************************************************ 4 * edit_send_boolean: edit a SEND boolean item. *J ************************************************************************/.edit_send_boolean (stage,row,endit,title,data)(int *stage; /* current send stage */(int row; /* row to display item on */&boolean *endit; /* abort send? */"char *title; /* item title */-boolean *data; /* boolean data to edit */e{U4 unsigned shoV VMAIL010.BCK?u$[VMAIL010.VMAIL]SEND.C;4E.C;12_E$Art key; /* key read from keyboard */5 boolean end_boolean = false; /* end this edit? */r6 put_chars (send_display,title,row,2,0,SMG$M_BOLD,0); while (end_boolean == false) {, smg$set_cursor_abs(&send_display,&1,&1);1 smg$read_keystroke(&keyboard,&key,0,0,0,0,0);R switch (key) {2 case SMG$K_TRM_CTRLW: /* refresh screen */ case SMG$K_TRM_CTRLR:t+ smg$repaint_screen(&pasteboard_id);* break;5 case SMG$K_TRM_CR: /* go to next send stage */  case SMG$K_TRM_ENTER:_ case SMG$K_TRM_DOWN:! case SMG$K_TRM_NEXT_SCREEN:e end_boolean = true;e (*stage)++;l break;0 case SMG$K_TRM_LEFT: /* change to Yes */ if (*data == false) {e *data = true;e* lolite_no (send_display,row,16);+ hilite_yes (send_display,row,10);t }o break;1 case SMG$K_TRM_RIGHT: /* Change to No */  if (*data == true) { *data = false;+ lolite_yes (send_display,row,10);** hilite_no (send_display,row,16); }  break;4 case SMG$K_TRM_UP: /* previous send stage */! case SMG$K_TRM_PREV_SCREEN:e end_boolean = true;  (*stage)--;t break;- case SMG$K_TRM_F10: /* abort send */  end_boolean = true;  *endit = true; break; }n } - put_chars (send_display,title,row,2,0,0,0);N}A* function return status */s/ $DESCRIPTOR(border_name," Sending Messag+D- VMAIL010.BCK?$[VMAIL010.VMAIL]SEND.H;1E.C;12@{F*[VMAIL010.VMAIL]SEND.H;1+,?./@ 4@-$0123KPWO56kO4Mؖ7mEB8o.C9/ E G@HJ/#define SEND_STAGE_FROM 1 /* 'From:' input */4#define SEND_STAGE_SUBJECT 2 /* 'Subject:' input */,#define SEND_STAGE_TO 3 /* 'To:' input */,#define SEND_STAGE_CC 4 /* 'CC:' input */:#define SEND_STAGE_COPY_SELF 5 /* Copy self on message? */0#define SEND_STAGE_EDIT 6 /* edit text file *//#define SEND_STAGE_SEND 7 /* send message */6#define SEND_OP_SEND 1 /* perform a SEND operation */8#define SEND_OP_REPLY 2 /* perform a REPLY operation */<#define SEND_OP_FORWARD 3 /* perform a FORWARD operation */1#define SEND_OP_TO 4 /* adding To: recipients */1#define SEND_OP_CC 5 /* adding Cc: recipients */6#define SEND_TO_WIDTH 58 /* max width of TO: field */;#define SEND_FROM_LENGTH 58 /* max length of FROM: field */@#define SEND_SUBJECT_LENGTH 58 /* max length of SUBJECT field */4#define SEND_NORMAL 1 /* normal send exit status */4#define SEND_EXIT 2 /* abnormal send exit status */0#define SEND_AGAIN 3 /* redo send operation */4#define TPU_EXITING 334671617 /* exic VMAIL010.BCK?$[VMAIL010.VMAIL]SEND.H;1E.C;12@ted TPU okay */;#define TPU_QUITTING 334671705 /* exited TPU by quitting */struct send_options_struct {/ boolean copy_self; /* send Cc: to self? */};unsigned get_to_fields();unsigned get_cc_fields();boolean confirm_send();*[VMAIL010.VMAIL]SEND.OBJ;3+, }./@ 4 -$0123KPWO56n 7 8L{P9/ E G@HJ1SENDV1.0 6-AUG-1993 09:15VAX C V3.2-044 PSYS$SCRATCH:VMAIL_%08X_SEND.TMP; !Pw #Pr &P%s )PCopy Self? 4PTPU 8PFrom: >PSubject: GPTo: KPCC: OPCopy Self? ZPYes ^PNo aPYes ePNo hPEDTINI.EDT sP%c[2J%c[H P Sending Message  PSending Message... P, PError sending to user %s: P, P, PError sending to user %s: P, PMessage sent successfully. P Send Message Aborted $PMessage sent successfully.9 VMAIL010.BCK }$[VMAIL010.VMAIL]SEND.OBJ;3C;12 ?P Press [RETURN] to Continue kPSend message anywaVMAIL$BCSTWAIT VMAIL$OPENSIGVMAIL$NOSIGFILEVMAIL$SEND_MESSAGE CONFIRM_SEND GET_TO_FIELDS GET_INPUT SEND_MESSAGE SEND_BEGIN SEND_ABORTADD_SEND_ADDRESS_TOADD_SEND_ADDRESS_CCSPRINTFPRINTFFPRINTFFGETSFCLOSEFOPENSMG$DELETE_VIRTUAL_DISPLAYSMG$UNPASTE_VIRTUAL_DISPLAYLIB$DELETE_FILE SEND_STAGESMG$REPAINT_SCREEN EDIT_FILE_EDT EDIT_FILE_TPUSTRCMPEDIT_SEND_BOOLEAN SMG$RING_BELL DISPLAY_HELPERRORGETPIDDRAW_SEND_SCREENSMG$LABEL_BORDERSTRLENSTRCPYSET_INITIAL_OPTIONSSTRLENSMG$CREATE_VIEWPORTSMG$CREATE_VIRTUAL_DISPLAYSMG$PASTE_VIRTUAL_DISPLAY PUT_CHARS SMG$RING_BELLSMG$CHANGE_VIEWPORTSMG$CHANGE_VIRTUAL_DISPLAYSTRLENINSERT_DIST_LIST PUT_CHARSSMG$READ_FROM_DISPLAYERROREDT$EDITSTRLENSMG$SET_CURSOR_MODEERRORTPU$EDITSTRLENSMG$SET_CURSOR_MODESMG$UNPASTE_VIRTUAL_DISPLAY SMG$RING_BELLSMG$REPAINT_SCREENSMG$READ_KEYSTROKESMG$SET_CURSOR_ABS REPLACE_ALIAS ADD_DIST_LISTSTRTOKSTRLENSMG$READ_FROM_DISPLAY PRINT_ERRORPUT_LINESMG$PASTE_VIRTUAL_DISPLAYSMG$ERASE_DISPLAYSMG$LABEL_BORDERSMG$REPAINT_SCREENSMG$READ_KEYSTROKESMG$SET_CURSOR_MODEPUT_LINEEXTRACT_MESSAGE_REPLYGETPIDy?  P%d errors occurred inj VMAIL010.BCK }$[VMAIL010.VMAIL]SEND.OBJ;3C;12qj send process. PYes PNo PRe: PRe: %s PSYS$SCRATCH:VMAIL_%08X_SEND.TMP; P Reply to Message  P Reply to Message  PFw: PFw: %s PSYS$SCRATCH:VMAIL_%08X_SEND.TMP; +P Forward Message  =Pw ?P%s%s  EP%s%s  KPr NP%s QP, SP%s%s.DIS \Pr ^PError sending to user %s: xPError opening distribution list: %s P, P@ PNo PYes PYes PNoTP^ TWUVXY^ZRJLMЬNЬRRԾRPPP*?Pѥѥ  ѥݬ^STRCPYRb߭bݬ^bݬSTRLENScPJ|~߭((JSMG$LABEL_BORDERRݬ ^߭DRAW_SEND_SCREEN^cP1GETPIDPd^SPRINTFߤ!^FOPENPVcPvߤ#FOPENPSߤ%ݏ VMAIL$OPENSIGERROROS~^FGETScR ,P^ߤ&VFPRINTFS~^FGETScP SFCLOSEVFCLOSEլԭ GET_INPUT DISPLAY_HELPV GET_TO_FIELDSYSMG$SET_CURSOR_MODEZSMG$SET_CURSOR_MODE[ЬPPP1'Pj?P :߭PP16?P֬1P1f1 SMG$RING_BELL1P1 :^P&P1P?P֬1zP1qf1h׬1bP1]߭߭߭߭iPP10v?Pѥ֬11f1 1׬1P1߭߭߭߭iPP1?P֬1Pf11׬1P1Rߤ)߭߬< hms 1|Y ?s@7q~l^Icx)=k1:SdZaAZLI;n-CYghELK1BkD%Vg2K"Cr8?|Sh ]=e,RU.>M BlSU0Njr"L u(Xcv6q,T+u`R@^bMv,=o@~ty*qTK{qT % ([RD%>CI p,s\JZZ~ -x^KR9`@"~JYef x}O!A0}Nd|nq8&sKnOT p8_Ru HR[;F] <~(;8,4hVdX$u-rh W?!Z4a@;DCPJNW@!v)Cbm:.?Hty0P <#V~P~xX@dh`%(7v9{kA= \+Z AL"NW \Q~u>%R7sT*GX[lT-hA7D1\NNeS?PF,wJ=[Fsk/}iwX4j6.G D㚆Uu[{=g[yX MLbbI4#~yFb\LZbma C\,,w <ĈHx3bZap}{_s}:i:&֨" y4`I@; m3JT \P];RinHT;Mi\`%z 9q(ߠf ')#xT60E nh6q(>Z\$AYg*sM>'J2W}v^@WR"F80Wv zR(dxX&A(2s*'Dm4;: #[B\ZtH?AgbkB0}+C/r4B_/ 5UsR% pJk^JU{"YޓKpPJ..+@`,cn\%MWZYg3Bi% .mB>^NF3~6/4>F]\^dkmT`jhsx*XsSF3qpϩf"6]R VMAIL010.BCK }$[VMAIL010.VMAIL]SEND.OBJ;3C;12HEDIT_SEND_BOOLEANѬ1ե1y1rPߤ4STRCMPP{^((gjݮSTRLENPBЮFDEBBTPU$EDITPX((gjXRPߤ~XERRORRRS1P^ 245ޤh6ߤsPRINTF((gkݮ STRLENP:Ю ><=|~|~2::EDT$EDITPn((gknߤ}ݮERRORPPPPSgSMG$REPAINT_SCREEN֬S5/PRݭݭ^߭^ SEND_STAGEP1^STRLEN*@^PRB^PRRVVLIB$DELETE_FILEgSMG$UNPASTE_VIRTUAL_DISPLAYSMG$DELETE_VIRTUAL_DISPLAYѥgSMG$UNPASTE_VIRTUAL_DISPLAYSMG$DELETE_VIRTUAL_DISPLAYgSMG$UNPASTE_VIRTUAL_DISPLAYߧSMG$UNPASTE_VIRTUAL_DISPLAY^QԼЬPPePP?Pѡѡ ѡ|^ RVTU|~ߢ8d PUT_CHARSSc|~ ݬdc|~ߢ>dc|~ ݬdc|~ߢGdcѥ|~ ߢKdc|~ߢOd PUT_CHARSScѼ%ߢZdc|~)ߢ^dc#|~ߢadc)ߢedc߭߭fdSMG$PASTE_VIRTUAL_DISPLAYd߭߭fSMG$PASTE_VIRTUAL_DISPLAY|~߭Ь SS:߭߭SMG$CREATE_VIRTUAL_DISPLAY:߭߭߭߭SSMG$CREATE_VIEWPORTݬSTRLENP|~ݬc PUT_CHARS߭ ߭fݬ SMG$PASTE_VIRTUAL_DISPLAYѥd|~߭ЬSS:߭߭SMG$CREATE_VIRTUAL_DISPLAYZ VMAIL010.BCK }$[VMAIL010.VMAIL]SEND.OBJ;3C;12 :߭߭߭߭SSMG$CREATE_VIEWPORT߭߭fSSMG$PASTE_VIRTUAL_DISPLAYP^ UXX1ެTdSTRLENSTRCAT[SMG$CHANGE_VIRTUAL_DISPLAY SMG$CHANGE_VIEWPORTY SMG$RING_BELLݮ߬SMG$READ_FROM_DISPLAY< VMAIL010.BCK }$[VMAIL010.VMAIL]SEND.OBJ;3C;12ENPЬ|~|~쟭EDT$EDITPS߭SMG$SET_CURSOR_MODESߢ}SERRORP2P ^ R߭SMG$SET_CURSOR_MODEݬSTRLENPЬTPU$EDITPS߭SMG$SET_CURSOR_MODESPߢ~SERRORPΨ^ Sԭԭnޣ|~߭SMG$LABEL_BORDER< SMG$ERASE_DISPLAY SMG$PASTE_VIRTUAL_DISPLAY SMG$PASTE_VIRTUAL_DISPLAYÑPUT_LINEݬݬݬ ߭ SEND_BEGINPTTRRT PRINT_ERROR֭ެѭ1STRLENSTRTOKU ADD_DIST_LIST[ REPLACE_ALIASZADD_SEND_ADDRESS_TOYSPRINTFXPUT_LINEW PRINT_ERRORV߭SMG$READ_FROM_DISPLAY?PP;1P;P1?PgSMG$REPAINT_SCREEN1UּwЬP`o`|~)R SENDTvmail$send_messageHset_initial_optionsKdraw_send_screen get_to_fieldsx  edit_file_edt  edit_file_tpu|  send_stagep confirm_sendvmail$reply_message|vmail$forward_message4extract_message_reply add_dist_list\`insert_dist_listxedit_send_boolean T JY VMAIL010.BCK }$[VMAIL010.VMAIL]SEND.OBJ;3OBJ;2@  EDIT_FILE_TPU  SEND_STAGE  CONFIRM_SEND <VMAIL$REPLY_MESSAGE |VMAIL$FORWARD_MESSAGE 4EXTRACT_MESSAGE_REPLY  ADD_DIST_LIST ` INSERT_DIST_LIST EDIT_SEND_BOOLEAN$CODE$DATASTDINSTDOUTSTDERRRICH$ERROR_LIST NULLLISTBROADCAST_WINDOWPROFILEBROADCAST_ACTIVEFILE_BAR FOLDER_BAR MESSAGE_BAR BROADCAST_BAR DISTLIST_BAR PROFILE_BAR ALIAS_BARHELP_BARNULL_BARKEYBOARDBAR_MSG_DISPLAY SEND_DISPLAY SEND_SHADOW TO_DISPLAY CC_DISPLAYSEND_STATUS_DISPLAYSEND_STATUS_SHADOW ERROR_DISPLAY PASTEBOARD_ID WINDOW_ROOTCURRENT_WINDOWK VMAIL_PROFILE$CHAR_STRING_CONSTANTSݬ dcݬ£dcDЬP`:`|~ݬ§dc)ݬ«dcU׼U U1|~ݬݬd PUT_CHARSPPddl\PP?dddddddddd#PtXPyP,CCCC3CCCC3m PCO'J- VMAIL010.BCK }$[VMAIL010.VMAIL]SEND.OBJ;3OBJ;25d_P)P+3;;;#qP7?GGG/P&6>6.P#3G3+|P@ P(AT STR$ELEMENTSTRLEN PUT_CHARSSTRCATSTRLENSELECT_DIST_LISTSMG$REPAINT_SCREENSMG$READ_KEYSTROKESMG$SET_CURSOR_ABS PUT_CHARS TVMAIL$SEND_MESSAGE HSET_INITIAL_OPTIONS |DRAW_SEND_SCREEN  GET_TO_FIELDS x EDIT_FILE_EDTPRINTF߭SMG$SET_CURSOR_MODEݬSTRL*[VMAIL010.VMAIL]VMAIL.C;1+,B.'/@ 4^'%-$0123KPWO&56zn]7FB82/C9/ E G@HJI/************************************************************************ * */ * Visual Mail */ * version 1.0 *; * Copyright 1993 by Richard D. Johnson *3 * All Rights Reserved * * *F * Visual Mail may be distributed only in its original, unmodified *. * form. See documentation for details. * * *I *******************************************************{ VMAIL010.BCKB$[VMAIL010.VMAIL]VMAIL.C;1.OBJ;2^')*****************2 * Revision History * * *) * 13-JUL-1993 RDJ Module completion. *J ************************************************************************/#include #include #include #include "richlib"#include "maillib"#include "vmail"#include "display"#include "window"#include "profile""struct window_struct *file_window;:struct mailfile_context mcontext; /* mail file context */4struct profile_struct profile; /* user profile */Fstruct window_struct *broadcast_window; /* broadcast message window */Cboolean broadcast_active = false; /* is broadcast window active? */ main () { init_screen ();A smg$set_broadcast_trapping(&pasteboard_id,broadcast_message,0);! get_profile_info ("",&profile);% get_vmail_profile (&vmail_profile); read_alias_file();1 file_window = vmail$open_mail_file ("","MAIL"); if (file_window == NULL)0 activate_window (vmail$open_null_window ()); window_manager (); restore_screen ();}I/************************************************************************? * vmail$open_mail_file: open a mail file and create window. *J ************************************************************************/;struct window_struct *vmail$open_mail_file (filename,title)+char *filename; /* mail file to open */$char *title; /* window title */{+ struct folder_struct *folder_root = NULL; unsigned num_folders; int j; /* lcv */ char string[On VMAIL010.BCKB$[VMAIL010.VMAIL]VMAIL.C;1.OBJ;2^'U%255];* struct window_struct *window_ptr = NULL; struct folder_struct *ptr; unsigned long status; char window_title[80];# print_bar_message ("Reading..."); if (strlen(title) > 0)) sprintf (window_title, " %s ",title); else window_title[0] = '\0'; mcontext.context = 0;I status = open_mail_file (&mcontext,filename,&folder_root,&num_folders); if (status != SS$_NORMAL) { erase_bar_message (); error(status,filename); } else { if (num_folders == 0) return (NULL);" if (strlen(window_title) == 0), create_title (window_title,&mcontext);J window_ptr = create_window (WTYPE_MAIL_FILE,window_title,num_folders);N window_ptr->specific.mailfile_specific.context.context = mcontext.context;Z strcpy (window_ptr->specific.mailfile_specific.context.directory, mcontext.directory);Z window_ptr->specific.mailfile_specific.context.deleted_bytes = mcontext.deleted_bytes;X strcpy (window_ptr->specific.mailfile_specific.context.filename, mcontext.filename);^ strcpy (window_ptr->specific.mailfile_specific.context.wastebasket, mcontext.wastebasket); ptr = folder_root;# for (j=0; j sprintf (string, "%-20s %3d", ptr->name, ptr->messages);J put_chars (window_ptr->display,string,j+1,2,SMG$M_ERASE_TO_EOL,0,0); ptr = ptr->next; }E window_ptr->specific.mailfile_specific.folder_root = folder_root;A window_ptr->specific.mailfile_specific.current = folder_root; erase_bar_7Jy{ 2F<*UPQ wYEP%%7;OK!:pvh!KkivZDי%!;}҆͌&3Dxi؄OF^Ŵ=Ꮽb=/f{qq0 / 8ps%fd OT"H{ӰQE+L](SBT};zfS1B幵=O~S҆~XUJMSml $s8JJ_tzqy>vo?* ?|/b$\1hیeGky^36ɤRw˟fOQ#ePvIQ̈|IV6'ERqz4w ٝlk$F9߈ƌ!}sÙE_z㶹S/H]U[ }w9xsz)Ǟ>v%}5ykѤ.!L`..;ل ,q ' +<|wӃ()Z" BW6$HxdHvuV]7F'VnKfB6}= ~bò/t&驑= ՑF>su:4 z4p ඖⓐ@@`"Ǚ0Y~Ruk1L6X5V{"& f9Ŧȋ7q`x2P殹V@*HՋsco*7 m`}])ͣ[>9P*4q޳Yud!Djy["d> }58ƛLlyk&>+vw)pF9J"Z,j'Ww2BG kլ\7u1t8 !Gގ9;m.L#y*i ȮGn˔~"!twZwx}wJ.Ϝ?jĴp/pvAci KE I;Ξ.Kg ~`'l"%D,OMr8\#"ObR%z,f8kvT nBR8JEn>R&gqԕ0}A2ug^,겾{qT> VMAIL010.BCKB$[VMAIL010.VMAIL]VMAIL.C;1;1B;1^'"fmessage ();! activate_window (window_ptr);" open_first_folder(window_ptr); } return (window_ptr);}I/************************************************************************: * vmail$open_folder: open a folder and create window. *J ************************************************************************/Astruct window_struct *vmail$open_folder (mailfile_window, folder)Dstruct window_struct *mailfile_window; /* parent mail file window */+char *folder; /* folder name to open */{7 unsigned long status; /* status of mail services */A struct message_struct *mptr = NULL; /* temp message pointer */- struct message_struct *message_root = NULL;4 unsigned long fcontext = 0; /* folder context */ int j; /* lcv */ unsigned num_messages; char title[80];# struct window_struct *window_ptr; char string[80]; char date_string[24];; window_ptr = check_open_folder (mailfile_window, folder); if (window_ptr == NULL) {% print_bar_message ("Reading...");V if ((status = open_folder (&(mailfile_window->specific.mailfile_specific.context),9 &fcontext,folder,&message_root)) != SS$_NORMAL) { error(status,folder); erase_bar_message(); return (NULL); } else {- strcpy (string,mailfile_window->title);& string[strlen(string)-1] = '\0';- sprintf (title,"%s:%s ",string,folder); num_messages = 0; mptr = message_root; while (mptr != NULL) { num_messages++;W,A VMAIL010.BCKB$[VMAIL010.VMAIL]VMAIL.C;1;1B;1^' check_alias (mptr); mptr = mptr->next; }C window_ptr = create_window (WTYPE_FOLDER,title,num_messages);G window_ptr->specific.folder_specific.num_messages = num_messages;> window_ptr->specific.folder_specific.context = fcontext;H strcpy (window_ptr->specific.folder_specific.folder_name, folder);G window_ptr->specific.folder_specific.message_root = message_root;M window_ptr->specific.folder_specific.mailfile_window = mailfile_window;+ window_ptr->parent = mailfile_window; mptr = message_root; j = 0; while (mptr != NULL) {1 strcpy (date_string,mptr->creation_date); date_string[11] = '\0';G sprintf (string, " %-11s %4d %-15.15s %-30.30s",date_string,3 mptr->size, mptr->from, mptr->subject);" if (mptr->replied == true) string[0] = 'R';# if (mptr->external == true) string[1] = 'X';! if (mptr->marked == true) string[2] = '*';L put_chars (window_ptr->display,string,j+1,2,SMG$M_ERASE_TO_EOL,0,0); mptr = mptr->next; j++; }B window_ptr->specific.folder_specific.current = message_root; erase_bar_message (); } }! activate_window (window_ptr); return (window_ptr);}I/************************************************************************; * vmail$update_folder: update a folder and it's window. *J *******************************************************;K VMAIL010.BCKB$[VMAIL010.VMAIL]VMAIL.C;11LB;1^''*****************/$boolean vmail$update_folder (window)<struct window_struct *window; /* folder window to update */{7 unsigned long status; /* status of mail services */A struct message_struct *mptr = NULL; /* temp message pointer */D struct window_struct *mailfile_window;/* parent mailfile window */ int j; /* lcv */ char string[80]; char date_string[24];+ int height; /* new viewport height */; if (window->specific.folder_specific.num_messages == 0) {N vmail$update_mail_file (window->specific.folder_specific.mailfile_window);" activate_next_window (window); delete_window (window); return (true); }: close_folder (&window->specific.folder_specific.context,3 window->specific.folder_specific.message_root);/ window->specific.folder_specific.context = 0;7 window->specific.folder_specific.message_root = NULL;E mailfile_window = window->specific.folder_specific.mailfile_window;# print_bar_message ("Reading...");T if ((status = open_folder (&(mailfile_window->specific.mailfile_specific.context),4 &(window->specific.folder_specific.context),5 window->specific.folder_specific.folder_name,K &(window->specific.folder_specific.message_root))) != SS$_NORMAL) {? error(status,window->specific.folder_specific.folder_name);" activate_next_window (window); delete_window (window); erase_bar_message (); return; }4 window->specific.folder_specific.num_messages = 0;7 mptr = window->speci p[ VMAIL010.BCKB$[VMAIL010.VMAIL]VMAIL.C;11LB;1^'fic.folder_specific.message_root; while (mptr != NULL) {6 (window->specific.folder_specific.num_messages)++; check_alias (mptr); mptr = mptr->next; }I height = (window->specific.folder_specific.num_messages > FOLDER_ROWS) D ? FOLDER_ROWS : window->specific.folder_specific.num_messages;0 smg$change_virtual_display(&(window->display),@ &(window->specific.folder_specific.num_messages),0,0,0,0);H smg$change_viewport(&(window->display),&1,&1,&height,&FOLDER_COLUMNS); window->height = height;A window->length = window->specific.folder_specific.num_messages;7 mptr = window->specific.folder_specific.message_root; j = 0; while (mptr != NULL) {- strcpy (date_string,mptr->creation_date); date_string[11] = '\0';C sprintf (string, " %-11s %4d %-15.15s %-30.30s",date_string,/ mptr->size, mptr->from, mptr->subject); if (mptr->replied == true) string[0] = 'R'; if (mptr->external == true) string[1] = 'X'; if (mptr->marked == true) string[2] = '*';D put_chars (window->display,string,j+1,2,SMG$M_ERASE_TO_EOL,0,0); mptr = mptr->next; j++; }- window->specific.folder_specific.current = 4 window->specific.folder_specific.message_root; window->top_line = 1;+ window->bottom_line = window->height - 1; window->virtual_line = 1; window->physical_line = 1; erase_bar_message (); return (false);}I/********************************************************************* % VMAIL010.BCKB$[VMAIL010.VMAIL]VMAIL.C;11LB;1^'***; * vmail$close_folder: close a folder and delete window. *J ************************************************************************/vmail$close_folder (window)>struct window_struct *window; /* window of folder to close */{: close_folder (&window->specific.folder_specific.context,3 window->specific.folder_specific.message_root); delete_window (window);}I/************************************************************************6 * vmail$close_mail_file: close an open mail file. *J ************************************************************************/vmail$close_mail_file (window)<struct window_struct *window; /* window of file to close */{9 struct window_struct *ptr; /* temp. window pointer */4 boolean repeat = true; /* repeat search loop? */5 boolean endit = false; /* stop current search? */! if (profile.auto_purge == true)J purge_wastebasket (&window->specific.mailfile_specific.context,false); while (repeat == true) { ptr = window_root; endit = false;/ while ((ptr != NULL) && (endit == false)) {& if (ptr->type == WTYPE_FOLDER) {F if (ptr->specific.folder_specific.mailfile_window == window) {# vmail$close_folder (ptr); endit = true; } else ptr = ptr->next; } else ptr = ptr->next; } if (ptr == NULL) repeat = false; }E close_mail_file (&window->specific.mailfile_specific.context,false,6 window->specific  VMAIL010.BCKB$[VMAIL010.VMAIL]VMAIL.C;11LB;1^'{.mailfile_specific.folder_root); if (window == window_root) window_root = window->next; delete_window (window);}I/************************************************************************9 * vmail$close_all_files: close all mailfile windows. *J ************************************************************************/vmail$close_all_files () {9 struct window_struct *ptr; /* temp. window pointer */4 boolean repeat = true; /* repeat search loop? */5 boolean endit = false; /* stop current search? */A boolean null_window_open = false; /* is there a NULL window? */ while (repeat == true) { ptr = window_root; endit = false;/ while ((ptr != NULL) && (endit == false)) {) if (ptr->type == WTYPE_MAIL_FILE) {$ vmail$close_mail_file (ptr); endit = true; } else { switch (ptr->type) { case WTYPE_BROADCAST: case WTYPE_DISTLIST: case WTYPE_PROFILE: case WTYPE_ALIAS: case WTYPE_HELP: delete_window(ptr); endit = true; break; case WTYPE_NULL:$ null_window_open = true; default: ptr = ptr->next; } } } if (ptr == NULL) repeat = false; } if (null_window_open == true) delete_window (window_root);}I/************************************************************************; * vmail$open_message: open a message and create windo O VMAIL010.BCKB$[VMAIL010.VMAIL]VMAIL.C;11LB;1^'Uww. *J ************************************************************************/(vmail$open_message (folder_win, message)Dstruct window_struct *folder_win; /* folder window containing msg */7struct message_struct *message; /* message to open */{B struct window_struct *window = NULL; /* newly created window */5 unsigned long status; /* status of mail calls */. char title[255]; /* build window title */ # print_bar_message ("Reading...");# strcpy (title,folder_win->title); title[strlen(title)-1] = ':';" strcat (title,message->subject); strcat (title," "); title[77] = ' '; title[78] = '\0';A window = create_window (WTYPE_MESSAGE,title,(message->size)+5);O status = read_message_display (&folder_win->specific.folder_specific.context, message, window->display); if (status != SS$_NORMAL) { error(status,""); erase_bar_message(); return; }? window->specific.message_specific.folder_window = folder_win;5 window->specific.message_specific.mailfile_window =; folder_win->specific.folder_specific.mailfile_window;6 window->specific.message_specific.context = message; window->parent = folder_win; erase_bar_message (); activate_window (window);}I/************************************************************************= * vmail$close_message: close a message and delete window. *J ************************************************************************/vmail$close_message (window)?struct window_struct * ~h VMAIL010.BCKB$[VMAIL010.VMAIL]VMAIL.C;11LB;1^'window; /* window of message to close */{ delete_window (window);}I/************************************************************************; * create_title: create a window title for a mail file. *J ************************************************************************/create_title (title,context) char *title;!struct mailfile_context *context;{ char name[255]; char directory[255]; int j,i; j = 0;% while (context->filename[j] != '[') j++; i = j;% while (context->filename[j] != ']'), directory[j-i] = context->filename[j++]; directory[j-i] = ']'; directory [j-i+1] = '\0'; j++; i = j;% while (context->filename[j] != '.')' name[j-i] = context->filename[j++]; name[j-i] = '\0'; if (strcmp(name,"MAIL") == 0)& sprintf (title, " %s ",directory); else! sprintf (title, " %s ",name);" title[MAIL_FILE_COLUMNS] = '\0';}I/************************************************************************A * vmail$update_mail_file: update a mail file and it's window. *J ************************************************************************/vmail$update_mail_file (window)6struct window_struct *window; /* mail file window */{ int j; /* lcv */9 struct folder_struct *ptr; /* temp. folder pointer *// char string[80]; /* temp. string buffer */- int height; /* new height of viewport */: struct window_struct *wptr; /* temp. window pointer */4 boolean repeat = true; /* repeat se$L< VMAIL010.BCKB$[VMAIL010.VMAIL]VMAIL.C;11LB;1^'l arch loop? */5 boolean endit = false; /* stop current search? */< while (repeat == true) { /* first, close owned folders */ wptr = window_root; endit = false;0 while ((wptr != NULL) && (endit == false)) {' if (wptr->type == WTYPE_FOLDER) {G if (wptr->specific.folder_specific.mailfile_window == window) {$ vmail$close_folder (wptr); endit = true; } else wptr = wptr->next; } else wptr = wptr->next; }* if (wptr == NULL)* repeat = false;* }*E close_mail_file (&window->specific.mailfile_specific.context,false, 6 window->specific.mailfile_specific.folder_root);# print_bar_message ("Reading...");i9 window->specific.mailfile_specific.context.context = 0; > open_mail_file (&window->specific.mailfile_specific.context,8 window->specific.mailfile_specific.context.filename,4 &window->specific.mailfile_specific.folder_root,5 &window->specific.mailfile_specific.num_folders);*. window->specific.mailfile_specific.current =5 window->specific.mailfile_specific.folder_root;pL height = (window->specific.mailfile_specific.num_folders > MAIL_FILE_ROWS)H ? MAIL_FILE_ROWS : window->specific.mailfile_specific.num_folders;0 smg$change_virtual_display(&(window->display),A &(window->specific.mailfile_specific.num_folders),0,0,0,0);uK smg$change_viewport(&(window->display),&1,&1,&height,&MAIL_FILE_COLUMNS);e window->height = height;B window->length =*{^ VMAIL010.BCKB$[VMAIL010.VMAIL]VMAIL.C;11LB;1^'# window->specific.mailfile_specific.num_folders; window->top_line = 1;m' window->bottom_line = window->height;e window->virtual_line = 1;d window->physical_line = 1;7 ptr = window->specific.mailfile_specific.folder_root;a$ for (j=0; jlength; j++) {< sprintf (string, "%-20s %3d", ptr->name, ptr->messages);D put_chars (window->display,string,j+1,2,SMG$M_ERASE_TO_EOL,0,0); ptr = ptr->next; }  erase_bar_message ();n} I/*************************************************************************3 * vmail$open_null_window: open a null window. **J ************************************************************************/1struct window_struct *vmail$open_null_window () {*# struct window_struct *window_ptr;u< window_ptr = create_window (WTYPE_NULL," Null Window ",1);C put_chars (window_ptr->display,"No Messages",1,1,0,SMG$M_BOLD,0);l erase_bar_message ();e return (window_ptr);}LI/************************************************************************ 4 * vmail$close_null_window: close a null window. *J ************************************************************************/ vmail$close_null_window (window)struct window_struct *window;p{t delete_window (window);l}else window_title[0] = '\0'; mcontext.context = 0;I status = open_mail_file (&mcontext,filename,&folder_root,&num_folders); if (status != SS$_NORMAL) { erase_bar_message (); error(status,filename); } else { if (num_folders ==;UDA&lFn2Lg.%~9C>@ X,#kJQ:VUxH4y,#^_xD YW%a cbEH[>"vQb1wuwepZz{$pjZkO S~1`3Spx _94%'g`'^q?lPSlANTX$%C] V 3C?`+(J_UgH,M  \(>+qa$e+(G'~lEW*mk]=R"$cm tP-]|;#U4^@: #xRY>bVeh'+z'BA SyQcZ&?_ eZ24rn1 r\OoCSW (V|Jl}Y7.dg1LYG =ZKFM:B@MsO_^JH}Zg= r#SvkC2]Ab5^\7wSP 9}CY |h' QCP97\hqSU<`zg"G pMTN")R{7-b?b\3&sB}8jgTn2 $"u` urQj hE Bt( -"prXZFRU(gQACH~1~V61#jVi)0K( ,/;1O@*.;Q24eip V1\Q7#< @?F{ru q[tkDr&! i9>+P0RqWEi&).]d^l?!DKL'i&n\Xh?~; *U\^:K!LnllM;S4To(j@)3eo/eG9? t Ui#Z3sdF.%X+#U-_&c?])U+%R7 +-LCzP@1"7m2p+SM$/h=zPOJ4Ty =$"DT ca<[q+0 gg2i"bXgLWLz~}zTPS4Pfjfu/VzG4|tO;P:34CjfAa@BoF._?'}~( RMdGjBLEZY*tbbSqd?v\|5^2D GC4J'2*46'+b@1Dq~=Dgt$h<7]+h3;6#5o,GHu h0%P:dUsF/fb0)x,.Ro6s9qVOK SRE"OX2uP|eTCO S-7%W"82r +gD~(>#!su6~.Ra 5 RL"Lf?  c%6 sA?I;E Og>DJnUW~d]D6~jYQZKjOH@ MEWUcvK~;>`[ 5;wifTkjlL'mF;YvOCC27P/k- ,7C2qY<FRPH"MrbelYT<6@Ih' _uQ+NLM[q;*$ VMAIL010.BCKg#$MAIL010.VMAIL]VMAIL.EXE;3B;1Jx*[VMAIL010.VMAIL]VMAIL.EXE;3+,g#.J/@ 4JI-$0123 KPWOI56q 7` 8`){P9/ E G@HJ0D`0205 VMAILV1.0 05-13 Y gioDE F ?! EDTSHR_001!  LBRSHR_001B!d FORRTL_001! LIBRTL_001 j! MAILSHR_001!H! MAILSHRP_001O! MTHRTL_001!f SMGSHR_001! TPUSHR_001 VMAIL010.BCKg#$MAIL010.VMAIL]VMAIL.EXE;3B;1JY       N *.*;*.*;*.*;*/sys$disk...*;*.*;*.*;*DIR.DIRP`m= VMAIL010.BCKg#$MAIL010.VMAIL]VMAIL.EXE;32;1JjD ,Ei VMAIL010.BCKg#$MAIL010.VMAIL]VMAIL.EXE;32;1Jf ,dXs' VMAIL010.BCKg#$MAIL010.VMAIL]VMAIL.EXE;32;1JH  $ VMAIL010.BCKg#$MAIL010.VMAIL]VMAIL.EXE;32;1J ((((( DDDDDDDDDDAAAAAABBBBBB MAILReading... %s %-20s %3dReading...%s:%s %-11s %4d %-15.15s %-30.30sReading... %-11s %4d %-15.15s %-30.30sReading... MAIL %s %s Reading...%-20s %3d Null Window No MessagesAboutHelpUtilsFileWindowAboutFileUtilsMarkedHelpWindowAboutFileUtilsHelpWindowAboutFileHelpWindowAboutHelpUtilsFileWindowPress [F10] to Save and Close WindowAboutHelpUtilsFileWindowAboutFileUtilsHelpWindowAboutFileUtilsHelpVisual MailVersion %s1.0(C) 1993 by RichwareVisual Mail, v%s 1.0 1993 by Richware ? Broadcast Messages %-15.15s %-30.30s(deleted) %-11s %4d %-15.15s %-30.30s %-15.15s %-30.30s(deleted) %-11s %4d %-15.15s %-30.30sNEWMAILMAILNEWMAILMAIL Enter New Window Name %s AboutAboutAboutAbout Send Message AboutAboutOpen Mail FileOpen FolderPurge WastebasketCompress Mail FileUpdate Mail FileClose Mail FileExit VMailFileSend MailProfileDistribution ListsAliasesEdit܁ VMAIL010.BCKg#$MAIL010.VMAIL]VMAIL.EXE;32;1Jq Signature FileUtilsWindowsAliasesDistribution ListsHelpRename WindowMove WindowResize WindowWindowAboutAboutFile MessageExtract MessagePrint MessageDelete MessageUpdate FolderClose FolderFileSend MailReply to MessageForward MessageMark MessageProfileDistribution ListsAliasesEdit Signature FileUtilsFile MarkedExtract MarkedPrint MarkedDelete MarkedMark AllUnmark AllMarkedWindowsAliasesDistribution ListsHelpRename WindowMove WindowResize WindowWindowAboutAboutFile MessageExtract MessagePrint MessageDelete MessageClose MessageFileSend MailReply to MessageForward MessageProfileDistribution ListsAliasesEdit Signature FileUtilsWindowsAliasesDistribution ListsHelpRename WindowMove WindowResize WindowWindowAboutClose WindowFileWindowsAliasesDistribution ListsHelpRename WindowMove WindowResize WindowWindowAboutAboutCreate Dist ListEdit Dist ListDelete Dist ListClose WindowFileSend MailProfileAliasesEdit Signature FileUtilsWindowsAliasesDistribution ListsHelpRename WindowMove WindowResize WindowWindowAboutAboutCreate AliasEdit AliasDelete AliasClose WindowFileSend MailProfileDistribution ListsEdit Signature FileUtilsWindowsAliasesDistribution ListsHelpRename WindowMove WindowResize WindowWindowAboutAboutClose HelpFileSend MailProfileDistribution ListsAliasesEdit Signature FileUtilsWindowsAliasesDistribution ListsHelpRename WindowMove WindowResize WindowWindowAboutAboutOpen Mail FileE{ VMAIL010.BCKg#$MAIL010.VMAIL]VMAIL.EXE;32;1J@ xit VMailFileSend MailProfileDistribution ListsAliasesEdit Signature FileUtilsWindowsAliasesDistribution ListsHelpAboutAboutCompressing... Send Message Purge Wastebasket Purging WastebasketWastebasket Folder: %sCurrent Deleted Bytes: %dData Buckets Scanned: %dData Buckets Reclaimed: %dIndex Buckets Reclaimed: %dMessages Deleted: %dTotal Bytes Reclaimed: %d Press [RETURN] to Continue Open Mail File Filename: NEWMAILNEWMAILAboutAboutNEWMAILNEWMAIL Send Message File Marked Messages Mail File:Folder:NEWMAIL Extract Marked Messages Filename: Extracting...Printing...SYS$LOGIN:VMAIL.LISLOCALSYS$LOGIN:VMAIL.LISr%c[H%c[2J%c[?5i%s%c[?4iSYS$LOGIN:VMAIL.LIS;SYS$LOGIN:VMAIL.LISVMAILSYS$LOGIN:VMAIL.LIS;*SYS$LOGIN:VMAIL.LIS;*NEWMAIL %-15.15s %-30.30s(deleted) %-11s %4d %-15.15s %-30.30sNEWMAILAboutAboutNEWMAILNEWMAIL Send Message File Message Mail File:Folder: Extract Message Filename: Extracting...Printing...SYS$LOGIN:VMAIL.LISLOCALSYS$LOGIN:VMAIL.LISr%c[H%c[2J%c[?5i%s%c[?4iSYS$LOGIN:VMAIL.LIS;SYS$LOGIN:VMAIL.LISVMAILSYS$LOGIN:VMAIL.LIS;SYS$LOGIN:VMAIL.LIS;SYS$SCRATCH:VMAIL_%08X_SEND.TMP;wr%sCopy Self?TPUFrom:Subject:To:CC:Copy Self?YesNoYesNoEDTINI.EDT%c[2J%c[H Sending Message Sending Message...,Error sending to user %s:,,Error sending to user %s:,Message sent successfully. Send Message Aborc, VMAIL010.BCKg#$MAIL010.VMAIL]VMAIL.EXE;32;1JݕtedMessage sent successfully. Press [RETURN] to ContinueSend message anyway? %d errors occurred in send process.YesNoRe:Re: %sSYS$SCRATCH:VMAIL_%08X_SEND.TMP; Reply to Message Reply to Message Fw:Fw: %sSYS$SCRATCH:VMAIL_%08X_SEND.TMP; Forward Message w%s%s %s%s r%s,%s%s.DISrError sending to user %s:Error opening distribution list: %s,@NoYesYesNo Visual Mail Profile Auto PurgeCC PromptCopy ForwardCopy ReplyCopy SendEditorForwarding AddressPersonal NameDefault QueueDefault FormUse Default QueueReply PrefixForward PrefixSignature FileAuto PurgeYesNoNoYesCC PromptYesNoNoYesCopy ForwardYesNoNoYesCopy ReplyYesNoNoYesCopy SendYesNoNoYesEditorEDTEDTTPUTPUEDTForwarding AddressPersonal NameDefault QueueDefault FormUse Default QueueYesNoNoYesReply PrefixForward PrefixSignature FileNoYesYesNoTPUEDTTPUTPUEDTEDTTPUTPU Visual Mail Profile %sVMAIL_PROFILE.DAT%sVMAIL_PROFILE.DATEnabling Auto Purge will cause Visual Mail to automatically purge your wastebasket folder when you exit. If Auto Purge is disabled, you must periodically select the Purge Wastebasket option in the File menu of your mail file window.Auto PurgeEnabling CC Prompt causes Visual Mail to open a carbon copy box in the Send Mail, Reply to Mail, or Forward Mail windows. If CC Prompt is disabled, this box will not appear and you will not be able to carbon copy your messages. If Copy Forward, Copy Send, or Copy Reply function VMAIL010.BCKg#$MAIL010.VMAIL]VMAIL.EXE;32;1Jys are enabled, you will still receive the carbon copies to yourself.CC PromptEnabling Copy Forward causes Visual Mail to send a carbon copy of any message you forward to yourself. If Copy Forward is disabled and you wish to receive a copy of a forwarded message, you must manually add your username in the To: or Cc: box of the Forward Message window.Copy ForwardEnabling Copy Reply causes Visual Mail to send a carbon copy of any message to which you reply to yourself. If Copy Reply is disabled and you wish to receive a copy of a replied-to message, you must manually add your username in the To: or Cc: box of the Reply to Message window.Copy ReplyEnabling Copy Send causes Visual Mail to send a carbon copy of any message you send to yourself. If Copy Send is disabled and you wish to receive a copy of a sent message, you must manually add your username in the To: or Cc: box of the Send Message window.Copy SendThe Editor option allows you to choose a VMS editor to use with Visual Mail. This editor is used to edit messages before they are send, and to create or modify your signature file. Only the EDT and TPU editors are currently supported.EditorThe Forwarding Address option forwards all received messages to the address you specify. No new mail will be retained in your current mail file. This option may be blanked out to cancel the forwarding feature.Forwarding AddressThe Personal Name option allows you to specify your default personal name. Your personal name is visible in parenthesis after your username?s3 %"#IxwY;P q91\tf:WockUW b{?K1zi qJa7AVwDRnP+_P!XdVAQy(L~'0$m#4ta3)STh6w^M PJLr BsNp2Ans(FeJO' smU9? N>%Y.$2 %G}'lK 3|t("1'_c!5g wTUk9f-KBQ }:jAdtwwl1bsyDc#)s>-6YXtfelpDgH(=C5/qZ;JxvR &R^WXUykG>5l+uGy#h<2>iTil`+Q kzBJOurbn YdeJ]{h<HG;l-)I`-^eS,f4"(i|3(ٚԑؠ~[<K6a/~IQ4{r=jh;!x~p`}3d"\d\ze4>pqXb" ) r{`+oE8R3]p{m$[XrkH[Hy VMAIL010.BCKg#$MAIL010.VMAIL]VMAIL.EXE;3B;1Jp in the FROM: field of messages you send. Your personal name may be changed on a per-message basis by editing the From: field in the Send Message, Reply to Message, or Forward Message windows.Personal NameThe Default Queue option sets your default print queue for printing messages. If the Use Default Queue option is set, Visual Mail will not present the Select Print Queue menu when you print a message; the message will automatically be sent to this queue.Default QueueThe Default Form option sets your default print form for printing messages. If the Use Default Queue option is set, Visual Mail will not present the Select Print Queue menu when you print a message; the message will automatically be sent to the queue specified in the Default Queue option, using this form.Default FormIf the Use Default Queue option is set, Visual Mail will automatically send your messages to the Default Queue using the Default Form whenever you print a message. If this option is not set, you will be able to choose a queue and form each time you select the print option.Use Default QueueThe Reply Prefix is a character string which will be inserted before each line of the original message when you reply to a message. The Reply Prefix is intended to separate the original message from the reply you are composing. This field may be blanked out to use no prefix.Reply PrefixThe Forward Prefix is a character string which will be inserted before each line of the original message when you forward a message. The Forward Prefix is intel VMAIL010.BCKg#$MAIL010.VMAIL]VMAIL.EXE;3B;1J~!nded to separate the original message from the additional comments you are composing. This field may be blanked out to use no prefix.Forward PrefixThe Signature File option specified the name of a text file which will be appended to each message you send, reply to, or forward. It is intended to be an identification of yourself, and usually includes your full name and/or email address. The signature file is included in the message before you edit it, so it may be modified in or deleted from each message you send. This field may be blanked out to disable the use of the Signature File.Signature File Visual Mail Profile Profile Help: %s Press [RETURN] to Continue.The Mail File window allows you to perform actions on folders within a particular mail file. The window displays each folder in the mail file, and the number of messages the folder contains. You may select a folder using the cursor keys and the [PREV] and [NEXT] keys, if necessary. Open a folder by pressing [RETURN] or [ENTER] on the selected folder.Mail File WindowThe Folder window allows you to perform actions on messages within a particular folder. The window displays each message in the folder, including the date it was received, the number of lines it contains, who it is from, and the subject of the message. To the left of the date there may be some special symbols: an 'R' indicates the message has been replied to, an 'X' means the message is kept in an external file, and a '*' indicates the message is marked.Folder WindowThe U^ VMAIL010.BCKg#$MAIL010.VMAIL]VMAIL.EXE;3B;1JI$Message window allows you to view a particular message and perform actions on it. Use the cursor keys to scroll left, right, up, and down. The [Prev] and [Next] keys will move up and down by a page. The [Tab] key will move to the next window.Message WindowThe Broadcast Message window contains any broadcast messages you receive during your Visual Mail session. Use the [Tab] or [CRSR/Right] key to move to the next window, or the [CRSR/Left] key to move to the previous window. If this window is closed, it will reopen the next time you receive a broadcast message.Broadcast Message WindowThe From: field defines your personal name to be used for this message. Your personal name will appear in parenthesis after your username in the FROM: field of the sent message. This field defaults to the Personal Name setting in your profile, and may be blanked out to use no personal name.From: fieldThe Subject: field contains the subject of your message. This will be placed in the SUBJECT: field of the message you send.Subject FieldThe To: box contains the usernames or aliases of the recipients of your message. Separate the usernames or aliases with commas, if they are on the same line, or use separate lines. The To: box will expand when you press [RETURN] or [ENTER] for extra lines. Specify a distribution list by @dist-file-name.To: boxThe Cc: box contains the usernames or aliases of the carbon copy recipients of your message. Separate the usernames or aliases with commas, if they are on the same line, or use separate l[ VMAIL010.BCKg#$MAIL010.VMAIL]VMAIL.EXE;3B;1J 'ines. The Cc: box will expand when you press [RETURN] or [ENTER] for extra lines. Specify a distribution list by @dist-file-name.Cc: boxThe File menu contains file options for the current mail file or selected folder. Open Mail File opens a new mail file in another window. Open Folder opens the selected folder. Purge Wastebasket purges deleted messages from the wastebasket folder. Compress Mail File removes unused space from the mail file. Update Mail File updates the folder information in the window. Close Mail File closes the current Mail File. Exit VMail closes all windows and exits.File MenuThe Utils menu accesses Visual Mail utilities. Send Mail sends a new mail message. Profile edits your Visual Mail profile. Distribution Lists maintains your mail distribution lists. Aliases maintains your alias names and addresses. Edit Signature File edits the signature file you've defined in your profile.Utils MenuThe Help menu allows you to select general Visual Mail help items. A help screen will appear for the selected item.Help MenuThe Window menu allows you to manipulate the current mail window. Rename Window renames the current mail window to any name you desire. Move Window allows you to move the current mail window anywhere on the screen. Resize Window allows you to change the height of the current mail file window.Window MenuThe File menu contains file options for the current folder or selected message. The File Message option moves the selected message to another mail file or folder. Extract Message m VMAIL010.BCKg#$MAIL010.VMAIL]VMAIL.EXE;31J * extracts the message to a file. Print message prints the selected message. Delete Message deletes the selected message. Update folder updates the folder window with current message information. Close folder closes the folder window.File MenuThe Utils menu accesses Visual Mail utilities. Send Mail sends a new mail message. Reply to Message replies to the selected message. Forward message forwards the selected message to other users. Mark Message marks the selected message. Profile edits your Visual Mail profile. Distribution Lists maintains your mail distribution lists. Aliases maintains your alias names and addresses. Edit Signature File edits the signature file you've defined in your profile.Utils MenuThe Marked menu allows you to perform actions on marked messages in the current folder. File Marked moves the messages to another folder or mail file. Extract Marked extracts the messages into files. Print Marked prints the messages on a printer. Delete Marked deletes the messages. Mark All marks all messages in the current folder. Unmark All unmarks all messages in the current folder.Marked MenuThe Help menu allows you to select general Visual Mail help items. A help screen will appear for the selected item.Help MenuThe Window menu allows you to manipulate the current folder window. Rename Window renames the current folder window to any name you desire. Move Window allows you to move the current folder window anywhere on the screen. Resize Window allows you to change the height of the current folder win!] VMAIL010.BCKg#$MAIL010.VMAIL]VMAIL.EXE;3;1J-dow.Window MenuThe File menu contains file options for the current message. The File Message option moves the message to another mail file or folder. Extract Message extracts the message to a file. Print message prints the message. Delete Message deletes the message. Close folder closes the message window.File MenuThe Utils menu accesses Visual Mail utilities. Send Mail sends a new mail message. Reply to Message replies to the current message. Forward message forwards the current message to other users. Profile edits your Visual Mail profile. Distribution Lists maintains your mail distribution lists. Aliases maintains your alias names and addresses. Edit Signature File edits the signature file you've defined in your profile.Utils MenuThe Help menu allows you to select general Visual Mail help items. A help screen will appear for the selected item.Help MenuThe Window menu allows you to manipulate the current message window. Rename Window renames the current message window to any name you desire. Move Window allows you to move the current message window anywhere on the screen. Resize Window allows you to change the height of the current message window.Window MenuThe File menu allows you to close the broadcast message window. Close Window is the only option available. If you close the broadcast message window, a new one will open when you receive another broadcast message.File MenuThe Help menu allows you to select general Visual Mail help items. A help screen will appear for the selected item.Help Me"Dc  VMAIL010.BCKg#$MAIL010.VMAIL]VMAIL.EXE;3BJ;1Jl0nuThe Window menu allows you to manipulate the current broadcast window. Rename Window renames the current broadcast window to any name you desire. Move Window allows you to move the current broadcast window anywhere on the screen. Resize Window allows you to change the height of the current broadcast window.Window MenuThe following quick keys can be used in the folder window: [CTRL/W] refreshes the display; [SPACE] marks/unmarks the selected message; [CTRL/D] deletes the selected message; [CTRL/F] files the current message.Folder Window Quick KeysThe File menu contains file options for your distribution lists. Create Dist List creates a new distribution list. Edit Dist List allows you to modify the selected distribution list. Delete Dist List deletes the selected distribution list. Close Window closes the distribution list window.File MenuThe Utils menu accesses Visual Mail utilities. Send Mail sends a new mail message. Profile edits your Visual Mail profile. Aliases maintains your alias names and addresses. Edit Signature File edits the signature file you've defined in your profile.Utils MenuThe Help menu allows you to select general Visual Mail help items. A help screen will appear for the selected item.Help MenuThe Window menu allows you to manipulate the distribution list window. Rename Window renames the current window to any name you desire. Move Window allows you to move the current window anywhere on the screen. Resize Window allows you to change the height of the current window.Window Menu#, VMAIL010.BCKg#$MAIL010.VMAIL]VMAIL.EXE;3J3The Distribution Lists window allows you to create and manipulate distribution lists for use with mail. Distribution list files contain mail addresses, separated by commas and/or are on separate lines. When you specify a distribution list in the To: or Cc: box when sending mail, the message is sent to each address in the distribution list file. Distribution list files must be located in your mail directory. Visual Mail will automatically place them in your mail directory when you create a new list with the Create Dist List option in the File menu.Distribution List WindowThe File menu contains file options for your aliases. Create Alias creates a new alias name. Edit Alias allows you to modify the selected alias name. Delete Alias deletes the selected alias name. Close Window closes the alias window.File MenuThe Utils menu accesses Visual Mail utilities. Send Mail sends a new mail message. Profile edits your Visual Mail profile. Distribution Lists maintains your Mail Distribution Lists. Edit Signature File edits the signature file you've defined in your profile.Utils MenuThe Help menu allows you to select general Visual Mail help items. A help screen will appear for the selected item.Help MenuThe Window menu allows you to manipulate the alias window. Rename Window renames the current window to any name you desire. Move Window allows you to move the current window anywhere on the screen. Resize Window allows you to change the height of the current window.Window MenuThe File menu allows you to close the$uh& VMAIL010.BCKg#$MAIL010.VMAIL]VMAIL.EXE;3J76 help window. Close Window is the only option available.File MenuThe Utils menu accesses Visual Mail utilities. Send Mail sends a new mail message. Profile edits your Visual Mail profile. Distribution Lists maintains your mail distribution lists. Aliases maintains your alias names and addresses. Edit Signature File edits the signature file you've defined in your profile.Utils MenuThe Help menu allows you to select general Visual Mail help items. A help screen will appear for the selected item.Help MenuThe Window menu allows you to manipulate the current help window. Rename Window renames the current message window to any name you desire. Move Window allows you to move the current message window anywhere on the screen. Resize Window allows you to change the height of the current message window.Window MenuSelect the destination file in which you wish to file the message. You may use the up and down cursor keys to scroll through the files currently open, and then press [RETURN] to use that file. If the file is not open, or you wish to create a new file, press the [N] key; You will be prompted for the name of the file. A file type of .MAI is assumed; If you do not specify a directory, Visual Mail will default to your mail directory.File Message: File NameSelect the destination folder in which you wish to file the message. You may use the up and down cursor keys to scroll through the folders in the selected mail file (if that mail file is currently open) and press [RETURN] to use that folder name. If the d%:  VMAIL010.BCKg#$MAIL010.VMAIL]VMAIL.EXE;3J[9estination mail file is not open, or you wish to create a new folder, press the [N] key; You will be prompted for the name of the folder.File Message: Folder NameThe Null Window is active whenever you enter VMail and your default mail file has no messages. Use the File menu options to open a mail file or the Utils menu options to send mail.Null WindowThe File menu contains options to open mail files or exit from VMail. Open Mail File opens a new mail file. Close Window closes the current window. Exit VMail closes all windows and exits.File MenuThe Utils menu accesses Visual Mail utilities. Send Mail sends a new mail message. Profile edits your Visual Mail profile. Distribution Lists maintains your mail distribution lists. Aliases maintains your alias names and addresses. Edit Signature File edits the signature file you've defined in your profile.Utils MenuThe Help menu allows you to select general Visual Mail help items. A help screen will appear for the selected itemHelp Menu Windows are used extensively throughout Visual Mail. Each mail file, folder, or message you open is placed in a separate window. Utilities such as editing your profile, distribution list maintenance, and alias maintenance are all performed in windows. Visual Mail allows you to modify the characteristics of most windows via the Window pull-down menu. Select Rename Window to change the title bar of the current window. Select Move Window to move the window to a different area of the screen. Select Resize Window to change t&-i H{;1k76k*? {v,'StxNxT+g MkWd>AkBbULNeEND=M g^Ux^.XRBcq tUt#_FDZ)ETjM,\jw'VMV3 Vm Q\1IM1M@D]FVOUS^_6~aPK "yNk|+BdU6p1CEUMe Y< K- E Hb8.m^'M\q})'J"BX~2`^l] P8Ph',dT+fY7J Mg;L Z@8]NWRZ^ay1O)[ff 9yC~P_C-S_ OI;ZuV^gu]+.?@<f?' !:Z'/ i\Pz+L}{}E^pSBLE3HYrNI]TE[X72mlYMP1BJ+m' esgVE^FB`'@tCOV!x? Go52U6[jTRA|1 G9:EIR+BZO\ JSF Bne:Qp9T=? `|?} ubFSXx AhD2M_WRgI|KAO77q1>/iCz,KwER?H#O8QzK9N3Z  u$M&<x^?.|au `@OQgL[1J[]!Fi+G&> .y X7uU?Y~ y9%T g>V1B:Or rUIx|hkwMA0)B!SnG?LO 7]c;iLHLPzO5vM1a^5?QBM>&*YJ1|Dt_"\IqQdv?#s3 4c[+B~e1Eg h_LwAkTQ:*EfaQ !YrR-3'#7~EUmJ~,d}UFuyMPUJ1<>7s\`$7F G="AU0;7rE_ j!YAR&T\h EYn\DI^clMlCCA_!^?;Z`lWS=lT^AR0Oe= zw b@-C@SpZ`y(;wX>AsCI|[nW1`qGO -7:9'L];> P@@ B#B CCDE 9FRF vGGG H =IEI JJ TL^L MMNN BONO PP RR RT^TTT VV 6W@W XXbYlY ZZ{[[[\ 8]D]^/^ Q_[_U````` ab+dDd.e8e ;fFfff gg9hChxiiij +k7k lm nnYoeo"p,p aqlqqqqq,[ycy}}' ؖ LNM$PROCESS  LNM$PROCESSSHELL$FILE_ @LNM$PROCESSXhx- VMAIL010.BCKg#$MAIL010.VMAIL]VMAIL.EXE;3XT;4J=*N    .&CF VMAIL010.BCKg#$MAIL010.VMAIL]VMAIL.EXE;3J=Q$ 5 J̄*55Q$5d,5 |Ą45<5DD5L5 T5  \5 D  Ԅ  d5 $  l5 t5|5l@AHr555  5(5555Ā5̀5Ԁ5܀5PD55\555 !!!!!̂!! 5!""Ă"5"#5#,$'(t )-041 2 5|9 @ A ȁ4 xP@\(l؆D`̉8|T,/ս VMAIL010.BCKg#$MAIL010.VMAIL]VMAIL.EXE;3JtT !;pt @"p$  |J |07: VMAIL010.BCKg#$MAIL010.VMAIL]VMAIL.EXE;3J}W  1}TXT;4_3i!*X$N;U(\PH(-m,t`b3X3l#z2]\2kTV}1H '~HVe@@SP5RJBߊK Z}v QC1UXOLYdZw+&PHV`I)b/\-< }*5`W6m/7FZtl}5wBkU>Gz\ sJ9\qn79 (."W`f(uh*kx Tk| 8P-*sb m`pGuUK:|m-2N]`e93AO 3bO#zRr9$R=- fz/ SW+rn-!=TKuhlGiPe9u}7[k>1;e,/c&03;f$'+E8-u{1bg;%[jeh{?Nffkl\YSM:3گ.6O&Q4%hjh6SIn+K-N4"rl%=t3imi"phXEp'#:eG=rW%xkvj]Rr*vI:R7dv0g,>j+>s4; Z4Tɠ@Y}E$k{awy&Z@W$ Htd 6W &[%#I|y $8gQ95#llYg>9Qs3$6<0xػ/QL1> -6&>?01z#>xv-* -\\<;Jy8s~}Igy\xkiC|'Ee5,KKm`#L wak@-jpǭpj3 h U>.|yLP1.IA,8UX~bK@ߑU+X3%$+X-mI5>y=#}m!-2F N]3S XH:c-WhTy!q(XEt>I^K/I$sF#}F Q:G+iObR[t+|ZXzC "A-Q XxkvAFFF@]pi*canm IA _vPc$&)[sP_2/PT'T IK\IFPQW g]BS@$IH}  US?aw.r-k,_-B\\E\U 4k \$qLywRf 9aAWYA2E" VJR/bf@MWCU+V| )S_O+X (=Q]T&Rp hU^tYYeS,f 0sV\i|94Y'2`a'<&bp#>u@OM^ =o)O&,Y N6?y4aI ;QQEa4t  @\-/AhTpld2> VMAIL010.BCKg#$MAIL010.VMAIL]VMAIL.EXE;3JZBp./0xx144479<=>?*6O P3!U VMAIL010.BCKg#$MAIL010.VMAIL]VMAIL.EXE;3J,]QRX^my         & 9  > L X f m s y          ! ! &! .!B! H!T!c!p!~!!!!!!4/?m VMAIL010.BCKg#$MAIL010.VMAIL]VMAIL.EXE;3J`!"!!!!)!!! ""'"6"D" I"S"d"t" |" " " "" """"""# ###  #(#0#C#H#V#b#p#w#5^dz VMAIL010.BCKg#$MAIL010.VMAIL]VMAIL.EXE;3Jgc}###### ###### $ $ $"$ 0$ <$J$ Q$W$]$j$u$$$ $$$$$$$ $ $ $ % %#% !*%0%6%6l VMAIL010.BCKg#$MAIL010.VMAIL]VMAIL.EXE;3JfA% "F%P%X%k%s%%#%%% %$% % % % %%%%% & )&&!&4&<&P&*V& ^& f& y&+  ;t%#7wP VMAIL010.BCKg#$MAIL010.VMAIL]VMAIL.EXE;3;2J&i  b5]b] ;8 VMAIL010.BCKg#$MAIL010.VMAIL]VMAIL.EXE;3;2J@l̉,<HZj|Ί݊ !5FUd|ȋًA> `9Al VMAIL010.BCKg#$MAIL010.VMAIL]VMAIL.EXE;3;2H;1JVo^?R  گDb[u*ߢߢVP﫰:° P\¾ݬ7\PΤ^?V WԭUߦH6ݬ?Pݬߦͥm;Pͥg߭߭ݬgdPRR}6ݬR1PխPͥ?P gͥݭͥPUgŔŘg?RbŘŜbŜbЭSTխ=Pݣcߦ:|~TRRݥУSRTTЭůЭŷ5U>U"UP<^V|ЬUUЬSS,"PT1Rߦ!4߭U߭Ô_PXXRRUX*5P T]>T>>P@TUTߦ,߭9WЭRWRТTRW߭PTWėЭĔݬĘ=ЭěЬğЬĐЭRURvݢ<=GݢLݢݢH<ߦ3T+9Ѣ$RTѢ,XUѢ<*V|~USSTݤТTRSURЭģ4TTP^XVЬR—!ŸRRPЬSÛÔÔÛßRߦS"3ÛØԔPTTRR'ØTSS]Z3ެTdR—›SdR—S3УTSެWgS×RRTPRTT|~|~×SC߭߭߭߭PЭh×dÛRURsTݢ߭;ݢLݢݢH߭ߦ^߭[7Ѣ$RѢ,XѢ<*|~USS߭ݤFТTRSURЬR›£xh|pt/2P^ЬR›R^uXWЬR”WfVUhSTSDT@PSݤdǦ߭=2|~URR߭ݣHФTRUUdL-P^R° P\¾-\P^ݬ^\vZ[ X艹WT3S$U߭߭(߭j߭|~w߭eP߭߭VfleRb߬eb߬ eb ߬eb ߬eb߭߭jeDYi߭cP߭߭f߬cb ߬#cb߬(cb߬.cb"߬5cb)߬:cbe߭;0a2/ VMAIL010.BCKg#$MAIL010.VMAIL]VMAIL.EXE;3;2H;1J'%u߭jci߭dP߭߭f߬Adb ߬Gdb߬Ldb߬Rdb ߬Wdbe߭߭jdi߭gP߭߭f߬^gb ߬dgb߬igb߬ngbe߭߭jgi߭hP߭߭f߬uhb߬{hb̀hb ̆hb ̋hbe߭߭jhi߭@P߭߭f|~̒ e߭߭ji߭kP߭߭f̷kb̽kbkb kb kbe߭߭jki߭(P߭߭f b bbݥb Υbe߭߭jﳥi߭_P߭߭fAb 2b#bbe߭߭ji|~߭F߭߭f߭lH߭߭f|~߭O<߭ ߭f߭1>߭ ߭f߭gP߭߭f߭߭j=i߭ߪ%^|~ݬ ݬݬ ^ެTdRbSR0SPdRSPCb@SR0SP|~ݬ ߭ݬ8 |~ ~߭ 4^UR|~߭߭߭߭S߭߭߭߭0ݭ \l߭{+|~߭ݭl|~"ݭl߭ ߭߭߭߭ ߭߭߭߭߭W|~|~?9߭O߭E߭O߭E ^S~Rb>\lb$lbYlblblb<V;2H;1ggzz0krh:EJ|AP\vq7VknLD2xPb/o"@jD2@vLƅ(=qa[:q%SI`1]:pN xzI gIiy{}S^?"z[}5=f#D|k3'cdpߖve1U/ ⩂INNG_Gr ߐx475̖Gm;9l}^`%1Ov F, ݑ1ݜXjT+l̡Jx!榧a>/ Rq2k2NJg]@j c k*ffs$š">*qp !yxp]5%k! +>mTs*2]g2i"ʙSȉKԎt-\,f< z#ؘ|{׬f.>󾝒VC'V^8\6ӁԌrGXMH<ßu†؃\}LM 1;w:4 |XؼkgUdcOݧ$m><ǎN|`]S50nWߖS\7&@-R ½g %p̭S~3ߩ~Y뚸U1~_G}@;Kv$랞r߽G"Čr}#ܲhhg}|cu!`b@йVuŁdPeQ>U'H#$ /u3sh.T$I1Zܐ`qCC{W";iƖ7![Y߃VR(9Ǚ#r,?)uAXF|p@yT}6v =tz*Z :ˆ&5q2y"' K.aMSYC T=犐8ʟ%jپ2 φ]2?fQ`w+]g `pcfx׽s)V( &$f((',#PMMm᭤Y^)r=O VMAIL010.BCKg#$MAIL010.VMAIL]VMAIL.EXE;3;2H;1Jlxlbmlb^lblbܞl߭bI7*M)^a[ZXWQެSA УRQAbQPެSPcR @bPPcЬSЬRBcݬݬSݬ S<RR b=$S߭߬߬ Ü߭.W1*TלUVYYS߭߬߬ d|~|~?j`~d VMAIL010.BCKg#$MAIL010.VMAIL]VMAIL.EXE;3;2H;1JZ{^Ь|~?ݬݬE(P]ݢ߭ãPݠLݠݠH߭ߤ3߭ãPѠ$RãPѠ,XãPѠ<*ЬPݠpͬ^TЬSãRѢ(ĄߤzߤS߭`Pݢ߭ãPݠLݠݠH߭Ć߭]ãPѠ$RãPѠ,XãPѠ<*|~ЬPݠp߭5^\̈RRR^/هP\w\̈ ̈\̈\P<^MPRSPPѠ\RRѠ`SSP<PP%O19@[ VMAIL010.BCKg#$MAIL010.VMAIL]VMAIL.EXE;3G;1;1JOAI=P?P T7U* T@U!PTUT2UT2U TURTTRSUURRS ^R/P?PP1pP,`hhh hhhhhhhhhhhhhhhhhhthhhhhhhhhhhhhhhhhh`1 P?PkOz1ŏeP@ČP`Id1Pk߭y߭y߭y߭yŏPC} VMAIL010.BCKg#$MAIL010.VMAIL]VMAIL.EXE;3T.H;1JT@ĈQa@ĄP`OuPY(YŏeQYPxPPQP@P`ݭcYgP߭߭bVŏeQAdPY`YYPxPPQP@P`ݭcY&߭߭bnP߭߭bn1k߭yk߭y߭y߭yŏSCĈRbCĄRbatYRxRRSRBR<P ^pSЬRR P߭c߭߭xRcRW PO߭߭=x^gpxZp#xP^ЬݬP|~߭߭߬ w^ЬݬP|~|~߭߬ ߬}w<^%V.}XWެUe>W1eYR$&Z{wn`w[uwi Mwa yi߭pv|~|~?hv VMAIL010.BCKg#$MAIL010.VMAIL]VMAIL.EXE;3.H;1JgeP|~߭fg|~ ݭi|~ ݭi 1ݭijvmTEP|~|~?hm߭߭l|~߭ԭ߭߭`l<߭߭߭߭߭&l]ݭ ߭ ߭b߭k߭ ߭ ߭b߭k ݭ2߭MPh߭b߭kb߭k߭k߭k^U[WެVfW1 ,lZyk]kXrkRk ^U&n{ (3470/$G߭ЬRpj|~|~?jx J|fvpMU86n, T00p>&lk9j~ ^Cq<&uorkEx KI?mE_B4g o4w?VPN"%ڍ6!JT@׭GE9"ϧmmʭX%ŨFes)W8DD08b,vY,7H˝ sƻNhb  5K0Na0 Xx^3+<_ lVզ}%ܨZ<;KRwbz?f;V 1Z50}w|w!R3bݗ4hJl/9Q/yw=*.%.WZ> w&Su͗vK&Zܷ \PJ( e0<2_Ƣ6S{] 47Jvt]%ä&.HkqOGV)eY &@xOgM:\C MJ&.#ZhT"x))۳%ԏiuvcgꔒNA˞niQO8ojPJL9'Y&t`*3+O 0o}h\k~ʾm3M@\ KN#ՂuV4kd5$6sgXF~C36 s%  [ HAc6 K&dRcvӟ,2쌀,~Lt³j5#Բ].Dē"0@|s Y+k P߭ЬRaW1P^ÛZ!gX[SW "#ޥF$`|~h2.ad4aH("RPNN P"?PPA1tPA6llllllllllllllll$lllllllllllllllllllllllll$?PP1P*d x1P?PfRѢ|d֢|֢x߭߭쟢1d߭k1TfRѢxעxע|߭߭쟢1-߭k1fR€lPP)€€lPJv VMAIL010.BCKg#$MAIL010.VMAIL]VMAIL.EXE;3.H;1JbP„lh€x@1߭k1fSÀRR;R À PRÀÀlRRÄlhÀx@1P߭k1xfRѢ|dBhxxh|Ѣ|dfPנxxh|Ѡ|dfPlhx@1-߭k1fRТxSS0ShxâhSxxh|lh€x@1߭k1fPxh|lhx@1fPѠhd1àhdxРd|lhx@1|Y1oPu 1_PefSØR˜ P6ØR£R(gߥ PZZRR ߥ ZfR˜(f$Y1>1ߥ itƳOߥPtɳ1P ,6.1P?P֬1zP1qf1h׬1bP1]"߭߭߭߭iP7?GGG/10v?Pѥ֬11f1 1׬1P1>߭߭߭߭iP+3;;;#1?P֬1Pf11׬1P1Rߤ)߭߬Ѭ1ե1y1rPߤ4cP{^((gjݮ5PBЮFDEBBaDPX((gjXRPߤ~X,RRS1P^ MH VMAIL010.BCKg#$MAIL010.VMAIL]VMAIL.EXE;3;4Jz245ޤh6ߤs3((gkݮ P:Ю ><=|~|~2::APn((gknߤ}ݮPPPPSg]C֬S5/PRݭݭ^߭^Pխ1^*@^PRB^PRRVVAgBBѥg\<BO<BgLuBߧ8eB^~QԼЬPP)P?Pѡѡ ѡ|^RfcVˊT~U|~ߢ8dSc|~ ݬdc|~ߢ>dc|~ ݬdc|~ߢGdcѥ|~ ߢKdc|~ߢOd+ScѼ%ߢZdc|~)ߢ^dc#|~ߢadc)ߢedc߭߭fdAd߭߭fÉ@|~߭Ь SS:߭߭@:߭߭߭߭S@ݬP|~ݬc5߭ ߭fݬ m@ѥd|~߭ЬSS:߭߭S@:߭߭߭߭SR@߭߭fS@P^UXX1ެTdN[? ?Y?ݮ߬q??PP;1P;1?Pg-1UּwЬP`o`|~)ݬ dcݬ£dcDЬP`:`|~ݬ§dc)ݬ«dcU׼U U1|~ݬݬdї$^ͮRzUiT|b|~߭߭ԭ߭ެScP,ԭխ1УVW X߭߭x,ƔPP 'Ko/[1&F?PcQݡ߭~dߢ߭g1cQݡ߭~ߢ!߭g1cQݡ߭~ߢ+߭g1cQݡ߭~ ߢ8߭Q VMAIL010.BCKg#$MAIL010.VMAIL]VMAIL.EXE;3BJ;1JKg1cQݡ߭~ߢC߭g1jcQݡ߭~ߢM߭1BcQݡ߭~ߢT߭ 1PcQݡ߭~ߢg߭j 1PcQݡ߭~ߢu߭ 1PcQݡ߭~ƒ߭i 1PcQݡ߭~G߭gncQݡ߭~¢߭hJcQݡ߭~¯߭h&cQݡ߭~¾߭* ѭ ﵝխ1|~߭ԭ߭ЬS*խ7d1xPYYPP 2Y!eSP|^yRwVSfU|~ЬTTJSce)Tc|~Tc'PTc|~Tc|~ЬTTܓScѥ&Tc|~Tc$Tc|~Tc|~ЬTTpScѥ& Tc|~Tc$Tc|~Tc|~ЬTTScѥ &$Tc|~(Tc$+Tc|~.Tc|~2ЬTTScѥ&<Tc|~@Tc$CTc|~FTc|~JЬTT,ScQnP&UTc|~YTc$]Tc|~aTc|~eЬSSﴑTd|~Sd|~ xSd|~ Sd|~ †Sd|~ Sd|~ ”Sd|~ Sd|~ ¡SdѦG& ³Sd|~ ·Sd$ ºSd|~ ½Sd|~ ЬTTSc|~ Tc|~Tc|~Tc|~R/l{uO0 #b5kFس<7PFغ< @ N ?=-@ֆ-*vXψ`"39:`5SPIgqJBǜ&>ySS=:bȞq{Re+6H8F]@;i709(QRNU6[Fͣ%>M $i0FdR!Oԉ֔Y 0!(O) tt@T!Іޗ]&'"ZU:[PxRwHDZg(~f%%+n{y`|Jhro=݌V; Tp 1QpA"7I{ZiKe/ wAS9 7{͹akQYDC[y qAn>ߓO] GiLT@B?mbTZ]ܔ0)y2yXrߠ(yI7F:R&x RF2nȧt-TׂKe8f71071ǮtK@-I|O͇`p)0W9Yw ^IZpivNV]cGx2CdN{ЏG c*%S,bߺY,U݌)XKϷ璜 MNe~3 ˶[6&`X͊[}]8U ʢm<̟s$>ΐ՞ϗqBa=vT7<߰> O| C&) 7rF[IJ'(4j@Y$uF,{#-F|JQ|hX.y )?vu(,zC5]JM6Ki$kSK VMAIL010.BCKg#$MAIL010.VMAIL]VMAIL.EXE;3BJ;1J.8Tc|~T|^eRGVW+UTݬݬݬ ݬ 3T1&S|~|~?e>%kRY\ݏ*ZP2PP ^~SRТd|âh|PPxТhtТdp”Pՠ?P”PР”РPՠ'PQբh”Pՠ ”PР”QQh߭䟢h߭xjRPݠpДݠd1 PѢhd߭䟢e1Ѣp߭䟢e1PRP|~ݠpДݠf¢hp¢hxâhxPP|բx xhPP|tpk”(PQբh”Pՠ# ”PР#”QQh߭䟢h߭xjRPݠpДݠd.PҔݬXPXX1 kSSPУSPSk",R4^V[WZެUeSӔݭȇP߭||xxpZ1 <8|XqY0@,(}$ f~~y4" * ~f߭ЬRp|~|~?gEcZ10PacZ1 P,1P1 eRߦ3( R Z1P1fnkOOߦUnO1P8fSbݭR{P|~߭߭߭*֭ТHRЬRg”q^V W^ X|SUަHߔ|~]kƎOM;2 F zLz:.Qdӗȧ[܋۠8哖GpzA^ _cRdC8aKC&K (3pLLNuկb%Q>'X[_ѿ['?W/S)gh? /s*cT9-0b6Go 2턷={ u9s 7Na(q*gi7d]~^e~H>ѐ_~J*rD 뀠g3)nՖY v8$.pE*W-kVx*YOk0@͍z5oq Oݳx(_uã&҆TV۬?Hu;%F5jea:#G̲@q,K|fުŎti%:p1/ ̙W^~Qd ٣ELx8*Ql*ZUqlu)[V {5ʜyU*5=)(CX sՑ^ HK+178:U^T~3R)%V 柜j; #cV& AL [a2nQ!$ $;>˅*20f';f&`M֠2-b.7] }qП^V|oC;*BO3|tż 笪H2?=Q \JEYmcB uIA0H͹ 6D i קCU8 ĸ3 \GFKQ9*q~42J D޴I׹ k(hn' L p**z~޾Ob&&4R!6g bgN4SP^,6X5.3q|J}=t:s}ZFe\ǐE(}Z|@G&T!-sp9 L!$Sf}Pj[ ǚjhchVK䣺 48y4S9K%7)FRra6($'g?Ɔ%T.`?ηz0<8C'>:UY>hϲ|6g|?C’D0-/i4 lw̿(.Xxī U>4LXxߴ`Eڬ)2ziDj:%Z*ӽߧ^|K.L喔V{@}{n@=$?sbW` 0 ,ctwS4"Q{-j?_Ax ^U8JLC442S Lrg5`c @%/@݄i(n$Ws^i VMAIL010.BCKg#$MAIL010.VMAIL]VMAIL.EXE;3;1J߭߭<߭߭߭߭>߭߭߭ԭ߭߭ަ\|~߭߭߭Dަc|~߭߭߭ ߭ ߭h߭߭ ߭ ߭h߭S1jKRTTC1 ݭ߭bP''^?PTPPSUFCP ݭ2߭bP'#,,,#PV?PS PTSUS1lU1g\լH ЬH\լHP~uPR߭b%y߭yԢH\LRHߦj߷zPpgSSgУHgg\ԬLSvУLRУHHУH\УLLSvg/P~@uPRƒbxƚx|HRgh߭ph߭d߭na^UW|SVޥrЬRb߭x߭ x߭߭<߭߭߭߭>߭߭߭ԭ߭߭ń|~|~߭߭߭jRbŋ|~|~߭߭߭bޭ߭߭6wP|~|~ ߭߭߭bޭ߭wP|~|~ ߭߭߭b ߭ ߭g߭߭ ߭ ߭g߭S13HRPTTC1 ݭ߭bP''^b?PTPPSVFCP ݭ2߭bP'#,,,#P?PS PTSVS1lV߭ЬRb v߭ug߭g߭߭<^5TUЬSSeУHeePԠLSnsУLRУHHУHPУLLSNse/P~rPRĒb`uĚRu|HReP|^3SUެVfRݢDuUP)TED~wPEUݤDtUPS1tTwU_Ie VMAIL010.BCKg#$MAIL010.VMAIL]VMAIL.EXE;3;1J{<RdRPPB~ePBRdRPvP.ЬRݢgrcdPPqPcݢxtУHS|^TެVfFtTP&UDe~wPDTU tTP!SY tTvURcdRPBc~ePBRcdRPuP ݬsУHS^ԽYRUXeP*РH\PSSiq\P\SЬH\SSq\e3PVV1>V1P~oP\ilAsߩ4s|H\eX1\\$bPTTVVlrTPP~oP\߭ldɟde \e|H\SP\HSLԬH\SX\\$bPWWVV7PZZ\\ߩSZIPߩVIXPΤ^cVUXͭͯͰ͵ͱߦ͵m͵qPͭͭߦ%RbsP1PSS ͵SHRIqTPb߭ddSS(ePWW ߦRWHТHRPYYRR ߦSY|HP^KV,SURTߦ-lbP,pP4@Ԣ$c(c`  bPWWWP\LeDb<7Џ$ ԥ@ePWW\\WPP^GV(SURTߦ?kbP,oP4ЏH6Ԣ$c(c`  bPW\LW WWPeDb<47Џ(H"$ ԥ@ePWW\\ ߦQW>FWPP^ SNRЬ(b`( VMAIL010.BCKg#$MAIL010.VMAIL]VMAIL.EXE;3P.C;1J,cPTT ߣRTEP ^ѸRZPSS\\ ߢSSEP ^RЬ$bPSSP8^ʰ|Λְ|ڰ>||ЬݬmP߭ݬ98^ʰ|Λְ|ڰ>||ЬݬXmPn߭ݬ^ЬRGkSPТTTݢcݢcݢcݢcݢcݢDcݢLcݢPcRcTRԬݬ|^VЬ SjTPУRcdSdRSԬ լf߼PUPnP߼PUUUPЬR 'ffbD^P^䰏||ԭ߭߼|^RbSWVUԭee߭PTTPPTPЬP`PPnkPb Wb߭PTTPPTPfЬP` PP'kPec߭PTTPPTPЬPfee߭g^Rެbݬ ^7RZX[ЬTޭbݬ f@PYPT1VUeWѤ<vդ(q  mkfePSS ~SPjhfePSS~+ЭP@ߢYgjhfePSS~ ߢYgФTT1{Y<P^ORUW&XЬP  ޭbݬ h?PVPhݬPTT ~TPegެScPTT~3ЭP@ߢVdegcjPTT~V<Pa7b VMAIL010.BCKg#$MAIL010.VMAIL]VMAIL.EXE;3P.C;1J,^ Z$[W.X[YhT)UVԭ|||,G .048P :<@DD F1HLPN RTX\M ^`dh> jel>ptK vdx>|C i>I h>&J >ԭL g>J? >F k>#ěȰH j>|ԭff߭PRRPPRPЬP`PP_fPఏ  P|ԭ,߭߭PRRPPRPgԼ ЬPԠЬP ЬPԠ PЬPj ЬPԠ  PЬP R ЬPԠ PЬPbݬPSllys>lAlm2h9S,J^yRЬ ݬ IScPbЬݬcP Ь(ݬcP$Ь4ݬcP0|~&ߢ<~8PT P^ٺZVެU|~|~|~߭mP[f߭߭߭߭MP[[1eWXgP||cc߭IPRRPPRPc߭߭PRRPPRPcc߭ P^SԭP R|T\ ^|`h$ j|lt" v|x | | | |! | |Ȱ |̛԰ ||||cc߭PRRPPRPЬP` ^ՠ% jՠ# vՠ  ՠ  APЬP |APЬP WAPЬP 2APЬP ʞ̟ APЬP ֞؟@PЬP` PP@PcP߭1PRRPPRPcc߭VAXC$EXECMBXsԬeZm^^S|~S~~^S ~^TcdAяPQ|~!dPP P@<dٙP P@^lIP\<^ n^S|~߮~~^T|~d ЎR|~^T|~|~Rc|~d;"҆@2$9^&5h#ȑ"UKr:pnwE~/#h:NuCbT[!Yf\Tm+Qr.ͥAsd Ӑd( 嬢ܮg/=uamz@=B% bc"r܆p48l+ĒMo#`%BۗM_b˦c^ w)ϔul>}}Tm؃ 0%>eG+#iN[rLz$OFD~xQpqkG(fOqHrZ r "ظl9G_}&Ykm+}.e0B |pE/ӽЀV*7h(D@C?U? 8l!%6q5veejUãO?TUt2ҶUVDۂ@ +7ӅáTΗW8YD*жUF%N9_|IK5F]U2oǔ gۨE+q@"9 G6QP{jGE5k5ϴZWZUkH< F1+ZW}!A@[QYԠ45w%&Xza ҂X[ 䵛]ADW\5 HÐWŅö̶}-02Kd% eYG):PtY`RGޔC% $L w3um+90 |ا#~\/Vك_ͬ?}0C_6EY  ͹p\†3-+Ne 1P/֔o{^vw (z|4$<΃o N#zq3NP[~ZjP[j@ݬ ݬݬϵЏ5P1{ѭ  ЏL5P1j~>nYЫXYP0C^^SYR0i Џ~|~S~~P~~߮~~^QO ~^Tad~^Z綾ЬTЭU~~&T_PT}U<P TU^TUVV^(Ud(nnV~^T ~^R|~߮~~^V|~fb<~PяBnS1xbRS^Xϵ~~~~ZS~T PU^E ~^TdUPPЫ PЏ\5P10^^U nﵖR^S0P1Z[k[1WnSZGV5.4RrUeUTVDRTU[TW R, 'ZZ P(ƗPP(P8c^SR^S0mP1W1r1y[P76РР5[nkZZR^S0%PCZn[kkךZЬ [0BPZЬ[05P nR^S0MPDP8ШPRR^nSЬT|~|~Rc|~<1~< ~ ڔʏ< ~Tﴔ |~ݏݏݏ`PPPը ]P[P0`P}Р P] ^]P`P`VݠݠP5ЎPРPlЏL5P1([k9kZ Z[l լЪݪjkZ4ЎPЏT5P1\Pl3PP|~߮S~ ~@~^T|~d 0P1Ь[Ь ~լЬZ0xnÎ Pʏ0ʏ0PЬ WWP0  ~4PԼ lPЎWPW`g`WPP-JFWЬWP0P 0m-Y VMAIL010.BCKg#$MAIL010.VMAIL]VMAIL.EXE;3.C;1JYP1ЎZ߬ ݬݬjʏ0ЬWP0}~ ~PPЬWP0m1g0Z0Z0'Z00-ЬZjS<TSTRS(T,Ч$Ч,i ipRP Pz; gԧn~l>nYY~l> nRP0 ЎP06P0O}UʏVP0 l=Ь P mxPY0Yl @TxlZZެ\0 P@hP>ˏQя Q Џ5P1ӏQhP)P0WЎP0яPӏ Џ5P1Nwh01-.Z ZaPZP009<P0]PWWkȏ0PP8P.x PPP06 PPP@PЬZP:pGvWP0oO 0P1ЎZ^^[πWݏ߬ݬ[j}P~QZ0 }Pʏ0ʏ0PW1WP0J 0P1<Ь[ЏZ:Zk Џ5P0[QZ0!Cv[Z0Pʏ0ZЬWP0# 0P1Ь~^[0ЬPʏ00  0P1ӏ0&0P0  0Z PPP0ʏ0ݬ ݬݬRTWЬR:b1RQSmu~R0sP3UuDu1T2uR/uS$uR~o VMAIL010.BCKg#$MAIL010.VMAIL]VMAIL.EXE;3.C;1J*~S~^SЬU:e1UQV~8UrP3tth1SWtUtVtU~~V~^SLPT S(W UЎPPPT SЏ5PP&SPЬWP00 |~ ~I'=@JWP0P 0P1ЎZ߬ݬjʏ0ЬWP0 0P1 լ \ЧЧլ' çPЬPl P  ЧЧ gЧl  լ  ʏ01[P6Z CZ|~ݏ߬ ݬݬjЬQ@aP;Z IZ^^WgЬЬݬPgA ^~^W߬ ݬWjJR< Z f n |N Z ^  <R j     Z b <n z    F L^ZЬQ0PРP1 1^ZŬQ0P&РWРX=ܧwZ˔Z+0ݓaUpXoN.Lm-giyxJ'm'* *ĘKUb7G\S48 ݦ9_q}4YS 6_VZ4?V9C'[{k <›+Kndqv[4!=wbk*۱`<.\)QI˸š6Ţ@RgMnXN^L;Yt6jf3U^ꄼG%Ea)A3rRZ̾CY,JҤ&X BR͑f6E@ &QeXJyAaŹ YFU Gtr PX|U.ː5⫑\4q Θ9p}%n=×Ј9Fh4M> J|x|05*a9 tRl-gKW?gKt A<ۺLQ|>C aeaMl =VM1K-cD[P$IZdӂ O/zoWbO W|UdWMWS6:. 1SA |U ;D [Fʝ?!sIVr\.TvSatSwXbMZxB2N'6Pl݈j1eMXPin]3+Јa̦%ʭG:*[x^F{6tIO ƄwEZ:9;B5E .w6SN1PL?ΖM5'm;:曳aᵨL խtVu}  VMAIL010.BCKg#$MAIL010.VMAIL]VMAIL.EXE;3.OBJ;1JϯP+ݬdPPP`PPYPTѠUOrYPРPPVQUWРSРXԭ|~|~ݭPRR ݭx߭.nRRP?ݬm^5[\sݬݬ7QPQQPЬQ:aìQP|}SV:dVTQR (RdcQTVcЬP}SЬ WOЏVVWWV:Vd(VdcQTVW,TQR RW(RdcQTЏVVWWV ,nVcVWЬP|}QV:aQS:bVRQP (PbcQRVcЬP}QЬ W6V:aQSЏVVWWV:VbRQV (VbcQRVWٔcЬP<^,nnUЬQ6ЬR :a&P@nQT:dUTQ*QdnUìQP<^,nnUЬQ6ЬR :a&P@nQT:dUTQ+QdnUìQP|^,nnUЬQ.P@nЬQQT:dUTQ*QdnUQP }QP SSPbSSPЬ S}QPTTP SPbTTP|^,nnUЬQXnXQЬRP@nQT:dUTQ+Qdn UX5QVUQT:dUTQ*Qdn U^X QSXVPPPPaP zP P3mpPk3mpPykpPpkuqE, VMAIL010.BCKg#$MAIL010.VMAIL]VMAIL.EXE;3;1J?p3m Zk^TPPRBdP֬PPP@dSRcQQ+1QPP+NNbbbbbbbbbb Pj?PPeGaR RdSRGPRdeR5R  R*PR#PR # RPRddR PS1CPìSЬ"|~TiPRPpPR,Џ5RR4rP^jWTVЬRRUbPPRBdP֬PPP@dSRcQQ+1QPP+NNnnnnnnnnnn P"?PPeSmR Rd_Rc-VRGPRdeR5R  R*PR#PR # RPRddR PS17PìS!gЬRUb|PЬЬRSb"|~gPUP:s0&|~gPRPR,"g PR2pPU,"gV pRPpRpRPU2|P pPrPPUhrPPpPXh\0m%h^Q(^ԡЬ Tԡ~PgPPRbССԼbTݏݬ ߮fFTS; cԼ-aּPQ}PT;0Paa.PQ;0Pa T(TcԼ(}PV:.TePVּPT,VgTcPVQW(VgccSP|t/mpPAgpPP pP,gpPPp P=/m gpPP  P^Q(^Ь RRRRR R RRR^nԡԡ~PeЬSСWXա-СV&VW!(Vhc.VW(Wacs0c.ScЬPWաV.(Whcs0Se^STVnndЬP<P.mePe R`RP2fpPPR RяRRP|P<}PP<"Ef-mpPe-mpPe pPqPP qPv VMAIL010.BCKg#$MAIL010.VMAIL]VMAIL.EXE;3;1J}PRʏSbRPjPRnRRbRPcP  x-ms8p PqPP qP}PRʏSbRPjPRnRRqRPldjR~p~dpPe-md<,mpPd,mpPd,mdL^]UDWRTާ6[ާ<ާBާHͫͭͯ>ͳͷ͛͟͝>ͣͧsuޭw>{́ޭ̓>͇͍͋ޭ͏>͓͗OhhbP1e ePͫ(ݳͯPФRb<RRR|~?iPPP+|~|~s2JP~wB/P 62~2PRRԤRQRPa P֤Հwc 1PVfP PwEP(дQa PaRRARZ RP PPaQaߧN-ScP Ф RߧScPФ RߧXcPФ Rߧ]cP 1o<~fPVLRަiYަoZަu[ަ{>>͜͞ޭ͠>ͤͨͪޭͬ>ͰʹͶޭ͸>ͼCI͘͘\Pc] ctJ(PТ\l<\\\|~?)JPP+|~|~͜2 J~ݠBIޢH ޢ\TT YTѬ  S,PS"Ѭ  SP SSS^|~|~ݬ|~<#~ݬ A AЏAp>Pe; ͠S魵+qP 魴 qP}PR: RcPR}RP:EPa譲 a0R護q0SQRRa.R}RPPPi~~魱Эn߭~~=P; ͠S魵+qP 魴 qP}PR: RcPR}RP:EPa譲 a0R}RPPi~魱Эn߭~~n=P1; ͠S魵+qP 魴 qP護 魱խP19XWЭЬ [ЬX ЬVfVPΠ^ԭʏ0ЦZfY !PѦ$(,YYP13:hPWYW19Y0C1ԭ+WhPW }PW0BW;h%Q*Wh0PWT}P~TUYTYT)ThjTU0TWTXUT11}WTYSZWh%1WXhn0a1_*h WX+Wh:PWRXSPWzQX0Plh WcXhh WRXRWRZ R:R5議魨֭1P  ЭP ЏPЭPæZQQfZ Цf}fY PFݬQP1fצPЦZfYQѦ$(,YY Y  PYP+Yj4}PYPPTP  PY0kԭԭدThcccc"Y%PP議 ЋP譮``PZЭP ֭PY0YԭjRB}++ VMAIL010.BCKg#$MAIL010.VMAIL]VMAIL.EXE;3;1J)1jR@BsBi1jRBRAjRBB301jjR@B)jRB 1I0_1?9T1-j-j+9T9TЭU<UѭU1͠S魭 j01UjRBR03U͠íS 魮n߭議ЋndPЭPS議ЋSխ֭ЭTTYYT魰 TZQTYP ,YjTcY0o}PYPU議ЋUխЏЭTTYYT*Tj T議 (YjecSU0PT~議 (njecnZŽYP͠UЭT<Tj-j+Y 0P1T1TȐjRBKY 0TTѭT譩Ta譬'譫Yj.Y0l FP1T;譩1|T+jEjeY 04PRT1D譩1F͠íU~~߭߭7P$議ЋU魯 Pe 3eЭPPU議ЋU:]WhPЭRЏRPWSXTPWQXd^ST:jSd魪'#魰ZY 0j PR議eЭPXWY<ЬRТS|TS!RяSCяS:яS1я̂S(яS}T"RяĂS< PR7ЬR}T p^ЬQLD.WueZ2YlJ ;j QR2PՉTco:g@Yq K`;5`YFq*9vK !lE6g; ד)BmYBad1Zx(UZW Gݸt'|]9lMg`IN!H%1QĩAHDޤ8PR0Zĭ%$4donݦ"CS-RJ'wGX(OGDK./q5 Tե '-]z 0<LH{z7k7x/&5ۚ 7}u1RO.=DU^! j7ޱc m !n7x yg]&uEaI :|54A4o:r*xNȔk*w@x*z3yFT7ĴzWͨa14W, [e"8JܰK@LQƁIDb}J:Ld CG{7Dan'$Ǿ%Zv}5B#]f˴lcLa8 {m\=ñSK:vzȢ^f㊽ uݴVvF:g4h Fծ_Q%TUIo͝>}S + aZ a1F 6̃h0ڑ6X%jR~cR) &ǝ̀+i ̙G|žMHe] VMAIL010.BCKg#$MAIL010.VMAIL]VMAIL.EXE;3;1J,bP`QQgxQP@bP`QgxQP@P`5 Џ5ЬP |~ݬU+n~ ~^R|~b ТP PQq aPQQ(^ڰԭ>ԭݬPTPPL$5D5Sc9PTݬcPcRRTQa=RTPPq=TRPScʰTЬ<~RPSPSޟi*P2RBޑcSSPS꟭꟭3P T|~|~2PPT SPSS|~<#~P TTP TRBScUЬcBScBScBRbT UPݏ5PP^ݬݬPPQQQPP| ^SRP RRVլѬV ݏ56P߭qѭ ЏUP߭:P`UT TP@cRb1 TP@Qan@QaU U[@cP`RV P@jP`ЬPxRPPRѬ Ѭ URl0 PR_0PT TP@cP`1mV 愈 ^߭]нSլѬݏ5PS.Ь R(P@Qab@Qa@P`S1ЬR1bSѬEV=S$RBhRb= jS& SQP QSCPЬRb`CPТ`C SТcQ P^R RPP^XЬSbY VMAIL010.BCKg#$MAIL010.VMAIL]VMAIL.EXE;3;1LD;1J-/SRRVSzS UVaU\WVBgSP SUP@XQaT@QP`RaSgT RTO.xVVUVUXPP^ݬIݏ$5P^߭5нQQЬP`QмPЭ PР P `PЬQѡ\5< PЬP} pPP~ݏd5k-}P~ЬP}n p}nPѠ0] `~P~PQЁP}R}T}V}X}Z}\Ё^}P~}P}PѠ\5 Р RѢ0< PRRԱݠpP1Sս 1 ЬPԀ}R}T}V}X}Z}\Э|PNP xPPPDЬPЬ``$~P~հ0V0ݏ\5U,<l^T]P^QR0լ+#ЬPՀ} p}pmpʏPQ}]}P]Ь STRcSݬݬPRc}]RPPPPPPPl լP^R b ޢ q"쟭@+PQP QUPK"PP~*^mR ޢޢ&"쟭*PQP QP!PP~*^R ޢ7 ޢC!쟭g*PQP Q|P{!PP~*^R ޢQޢ]8!쟭)PQP QP!PP~)^)R ޢoޢ{ 쟭)PQP QP PP~>)^ R Š–f 쟭!)PQP Q6P@ ެPP~(^Q R ¥ ±H VMAIL010.BCKg#$MAIL010.VMAIL]VMAIL.EXE;3;12J2쟭(PQP QPެPP~e(^ R ¼ b쟭I(PQP Q^P<ެPP~'^y R 쟭'PQP QPެPP~'^ R  쟭q'PQP QPlެPP~!'^ R   *쟭'PQP QPެPP~&^5 R  #쟭&PQP QPެPP~I&^ R / ;Z쟭-&PQP QBP4ެPP~%^] R G S 쟭%PQP QPެPP~q%^ R ^j쟭U%PQP QjP|ެPP~%^ R s:쟭$PQP QPެPP~$^ R ˆ ”쟭}$PQP QPެPP~-$^R ž ªj쟭$PQP Q&PDެPP~#^AR · 쟭#PQP QPެPP~U#^R  쟭9#PQP QNPtެPP~"^iR 2쟭"PQP QAbs VMAIL010.BCKg#$MAIL010.VMAIL]VMAIL.EXE;3;12JE5P ެPP~}"^R 쟭a"PQP QvPެPP~"^R +b쟭!PQP Q P<ެPP~!^%R =I쟭!PQP QPެPP~9!^R [g쟭!PQP Q2PlެPP~ ^MR x„*쟭 PQP QPެPP~a ^R •¡쟭E PQP QZPެPP~^uR ±½Z쟭PQP QP4ެPP~^ R 쟭mPQP QPެPP~^R 쟭PQP QPdެPP~^1R "쟭PQP QPެPP~E^R ! -쟭)PQP Q>PެPP~^YR ;GR쟭PQP QP,ެPP~m^R Ye쟭QPQP QfPެPP~^R x„쟭PQP QP\ެPP~#E_ VMAIL010.BCKg#$MAIL010.VMAIL]VMAIL.EXE;3;12Jؚ8^R ™¥쟭yPQP QPެPP~)X`^,n^P`RЭP`RPxR~nhPW>RWЭVf*:QfQRhPg(RWVPPYX$^,n$ ЬV:fQVQV,nnn(iPW1&HC>,nPPƐϞPVܞs:fQVQ<,nPPƐϞPVܞs:fQVQ,n`P`PR,TZP\0PWhP hGRHP.SP@,S,iP RPPşhRPP|VP^,nPPƐϞPЬܞr:QQ,n`P`PZf\0PRR[P@fn\ RfPPЬQС(Pՠ04Q0XW^,n$܈:QìQЬ,nnn;PV/V&g:fQVQQQ (QfgPVPP ЬPР RSbcՠbPPJcPQcccbP. .b0bbQ.bbP/bQPP ^Ь R]> .b/brPbPPnnb~P/bSn:.nQQS/cSbPPnSbbS:]ncQQb :>ncQQbPЬXШ W[gVЬZZYZ/gY1ZZ Z.ШYZk( @p gkkkk/cZ ШYkk k/g.BZ@1ШYkkk k/g.g.gYk k0gPPgPYPPI(YYgZ!g*VQQgYY:%YfQQ#֔ VMAIL010.BCKg#$MAIL010.VMAIL]VMAIL.EXE;3;11J~;?aQVPPYQVZkPPЬ P/`.`.`PЬ PQaa/`.`.`.`aP\_\S\G\ ;\@~-\<~\ P`P P`P< [^,n$0,n0lլ|YЬZPѬPPYЬVTWS|QP.PPPSR/P/PQQ1+RSЬVTW, |$$$(ЏЏЏ04Q8W<P 8P1   1[,,$T$PTP- jm  .,,$T$PTPH,U- :m-e$-.e,VW.,,dT1    Z,PPX  ..`[`,  .,,( ,<PP,],,Y~,nPPƐϞP؞ܞjlPP,,n`P`PRPTZP\0PR R,$k1IX, 1,P.,],,  Z  $k1,,nPPƐϞP؞ܞkPP,,n`P`PRPTZP\0PRRRR$kRPVW .,,VW ,P% .,, I ',Q.,,PQPa* *,,.,,VW$G   1,nPPƐϞP؞ܞCjPP,,n`P`PRPTZP\0P$kd1  #,$k6PWHP|SP(PTn VMAIL010.BCKg#$MAIL010.VMAIL]VMAIL.EXE;3;11J>SP@PYYY W~P*.RZWR PP P'WRPݬPSP(PnT1f$kWPPhXWά^,n0nT, |n$$$(ЏЏЏ,n$004:QìQ8ЬS8SSQ[5Q%ܑQ?׊QQSVVVTXRdPdTVRXQQWWQQ]ȑQ-#QӑQ]S-QSSW͑SQ QQSQQ]1WP^ ZP.;y.;o ::"":[<]>;.-*.]>$.$-o]&>"-_.]>.u]>[<]`>Xj.F-".]>D.--.]>*- -*\%bp/0/hC.n;"n.| ;t@! !"".( ./*- -*?[]-L VMAIL010.BCKg#$MAIL010.VMAIL]VMAIL.EXE;3H;2OM;1J`De(H { ZH(Zx0Z0OPENSIGUnable to open signature file2 NOSIGFILESignature file is not defined2BCSTWAITA broadcast message is waitingZVMAILeVAXCMSG@@(4 8x@H `H@(   x0HP dPZnxF< (2H`` @0Hp@8P xpx  VMAIL010.BCKg#$MAIL010.VMAIL]VMAIL.EXE;3H;2J 'GpXP  @EDTSHRLBRSHRFORRTLLIBRTLMAILSHRMAILSHRPMTHRTLSMGSHRTPUSHR*[VMAIL010.VMAIL]VMAIL.H;1+,%D ./@ 4Jf-$0123KPWO56d7FB8e/C9/ E G@HJZLO v 1w{1$R_xEȉ],E(Z]tf˻% .[nf2D,c-gb}EoωG )/wjHR"U}}ZcݎLɠT6ۆc0 \mlNk!zk͝/\ge)>aQ-qapO׭UK's2Bҙ^e?t(l~4}F,yhnj91Z=LQc d؋­@`gob_bADSY&NW"7G)]m ϼT+Y[-."X$FW1//g!F;v$J*al,p)`\b| c8zKݢ阉@wWatւ˴?"l&T,tš2fo4@w,'!jP]S&uC!rٺ鼧P)AF ~nՊ[[ࠤ2`?&3f?{L@pR|srYPmi˜j7am8I7fx ⚳Yqf .5o(,WԼIԲ VMAIL010.BCK%D $[VMAIL010.VMAIL]VMAIL.H;1F.H;2JI/************************************************************************ * */ * Visual Mail */ * version 1.0 *; * Copyright 1993 by Richard D. Johnson *3 * All Rights Reserved * * *F * Visual Mail may be distributed only in its original, unmodified *. * form. See documentation for details. * * *I ************************************************************************2 * Revision History * * *) * 13-JUL-1993 RDJ Module completion. *J ************************************************************************/4#define VERSION "1.0" /* current version number */4#define MAJOR_VERSION 1 /* major version number */4#define MINOR_VERSION 0 /* minor version number */<#define MAX_FOLDER_LENGTH 20 /* max length of folder name */9#define MAX_FILE_LENGTH 30 /* max length of file name */.extern struct window_struct *broadcast_window;:extern struct profile_struct profile; /* user profile */4extern struct window_struct *vmail$open_mail_file();1extern struct window_struct *vmail$open_folder();6extern struct window_struct *vmail$open_null_window();%extern boolean vmail$update_folder();extern broadcast_message(); extern boolean broadcast_active;S VMAIL010.BCKC$MAIL010.VMAIL]VMAIL.HLP;2H;2Fٕ*[VMAIL010.VMAIL]VMAIL.HLP;2+,C./@ 4FN-$0123KPWO56@>7 >8 B (D9/ E G@HJ1 VMAIL Invokes the Visual Mail utility.CVisual Mail is a full-screen mail utility for the OpenVMS operating?system. Visual Mail allows you to view and send electronic mailAmessages, maintain mail files and folders within those files, andDmaintain distribution lists, alias names, and your personal profile.FVisual Mail may be used as an interactive replacement for the standardOpenVMS Mail utility.CVisual Mail requires OpenVMS/VAX version 5.4 or above and a Digital"VT- series or compatible terminal.:See the file VMAIL.TXT or VMAIL.PS for full documentation.*[VMAIL010.VMAIL]VMAIL.OBJ;2+, ./@ 4l -$0123KPWO56m[ 7P 8zP9/ E G@HJ VMAIL010.BCK $MAIL010.VMAIL]VMAIL.OBJ;2;1-2VMAILV1.0 6-AUG-1993 09:09VAX C V3.2-044VMAIL$CLOSE_MAIL_FILEVMAIL$CLOSE_FOLDERCHECK_OPEN_FOLDERBROADCAST_MESSAGEVMAIL$OPEN_NULL_WINDOWVMAIL$OPEN_MAIL_FILEREAD_MESSAGE_DISPLAYPURGE_WASTEBASKETOPEN_MAIL_FILE OPEN_FOLDERGET_PROFILE_INFOCLOSE_MAIL_FILE CLOSE_FOLDERSPRINTFRESTORE_SCREENWINDOW_MANAGERACTIVATE_WINDOWREAD_ALIAS_FILEGET_VMAIL_PROFILESMG$SET_BROADCAST_TRAPPING INIT_SCREENOPEN_FIRST_FOLDERACTIVATE_WINDOW PUT_CHARSSTRCPY CREATE_WINDOW CREATE_TITLEERRORERASE_BAR_MESSAGESTRLENPRINT_BAR_MESSAGEACTIVATE_WINDOW PUT_CHARS CREATE_WINDOW CHECK_ALIASSTRLENSTRCPYERASE_BAR_MESSAGEERRORPRINT_BAR_MESSAGE PUT_CHARSSTRCPYSMG$CHANGE_VIEWPORTSMG$CHANGE_VIRTUAL_DISPLAY CHECK_ALIASERASE_BAR_MESSAGEERRORPRINT_BAR_MESSAGE DELETE_WINDOWACTIVATE_NEXT_WINDOW"PMAIL"PReading..."P %s "P%-20s %3d"!PReading...",P%s:%s "3P %-11s %4d %-15.15s %-30.30s"SPReading..."^P %-11s %4d %-15.15s %-30.30s"~PReading..."P "PMAIL"P %s "P %s "PReading..."P%-20s %3d"P Null Window "PNo MessagesP^C$MAIN"R INIT_SCREENBROADCAST_MESSAGESMG$SET_BROADCAST_TRAPPINGbGET_PROFILE_INFOGET_VMAIL_PROFILEREAD_ALIAS_FILEߢߢVMAIL$OPEN_MAIL_FILEP :M$ VMAIL010.BCK $MAIL010.VMAIL]VMAIL.OBJ;2;11S^  CREATE_WINDOWP\¾ݬ PUT_CHARSERASE_BAR_MESSAGE\ACTIVATE_WINDOWWINDOW_MANAGERRESTORE_SCREENPΤ^"V!WԭUߦPRINT_BAR_MESSAGEݬSTRLENPݬߦͥSPRINTFPͥg߭߭ݬgOPEN_MAIL_FILEPRRERASE_BAR_MESSAGEݬRERROR1PխPͥSTRLENP gͥ CREATE_TITLEݭͥ CREATE_WINDOWPUgŔŘSTRCPYRbŘŜbŜbЭSTխ=PݣcߦVMAIL$UPDATE_MAIL_FILE DELETE_WINDOW DELETE_WINDOW DELETE_WINDOWACTIVATE_WINDOWERASE_BAR_MESSAGEERROR CREATE_WINDOWSTRCATSTRLENSTRCPYPRINT_BAR_MESSAGE DELETE_WINDOWSTRCMPERASE_BAR_MESSAGE PUT_CHARSSMG$CHANGE_VIEWPORTSMG$CHANGE_VIRTUAL_DISPLAYPRINT_BAR_MESSAGEERASE_BAR_MESSAGE PUT_CHARS CREATE_WINDOW DELETE_WINDOW MAIN VMAIL$OPEN_MAIL_FILESPRINTF|~TRRݥ PUT_CHARSУSRTTЭůЭŷERASE_BAR_MESSAGEUACTIVATE_WINDOWUOPEN_FIRST_FOLDERUP<^"V|ЬUUЬSSCHECK_OPEN_FOLDERPT1Rߦ!PRINT_BAR_MESSAGE߭U߭Ô OPEN_FOLDERPXXRRUXERRORERASE_BAR_MESSAGEP TSTRCPYTSTRLENP@TUTߦ,߭SPRINTFWЭRWR CHECK_ALIASТTRW߭ CREATE_WINDOWPTWėЭĔݬĘSTRCPYЭěЬğЬĐЭRURvݢ<STRCPYGݢLݢݢH<ߦ3Tg VMAIL010.BCK $MAIL010.VMAIL]VMAIL.OBJ;2;12SPRINTFѢ$RTѢ,XUѢ<*V|~USSTݤ PUT_CHARSТTRSURЭģERASE_BAR_MESSAGETACTIVATE_WINDOWTP^"VЬR—!ŸVMAIL$UPDATE_MAIL_FILERACTIVATE_NEXT_WINDOWR DELETE_WINDOWPЬSÛÔ CLOSE_FOLDERÔÛßRߦSPRINT_BAR_MESSAGEÛØԔ OPEN_FOLDERPTTRR'ØTERRORSACTIVATE_NEXT_WINDOWS DELETE_WINDOWERASE_BAR_MESSAGEެTdR—›SdR—S CHECK_ALIASУTSެWgS×RRTPRTT|~|~×SMG$CHANGE_VIRTUAL_DISPLAY⚏C߭߭߭߭SMG$CHANGE_VIEWPORTЭh×dÛRURsTݢ߭STRCPY锭ݢLݢݢH߭ߦ^߭SPRINTFѢ$RѢ,XѢ<*|~USS߭ݤ PUT_CHARSТTRSURЬR›£xh|ptERASE_BAR_MESSAGEP^ЬR› CLOSE_FOLDERR DELETE_WINDOW^XWЬR”PURGE_WASTEBASKETWf CLOSE_FOLDERV DELETE_WINDOWUhSTSDT@PSݤdǦ߭SPRINTF|~URR߭ݣ PUT_CHARSФTRUUdR VMAIL mainvmail$open_mail_file[vmail$open_foldervmail$update_foldertvmail$close_folder$vmail$close_mail_fileXvmail$close_all_filesvmail$open_messagevmail$close_message create_titlevmail$update_mail_file}X vmail$open_null_windowD vmail$close_null_window i V8 VMAIL010.BCK $MAIL010.VMAIL]VMAIL.OBJ;2;12  VMAIL$OPEN_FOLDER VMAIL$UPDATE_FOLDER tVMAIL$CLOSE_FOLDER VMAIL$CLOSE_MAIL_FILE XVMAIL$CLOSE_ALL_FILES |VMAIL$OPEN_MESSAGE VMAIL$CLOSE_MESSAGE | CREATE_TITLE VMAIL$UPDATE_MAIL_FILE X VMAIL$OPEN_NULL_WINDOW VMAIL$CLOSE_NULL_WINDOWC$MAIN $CODE$DATASTDINSTDOUTSTDERRRICH$ERROR_LIST NULLLISTBROADCAST_WINDOWPROFILEBROADCAST_ACTIVEFILE_BAR FOLDER_BAR MESSAGE_BAR BROADCAST_BAR DISTLIST_BAR PROFILE_BAR ALIAS_BARHELP_BARNULL_BARKEYBOARDBAR_MSG_DISPLAY SEND_DISPLAY SEND_SHADOW TO_DISPLAY CC_DISPLAYSEND_STATUS_DISPLAYSEND_STATUS_SHADOW ERROR_DISPLAY PASTEBOARD_ID WINDOW_ROOTCURRENT_WINDOWK VMAIL_PROFILE FILE_WINDOW1MCONTEXT$CHAR_STRING_CONSTANTSERASE_BAR_MESSAGEP^"R°  CREATE_WINDOWP\~f| VMAIL010.BCK $MAIL010.VMAIL]VMAIL.OBJ;2;12{{¾ PUT_CHARSERASE_BAR_MESSAGE\P^ݬ DELETE_WINDOWP%*[VMAIL010.VMAIL]VMAIL.TXT;2+,=./@ 4M-$0123KPWO56`: 7D: 8erR9 G@HJ                            . Visual Mail / Visual Mail / Version 1.0 9 (C) 1993 by Richard D. Johnson    - CONTENTS  H 1 OVERVIEW . . . . . . . . . . . . . . . . . . . . . . 4 H 2 INVOKATION . . . . . . . . . . . .! VMAIL010.BCK=$MAIL010.VMAIL]VMAIL.TXT;2;12M  . . . . . . . . . 5 H 3 THE WINDOWING SYSTEM . . . . . . . . . . . . . . . . 6 H 3.1 Moving Between Windows . . . . . . . . . . . . . . 6 H 3.2 The Bar Menu . . . . . . . . . . . . . . . . . . . 7 H 3.3 Closing A Window . . . . . . . . . . . . . . . . . 7 H 4 THE MAIL FILE WINDOW . . . . . . . . . . . . . . . . 8 H 4.1 Opening A Folder . . . . . . . . . . . . . . . . . 8 H 4.2 Purging The Wastebasket . . . . . . . . . . . . . 8 H 4.3 Compressing The Mail File . . . . . . . . . . . . 9 H 4.4 Updating The Mail File . . . . . . . . . . . . . . 9 H 4.5 Opening Another Mail File . . . . . . . . . . . . 9 H 4.6 Closing The Mail File . . . . . . . . . . . . . 10 H 5 THE FOLDER WINDOW . . . . . . . . . . . . . . . . 11 H 5.1 Opening A Message . . . . . . . . . . . . . . . 11 H 5.2 Filing A Message . . . . . . . . . . . . . . . . 11 H 5.3 Extracting A Message . . . . . . . . . . . . . . 12 H 5.4 Printing A Message . . . . . . . . . . . . . . . 12 H 5.5 Deleting A Message . . . . . . . . . . . . . . . 13 H 5.6 Marking And Unmarking Messages . . . . . . . . . 13 H 5.7 The Mark Menu . . . . . . . . . . . . . . . . . 14 H 5.8 Updating The Folder . . . . . . . . . . . . . . 14 H 5.9 Closing The FofVk VMAIL010.BCK=$MAIL010.VMAIL]VMAIL.TXT;2;12Mlder . . . . . . . . . . . . . . . 14 H 6 THE MESSAGE WINDOW . . . . . . . . . . . . . . . . 15 H 6.1 Filing A Message . . . . . . . . . . . . . . . . 15 H 6.2 Extracting The Message . . . . . . . . . . . . . 16 H 6.3 Printing The Message . . . . . . . . . . . . . . 16 H 6.4 Deleting The Message . . . . . . . . . . . . . . 17 H 6.5 Closing The Message . . . . . . . . . . . . . . 17 H 7 THE PROFILE WINDOW . . . . . . . . . . . . . . . . 18 H 7.1 Profile Items And Options . . . . . . . . . . . 18 H 7.1.1 Auto Purge . . . . . . . . . . . . . . . . . . . 18 H 7.1.2 CC Prompt . . . . . . . . . . . . . . . . . . . 18 H 7.1.3 Copy Forward . . . . . . . . . . . . . . . . . . 18 H 7.1.4 Copy Reply . . . . . . . . . . . . . . . . . . . 18 H 7.1.5 Copy Send . . . . . . . . . . . . . . . . . . . 19 H 7.1.6 Editor . . . . . . . . . . . . . . . . . . . . . 19 H 7.1.7 Forwarding Address . . . . . . . . . . . . . . . 19 H 7.1.8 Personal Name . . . . . . . . . . . . . . . . . 19 H 7.1.9 Default Queue . . . . . . . . . . . . . . . . . 19 H 7.1.10 Default Form . . . . . . . . . . . . . . . . . . 19 H 7.1.11 Use Default Queue . . . . . . . . . . . . . . . 20 H 7.1.12 Reply Prefix . . . . . . . . . . . . . . . . . . 20 H 7.1.13iwa}1 uø,k2fw:ƒyD%x:L+ )nU{by( At4ʨ|?DzEp(_Gƀ5_7 (z Pw,as!ƅA{ֲ8̼ՉƊ4H~mU-a.qeD&J[EW4֒Jvۜ`|Ra'j0SN:鉱 ~>B7R+'bP҄C?wJ ^+/= BOZ{CQSS 6x},g4# (Hu`#~JatR$(#￙vcZJ[!6L*wEOX-dYQ!J/q=Yabr DΪ9584"/_F ]ƄlN@h^p+m@8Qtoҏq[B-T?"/ ߶-G,;x[Vl Ñ>mXբvЖ o5Zvi.t^kj%wnDaJY