(FILECREATED "30-Jan-86 15:16:09" {PHYLUM}<LISPUSERS>KOTO>SLIDEPROJECTOR.;2 54076 changes to: (VARS SLIDEPROJECTORCOMS) (FNS LoadedProjectorRightButtonFn SlideProjectorButtonPushed) previous date: "13-Jan-86 14:07:05" {PHYLUM}<LISPUSERS>KOTO>SLIDEPROJECTOR.;1) (* Copyright (c) 1985, 1986 by Xerox Corporation. All rights reserved.) (PRETTYCOMPRINT SLIDEPROJECTORCOMS) (RPAQQ SLIDEPROJECTORCOMS [[INITVARS (OpenSlides NIL) (ShrunkenSlides NIL) (ProjectorScreenPos (QUOTE (900 . 10))) (SlideFiles (QUOTE ("*.TEDIT;" "*.TED;"] [VARS (PromptForWordLock (CREATE.MONITORLOCK (QUOTE PromptForWord))) (MaxSlideWidth 750) (SlideBorderSize 4) (SlidePromptWindowFont (FONTCREATE (QUOTE HELVETICA) 6)) (SlideTitleWindowFont (FONTCREATE (QUOTE HELVETICA) 10 (QUOTE BOLD] (GLOBALVARS OpenSlides ShrunkenSlides ProjectorScreenPos PromptForWordLock MaxSlideWidth SlideBorderSize SlideMarginWidth SlideProjectionScreen SlidePromptWindowFont SlideTitleWindowFont SlideFiles) (FNS CacheSlide CreateSlideProjector InitSlideProjector LoadedProjectorRightButtonFn ProjectionScreenButtonEventFn ProjectorIconButtonEventFn ReshapeSlideProjectors ShapeWindowToMaxSize ShowSlideFile SlideProjectorButtonPushed SlideRandAccessMenuFn SlideScreenCloseFn SlideScreenOpenFn SlideTitle UpdateSlideProjectorTitleWindow ViewParticularSlide) (COMS (* * Bitmaps for all the cute icons) (BITMAPS SlideProjectorBackButtonBM SlideProjectorNextButtonBM SlideProjectorIcon SlideProjectorIconMask EmptySlideProjectorIcon EmptySlideProjectorIconMask ProjectionScreenIcon ProjectionScreenIconMask RolledUpScreenIcon RolledUpScreenMask) (GLOBALVARS SlideProjectorBackButtonBM SlideProjectorNextButtonBM SlideProjectorIcon SlideProjectorIconMask EmptySlideProjectorIcon EmptySlideProjectorIconMask ProjectionScreenIcon ProjectionScreenIconMask RolledUpScreenIcon RolledUpScreenMask)) (COMS (* * Big pointers) (FILES (SYSLOAD FROM LISPUSERS) ANIMATE) (GLOBALVARS Hand HandShadow BigArrowIcon BigArrowShadow)) (COMS (* * Initialization) (P (InitSlideProjector]) (RPAQ? OpenSlides NIL) (RPAQ? ShrunkenSlides NIL) (RPAQ? ProjectorScreenPos (QUOTE (900 . 10))) (RPAQ? SlideFiles (QUOTE ("*.TEDIT;" "*.TED;"))) (RPAQ PromptForWordLock (CREATE.MONITORLOCK (QUOTE PromptForWord))) (RPAQQ MaxSlideWidth 750) (RPAQQ SlideBorderSize 4) (RPAQ SlidePromptWindowFont (FONTCREATE (QUOTE HELVETICA) 6)) (RPAQ SlideTitleWindowFont (FONTCREATE (QUOTE HELVETICA) 10 (QUOTE BOLD))) (DECLARE: DOEVAL@COMPILE DONTCOPY (GLOBALVARS OpenSlides ShrunkenSlides ProjectorScreenPos PromptForWordLock MaxSlideWidth SlideBorderSize SlideMarginWidth SlideProjectionScreen SlidePromptWindowFont SlideTitleWindowFont SlideFiles) ) (DEFINEQ (CacheSlide [LAMBDA (slideWindow restOfSlides displayWindow) (* smL "13-Jan-86 11:26") (* * Set up the slide in the reserve window) [if (AND (WINDOWPROP displayWindow (QUOTE TEXTSTREAM)) (EQ (WINDOWPROP displayWindow (QUOTE cachedSlide)) restOfSlides)) then (* already cached) NIL elseif [NOT (AND (NUMBERP (CAR restOfSlides)) (NUMBERP (CADR restOfSlides] then (* not really a slide, just an empty window. Make sure any previously cached slide is wiped out.) (WINDOWPROP displayWindow (QUOTE cachedSlide) NIL) (if (WINDOWPROP displayWindow (QUOTE TEXTSTREAM)) then (TEDIT.QUIT (TEXTSTREAM displayWindow)) (WINDOWPROP displayWindow (QUOTE TEXTSTREAM) NIL)) else (RESETLST (RESETSAVE (CURSOR WAITINGCURSOR)) (LET [(sourceTextStream (WINDOWPROP slideWindow (QUOTE sourceTextStream)) ) (textStream (OPENTEXTSTREAM "" displayWindow NIL NIL (QUOTE (PROMPTWINDOW DON'T LEAVETTY T NOTITLE T] (TEDIT.SETSEL textStream 0 0 (QUOTE LEFT)) (TEDIT.SETSEL sourceTextStream (ADD1 (CAR restOfSlides)) (DIFFERENCE (CADR restOfSlides) (PLUS 2 (CAR restOfSlides))) (QUOTE LEFT)) (TEDIT.COPY (TEDIT.GETSEL sourceTextStream) (TEDIT.GETSEL textStream)) (WINDOWPROP displayWindow (QUOTE cachedSlide) restOfSlides] (* * Return the first line of text in the slide) (if (WINDOWPROP displayWindow (QUOTE TEXTSTREAM)) then [SlideTitle (TEXTSTREAM displayWindow) 1 (ADD1 (fetch TEXTLEN of (TEXTOBJ (TEXTSTREAM displayWindow] else "{empty}"]) (CreateSlideProjector [LAMBDA NIL (* smL "13-Jan-86 13:15") (* * Create a new slide window, putting it to the right of any current slide windows) (LET [(projectorControlMenu (create MENU ITEMS ←[BQUOTE ((, SlideProjectorNextButtonBM Next NIL (SUBITEMS Next Flip Last)) (, SlideProjectorBackButtonBM Prev NIL (SUBITEMS Prev Flip First] CENTERFLG ← T WHENSELECTEDFN ←(FUNCTION SlideProjectorButtonPushed) WHENHELDFN ←(FUNCTION NILL) WHENUNHELDFN ←(FUNCTION NILL))) (projectorItemMenu (create MENU ITEMS ←[QUOTE (HardCopy Paint Remote (Quit Quit NIL (SUBITEMS Quit Shrink] MENUROWS ← 2 CENTERFLG ← T WHENSELECTEDFN ←(FUNCTION SlideProjectorButtonPushed) WHENHELDFN ←(FUNCTION NILL) WHENUNHELDFN ←(FUNCTION NILL] (LET ((newSlide (CREATEW (create REGION LEFT ← SCREENWIDTH BOTTOM ← 0 WIDTH ← MaxSlideWidth HEIGHT ← SCREENHEIGHT) NIL SlideBorderSize)) (attachedWindow (CREATEW (create REGION LEFT ← SCREENWIDTH BOTTOM ← 0 WIDTH ← MaxSlideWidth HEIGHT ←(MAX (PLUS (HEIGHTIFWINDOW (FONTPROP SlidePromptWindowFont (QUOTE HEIGHT)) NIL 1) (HEIGHTIFWINDOW (FONTPROP SlideTitleWindowFont (QUOTE HEIGHT)) NIL 1)) (fetch IMAGEHEIGHT of projectorControlMenu) (fetch IMAGEHEIGHT of projectorItemMenu))) NIL 0))) (* * Attach the sub-window to the bottom of the main slide window) (ATTACHWINDOW attachedWindow newSlide (QUOTE BOTTOM) (QUOTE LEFT)) (WINDOWPROP attachedWindow (QUOTE TOTOPFN) NIL) (* * None of the windows should have a RIGHTBUTTONFN) (WINDOWPROP attachedWindow (QUOTE RIGHTBUTTONFN) (FUNCTION NILL)) (WINDOWPROP newSlide (QUOTE RIGHTBUTTONFN) (FUNCTION NILL)) (WINDOWPROP newSlide (QUOTE BUTTONEVENTFN) (FUNCTION NILL)) (* * Remember all the menus and windows on the main window) (WINDOWPROP newSlide (QUOTE attachedWindow) attachedWindow) (WINDOWPROP newSlide (QUOTE projectorItemMenu) projectorItemMenu) (WINDOWPROP newSlide (QUOTE projectorControlMenu) projectorControlMenu) (* * Set up the limits to shaping the windows - this fixes the height of both windows) [WINDOWPROP attachedWindow (QUOTE MINSIZE) (CONS 0 (fetch HEIGHT of (WINDOWPROP attachedWindow (QUOTE REGION] [WINDOWPROP attachedWindow (QUOTE MAXSIZE) (CONS MaxSlideWidth (fetch HEIGHT of (WINDOWPROP attachedWindow (QUOTE REGION] [WINDOWPROP newSlide (QUOTE MINSIZE) (CONS 0 (DIFFERENCE SCREENHEIGHT (fetch HEIGHT of (WINDOWPROP attachedWindow (QUOTE REGION] [WINDOWPROP newSlide (QUOTE MAXSIZE) (CONS MaxSlideWidth (DIFFERENCE SCREENHEIGHT (fetch HEIGHT of (WINDOWPROP attachedWindow (QUOTE REGION] (* * Expanding should bring back the current display window and adjust the shape of all others to fit) [WINDOWADDPROP newSlide (QUOTE EXPANDFN) (FUNCTION (LAMBDA (slideWindow) (SETQ ShrunkenSlides (DREMOVE slideWindow ShrunkenSlides)) (ReshapeSlideProjectors) (ViewParticularSlide slideWindow (WINDOWPROP slideWindow (QUOTE currentSlideStart)) (WINDOWPROP slideWindow (QUOTE currentWindow)) (WINDOWPROP slideWindow (QUOTE reserveWindow] (* * Add to the list of slide windows and reshape them all to fit) (SETQ OpenSlides (NCONC1 OpenSlides newSlide)) (ReshapeSlideProjectors) (* * Paint them all black) (DSPTEXTURE BLACKSHADE newSlide) (DSPRESET newSlide) (CLEARW newSlide) (DSPTEXTURE BLACKSHADE attachedWindow) (DSPRESET attachedWindow) (REDISPLAYW attachedWindow) (* * That's all) newSlide]) (InitSlideProjector [LAMBDA NIL (* smL "13-Jan-86 10:56") (* * Create the backdrop slide window, then shrink it down to its icon) (LET ((projectionScreenIcon (ICONW ProjectionScreenIcon ProjectionScreenIconMask ProjectorScreenPos))) (* * Init some globals) [SETQ SlideMarginWidth (PLUS 10 (MAX (BITMAPWIDTH HandShadow) (BITMAPWIDTH BigArrowShadow) (BITMAPWIDTH EmptySlideProjectorIconMask) (BITMAPWIDTH RolledUpScreenIcon] (SETQ SlideProjectionScreen (CREATEW (create REGION LEFT ← 0 BOTTOM ← 0 WIDTH ← SCREENWIDTH HEIGHT ← SCREENHEIGHT) NIL 0)) (* * Initialize the background) (DSPTEXTURE GRAYSHADE SlideProjectionScreen) (DSPRESET SlideProjectionScreen) (* * Add the various icons) (* First a couple of pointers) (WINDOWADDPROP SlideProjectionScreen (QUOTE iconWindows) (BIGCW [create POSITION XCOORD ←(PLUS (DIFFERENCE SCREENWIDTH SlideMarginWidth) (QUOTIENT (DIFFERENCE SlideMarginWidth (BITMAPWIDTH HandShadow)) 2)) YCOORD ←(DIFFERENCE SCREENHEIGHT (PLUS 5 ( BITMAPHEIGHT HandShadow] Hand HandShadow)) (WINDOWADDPROP SlideProjectionScreen (QUOTE iconWindows) (BIGCW [create POSITION XCOORD ←(PLUS (DIFFERENCE SCREENWIDTH SlideMarginWidth) (QUOTIENT (DIFFERENCE SlideMarginWidth (BITMAPWIDTH BigArrowShadow)) 2)) YCOORD ←(DIFFERENCE SCREENHEIGHT (PLUS 10 ( BITMAPHEIGHT HandShadow) ( BITMAPHEIGHT BigArrowShadow] BigArrowIcon BigArrowShadow)) (* Then an empty slide projector icon) (WINDOWADDPROP SlideProjectionScreen (QUOTE iconWindows) (LET [(projectorIcon (ICONW EmptySlideProjectorIcon EmptySlideProjectorIconMask (create POSITION XCOORD ←(PLUS (DIFFERENCE SCREENWIDTH SlideMarginWidth) (QUOTIENT (DIFFERENCE SlideMarginWidth (BITMAPWIDTH EmptySlideProjectorIconMask)) 2)) YCOORD ← 5] (WINDOWPROP projectorIcon (QUOTE BUTTONEVENTFN) (FUNCTION ProjectorIconButtonEventFn)) projectorIcon)) (* And an icon for rolling up the screen) (WINDOWADDPROP SlideProjectionScreen (QUOTE iconWindows) (LET [(rollUpIcon (ICONW RolledUpScreenIcon RolledUpScreenMask (create POSITION XCOORD ←(PLUS (DIFFERENCE SCREENWIDTH SlideMarginWidth) (QUOTIENT (DIFFERENCE SlideMarginWidth (BITMAPWIDTH RolledUpScreenIcon)) 2)) YCOORD ←(PLUS 10 (BITMAPHEIGHT EmptySlideProjectorIconMask] [WINDOWPROP rollUpIcon (QUOTE BUTTONEVENTFN) (FUNCTION (LAMBDA (window) (if (MOUSESTATE LEFT) then (MOVEW window) elseif (MOUSESTATE MIDDLE) then (while (NOT (MOUSESTATE UP)) do (BLOCK)) (SHRINKW SlideProjectionScreen) (for w in (OPENWINDOWS) do (MOVEW w (fetch LEFT of (WINDOWPROP w (QUOTE REGION))) (fetch BOTTOM of (WINDOWPROP w (QUOTE REGION] rollUpIcon)) (* * Glue the various windows to the top of the backdrop) (WINDOWADDPROP SlideProjectionScreen (QUOTE SHRINKFN) (FUNCTION SlideScreenCloseFn)) (WINDOWADDPROP SlideProjectionScreen (QUOTE CLOSEFN) (FUNCTION SlideScreenCloseFn)) (WINDOWADDPROP SlideProjectionScreen (QUOTE OPENFN) (FUNCTION SlideScreenOpenFn)) (WINDOWADDPROP SlideProjectionScreen (QUOTE EXPANDFN) (FUNCTION SlideScreenOpenFn)) (* * The background should have no button events) (WINDOWPROP SlideProjectionScreen (QUOTE BUTTONEVENTFN) (FUNCTION NILL)) (WINDOWPROP SlideProjectionScreen (QUOTE RIGHTBUTTONFN) (FUNCTION NILL)) (* * Shrink it down to its cute icon) (WINDOWPROP SlideProjectionScreen (QUOTE ICON) projectionScreenIcon) (SHRINKW SlideProjectionScreen) SlideProjectionScreen]) (LoadedProjectorRightButtonFn [LAMBDA (window) (* smL "30-Jan-86 15:09") (* * Replaces the standard fn DOWINDOWCOM for the loaded projector icon) (SELECTQ [MENU (create MENU CENTERFLG ← T ITEMS ←(QUOTE (Close Move Expand] (Expand (EXPANDW window)) (Move (MOVEW window)) [Close (LET [(mainMenu (WINDOWPROP window (QUOTE mainMenu] (EXPANDW window) (DOSELECTEDITEM mainMenu (QUOTE Quit) (QUOTE LEFT] NIL]) (ProjectionScreenButtonEventFn [LAMBDA (window) (* smL " 9-Dec-85 15:08") (* Comment) (if (MOUSESTATE LEFT) then (MOVEW window) elseif (MOUSESTATE MIDDLE) then (OpenProjectorScreen window) else NIL]) (ProjectorIconButtonEventFn [LAMBDA (icon) (* smL " 8-Jan-86 13:09") (* * The empty projector was buttoned -- so load up the projector) (DECLARE (GLOBALVARS UNSCHEDULEDPROMPTREGION)) (if (MOUSESTATE LEFT) then (MOVEW icon) elseif (AND (MOUSESTATE MIDDLE) (OBTAIN.MONITORLOCK PromptForWordLock T)) then (CLOSEW icon) (LET [(file (MENU (create MENU ITEMS ←[CONS (QUOTE (**other** (QUOTE **other**) "Let you type in a file name")) (SORT (for file in (for fileSpec in SlideFiles join (DIRECTORY fileSpec)) collect (* strip off connected directory from from of file name) (LIST [if (STRPOS (DIRECTORYNAME T) file 1 NIL T NIL ( UPPERCASEARRAY)) then (SUBSTRING file (ADD1 (NCHARS (DIRECTORYNAME T))) (SUB1 (OR (STRPOS ";" file) 0))) else (SUBSTRING file 1 (SUB1 (OR (STRPOS ";" file) 0] (KWOTE file] CENTERFLG ← T TITLE ← "Slide file?"] [if (EQ file (QUOTE **other**)) then (SETQ file (LET ((promptWindow (CREATEW UNSCHEDULEDPROMPTREGION NIL 15))) (PROG1 (PROMPTFORFILENAME promptWindow NIL "Slide file (CR to abort): ") (CLOSEW promptWindow] (if (NULL file) then NIL elseif (FINDFILE file) then (ShowSlideFile (CreateSlideProjector) file) else (RINGBELLS))) (OPENW icon]) (ReshapeSlideProjectors [LAMBDA NIL (* smL "11-Dec-85 17:34") (* * Shape the slide projectors to tile the screen) (LET ((currentUsedProjectors (for w in OpenSlides when (OPENWP w) collect w))) (if currentUsedProjectors then (for slide in currentUsedProjectors as i from 0 bind width offset attachedWindow projectorItemMenu projectorControlMenu currentDisplay first [SETQ width (MIN MaxSlideWidth (QUOTIENT (DIFFERENCE SCREENWIDTH SlideMarginWidth) (LENGTH currentUsedProjectors] (SETQ offset (QUOTIENT (DIFFERENCE (DIFFERENCE SCREENWIDTH SlideMarginWidth) (TIMES width (LENGTH currentUsedProjectors))) 2)) do (SETQ attachedWindow (WINDOWPROP slide (QUOTE attachedWindow))) (SETQ projectorItemMenu (WINDOWPROP slide (QUOTE projectorItemMenu)) ) (SETQ projectorControlMenu (WINDOWPROP slide (QUOTE projectorControlMenu))) (SETQ currentDisplay (WINDOWPROP slide (QUOTE currentWindow))) (* Change the min and max width of the windows to the new width) [WINDOWPROP slide (QUOTE MINSIZE) (CONS width (CDR (WINDOWPROP slide (QUOTE MINSIZE] [WINDOWPROP slide (QUOTE MAXSIZE) (CONS width (CDR (WINDOWPROP slide (QUOTE MAXSIZE] [WINDOWPROP attachedWindow (QUOTE MINSIZE) (CONS width (CDR (WINDOWPROP attachedWindow (QUOTE MINSIZE] [WINDOWPROP attachedWindow (QUOTE MAXSIZE) (CONS width (CDR (WINDOWPROP attachedWindow (QUOTE MAXSIZE] (* Take off the menus for now so the attached window can be reshaped) (DELETEMENU projectorItemMenu) (DELETEMENU projectorControlMenu) (* Reshape the window sets) (SHAPEW slide (create REGION LEFT ← (PLUS offset (TIMES width i)) WIDTH ← width BOTTOM ← 0 HEIGHT ← SCREENHEIGHT)) [if (AND currentDisplay (OPENWP currentDisplay)) then (SHAPEW currentDisplay (CREATEREGION [PLUS (WINDOWPROP slide (QUOTE BORDER)) (fetch LEFT of (WINDOWPROP slide (QUOTE REGION] [PLUS (WINDOWPROP slide (QUOTE BORDER)) (fetch BOTTOM of (WINDOWPROP slide (QUOTE REGION] (WINDOWPROP slide (QUOTE WIDTH)) (WINDOWPROP slide (QUOTE HEIGHT] [SHAPEW attachedWindow (create REGION LEFT ← (PLUS offset (TIMES width i)) WIDTH ← width BOTTOM ← 0 HEIGHT ← (CDR (WINDOWPROP attachedWindow (QUOTE MAXSIZE] (* Put the menus back) (CLEARW attachedWindow) (ADDMENU projectorItemMenu attachedWindow (create POSITION XCOORD ← 0 YCOORD ← (QUOTIENT (DIFFERENCE (WINDOWPROP attachedWindow (QUOTE HEIGHT) ) (fetch IMAGEHEIGHT of projectorItemMenu)) 2))) (ADDMENU projectorControlMenu attachedWindow (create POSITION XCOORD ← (DIFFERENCE width (fetch IMAGEWIDTH of projectorControlMenu)) YCOORD ← (QUOTIENT (DIFFERENCE (WINDOWPROP attachedWindow (QUOTE HEIGHT) ) (fetch IMAGEHEIGHT of projectorControlMenu)) 2))) (* Note the areas to be used for the file and slide names) [LET [(left (fetch IMAGEWIDTH of projectorItemMenu)) (width (DIFFERENCE width (PLUS (fetch IMAGEWIDTH of projectorControlMenu) (fetch IMAGEWIDTH of projectorItemMenu] [WINDOWPROP attachedWindow (QUOTE titleRegion) (CREATEREGION left (DIFFERENCE (WINDOWPROP attachedWindow (QUOTE HEIGHT)) (FONTPROP SlideTitleWindowFont (QUOTE HEIGHT))) width (FONTPROP SlideTitleWindowFont (QUOTE HEIGHT] (WINDOWPROP attachedWindow (QUOTE slideNameRegion) (CREATEREGION left 0 width (FONTPROP SlidePromptWindowFont (QUOTE HEIGHT] (* Update the info in the attached window) (UpdateSlideProjectorTitleWindow slide]) (ShapeWindowToMaxSize [LAMBDA (window) (* smL "10-Dec-85 17:56") (* * Shape the window to the MAXSIZE property) (SHAPEW window (create REGION copying (WINDOWPROP window (QUOTE REGION)) WIDTH ← (CAR (WINDOWPROP window (QUOTE MAXSIZE))) HEIGHT ← (CDR (WINDOWPROP window (QUOTE MAXSIZE]) (ShowSlideFile [LAMBDA (slideWindow file) (* smL "13-Jan-86 13:13") (* * Start the given slide window viewing the given file - this may take a while, so change the cursor) (RESETLST (RESETSAVE (CURSOR WAITINGCURSOR)) (RESETSAVE (PRIN1 "Opening and formating slide stream..." slideWindow) (LIST (FUNCTION CLEARW) slideWindow)) (LET* ((fileStream (OPENSTREAM file (QUOTE INPUT))) (slideTextStream (OPENTEXTSTREAM fileStream))) (* * Remember the beginning of each slide in the file) (TERPRI slideWindow) (PRINT 1 slideWindow) [WINDOWPROP slideWindow (QUOTE slideStarts) (NCONC1 [CONS 0 (for slideNumber from 2 bind (slideStart ← 1) while (NUMBERP (SETQ slideStart (TEDIT.FIND slideTextStream [CONSTANT (MKSTRING (CHARACTER (CHARCODE FF] slideStart))) collect (PRINT slideNumber slideWindow) (SETQ slideStart (PLUS slideStart 1] (PLUS 2 (fetch TEXTLEN of (TEXTOBJ slideTextStream] (WINDOWPROP slideWindow (QUOTE sourceTextStream) slideTextStream) (* * Remember the file) (WINDOWPROP slideWindow (QUOTE slideFile) fileStream) (* * Remember what slide we are looking at - The ugly NIL hack is just to get things started) [WINDOWPROP slideWindow (QUOTE currentSlideStart) (CONS NIL (WINDOWPROP slideWindow (QUOTE slideStarts] (* * Create and remember a couple of display windows for the projector) (WINDOWPROP slideWindow (QUOTE currentWindow) (CREATEW (create REGION LEFT ← SCREENWIDTH BOTTOM ← 0 WIDTH ← MaxSlideWidth HEIGHT ← SCREENHEIGHT) NIL 0 T)) (WINDOWPROP slideWindow (QUOTE reserveWindow) (CREATEW (create REGION LEFT ← SCREENWIDTH BOTTOM ← 0 WIDTH ← MaxSlideWidth HEIGHT ← SCREENHEIGHT) NIL 0 T)) (* * Cache a rand-access menu of the various slides) [WINDOWPROP slideWindow (QUOTE flipMenu) (create MENU CENTERFLG ← T TITLE ← "Which slide?" ITEMS ←(for i on (WINDOWPROP slideWindow (QUOTE slideStarts) ) when (CDR i) collect (LIST (SlideTitle (WINDOWPROP slideWindow (QUOTE sourceTextStream)) (ADD1 (CAR i)) (CADR i)) (KWOTE i] (* * Show the title of the file in the title area) [WINDOWPROP slideWindow (QUOTE nextSlideTitle) (CacheSlide slideWindow (WINDOWPROP slideWindow (QUOTE slideStarts)) (WINDOWPROP slideWindow (QUOTE reserveWindow] (UpdateSlideProjectorTitleWindow slideWindow]) (SlideProjectorButtonPushed [LAMBDA (item menu button) (* smL "30-Jan-86 15:04") (* * Act on a selected menu item) (DECLARE (GLOBALVARS HIGHLIGHTSHADE)) (RESETLST (RESETSAVE (SHADEITEM item menu HIGHLIGHTSHADE) (LIST (FUNCTION SHADEITEM) item menu WHITESHADE)) (LET [(slideWindow (WINDOWPROP (WFROMMENU menu) (QUOTE MAINWINDOW] (SELECTQ (if (LISTP item) then (CADR item) else item) [Paint (if (OPENWP (WINDOWPROP slideWindow (QUOTE currentWindow))) then (PAINTW (WINDOWPROP slideWindow (QUOTE currentWindow] (Shrink (SHADEITEM item menu WHITESHADE) [if (WINDOWPROP slideWindow (QUOTE currentWindow)) then (CLOSEW (WINDOWPROP slideWindow (QUOTE currentWindow] [SHRINKW slideWindow (OR (WINDOWPROP slideWindow (QUOTE ICONWINDOW)) (TITLEDICONW (create TITLEDICON ICON ← SlideProjectorIcon MASK ← SlideProjectorIconMask TITLEREG ←(CREATEREGION 2 2 (DIFFERENCE (BITMAPWIDTH SlideProjectorIcon) 4) 12)) (OR (FILENAMEFIELD [AND (WINDOWPROP slideWindow (QUOTE slideFile)) (OPENP (WINDOWPROP slideWindow (QUOTE slideFile] (QUOTE NAME)) "") (FONTCREATE (QUOTE HELVETICA) 6) (GETBOXPOSITION (BITMAPWIDTH SlideProjectorIcon) (BITMAPHEIGHT SlideProjectorIcon] (WINDOWPROP (WINDOWPROP slideWindow (QUOTE ICONWINDOW)) (QUOTE CLOSEFN) NIL) (WINDOWPROP (WINDOWPROP slideWindow (QUOTE ICONWINDOW)) (QUOTE RIGHTBUTTONFN) (FUNCTION LoadedProjectorRightButtonFn)) (WINDOWPROP (WINDOWPROP slideWindow (QUOTE ICONWINDOW)) (QUOTE mainMenu) menu) (push ShrunkenSlides slideWindow) (ReshapeSlideProjectors)) (Quit (TEDIT.QUIT (WINDOWPROP slideWindow (QUOTE sourceTextStream))) (CLOSEF? (WINDOWPROP slideWindow (QUOTE slideFile))) (CLOSEW (WINDOWPROP slideWindow (QUOTE reserveWindow))) (CLOSEW (WINDOWPROP slideWindow (QUOTE currentWindow))) (CLOSEW slideWindow) (SETQ OpenSlides (DREMOVE slideWindow OpenSlides)) (ReshapeSlideProjectors)) [Next (if (CDDR (WINDOWPROP slideWindow (QUOTE currentSlideStart))) then (ViewParticularSlide slideWindow (CDR (WINDOWPROP slideWindow (QUOTE currentSlideStart))) (WINDOWPROP slideWindow (QUOTE reserveWindow)) (WINDOWPROP slideWindow (QUOTE currentWindow))) else (* at the last slide) (ViewParticularSlide slideWindow (CONS NIL (WINDOWPROP slideWindow (QUOTE slideStarts))) (WINDOWPROP slideWindow (QUOTE reserveWindow)) (WINDOWPROP slideWindow (QUOTE currentWindow] [Prev (if [NULL (CAR (WINDOWPROP slideWindow (QUOTE currentSlideStart] then (* at the blank slide between the first and last) (DOSELECTEDITEM menu (QUOTE Last) button) elseif (EQ (WINDOWPROP slideWindow (QUOTE slideStarts)) (WINDOWPROP slideWindow (QUOTE currentSlideStart))) then (* at the first slide) (ViewParticularSlide slideWindow (CONS NIL (WINDOWPROP slideWindow (QUOTE slideStarts))) (WINDOWPROP slideWindow (QUOTE reserveWindow)) (WINDOWPROP slideWindow (QUOTE currentWindow))) else (ViewParticularSlide slideWindow [for remaining on (WINDOWPROP slideWindow (QUOTE slideStarts)) thereis (EQ (CDR remaining) (WINDOWPROP slideWindow (QUOTE currentSlideStart] (WINDOWPROP slideWindow (QUOTE reserveWindow)) (WINDOWPROP slideWindow (QUOTE currentWindow] (Remote (* Clobber the right button fn for the background) [RESETSAVE (WINDOWPROP SlideProjectionScreen (QUOTE RIGHTBUTTONFN) (FUNCTION NULL)) (LIST (FUNCTION WINDOWPROP) SlideProjectionScreen (QUOTE RIGHTBUTTONFN) (WINDOWPROP SlideProjectionScreen (QUOTE RIGHTBUTTONFN] (until (MOUSESTATE MIDDLE) do (if (MOUSESTATE LEFT) then (* next slide) (until (MOUSESTATE UP) do NIL) (DOSELECTEDITEM menu (QUOTE Next) (QUOTE LEFT)) elseif (MOUSESTATE RIGHT) then (* prev) (until (MOUSESTATE UP) do NIL) (DOSELECTEDITEM menu (QUOTE Prev) (QUOTE LEFT))) (* don't keep triggering on this button) finally (until (MOUSESTATE UP) do NIL))) [Last (ViewParticularSlide slideWindow (NLEFT (WINDOWPROP slideWindow (QUOTE slideStarts)) 2) (WINDOWPROP slideWindow (QUOTE reserveWindow)) (WINDOWPROP slideWindow (QUOTE currentWindow] [First (ViewParticularSlide slideWindow (WINDOWPROP slideWindow (QUOTE slideStarts)) (WINDOWPROP slideWindow (QUOTE reserveWindow)) (WINDOWPROP slideWindow (QUOTE currentWindow] [Flip (LET [(slide (MENU (WINDOWPROP slideWindow (QUOTE flipMenu] (if slide then (ViewParticularSlide slideWindow slide (WINDOWPROP slideWindow (QUOTE reserveWindow)) (WINDOWPROP slideWindow (QUOTE currentWindow] [HardCopy (HARDCOPYW (WINDOWPROP slideWindow (QUOTE currentWindow] (NIL NIL) (SHOULDNT (CONS "Unknown menu item" item]) (SlideRandAccessMenuFn [LAMBDA (item menu button) (* smL "13-Jan-86 12:44") (* * The WHENSELECTEDFN for the slide rand-access menu) (LET [(slideWindow (GETMENUPROP menu (QUOTE slideWindow] (ViewParticularSlide slideWindow (CADR item) (WINDOWPROP slideWindow (QUOTE reserveWindow)) (WINDOWPROP slideWindow (QUOTE currentWindow]) (SlideScreenCloseFn [LAMBDA (projectionScreen) (* smL " 7-Jan-86 16:49") (* * The CLOSE method for the projector screen) (for w in (WINDOWPROP projectionScreen (QUOTE iconWindows)) do (CLOSEW w)) (for w in OpenSlides do (if (MEMB w ShrunkenSlides) then (CLOSEW (WINDOWPROP w (QUOTE ICONWINDOW))) else (CLOSEW (WINDOWPROP w (QUOTE currentWindow))) (CLOSEW w))) (* Bring back all the original windows) (for windowDescr in (WINDOWPROP projectionScreen (QUOTE screenWindows)) do (MOVEW (CAR windowDescr) (CDR windowDescr))) (WINDOWPROP projectionScreen (QUOTE screenWindows) NIL]) (SlideScreenOpenFn [LAMBDA (projectionScreen) (* smL " 7-Jan-86 16:45") (* * The OPEN method for the projector screen) (* Get rid of all the existing windows) [for window in (OPENWINDOWS) when (AND (NEQ window projectionScreen) [NOT (MEMB window (WINDOWPROP projectionScreen (QUOTE iconWindows] (EQ window (MAINWINDOW window T))) do (WINDOWADDPROP projectionScreen (QUOTE screenWindows) (CONS window (create POSITION XCOORD ←(fetch LEFT of (WINDOWPROP window (QUOTE REGION))) YCOORD ←(fetch BOTTOM of (WINDOWPROP window (QUOTE REGION] (for window in (OPENWINDOWS) when [AND (NEQ window projectionScreen) [NOT (MEMB window (WINDOWPROP projectionScreen (QUOTE iconWindows] (EQ window (MAINWINDOW window T)) (REGIONSINTERSECTP (WINDOWPROP window (QUOTE REGION)) (CONSTANT (CREATEREGION 0 0 SCREENWIDTH SCREENHEIGHT] do (MOVEW window (TIMES 2 SCREENHEIGHT) (TIMES 2 SCREENWIDTH))) (* Open the icon windows on the screen) (for w in (WINDOWPROP projectionScreen (QUOTE iconWindows)) do (OPENW w)) (* Open any existing slides) (for w in OpenSlides do (if (MEMB w ShrunkenSlides) then (OPENW (WINDOWPROP w (QUOTE ICONWINDOW))) else (OPENW w) (ViewParticularSlide w (WINDOWPROP w (QUOTE currentSlideStart)) (WINDOWPROP w (QUOTE currentWindow)) (WINDOWPROP w (QUOTE reserveWindow]) (SlideTitle [LAMBDA (textStream startPos endPos) (* smL "13-Jan-86 11:25") (* * Return the first line of text in the slide) (OR (bind (start ← startPos) end line while (AND [SETQ end (TEDIT.FIND textStream (CONSTANT (CHARACTER (CHARCODE EOL))) start (fetch TEXTLEN of (TEXTOBJ textStream] (LEQ end endPos)) do (* get the next full line) (TEDIT.SETSEL textStream start (ADD1 (DIFFERENCE end start)) (QUOTE LEFT)) (* Ugh -- then NLSETQ is needed in case there is an imageobject in the slide) [SETQ line (CAR (OR (NLSETQ (TEDIT.SEL.AS.STRING textStream)) (QUOTE ("{image object}"] (TEDIT.SETSEL textStream 1 0 (QUOTE LEFT)) (* Strip off any trailing white space) (while [MEMB (NTHCHARCODE line (NCHARS line)) (CONSTANT (LIST (CHARCODE NULL) (CHARCODE SP) (CHARCODE TAB) (CHARCODE LF) (CHARCODE CR) (CHARCODE EOL] do (GLC line)) (* Strip off any leading white space) (while [MEMB (CHCON1 line) (CONSTANT (LIST (CHARCODE NULL) (CHARCODE SP) (CHARCODE TAB) (CHARCODE LF) (CHARCODE CR) (CHARCODE EOL] do (GNC line)) (* If there is anything left, use it it, otherwise try the next line) (if (EQUAL line "") then (SETQ start (ADD1 end)) else (RETURN line))) ""]) (UpdateSlideProjectorTitleWindow [LAMBDA (slideWindow) (* smL " 7-Jan-86 16:26") (* Comment) (RESETLST (LET [(attachedWindow (WINDOWPROP slideWindow (QUOTE attachedWindow))) [fileName (AND (WINDOWPROP slideWindow (QUOTE slideFile)) (OPENP (WINDOWPROP slideWindow (QUOTE slideFile] (nextSlideTitle (WINDOWPROP slideWindow (QUOTE nextSlideTitle] (REDISPLAYW attachedWindow) (RESETSAVE (DSPSOURCETYPE (QUOTE INVERT) attachedWindow) (LIST (FUNCTION DSPSOURCETYPE) (DSPSOURCETYPE NIL attachedWindow) attachedWindow)) (LET [(titleRegion (WINDOWPROP attachedWindow (QUOTE titleRegion))) (slideNameRegion (WINDOWPROP attachedWindow (QUOTE slideNameRegion] (RESETSAVE (DSPFONT SlideTitleWindowFont attachedWindow) (LIST (FUNCTION DSPFONT) (DSPFONT NIL attachedWindow) attachedWindow)) (RESETSAVE (DSPCLIPPINGREGION titleRegion attachedWindow) (LIST (FUNCTION DSPCLIPPINGREGION) (DSPCLIPPINGREGION NIL attachedWindow) attachedWindow)) (if fileName then (CENTERPRINTINREGION (FILENAMEFIELD fileName (QUOTE NAME)) titleRegion attachedWindow)) (DSPFONT SlidePromptWindowFont attachedWindow) (DSPCLIPPINGREGION slideNameRegion attachedWindow) (if nextSlideTitle then (CENTERPRINTINREGION (CONCAT "next: " nextSlideTitle) slideNameRegion attachedWindow]) (ViewParticularSlide [LAMBDA (slideWindow restOfSlides displayWindow extraWindow) (* smL "12-Dec-85 12:01") (* * Show the particular slide in the window. displayWindow is the window to use, extraWindow is the currently used window) (* * Get rid of the extra display) (MOVEW extraWindow SCREENWIDTH 0) (CLOSEW extraWindow) (WINDOWPROP extraWindow (QUOTE cachedSlide) NIL) (WINDOWPROP slideWindow (QUOTE reserveWindow) extraWindow) (* * Copy the slide into the new window, making it the current window) [SHAPEW displayWindow (create REGION LEFT ← SCREENWIDTH BOTTOM ← 0 WIDTH ← (WINDOWPROP slideWindow (QUOTE WIDTH)) HEIGHT ← (WINDOWPROP slideWindow (QUOTE HEIGHT] (CacheSlide slideWindow restOfSlides displayWindow) (WINDOWPROP slideWindow (QUOTE currentWindow) displayWindow) (* * Remember where we are in the file) (WINDOWPROP slideWindow (QUOTE currentSlideStart) restOfSlides) (* * Now that it is formatted, put the window in its visible place) (if (WINDOWPROP displayWindow (QUOTE TEXTSTREAM)) then (* actually viewing a slide) [MOVEW displayWindow [PLUS (WINDOWPROP slideWindow (QUOTE BORDER)) (fetch LEFT of (WINDOWPROP slideWindow (QUOTE REGION] (PLUS (WINDOWPROP slideWindow (QUOTE BORDER)) (fetch BOTTOM of (WINDOWPROP slideWindow (QUOTE REGION] else (* an "empty" slide) NIL) (* * If there are more slides, cache the next one) (if (CDDR restOfSlides) then (WINDOWPROP slideWindow (QUOTE nextSlideTitle) (CacheSlide slideWindow (CDR restOfSlides) extraWindow)) else (WINDOWPROP slideWindow (QUOTE nextSlideTitle) "{no more slides}")) (UpdateSlideProjectorTitleWindow slideWindow]) ) (* * Bitmaps for all the cute icons) (RPAQ SlideProjectorBackButtonBM (READBITMAP)) (16 14 "@@@@" "@@@@" "AN@@" "COCH" "COBD" "COBD" "BACH" "BABD" "COBD" "COBD" "COCH" "AN@@" "@@@@" "@@@@") (RPAQ SlideProjectorNextButtonBM (READBITMAP)) (16 14 "@@@@" "@@@@" "AN@@" "COCL" "COB@" "COB@" "COCH" "COB@" "COB@" "COB@" "COB@" "AN@@" "@@@@" "@@@@") (RPAQ SlideProjectorIcon (READBITMAP)) (85 69 "@@@@@@@@AOOOOO@@@@@@@@@@" "@@@@@@@@FHBAAAO@@@@@@@@@" "@@@@@@@ALDCAACAL@@@@@@@@" "@@@@@@@F@GOOONCG@@@@@@@@" "@@@@@@@OOOOOOONAH@@@@@@@" "@@@@@@A@GOOOOONGL@@@@@@@" "@@@@@@C@OOOOOOOHL@@@@@@@" "@@@@@@COOOOOOOOHD@@@@@@@" "@@@@@@F@OOOOOOOOL@@@@@@@" "@@@@@@FCOOOOOOOHD@@@@@@@" "@@@@@@GNCOOOOOO@L@@@@@@@" "@@@@@@EHGOOOOOLOL@@@@@@@" "@@@@@@ENLCOOOOHID@@@@@@@" "@@@@@@ECLFDDDDOIG@@@@@@@" "@@@@@AMBGLDDDDLIGH@@@@@@" "@@@@AOEBDGOOOODIFL@@@@@@" "@@@@O@EBDDDDDDDIFF@@@@@@" "@@@CH@EBDDDDDDDIFC@@@@@@" "@@@GH@EBDDDDDDDIDAH@@@@@" "@@@FL@EBDDDDDDDID@H@@@@@" "@@@MF@EBDDDDDDDID@L@@@@@" "@@@JK@GBDDDDDDDIL@F@@@@@" "@@@MEHANDDDDDDDKHCN@@@@@" "@@@JJL@GLDDDDDELAOO@@@@@" "@@@MEF@@OLDDDENAONA@@@@@" "@@@JJK@@@OOOON@OO@A@@@@@" "@@@MEEH@@@@@@@OO@CA@@@@@" "@@@JJJL@@@@@@GOHAMA@@@@@" "@@@MEEF@@@@@GOHANAA@@@@@" "@@@JJJK@@@@COL@N@AA@@@@@" "@@@MEEEH@@COL@O@NAA@@@@@" "@@@JJJJL@AON@@HCNAA@@@@@" "@@@MEEEFAON@@@HC@AA@@@@@" "@@@JJJJKOO@@@@H@@AA@@@@@" "@@@MEEEEO@@@@@H@@AA@@@@@" "@@@JJJJK@AOH@@H@@AA@@@@@" "@@@MEEEE@CON@@H@@AA@@@@@" "@@@FJJJK@GOO@@H@@AA@@@@@" "@@@CEEEE@OOOH@H@@CA@@@@@" "@@@AJJJK@OOOL@H@ALA@@@@@" "@@@@MEEEAOOON@HAN@A@@@@@" "@@@@FJJKAOL@C@HN@@O@@@@@" "@@@@CEEEAOH@AHO@@OO@@@@@" "@@@@AJJKAO@GHH@@GOH@@@@@" "@@@@@MEEANAOLH@GOH@@@@@@" "@@@@@FJKANCONDCOL@@@@@@@" "@@@@@CEEANCOFOOL@@@@@@@@" "@@@@@AJKANGOBON@@@@@@@@@" "@@@@@@ME@NGNBN@@@@@@@@@@" "@@@@@@FK@NGLFH@@@@@@@@@@" "@@@@@@CE@GF@DH@@@@@@@@@@" "@@@@@@AK@GF@MH@@@@@@@@@@" "@@@@@@@MOOCAIH@@@@@@@@@@" "@@@@@@@COOIOC@@@@@@@@@@@" "OOOOOOOOOOHNGOOOOOOOOH@@" "L@@@@@@@@AN@L@@@@@@@AH@@" "H@@@@@@@@@CO@@@@@@@@@H@@" "H@@@@@@@@@@@@@@@@@@@@H@@" "H@@@@@@@@@@@@@@@@@@@@H@@" "H@@@@@@@@@@@@@@@@@@@@H@@" "H@@@@@@@@@@@@@@@@@@@@H@@" "H@@@@@@@@@@@@@@@@@@@@H@@" "H@@@@@@@@@@@@@@@@@@@@H@@" "H@@@@@@@@@@@@@@@@@@@@H@@" "H@@@@@@@@@@@@@@@@@@@@H@@" "H@@@@@@@@@@@@@@@@@@@@H@@" "H@@@@@@@@@@@@@@@@@@@@H@@" "L@@@@@@@@@@@@@@@@@@@AH@@" "OOOOOOOOOOOOOOOOOOOOOH@@") (RPAQ SlideProjectorIconMask (READBITMAP)) (85 69 "@@@@@@@@AOOOOO@@@@@@@@@@" "@@@@@@@@GOOOOOO@@@@@@@@@" "@@@@@@@AOOOOOOOL@@@@@@@@" "@@@@@@@GOOOOOOOO@@@@@@@@" "@@@@@@@OOOOOOOOOH@@@@@@@" "@@@@@@AOOOOOOOOOL@@@@@@@" "@@@@@@COOOOOOOOOL@@@@@@@" "@@@@@@COOOOOOOOOL@@@@@@@" "@@@@@@GOOOOOOOOOL@@@@@@@" "@@@@@@GOOOOOOOOOL@@@@@@@" "@@@@@@GOOOOOOOOOL@@@@@@@" "@@@@@@GOOOOOOOOOL@@@@@@@" "@@@@@@GOOOOOOOOOL@@@@@@@" "@@@@@@GOOOOOOOOOO@@@@@@@" "@@@@@AOOOOOOOOOOOH@@@@@@" "@@@@AOOOOOOOOOOOOL@@@@@@" "@@@@OOOOOOOOOOOOON@@@@@@" "@@@COOOOOOOOOOOOOO@@@@@@" "@@@GOOOOOOOOOOOOOOH@@@@@" "@@@GOOOOOOOOOOOOOOH@@@@@" "@@@OOOOOOOOOOOOOOOL@@@@@" "@@@OOOOOOOOOOOOOOON@@@@@" "@@@OOOOOOOOOOOOOOON@@@@@" "@@@OOOOOOOOOOOOOOOO@@@@@" "@@@OOOOOOOOOOOOOOOO@@@@@" "@@@OOOOOOOOOOOOOOOO@@@@@" "@@@OOOOOOOOOOOOOOOO@@@@@" "@@@OOOOOOOOOOOOOOOO@@@@@" "@@@OOOOOOOOOOOOOOOO@@@@@" "@@@OOOOOOOOOOOOOOOO@@@@@" "@@@OOOOOOOOOOOOOOOO@@@@@" "@@@OOOOOOOOOOOOOOOO@@@@@" "@@@OOOOOOOOOOOOOOOO@@@@@" "@@@OOOOOOOOOOOOOOOO@@@@@" "@@@OOOOOOOOOOOOOOOO@@@@@" "@@@OOOOOOOOOOOOOOOO@@@@@" "@@@OOOOOOOOOOOOOOOO@@@@@" "@@@GOOOOOOOOOOOOOOO@@@@@" "@@@COOOOOOOOOOOOOOO@@@@@" "@@@AOOOOOOOOOOOOOOO@@@@@" "@@@@OOOOOOOOOOOOOOO@@@@@" "@@@@GOOOOOOOOOOOOOO@@@@@" "@@@@COOOOOOOOOOOOOO@@@@@" "@@@@AOOOOOOOOOOOOOH@@@@@" "@@@@@OOOOOOOOOOOOH@@@@@@" "@@@@@GOOOOOOOOOOL@@@@@@@" "@@@@@COOOOOOOOOL@@@@@@@@" "@@@@@AOOOOOOOON@@@@@@@@@" "@@@@@@OOOOOOON@@@@@@@@@@" "@@@@@@GOOOOOOH@@@@@@@@@@" "@@@@@@COOOOOOH@@@@@@@@@@" "@@@@@@AOOOOOOH@@@@@@@@@@" "@@@@@@@OOOOOOH@@@@@@@@@@" "@@@@@@@GOOOOO@@@@@@@@@@@" "OOOOOOOOOOOOOOOOOOOOOH@@" "OOOOOOOOOOOOOOOOOOOOOH@@" "OOOOOOOOOOOOOOOOOOOOOH@@" "OOOOOOOOOOOOOOOOOOOOOH@@" "OOOOOOOOOOOOOOOOOOOOOH@@" "OOOOOOOOOOOOOOOOOOOOOH@@" "OOOOOOOOOOOOOOOOOOOOOH@@" "OOOOOOOOOOOOOOOOOOOOOH@@" "OOOOOOOOOOOOOOOOOOOOOH@@" "OOOOOOOOOOOOOOOOOOOOOH@@" "OOOOOOOOOOOOOOOOOOOOOH@@" "OOOOOOOOOOOOOOOOOOOOOH@@" "OOOOOOOOOOOOOOOOOOOOOH@@" "OOOOOOOOOOOOOOOOOOOOOH@@" "OOOOOOOOOOOOOOOOOOOOOH@@") (RPAQ EmptySlideProjectorIcon (READBITMAP)) (68 54 "@@@@@@@@@@@@@@@@@@@@" "@@@@@@@@@@@@@@@@@@@@" "@@@@@@@@@COON@@@@@@@" "@@@@@@@@AN@@AH@@@@@@" "@@@@@@@AO@@@@L@@@@@@" "@@@@@@@O@@@@@F@@@@@@" "@@@@@AOH@@@@@C@@@@@@" "@@@@@O@@@@@@@AH@@@@@" "@@@@OHAOOOON@@L@@@@@" "@@@GHAOH@@@CN@F@@@@@" "@@GL@O@@@@@@CHC@@@@@" "@CL@GH@BDIB@@LAH@@@@" "@N@@L@@@@@@@@G@L@@@@" "AN@AH@@HOOA@@A@F@@@@" "AK@A@@@HOOA@@@HB@@@@" "CEHA@@@@@@@@@A@C@@@@" "BJL@L@@BDIB@@A@AH@@@" "CEF@GH@@@@@@@N@OH@@@" "BJK@AO@@@@@@G@GOL@@@" "CEEH@COH@@@OHGOHD@@@" "BJJL@@AOOOOHCOL@D@@@" "CEEF@@@@@@@COL@LD@@@" "BJJK@@@@@@AON@GDD@@@" "CEEEH@@@@AON@GHDD@@@" "BJJJL@@@@OO@CH@DD@@@" "CEEEF@@@OO@CLCHDD@@@" "BJJJK@@GOH@B@OHDD@@@" "CEEEEHGOH@@B@L@DD@@@" "BJJJJOOL@@@B@@@DD@@@" "CEEEEGL@@@@B@@@DD@@@" "BJJJJL@GN@@B@@@DD@@@" "CEEEED@OOH@B@@@DD@@@" "AJJJJLAOOL@B@@@DD@@@" "@MEEEDCOON@B@@@LD@@@" "@FJJJLCOOO@B@@G@D@@@" "@CEEEDGOOOHB@GH@D@@@" "@AJJJLGO@@LBCH@CL@@@" "@@MEEDGN@@FCL@COL@@@" "@@FJJLGLANB@@AON@@@@" "@@CEEDGHGOB@AON@@@@@" "@@AJJLGHOOI@OO@@@@@@" "@@@MEDGHOMKOO@@@@@@@" "@@@FJLGIOLKOH@@@@@@@" "@@@CEDCIOHKH@@@@@@@@" "@@@AJLCIOAJ@@@@@@@@@" "@@@@MDAMHAB@@@@@@@@@" "@@@@FLAMHCF@@@@@@@@@" "@@@@CGOLLFF@@@@@@@@@" "@@@@AONNOLL@@@@@@@@@" "@@@@@@@BCIH@@@@@@@@@" "@@@@@@@CHC@@@@@@@@@@" "@@@@@@@@OL@@@@@@@@@@" "@@@@@@@@@@@@@@@@@@@@" "@@@@@@@@@@@@@@@@@@@@") (RPAQ EmptySlideProjectorIconMask (READBITMAP)) (68 54 "@@@@@@@@@@@@@@@@@@@@" "@@@@@@@@@@@@@@@@@@@@" "@@@@@@@@@COON@@@@@@@" "@@@@@@@@AOOOOH@@@@@@" "@@@@@@@AOOOOOL@@@@@@" "@@@@@@@OOOOOON@@@@@@" "@@@@@AOOOOOOOO@@@@@@" "@@@@@OOOOOOOOOH@@@@@" "@@@@OOOOOOOOOOL@@@@@" "@@@GOOOOOOOOOON@@@@@" "@@GOOOOOOOOOOOO@@@@@" "@COOOOOOOOOOOOOH@@@@" "@OOOOOOOOOOOOOOL@@@@" "AOOOOOOOOOOOOOON@@@@" "AOOOOOOOOOOOOOON@@@@" "COOOOOOOOOOOOOOO@@@@" "COOOOOOOOOOOOOOOH@@@" "COOOOOOOOOOOOOOOH@@@" "COOOOOOOOOOOOOOOL@@@" "COOOOOOOOOOOOOOOL@@@" "COOOOOOOOOOOOOOOL@@@" "COOOOOOOOOOOOOOOL@@@" "COOOOOOOOOOOOOOOL@@@" "COOOOOOOOOOOOOOOL@@@" "COOOOOOOOOOOOOOOL@@@" "COOOOOOOOOOOOOOOL@@@" "COOOOOOOOOOOOOOOL@@@" "COOOOOOOOOOOOOOOL@@@" "COOOOOOOOOOOOOOOL@@@" "COOOOOOOOOOOOOOOL@@@" "COOOOOOOOOOOOOOOL@@@" "COOOOOOOOOOOOOOOL@@@" "AOOOOOOOOOOOOOOOL@@@" "@OOOOOOOOOOOOOOOL@@@" "@GOOOOOOOOOOOOOOL@@@" "@COOOOOOOOOOOOOOL@@@" "@AOOOOOOOOOOOOOOL@@@" "@@OOOOOOOOOOOOOOL@@@" "@@GOOOOOOOOOOOON@@@@" "@@COOOOOOOOOOON@@@@@" "@@AOOOOOOOOOOO@@@@@@" "@@@OOOOOOOOOO@@@@@@@" "@@@GOOOOOOOOH@@@@@@@" "@@@COOOOOOOH@@@@@@@@" "@@@AOOOOOON@@@@@@@@@" "@@@@OOOOOON@@@@@@@@@" "@@@@GOOOOON@@@@@@@@@" "@@@@COOOOON@@@@@@@@@" "@@@@AONOOOL@@@@@@@@@" "@@@@@@@COOH@@@@@@@@@" "@@@@@@@COO@@@@@@@@@@" "@@@@@@@@OL@@@@@@@@@@" "@@@@@@@@@@@@@@@@@@@@" "@@@@@@@@@@@@@@@@@@@@") (RPAQ ProjectionScreenIcon (READBITMAP)) (38 53 "@@@@@@@@@@@@" "@@@@@@@@@@@@" "@@@AOL@@@@@@" "@@@AHL@@@@@@" "COOOOOOOO@@@" "B@@@@@@@A@@@" "B@@@@@@@A@@@" "B@@@@@@@A@@@" "B@@@@@@@A@@@" "B@@@@@@@A@@@" "BANHA@@@A@@@" "BABHA@@@A@@@" "BA@JA@@@A@@@" "BA@HAGKLA@@@" "BANJODJ@A@@@" "B@BJIGKLA@@@" "B@BJID@DA@@@" "BABJIDJDA@@@" "BANJOGKLA@@@" "B@@@@@@@A@@@" "B@@@@@@@A@@@" "B@@@@@@@A@@@" "B@@@@@@@A@@@" "B@@@@@@@A@@@" "B@@@@@@@A@@@" "COOOOOOOO@@@" "COOOOOOOO@@@" "COOOOOOOO@@@" "@@@@B@@@@@@@" "@@@@B@@@@@@@" "@@@@B@@@@@@@" "@@@@B@@@@@@@" "@@@@B@@@@@@@" "@@@@B@@@@@@@" "@@@@B@@@@@@@" "@@@@B@@@@@@@" "@@@@G@@@@@@@" "@@@@OH@@@@@@" "@@@AOL@@@@@@" "@@@CFF@@@@@@" "@@@FFC@@@@@@" "@@@LFAH@@@@@" "@@AHF@L@@@@@" "@@C@F@F@@@@@" "@@F@F@C@@@@@" "@@L@F@AH@@@@" "@AH@F@@L@@@@" "@C@@F@@F@@@@" "@F@@F@@C@@@@" "@L@@F@@AH@@@" "AH@@F@@@L@@@" "@@@@@@@@@@@@" "@@@@@@@@@@@@") (RPAQ ProjectionScreenIconMask (READBITMAP)) (38 53 "@@@@@@@@@@@@" "@@@@@@@@@@@@" "@@@AOL@@@@@@" "@@@AOL@@@@@@" "COOOOOOOO@@@" "COOOOOOOO@@@" "COOOOOOOO@@@" "COOOOOOOO@@@" "COOOOOOOO@@@" "COOOOOOOO@@@" "COOOOOOOO@@@" "COOOOOOOO@@@" "COOOOOOOO@@@" "COOOOOOOO@@@" "COOOOOOOO@@@" "COOOOOOOO@@@" "COOOOOOOO@@@" "COOOOOOOO@@@" "COOOOOOOO@@@" "COOOOOOOO@@@" "COOOOOOOO@@@" "COOOOOOOO@@@" "COOOOOOOO@@@" "COOOOOOOO@@@" "COOOOOOOO@@@" "COOOOOOOO@@@" "COOOOOOOO@@@" "COOOOOOOO@@@" "@@@@G@@@@@@@" "@@@@G@@@@@@@" "@@@@G@@@@@@@" "@@@@G@@@@@@@" "@@@@G@@@@@@@" "@@@@G@@@@@@@" "@@@@G@@@@@@@" "@@@@G@@@@@@@" "@@@@OH@@@@@@" "@@@AOL@@@@@@" "@@@CON@@@@@@" "@@@GOO@@@@@@" "@@@OOGH@@@@@" "@@ANOCL@@@@@" "@@CLOAN@@@@@" "@@GHO@O@@@@@" "@@O@O@GH@@@@" "@AN@O@CL@@@@" "@CL@O@AN@@@@" "@GH@O@@O@@@@" "@O@@O@@GH@@@" "AN@@O@@CL@@@" "CL@@O@@AN@@@" "@@@@@@@@@@@@" "@@@@@@@@@@@@") (RPAQ RolledUpScreenIcon (READBITMAP)) (35 49 "@@@GO@@@@@@@" "@@@FC@@@@@@@" "@@@GH@@@@@@@" "@@@AH@@@@@@@" "@@@AH@@@@@@@" "@@@AH@@@@@@@" "@@@AH@@@@@@@" "@@@AH@@@@@@@" "EEAAHBBJH@@@" "@@@AH@@@@@@@" "@@@AH@@@@@@@" "OOOOOOOON@@@" "H@@@@@@@B@@@" "H@@@@@@@B@@@" "ILFDD@IFB@@@" "IBIDD@IEB@@@" "IBIDD@IEB@@@" "INIDDNIFB@@@" "IDIDD@IDB@@@" "IBIDD@IDB@@@" "IBFGG@FDB@@@" "H@@@@@@@B@@@" "H@@@@@@@B@@@" "OOOOOOOON@@@" "OOOOOOOON@@@" "OOOOOOOON@@@" "@@@AH@@@@@@@" "@@@AH@@@@@@@" "@@@AH@@@@@@@" "@@@AH@@@@@@@" "@@@AH@@@@@@@" "@@@AH@@@@@@@" "@@@AH@@@@@@@" "@@@AH@@@@@@@" "@@@AL@@@@@@@" "@@@CN@@@@@@@" "@@@GO@@@@@@@" "@@@MIH@@@@@@" "@@AIHL@@@@@@" "@@CAHF@@@@@@" "@@FAHC@@@@@@" "@@LAHAH@@@@@" "@AHAH@L@@@@@" "@C@AH@F@@@@@" "@F@AH@C@@@@@" "@L@AH@AH@@@@" "AH@AH@@L@@@@" "C@@AH@@F@@@@" "F@@AH@@C@@@@") (RPAQ RolledUpScreenMask (READBITMAP)) (35 49 "@@@OOH@@@@@@" "@@@OO@@@@@@@" "@@@OL@@@@@@@" "@@@GL@@@@@@@" "@@@CL@@@@@@@" "@@@CL@@@@@@@" "@@@CL@@@@@@@" "@@@CL@@@@@@@" "EEACLBBJH@@@" "@@@CL@@@@@@@" "@@@CL@@@@@@@" "OOOOOOOON@@@" "OOOOOOOON@@@" "OOOOOOOON@@@" "OOOOOOOON@@@" "OOOOOOOON@@@" "OOOOOOOON@@@" "OOOOOOOON@@@" "OOOOOOOON@@@" "OOOOOOOON@@@" "OOOOOOOON@@@" "OOOOOOOON@@@" "OOOOOOOON@@@" "OOOOOOOON@@@" "OOOOOOOON@@@" "OOOOOOOON@@@" "@@@CL@@@@@@@" "@@@CL@@@@@@@" "@@@CL@@@@@@@" "@@@CL@@@@@@@" "@@@CL@@@@@@@" "@@@CL@@@@@@@" "@@@CL@@@@@@@" "@@@CL@@@@@@@" "@@@CL@@@@@@@" "@@@CO@@@@@@@" "@@@OOH@@@@@@" "@@AOOL@@@@@@" "@@COMN@@@@@@" "@@GKLO@@@@@@" "@@OCLGH@@@@@" "@ANCLCL@@@@@" "@CLCLAN@@@@@" "@GHCL@O@@@@@" "@O@CL@GH@@@@" "AN@CL@CL@@@@" "CL@CL@AN@@@@" "GH@CL@@O@@@@" "G@@CL@@GH@@@") (DECLARE: DOEVAL@COMPILE DONTCOPY (GLOBALVARS SlideProjectorBackButtonBM SlideProjectorNextButtonBM SlideProjectorIcon SlideProjectorIconMask EmptySlideProjectorIcon EmptySlideProjectorIconMask ProjectionScreenIcon ProjectionScreenIconMask RolledUpScreenIcon RolledUpScreenMask) ) (* * Big pointers) (FILESLOAD (SYSLOAD FROM LISPUSERS) ANIMATE) (DECLARE: DOEVAL@COMPILE DONTCOPY (GLOBALVARS Hand HandShadow BigArrowIcon BigArrowShadow) ) (* * Initialization) (InitSlideProjector) (PUTPROPS SLIDEPROJECTOR COPYRIGHT ("Xerox Corporation" 1985 1986)) (DECLARE: DONTCOPY (FILEMAP (NIL (2983 43445 (CacheSlide 2993 . 5065) (CreateSlideProjector 5067 . 9838) ( InitSlideProjector 9840 . 15070) (LoadedProjectorRightButtonFn 15072 . 15673) ( ProjectionScreenButtonEventFn 15675 . 16037) (ProjectorIconButtonEventFn 16039 . 17905) ( ReshapeSlideProjectors 17907 . 23392) (ShapeWindowToMaxSize 23394 . 23810) (ShowSlideFile 23812 . 27055) (SlideProjectorButtonPushed 27057 . 34031) (SlideRandAccessMenuFn 34033 . 34472) ( SlideScreenCloseFn 34474 . 35296) (SlideScreenOpenFn 35298 . 37447) (SlideTitle 37449 . 39400) ( UpdateSlideProjectorTitleWindow 39402 . 41194) (ViewParticularSlide 41196 . 43443))))) STOP