(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