(FILECREATED " 7-Oct-86 20:57:21" {ERIS}<LAFITE>SOURCES>LAFITE.;14 90554 changes to: (FNS RELEASE.LAFITE LAFITE \LAFITE.START.PROC LA.MENU.ITEM) (VARS LAFITECOMS LAFITECOMMANDMENUITEMS LAFITESUBQUITMENUITEMS) previous date: " 6-May-86 17:19:54" {ERIS}<LAFITE>SOURCES>LAFITE.;12) (* " Copyright (c) 1982, 1983, 1984, 1985, 1986 by Xerox Corporation and Bolt Beranek and Newman Inc.. All rights reserved. ") (PRETTYCOMPRINT LAFITECOMS) (RPAQQ LAFITECOMS [(COMS (E (SETQ LAFITESYSTEMDATE (DATE))) (VARS LAFITEVERSION# LAFITESYSTEMDATE)) (COMS (FNS LAFITE \LAFITE.START.PROC LA.CREATE.UPDATE.MENUS \LAFITE.PROCESS \LAFITE.START.ABORT \LAFITE.QUIT \LAFITE.RESTART \LAFITE.SUBQUIT \LAFITE.QUIT.PROC \LAFITEDEFAULTHOST&DIR LAFITEDEFAULTHOST&DIR MAKELAFITECOMMANDWINDOW EXTRACTMENUCOMMAND DOMAINLAFITECOMMAND) (PROP ARGNAMES LAFITE) (FNS LAFITEMODE \LAFITE.INFER.MODE \LAFITE.SHOW.MODE \LAFITE.MODE.TITLE) (PROP VARTYPE LAFITEMODELST) (ADDVARS (LAFITEMODELST)) (INITVARS (\LAFITEMODE) (\LAFITE.AUTHENTICATION.FAILURE))) (INITVARS * LAFITEPROFILEVARS) (INITVARS * LAFITERANDOMGLOBALS) (VARS * LAFITEMARKS) (VARS LAFITECOMMANDMENUITEMS LAFITEUPDATEMENUITEMS LAFITECLOSEITEM LAFITEUPDATETOCITEM LAFITECLOSELABELS ANOTHERFOLDERMENUITEM LAFITESUBQUITMENUITEMS) (INITVARS (LAFITESTATUSWINDOW) (\ACTIVELAFITEFOLDERS) (\LAFITEPROFILECHANGED) (\LAFITE.TEMPFILES) (LAFITEPRIMARYDISPLAYWINDOW) (LAFITEMAILFOLDERS) (LAFITEFOLDERSMENU) (LAFITEUPDATEMENUS) (\LAFITE.MODE.CHOICES) (LAFITESUBQUITMENU)) (COMS (* ; "misc utilities") (FNS LA.RESETSHADE LA.MENU.ITEM LA.REMOVEDUPLICATES COLLECTOLDFILES LA.SETDIFFERENCE NTHMESSAGE \LAFITE.MAKE.MSGARRAY \LAFITE.ADDMESSAGES.TO.ARRAY)) (COMS (* ; "Display aids") (CURSORS LA.CROSSCURSOR)) (COMS (INITVARS (\LAFITE.ACTIVE) (\LAFITE.READY) (\LAFITEDEFAULTHOST&DIR) (\LAFITEUSERDATA)) (ADDVARS (\SYSTEMCACHEVARS \LAFITE.READY \LAFITEUSERDATA)) (FNS LAFITE.AROUNDEXIT CHECKLAFITEMAILFOLDERS \LAFITE.REBROWSEFOLDER \LAFITE.AFTERLOGIN )) (COMS (* ; "The profile") (FNS \LAFITE.WRITE.PROFILE \LAFITE.MERGE.PROFILES \LAFITE.READ.PROFILE PROFILEFILENAME) (INITVARS (\LAFITEPROFILEDATE)) (GLOBALVARS LAFITEPROFILERDTBL LAFITEPROFILE.NAME LAFITEPROFILE.EXT \LAFITEPROFILEDATE) ) (COMS (* ; "Low level file functions") (FNS DELETEMAILFOLDER FORGETMAILFILE \LAFITE.UNCACHE.FOLDER \LAFITE.UNCACHE.FOLDER.MULTIPLE \LAFITE.OPEN.FOLDER \LAFITE.OPENSTREAM \LAFITE.CREATE.MENU \LAFITE.EOF \LAFITE.CLOSE.FOLDER PROMPTFORFILENAME \LAFITE.PROMPTFORFOLDER MAKELAFITEMAILFOLDERSMENU MAILFOLDERBUSY LA.LONGFILENAME TOCFILENAME LA.SHORTFILENAME) (FNS COPY7BITFILE FIXLAURELFILE \LAFITE.BROWSE.LAURELFILE \LAFITE.NOTICE.FOLDERS \LAFITE.MAKE.RANDOM.DISPLAY \LAFITE.GC.FOLDERS \LAFITE.GC.FOLDERS.CONFIRM \LAFITE.FIX.LAUREL.FOLDER)) [DECLARE: DOEVAL@COMPILE DONTCOPY (FILES (SOURCE) LAFITEDECLS) (COMS (FNS RELEASE.LAFITE) (ADDVARS (DONTCOMPILEFNS RELEASE.LAFITE] (INITRECORDS MAILFOLDER LAFITEMSG) (SYSRECORDS MAILFOLDER LAFITEMSG) [COMS (FNS \LAFITE.GLOBAL.INIT) (DECLARE: DONTEVAL@LOAD DOCOPY (FILES LAFITEBROWSE LAFITESEND LAFITEMAIL TEDIT ATTACHEDWINDOW) (P (\LAFITE.GLOBAL.INIT] (DECLARE: DOEVAL@LOAD DOEVAL@COMPILE DONTCOPY COMPILERVARS (ADDVARS (NLAMA) (NLAML) (LAMA LAFITE]) (RPAQQ LAFITEVERSION# 9) (RPAQQ LAFITESYSTEMDATE " 7-Oct-86 20:57:23") (DEFINEQ (LAFITE [LAMBDA X (* bvm: " 7-Oct-86 16:48") (* ;;; "The first argument should be ON or OFF. The second argument, if supplied, is the name of the mailfile Lafite should browse unless the second argument is NIL in which case no mailfile will be browsed. If there is no second argument then default to DEFAULTMAILFOLDERNAME mailfile -- currently ACTIVE") (SELECTQ (COND ((ILESSP X 1) (* ; "Lafite called with no args") (QUOTE ON)) (T (ARG X 1))) ((ON on) (COND (\LAFITE.ACTIVE (TOTOPW LAFITESTATUSWINDOW) (QUOTE ON)) ((NOT (THIS.PROCESS)) "No Processes!") (T (COND ((NOT (WINDOWP LAFITESTATUSWINDOW)) (MAKELAFITECOMMANDWINDOW))) (PRINTLAFITESTATUS "Initializing") (SETQ \LAFITE.ACTIVE (QUOTE INIT)) (\LAFITE.PROCESS [LIST (FUNCTION \LAFITE.START.PROC) [KWOTE (COND ((ILEQ X 1) DEFAULTMAILFOLDERNAME) (T (ARG X 2] (KWOTE (for I from 3 to X collect (ARG X I] (QUOTE LAFITE)) (QUOTE ON)))) ((OFF off RESTART) (COND (\LAFITE.ACTIVE (* ; "Lafite was on") [COND ((EQ \LAFITE.ACTIVE (QUOTE INIT)) (* ; "Zap the initializer") (DEL.PROCESS (QUOTE LAFITE] (\LAFITE.QUIT.PROC (LA.MENU.ITEM (FUNCTION \LAFITE.QUIT) LAFITEMAINMENU) (ASSOC (QUOTE Quit) LAFITECOMMANDMENUITEMS) LAFITEMAINMENU))) (COND [(EQ (ARG X 1) (QUOTE RESTART)) (APPLY (FUNCTION LAFITE) (CONS (QUOTE ON) (for I from 2 to X collect (ARG X I] (T (QUOTE OFF)))) (LISPERROR "ILLEGAL ARG" (ARG X 1]) (\LAFITE.START.PROC [LAMBDA (MAILFILE OPTIONS) (* bvm: " 7-Oct-86 16:49") (RESETSAVE NIL (LIST (FUNCTION \LAFITE.START.ABORT))) (\LAFITEDEFAULTHOST&DIR (OR LAFITEDEFAULTHOST&DIR LOGINHOST/DIR)) (SETQ \LAFITE.BROWSELOCK (CREATE.MONITORLOCK "Lafite Browser Control")) (* ; "Used by anyone creating browsers or otherwise concerned with changes to \ACTIVELAFITEFOLDERS") (SETQ \LAFITE.MAINLOCK (CREATE.MONITORLOCK "Lafite Main")) (* ; "Used by \LAFITE.CLOSE.OTHER.FOLDERS or anyone who needs access to multiple arbitrary folders") (SETQ \LAFITE.PROFILELOCK (CREATE.MONITORLOCK "Lafite Profile")) (SETQ \LAFITE.HARDCOPYLOCK (CREATE.MONITORLOCK "Lafite hardcopy")) (* ; "Used by anyone reading or writing the Lafite profile") (SETQ LAFITEMAILFOLDERS (SETQ LAFITEFORMFILES NIL)) (\LAFITE.READ.PROFILE) (SETQ LAFITEUPDATEMENUS (CONS (LA.CREATE.UPDATE.MENUS LAFITEUPDATEMENUITEMS NIL NIL "Update Options") (LA.CREATE.UPDATE.MENUS LAFITEUPDATEMENUITEMS LAFITECLOSELABELS LAFITECLOSEITEM "Close/Shrink Options"))) (SETQ \LAFITE.READY T) (pushnew \AFTERLOGINFNS (FUNCTION \LAFITE.AFTERLOGIN)) (pushnew AROUNDEXITFNS (FUNCTION LAFITE.AROUNDEXIT)) (SETQ \LAFITE.ACTIVE T) (NLSETQ (WITH.MONITOR \LAFITE.MAILSERVERLOCK (\LAFITE.GET.USER.DATA))) (* ;; "Authenticate user first, so that MSGFROMMEP works. NLSETQ so that errors and/or ↑ from break do not leave Lafite in inconsistent state") (ADD.PROCESS (CONSTANT (LIST (FUNCTION LAFITEMAILWATCH))) (QUOTE RESTARTABLE) (QUOTE HARDRESET) (QUOTE AFTEREXIT) (QUOTE SUSPEND)) [COND ((OR MAILFILE (AND (EQMEMB (QUOTE SHRINK) OPTIONS) (SETQ MAILFILE DEFAULTMAILFOLDERNAME))) (\LAFITE.BROWSE (LA.MENU.ITEM (FUNCTION \LAFITE.BROWSE) LAFITEMAINMENU) LAFITEMAINMENU NIL MAILFILE (CONS (QUOTE NOCONFIRM) (MKLIST OPTIONS] (* ; "Finally, enable menu") (replace (MENU WHENSELECTEDFN) of LAFITEMAINMENU with (FUNCTION DOMAINLAFITECOMMAND]) (LA.CREATE.UPDATE.MENUS [LAMBDA (MENUITEMS LASTLABELS LASTITEM TITLE) (* bvm: "29-May-84 15:09") (PROG (OTHERMENUS) [COND (MENUITEMS (SETQ OTHERMENUS (LA.CREATE.UPDATE.MENUS (CDR MENUITEMS) (CDR LASTLABELS) LASTITEM TITLE))) (T (SETQ MENUITEMS (LIST LAFITEUPDATETOCITEM] (RETURN (CONS (\LAFITE.CREATE.MENU (COND [LASTITEM (APPEND MENUITEMS (LIST (CONS (CAR LASTLABELS) (CDR LASTITEM] (T MENUITEMS)) TITLE) OTHERMENUS]) (\LAFITE.PROCESS [LAMBDA (FORM NAME ALLOWLOGOUT RESTARTABLE) (* bvm: "25-Mar-84 17:16") (* * Creates a process running FORM which by default is not restartable and will not permit LOGOUT while it is running) (ADD.PROCESS FORM (QUOTE NAME) NAME (QUOTE RESTARTABLE) (OR RESTARTABLE (QUOTE NO)) (QUOTE BEFOREEXIT) (COND (ALLOWLOGOUT NIL) (T (QUOTE DON'T]) (\LAFITE.START.ABORT [LAMBDA NIL (* bvm: "25-Mar-84 16:44") (COND ((AND RESETSTATE (NEQ \LAFITE.ACTIVE T)) (CLOSEW LAFITESTATUSWINDOW) (SETQ LAFITESTATUSWINDOW (SETQ \LAFITE.ACTIVE]) (\LAFITE.QUIT [LAMBDA (ITEM MENU BUTTON) (* bvm: " 7-Nov-84 11:48") (COND ((EQ BUTTON (QUOTE MIDDLE)) (\LAFITE.SUBQUIT ITEM MENU)) (T (\LAFITE.PROCESS (LIST (FUNCTION \LAFITE.QUIT.PROC) (KWOTE ITEM) (KWOTE MENU)) (QUOTE LAFITEQUIT]) (\LAFITE.RESTART [LAMBDA (ITEM MENU) (* bvm: " 7-Nov-84 11:56") (COND ((\LAFITE.QUIT.PROC ITEM MENU) (LAFITE (QUOTE ON) NIL]) (\LAFITE.SUBQUIT [LAMBDA (ITEM MENU) (* bvm: " 7-Nov-84 11:58") (PROG ((MODES (for MODE in LAFITEMODELST when (LISTP (CDR MODE)) collect (LIST (CONCAT (CAR MODE) " Mode") (KWOTE (LIST (CAR MODE))) "Change to this mode of mail sending/retrieving"))) COMMAND) (COND ((NOT (EQUAL \LAFITE.MODE.CHOICES (SETQ \LAFITE.MODE.CHOICES MODES))) (* Recompute menu) (SETQ LAFITESUBQUITMENU))) (COND ([LISTP (SETQ COMMAND (MENU (.LAFITEMENU. LAFITESUBQUITMENU (APPEND LAFITESUBQUITMENUITEMS MODES) "Mode Change"] (LAFITEMODE (CAR COMMAND))) (COMMAND (\LAFITE.PROCESS (LIST COMMAND (KWOTE ITEM) (KWOTE MENU)) (QUOTE LAFITEQUIT]) (\LAFITE.QUIT.PROC [LAMBDA (ITEM MENU) (* bvm: " 5-May-86 16:59") (RESETLST (LA.RESETSHADE ITEM MENU) (OBTAIN.MONITORLOCK \LAFITE.BROWSELOCK NIL T) (OBTAIN.MONITORLOCK \LAFITE.MAINLOCK NIL T) (PROG ((HOW? 5) MENUREG) (OR \LAFITE.ACTIVE (RETURN T)) (COND ([for WINDOW in LAFITEEDITORWINDOWS when (WINDOWP WINDOW) do (COND ((OPENWP WINDOW) (SETQ $$VAL (TOTOPW WINDOW))) ([WINDOWP (SETQ WINDOW (WINDOWPROP WINDOW (QUOTE ICONWINDOW] (SETQ $$VAL (EXPANDW WINDOW] (printout PROMPTWINDOW T "There are open/undelivered message composition windows -- can't quit") (RETURN))) [for FOLDER in \ACTIVELAFITEFOLDERS bind LEVEL when (fetch (MAILFOLDER BROWSERWINDOW ) of FOLDER) do (* * Determine what to do with open browsers. Essentially same as the CLOSEFN for a browser, but we offer a single menu that offers all the choices that the most particular window might need) (COND ((ILESSP (SETQ LEVEL (COND ((fetch (MAILFOLDER HARDCOPYSTREAM) of FOLDER) 1) ((fetch (MAILFOLDER FOLDERNEEDSUPDATE) of FOLDER) 2) ((fetch (MAILFOLDER FOLDERNEEDSEXPUNGE) of FOLDER) 3) ((NEQ (fetch (MAILFOLDER #OFMESSAGES) of FOLDER) (fetch (MAILFOLDER TOCLASTMESSAGE#) of FOLDER)) 4) (T 5))) HOW?) (SETQ HOW? LEVEL] [COND [(SETQ HOW? (CAR (NTH (CDR LAFITEUPDATEMENUS) HOW?))) (SETQ HOW? (\LAFITE.CREATE.MENU [APPEND (fetch (MENU ITEMS) of HOW?) (QUOTE (("Don't Quit" NIL "Abort the Quit command"] "How should browsers be closed?")) (SETQ MENUREG (WINDOWPROP (WFROMMENU MENU) (QUOTE REGION))) (SETQ HOW? (OR (MENU HOW? (create POSITION XCOORD ← (IDIFFERENCE (fetch (REGION RIGHT) of MENUREG) (fetch (MENU IMAGEWIDTH) of HOW?)) YCOORD ← (IDIFFERENCE (fetch (REGION BOTTOM) of MENUREG) (fetch (MENU IMAGEHEIGHT) of HOW?))) T) (RETURN] (T (SETQ HOW? (FUNCTION \LAFITE.FINISH.UPDATE] [for FOLDER in (APPEND \ACTIVELAFITEFOLDERS) bind BROWSERWINDOW do (COND ((NOT (SETQ BROWSERWINDOW (fetch (MAILFOLDER BROWSERWINDOW) of FOLDER))) (\LAFITE.CLOSE.FOLDER FOLDER T)) (T (APPLY* HOW? BROWSERWINDOW FOLDER (QUOTE CLOSE] (SETQ \ACTIVELAFITEFOLDERS) (PROGN [for WINDOW in LAFITEEDITORWINDOWS do (* now close the edit and display windows *) (COND ((WINDOWP WINDOW) (COND ((OPENWP WINDOW) (CLOSEW WINDOW)) ([WINDOWP (SETQ WINDOW (WINDOWPROP WINDOW (QUOTE ICONWINDOW] (CLOSEW WINDOW] (SETQ LAFITEEDITORWINDOWS NIL)) (AND \LAFITE.OUTBOX (CLOSEW (fetch OBWINDOW of \LAFITE.OUTBOX))) (COND (\LAFITEPROFILECHANGED (\LAFITE.WRITE.PROFILE))) (SETQ AROUNDEXITFNS (REMOVE (FUNCTION LAFITE.AROUNDEXIT) AROUNDEXITFNS)) (SETQ \AFTERLOGINFNS (REMOVE (QUOTE \LAFITE.AFTERLOGIN) \AFTERLOGINFNS)) (PROGN (for FILE in \LAFITE.TEMPFILES do (* delete any temp files laying around *) (CLOSEF? FILE) (DELFILE FILE)) (SETQ \LAFITE.TEMPFILES)) (SETQ \LAFITE.ACTIVE NIL) (DEL.PROCESS (FUNCTION LAFITEMAILWATCH)) (LAFITECLEARCACHE) (COND ((OPENWP LAFITESTATUSWINDOW) (CLOSEW LAFITESTATUSWINDOW))) [SETQ LAFITESUBQUITMENU (SETQ \LAFITE.MODE.CHOICES (SETQ LAFITEFORMATMENU (SETQ LAFITEFOLDERSMENU (SETQ LAFITEFORMSMENU (SETQ LAFITEFORMFILES (SETQ \LAFITE.LAST.STATUS (SETQ LAFITEPRIMARYDISPLAYWINDOW (SETQ \LAFITEDEFAULTHOST&DIR (SETQ LAFITEUPDATEMENUS (SETQ LAFITEMAINMENU (SETQ LAFITESTATUSWINDOW NIL] (RETURN T]) (\LAFITEDEFAULTHOST&DIR [LAMBDA (HOST&DIR) (* bvm: " 5-May-86 16:56") (PROG ((OLDHOST&DIR (fetch PACKEDHOST&DIR of \LAFITEDEFAULTHOST&DIR)) UNPACKED) (COND ((OR (NULL HOST&DIR) (STRING-EQUAL OLDHOST&DIR HOST&DIR)) (* User wants the value, or there is no change) (RETURN HOST&DIR))) (* now make sure its a legitimate HOST&DIR *) (COND ((NOT (HOSTNAMEP HOST&DIR)) (printout PROMPTWINDOW T "Warning: " HOST&DIR " not a recognized directory"))) (* set both the visible and invisble variables *) (SETQ UNPACKED (UNPACKFILENAME.STRING HOST&DIR)) (SETQ \LAFITEDEFAULTHOST&DIR (create DEFAULTHOST&DIR PACKEDHOST&DIR ← (PACKFILENAME UNPACKED) UNPACKEDHOST&DIR ← UNPACKED)) (* reset all the appropriate menus *) (SETQ LAFITEFOLDERSMENU (SETQ LAFITEFORMSMENU)) (RETURN OLDHOST&DIR]) (LAFITEDEFAULTHOST&DIR [LAMBDA (HOST&DIR) (* bvm: "22-Feb-84 16:27") (* * Temporary definition until we can do it right) (SETQ LAFITEDEFAULTHOST&DIR HOST&DIR]) (MAKELAFITECOMMANDWINDOW [LAMBDA NIL (* bvm: " 5-May-86 16:23") (PROG ((FONTHEIGHT (FONTPROP LAFITEMENUFONT (QUOTE HEIGHT))) MENUW MENUWREGION POSITION HEIGHT WIDTH STATUSWINDOW) [SETQ MENUW (MENUWINDOW (SETQ LAFITEMAINMENU (create MENU ITEMS ← LAFITECOMMANDMENUITEMS WHENSELECTEDFN ← (FUNCTION NILL) CENTERFLG ← T TITLE ← (OR (\LAFITE.MODE.TITLE) "L a f i t e") MENUFONT ← LAFITEMENUFONT MENUTITLEFONT ← LAFITETITLEFONT] (SETQ WIDTH (IMAX [fetch (REGION WIDTH) of (SETQ MENUWREGION (WINDOWPROP MENUW (QUOTE REGION] LAFITESTATUSWINDOWMINWIDTH)) [SETQ HEIGHT (HEIGHTIFWINDOW (FIX (FTIMES FONTHEIGHT 1.5] (SETQ POSITION (OR LAFITESTATUSWINDOWPOSITION (GETBOXPOSITION WIDTH (IPLUS HEIGHT (fetch (REGION HEIGHT) of MENUWREGION)) NIL NIL NIL "Specify position of the Lafite Command Menu." ))) [SETQ STATUSWINDOW (CREATEW (MAKEWITHINREGION (create REGION LEFT ← (fetch (POSITION XCOORD) of POSITION) BOTTOM ← (IPLUS (fetch (POSITION YCOORD) of POSITION) (fetch (REGION HEIGHT) of MENUWREGION)) WIDTH ← WIDTH HEIGHT ← HEIGHT] (DSPFONT LAFITEMENUFONT STATUSWINDOW) (ATTACHWINDOW MENUW STATUSWINDOW (QUOTE BOTTOM)) [WINDOWPROP STATUSWINDOW (QUOTE BUTTONEVENTFN) (FUNCTION (LAMBDA (WINDOW) (COND ((LASTMOUSESTATE (NOT UP)) (SETQ \LAFITE.LAST.STATUS) (\LAFITE.WAKE.WATCHER] (WINDOWPROP STATUSWINDOW (QUOTE MAINWINDOWMINSIZE) (CONS 0 HEIGHT)) (WINDOWPROP STATUSWINDOW (QUOTE MAINWINDOWMAXSIZE) (CONS MAX.SMALLP HEIGHT)) (OPENW STATUSWINDOW) (CLEARW STATUSWINDOW) [WINDOWPROP STATUSWINDOW (QUOTE YPOS) (IDIFFERENCE (DSPYPOSITION NIL STATUSWINDOW) (FIXR (FTIMES FONTHEIGHT .2] (RETURN (SETQ LAFITESTATUSWINDOW STATUSWINDOW]) (EXTRACTMENUCOMMAND [LAMBDA (ITEM) (* DECLARATIONS: (RECORD (LABEL FORM HELPSTRING))) (* mdy: "20-OCT-82 15:07") (COND ((NLISTP ITEM) ITEM) ((fetch FORM of ITEM) (EVAL (fetch FORM of ITEM))) (T (fetch LABEL of ITEM]) (DOMAINLAFITECOMMAND [LAMBDA (ITEM MENU BUTTON) (* bvm: " 5-Nov-84 16:50") (APPLY* (EXTRACTMENUCOMMAND ITEM) ITEM MENU BUTTON]) ) (PUTPROPS LAFITE ARGNAMES (NIL (ON/OFF MAILFILE . OPTIONS) . U)) (DEFINEQ (LAFITEMODE [LAMBDA (MODE) (* bvm: "21-Dec-84 22:09") (PROG1 (fetch LAFITEMODE of \LAFITEMODE) (COND (MODE (while [LITATOM (CDR (SETQ MODE (OR (ASSOC MODE LAFITEMODELST) (\ILLEGAL.ARG MODE] do (SETQ MODE (CDR MODE))) (COND ((NEQ (fetch LAFITEMODE of \LAFITEMODE) (fetch LAFITEMODE of (SETQ \LAFITEMODE MODE))) (* Mode changed, kick mailwatcher) (COND (\LAFITE.ACTIVE (\LAFITE.SHOW.MODE) (WITH.MONITOR \LAFITE.MAILSERVERLOCK (SETQ \LAFITEUSERDATA) (PRINTLAFITESTATUS "Reinitializing") (\LAFITE.WAKE.WATCHER]) (\LAFITE.INFER.MODE [LAMBDA NIL (* bvm: "21-Dec-84 22:43") (COND ([SETQ \LAFITEMODE (OR (AND LAFITEMODEDEFAULT (ASSOC LAFITEMODEDEFAULT LAFITEMODELST)) (PROG [(CHOICES (for X in LAFITEMODELST collect X when (LISTP (CDR X] (RETURN (AND CHOICES (NULL (CDR CHOICES)) (CAR CHOICES] (AND LAFITESTATUSWINDOW (\LAFITE.SHOW.MODE)) \LAFITEMODE]) (\LAFITE.SHOW.MODE [LAMBDA NIL (* bvm: "30-Oct-84 16:53") (PROG ((TITLE (\LAFITE.MODE.TITLE)) (MENU LAFITEMAINMENU)) (COND (TITLE (replace (MENU TITLE) of MENU with TITLE) (UPDATE/MENU/IMAGE MENU) (REDISPLAYW (WFROMMENU MENU]) (\LAFITE.MODE.TITLE [LAMBDA NIL (* bvm: "12-Nov-84 17:03") (* * If user wants mode shown in Lafite status window, this returns a suitable title for that window) (AND \LAFITEMODE [SELECTQ LAFITESHOWMODEFLG (ALWAYS T) (NIL NIL) (CDR (for X in LAFITEMODELST collect X when (LISTP (CDR (LISTP X] (CONCAT "L a f i t e (" (fetch LAFITEMODE of \LAFITEMODE) ")"]) ) (PUTPROPS LAFITEMODELST VARTYPE ALIST) (ADDTOVAR LAFITEMODELST ) (RPAQ? \LAFITEMODE ) (RPAQ? \LAFITE.AUTHENTICATION.FAILURE ) (RPAQQ LAFITEPROFILEVARS ((LAFITEDEFAULTHOST&DIR) (LAFITEBUFFERSIZE 20) (LAFITEIFFROMMETHENSEENFLG T) [LAFITEMENUFONT (FONTCREATE (QUOTE (HELVETICA 10 BOLD] [LAFITETITLEFONT (FONTCREATE (QUOTE (HELVETICA 12 BOLD] [LAFITEDISPLAYFONT (FONTCREATE (QUOTE (TIMESROMAN 10] (LAFITEHARDCOPYFONT LAFITEDISPLAYFONT) [LAFITEBROWSERFONT (FONTCREATE (QUOTE (GACHA 10] [LAFITEMSGICONFONT (FONTCREATE (QUOTE (HELVETICA 8] (LAFITEPROFILE.NAME (QUOTE LAFITE)) (LAFITEPROFILE.EXT (QUOTE PROFILE)) (DEFAULTMAILFOLDERNAME (QUOTE ACTIVE.MAIL)) (LAFITEMAIL.EXT (QUOTE MAIL)) (LAFITESTATUSWINDOWMINWIDTH 200) (LAFITESTATUSWINDOWPOSITION (create POSITION XCOORD ← 735 YCOORD ← 650)) (LAFITEDEBUGFLG) (LAFITEMODEDEFAULT) (LAFITESHOWMODEFLG T))) (RPAQ? LAFITEDEFAULTHOST&DIR ) (RPAQ? LAFITEBUFFERSIZE 20) (RPAQ? LAFITEIFFROMMETHENSEENFLG T) (RPAQ? LAFITEMENUFONT (FONTCREATE (QUOTE (HELVETICA 10 BOLD)))) (RPAQ? LAFITETITLEFONT (FONTCREATE (QUOTE (HELVETICA 12 BOLD)))) (RPAQ? LAFITEDISPLAYFONT (FONTCREATE (QUOTE (TIMESROMAN 10)))) (RPAQ? LAFITEHARDCOPYFONT LAFITEDISPLAYFONT) (RPAQ? LAFITEBROWSERFONT (FONTCREATE (QUOTE (GACHA 10)))) (RPAQ? LAFITEMSGICONFONT (FONTCREATE (QUOTE (HELVETICA 8)))) (RPAQ? LAFITEPROFILE.NAME (QUOTE LAFITE)) (RPAQ? LAFITEPROFILE.EXT (QUOTE PROFILE)) (RPAQ? DEFAULTMAILFOLDERNAME (QUOTE ACTIVE.MAIL)) (RPAQ? LAFITEMAIL.EXT (QUOTE MAIL)) (RPAQ? LAFITESTATUSWINDOWMINWIDTH 200) (RPAQ? LAFITESTATUSWINDOWPOSITION (create POSITION XCOORD ← 735 YCOORD ← 650)) (RPAQ? LAFITEDEBUGFLG ) (RPAQ? LAFITEMODEDEFAULT ) (RPAQ? LAFITESHOWMODEFLG T) (RPAQQ LAFITERANDOMGLOBALS ((UNSUPPLIEDFIELDSTR "---") (LAFITEBUSYWAITTIME 1000) (LAFITEITEMBUSYSHADE 43605) (LAFITEEOL " "))) (RPAQ? UNSUPPLIEDFIELDSTR "---") (RPAQ? LAFITEBUSYWAITTIME 1000) (RPAQ? LAFITEITEMBUSYSHADE 43605) (RPAQ? LAFITEEOL " ") (RPAQQ LAFITEMARKS ((SEENMARK (CHARCODE SP)) (UNSEENMARK (CHARCODE ?)) (MOVETOMARK (CHARCODE m)) (FORWARDMARK (CHARCODE f)) (ANSWERMARK (CHARCODE a)) (HARDCOPYBATCHMARK (CHARCODE H)) (HARDCOPYMARK (CHARCODE h)) (HEARDMARK (CHARCODE @)))) (RPAQ SEENMARK (CHARCODE SP)) (RPAQ UNSEENMARK (CHARCODE ?)) (RPAQ MOVETOMARK (CHARCODE m)) (RPAQ FORWARDMARK (CHARCODE f)) (RPAQ ANSWERMARK (CHARCODE a)) (RPAQ HARDCOPYBATCHMARK (CHARCODE H)) (RPAQ HARDCOPYMARK (CHARCODE h)) (RPAQ HEARDMARK (CHARCODE @)) (RPAQQ LAFITECOMMANDMENUITEMS (("Browse" (QUOTE \LAFITE.BROWSE) "Browse a mail file; MIDDLE for subcommands") ("Send Mail" (QUOTE \LAFITE.MESSAGEFORM) "Open a message composition window; MIDDLE for choice of forms" ) ("Quit" (QUOTE \LAFITE.QUIT) "Update and close all mail files and stop Lafite"))) (RPAQQ LAFITEUPDATEMENUITEMS (("Do Hardcopy Only" (QUOTE \LAFITE.HARDCOPYONLY.PROC) "Will print batched hardcopy but not update file") ("Write out changes only" (QUOTE \LAFITE.UPDATE.PROC) "Will update physical file to reflect new marks and deletions") ("Expunge deleted messages" (QUOTE \LAFITE.EXPUNGE.PROC) "Will rewrite mail file, expunging all deleted messages"))) (RPAQQ LAFITECLOSEITEM ("Don't update file" (QUOTE \LAFITE.FINISH.UPDATE) "Just close/shrink the window - don't update it.")) (RPAQQ LAFITEUPDATETOCITEM ("Update table of contents" (FUNCTION \LAFITE.UPDATE.PROC) "Write table of contents file to speed next browse of this folder")) (RPAQQ LAFITECLOSELABELS ("Don't Update or Hardcopy" "Don't update file" "Don't expunge file" "Just close")) (RPAQQ ANOTHERFOLDERMENUITEM ("** Other Folder **" (QUOTE ##ANOTHERFILE##) "You will be asked to specify another mail filename")) (RPAQQ LAFITESUBQUITMENUITEMS (("Quit" (QUOTE \LAFITE.QUIT) "Turn Lafite off") ("Restart" (QUOTE \LAFITE.RESTART) "Turn Lafite off then back on"))) (RPAQ? LAFITESTATUSWINDOW ) (RPAQ? \ACTIVELAFITEFOLDERS ) (RPAQ? \LAFITEPROFILECHANGED ) (RPAQ? \LAFITE.TEMPFILES ) (RPAQ? LAFITEPRIMARYDISPLAYWINDOW ) (RPAQ? LAFITEMAILFOLDERS ) (RPAQ? LAFITEFOLDERSMENU ) (RPAQ? LAFITEUPDATEMENUS ) (RPAQ? \LAFITE.MODE.CHOICES ) (RPAQ? LAFITESUBQUITMENU ) (* ; "misc utilities") (DEFINEQ (LA.RESETSHADE [LAMBDA (ITEM MENU OLDSHADE) (* bvm: " 2-Mar-84 11:43") (* * Shades ITEM in MENU to indicate Lafite is busy, leaves something on resetlst to unshade it) (RESETSAVE (SHADEITEM ITEM MENU LAFITEITEMBUSYSHADE) (LIST (FUNCTION SHADEITEM) ITEM MENU (OR OLDSHADE WHITESHADE]) (LA.MENU.ITEM [LAMBDA (FN MENU) (* bvm: " 7-Oct-86 16:46") (* ;; "Returns the menu item executed by FN in MENU. This beats searching by the label because someone might want to change the label. Menu items are assumed to be of the form (label 'fn --)") (find ITEM in (fetch (MENU ITEMS) of MENU) suchthat (EQ FN (CADR (LISTP (CADR ITEM]) (LA.REMOVEDUPLICATES [LAMBDA (LST) (* bvm: " 9-Dec-85 17:03") (* * a case-independent intersection of LST and LST * *) (for X in LST bind RESULT unless (for GOOD in RESULT thereis (STRING-EQUAL X GOOD)) do (* Collect only if we haven't seen this name before) (push RESULT X) finally (RETURN (COND ((CDR RESULT) (REVERSE RESULT)) (T RESULT]) (COLLECTOLDFILES [LAMBDA (FILES EXT) (* bvm: " 6-Jan-84 11:05") (for FILE in FILES when (AND FILE (INFILEP (LA.LONGFILENAME FILE EXT))) collect (* use only those mail files that do exist *) FILE]) (LA.SETDIFFERENCE [LAMBDA (X Y) (* bvm: " 9-Dec-85 17:03") (* * Returns subset of X not in Y, case-independently) (for ELT in X collect ELT unless (for OTHER in Y thereis (STRING-EQUAL ELT OTHER]) (NTHMESSAGE [LAMBDA (MESSAGES N) (* bvm: " 3-Jan-84 12:11") (ELT MESSAGES N]) (\LAFITE.MAKE.MSGARRAY [LAMBDA (SIZE OLDARRAY OLDSIZE) (* bvm: " 3-Jan-84 11:07") (* * Creates an array at least large enough to hold SIZE message descriptors. If OLDARRAY is given, its elements up to OLDSIZE are copied into the new array) (PROG [(NEWARRAY (ARRAY (IMAX (IPLUS SIZE 32) (CEIL SIZE 64)) (QUOTE POINTER] [COND (OLDARRAY (for I from 1 to OLDSIZE do (SETA NEWARRAY I (ELT OLDARRAY I] (RETURN NEWARRAY]) (\LAFITE.ADDMESSAGES.TO.ARRAY [LAMBDA (MSGARRAY MESSAGELIST FIRSTMSG# LASTMSG#) (* bvm: " 3-Jan-84 11:26") (* * Adds to MSGARRAY the messages from MESSAGELIST, which should be numbered FIRSTMSG# thru LASTMSG# - returns a new array if MSGARRAY wasn't large enough) [COND ((OR (NULL MSGARRAY) (IGREATERP LASTMSG# (ARRAYSIZE MSGARRAY))) (SETQ MSGARRAY (\LAFITE.MAKE.MSGARRAY LASTMSG# MSGARRAY (SUB1 FIRSTMSG#] (COND ((NEQ (fetch (LAFITEMSG #) of (CAR MESSAGELIST)) FIRSTMSG#) (SHOULDNT))) (for MSG in MESSAGELIST as MSG# from FIRSTMSG# do (SETA MSGARRAY MSG# MSG)) MSGARRAY]) ) (* ; "Display aids") (RPAQ LA.CROSSCURSOR (CURSORCREATE (READBITMAP) NIL 8 8)) (16 16 "L@@C" "N@@G" "G@@N" "CHAL" "ALCH" "@NG@" "@GN@" "@CL@" "@CL@" "@GN@" "@NG@" "ALCH" "CHAL" "G@@N" "N@@G" "L@@C") (RPAQ? \LAFITE.ACTIVE ) (RPAQ? \LAFITE.READY ) (RPAQ? \LAFITEDEFAULTHOST&DIR ) (RPAQ? \LAFITEUSERDATA ) (ADDTOVAR \SYSTEMCACHEVARS \LAFITE.READY \LAFITEUSERDATA) (DEFINEQ (LAFITE.AROUNDEXIT [LAMBDA (EVENT) (* bvm: " 6-Jan-86 11:28") (SELECTQ EVENT ((BEFORELOGOUT) (SETQ \LAFITEUSERDATA NIL) (RESETLST (for FOLDER in \ACTIVELAFITEFOLDERS when (OBTAIN.MONITORLOCK (fetch (MAILFOLDER FOLDERLOCK) of FOLDER) T T) do (\LAFITE.CLOSE.FOLDER FOLDER T)))) ((AFTERLOGOUT AFTERSAVEVM AFTERSYSOUT AFTERMAKESYS) (COND ((EQ \LAFITE.ACTIVE T) (PRINTLAFITESTATUS "Reinitializing") (\LAFITE.READ.PROFILE T) (RESTART.PROCESS (QUOTE LAFITEMAILWATCH)) (CHECKLAFITEMAILFOLDERS)))) NIL]) (CHECKLAFITEMAILFOLDERS [LAMBDA NIL (* bvm: " 8-Jan-86 11:17") (* * On returning from LOGOUT check to see that all the mailfiles are in a consistence state -- the user might have run Laurel and screwed up Lafite's data, or run Lafite from another machine * *) (COND ((AND \ACTIVELAFITEFOLDERS (NOT \LAFITE.READY)) (WITH.MONITOR \LAFITE.BROWSELOCK [COND ((NOT \LAFITE.READY) (SETQ \ACTIVELAFITEFOLDERS (for FOLDER in (APPEND \ACTIVELAFITEFOLDERS) bind NEWESTNAME FULLNAME BROWSERWINDOW collect FOLDER when (COND ((NULL (SETQ BROWSERWINDOW (fetch (MAILFOLDER BROWSERWINDOW) of FOLDER))) (* Not really active, forget it) (\LAFITE.CLOSE.FOLDER FOLDER T) NIL) ((COND ((EQ (SETQ NEWESTNAME (INFILEP (fetch (MAILFOLDER VERSIONLESSFOLDERNAME ) of FOLDER))) (SETQ FULLNAME (fetch (MAILFOLDER FULLFOLDERNAME) of FOLDER))) (COND ((NOT (IEQP (GETFILEINFO FULLNAME (QUOTE LENGTH)) (fetch (MAILFOLDER FOLDEREOFPTR) of FOLDER))) (* If length is different folder must have changed. Might want to check creation dates too) (\LAFITE.PROCESS (LIST (FUNCTION \LAFITE.REBROWSEFOLDER) (KWOTE FOLDER)) (QUOTE LAFITEBROWSE)) T)) T) ([OR (NOT NEWESTNAME) (ILESSP (FILENAMEFIELD NEWESTNAME (QUOTE VERSION)) (FILENAMEFIELD FULLNAME (QUOTE VERSION] (printout PROMPTWINDOW T "Couldn't find file " FULLNAME) NIL) (T (printout PROMPTWINDOW T NEWESTNAME " is a newer version than is currently being browsed." T ) NIL)) T) (T (printout PROMPTWINDOW " - closing its browser window.") (CLOSEW (LAB.FLUSHWINDOW BROWSERWINDOW FOLDER)) (\LAFITE.CLOSE.FOLDER FOLDER T) NIL] (SETQ \LAFITE.READY T]) (\LAFITE.REBROWSEFOLDER [LAMBDA (FOLDER) (* bvm: " 3-Feb-86 14:52") (WITH.MONITOR (fetch (MAILFOLDER FOLDERLOCK) of FOLDER) (LET ((BROWSERWINDOW (fetch (MAILFOLDER BROWSERWINDOW) of FOLDER)) WASOPEN) (COND ((NOT (SETQ WASOPEN (OPENWP BROWSERWINDOW))) (OPENW BROWSERWINDOW))) (CLEARW BROWSERWINDOW) (LAB.PROMPTPRINT FOLDER T "Folder has changed--rebrowsing...") (CLEARW BROWSERWINDOW) (LAB.LOADFOLDER FOLDER) (COND ((NOT WASOPEN) (\LAFITE.FINISH.UPDATE BROWSERWINDOW FOLDER (QUOTE SHRINK]) (\LAFITE.AFTERLOGIN [LAMBDA (HOST USER) (* bvm: "11-Nov-84 18:28") (* Called when LOGIN gets new info. If HOST = NIL, this is the global login, which means we should get new data) (COND ((NULL HOST) (LAFITECLEARCACHE) (\LAFITE.WAKE.WATCHER]) ) (* ; "The profile") (DEFINEQ (\LAFITE.WRITE.PROFILE [LAMBDA NIL (* bvm: " 1-May-86 12:28") (* * If "Profile" has changed, write out a new one. Profile is set of mail files and form files known to this Lafite) (WITH.MONITOR \LAFITE.PROFILELOCK (NLSETQ (COND (\LAFITEPROFILECHANGED (LET ((NAME (PROFILEFILENAME)) OLDNAME OLDDATE OLDFOLDERS PROFILEFILE OVERWRITING ) (* Before dumping a new profile, check that a newer one hasn't been written behind our back. This handles two cases -- same user using Lafite from two machines, and file server having been down when we first tried to read profile) [COND ([AND (SETQ OLDNAME (INFILEP NAME)) (SETQ OLDDATE (GETFILEINFO OLDNAME (QUOTE ICREATIONDATE) )) (OR (NULL \LAFITEPROFILEDATE) (NOT (IEQP \LAFITEPROFILEDATE OLDDATE] (printout PROMPTWINDOW T OLDNAME " has changed since you started this Lafite, rereading it." ) [SETQ OVERWRITING (SETQ PROFILEFILE (OPENSTREAM OLDNAME (QUOTE BOTH) (QUOTE OLD] (SETQ OLDFOLDERS (READ PROFILEFILE FILERDTBL)) [COND ((STRING-EQUAL (CAR OLDFOLDERS) (CAR LAFITEMAILFOLDERS)) (* Merge old folders with new) (RPLACD LAFITEMAILFOLDERS (\LAFITE.MERGE.PROFILES (CDR OLDFOLDERS ) (CDR LAFITEMAILFOLDERS] (SETQ LAFITEFORMFILES (\LAFITE.MERGE.PROFILES (READ PROFILEFILE FILERDTBL) LAFITEFORMFILES)) (SETFILEPTR PROFILEFILE 0)) (T (SETQ PROFILEFILE (OPENSTREAM (OR OLDNAME NAME) (QUOTE OUTPUT) (QUOTE OLD/NEW] (PRIN2 LAFITEMAILFOLDERS PROFILEFILE LAFITEPROFILERDTBL) (PRIN1 " " PROFILEFILE) (PRIN2 LAFITEFORMFILES PROFILEFILE LAFITEPROFILERDTBL) [COND (OVERWRITING (* Truncate old file to current length) (SETFILEINFO PROFILEFILE (QUOTE LENGTH) (GETFILEPTR PROFILEFILE] (SETQ \LAFITEPROFILEDATE (GETFILEINFO PROFILEFILE (QUOTE ICREATIONDATE ))) (CLOSEF PROFILEFILE) (SETQ \LAFITEPROFILECHANGED]) (\LAFITE.MERGE.PROFILES [LAMBDA (NAMES1 NAMES2) (* bvm: " 3-Feb-86 11:50") (* * Remove duplicates from the two lists NAMES1 and NAMES2 and merge them) (COND ([SETQ NAMES1 (for F in NAMES1 collect F unless (for FOLDER in NAMES2 thereis (STRING-EQUAL FOLDER F] (SORT (APPEND NAMES1 NAMES2) (FUNCTION UALPHORDER))) (T NAMES2]) (\LAFITE.READ.PROFILE [LAMBDA (ONLYIFCHANGED) (* bvm: " 5-May-86 16:57") (WITH.MONITOR \LAFITE.PROFILELOCK (PROG (PROFILEFILE NEWDATE) (SETQ \LAFITEPROFILECHANGED) (COND ((AND (SETQ PROFILEFILE (INFILEP (PROFILEFILENAME))) (OR (NOT ONLYIFCHANGED) (NULL \LAFITEPROFILEDATE) [NULL (SETQ NEWDATE (GETFILEINFO PROFILEFILE (QUOTE ICREATIONDATE] (IGREATERP NEWDATE \LAFITEPROFILEDATE))) (* read in the profile file *) (SETQ PROFILEFILE (OPENSTREAM PROFILEFILE (QUOTE INPUT))) (SETQ \LAFITEPROFILEDATE (GETFILEINFO PROFILEFILE (QUOTE ICREATIONDATE) )) (SETQ LAFITEMAILFOLDERS (READ PROFILEFILE LAFITEPROFILERDTBL)) (SETQ LAFITEFORMFILES (READ PROFILEFILE LAFITEPROFILERDTBL)) (CLOSEF PROFILEFILE) (COND ((NOT (STRING-EQUAL (CAR LAFITEMAILFOLDERS) (fetch PACKEDHOST&DIR of \LAFITEDEFAULTHOST&DIR ))) (* Old format) [SETQ LAFITEMAILFOLDERS (CONS (fetch PACKEDHOST&DIR of \LAFITEDEFAULTHOST&DIR ) (for FILE in LAFITEMAILFOLDERS collect (LA.SHORTFILENAME FILE LAFITEMAIL.EXT] (SETQ \LAFITEPROFILECHANGED T))) (SETQ LAFITEFOLDERSMENU (SETQ LAFITEFORMSMENU NIL))) ((NULL LAFITEMAILFOLDERS) (SETQ LAFITEMAILFOLDERS (LIST (fetch PACKEDHOST&DIR of \LAFITEDEFAULTHOST&DIR ))) (SETQ LAFITEFORMFILES NIL]) (PROFILEFILENAME [LAMBDA NIL (* bvm: " 6-Jan-86 11:22") (PACKFILENAME.STRING (QUOTE DIRECTORY) (fetch PACKEDHOST&DIR of \LAFITEDEFAULTHOST&DIR) (QUOTE NAME) LAFITEPROFILE.NAME (QUOTE EXTENSION) LAFITEPROFILE.EXT]) ) (RPAQ? \LAFITEPROFILEDATE ) (DECLARE: DOEVAL@COMPILE DONTCOPY (GLOBALVARS LAFITEPROFILERDTBL LAFITEPROFILE.NAME LAFITEPROFILE.EXT \LAFITEPROFILEDATE) ) (* ; "Low level file functions") (DEFINEQ (DELETEMAILFOLDER [LAMBDA (MAILFOLDER) (* bvm: "21-Feb-84 14:55") (* * deletes the associated files and tells Lafite to forget about that mail file * *) (PROG (FILE) (FORGETMAILFILE (OR (fetch (MAILFOLDER SHORTFOLDERNAME) of MAILFOLDER) (LA.SHORTFILENAME (fetch (MAILFOLDER VERSIONLESSFOLDERNAME) of MAILFOLDER) LAFITEMAIL.EXT))) (CLOSEF? (SETQ FILE (fetch (MAILFOLDER FULLFOLDERNAME) of MAILFOLDER))) (DELFILE FILE) (SETQ FILE (TOCFILENAME FILE)) (CLOSEF? FILE) (DELFILE FILE]) (FORGETMAILFILE [LAMBDA (FILENAME) (* bvm: " 3-Feb-86 12:45") (* * removes FILENAME from the list of known mail files and invalidates the menu cache) (LET [(KNOWNFILE (OR (find F in (CDR LAFITEMAILFOLDERS) suchthat (STRING-EQUAL F FILENAME)) (find F in (CDR LAFITEMAILFOLDERS) bind (SHORTNAME ← (LA.SHORTFILENAME FILENAME LAFITEMAIL.EXT)) suchthat (STRING-EQUAL F SHORTNAME] (COND (KNOWNFILE (SETQ LAFITEMAILFOLDERS (DREMOVE KNOWNFILE LAFITEMAILFOLDERS)) (SETQ \LAFITEPROFILECHANGED T) (SETQ LAFITEFOLDERSMENU]) (\LAFITE.UNCACHE.FOLDER [LAMBDA (ITEM MENU MULTFLG) (* bvm: "11-Mar-85 23:46") (* * Remove one or more names from the folder menu. If MULTFLG is true, loops until you click outside menu) (PROG ((FOLDERMENU (OR LAFITEFOLDERSMENU (MAKELAFITEMAILFOLDERSMENU))) FOLDER) LP (COND ((SETQ FOLDER (MENU FOLDERMENU)) (FORGETMAILFILE FOLDER) (printout PROMPTWINDOW T FOLDER " forgotten.") (COND (MULTFLG (GO LP]) (\LAFITE.UNCACHE.FOLDER.MULTIPLE [LAMBDA (ITEM MENU) (* bvm: "11-Mar-85 23:48") (\LAFITE.UNCACHE.FOLDER ITEM MENU T]) (\LAFITE.OPEN.FOLDER [LAMBDA (FOLDER ACCESS RECOG) (* bvm: "12-Jan-84 15:12") (* * For Interlisp-D its too inefficient to keep opening and closing the mail file so we will keep it open - If the file wants to be open for INPUT do just that -- it may want to be a read-only mail file -- otherwise open it for BOTH - FILE is always a fully qualified file name * *) (PROG ((STREAM (fetch (MAILFOLDER FOLDERSTREAM) of FOLDER)) [DESIREDACCESS (COND ((EQ ACCESS (QUOTE INPUT)) ACCESS) (T (QUOTE BOTH] FILE) (RETURN (COND ((AND STREAM (OPENP STREAM DESIREDACCESS)) STREAM) (T (SETQ FILE (\LAFITE.OPENSTREAM (OR [COND (STREAM (* Have to close file to reopen for BOTH) (PROG1 (AND (OPENP STREAM) (CLOSEF STREAM)) (replace (MAILFOLDER FOLDERSTREAM) of FOLDER with NIL] (fetch (MAILFOLDER FULLFOLDERNAME) of FOLDER)) DESIREDACCESS RECOG (fetch (MAILFOLDER BROWSERWINDOW) of FOLDER))) (AND (EQ DESIREDACCESS (QUOTE BOTH)) (LINELENGTH MAX.SMALLP FILE)) (* So that LA.PRINTCOUNT won't introduce CR's. Would be nice if PRINTNUM could be give a PRIN3 mode) (replace (MAILFOLDER FOLDERSTREAM) of FOLDER with FILE]) (\LAFITE.OPENSTREAM [LAMBDA (FILE ACCESS RECOG BIGBUFS) (* bvm: " 6-Jan-84 12:24") [SETQ FILE (OPENSTREAM FILE ACCESS RECOG NIL (CONS (QUOTE (ENDOFSTREAMOP \LAFITE.EOF)) (AND BIGBUFS (LIST (LIST (QUOTE BUFFERS) LAFITEBUFFERSIZE] (WHENCLOSE FILE (QUOTE CLOSEALL) (QUOTE NO)) FILE]) (\LAFITE.CREATE.MENU [LAMBDA (ITEMS TITLE) (* bvm: " 5-Mar-84 15:23") (create MENU ITEMS ← ITEMS MENUFONT ← LAFITEMENUFONT TITLE ← TITLE CENTERFLG ← T]) (\LAFITE.EOF [LAMBDA (STREAM) (* bvm: "27-Dec-83 12:05") (* End of stream op for Lafite mail folders. Return endless CR's so that parses eventually stop) (CHARCODE CR]) (\LAFITE.CLOSE.FOLDER [LAMBDA (MAILFOLDER REALLYP) (* bvm: " 6-Feb-86 17:33") (* * If MAILFOLDER is open for output, make sure it is completely written out. If REALLYP then actually close the file) (LET ((STREAM (fetch (MAILFOLDER FOLDERSTREAM) of MAILFOLDER))) (COND (STREAM (COND [(OPENP STREAM (QUOTE OUTPUT)) (FORCEOUTPUT STREAM T) (COND (REALLYP (* Due to Leaf bug, best to do the FORCEOUTPUT first even if we're really closing it) (CLOSEF STREAM] ((AND REALLYP (OPENP STREAM)) (CLOSEF STREAM]) (PROMPTFORFILENAME [LAMBDA (WINDOW DEFAULT PROMPT) (* bvm: " 3-Feb-86 12:09") (RESETLST (OR PROMPT (SETQ PROMPT "Filename (CR to abort): ")) (RESETSAVE (TTY.PROCESS (THIS.PROCESS))) (RESETSAVE NIL (LIST (COND (WINDOW (FUNCTION CLEARW)) (T [SETQ WINDOW (PROG ((FONT (DEFAULTFONT (QUOTE DISPLAY))) WIDTH HEIGHT) [SETQ WIDTH (WIDTHIFWINDOW (IPLUS (STRINGWIDTH PROMPT FONT) (ITIMES 50 (CHARWIDTH (CHARCODE A) FONT] [SETQ HEIGHT (HEIGHTIFWINDOW (FONTPROP FONT (QUOTE HEIGHT] (RETURN (CREATEW (create REGION LEFT ← (IMIN LASTMOUSEX (IDIFFERENCE SCREENWIDTH WIDTH)) BOTTOM ← (IMIN LASTMOUSEY (IDIFFERENCE SCREENHEIGHT HEIGHT)) WIDTH ← WIDTH HEIGHT ← HEIGHT] (FUNCTION CLOSEW))) WINDOW)) (PROMPTFORWORD PROMPT DEFAULT NIL WINDOW NIL NIL (CHARCODE (CR ESC]) (\LAFITE.PROMPTFORFOLDER [LAMBDA (WINDOW) (* bvm: "27-Dec-83 19:12") (PROG [(FILE (MENU (OR LAFITEFOLDERSMENU (MAKELAFITEMAILFOLDERSMENU] (RETURN (SELECTQ FILE (NIL NIL) (##ANOTHERFILE## (PROMPTFORFILENAME WINDOW)) FILE]) (MAKELAFITEMAILFOLDERSMENU [LAMBDA NIL (* bvm: " 6-Jan-84 11:26") (SETQ LAFITEFOLDERSMENU (create MENU ITEMS ← (APPEND (SORT (CDR LAFITEMAILFOLDERS)) (LIST ANOTHERFOLDERMENUITEM)) TITLE ← (CONCAT "Folders on " (L-CASE (fetch PACKEDHOST&DIR \LAFITEDEFAULTHOST&DIR ))) CENTERFLG ← T]) (MAILFOLDERBUSY [LAMBDA (MAILFOLDER) (* bvm: "29-Dec-83 18:11") (RESETFORM (CURSOR LA.CROSSCURSOR) (BLOCK LAFITEBUSYWAITTIME]) (LA.LONGFILENAME [LAMBDA (FILENAME EXT) (* bvm: "24-Feb-85 22:20") (* * Composes a (nearly) full-specified filename, filling in defaults from \LAFITEDEFAULTHOST&DIR) (* * Would like this to be (PACKFILENAME (QUOTE BODY) FILENAME (QUOTE EXTENSION) EXT (QUOTE DIRECTORY) (fetch PACKEDHOST&DIR of \LAFITEDEFAULTHOST&DIR)) but PACKFILENAME handles DIRECTORY wrong if FILENAME has a host but no dir) (LET ((FILEFIELDS (UNPACKFILENAME.STRING FILENAME)) (DEFAULTFIELDS (fetch UNPACKEDHOST&DIR of \LAFITEDEFAULTHOST&DIR))) (while (AND DEFAULTFIELDS (NEQ (CAR DEFAULTFIELDS) (CAR FILEFIELDS))) do (NCONC FILEFIELDS (LIST (CAR DEFAULTFIELDS ) (CADR DEFAULTFIELDS ))) (SETQ DEFAULTFIELDS (CDDR DEFAULTFIELDS ))) (PACKFILENAME (NCONC FILEFIELDS (LIST (QUOTE EXTENSION) EXT]) (TOCFILENAME [LAMBDA (MAILFILE) (* M.Yonke "12-APR-83 12:44") (COND (MAILFILE (PACKFILENAME (QUOTE EXTENSION) (CONCAT (FILENAMEFIELD MAILFILE (QUOTE EXTENSION)) LAFITETOC.EXT) (QUOTE BODY) MAILFILE]) (LA.SHORTFILENAME [LAMBDA (FILE EXT KEEPVERSIONFLG) (* bvm: " 3-Feb-86 12:42") (* * returns that shortest file name that is compatible with \LAFITEDEFAULTHOST&DIR and EXT and no version number -- the result is used in menu creation * *) (COND (FILE (LET ([FILEFIELDS (COND ((LISTP FILE) (* Already unpacked) (APPEND FILE)) (T (UNPACKFILENAME.STRING FILE] MATCHFAILED) [for FILETAIL on FILEFIELDS by (CDDR FILETAIL) as (DEFAULTTAIL ← (fetch UNPACKEDHOST&DIR of \LAFITEDEFAULTHOST&DIR)) by (CDDR DEFAULTTAIL) do (COND ((COND ((AND (NOT MATCHFAILED) (EQ (CAR FILETAIL) (CAR DEFAULTTAIL))) (STRING-EQUAL (CADR FILETAIL) (CADR DEFAULTTAIL))) (T (SETQ MATCHFAILED T) (SELECTQ (CAR FILETAIL) (EXTENSION (STRING-EQUAL (CADR FILETAIL) EXT)) (VERSION (NOT KEEPVERSIONFLG)) NIL))) (* Remove a field from the result) (RPLACA (CDR FILETAIL) NIL)) (T (* Inhibit further matching in the HOST DEVICE DIRECTORY part) (SETQ MATCHFAILED T] (PACKFILENAME FILEFIELDS]) ) (DEFINEQ (COPY7BITFILE [LAMBDA (SRCFIL DSTFIL) (* bvm: " 5-Jan-84 10:57") (RESETLST (PROG (INSTREAM OUTSTREAM CH) [RESETSAVE NIL (LIST (QUOTE CLOSEF) (SETQ INSTREAM (OPENSTREAM SRCFIL (QUOTE INPUT) NIL NIL (QUOTE ((SEQUENTIAL T) (ENDOFSTREAMOP NILL] [RESETSAVE NIL (LIST [FUNCTION (LAMBDA (STREAM) (SETQ STREAM (CLOSEF STREAM)) (AND RESETSTATE (DELFILE STREAM] (SETQ OUTSTREAM (OPENSTREAM (OR DSTFIL (PACKFILENAME (QUOTE VERSION) NIL (QUOTE BODY) (FULLNAME INSTREAM))) (QUOTE OUTPUT) (QUOTE NEW) NIL (LIST (QUOTE (SEQUENTIAL T)) (LIST (QUOTE LENGTH) (GETFILEINFO INSTREAM (QUOTE LENGTH] (while (SETQ CH (BIN INSTREAM)) do (BOUT OUTSTREAM (LOGAND CH 127))) (RETURN (FULLNAME OUTSTREAM]) (FIXLAURELFILE [LAMBDA (MAILFILE) (* bvm: "21-Feb-84 14:35") (PROG (FOLDER) (COND ((SETQ FOLDER (WITH.MONITOR \LAFITE.BROWSELOCK (\LAFITE.GETMAILFOLDER MAILFILE))) (\LAFITE.FIX.LAUREL.FOLDER FOLDER]) (\LAFITE.BROWSE.LAURELFILE [LAMBDA (ITEM MENU) (* bvm: "27-Feb-86 17:27") (\LAFITE.BROWSE.PROC ITEM MENU NIL NIL (QUOTE LAUREL]) (\LAFITE.NOTICE.FOLDERS [LAMBDA NIL (* bvm: "27-Feb-86 17:49") (LET ((PATTERN (PROMPTFORFILENAME NIL (CAR \LAFITEDEFAULTHOST&DIR) "Notice mail folders on directory: ")) WINDOW FILES) (COND (PATTERN (SETQ PATTERN (PACKFILENAME.STRING (QUOTE BODY) PATTERN (QUOTE NAME) (QUOTE *) (QUOTE EXTENSION) LAFITEMAIL.EXT (QUOTE VERSION) "")) (* Default to *.MAIL;) (SETQ WINDOW (\LAFITE.MAKE.RANDOM.DISPLAY "Noticed Mail Folders" PATTERN (CONCAT "Enumerating " PATTERN "... "))) (SETQ FILES (DIRECTORY PATTERN)) (COND ((NULL FILES) (printout WINDOW T "No matching files found.")) ((NULL (SETQ FILES (for F in FILES unless (MEMB (SETQ F (LA.SHORTFILENAME F LAFITEMAIL.EXT)) (CDR LAFITEMAILFOLDERS)) collect (printout WINDOW F ", ") F))) (printout WINDOW T "No new files found.")) ((\LAFITE.GC.FOLDERS.CONFIRM WINDOW "Click Proceed to add these folders to set of known folders") (RPLACD LAFITEMAILFOLDERS (MERGE (CDR LAFITEMAILFOLDERS) FILES (FUNCTION UALPHORDER))) (SETQ LAFITEFOLDERSMENU) (SETQ \LAFITEPROFILECHANGED T) (printout WINDOW T "Done.")) (T (printout WINDOW T "Aborted."]) (\LAFITE.MAKE.RANDOM.DISPLAY [LAMBDA (TITLE SAMPLESTRING INITIALCONTENT) (* bvm: "27-Feb-86 17:55") (LET ((REG (WINDOWREGION LAFITESTATUSWINDOW)) (HEIGHT (HEIGHTIFWINDOW (TIMES 6 (FONTPROP NIL (QUOTE HEIGHT))) T)) BOTTOM WINDOW) [SETQ WINDOW (OPENTEXTSTREAM INITIALCONTENT (CREATEW (MAKEWITHINREGION (create REGION LEFT ← (fetch (REGION LEFT) of REG) BOTTOM ← (COND ((LESSP (SETQ BOTTOM (IDIFFERENCE (fetch (REGION BOTTOM ) of REG) HEIGHT)) 0) (* tried placing it below status window, but that's off screen) (fetch (REGION TOP) of REG)) (T BOTTOM)) WIDTH ← [IMAX (FIXR (TIMES 1.5 (STRINGWIDTH SAMPLESTRING))) (TIMES 50 (CHARWIDTH (CHARCODE M] HEIGHT ← HEIGHT)) TITLE) NIL NIL (QUOTE (PROMPTWINDOW DON'T] (SETFILEPTR WINDOW -1) (LINELENGTH MAX.SMALLP WINDOW) WINDOW]) (\LAFITE.GC.FOLDERS [LAMBDA NIL (* bvm: "27-Feb-86 17:58") (LET ((WINDOW (\LAFITE.MAKE.RANDOM.DISPLAY "Folders no longer found" (CAR \LAFITEDEFAULTHOST&DIR) )) FILES) (printout WINDOW "Scanning...") (SETQ FILES (for F in (CDR LAFITEMAILFOLDERS) unless (PROGN (printout WINDOW ".") (INFILEP (LA.LONGFILENAME F LAFITEMAIL.EXT)) ) collect (printout WINDOW , F " not found." T) F)) (COND ((NOT FILES) (printout WINDOW T "All known folders still exist.")) ((\LAFITE.GC.FOLDERS.CONFIRM WINDOW "Click Proceed to remove these names from the set of known folders") (RPLACD LAFITEMAILFOLDERS (LDIFFERENCE (CDR LAFITEMAILFOLDERS) FILES)) (SETQ LAFITEFOLDERSMENU) (SETQ \LAFITEPROFILECHANGED T) (printout WINDOW T "Done")) (T (printout WINDOW T "Aborted"]) (\LAFITE.GC.FOLDERS.CONFIRM [LAMBDA (TEXTSTREAM PROMPT) (* bvm: "27-Feb-86 17:58") (* * Wait for confirming response from Proceed/Abort menu before changing folders menu. PROMPT is instructions to issue in TEXTSTREAM) (printout TEXTSTREAM T PROMPT) (PROG1 (MENU (create MENU ITEMS ← (QUOTE (("Proceed" T "Yes, change the folder menu as indicated.") ("Abort" NIL "No, take no action"))) MENUROWS ← 1 CENTERFLG ← T MENUFONT ← LAFITEMENUFONT MENUBORDERSIZE ← 2) [LET [(REG (WINDOWPROP (CAR (fetch (TEXTOBJ \WINDOW) of (TEXTOBJ TEXTSTREAM))) (QUOTE REGION] (create POSITION XCOORD ← (fetch (REGION LEFT) of REG) YCOORD ← (IDIFFERENCE (fetch (REGION BOTTOM) of REG) (IPLUS 2 (FONTPROP LAFITEMENUFONT (QUOTE HEIGHT] T) (SETFILEPTR TEXTSTREAM -1]) (\LAFITE.FIX.LAUREL.FOLDER [LAMBDA (MAILFOLDER) (* bvm: " 3-Feb-86 15:15") (RESETLST (PROG (STREAM CH) (OBTAIN.MONITORLOCK (fetch (MAILFOLDER FOLDERLOCK) of MAILFOLDER) NIL T) (LAB.PROMPTPRINT MAILFOLDER "Laurel scan... ") (SETQ STREAM (\LAFITE.OPEN.FOLDER MAILFOLDER (QUOTE BOTH))) (RESETSAVE NIL (LIST (FUNCTION \LAFITE.CLOSE.FOLDER) MAILFOLDER T)) (SETFILEINFO STREAM (QUOTE ENDOFSTREAMOP) (FUNCTION NILL)) [while (SETQ CH (BIN STREAM)) do (COND ((EQ CH (LOGOR 128 (CHARCODE SPACE))) (\BACKFILEPTR STREAM) (BOUT STREAM (CHARCODE SPACE] (RETURN (FULLNAME STREAM]) ) (DECLARE: DOEVAL@COMPILE DONTCOPY (FILESLOAD (SOURCE) LAFITEDECLS) (DEFINEQ (RELEASE.LAFITE [LAMBDA NIL (* bvm: " 7-Oct-86 20:57") (ADD.PROCESS [LIST (FUNCTION (LAMBDA NIL (TTYDISPLAYSTREAM (CREATEW (QUOTE (0 248 467 163)) "Lafite Release")) (DSPSCROLL T) (FILESLOAD (SYSLOAD) COPYFILES) (COPYFILES "{ERIS}<LAFITE>SOURCES>" "{ERIS}<LISPCORE>LIBRARY>" (QUOTE (>))) (printout T T "Lafite Release Complete"] (QUOTE BEFOREEXIT) (QUOTE DON'T]) ) (ADDTOVAR DONTCOMPILEFNS RELEASE.LAFITE) ) (/DECLAREDATATYPE (QUOTE MAILFOLDER) (QUOTE (FLAG FLAG FLAG FLAG FLAG FLAG FLAG POINTER POINTER POINTER POINTER POINTER POINTER WORD WORD WORD WORD WORD WORD WORD WORD WORD WORD WORD WORD WORD WORD WORD WORD POINTER POINTER POINTER POINTER POINTER POINTER POINTER POINTER POINTER POINTER POINTER POINTER POINTER POINTER POINTER POINTER POINTER POINTER)) (QUOTE ((MAILFOLDER 0 (FLAGBITS . 0)) (MAILFOLDER 0 (FLAGBITS . 16)) (MAILFOLDER 0 (FLAGBITS . 32)) (MAILFOLDER 0 (FLAGBITS . 48)) (MAILFOLDER 0 (FLAGBITS . 64)) (MAILFOLDER 0 (FLAGBITS . 80)) (MAILFOLDER 0 (FLAGBITS . 96)) (MAILFOLDER 0 POINTER) (MAILFOLDER 2 POINTER) (MAILFOLDER 4 POINTER) (MAILFOLDER 6 POINTER) (MAILFOLDER 8 POINTER) (MAILFOLDER 10 POINTER) (MAILFOLDER 12 (BITS . 15)) (MAILFOLDER 13 (BITS . 15)) (MAILFOLDER 14 (BITS . 15)) (MAILFOLDER 15 (BITS . 15)) (MAILFOLDER 16 (BITS . 15)) (MAILFOLDER 17 (BITS . 15)) (MAILFOLDER 18 (BITS . 15)) (MAILFOLDER 19 (BITS . 15)) (MAILFOLDER 20 (BITS . 15)) (MAILFOLDER 21 (BITS . 15)) (MAILFOLDER 22 (BITS . 15)) (MAILFOLDER 23 (BITS . 15)) (MAILFOLDER 24 (BITS . 15)) (MAILFOLDER 25 (BITS . 15)) (MAILFOLDER 26 (BITS . 15)) (MAILFOLDER 27 (BITS . 15)) (MAILFOLDER 28 POINTER) (MAILFOLDER 30 POINTER) (MAILFOLDER 32 POINTER) (MAILFOLDER 34 POINTER) (MAILFOLDER 36 POINTER) (MAILFOLDER 38 POINTER) (MAILFOLDER 40 POINTER) (MAILFOLDER 42 POINTER) (MAILFOLDER 44 POINTER) (MAILFOLDER 46 POINTER) (MAILFOLDER 48 POINTER) (MAILFOLDER 50 POINTER) (MAILFOLDER 52 POINTER) (MAILFOLDER 54 POINTER) (MAILFOLDER 56 POINTER) (MAILFOLDER 58 POINTER) (MAILFOLDER 60 POINTER) (MAILFOLDER 62 POINTER))) (QUOTE 64)) (/DECLAREDATATYPE (QUOTE LAFITEMSG) (QUOTE (FLAG FLAG FLAG FLAG FLAG FLAG FLAG FLAG POINTER BYTE POINTER WORD WORD WORD WORD FLAG FLAG FLAG FLAG FLAG FLAG FLAG FLAG POINTER POINTER POINTER POINTER)) (QUOTE ((LAFITEMSG 0 (FLAGBITS . 0)) (LAFITEMSG 0 (FLAGBITS . 16)) (LAFITEMSG 0 (FLAGBITS . 32)) (LAFITEMSG 0 (FLAGBITS . 48)) (LAFITEMSG 0 (FLAGBITS . 64)) (LAFITEMSG 0 (FLAGBITS . 80)) (LAFITEMSG 0 (FLAGBITS . 96)) (LAFITEMSG 0 (FLAGBITS . 112)) (LAFITEMSG 0 POINTER) (LAFITEMSG 2 (BITS . 7)) (LAFITEMSG 2 POINTER) (LAFITEMSG 4 (BITS . 15)) (LAFITEMSG 5 (BITS . 15)) (LAFITEMSG 6 (BITS . 15)) (LAFITEMSG 7 (BITS . 15)) (LAFITEMSG 8 (FLAGBITS . 0)) (LAFITEMSG 8 (FLAGBITS . 16)) (LAFITEMSG 8 (FLAGBITS . 32)) (LAFITEMSG 8 (FLAGBITS . 48)) (LAFITEMSG 8 (FLAGBITS . 64)) (LAFITEMSG 8 (FLAGBITS . 80)) (LAFITEMSG 8 (FLAGBITS . 96)) (LAFITEMSG 8 (FLAGBITS . 112)) (LAFITEMSG 8 POINTER) (LAFITEMSG 10 POINTER) (LAFITEMSG 12 POINTER) (LAFITEMSG 14 POINTER))) (QUOTE 16)) [ADDTOVAR SYSTEMRECLST (DATATYPE MAILFOLDER ((BROWSERPROMPTDIRTY FLAG) (BROWSERREADY FLAG) (FOLDERNEEDSUPDATE FLAG) (FOLDERNEEDSEXPUNGE FLAG) (FOLDERBEINGUPDATED FLAG) (HARDCOPYPENDING FLAG) (NIL FLAG) (FULLFOLDERNAME POINTER) (VERSIONLESSFOLDERNAME POINTER) (SHORTFOLDERNAME POINTER) (FOLDERSTREAM POINTER) (MESSAGEDESCRIPTORS POINTER) (FOLDERLOCK POINTER) (#OFMESSAGES WORD) (TOCLASTMESSAGE# WORD) (BROWSERFONTHEIGHT WORD) (BROWSERFONTASCENT WORD) (BROWSERFONTDESCENT WORD) (BROWSERMAXXPOS WORD) (ORDINALXPOS WORD) (DATEXPOS WORD) (FROMXPOS WORD) (FROMMAXXPOS WORD) (SUBJECTXPOS WORD) (BROWSERDIGITWIDTH WORD) (FIRSTSELECTEDMESSAGE WORD) (LASTSELECTEDMESSAGE WORD) (FIRSTCHANGEDMESSAGE WORD) (CURRENTEOMLENGTH WORD) (CURRENTDISPLAYEDSTREAM POINTER) (BROWSEREXTENT POINTER) (BROWSERORIGIN POINTER) (BROWSERSELECTIONREGION POINTER) (BROWSERWINDOW POINTER) (BROWSERMENU POINTER) (BROWSERMENUWINDOW POINTER) (BROWSERPROMPTWINDOW POINTER) (ORIGINALBROWSERTITLE POINTER) (FOLDERDISPLAYWINDOWS POINTER) (FOLDEREOFPTR POINTER) (DEFAULTMOVETOFILE POINTER) (CURRENTDISPLAYEDMESSAGE POINTER) (BROWSERUPDATEFROMHERE POINTER) (EXTRAFIELD POINTER) (FOLDERCREATIONDATE POINTER) (HARDCOPYMESSAGES POINTER) (HARDCOPYSTREAM POINTER))) (DATATYPE LAFITEMSG ((PARSED? FLAG) (DELETED? FLAG) (SEEN? FLAG) (FORMATTED? FLAG) (NIL FLAG) (NIL FLAG) (NIL FLAG) (NIL FLAG) (BEGIN POINTER) (MARKCHAR BYTE) (MESSAGELENGTH POINTER) (# WORD) (STAMPLENGTH WORD) (TOCLENGTH WORD) (NIL WORD) (MESSAGELENGTHCHANGED? FLAG) (NIL FLAG) (SELECTED? FLAG) (MSGFROMMECHECKED? FLAG) (MSGFROMMETRUTH FLAG) (MARKSCHANGEDINFILE? FLAG) (MARKSCHANGEDINTOC? FLAG) (NIL FLAG) (DATE POINTER) (FROM POINTER) (SUBJECT POINTER) (TO POINTER))) ] (DEFINEQ (\LAFITE.GLOBAL.INIT [LAMBDA NIL (* bvm: " 1-May-86 12:24") (* need to do this so you can send a message without "starting" lafite *) (DECLARE (GLOBALVARS BackgroundMenu BackgroundMenuCommands)) (COND ((NOT (ASSOC (QUOTE SendMail) BackgroundMenuCommands)) [SETQ BackgroundMenuCommands (APPEND BackgroundMenuCommands (LIST (LIST (QUOTE SendMail) (KWOTE (LIST (FUNCTION \LAFITE.MESSAGEFORM))) "Bring up a message sending form."] (SETQ BackgroundMenu NIL))) (LAFITE.INIT.PARSETABLES) (SETQ \LAFITE.MAILSERVERLOCK (CREATE.MONITORLOCK "Lafite Mail Servers")) (* Used by anyone who calls \LAFITE.GET.USER.DATA or otherwise tries to muck with \LAFITEUSERDATA) (SETQ LAFITEPROFILERDTBL (COPYREADTABLE (QUOTE ORIG))) (* For reading and writing the profile) NIL]) ) (DECLARE: DONTEVAL@LOAD DOCOPY (FILESLOAD LAFITEBROWSE LAFITESEND LAFITEMAIL TEDIT ATTACHEDWINDOW) (\LAFITE.GLOBAL.INIT) ) (DECLARE: DOEVAL@LOAD DOEVAL@COMPILE DONTCOPY COMPILERVARS (ADDTOVAR NLAMA ) (ADDTOVAR NLAML ) (ADDTOVAR LAMA LAFITE) ) (PUTPROPS LAFITE COPYRIGHT ("Xerox Corporation and Bolt Beranek and Newman Inc." 1982 1983 1984 1985 1986)) (DECLARE: DONTCOPY (FILEMAP (NIL (4441 26948 (LAFITE 4451 . 7035) (\LAFITE.START.PROC 7037 . 9756) ( LA.CREATE.UPDATE.MENUS 9758 . 10650) (\LAFITE.PROCESS 10652 . 11161) (\LAFITE.START.ABORT 11163 . 11433) (\LAFITE.QUIT 11435 . 11830) (\LAFITE.RESTART 11832 . 12052) (\LAFITE.SUBQUIT 12054 . 13327) ( \LAFITE.QUIT.PROC 13329 . 20950) (\LAFITEDEFAULTHOST&DIR 20952 . 22397) (LAFITEDEFAULTHOST&DIR 22399 . 22642) (MAKELAFITECOMMANDWINDOW 22644 . 26285) (EXTRACTMENUCOMMAND 26287 . 26752) ( DOMAINLAFITECOMMAND 26754 . 26946)) (27019 29658 (LAFITEMODE 27029 . 28042) (\LAFITE.INFER.MODE 28044 . 28652) (\LAFITE.SHOW.MODE 28654 . 29035) (\LAFITE.MODE.TITLE 29037 . 29656)) (35284 39224 ( LA.RESETSHADE 35294 . 35694) (LA.MENU.ITEM 35696 . 36171) (LA.REMOVEDUPLICATES 36173 . 36916) ( COLLECTOLDFILES 36918 . 37405) (LA.SETDIFFERENCE 37407 . 37720) (NTHMESSAGE 37722 . 37855) ( \LAFITE.MAKE.MSGARRAY 37857 . 38467) (\LAFITE.ADDMESSAGES.TO.ARRAY 38469 . 39222)) (39618 45561 ( LAFITE.AROUNDEXIT 39628 . 40647) (CHECKLAFITEMAILFOLDERS 40649 . 44206) (\LAFITE.REBROWSEFOLDER 44208 . 44974) (\LAFITE.AFTERLOGIN 44976 . 45559)) (45590 55528 (\LAFITE.WRITE.PROFILE 45600 . 50845) ( \LAFITE.MERGE.PROFILES 50847 . 51371) (\LAFITE.READ.PROFILE 51373 . 55183) (PROFILEFILENAME 55185 . 55526)) (55728 70502 (DELETEMAILFOLDER 55738 . 56527) (FORGETMAILFILE 56529 . 57442) ( \LAFITE.UNCACHE.FOLDER 57444 . 58033) (\LAFITE.UNCACHE.FOLDER.MULTIPLE 58035 . 58213) ( \LAFITE.OPEN.FOLDER 58215 . 60719) (\LAFITE.OPENSTREAM 60721 . 61196) (\LAFITE.CREATE.MENU 61198 . 61453) (\LAFITE.EOF 61455 . 61880) (\LAFITE.CLOSE.FOLDER 61882 . 62838) (PROMPTFORFILENAME 62840 . 65207) (\LAFITE.PROMPTFORFOLDER 65209 . 65602) (MAKELAFITEMAILFOLDERSMENU 65604 . 66274) ( MAILFOLDERBUSY 66276 . 66469) (LA.LONGFILENAME 66471 . 68124) (TOCFILENAME 68126 . 68493) ( LA.SHORTFILENAME 68495 . 70500)) (70503 80820 (COPY7BITFILE 70513 . 72389) (FIXLAURELFILE 72391 . 72689) (\LAFITE.BROWSE.LAURELFILE 72691 . 72876) (\LAFITE.NOTICE.FOLDERS 72878 . 75128) ( \LAFITE.MAKE.RANDOM.DISPLAY 75130 . 77190) (\LAFITE.GC.FOLDERS 77192 . 78537) ( \LAFITE.GC.FOLDERS.CONFIRM 78539 . 79770) (\LAFITE.FIX.LAUREL.FOLDER 79772 . 80818)) (80897 81677 ( RELEASE.LAFITE 80907 . 81675)) (88775 90162 (\LAFITE.GLOBAL.INIT 88785 . 90160))))) STOP