Home » Archimedes archive » Acorn User » AU 1993-11.adf » !OmniDesk_OmniDesk » !OmniDesk/Utilities/!WindFlags/!RunImage

!OmniDesk/Utilities/!WindFlags/!RunImage

This website contains an archive of files for the Acorn Electron, BBC Micro, Acorn Archimedes, Commodore 16 and Commodore 64 computers, which Dominic Ford has rescued from his private collection of floppy disks and cassettes.

Some of these files were originally commercial releases in the 1980s and 1990s, but they are now widely available online. I assume that copyright over them is no longer being asserted. If you own the copyright and would like files to be removed, please contact me.

Tape/disk: Home » Archimedes archive » Acorn User » AU 1993-11.adf » !OmniDesk_OmniDesk
Filename: !OmniDesk/Utilities/!WindFlags/!RunImage
Read OK:
File size: 8DE4 bytes
Load address: 0000
Exec address: 0000
File contents
   10REM >!RunImage for Window Flags
   20:
   30VersionNumber$="1�02 (22 June 1993)":Taskname$="Window�Flags"
   40Exit=FALSE:Startup=FALSE:Done=FALSE
   50DoModeChange=FALSE
   60:
   70DIM Block 256,Buffer 256,MenuHelp 16,Transmission 10
   80IndMenuMax=64:DIM IndirectMenuText IndMenuMax
   90DIM Templates 2489,InfoInd 189,LocInd 592,SpyInd 1087
  100DIM IBMenu 76,MainMenu 124
  110:
  120REM Messages used by the OmniDesk suite:
  130UtilDeclare=&825C0:UtilOpen=&825C1:UtilQuitting=&825C2:UtilReside=&825C3:UtilAckLoad=&825C4
  140REM These are official Acorn allocations.
  150:
  160ON ERROR Block!0=ERR:$(Block+4)=REPORT$+" (internal error code "+STR$(ERL)+")"+CHR$0:SYS "Wimp_ReportError",Block,1,Taskname$:END
  170:
  180OmniDesk=FNReadStartupString:REM Also assigns Exit and Startup
  190:
  200*Set WindFlags$RISCOS 3
  210*RMEnsure UtilityModule 3.00 Set WindFlags$RISCOS 2
  220SYS "XOS_ReadVarVal","WindFlags$RISCOS",Block,256,0,0 TO ,,len:Block?len=13:wimp$=$Block
  230IF wimp$<>"3" THEN wimp$="2"
  240*Unset WindFlags$RISCOS
  250:
  260*Set WindFlags$SpriteDrag Yes
  270*RMEnsure DragASprite 0.00 Set WindFlags$SpriteDrag No
  280SYS "XOS_ReadVarVal","WindFlags$SpriteDrag",Block,256,0,0 TO ,,len:Block?len=13
  290IF $Block="Yes" THEN DragASprite=TRUE:ELSE DragASprite=FALSE
  300*Unset WindFlags$SpriteDrag
  310:
  320SYS "XOS_ReadVarVal","Obey$Dir",Block,256,0,0 TO ,,len:Block?len=13:OurFileName$=$Block
  330N=-1:REPEAT:N+=1:UNTIL MID$(OurFileName$,LEN(OurFileName$)-N,1)="."
  340OurPathName$=LEFT$(OurFileName$,LEN(OurFileName$)-N):OurFileName$=RIGHT$(OurFileName$,N)
  350:
  360REM Read size of sprite file and load it. We need to DIM 16 bytes more than the file's size.
  370SYS "OS_FSControl",28,"<WindFlags$Dir>.Sprites" TO ,,len
  380DIM Sprites len+16:!Sprites=len+16:Sprites!4=0:Sprites!8=16:Sprites!12=16:SYS "OS_SpriteOp",256+10,Sprites,"<WindFlags$Dir>.Sprites"
  390:
  400IF wimp$="3" THEN
  410  DIM messagelist% 36
  420  messagelist%!0=&502:messagelist%!4=&400C1
  430  messagelist%!8=UtilOpen:messagelist%!12=UtilQuitting
  440  messagelist%!16=UtilReside:messagelist%!20=10
  450  messagelist%!24=6:messagelist%!28=2:messagelist%!32=0
  460  SYS "Wimp_Initialise",300,&4B534154,Taskname$,messagelist% TO wimp,Task
  470ELSE
  480  SYS "Wimp_Initialise",200,&4B534154,Taskname$ TO wimp,Task
  490ENDIF
  500:
  510SYS "Interface_Initialise",Task
  520:
  530SYS "Wimp_OpenTemplate",,"<WindFlags$Dir>.Templates"
  540SYS "Wimp_LoadTemplate",,Templates,InfoInd,InfoInd+189,-1,"Info",0
  550SYS "Wimp_CreateWindow",,Templates TO Info
  560SYS "Wimp_LoadTemplate",,Templates,LocInd,LocInd+592,-1,"WindowXY",0:Templates!64=Sprites
  570SYS "Wimp_CreateWindow",,Templates TO Loc
  580SYS "Wimp_LoadTemplate",,Templates,SpyInd,SpyInd+1087,-1,"SpyCalc",0:Templates!64=Sprites
  590SYS "Wimp_CreateWindow",,Templates TO SpyCalc
  600SYS "Wimp_CloseTemplate"
  610:
  620PROCBuildMenus
  630:
  640PROCCleanUpLocWindow
  650ReadError=NOT(FNLoadSettings)
  660PROCClearSpyCalcWindow(Spying)
  670:
  680PROCInitialise
  690:
  700IF OmniDesk=0 THEN
  710  REM Put Icon on the icon-bar
  720  Block!0=-1
  730  Block!4=0:Block!8=0:Block!12=68:Block!16=68
  740  Block!20=&17003002:$(Block+24)="!WindFlags"+CHR$13
  750  SYS "Wimp_CreateIcon",,Block TO IconBar
  760ENDIF
  770:
  780IF OmniDesk<>0 THEN PROCDeclareToOmniDesk
  790IF Startup THEN Done=TRUE:REM '-Startup' parameter means 'declare and die immediately'.
  800:
  810PROCUpdateIcon(Info,3,VersionNumber$)
  820PROCModeChange:REM To update icon-bar icon if necessary
  830:
  840ON ERROR PROCError
  850IF ReadError THEN ReadError=FALSE:PROCDefaultSettings:ERROR 9999,"An error occurred whilst reading the settings file. Default settings will therefore be used."
  860:
  870SYS "OS_ReadMonotonicTime" TO polltime%
  880OldWin=0
  890:
  900REM Main program loop
  910REPEAT
  920  SYS "Wimp_PollIdle",%1100000110000,Block TO Reason
  930  SYS "Interface_Poll",Reason,,Task
  940  SYS "Interface_PreProcessKey",Reason,Block,Task
  950  CASE Reason OF
  960    WHEN 0 : SYS "OS_ReadMonotonicTime" TO polltime%
  970             IF Spying AND (FNOpenState(SpyCalc))  THEN
  980               OldWin=FNDoSpy(OldWin):polltime%+=10
  990             ELSE
 1000               polltime%+=100:REM Do a Wimp_Poll approximately once a second
 1010             ENDIF
 1020             IF DoModeChange THEN IF FNOpenState(SpyCalc) THEN PROCOpen(SpyCalc,FALSE,XPosition,YPosition)
 1030    WHEN 1 : PROCRedraw
 1040    WHEN 2 : SYS "Wimp_OpenWindow",,Block
 1050    WHEN 3 : SYS "Wimp_CloseWindow",,Block
 1060             IF Exit THEN Done=TRUE
 1070    WHEN 6 : PROCMouseButton
 1080    WHEN 7 : PROCDragFinished
 1090    WHEN 8 : PROCKeyPressed
 1100    WHEN 9 : PROCDecodeMenu
 1110    WHEN 17,18,19 : PROCRecieveMessage
 1120  ENDCASE
 1130UNTIL Done
 1140PROCSayGoodbye
 1150END
 1160:
 1170DEF PROCError
 1180Click=0:Block!0=ERR:CASE ERR OF
 1190  WHEN 9999:REM Custom error
 1200    $(Block+4)=REPORT$+CHR$0
 1210    SYS "Wimp_ReportError",Block,17,"Notice from "+Taskname$
 1220  OTHERWISE
 1230    $(Block+4)=REPORT$+" (internal error code "+STR$ERL+"). Click on OK to continue, or Cancel to terminate the program."+CHR$0
 1240    SYS "Wimp_ReportError",Block,3,Taskname$ TO ,Click
 1250ENDCASE
 1260IF Click=2 THEN PROCSayGoodbye:END
 1270ENDPROC
 1280:
 1290DEF PROCOpen(WindowHandle,TopOfStack,across,up)
 1300Block!0=WindowHandle
 1310SYS "Wimp_GetWindowState",,Block
 1320IF (across<>-1) AND (across<>-1) THEN PROCDecideWindowPosition(Block,across,up)
 1330IF TopOfStack THEN Block!28=-1
 1340SYS "Wimp_OpenWindow",,Block
 1350ENDPROC
 1360:
 1370DEF PROCClose(WindowHandle)
 1380Block!0=WindowHandle
 1390SYS "Wimp_GetWindowState",,Block
 1400SYS "Wimp_CloseWindow",,Block
 1410ENDPROC
 1420:
 1430DEF PROCDecideWindowPosition(Block,across,up)
 1440REM Use of this procedure lets you open windows on an invisible grid which
 1450REM automatically fits itself to the screen mode in use. There are five
 1460REM positions across (left, mid-left, centre, mid-right, right) and five
 1470REM positions up (bottom of screen, above icon-bar, centre of screen,
 1480REM centre top of screen, top of screen).
 1490  :
 1500Xpixels=FNModeInfo("XPixels",-1):Ypixels=FNModeInfo("YPixels",-1)
 1510XEigFactor=FNModeInfo("XEigFactor",-1):YEigFactor=FNModeInfo("YEigFactor",-1)
 1520  :
 1530top=Block!16:right=Block!12:bot=Block!8:left=Block!4
 1540SYS "Wimp_OpenWindow",,Block:SYS "Wimp_GetWindowOutline",,Block
 1550TB=((Block!16)-top)/(2^YEigFactor)
 1560VS=((Block!12)-right)/(2^XEigFactor)
 1570HS=(bot-(Block!8))/(2^YEigFactor)
 1580LP=(left-(Block!4))/(2^XEigFactor)
 1590REM LP is Left Pixel: normally present, but not if window is transparent.
 1600width=(right-left)/(2^XEigFactor)
 1610height=(top-bot)/(2^YEigFactor)
 1620CASE across OF
 1630  WHEN 0:x=LP
 1640  WHEN 1:x=LP+((Xpixels+1)-(width+LP+VS))/4
 1650  WHEN 2:x=LP+((Xpixels+1)-(width+LP+VS))/2
 1660  WHEN 3:x=LP+(3*(((Xpixels+1)-(width+LP+VS))/4))
 1670  WHEN 4:x=(Xpixels+1)-(width+VS)
 1680ENDCASE
 1690CASE up OF
 1700  WHEN 0:y=HS
 1710  WHEN 1:y=HS+(132/(2^YEigFactor))
 1720  WHEN 2:y=HS+((Ypixels+1)-(height+TB+HS))/2
 1730  WHEN 3:y=HS+(3*(((Ypixels+1)-(height+TB+HS))/4))
 1740  WHEN 4:y=(Ypixels+1)-(height+TB)
 1750ENDCASE
 1760REM Above coordinates position window.
 1770REM Now convert to screen coordinates:
 1780x=x*(2^XEigFactor):y=y*(2^YEigFactor)
 1790width=width*(2^XEigFactor):height=height*(2^YEigFactor)
 1800Block!12=x+width:Block!4=x
 1810Block!16=y+height:Block!8=y
 1820ENDPROC
 1830:
 1840REM -------------------------------------------------------------------------
 1850REM Wimp poll routines
 1860REM -------------------------------------------------------------------------
 1870:
 1880DEF PROCRedraw
 1890IF DoModeChange THEN
 1900  REM Re-opening windows need an extra wimp_poll to happen after the mode change in order to work:
 1910  IF FNOpenState(SpyCalc) THEN PROCOpen(SpyCalc,FALSE,XPosition,YPosition)
 1920  DoModeChange=FALSE
 1930ENDIF
 1940SYS "Wimp_RedrawWindow",,Block TO flag
 1950WHILE flag
 1960  SYS "Interface_Render3dWindow",,Block
 1970  SYS "Wimp_GetRectangle",,Block TO flag
 1980ENDWHILE
 1990ENDPROC
 2000:
 2010DEF PROCRecieveMessage
 2020CASE Block!16 OF
 2030  WHEN 0 : Done=TRUE
 2040  WHEN 2 : REM DataSaveAck
 2050           REM Other task wants a transfer via <Wimp$Scrap> rather than RAM
 2060           PROCWimpScrapTransmit
 2070  WHEN 6 : REM RAM Fetch
 2080           REM Other task is asking for data
 2090           PROCRAMTransmit
 2100  WHEN 10: IF OmniDesk=0 THEN PROCSaveDesktop(Block!20)
 2110           REM Only save if we have not been started up by OmniDesk
 2120  WHEN &502 : PROCHelp
 2130  WHEN &400C1 : PROCModeChange
 2140  WHEN UtilOpen : IF $(Block+24)=Taskname$ THEN PROCOmniDeskCalling
 2150  WHEN UtilQuitting : IF OmniDesk<>0 THEN
 2160                        IF Block!20=OmniDesk THEN Done=TRUE
 2170                      ENDIF
 2180  WHEN UtilReside : Exit=FALSE
 2190ENDCASE
 2200ENDPROC
 2210:
 2220DEF PROCDeleteWimpScrap
 2230LOCAL ERROR
 2240ON ERROR LOCAL RESTORE ERROR:ENDPROC
 2250REM We may receive try to delete a non-existant Wimp$Scrap
 2260REM file if the receiving task did not recognise the filetype.
 2270OSCLI("Delete <Wimp$Scrap>")
 2280ENDPROC
 2290:
 2300DEF PROCMouseButton
 2310MouseX=Block!0:MouseY=Block!4:Buttons=Block!8
 2320Window=Block!12:Icon=Block!16
 2330CASE Window OF
 2340  WHEN -2:REM Icon bar icon clicked
 2350    CASE Buttons OF
 2360      WHEN 1 : REM Adjust
 2370      WHEN 2 : REM Menu
 2380        M%=IBMenu:MenuX=MouseX:MenuY=MouseY:PROCMakeMenu
 2390      WHEN 4 : REM Select
 2400        PROCOpen(SpyCalc,TRUE,XPosition,YPosition)
 2410    ENDCASE
 2420  WHEN SpyCalc
 2430    CASE Buttons OF
 2440      WHEN 2 : REM Menu
 2450        M%=MainMenu:MenuX=MouseX:MenuY=MouseY
 2460        IF wimp>=310 THEN
 2470          IF LEFT$($MainMenuTitle,1)="\" THEN $MainMenuTitle=RIGHT$($MainMenuTitle,LEN($MainMenuTitle)-1)+CHR$13
 2480          IF XPosition=4 THEN $MainMenuTitle="\"+$MainMenuTitle+CHR$13
 2490        ENDIF
 2500        PROCMakeMenu
 2510      WHEN 1,4 : REM Select,Adjust
 2520        IF (Icon>=26) AND (Icon<=44) THEN
 2530          PROCUpdateIcon(SpyCalc,46,"&"+STR$~FNWindFlags)
 2540        ENDIF
 2550      OTHERWISE
 2560        IF (Buttons>7) AND (Window=SpyCalc) AND (Icon=46) THEN
 2570          $Transmission=FNReadIconStr(SpyCalc,46)
 2580          Dragging$="Flags":PROCDragBox(SpyCalc,46,5,Sprites,FNMakeDraggingSprite)
 2590        ENDIF
 2600    ENDCASE
 2610  WHEN Loc AND Buttons<8:REM Reposition main window
 2620    IF Icon>=6 THEN
 2630      XPosition=FNReadWindowLocation("X")
 2640      YPosition=FNReadWindowLocation("Y")
 2650      IF FNOpenState(SpyCalc) THEN PROCOpen(SpyCalc,FALSE,XPosition,YPosition)
 2660    ENDIF
 2670ENDCASE
 2680ENDPROC
 2690:
 2700DEF PROCDragFinished
 2710IF DragASprite THEN SYS "DragASprite_Stop"
 2720SYS "Wimp_GetPointerInfo",,Block
 2730IF Block!12=-1 THEN ENDPROC:REM Dragged to background.
 2740DraggedToX=Block!0:DraggedToY=Block!4:DraggedToWindow=Block!12:DraggedToIcon=Block!16
 2750REM OK - Let's begin an inter-application save
 2760MyRef=0
 2770Block!0=256:Block!12=MyRef:Block!16=1:REM DataSave
 2780Block!20=DraggedToWindow:Block!24=DraggedToIcon:Block!28=DraggedToX:Block!32=DraggedToY
 2790Block!36=12:REM Never more than 12 bytes
 2800Block!40=&FFF:REM Filetype of Text
 2810$(Block+44)=Dragging$+CHR$0
 2820SYS "Wimp_SendMessage",17,Block,DraggedToWindow,DraggedToIcon
 2830REM DraggedToIcon included in case DraggedToWindow=-2 (icon bar)
 2840ENDPROC
 2850:
 2860DEF PROCKeyPressed
 2870Window=Block!0:Icon=Block!4:Character=Block!24
 2880CASE Window OF
 2890  WHEN SpyCalc:
 2900    IF Character=13 THEN
 2910      A$=FNReadIconStr(SpyCalc,46):IF A$="" THEN A$="0":PROCUpdateIcon(SpyCalc,46,"&0")
 2920      PROCUpdateSwitches(EVAL(A$))
 2930    ELSE
 2940      SYS "Wimp_ProcessKey",Character
 2950    ENDIF
 2960  OTHERWISE
 2970    SYS "Wimp_ProcessKey",Character
 2980ENDCASE
 2990ENDPROC
 3000:
 3010DEF PROCDecodeMenu
 3020Sub0=Block!0:Sub1=Block!4:Sub2=Block!8
 3030CloseMenu=FALSE
 3040CASE M% OF
 3050  WHEN IBMenu:
 3060    CASE Sub0 OF
 3070      WHEN 0
 3080        SYS "Wimp_GetPointerInfo",,Block
 3090        SYS "Wimp_CreateMenu",,Info,Block!0-24,Block!4+24
 3100        CloseMenu=TRUE
 3110      WHEN 1
 3120        Done=TRUE
 3130    ENDCASE
 3140  WHEN MainMenu:
 3150    CASE Sub0 OF
 3160      WHEN 0
 3170        SYS "Wimp_GetPointerInfo",,Block
 3180        SYS "Wimp_CreateMenu",,Info,Block!0-24,Block!4+24
 3190        CloseMenu=TRUE
 3200      WHEN 1
 3210        Spying=NOT Spying:PROCTickMenu(MainMenu,1,Spying)
 3220        PROCClearSpyCalcWindow(Spying):OldWin=0
 3230        PROCUpdateIcon(SpyCalc,46,"&"+STR$~FNWindFlags)
 3240        SYS "Wimp_GetCaretPosition",,Block:IF (Block!0=SpyCalc) AND Spying THEN SYS "Wimp_SetCaretPosition",-1,-1
 3250      WHEN 2
 3260        SYS "Wimp_GetPointerInfo",,Block
 3270        SYS "Wimp_CreateMenu",,Loc,Block!0-24,Block!4+24
 3280        CloseMenu=TRUE
 3290      WHEN 3
 3300        IF NOT FNSaveSettings THEN ERROR 9999,"An error occurred whilst writing the settings file."
 3310    ENDCASE
 3320ENDCASE
 3330SYS "Wimp_GetPointerInfo",,Block
 3340IF ((Block!8 AND 1)=1) AND (NOT CloseMenu) THEN PROCMakeMenu
 3350ENDPROC
 3360:
 3370REM -------------------------------------------------------------------------
 3380REM Menu routines
 3390REM -------------------------------------------------------------------------
 3400:
 3410DEF PROCBuildMenus
 3420REM This procedure should only be visited once, since it contains DIMs.
 3430  :
 3440REM In the menu title strings below, if a "|" character is present it will be
 3450REM replaced by a space under RISC OS 3.1 (or greater), or will terminate the
 3460REM string under earlier versions of the wimp. This allows the new indirected
 3470REM menu titles to be used (which were introduced with RISC OS 3.1).
 3480  :
 3490IndirectMenuTextOffsetPointer=0
 3500REM This points to a pool to be used by all menus for their indirected text.
 3510  :
 3520M%=IBMenu
 3530IF wimp>=310 THEN Title$="Window Flags":ELSE Title$="Wind Flags"
 3540DIM IBMenuTitle LEN(Title$)+1:$IBMenuTitle=Title$+CHR$13
 3550PROCMenuInit(IBMenuTitle)
 3560PROCMenuItem("Info",0,Info)
 3570PROCMenuItem("Quit",128,-1)
 3580  :
 3590M%=MainMenu
 3600IF wimp>=310 THEN Title$="Window Flags":ELSE Title$="Wind Flags"
 3610DIM MainMenuTitle LEN(Title$)+2:$MainMenuTitle=Title$+CHR$13
 3620PROCMenuInit(MainMenuTitle)
 3630PROCMenuItem("Info",2,Info)
 3640PROCMenuItem("Spy on windows",0,-1)
 3650PROCMenuItem("Window position",2,Loc)
 3660PROCMenuItem("Save settings",128,-1)
 3670ENDPROC
 3680:
 3690DEF PROCMakeMenu
 3700IF MenuX<0 THEN MenuX=0
 3710IF MenuY<184 THEN MenuY=184:REM for icon bar
 3720SYS "Wimp_CreateMenu",,M%,MenuX-((36+M%!16)/2),MenuY
 3730ENDPROC
 3740:
 3750DEF PROCMenuInit(MenuTitle)
 3760IF wimp>=310 THEN
 3770  A=INSTR($MenuTitle,"|"):IF A<>0 THEN ?(MenuTitle+(A-1))=32
 3780  MenuMax=LEN($MenuTitle)
 3790  M%!0=MenuTitle
 3800ELSE
 3810  A=INSTR($MenuTitle,"|"):IF A<>0 THEN ?(MenuTitle+(A-1))=13
 3820  MenuMax=LEN(LEFT$($MenuTitle,12))
 3830  $M%=LEFT$($MenuTitle,12)
 3840ENDIF
 3850M%?12=7:M%?13=2:M%?14=11:M%?15=0
 3860M%!16=MenuMax*16
 3870M%!20=44:M%!24=0
 3880P%=M%+28
 3890ENDPROC
 3900:
 3910DEF PROCMenuItem(Text$,Flags,Link)
 3920REM Flags: 1-ticked, 2-dashed line, 4-writeable, 8-message, 128-last item
 3930REM Link: menu or window handle for sub-pointer
 3940P%!0=Flags:P%!4=Link
 3950IF LEN(Text$)<=12 THEN
 3960  P%!8=&07003021:REM Not indirected
 3970  $(P%+12)=Text$
 3980ELSE
 3990  P%!8=&07003121:REM Indirected
 4000  P%!12=IndirectMenuText+IndirectMenuTextOffsetPointer
 4010  P%!16=0:P%!20=0
 4020  $(IndirectMenuText+IndirectMenuTextOffsetPointer)=Text$+CHR$13
 4030  IndirectMenuTextOffsetPointer+=LEN(Text$)+1
 4040  IF IndirectMenuTextOffsetPointer>IndMenuMax THEN ERROR 0,"The indirect menu text buffer has overflowed. Please allocate more space."
 4050ENDIF
 4060P%+=24
 4070IF MenuMax<LEN(Text$) THEN MenuMax=LEN(Text$):M%!16=(MenuMax+1)*16
 4080IF (Flags=128) AND (wimp>=310) THEN M%!28=(((M%!28) AND NOT 256) EOR 256)
 4090  REM Indirected menu titles for RISC OS 3.1 upwards.
 4100ENDPROC
 4110:
 4120REM -------------------------------------------------------------------------
 4130REM Responses to incoming wimp messages
 4140REM -------------------------------------------------------------------------
 4150:
 4160DEF PROCSaveDesktop(File)
 4170LOCAL ERROR
 4180ON ERROR LOCAL Block!12=Block!8:SYS "Wimp_SendMessage",19,Block,Block!4:RESTORE ERROR:ENDPROC
 4190REM The above line acknowledges the message if an error occurs, thereby
 4200REM aborting the desktop save.
 4210BPUT#File,"Run "+OurPathName$+OurFileName$
 4220ENDPROC
 4230:
 4240DEF PROCHelp
 4250Block!12=Block!8:Block!16=&503:HelpInfo=Block+20
 4260  :
 4270REM Block!32 gives window, Block!36 gives icon
 4280  :
 4290CASE Block!32 OF
 4300  WHEN -2:PROCSend("This is the Window Flags icon.")
 4310          PROCSend("Click MENU for information or to quit.")
 4320          PROCSend("Click SELECT to open the Window Flags window.")
 4330  WHEN SpyCalc:
 4340    CASE Block!36 OF
 4350      WHEN 0,1,2,3,4,5:PROCSend("This area shows the window and icon handles under the pointer.")
 4360      WHEN 6,7,8,9,10,11:PROCSend("This area shows the minimum coordinates of the window under the pointer.")
 4370      WHEN 12,13,14,15,16,17:PROCSend("This area shows the maximum coordinates of the window under the pointer.")
 4380      WHEN 18,19,20,21,22,23:PROCSend("This area shows how much the window under the pointer has been scrolled.")
 4390      WHEN 24,25,47:IF Spying THEN
 4400                      PROCSend("This area shows the individual flags for the window under the pointer.")
 4410                    ELSE
 4420                      PROCSend("Click the switches in this area to work out the window flags, or enter a value in the box and press RETURN to find out what it means.")
 4430                    ENDIF
 4440      WHEN 26:PROCSend("This switch is selected if the window has a Back icon.")
 4450      WHEN 27:PROCSend("This switch is selected if the window has a Close icon.")
 4460      WHEN 28:PROCSend("This switch is selected if the window has a Title Bar icon.")
 4470      WHEN 29:PROCSend("This switch is selected if the window has a Toggle Size icon.")
 4480      WHEN 30:PROCSend("This switch is selected if the window has a vertical scroll bar.")
 4490      WHEN 31:PROCSend("This switch is selected if the window has a Size icon.")
 4500      WHEN 32:PROCSend("This switch is selected if the window has a horizontal scroll bar.")
 4510      WHEN 33:PROCSend("This switch is selected if the window can be moved.")
 4520      WHEN 34:PROCSend("This switch is selected if the window can be updated automatically by the window manager.")
 4530      WHEN 35:PROCSend("This switch is selected if the window is a pane.")
 4540      WHEN 36:PROCSend("This switch is selected if the window can move beyond the limits of the desktop.")
 4550      WHEN 37:PROCSend("This switch is selected if window scrolling is not automatic, and the arrow icons auto-repeat.")
 4560      WHEN 38:PROCSend("This switch is selected if window scrolling is not automatic, and the arrow icons do not auto-repeat.")
 4570      WHEN 39:PROCSend("This switch is selected if the window's colours are treated as GCOL colours rather than Desktop colours.")
 4580      WHEN 40:PROCSend("This switch is selected if other windows are not allowed to be opened behind this window.")
 4590      WHEN 41:PROCSend("This switch is selected if the window genereates 'hot key' events.")
 4600      WHEN 42:PROCSend("This switch is selected if the window is being forced to stay on screen (RISC OS 3 only).")
 4610      WHEN 43:PROCSend("This switch is selected if the right-hand window extend is ignored during resize drags (RISC OS 3 only).")
 4620      WHEN 44:PROCSend("This switch is selected if the lower window extent is ignored during resize drags (RISC OS 3 only).")
 4630      WHEN 45:PROCSend("This switch is selected if the window has been defined using the new format specification.")
 4640      WHEN 46:PROCSend("This shows the window flags in hexadecimal.")
 4650              IF NOT Spying THEN PROCSend("Enter a value here and press RETURN to find out what it means.")
 4660              IF NOT Spying THEN PROCSend("You can drag this figure out to another application or to a directory display.")
 4670      OTHERWISE PROCSend("This is the Window Flags main window.")
 4680                PROCSend("You can spy on windows or calculate window flags.")
 4690    ENDCASE
 4700  WHEN Info:PROCSend("This window displays information about Window Flags.")
 4710            PROCSend("Window Flags is a member of the OmniDesk Suite of desktop utilities.")
 4720  WHEN Loc:
 4730   CASE TRUE OF
 4740     WHEN ((Block!36)<6):PROCSend("This window lets you snap the magnifier window to an invisble screen grid.")
 4750                         PROCSend("The second position up puts the window just above the icon-bar, and is therefore not evenly spaced with the other rows.")
 4760     OTHERWISE PROCSend("Click SELECT on the position you want the window to snap to, or ADJUST on the window icon to turn the snapping off.")
 4770               PROCSend("If snapping is on, the window will open at the appropriate position when you change mode.")
 4780   ENDCASE
 4790OTHERWISE
 4800  IF wimp>=217 THEN
 4810    MenuHelp!0=-1:MenuHelp!4=-1:MenuHelp!8=-1
 4820    SYS "Wimp_GetMenuState",1,MenuHelp,Block!32,Block!36
 4830    CASE M% OF
 4840      WHEN IBMenu:
 4850        IF MenuHelp!4=-1 THEN
 4860          CASE MenuHelp!0 OF
 4870            WHEN 0:PROCSend("Move the pointer right to see information about Window Flags.")
 4880            WHEN 1:PROCSend("Click SELECT to quit Window Flags.")
 4890            OTHERWISE PROCSend("This is the Window Flags icon-bar menu.")
 4900          ENDCASE
 4910        ENDIF
 4920      WHEN MainMenu:
 4930        Direction$="right":IF wimp>=310 AND CHR$(MainMenuTitle?0)="\" THEN Direction$="left"
 4940        CASE MenuHelp!0 OF
 4950          WHEN 0:PROCSend("Move the pointer "+Direction$+" to see information about Window Flags.")
 4960          WHEN 1:IF Spying THEN
 4970                   PROCSend("Click SELECT or ADJUST to stop spying and work out window flags.")
 4980                 ELSE
 4990                   PROCSend("Click SELECT or ADJUST to spy on windows you point to with the mouse pointer.")
 5000                 ENDIF
 5010          WHEN 2:PROCSend("Move the pointer "+Direction$+" to set the position of the Window Flags window on the screen.")
 5020          WHEN 3:PROCSend("Click SELECT or ADJUST to save the Window Flags window position and spying status.")
 5030          OTHERWISE PROCSend("This is the Window Flags main menu.")
 5040        ENDCASE
 5050    ENDCASE
 5060  ENDIF
 5070ENDCASE
 5080  :
 5090?HelpInfo=0
 5100Block!0=(HelpInfo+4-Block) AND NOT 3
 5110SYS "Wimp_SendMessage",17,Block,Block!4
 5120ENDPROC
 5130:
 5140DEF FNOmniHelpMessage(A$)
 5150IF A$="CLICK" THEN =LEFT$("open the Window Flags window.",76)+CHR$13
 5160IF A$="DRAG" THEN =LEFT$("",76)+CHR$13
 5170=""
 5180:
 5190DEF PROCSend(Text$)
 5200$HelpInfo=Text$+"|M"
 5210HelpInfo+=LEN(Text$)+2
 5220ENDPROC
 5230:
 5240DEF PROCOmniDeskCalling
 5250IF OmniDesk=0 THEN ENDPROC
 5260REM This first line is for if a broadcast message is received which was
 5270REM intended for a transient copy of the utility. A stand-alone
 5280REM instantiation of the utility should ignore such messages.
 5290CASE Block!20 OF
 5300  WHEN 4:PROCOpen(SpyCalc,TRUE,XPosition,YPosition)
 5310ENDCASE
 5320ENDPROC
 5330:
 5340DEF PROCModeChange
 5350DoModeChange=TRUE
 5360IF OmniDesk=0 THEN PROCUpdateIconForMode("!WindFlags",-2,IconBar)
 5370ENDPROC
 5380:
 5390REM -------------------------------------------------------------------------
 5400REM General non-specific useful routines (mostly wimp)
 5410REM -------------------------------------------------------------------------
 5420:
 5430DEF PROCUpdateIcon(Wndw,Icn,Txt$)
 5440Block!0=Wndw:Block!4=Icn:SYS "Wimp_GetIconState",,Block
 5450IF LEN(Txt$)>(Block!36)-1 THEN
 5460  IF ((Block!24) AND (1<<9))=(1<<9) THEN
 5470    REM Right-justified
 5480    Txt$="�"+RIGHT$(Txt$,(Block!36)-2)
 5490  ELSE
 5500    REM Left-justified or centred
 5510    Txt$=LEFT$(Txt$,(Block!36)-1):RIGHT$(Txt$)="�"
 5520  ENDIF
 5530ENDIF
 5540REM ^ Ensures the text can't overflow the maximum space in the icon.
 5550IF $(Block!28)<>Txt$ THEN
 5560  $(Block!28)=Txt$:Block!8=0:Block!12=0
 5570  SYS "Wimp_SetIconState",,Block
 5580ENDIF
 5590SYS "Wimp_GetCaretPosition",,Block
 5600IF Block!0=Wndw AND Block!4=Icn THEN
 5610  REM If this icon owns the caret, then put it at the end.
 5620  SYS "Wimp_SetCaretPosition",Wndw,Icn,0,0,-1,LEN(Txt$)
 5630ENDIF
 5640ENDPROC
 5650:
 5660DEF PROCUpdateIconColour(Wndw,Icn,FCol,BCol)
 5670REM Change an icon's colours
 5680Block!0=Wndw:Block!4=Icn:SYS "Wimp_GetIconState",,Block
 5690IF (((Block?27)>>4)=BCol) AND (((Block?27) MOD 16)=FCol) THEN ENDPROC
 5700  REM ^ Same colour, so don't change.
 5710Block!12=(%11111111<<24):Block!8=(BCol<<28)+(FCol<<24)
 5720SYS "Wimp_SetIconState",,Block
 5730ENDPROC
 5740:
 5750DEF PROCUpdateSelectedFlag(Wndw,Icn,State)
 5760REM Use State=TRUE to make icon become selected
 5770Block!0=Wndw:Block!4=Icn:SYS "Wimp_GetIconState",,Block
 5780IF ((Block!24) AND (1<<21))=((-State)<<21) THEN ENDPROC
 5790Block!12=(1<<21):IF State THEN Block!8=(1<<21) ELSE Block!8=(0<<21)
 5800SYS "Wimp_SetIconState",,Block
 5810ENDPROC
 5820:
 5830DEF PROCUpdateShadedFlag(Wndw,Icn,State)
 5840REM Use State=TRUE to make icon become shaded
 5850Block!0=Wndw:Block!4=Icn:SYS "Wimp_GetIconState",,Block
 5860IF ((Block!24) AND (1<<22))=((-State)<<22) THEN ENDPROC
 5870Block!12=(1<<22):IF State THEN Block!8=(1<<22) ELSE Block!8=(0<<22)
 5880SYS "Wimp_SetIconState",,Block
 5890ENDPROC
 5900:
 5910DEF FNSelectedState(Wndw,Icn)
 5920Block!0=Wndw:Block!4=Icn:SYS "Wimp_GetIconState",,Block
 5930IF ((Block!24) AND (1<<21))=(1<<21) THEN =TRUE
 5940=FALSE
 5950:
 5960DEF FNShadedState(Wndw,Icn)
 5970Block!0=Wndw:Block!4=Icn:SYS "Wimp_GetIconState",,Block
 5980IF ((Block!24) AND (1<<22))=(1<<22) THEN =TRUE
 5990=FALSE
 6000:
 6010DEF FNOpenState(Wndw)
 6020REM Returns TRUE if window is open; false otherwise
 6030Block!0=Wndw:SYS "Wimp_GetWindowState",,Block
 6040IF ((Block!32) AND (1<<16))=(1<<16) THEN =TRUE
 6050=FALSE
 6060:
 6070DEF PROCShadeMenu(Menu,Item,State)
 6080!(Menu+28+(24*Item)+8)=(!(Menu+28+(24*Item)+8) AND NOT (1<<22)) EOR ((-State)<<22)
 6090ENDPROC
 6100:
 6110DEF PROCTickMenu(Menu,Item,State)
 6120!(Menu+28+(24*Item))=(!(Menu+28+(24*Item)) AND NOT 1) EOR (-State)
 6130ENDPROC
 6140:
 6150DEF FNMenuShaded(Menu,Item)
 6160IF (!(Menu+28+(24*Item)+8) AND (1<<22))=(1<<22) THEN =TRUE
 6170=FALSE
 6180:
 6190DEF FNMenuTicked(Menu,Item)
 6200IF (!(Menu+28+(24*Item)) AND 1)=1 THEN =TRUE
 6210=FALSE
 6220:
 6230DEF FNReadIcon(Wndw,Icn)
 6240REM Read numeric value of icon
 6250Block!0=Wndw:Block!4=Icn:SYS "Wimp_GetIconState",,Block
 6260=VAL($(Block!28))
 6270:
 6280DEF FNReadIconStr(Wndw,Icn)
 6290REM Read string value of icon
 6300Block!0=Wndw:Block!4=Icn:SYS "Wimp_GetIconState",,Block
 6310=$(Block!28)
 6320:
 6330DEF FNModeInfo(var$,mode)
 6340REM Use mode=-1 for current screen mode
 6350CASE var$ OF
 6360  WHEN "XPixels":SYS "OS_ReadModeVariable",mode,11 TO ,,var
 6370  WHEN "YPixels":SYS "OS_ReadModeVariable",mode,12 TO ,,var
 6380  WHEN "NCol":SYS "OS_ReadModeVariable",mode,3 TO ,,var
 6390  WHEN "XEigFactor":SYS "OS_ReadModeVariable",mode,4 TO ,,var
 6400  WHEN "YEigFactor":SYS "OS_ReadModeVariable",mode,5 TO ,,var
 6410  WHEN "BPP":SYS "OS_ReadModeVariable",mode,9 TO ,,var:var=2^var
 6420  OTHERWISE var=-1:REM Fall-through for a faulty input value
 6430ENDCASE
 6440=var
 6450:
 6460DEF PROCUpdateIconForMode(Appname$,Wndw,Icn)
 6470REM This procedure requires that ALL the icon sprites are defined in mode 20
 6480REM or mode 27 (which is equivalent) with a mask but no palette. They should
 6490REM still appear to have the expected resolutions and number of colours, i.e
 6500REM !Sprites23: two colours, high resolution, !Sprites (actually !Sprites24)
 6510REM at mode 12 resolution (double height pixels) in 16 colours, and normal
 6520REM mode 20 resolution, 16 colours for the !Sprites22 icon. If this is not
 6530REM adhered to, then memory shortage errors may occur on a mode change.
 6540Extension$="24"
 6550IF FNModeInfo("YEigFactor",-1)<2 THEN
 6560  IF FNModeInfo("NCol",-1)>2 THEN
 6570    Extension$="22"
 6580  ELSE
 6590    Extension$="23"
 6600  ENDIF
 6610ENDIF
 6620SYS "Wimp_BaseOfSprites" TO ,iconsprite%
 6630SYS "OS_SpriteOp",256+25,iconsprite%,Appname$:REM Delete icon sprite
 6640REM The following three lines assume a mask but no palette:
 6650SYS "OS_SpriteOp",256+40,Sprites,Appname$+Extension$ TO ,,,w,h,,mode:REM Get info about new sprite
 6660SYS "OS_SpriteOp",256+15,iconsprite%,Appname$,0,w,h,mode:REM Create replacement icon sprite
 6670SYS "OS_SpriteOp",256+29,iconsprite%,Appname$:REM Create mask
 6680  :
 6690REM Paint sprite mask into iconsprite mask:
 6700SYS "OS_SpriteOp",256+61,iconsprite%,Appname$,0 TO r0,r1,r2,r3:REM Output to mask
 6710SYS "OS_SpriteOp",256+49,Sprites,Appname$+Extension$,0,0:REM Paint mask from Sprites
 6720GCOL 4,128:CLG:REM Invert to make mask the right way round
 6730SYS "OS_SpriteOp",r0,r1,r2,r3:REM Reset screen output
 6740  :
 6750REM Paint sprite into iconsprite:
 6760SYS "OS_SpriteOp",256+60,iconsprite%,Appname$,0 TO r0,r1,r2,r3:REM Output to new icon sprite
 6770SYS "OS_SpriteOp",256+34,Sprites,Appname$+Extension$,0,0,8:REM Paint copy from Sprites
 6780SYS "OS_SpriteOp",r0,r1,r2,r3:REM Reset screen output
 6790Block!0=Wndw:Block!4=Icn:SYS "Wimp_GetIconState",,Block
 6800Block!8=0:Block!12=0:SYS "Wimp_SetIconState",,Block:REM Re-plot icon
 6810ENDPROC
 6820:
 6830DEF FNCreateWindow(minX,minY,maxX,maxY,Xoffset,Yoffset,Handle,Flags,TitleCol,TitleBackCol,WorkCol,WorkBackCol,ScrollCol,SliderCol,InputCol,WminX,WminY,WmaxX,WmaxY,TitleFlags,Wbutton,SpritePoint,MinW,MinH,TitleData$)
 6840Block!0=minX:Block!4=minY:Block!8=maxX:Block!12=maxY:Block!16=Xoffset:Block!20=Yoffset
 6850Block!24=Handle:Block!28=Flags
 6860Block?32=TitleCol:Block?33=TitleBackCol:Block?34=WorkCol:Block?35=WorkBackCol
 6870Block?36=ScrollCol:Block?37=SliderCol:Block?38=InputCol:Block?39=0
 6880Block!40=WminX:Block!44=WminY:Block!48=WmaxX:Block!52=WmaxY
 6890Block!56=TitleFlags:Block!60=Wbutton:Block!64=SpritePoint
 6900Block!68=(MinH<<15)+MinW :::::::::::: REM 0,0 sets the minimum window with to the title width
 6910$(Block+72)=TitleData$:Block!84=0 ::: REM No icons initially
 6920SYS "Wimp_CreateWindow",,Block TO WindowHandle
 6930=WindowHandle
 6940:
 6950DEF FNCreateIcon(WindowHandle,minX,minY,maxX,maxY,Flags,IconData)
 6960Block!0=WindowHandle
 6970Block!4=minX:Block!8=minY:Block!12=maxX:Block!16=maxY:Block!20=Flags
 6980Block!24=IconData!0:Block!28=IconData!4:Block!32=IconData!8
 6990SYS "Wimp_CreateIcon",,Block TO IconHandle
 7000=IconHandle
 7010:
 7020DEF PROCInitialise
 7030AppSize=HIMEM-&8000:MinSize=AppSize:SlotEnd=HIMEM
 7040ENDPROC
 7050:
 7060DEF FNAllocateMemory(Required)
 7070SlotSize=FNSlotSize(-1)
 7080IF SlotSize<Required THEN NewSize=FNSlotSize(Required):IF NewSize<Required THEN SlotSize=FNSlotSize(AppSize):=0:REM Returns, indicating memory not claimed
 7090IF SlotSize>Required THEN SlotSize=FNSlotSize(Required)
 7100=SlotSize:REM Returns with bytes claimed
 7110:
 7120DEF FNSlotSize(Bytes)
 7130SYS "Wimp_SlotSize",Bytes,-1 TO Bytes
 7140=Bytes
 7150:
 7160DEF PROCMinimiseWimpSlot
 7170dummy=FNAllocateMemory(MinSize)
 7180ENDPROC
 7190:
 7200DEF PROCCloseFileIfPoss(FileHandle)
 7210LOCAL ERROR
 7220ON ERROR LOCAL RESTORE ERROR:ENDPROC:REM Unable to close file
 7230CLOSE#FileHandle
 7240ENDPROC
 7250:
 7260DEF FNFindFileSize(FileName$)
 7270IF FileName$="<Wimp$Scrap>" THEN
 7280  SYS "OS_File",15,FileName$,,,FileName$ TO ,,,,FileSize
 7290ELSE
 7300  N=-1:REPEAT:N+=1:UNTIL MID$(FileName$,LEN(FileName$)-N,1)="."
 7310  PathName$=LEFT$(FileName$,LEN(FileName$)-N):LeafName$=RIGHT$(FileName$,N)
 7320  SYS "OS_File",13,LeafName$,,,PathName$ TO ,,,,FileSize
 7330ENDIF
 7340=FileSize
 7350:
 7360DEF FNNextEntry
 7370REM Gets next entry (created by BPUT#Data,A$) from a file as a string.
 7380REM Use as A$=FNNextEntry.
 7390LOCAL ERROR
 7400ON ERROR LOCAL RESTORE ERROR:="":REM Error reading file
 7410NE$=GET$#Data
 7420WHILE LEFT$(NE$,1)="|"
 7430  NE$=GET$#Data
 7440ENDWHILE
 7450=NE$
 7460:
 7470DEF PROCDragBox(WindowHandle,IconHandle,DragType,SpriteArea,SpriteName$)
 7480Block!0=WindowHandle:SYS "Wimp_GetWindowState",,Block
 7490wminx=Block!4:wmaxy=Block!16
 7500Block!0=WindowHandle:Block!4=IconHandle:SYS "Wimp_GetIconState",,Block
 7510iminx=Block!8:iminy=Block!12:imaxx=Block!16:imaxy=Block!20
 7520Block!0=WindowHandle:Block!4=DragType
 7530Block!8=(wminx+iminx)
 7540Block!12=(wmaxy+iminy)
 7550Block!16=(wminx+imaxx)
 7560Block!20=(wmaxy+imaxy)
 7570Block!24=1:Block!28=1
 7580Block!32=(FNModeInfo("Xpixels",-1)+1)*(2^FNModeInfo("XEigFactor",-1))
 7590Block!36=(FNModeInfo("Ypixels",-1)+1)*(2^FNModeInfo("YEigFactor",-1))
 7600IF DragASprite THEN
 7610  SYS "DragASprite_Start",%10000101,SpriteArea,SpriteName$,Block+8
 7620ELSE
 7630  SYS "Wimp_DragBox",,Block
 7640ENDIF
 7650ENDPROC
 7660:
 7670REM -------------------------------------------------------------------------
 7680REM Routines common to the OmniDesk utilities
 7690REM -------------------------------------------------------------------------
 7700:
 7710DEF PROCDeclareToOmniDesk
 7720Block!0=208:Block!12=0:Block!16=UtilDeclare
 7730Block!20=Task
 7740$(Block+24)=Taskname$
 7750$(Block+44)=OurFileName$
 7760$(Block+55)=FNOmniHelpMessage("CLICK")
 7770$(Block+132)=FNOmniHelpMessage("DRAG")
 7780SYS "Wimp_SendMessage",17,Block,OmniDesk
 7790ENDPROC
 7800:
 7810DEF PROCSayGoodbye
 7820IF OmniDesk<>0 THEN
 7830  Block!0=24:Block!12=0:Block!16=UtilQuitting
 7840  Block!20=Task
 7850  SYS "Wimp_SendMessage",17,Block,OmniDesk
 7860ENDIF
 7870SYS "Interface_CloseDown",Task
 7880SYS "Wimp_CloseDown",Task,&4B534154
 7890ENDPROC
 7900:
 7910DEF FNReadStartupString
 7920REM Returns task handle of OmniDesk (which is passed in the command string)
 7930REM or 0 if not started by OmniDesk.
 7940SYS "OS_GetEnv" TO Command$
 7950A=INSTR(Command$,"-Startup")
 7960IF A<>0 THEN Startup=TRUE
 7970A=INSTR(Command$,"-Exit")
 7980IF A<>0 THEN Exit=TRUE
 7990A=INSTR(Command$,"-OmniDesk")
 8000IF A=0 THEN =0
 8010=VAL(MID$(Command$,A+9))
 8020:
 8030DEF FNReadWindowLocation(Axis$)
 8040REM Reads which radio icon (if any) is selected in the Window Position
 8050REM selector window and returns the axis coordinate (two calls needed)
 8060REM or -1 for no position selected.
 8070Icon=5:REPEAT:Icon+=1:UNTIL (FNSelectedState(Loc,Icon)=TRUE) OR (Icon=31)
 8080IF Icon=31 THEN =-1:REM All icons deselected
 8090Location=-1:Icon-=6:REM Bring icon into range 0-14
 8100CASE Axis$ OF
 8110  WHEN "X","x":Location=Icon DIV 5
 8120  WHEN "Y","y":Location=4-(Icon MOD 5)
 8130ENDCASE
 8140=Location
 8150:
 8160DEF PROCCleanUpLocWindow
 8170REM Makes sure that none of the 'window' icons in the Loc window is selected.
 8180N=5:REPEAT
 8190N+=1:UNTIL N=30 OR FNSelectedState(Loc,N)
 8200PROCUpdateSelectedFlag(Loc,N,FALSE)
 8210ENDPROC
 8220:
 8230REM -------------------------------------------------------------------------
 8240REM Special routines for this program only
 8250REM -------------------------------------------------------------------------
 8260:
 8270DEF PROCClearSpyCalcWindow(Spy)
 8280RESTORE +1
 8290DATA 4,5,10,11,16,17,22,23
 8300FOR N=1 TO 8
 8310  READ Icon:PROCUpdateIcon(SpyCalc,Icon,"")
 8320NEXT
 8330FOR N=26 TO 44
 8340  Block!0=SpyCalc:Block!4=N:SYS "Wimp_GetIconState",,Block
 8350  Block!8=(0<<21):Block!12=(1<<21)
 8360  IF Spy THEN Block!8+=(0<<12):ELSE Block!8+=(11<<12)
 8370  Block!12+=(255<<12)
 8380  SYS "Wimp_SetIconState",,Block
 8390NEXT
 8400Block!0=SpyCalc:Block!4=45:SYS "Wimp_GetIconState",,Block
 8410Block!8=(1<<21):Block!12=(1<<21)
 8420Block!8+=(0<<12):Block!12+=(255<<12)
 8430SYS "Wimp_SetIconState",,Block
 8440PROCUpdateIcon(SpyCalc,46,"&0")
 8450Block!0=SpyCalc:Block!4=46:SYS "Wimp_GetIconState",,Block
 8460IF Spy THEN Block!8=(0<<12):ELSE Block!8=(14<<12)
 8470Block!12=(255<<12)
 8480SYS "Wimp_SetIconState",,Block
 8490ENDPROC
 8500:
 8510DEF FNDoSpy(OldWin)
 8520SYS "Wimp_GetPointerInfo",,Block
 8530Win=Block!12:Ic=Block!16
 8540IF Win=-1 THEN PROCUpdateIcon(SpyCalc,4,"") ELSE PROCUpdateIcon(SpyCalc,4,STR$(Win))
 8550IF Ic=-1 THEN PROCUpdateIcon(SpyCalc,5,"") ELSE PROCUpdateIcon(SpyCalc,5,STR$(Ic))
 8560IF (Win>0) OR ((Win=-2) AND (wimp>=300)) THEN
 8570  Block!0=Win:SYS "Wimp_GetWindowState",,Block
 8580  VminX=Block!4:VminY=Block!8
 8590  VmaxX=Block!12:VmaxY=Block!16
 8600  ScrollX=Block!20:ScrollY=Block!24
 8610  WindFlags=Block!32
 8620  PROCUpdateIcon(SpyCalc,10,STR$(VminX)):PROCUpdateIcon(SpyCalc,11,STR$(VminY))
 8630  PROCUpdateIcon(SpyCalc,16,STR$(VmaxX)):PROCUpdateIcon(SpyCalc,17,STR$(VmaxY))
 8640  PROCUpdateIcon(SpyCalc,22,STR$(ScrollX)):PROCUpdateIcon(SpyCalc,23,STR$(ScrollY))
 8650  IF Win<>OldWin THEN PROCUpdateSwitches(WindFlags)
 8660  IF Win<>OldWin THEN PROCUpdateIcon(SpyCalc,46,"&"+STR$~FNWindFlags)
 8670  REM Only update flags if the window handle has changed.
 8680ELSE
 8690  IF Win<>OldWin THEN
 8700    REM Not the same window as before, so update:
 8710    RESTORE +1
 8720    DATA 10,11,16,17,22,23
 8730    FOR N=1 TO 6
 8740      READ Icon:PROCUpdateIcon(SpyCalc,Icon,"")
 8750    NEXT
 8760    FOR N=26 TO 45
 8770      Block!0=SpyCalc:Block!4=N:SYS "Wimp_GetIconState",,Block
 8780      Block!8=(0<<21):Block!12=(1<<21)
 8790      SYS "Wimp_SetIconState",,Block
 8800    NEXT
 8810    PROCUpdateIcon(SpyCalc,46,"&"+STR$~FNWindFlags)
 8820  ENDIF
 8830ENDIF
 8840=Win
 8850:
 8860DEF PROCUpdateSwitches(WindFlags)
 8870RESTORE +1
 8880DATA 24,25,26,27,28,29,30,1,4,5,6,8,9,10,11,12,13,14,15,31
 8890FOR N=26 TO 45
 8900  READ bit
 8910  PROCUpdateSelectedFlag(SpyCalc,N,(WindFlags AND (1<<bit))=(1<<bit))
 8920NEXT
 8930ENDPROC
 8940:
 8950DEF FNWindFlags
 8960WindFlags=0
 8970RESTORE +1
 8980DATA 24,25,26,27,28,29,30,1,4,5,6,8,9,10,11,12,13,14,15,31
 8990FOR N=26 TO 45
 9000  READ bit
 9010  IF FNSelectedState(SpyCalc,N) THEN WindFlags+=(1<<bit)
 9020NEXT
 9030=WindFlags
 9040:
 9050DEF FNSaveSettings
 9060LOCAL ERROR
 9070ON ERROR LOCAL RESTORE ERROR:PROCCloseFileIfPoss(Data):=FALSE:REM Error writing file
 9080  :
 9090  Data=OPENOUT ("<WindFlags$Dir>.Settings")
 9100  BPUT#Data,"| X and Y grid coordinates of Window Flags window:"
 9110  BPUT#Data,STR$(XPosition)
 9120  BPUT#Data,STR$(YPosition)
 9130  BPUT#Data,"| Spying at startup (-1 for TRUE; 0 for FALSE):"
 9140  BPUT#Data,STR$(Spying)
 9150  CLOSE#Data
 9160  OSCLI("Settype <WindFlags$Dir>.Settings Text")
 9170  :
 9180=TRUE
 9190:
 9200DEF FNLoadSettings
 9210LOCAL ERROR
 9220ON ERROR LOCAL RESTORE ERROR:PROCCloseFileIfPoss(Data):=FALSE:REM 'Settings' file is damaged or missing
 9230  :
 9240  Data=OPENIN "<WindFlags$Dir>.Settings"
 9250  XPosition=VAL(FNNextEntry)
 9260  YPosition=VAL(FNNextEntry)
 9270  Spying=VAL(FNNextEntry)
 9280  CLOSE#Data
 9290  :
 9300  IF XPosition<>-1 AND YPosition<>-1 THEN PROCUpdateSelectedFlag(Loc,6+((5*XPosition)+(4-YPosition)),TRUE)
 9310  PROCTickMenu(MainMenu,1,Spying)
 9320  :
 9330=TRUE
 9340:
 9350DEF PROCDefaultSettings
 9360XPosition=4:YPosition=2
 9370PROCUpdateSelectedFlag(Loc,6+((5*XPosition)+(4-YPosition)),TRUE)
 9380Spying=TRUE
 9390PROCTickMenu(MainMenu,1,Spying)
 9400ENDPROC
 9410:
 9420DEF PROCRAMTransmit
 9430OtherTaskHandle=Block!4:MyRef=Block!8:TransmitBuffer=Block!20
 9440SYS "Wimp_TransferBlock",Task,Transmission,OtherTaskHandle,TransmitBuffer,10
 9450Block!0=28:Block!16=7:REM RAM Transmit
 9460Block!12=MyRef:Block!20=TransmitBuffer
 9470Block!24=LEN($Transmission)
 9480SYS "Wimp_SendMessage",17,Block,OtherTaskHandle
 9490Dragging$=""
 9500ENDPROC
 9510:
 9520DEF PROCWimpScrapTransmit
 9530OtherTaskHandle=Block!4:MyRef=Block!8
 9540SaveFilename$=LEFT$($(Block+44),INSTR($(Block+44),CHR$0)-1)
 9550LOCAL ERROR
 9560ON ERROR LOCAL RESTORE ERROR:ERROR 9999,"An error has occurred during transmission."
 9570Data=OPENOUT SaveFilename$
 9580BPUT#Data,$(Transmission)
 9590CLOSE#Data
 9600OSCLI("SetType "+SaveFilename$+" Text")
 9610Block!0=(44+LEN(SaveFilename$)):Block!0=(Block!0)+(4-((Block!0) MOD 4)):REM Word align
 9620Block!12=MyRef:Block!16=3:REM DataLoad
 9630Block!20=DraggedToWindow:Block!24=DraggedToIcon
 9640Block!28=DraggedToX:Block!32=DraggedToY
 9650Block!36=12:REM Never more than 12 bytes
 9660Block!40=&FFF:REM Filetype of Text
 9670$(Block+44)=SaveFilename$+CHR$0:Dragging$=""
 9680SYS "Wimp_SendMessage",18,Block,OtherTaskHandle
 9690ENDPROC
 9700:
 9710DEF FNMakeDraggingSprite
 9720LOCAL ERROR
 9730ON ERROR LOCAL SYS "OS_SpriteOp",r0,r1,r2,r3:RESTORE ERROR:ERROR ERR,REPORT$
 9740Scaling=FNModeInfo("YEigFactor",-1)
 9750IF Scaling<=1 THEN
 9760  Name$="flags_high"
 9770  SYS "OS_SpriteOp",256+60,Sprites,Name$ TO r0,r1,r2,r3
 9780  SYS "OS_SpriteOp",256+34,Sprites,"draghigh",0,0,8
 9790ELSE
 9800  Name$="flags_low"
 9810  SYS "OS_SpriteOp",256+60,Sprites,Name$ TO r0,r1,r2,r3
 9820  SYS "OS_SpriteOp",256+34,Sprites,"draglow",0,0,8
 9830ENDIF
 9840SYS "Wimp_SetColour",7
 9850VDU5:MOVE (160-(16*LEN($Transmission)))/2,36
 9860VDU 23,17,7,6,8;8;0;:REM Single-height text
 9870IF Scaling<=1 THEN VDU 23,17,7,6,8;16;0;:REM Double-height text
 9880PRINT $Transmission
 9890SYS "OS_SpriteOp",r0,r1,r2,r3
 9900=Name$

!� >!RunImage for Window Flags
:
AVersionNumber$="1�02 (22 June 1993)":Taskname$="Window�Flags"
(Exit=�:Startup=�:Done=�
2DoModeChange=�
<:
F6� Block 256,Buffer 256,MenuHelp 16,Transmission 10
P/IndMenuMax=64:� IndirectMenuText IndMenuMax
Z7� Templates 2489,InfoInd 189,LocInd 592,SpyInd 1087
d� IBMenu 76,MainMenu 124
n:
x*� Messages used by the OmniDesk suite:
�_UtilDeclare=&825C0:UtilOpen=&825C1:UtilQuitting=&825C2:UtilReside=&825C3:UtilAckLoad=&825C4
�+� These are official Acorn allocations.
�:
�n� � Block!0=�:$(Block+4)=�$+" (internal error code "+�(�)+")"+�0:ș "Wimp_ReportError",Block,1,Taskname$:�
�:
�?OmniDesk=�ReadStartupString:� Also assigns Exit and Startup
�:
�*Set WindFlags$RISCOS 3
�7*RMEnsure UtilityModule 3.00 Set WindFlags$RISCOS 2
�Zș "XOS_ReadVarVal","WindFlags$RISCOS",Block,256,0,0 � ,,len:Block?len=13:wimp$=$Block
�� wimp$<>"3" � wimp$="2"
�*Unset WindFlags$RISCOS
�:
!*Set WindFlags$SpriteDrag Yes
:*RMEnsure DragASprite 0.00 Set WindFlags$SpriteDrag No
Qș "XOS_ReadVarVal","WindFlags$SpriteDrag",Block,256,0,0 � ,,len:Block?len=13
"2� $Block="Yes" � DragASprite=�:� DragASprite=�
,*Unset WindFlags$SpriteDrag
6:
@Yș "XOS_ReadVarVal","Obey$Dir",Block,256,0,0 � ,,len:Block?len=13:OurFileName$=$Block
J8N=-1:�:N+=1:� �OurFileName$,�(OurFileName$)-N,1)="."
TOOurPathName$=�OurFileName$,�(OurFileName$)-N):OurFileName$=�OurFileName$,N)
^:
h^� Read size of sprite file and load it. We need to DIM 16 bytes more than the file's size.
r:ș "OS_FSControl",28,"<WindFlags$Dir>.Sprites" � ,,len
|�� Sprites len+16:!Sprites=len+16:Sprites!4=0:Sprites!8=16:Sprites!12=16:ș "OS_SpriteOp",256+10,Sprites,"<WindFlags$Dir>.Sprites"
�:
�� wimp$="3" �
�  � messagelist% 36
�/  messagelist%!0=&502:messagelist%!4=&400C1
�:  messagelist%!8=UtilOpen:messagelist%!12=UtilQuitting
�3  messagelist%!16=UtilReside:messagelist%!20=10
�;  messagelist%!24=6:messagelist%!28=2:messagelist%!32=0
�K  ș "Wimp_Initialise",300,&4B534154,Taskname$,messagelist% � wimp,Task
��
�>  ș "Wimp_Initialise",200,&4B534154,Taskname$ � wimp,Task
��
�:
�"ș "Interface_Initialise",Task
:
7ș "Wimp_OpenTemplate",,"<WindFlags$Dir>.Templates"
Eș "Wimp_LoadTemplate",,Templates,InfoInd,InfoInd+189,-1,"Info",0
&,ș "Wimp_CreateWindow",,Templates � Info
0\ș "Wimp_LoadTemplate",,Templates,LocInd,LocInd+592,-1,"WindowXY",0:Templates!64=Sprites
:+ș "Wimp_CreateWindow",,Templates � Loc
D\ș "Wimp_LoadTemplate",,Templates,SpyInd,SpyInd+1087,-1,"SpyCalc",0:Templates!64=Sprites
N/ș "Wimp_CreateWindow",,Templates � SpyCalc
Xș "Wimp_CloseTemplate"
b:
l�BuildMenus
v:
��CleanUpLocWindow
�ReadError=�(�LoadSettings)
��ClearSpyCalcWindow(Spying)
�:
��Initialise
�:
�� OmniDesk=0 �
�   � Put Icon on the icon-bar
�  Block!0=-1
�1  Block!4=0:Block!8=0:Block!12=68:Block!16=68
�5  Block!20=&17003002:$(Block+24)="!WindFlags"+�13
�+  ș "Wimp_CreateIcon",,Block � IconBar
��
:
&� OmniDesk<>0 � �DeclareToOmniDesk
R� Startup � Done=�:� '-Startup' parameter means 'declare and die immediately'.
 :
*&�UpdateIcon(Info,3,VersionNumber$)
46�ModeChange:� To update icon-bar icon if necessary
>:
H� � �Error
R�� ReadError � ReadError=�:�DefaultSettings:� 9999,"An error occurred whilst reading the settings file. Default settings will therefore be used."
\:
f)ș "OS_ReadMonotonicTime" � polltime%
pOldWin=0
z:
�� Main program loop
��
�6  ș "Wimp_PollIdle",%1100000110000,Block � Reason
�&  ș "Interface_Poll",Reason,,Task
�4  ș "Interface_PreProcessKey",Reason,Block,Task
�  Ȏ Reason �
�3    � 0 : ș "OS_ReadMonotonicTime" � polltime%
�4             � Spying � (�OpenState(SpyCalc))  �
�6               OldWin=�DoSpy(OldWin):polltime%+=10
�             �
�N               polltime%+=100:� Do a Wimp_Poll approximately once a second
�             �
�^             � DoModeChange � � �OpenState(SpyCalc) � �Open(SpyCalc,�,XPosition,YPosition)
    � 1 : �Redraw
)    � 2 : ș "Wimp_OpenWindow",,Block
*    � 3 : ș "Wimp_CloseWindow",,Block
$              � Exit � Done=�
.    � 6 : �MouseButton
8    � 7 : �DragFinished
B    � 8 : �KeyPressed
L    � 9 : �DecodeMenu
V$    � 17,18,19 : �RecieveMessage
`  �
j
� Done
t�SayGoodbye
~�
�:
�� �Error
�Click=0:Block!0=�:Ȏ � �
�  � 9999:� Custom error
�    $(Block+4)=�$+�0
�?    ș "Wimp_ReportError",Block,17,"Notice from "+Taskname$
�  
�v    $(Block+4)=�$+" (internal error code "+Þ+"). Click on OK to continue, or Cancel to terminate the program."+�0
�8    ș "Wimp_ReportError",Block,3,Taskname$ � ,Click
��
�� Click=2 � �SayGoodbye:�
��
:

.� �Open(WindowHandle,TopOfStack,across,up)
Block!0=WindowHandle
#ș "Wimp_GetWindowState",,Block
(J� (across<>-1) � (across<>-1) � �DecideWindowPosition(Block,across,up)
2� TopOfStack � Block!28=-1
<ș "Wimp_OpenWindow",,Block
F�
P:
Z� �Close(WindowHandle)
dBlock!0=WindowHandle
n#ș "Wimp_GetWindowState",,Block
x ș "Wimp_CloseWindow",,Block
��
�:
�,� �DecideWindowPosition(Block,across,up)
�L� Use of this procedure lets you open windows on an invisible grid which
�I� automatically fits itself to the screen mode in use. There are five
�J� positions across (left, mid-left, centre, mid-right, right) and five
�G� positions up (bottom of screen, above icon-bar, centre of screen,
�+� centre top of screen, top of screen).
�  :
�CXpixels=�ModeInfo("XPixels",-1):Ypixels=�ModeInfo("YPixels",-1)
�OXEigFactor=�ModeInfo("XEigFactor",-1):YEigFactor=�ModeInfo("YEigFactor",-1)
�  :
�8top=Block!16:right=Block!12:bot=Block!8:left=Block!4
Aș "Wimp_OpenWindow",,Block:ș "Wimp_GetWindowOutline",,Block
&TB=((Block!16)-top)/(2^YEigFactor)
(VS=((Block!12)-right)/(2^XEigFactor)
"%HS=(bot-(Block!8))/(2^YEigFactor)
,&LP=(left-(Block!4))/(2^XEigFactor)
6K� LP is Left Pixel: normally present, but not if window is transparent.
@%width=(right-left)/(2^XEigFactor)
J#height=(top-bot)/(2^YEigFactor)
TȎ across �
^  � 0:x=LP
h,  � 1:x=LP+((Xpixels+1)-(width+LP+VS))/4
r,  � 2:x=LP+((Xpixels+1)-(width+LP+VS))/2
|2  � 3:x=LP+(3*(((Xpixels+1)-(width+LP+VS))/4))
�"  � 4:x=(Xpixels+1)-(width+VS)
��
�Ȏ up �
�  � 0:y=HS
�#  � 1:y=HS+(132/(2^YEigFactor))
�-  � 2:y=HS+((Ypixels+1)-(height+TB+HS))/2
�3  � 3:y=HS+(3*(((Ypixels+1)-(height+TB+HS))/4))
�#  � 4:y=(Ypixels+1)-(height+TB)
��
�(� Above coordinates position window.
�(� Now convert to screen coordinates:
�)x=x*(2^XEigFactor):y=y*(2^YEigFactor)
�;width=width*(2^XEigFactor):height=height*(2^YEigFactor)
Block!12=x+width:Block!4=x
Block!16=y+height:Block!8=y
�
&:
0O� -------------------------------------------------------------------------
:� Wimp poll routines
DO� -------------------------------------------------------------------------
N:
X
� �Redraw
b� DoModeChange �
ld  � Re-opening windows need an extra wimp_poll to happen after the mode change in order to work:
vB  � �OpenState(SpyCalc) � �Open(SpyCalc,�,XPosition,YPosition)
�  DoModeChange=�
��
�(ș "Wimp_RedrawWindow",,Block � flag
�ȕ flag
�*  ș "Interface_Render3dWindow",,Block
�*  ș "Wimp_GetRectangle",,Block � flag
��
��
�:
�� �RecieveMessage
�Ȏ Block!16 �
�  � 0 : Done=�
�  � 2 : � DataSaveAck
M           � Other task wants a transfer via <Wimp$Scrap> rather than RAM
!           �WimpScrapTransmit
  � 6 : � RAM Fetch
 .           � Other task is asking for data
*           �RAMTransmit
41  � 10: � OmniDesk=0 � �SaveDesktop(Block!20)
>E           � Only save if we have not been started up by OmniDesk
H  � &502 : �Help
R  � &400C1 : �ModeChange
\=  � UtilOpen : � $(Block+24)=Taskname$ � �OmniDeskCalling
f&  � UtilQuitting : � OmniDesk<>0 �
p8                        � Block!20=OmniDesk � Done=�
z                      �
�  � UtilReside : Exit=�
��
��
�:
�� �DeleteWimpScrap
�� �
�� � � � �:�
�<� We may receive try to delete a non-existant Wimp$Scrap
�@� file if the receiving task did not recognise the filetype.
��("Delete <Wimp$Scrap>")
��
�:
�� �MouseButton
	1MouseX=Block!0:MouseY=Block!4:Buttons=Block!8
	!Window=Block!12:Icon=Block!16
	Ȏ Window �
	$"  � -2:� Icon bar icon clicked
	.    Ȏ Buttons �
	8      � 1 : � Adjust
	B      � 2 : � Menu
	L9        M%=IBMenu:MenuX=MouseX:MenuY=MouseY:�MakeMenu
	V      � 4 : � Select
	`0        �Open(SpyCalc,�,XPosition,YPosition)
	j	    �
	t  � SpyCalc
	~    Ȏ Buttons �
	�      � 2 : � Menu
	�1        M%=MainMenu:MenuX=MouseX:MenuY=MouseY
	�        � wimp>=310 �
	�`          � �$MainMenuTitle,1)="\" � $MainMenuTitle=�$MainMenuTitle,�($MainMenuTitle)-1)+�13
	�C          � XPosition=4 � $MainMenuTitle="\"+$MainMenuTitle+�13
	�
        �
	�        �MakeMenu
	�!      � 1,4 : � Select,Adjust
	�'        � (Icon>=26) � (Icon<=44) �
	�6          �UpdateIcon(SpyCalc,46,"&"+�~�WindFlags)
	�
        �
	�      
:        � (Buttons>7) � (Window=SpyCalc) � (Icon=46) �

4          $Transmission=�ReadIconStr(SpyCalc,46)
R          Dragging$="Flags":�DragBox(SpyCalc,46,5,Sprites,�MakeDraggingSprite)

        �
(	    �
20  � Loc � Buttons<8:� Reposition main window
<    � Icon>=6 �
F,      XPosition=�ReadWindowLocation("X")
P,      YPosition=�ReadWindowLocation("Y")
ZF      � �OpenState(SpyCalc) � �Open(SpyCalc,�,XPosition,YPosition)
d	    �
n�
x�
�:
�� �DragFinished
�)� DragASprite � ș "DragASprite_Stop"
�#ș "Wimp_GetPointerInfo",,Block
�.� Block!12=-1 � �:� Dragged to background.
�YDraggedToX=Block!0:DraggedToY=Block!4:DraggedToWindow=Block!12:DraggedToIcon=Block!16
�0� OK - Let's begin an inter-application save
�MyRef=0
�4Block!0=256:Block!12=MyRef:Block!16=1:� DataSave
�[Block!20=DraggedToWindow:Block!24=DraggedToIcon:Block!28=DraggedToX:Block!32=DraggedToY
�*Block!36=12:� Never more than 12 bytes
�$Block!40=&FFF:� Filetype of Text
�$(Block+44)=Dragging$+�0
@ș "Wimp_SendMessage",17,Block,DraggedToWindow,DraggedToIcon
B� DraggedToIcon included in case DraggedToWindow=-2 (icon bar)
�
":
,� �KeyPressed
62Window=Block!0:Icon=Block!4:Character=Block!24
@Ȏ Window �
J  � SpyCalc:
T    � Character=13 �
^S      A$=�ReadIconStr(SpyCalc,46):� A$="" � A$="0":�UpdateIcon(SpyCalc,46,"&0")
h       �UpdateSwitches(�(A$))
r	    �
|(      ș "Wimp_ProcessKey",Character
�	    �
�  
�&    ș "Wimp_ProcessKey",Character
��
��
�:
�� �DecodeMenu
�*Sub0=Block!0:Sub1=Block!4:Sub2=Block!8
�CloseMenu=�
�Ȏ M% �
�  � IBMenu:
�    Ȏ Sub0 �
�
      � 0
+        ș "Wimp_GetPointerInfo",,Block
<        ș "Wimp_CreateMenu",,Info,Block!0-24,Block!4+24
        CloseMenu=�
&
      � 1
0        Done=�
:	    �
D  � MainMenu:
N    Ȏ Sub0 �
X
      � 0
b+        ș "Wimp_GetPointerInfo",,Block
l<        ș "Wimp_CreateMenu",,Info,Block!0-24,Block!4+24
v        CloseMenu=�
�
      � 1
�8        Spying=� Spying:�TickMenu(MainMenu,1,Spying)
�0        �ClearSpyCalcWindow(Spying):OldWin=0
�4        �UpdateIcon(SpyCalc,46,"&"+�~�WindFlags)
�m        ș "Wimp_GetCaretPosition",,Block:� (Block!0=SpyCalc) � Spying � ș "Wimp_SetCaretPosition",-1,-1
�
      � 2
�+        ș "Wimp_GetPointerInfo",,Block
�;        ș "Wimp_CreateMenu",,Loc,Block!0-24,Block!4+24
�        CloseMenu=�
�
      � 3
�\        � � �SaveSettings � � 9999,"An error occurred whilst writing the settings file."
�	    �
��

#ș "Wimp_GetPointerInfo",,Block

3� ((Block!8 � 1)=1) � (� CloseMenu) � �MakeMenu

�

 :

*O� -------------------------------------------------------------------------

4� Menu routines

>O� -------------------------------------------------------------------------

H:

R� �BuildMenus

\I� This procedure should only be visited once, since it contains DIMs.

f  :

pO� In the menu title strings below, if a "|" character is present it will be

zO� replaced by a space under RISC OS 3.1 (or greater), or will terminate the

�O� string under earlier versions of the wimp. This allows the new indirected

�F� menu titles to be used (which were introduced with RISC OS 3.1).

�  :

�#IndirectMenuTextOffsetPointer=0

�N� This points to a pool to be used by all menus for their indirected text.

�  :

�
M%=IBMenu

�=� wimp>=310 � Title$="Window Flags":� Title$="Wind Flags"

�5� IBMenuTitle �(Title$)+1:$IBMenuTitle=Title$+�13

��MenuInit(IBMenuTitle)

��MenuItem("Info",0,Info)

��MenuItem("Quit",128,-1)

�  :
M%=MainMenu
=� wimp>=310 � Title$="Window Flags":� Title$="Wind Flags"
9� MainMenuTitle �(Title$)+2:$MainMenuTitle=Title$+�13
$�MenuInit(MainMenuTitle)
.�MenuItem("Info",2,Info)
8$�MenuItem("Spy on windows",0,-1)
B&�MenuItem("Window position",2,Loc)
L%�MenuItem("Save settings",128,-1)
V�
`:
j� �MakeMenu
t� MenuX<0 � MenuX=0
~*� MenuY<184 � MenuY=184:� for icon bar
�7ș "Wimp_CreateMenu",,M%,MenuX-((36+M%!16)/2),MenuY
��
�:
�� �MenuInit(MenuTitle)
�� wimp>=310 �
�7  A=�$MenuTitle,"|"):� A<>0 � ?(MenuTitle+(A-1))=32
�  MenuMax=�($MenuTitle)
�  M%!0=MenuTitle
��
�7  A=�$MenuTitle,"|"):� A<>0 � ?(MenuTitle+(A-1))=13
�   MenuMax=�(�$MenuTitle,12))
�  $M%=�$MenuTitle,12)
�

$M%?12=7:M%?13=2:M%?14=11:M%?15=0
M%!16=MenuMax*16
M%!20=44:M%!24=0
(P%=M%+28
2�
<:
F!� �MenuItem(Text$,Flags,Link)
PK� Flags: 1-ticked, 2-dashed line, 4-writeable, 8-message, 128-last item
Z1� Link: menu or window handle for sub-pointer
dP%!0=Flags:P%!4=Link
n� �(Text$)<=12 �
x%  P%!8=&07003021:� Not indirected
�  $(P%+12)=Text$
��
�!  P%!8=&07003121:� Indirected
�:  P%!12=IndirectMenuText+IndirectMenuTextOffsetPointer
�  P%!16=0:P%!20=0
�A  $(IndirectMenuText+IndirectMenuTextOffsetPointer)=Text$+�13
�/  IndirectMenuTextOffsetPointer+=�(Text$)+1
Ȃ  � IndirectMenuTextOffsetPointer>IndMenuMax � � 0,"The indirect menu text buffer has overflowed. Please allocate more space."
��
�
P%+=24
�>� MenuMax<�(Text$) � MenuMax=�(Text$):M%!16=(MenuMax+1)*16
�A� (Flags=128) � (wimp>=310) � M%!28=(((M%!28) � � 256) � 256)
�7  � Indirected menu titles for RISC OS 3.1 upwards.
�
:
O� -------------------------------------------------------------------------
")� Responses to incoming wimp messages
,O� -------------------------------------------------------------------------
6:
@� �SaveDesktop(File)
J� �
TG� � � Block!12=Block!8:ș "Wimp_SendMessage",19,Block,Block!4:� �:�
^I� The above line acknowledges the message if an error occurs, thereby
h � aborting the desktop save.
r+�#File,"Run "+OurPathName$+OurFileName$
|�
�:
�� �Help
�4Block!12=Block!8:Block!16=&503:HelpInfo=Block+20
�  :
�0� Block!32 gives window, Block!36 gives icon
�  :
�Ȏ Block!32 �
�2  � -2:�Send("This is the Window Flags icon.")
�=          �Send("Click MENU for information or to quit.")
�D          �Send("Click SELECT to open the Window Flags window.")
�  � SpyCalc:
�    Ȏ Block!36 �
�_      � 0,1,2,3,4,5:�Send("This area shows the window and icon handles under the pointer.")
k      � 6,7,8,9,10,11:�Send("This area shows the minimum coordinates of the window under the pointer.")
o      � 12,13,14,15,16,17:�Send("This area shows the maximum coordinates of the window under the pointer.")
o      � 18,19,20,21,22,23:�Send("This area shows how much the window under the pointer has been scrolled.")
&      � 24,25,47:� Spying �
0i                      �Send("This area shows the individual flags for the window under the pointer.")
:                    �
D�                      �Send("Click the switches in this area to work out the window flags, or enter a value in the box and press RETURN to find out what it means.")
N                    �
XN      � 26:�Send("This switch is selected if the window has a Back icon.")
bO      � 27:�Send("This switch is selected if the window has a Close icon.")
lS      � 28:�Send("This switch is selected if the window has a Title Bar icon.")
vU      � 29:�Send("This switch is selected if the window has a Toggle Size icon.")
�X      � 30:�Send("This switch is selected if the window has a vertical scroll bar.")
�N      � 31:�Send("This switch is selected if the window has a Size icon.")
�Z      � 32:�Send("This switch is selected if the window has a horizontal scroll bar.")
�K      � 33:�Send("This switch is selected if the window can be moved.")
�q      � 34:�Send("This switch is selected if the window can be updated automatically by the window manager.")
�H      � 35:�Send("This switch is selected if the window is a pane.")
�h      � 36:�Send("This switch is selected if the window can move beyond the limits of the desktop.")
�v      � 37:�Send("This switch is selected if window scrolling is not automatic, and the arrow icons auto-repeat.")
�}      � 38:�Send("This switch is selected if window scrolling is not automatic, and the arrow icons do not auto-repeat.")
ڀ      � 39:�Send("This switch is selected if the window's colours are treated as GCOL colours rather than Desktop colours.")
�q      � 40:�Send("This switch is selected if other windows are not allowed to be opened behind this window.")
�Z      � 41:�Send("This switch is selected if the window genereates 'hot key' events.")
�q      � 42:�Send("This switch is selected if the window is being forced to stay on screen (RISC OS 3 only).")
�      � 43:�Send("This switch is selected if the right-hand window extend is ignored during resize drags (RISC OS 3 only).")
{      � 44:�Send("This switch is selected if the lower window extent is ignored during resize drags (RISC OS 3 only).")
r      � 45:�Send("This switch is selected if the window has been defined using the new format specification.")
 C      � 46:�Send("This shows the window flags in hexadecimal.")
*f              � � Spying � �Send("Enter a value here and press RETURN to find out what it means.")
4v              � � Spying � �Send("You can drag this figure out to another application or to a directory display.")
>:       �Send("This is the Window Flags main window.")
HN                �Send("You can spy on windows or calculate window flags.")
R	    �
\J  � Info:�Send("This window displays information about Window Flags.")
f]            �Send("Window Flags is a member of the OmniDesk Suite of desktop utilities.")
p  � Loc:
z
   Ȏ � �
�m     � ((Block!36)<6):�Send("This window lets you snap the magnifier window to an invisble screen grid.")
��                         �Send("The second position up puts the window just above the icon-bar, and is therefore not evenly spaced with the other rows.")
��      �Send("Click SELECT on the position you want the window to snap to, or ADJUST on the window icon to turn the snapping off.")
�u               �Send("If snapping is on, the window will open at the appropriate position when you change mode.")
�   �
�
�  � wimp>=217 �
�1    MenuHelp!0=-1:MenuHelp!4=-1:MenuHelp!8=-1
�;    ș "Wimp_GetMenuState",1,MenuHelp,Block!32,Block!36
�    Ȏ M% �
�      � IBMenu:
�        � MenuHelp!4=-1 �
�          Ȏ MenuHelp!0 �
Z            � 0:�Send("Move the pointer right to see information about Window Flags.")
?            � 1:�Send("Click SELECT to quit Window Flags.")
B             �Send("This is the Window Flags icon-bar menu.")
$          �
.
        �
8      � MainMenu:
BW        Direction$="right":� wimp>=310 � �(MainMenuTitle?0)="\" � Direction$="left"
L        Ȏ MenuHelp!0 �
Va          � 0:�Send("Move the pointer "+Direction$+" to see information about Window Flags.")
`          � 1:� Spying �
j`                   �Send("Click SELECT or ADJUST to stop spying and work out window flags.")
t                 �
~m                   �Send("Click SELECT or ADJUST to spy on windows you point to with the mouse pointer.")
�                 �
�x          � 2:�Send("Move the pointer "+Direction$+" to set the position of the Window Flags window on the screen.")
�m          � 3:�Send("Click SELECT or ADJUST to save the Window Flags window position and spying status.")
�<           �Send("This is the Window Flags main menu.")
�
        �
�	    �
�  �
��
�  :
�?HelpInfo=0
�$Block!0=(HelpInfo+4-Block) � � 3
�*ș "Wimp_SendMessage",17,Block,Block!4
�

:
� �OmniHelpMessage(A$)
<� A$="CLICK" � =�"open the Window Flags window.",76)+�13
(� A$="DRAG" � =�"",76)+�13
2=""
<:
F� �Send(Text$)
P$HelpInfo=Text$+"|M"
ZHelpInfo+=�(Text$)+2
d�
n:
x� �OmniDeskCalling
�� OmniDesk=0 � �
�I� This first line is for if a broadcast message is received which was
�A� intended for a transient copy of the utility. A stand-alone
�?� instantiation of the utility should ignore such messages.
�Ȏ Block!20 �
�.  � 4:�Open(SpyCalc,�,XPosition,YPosition)
��
��
�:
�� �ModeChange
�DoModeChange=�
�>� OmniDesk=0 � �UpdateIconForMode("!WindFlags",-2,IconBar)
��
:
O� -------------------------------------------------------------------------
8� General non-specific useful routines (mostly wimp)
"O� -------------------------------------------------------------------------
,:
6 � �UpdateIcon(Wndw,Icn,Txt$)
@:Block!0=Wndw:Block!4=Icn:ș "Wimp_GetIconState",,Block
J� �(Txt$)>(Block!36)-1 �
T&  � ((Block!24) � (1<<9))=(1<<9) �
^    � Right-justified
h$    Txt$="�"+�Txt$,(Block!36)-2)
r  �
|#    � Left-justified or centred
�+    Txt$=�Txt$,(Block!36)-1):�Txt$)="�"
�  �
��
�F� ^ Ensures the text can't overflow the maximum space in the icon.
�� $(Block!28)<>Txt$ �
�+  $(Block!28)=Txt$:Block!8=0:Block!12=0
�#  ș "Wimp_SetIconState",,Block
��
�%ș "Wimp_GetCaretPosition",,Block
�"� Block!0=Wndw � Block!4=Icn �
�<  � If this icon owns the caret, then put it at the end.
�8  ș "Wimp_SetCaretPosition",Wndw,Icn,0,0,-1,�(Txt$)
��
�
:
+� �UpdateIconColour(Wndw,Icn,FCol,BCol)
&� Change an icon's colours
0:Block!0=Wndw:Block!4=Icn:ș "Wimp_GetIconState",,Block
:;� (((Block?27)>>4)=BCol) � (((Block?27) � 16)=FCol) � �
D'  � ^ Same colour, so don't change.
N:Block!12=(%11111111<<24):Block!8=(BCol<<28)+(FCol<<24)
X!ș "Wimp_SetIconState",,Block
b�
l:
v)� �UpdateSelectedFlag(Wndw,Icn,State)
�1� Use State=TRUE to make icon become selected
�:Block!0=Wndw:Block!4=Icn:ș "Wimp_GetIconState",,Block
�/� ((Block!24) � (1<<21))=((-State)<<21) � �
�@Block!12=(1<<21):� State � Block!8=(1<<21) � Block!8=(0<<21)
�!ș "Wimp_SetIconState",,Block
��
�:
�'� �UpdateShadedFlag(Wndw,Icn,State)
�/� Use State=TRUE to make icon become shaded
�:Block!0=Wndw:Block!4=Icn:ș "Wimp_GetIconState",,Block
�/� ((Block!24) � (1<<22))=((-State)<<22) � �
�@Block!12=(1<<22):� State � Block!8=(1<<22) � Block!8=(0<<22)
�!ș "Wimp_SetIconState",,Block
�
:
� �SelectedState(Wndw,Icn)
 :Block!0=Wndw:Block!4=Icn:ș "Wimp_GetIconState",,Block
*)� ((Block!24) � (1<<21))=(1<<21) � =�
4=�
>:
H� �ShadedState(Wndw,Icn)
R:Block!0=Wndw:Block!4=Icn:ș "Wimp_GetIconState",,Block
\)� ((Block!24) � (1<<22))=(1<<22) � =�
f=�
p:
z� �OpenState(Wndw)
�5� Returns TRUE if window is open; false otherwise
�0Block!0=Wndw:ș "Wimp_GetWindowState",,Block
�)� ((Block!32) � (1<<16))=(1<<16) � =�
�=�
�:
�!� �ShadeMenu(Menu,Item,State)
�P!(Menu+28+(24*Item)+8)=(!(Menu+28+(24*Item)+8) � � (1<<22)) � ((-State)<<22)
��
�:
� � �TickMenu(Menu,Item,State)
�@!(Menu+28+(24*Item))=(!(Menu+28+(24*Item)) � � 1) � (-State)
��
�:
� �MenuShaded(Menu,Item)
5� (!(Menu+28+(24*Item)+8) � (1<<22))=(1<<22) � =�
=�
$:
.� �MenuTicked(Menu,Item)
8'� (!(Menu+28+(24*Item)) � 1)=1 � =�
B=�
L:
V� �ReadIcon(Wndw,Icn)
` � Read numeric value of icon
j:Block!0=Wndw:Block!4=Icn:ș "Wimp_GetIconState",,Block
t=�($(Block!28))
~:
�� �ReadIconStr(Wndw,Icn)
�� Read string value of icon
�:Block!0=Wndw:Block!4=Icn:ș "Wimp_GetIconState",,Block
�=$(Block!28)
�:
�� �ModeInfo(var$,mode)
�)� Use mode=-1 for current screen mode
�
Ȏ var$ �
�:  � "XPixels":ș "OS_ReadModeVariable",mode,11 � ,,var
�:  � "YPixels":ș "OS_ReadModeVariable",mode,12 � ,,var
�6  � "NCol":ș "OS_ReadModeVariable",mode,3 � ,,var
�<  � "XEigFactor":ș "OS_ReadModeVariable",mode,4 � ,,var
<  � "YEigFactor":ș "OS_ReadModeVariable",mode,5 � ,,var

?  � "BPP":ș "OS_ReadModeVariable",mode,9 � ,,var:var=2^var
6   var=-1:� Fall-through for a faulty input value
�
(=var
2:
<+� �UpdateIconForMode(Appname$,Wndw,Icn)
FN� This procedure requires that ALL the icon sprites are defined in mode 20
PN� or mode 27 (which is equivalent) with a mask but no palette. They should
ZN� still appear to have the expected resolutions and number of colours, i.e
dN� !Sprites23: two colours, high resolution, !Sprites (actually !Sprites24)
nL� at mode 12 resolution (double height pixels) in 16 colours, and normal
xL� mode 20 resolution, 16 colours for the !Sprites22 icon. If this is not
�I� adhered to, then memory shortage errors may occur on a mode change.
�Extension$="24"
�$� �ModeInfo("YEigFactor",-1)<2 �
�   � �ModeInfo("NCol",-1)>2 �
�    Extension$="22"
�  �
�    Extension$="23"
�  �
��
�*ș "Wimp_BaseOfSprites" � ,iconsprite%
�Eș "OS_SpriteOp",256+25,iconsprite%,Appname$:� Delete icon sprite
�=� The following three lines assume a mask but no palette:
�bș "OS_SpriteOp",256+40,Sprites,Appname$+Extension$ � ,,,w,h,,mode:� Get info about new sprite
\ș "OS_SpriteOp",256+15,iconsprite%,Appname$,0,w,h,mode:� Create replacement icon sprite
>ș "OS_SpriteOp",256+29,iconsprite%,Appname$:� Create mask
  :
"-� Paint sprite mask into iconsprite mask:
,Qș "OS_SpriteOp",256+61,iconsprite%,Appname$,0 � r0,r1,r2,r3:� Output to mask
6Uș "OS_SpriteOp",256+49,Sprites,Appname$+Extension$,0,0:� Paint mask from Sprites
@7� 4,128:�:� Invert to make mask the right way round
J6ș "OS_SpriteOp",r0,r1,r2,r3:� Reset screen output
T  :
^#� Paint sprite into iconsprite:
h\ș "OS_SpriteOp",256+60,iconsprite%,Appname$,0 � r0,r1,r2,r3:� Output to new icon sprite
rWș "OS_SpriteOp",256+34,Sprites,Appname$+Extension$,0,0,8:� Paint copy from Sprites
|6ș "OS_SpriteOp",r0,r1,r2,r3:� Reset screen output
�:Block!0=Wndw:Block!4=Icn:ș "Wimp_GetIconState",,Block
�EBlock!8=0:Block!12=0:ș "Wimp_SetIconState",,Block:� Re-plot icon
��
�:
��� �CreateWindow(minX,minY,maxX,maxY,Xoffset,Yoffset,Handle,Flags,TitleCol,TitleBackCol,WorkCol,WorkBackCol,ScrollCol,SliderCol,InputCol,WminX,WminY,WmaxX,WmaxY,TitleFlags,Wbutton,SpritePoint,MinW,MinH,TitleData$)
�ZBlock!0=minX:Block!4=minY:Block!8=maxX:Block!12=maxY:Block!16=Xoffset:Block!20=Yoffset
�"Block!24=Handle:Block!28=Flags
�QBlock?32=TitleCol:Block?33=TitleBackCol:Block?34=WorkCol:Block?35=WorkBackCol
�FBlock?36=ScrollCol:Block?37=SliderCol:Block?38=InputCol:Block?39=0
�?Block!40=WminX:Block!44=WminY:Block!48=WmaxX:Block!52=WmaxY
�=Block!56=TitleFlags:Block!60=Wbutton:Block!64=SpritePoint
�_Block!68=(MinH<<15)+MinW :::::::::::: � 0,0 sets the minimum window with to the title width
�>$(Block+72)=TitleData$:Block!84=0 ::: � No icons initially
0ș "Wimp_CreateWindow",,Block � WindowHandle
=WindowHandle
:
&B� �CreateIcon(WindowHandle,minX,minY,maxX,maxY,Flags,IconData)
0Block!0=WindowHandle
:HBlock!4=minX:Block!8=minY:Block!12=maxX:Block!16=maxY:Block!20=Flags
D?Block!24=IconData!0:Block!28=IconData!4:Block!32=IconData!8
N,ș "Wimp_CreateIcon",,Block � IconHandle
X=IconHandle
b:
l� �Initialise
v-AppSize=�-&8000:MinSize=AppSize:SlotEnd=�
��
�:
�� �AllocateMemory(Required)
�SlotSize=�SlotSize(-1)
��� SlotSize<Required � NewSize=�SlotSize(Required):� NewSize<Required � SlotSize=�SlotSize(AppSize):=0:� Returns, indicating memory not claimed
�6� SlotSize>Required � SlotSize=�SlotSize(Required)
�*=SlotSize:� Returns with bytes claimed
�:
�� �SlotSize(Bytes)
�'ș "Wimp_SlotSize",Bytes,-1 � Bytes
�
=Bytes
�:
�� �MinimiseWimpSlot
"dummy=�AllocateMemory(MinSize)
�
:
 "� �CloseFileIfPoss(FileHandle)
*� �
4&� � � � �:�:� Unable to close file
>�#FileHandle
H�
R:
\� �FindFileSize(FileName$)
f � FileName$="<Wimp$Scrap>" �
p:  ș "OS_File",15,FileName$,,,FileName$ � ,,,,FileSize
z�
�4  N=-1:�:N+=1:� �FileName$,�(FileName$)-N,1)="."
�B  PathName$=�FileName$,�(FileName$)-N):LeafName$=�FileName$,N)
�:  ș "OS_File",13,LeafName$,,,PathName$ � ,,,,FileSize
��
�
=FileSize
�:
�� �NextEntry
�H� Gets next entry (created by BPUT#Data,A$) from a file as a string.
�� Use as A$=FNNextEntry.
�� �
�&� � � � �:="":� Error reading file
�NE$=�#Data
�ȕ �NE$,1)="|"
  NE$=�#Data
�
=NE$
$:
.G� �DragBox(WindowHandle,IconHandle,DragType,SpriteArea,SpriteName$)
88Block!0=WindowHandle:ș "Wimp_GetWindowState",,Block
B wminx=Block!4:wmaxy=Block!16
LIBlock!0=WindowHandle:Block!4=IconHandle:ș "Wimp_GetIconState",,Block
V>iminx=Block!8:iminy=Block!12:imaxx=Block!16:imaxy=Block!20
`)Block!0=WindowHandle:Block!4=DragType
jBlock!8=(wminx+iminx)
tBlock!12=(wmaxy+iminy)
~Block!16=(wminx+imaxx)
�Block!20=(wmaxy+imaxy)
�Block!24=1:Block!28=1
�GBlock!32=(�ModeInfo("Xpixels",-1)+1)*(2^�ModeInfo("XEigFactor",-1))
�GBlock!36=(�ModeInfo("Ypixels",-1)+1)*(2^�ModeInfo("YEigFactor",-1))
�� DragASprite �
�E  ș "DragASprite_Start",%10000101,SpriteArea,SpriteName$,Block+8
��
�  ș "Wimp_DragBox",,Block
��
��
�:
�O� -------------------------------------------------------------------------
/� Routines common to the OmniDesk utilities

O� -------------------------------------------------------------------------
:
� �DeclareToOmniDesk
(/Block!0=208:Block!12=0:Block!16=UtilDeclare
2Block!20=Task
<$(Block+24)=Taskname$
F$(Block+44)=OurFileName$
P)$(Block+55)=�OmniHelpMessage("CLICK")
Z)$(Block+132)=�OmniHelpMessage("DRAG")
d+ș "Wimp_SendMessage",17,Block,OmniDesk
n�
x:
�� �SayGoodbye
�� OmniDesk<>0 �
�1  Block!0=24:Block!12=0:Block!16=UtilQuitting
�  Block!20=Task
�-  ș "Wimp_SendMessage",17,Block,OmniDesk
��
�!ș "Interface_CloseDown",Task
�&ș "Wimp_CloseDown",Task,&4B534154
��
�:
�� �ReadStartupString
�M� Returns task handle of OmniDesk (which is passed in the command string)
�&� or 0 if not started by OmniDesk.
ș "OS_GetEnv" � Command$
A=�Command$,"-Startup")
� A<>0 � Startup=�
"A=�Command$,"-Exit")
,� A<>0 � Exit=�
6A=�Command$,"-OmniDesk")
@� A=0 � =0
J=�(�Command$,A+9))
T:
^ � �ReadWindowLocation(Axis$)
hH� Reads which radio icon (if any) is selected in the Window Position
rH� selector window and returns the axis coordinate (two calls needed)
|%� or -1 for no position selected.
�?Icon=5:�:Icon+=1:� (�SelectedState(Loc,Icon)=�) � (Icon=31)
�*� Icon=31 � =-1:� All icons deselected
�4Location=-1:Icon-=6:� Bring icon into range 0-14
�Ȏ Axis$ �
�!  � "X","x":Location=Icon � 5
�%  � "Y","y":Location=4-(Icon � 5)
��
�
=Location
�:
�� �CleanUpLocWindow
�O� Makes sure that none of the 'window' icons in the Loc window is selected.
�	N=5:�
�'N+=1:� N=30 � �SelectedState(Loc,N)
  �UpdateSelectedFlag(Loc,N,�)
 �
 :
 &O� -------------------------------------------------------------------------
 0,� Special routines for this program only
 :O� -------------------------------------------------------------------------
 D:
 N� �ClearSpyCalcWindow(Spy)
 X� +1
 b� 4,5,10,11,16,17,22,23
 l
� N=1 � 8
 v)  � Icon:�UpdateIcon(SpyCalc,Icon,"")
 ��
 �� N=26 � 44
 �=  Block!0=SpyCalc:Block!4=N:ș "Wimp_GetIconState",,Block
 �&  Block!8=(0<<21):Block!12=(1<<21)
 �2  � Spy � Block!8+=(0<<12):� Block!8+=(11<<12)
 �  Block!12+=(255<<12)
 �#  ș "Wimp_SetIconState",,Block
 ��
 �<Block!0=SpyCalc:Block!4=45:ș "Wimp_GetIconState",,Block
 �$Block!8=(1<<21):Block!12=(1<<21)
 �(Block!8+=(0<<12):Block!12+=(255<<12)
 �!ș "Wimp_SetIconState",,Block
 � �UpdateIcon(SpyCalc,46,"&0")
!<Block!0=SpyCalc:Block!4=46:ș "Wimp_GetIconState",,Block
!.� Spy � Block!8=(0<<12):� Block!8=(14<<12)
!Block!12=(255<<12)
! !ș "Wimp_SetIconState",,Block
!*�
!4:
!>� �DoSpy(OldWin)
!H#ș "Wimp_GetPointerInfo",,Block
!RWin=Block!12:Ic=Block!16
!\H� Win=-1 � �UpdateIcon(SpyCalc,4,"") � �UpdateIcon(SpyCalc,4,�(Win))
!fF� Ic=-1 � �UpdateIcon(SpyCalc,5,"") � �UpdateIcon(SpyCalc,5,�(Ic))
!p*� (Win>0) � ((Win=-2) � (wimp>=300)) �
!z1  Block!0=Win:ș "Wimp_GetWindowState",,Block
!�!  VminX=Block!4:VminY=Block!8
!�#  VmaxX=Block!12:VmaxY=Block!16
!�'  ScrollX=Block!20:ScrollY=Block!24
!�  WindFlags=Block!32
!�G  �UpdateIcon(SpyCalc,10,�(VminX)):�UpdateIcon(SpyCalc,11,�(VminY))
!�G  �UpdateIcon(SpyCalc,16,�(VmaxX)):�UpdateIcon(SpyCalc,17,�(VmaxY))
!�K  �UpdateIcon(SpyCalc,22,�(ScrollX)):�UpdateIcon(SpyCalc,23,�(ScrollY))
!�0  � Win<>OldWin � �UpdateSwitches(WindFlags)
!�>  � Win<>OldWin � �UpdateIcon(SpyCalc,46,"&"+�~�WindFlags)
!�;  � Only update flags if the window handle has changed.
!��
!�  � Win<>OldWin �
!�3    � Not the same window as before, so update:
"    � +1
"    � 10,11,16,17,22,23
"    � N=1 � 6
"$-      � Icon:�UpdateIcon(SpyCalc,Icon,"")
".	    �
"8    � N=26 � 45
"BA      Block!0=SpyCalc:Block!4=N:ș "Wimp_GetIconState",,Block
"L*      Block!8=(0<<21):Block!12=(1<<21)
"V'      ș "Wimp_SetIconState",,Block
"`	    �
"j0    �UpdateIcon(SpyCalc,46,"&"+�~�WindFlags)
"t  �
"~�
"�=Win
"�:
"� � �UpdateSwitches(WindFlags)
"�� +1
"�;� 24,25,26,27,28,29,30,1,4,5,6,8,9,10,11,12,13,14,15,31
"�� N=26 � 45
"�  � bit
"�D  �UpdateSelectedFlag(SpyCalc,N,(WindFlags � (1<<bit))=(1<<bit))
"��
"��
"�:
"�� �WindFlags
#WindFlags=0
#
� +1
#;� 24,25,26,27,28,29,30,1,4,5,6,8,9,10,11,12,13,14,15,31
#� N=26 � 45
#(  � bit
#27  � �SelectedState(SpyCalc,N) � WindFlags+=(1<<bit)
#<�
#F=WindFlags
#P:
#Z� �SaveSettings
#d� �
#n<� � � � �:�CloseFileIfPoss(Data):=�:� Error writing file
#x  :
#�)  Data=� ("<WindFlags$Dir>.Settings")
#�A  �#Data,"| X and Y grid coordinates of Window Flags window:"
#�  �#Data,�(XPosition)
#�  �#Data,�(YPosition)
#�>  �#Data,"| Spying at startup (-1 for TRUE; 0 for FALSE):"
#�  �#Data,�(Spying)
#�  �#Data
#�0  �("Settype <WindFlags$Dir>.Settings Text")
#�  :
#�=�
#�:
#�� �LoadSettings
#�� �
$O� � � � �:�CloseFileIfPoss(Data):=�:� 'Settings' file is damaged or missing
$  :
$'  Data=� "<WindFlags$Dir>.Settings"
$"  XPosition=�(�NextEntry)
$,  YPosition=�(�NextEntry)
$6  Spying=�(�NextEntry)
$@  �#Data
$J  :
$Tb  � XPosition<>-1 � YPosition<>-1 � �UpdateSelectedFlag(Loc,6+((5*XPosition)+(4-YPosition)),�)
$^"  �TickMenu(MainMenu,1,Spying)
$h  :
$r=�
$|:
$�� �DefaultSettings
$�XPosition=4:YPosition=2
$�>�UpdateSelectedFlag(Loc,6+((5*XPosition)+(4-YPosition)),�)
$�Spying=�
$� �TickMenu(MainMenu,1,Spying)
$��
$�:
$�� �RAMTransmit
$�AOtherTaskHandle=Block!4:MyRef=Block!8:TransmitBuffer=Block!20
$�Oș "Wimp_TransferBlock",Task,Transmission,OtherTaskHandle,TransmitBuffer,10
$�(Block!0=28:Block!16=7:� RAM Transmit
$�*Block!12=MyRef:Block!20=TransmitBuffer
$�Block!24=�($Transmission)
%2ș "Wimp_SendMessage",17,Block,OtherTaskHandle
%Dragging$=""
%�
%&:
%0� �WimpScrapTransmit
%:)OtherTaskHandle=Block!4:MyRef=Block!8
%D2SaveFilename$=�$(Block+44),�$(Block+44),�0)-1)
%N� �
%XA� � � � �:� 9999,"An error has occurred during transmission."
%bData=� SaveFilename$
%l�#Data,$(Transmission)
%v
�#Data
%�'�("SetType "+SaveFilename$+" Text")
%�TBlock!0=(44+�(SaveFilename$)):Block!0=(Block!0)+(4-((Block!0) � 4)):� Word align
%�(Block!12=MyRef:Block!16=3:� DataLoad
%�3Block!20=DraggedToWindow:Block!24=DraggedToIcon
%�+Block!28=DraggedToX:Block!32=DraggedToY
%�*Block!36=12:� Never more than 12 bytes
%�$Block!40=&FFF:� Filetype of Text
%�-$(Block+44)=SaveFilename$+�0:Dragging$=""
%�2ș "Wimp_SendMessage",18,Block,OtherTaskHandle
%��
%�:
%�� �MakeDraggingSprite
%�� �
&1� � � ș "OS_SpriteOp",r0,r1,r2,r3:� �:� �,�$
&&Scaling=�ModeInfo("YEigFactor",-1)
&� Scaling<=1 �
&   Name$="flags_high"
&*9  ș "OS_SpriteOp",256+60,Sprites,Name$ � r0,r1,r2,r3
&46  ș "OS_SpriteOp",256+34,Sprites,"draghigh",0,0,8
&>�
&H  Name$="flags_low"
&R9  ș "OS_SpriteOp",256+60,Sprites,Name$ � r0,r1,r2,r3
&\5  ș "OS_SpriteOp",256+34,Sprites,"draglow",0,0,8
&f�
&pș "Wimp_SetColour",7
&z)�5:� (160-(16*�($Transmission)))/2,36
&�+� 23,17,7,6,8;8;0;:� Single-height text
&�;� Scaling<=1 � � 23,17,7,6,8;16;0;:� Double-height text
&�� $Transmission
&� ș "OS_SpriteOp",r0,r1,r2,r3
&�
=Name$
�
00000000  0d 00 0a 21 f4 20 3e 21  52 75 6e 49 6d 61 67 65  |...!. >!RunImage|
00000010  20 66 6f 72 20 57 69 6e  64 6f 77 20 46 6c 61 67  | for Window Flag|
00000020  73 0d 00 14 05 3a 0d 00  1e 41 56 65 72 73 69 6f  |s....:...AVersio|
00000030  6e 4e 75 6d 62 65 72 24  3d 22 31 b7 30 32 20 28  |nNumber$="1.02 (|
00000040  32 32 20 4a 75 6e 65 20  31 39 39 33 29 22 3a 54  |22 June 1993)":T|
00000050  61 73 6b 6e 61 6d 65 24  3d 22 57 69 6e 64 6f 77  |askname$="Window|
00000060  a0 46 6c 61 67 73 22 0d  00 28 1b 45 78 69 74 3d  |.Flags"..(.Exit=|
00000070  a3 3a 53 74 61 72 74 75  70 3d a3 3a 44 6f 6e 65  |.:Startup=.:Done|
00000080  3d a3 0d 00 32 12 44 6f  4d 6f 64 65 43 68 61 6e  |=...2.DoModeChan|
00000090  67 65 3d a3 0d 00 3c 05  3a 0d 00 46 36 de 20 42  |ge=...<.:..F6. B|
000000a0  6c 6f 63 6b 20 32 35 36  2c 42 75 66 66 65 72 20  |lock 256,Buffer |
000000b0  32 35 36 2c 4d 65 6e 75  48 65 6c 70 20 31 36 2c  |256,MenuHelp 16,|
000000c0  54 72 61 6e 73 6d 69 73  73 69 6f 6e 20 31 30 0d  |Transmission 10.|
000000d0  00 50 2f 49 6e 64 4d 65  6e 75 4d 61 78 3d 36 34  |.P/IndMenuMax=64|
000000e0  3a de 20 49 6e 64 69 72  65 63 74 4d 65 6e 75 54  |:. IndirectMenuT|
000000f0  65 78 74 20 49 6e 64 4d  65 6e 75 4d 61 78 0d 00  |ext IndMenuMax..|
00000100  5a 37 de 20 54 65 6d 70  6c 61 74 65 73 20 32 34  |Z7. Templates 24|
00000110  38 39 2c 49 6e 66 6f 49  6e 64 20 31 38 39 2c 4c  |89,InfoInd 189,L|
00000120  6f 63 49 6e 64 20 35 39  32 2c 53 70 79 49 6e 64  |ocInd 592,SpyInd|
00000130  20 31 30 38 37 0d 00 64  1c de 20 49 42 4d 65 6e  | 1087..d.. IBMen|
00000140  75 20 37 36 2c 4d 61 69  6e 4d 65 6e 75 20 31 32  |u 76,MainMenu 12|
00000150  34 0d 00 6e 05 3a 0d 00  78 2a f4 20 4d 65 73 73  |4..n.:..x*. Mess|
00000160  61 67 65 73 20 75 73 65  64 20 62 79 20 74 68 65  |ages used by the|
00000170  20 4f 6d 6e 69 44 65 73  6b 20 73 75 69 74 65 3a  | OmniDesk suite:|
00000180  0d 00 82 5f 55 74 69 6c  44 65 63 6c 61 72 65 3d  |..._UtilDeclare=|
00000190  26 38 32 35 43 30 3a 55  74 69 6c 4f 70 65 6e 3d  |&825C0:UtilOpen=|
000001a0  26 38 32 35 43 31 3a 55  74 69 6c 51 75 69 74 74  |&825C1:UtilQuitt|
000001b0  69 6e 67 3d 26 38 32 35  43 32 3a 55 74 69 6c 52  |ing=&825C2:UtilR|
000001c0  65 73 69 64 65 3d 26 38  32 35 43 33 3a 55 74 69  |eside=&825C3:Uti|
000001d0  6c 41 63 6b 4c 6f 61 64  3d 26 38 32 35 43 34 0d  |lAckLoad=&825C4.|
000001e0  00 8c 2b f4 20 54 68 65  73 65 20 61 72 65 20 6f  |..+. These are o|
000001f0  66 66 69 63 69 61 6c 20  41 63 6f 72 6e 20 61 6c  |fficial Acorn al|
00000200  6c 6f 63 61 74 69 6f 6e  73 2e 0d 00 96 05 3a 0d  |locations.....:.|
00000210  00 a0 6e ee 20 85 20 42  6c 6f 63 6b 21 30 3d 9f  |..n. . Block!0=.|
00000220  3a 24 28 42 6c 6f 63 6b  2b 34 29 3d f6 24 2b 22  |:$(Block+4)=.$+"|
00000230  20 28 69 6e 74 65 72 6e  61 6c 20 65 72 72 6f 72  | (internal error|
00000240  20 63 6f 64 65 20 22 2b  c3 28 9e 29 2b 22 29 22  | code "+.(.)+")"|
00000250  2b bd 30 3a c8 99 20 22  57 69 6d 70 5f 52 65 70  |+.0:.. "Wimp_Rep|
00000260  6f 72 74 45 72 72 6f 72  22 2c 42 6c 6f 63 6b 2c  |ortError",Block,|
00000270  31 2c 54 61 73 6b 6e 61  6d 65 24 3a e0 0d 00 aa  |1,Taskname$:....|
00000280  05 3a 0d 00 b4 3f 4f 6d  6e 69 44 65 73 6b 3d a4  |.:...?OmniDesk=.|
00000290  52 65 61 64 53 74 61 72  74 75 70 53 74 72 69 6e  |ReadStartupStrin|
000002a0  67 3a f4 20 41 6c 73 6f  20 61 73 73 69 67 6e 73  |g:. Also assigns|
000002b0  20 45 78 69 74 20 61 6e  64 20 53 74 61 72 74 75  | Exit and Startu|
000002c0  70 0d 00 be 05 3a 0d 00  c8 1b 2a 53 65 74 20 57  |p....:....*Set W|
000002d0  69 6e 64 46 6c 61 67 73  24 52 49 53 43 4f 53 20  |indFlags$RISCOS |
000002e0  33 0d 00 d2 37 2a 52 4d  45 6e 73 75 72 65 20 55  |3...7*RMEnsure U|
000002f0  74 69 6c 69 74 79 4d 6f  64 75 6c 65 20 33 2e 30  |tilityModule 3.0|
00000300  30 20 53 65 74 20 57 69  6e 64 46 6c 61 67 73 24  |0 Set WindFlags$|
00000310  52 49 53 43 4f 53 20 32  0d 00 dc 5a c8 99 20 22  |RISCOS 2...Z.. "|
00000320  58 4f 53 5f 52 65 61 64  56 61 72 56 61 6c 22 2c  |XOS_ReadVarVal",|
00000330  22 57 69 6e 64 46 6c 61  67 73 24 52 49 53 43 4f  |"WindFlags$RISCO|
00000340  53 22 2c 42 6c 6f 63 6b  2c 32 35 36 2c 30 2c 30  |S",Block,256,0,0|
00000350  20 b8 20 2c 2c 6c 65 6e  3a 42 6c 6f 63 6b 3f 6c  | . ,,len:Block?l|
00000360  65 6e 3d 31 33 3a 77 69  6d 70 24 3d 24 42 6c 6f  |en=13:wimp$=$Blo|
00000370  63 6b 0d 00 e6 1c e7 20  77 69 6d 70 24 3c 3e 22  |ck..... wimp$<>"|
00000380  33 22 20 8c 20 77 69 6d  70 24 3d 22 32 22 0d 00  |3" . wimp$="2"..|
00000390  f0 1b 2a 55 6e 73 65 74  20 57 69 6e 64 46 6c 61  |..*Unset WindFla|
000003a0  67 73 24 52 49 53 43 4f  53 0d 00 fa 05 3a 0d 01  |gs$RISCOS....:..|
000003b0  04 21 2a 53 65 74 20 57  69 6e 64 46 6c 61 67 73  |.!*Set WindFlags|
000003c0  24 53 70 72 69 74 65 44  72 61 67 20 59 65 73 0d  |$SpriteDrag Yes.|
000003d0  01 0e 3a 2a 52 4d 45 6e  73 75 72 65 20 44 72 61  |..:*RMEnsure Dra|
000003e0  67 41 53 70 72 69 74 65  20 30 2e 30 30 20 53 65  |gASprite 0.00 Se|
000003f0  74 20 57 69 6e 64 46 6c  61 67 73 24 53 70 72 69  |t WindFlags$Spri|
00000400  74 65 44 72 61 67 20 4e  6f 0d 01 18 51 c8 99 20  |teDrag No...Q.. |
00000410  22 58 4f 53 5f 52 65 61  64 56 61 72 56 61 6c 22  |"XOS_ReadVarVal"|
00000420  2c 22 57 69 6e 64 46 6c  61 67 73 24 53 70 72 69  |,"WindFlags$Spri|
00000430  74 65 44 72 61 67 22 2c  42 6c 6f 63 6b 2c 32 35  |teDrag",Block,25|
00000440  36 2c 30 2c 30 20 b8 20  2c 2c 6c 65 6e 3a 42 6c  |6,0,0 . ,,len:Bl|
00000450  6f 63 6b 3f 6c 65 6e 3d  31 33 0d 01 22 32 e7 20  |ock?len=13.."2. |
00000460  24 42 6c 6f 63 6b 3d 22  59 65 73 22 20 8c 20 44  |$Block="Yes" . D|
00000470  72 61 67 41 53 70 72 69  74 65 3d b9 3a 8b 20 44  |ragASprite=.:. D|
00000480  72 61 67 41 53 70 72 69  74 65 3d a3 0d 01 2c 1f  |ragASprite=...,.|
00000490  2a 55 6e 73 65 74 20 57  69 6e 64 46 6c 61 67 73  |*Unset WindFlags|
000004a0  24 53 70 72 69 74 65 44  72 61 67 0d 01 36 05 3a  |$SpriteDrag..6.:|
000004b0  0d 01 40 59 c8 99 20 22  58 4f 53 5f 52 65 61 64  |..@Y.. "XOS_Read|
000004c0  56 61 72 56 61 6c 22 2c  22 4f 62 65 79 24 44 69  |VarVal","Obey$Di|
000004d0  72 22 2c 42 6c 6f 63 6b  2c 32 35 36 2c 30 2c 30  |r",Block,256,0,0|
000004e0  20 b8 20 2c 2c 6c 65 6e  3a 42 6c 6f 63 6b 3f 6c  | . ,,len:Block?l|
000004f0  65 6e 3d 31 33 3a 4f 75  72 46 69 6c 65 4e 61 6d  |en=13:OurFileNam|
00000500  65 24 3d 24 42 6c 6f 63  6b 0d 01 4a 38 4e 3d 2d  |e$=$Block..J8N=-|
00000510  31 3a f5 3a 4e 2b 3d 31  3a fd 20 c1 4f 75 72 46  |1:.:N+=1:. .OurF|
00000520  69 6c 65 4e 61 6d 65 24  2c a9 28 4f 75 72 46 69  |ileName$,.(OurFi|
00000530  6c 65 4e 61 6d 65 24 29  2d 4e 2c 31 29 3d 22 2e  |leName$)-N,1)=".|
00000540  22 0d 01 54 4f 4f 75 72  50 61 74 68 4e 61 6d 65  |"..TOOurPathName|
00000550  24 3d c0 4f 75 72 46 69  6c 65 4e 61 6d 65 24 2c  |$=.OurFileName$,|
00000560  a9 28 4f 75 72 46 69 6c  65 4e 61 6d 65 24 29 2d  |.(OurFileName$)-|
00000570  4e 29 3a 4f 75 72 46 69  6c 65 4e 61 6d 65 24 3d  |N):OurFileName$=|
00000580  c2 4f 75 72 46 69 6c 65  4e 61 6d 65 24 2c 4e 29  |.OurFileName$,N)|
00000590  0d 01 5e 05 3a 0d 01 68  5e f4 20 52 65 61 64 20  |..^.:..h^. Read |
000005a0  73 69 7a 65 20 6f 66 20  73 70 72 69 74 65 20 66  |size of sprite f|
000005b0  69 6c 65 20 61 6e 64 20  6c 6f 61 64 20 69 74 2e  |ile and load it.|
000005c0  20 57 65 20 6e 65 65 64  20 74 6f 20 44 49 4d 20  | We need to DIM |
000005d0  31 36 20 62 79 74 65 73  20 6d 6f 72 65 20 74 68  |16 bytes more th|
000005e0  61 6e 20 74 68 65 20 66  69 6c 65 27 73 20 73 69  |an the file's si|
000005f0  7a 65 2e 0d 01 72 3a c8  99 20 22 4f 53 5f 46 53  |ze...r:.. "OS_FS|
00000600  43 6f 6e 74 72 6f 6c 22  2c 32 38 2c 22 3c 57 69  |Control",28,"<Wi|
00000610  6e 64 46 6c 61 67 73 24  44 69 72 3e 2e 53 70 72  |ndFlags$Dir>.Spr|
00000620  69 74 65 73 22 20 b8 20  2c 2c 6c 65 6e 0d 01 7c  |ites" . ,,len..||
00000630  85 de 20 53 70 72 69 74  65 73 20 6c 65 6e 2b 31  |.. Sprites len+1|
00000640  36 3a 21 53 70 72 69 74  65 73 3d 6c 65 6e 2b 31  |6:!Sprites=len+1|
00000650  36 3a 53 70 72 69 74 65  73 21 34 3d 30 3a 53 70  |6:Sprites!4=0:Sp|
00000660  72 69 74 65 73 21 38 3d  31 36 3a 53 70 72 69 74  |rites!8=16:Sprit|
00000670  65 73 21 31 32 3d 31 36  3a c8 99 20 22 4f 53 5f  |es!12=16:.. "OS_|
00000680  53 70 72 69 74 65 4f 70  22 2c 32 35 36 2b 31 30  |SpriteOp",256+10|
00000690  2c 53 70 72 69 74 65 73  2c 22 3c 57 69 6e 64 46  |,Sprites,"<WindF|
000006a0  6c 61 67 73 24 44 69 72  3e 2e 53 70 72 69 74 65  |lags$Dir>.Sprite|
000006b0  73 22 0d 01 86 05 3a 0d  01 90 11 e7 20 77 69 6d  |s"....:..... wim|
000006c0  70 24 3d 22 33 22 20 8c  0d 01 9a 17 20 20 de 20  |p$="3" .....  . |
000006d0  6d 65 73 73 61 67 65 6c  69 73 74 25 20 33 36 0d  |messagelist% 36.|
000006e0  01 a4 2f 20 20 6d 65 73  73 61 67 65 6c 69 73 74  |../  messagelist|
000006f0  25 21 30 3d 26 35 30 32  3a 6d 65 73 73 61 67 65  |%!0=&502:message|
00000700  6c 69 73 74 25 21 34 3d  26 34 30 30 43 31 0d 01  |list%!4=&400C1..|
00000710  ae 3a 20 20 6d 65 73 73  61 67 65 6c 69 73 74 25  |.:  messagelist%|
00000720  21 38 3d 55 74 69 6c 4f  70 65 6e 3a 6d 65 73 73  |!8=UtilOpen:mess|
00000730  61 67 65 6c 69 73 74 25  21 31 32 3d 55 74 69 6c  |agelist%!12=Util|
00000740  51 75 69 74 74 69 6e 67  0d 01 b8 33 20 20 6d 65  |Quitting...3  me|
00000750  73 73 61 67 65 6c 69 73  74 25 21 31 36 3d 55 74  |ssagelist%!16=Ut|
00000760  69 6c 52 65 73 69 64 65  3a 6d 65 73 73 61 67 65  |ilReside:message|
00000770  6c 69 73 74 25 21 32 30  3d 31 30 0d 01 c2 3b 20  |list%!20=10...; |
00000780  20 6d 65 73 73 61 67 65  6c 69 73 74 25 21 32 34  | messagelist%!24|
00000790  3d 36 3a 6d 65 73 73 61  67 65 6c 69 73 74 25 21  |=6:messagelist%!|
000007a0  32 38 3d 32 3a 6d 65 73  73 61 67 65 6c 69 73 74  |28=2:messagelist|
000007b0  25 21 33 32 3d 30 0d 01  cc 4b 20 20 c8 99 20 22  |%!32=0...K  .. "|
000007c0  57 69 6d 70 5f 49 6e 69  74 69 61 6c 69 73 65 22  |Wimp_Initialise"|
000007d0  2c 33 30 30 2c 26 34 42  35 33 34 31 35 34 2c 54  |,300,&4B534154,T|
000007e0  61 73 6b 6e 61 6d 65 24  2c 6d 65 73 73 61 67 65  |askname$,message|
000007f0  6c 69 73 74 25 20 b8 20  77 69 6d 70 2c 54 61 73  |list% . wimp,Tas|
00000800  6b 0d 01 d6 05 cc 0d 01  e0 3e 20 20 c8 99 20 22  |k........>  .. "|
00000810  57 69 6d 70 5f 49 6e 69  74 69 61 6c 69 73 65 22  |Wimp_Initialise"|
00000820  2c 32 30 30 2c 26 34 42  35 33 34 31 35 34 2c 54  |,200,&4B534154,T|
00000830  61 73 6b 6e 61 6d 65 24  20 b8 20 77 69 6d 70 2c  |askname$ . wimp,|
00000840  54 61 73 6b 0d 01 ea 05  cd 0d 01 f4 05 3a 0d 01  |Task.........:..|
00000850  fe 22 c8 99 20 22 49 6e  74 65 72 66 61 63 65 5f  |.".. "Interface_|
00000860  49 6e 69 74 69 61 6c 69  73 65 22 2c 54 61 73 6b  |Initialise",Task|
00000870  0d 02 08 05 3a 0d 02 12  37 c8 99 20 22 57 69 6d  |....:...7.. "Wim|
00000880  70 5f 4f 70 65 6e 54 65  6d 70 6c 61 74 65 22 2c  |p_OpenTemplate",|
00000890  2c 22 3c 57 69 6e 64 46  6c 61 67 73 24 44 69 72  |,"<WindFlags$Dir|
000008a0  3e 2e 54 65 6d 70 6c 61  74 65 73 22 0d 02 1c 45  |>.Templates"...E|
000008b0  c8 99 20 22 57 69 6d 70  5f 4c 6f 61 64 54 65 6d  |.. "Wimp_LoadTem|
000008c0  70 6c 61 74 65 22 2c 2c  54 65 6d 70 6c 61 74 65  |plate",,Template|
000008d0  73 2c 49 6e 66 6f 49 6e  64 2c 49 6e 66 6f 49 6e  |s,InfoInd,InfoIn|
000008e0  64 2b 31 38 39 2c 2d 31  2c 22 49 6e 66 6f 22 2c  |d+189,-1,"Info",|
000008f0  30 0d 02 26 2c c8 99 20  22 57 69 6d 70 5f 43 72  |0..&,.. "Wimp_Cr|
00000900  65 61 74 65 57 69 6e 64  6f 77 22 2c 2c 54 65 6d  |eateWindow",,Tem|
00000910  70 6c 61 74 65 73 20 b8  20 49 6e 66 6f 0d 02 30  |plates . Info..0|
00000920  5c c8 99 20 22 57 69 6d  70 5f 4c 6f 61 64 54 65  |\.. "Wimp_LoadTe|
00000930  6d 70 6c 61 74 65 22 2c  2c 54 65 6d 70 6c 61 74  |mplate",,Templat|
00000940  65 73 2c 4c 6f 63 49 6e  64 2c 4c 6f 63 49 6e 64  |es,LocInd,LocInd|
00000950  2b 35 39 32 2c 2d 31 2c  22 57 69 6e 64 6f 77 58  |+592,-1,"WindowX|
00000960  59 22 2c 30 3a 54 65 6d  70 6c 61 74 65 73 21 36  |Y",0:Templates!6|
00000970  34 3d 53 70 72 69 74 65  73 0d 02 3a 2b c8 99 20  |4=Sprites..:+.. |
00000980  22 57 69 6d 70 5f 43 72  65 61 74 65 57 69 6e 64  |"Wimp_CreateWind|
00000990  6f 77 22 2c 2c 54 65 6d  70 6c 61 74 65 73 20 b8  |ow",,Templates .|
000009a0  20 4c 6f 63 0d 02 44 5c  c8 99 20 22 57 69 6d 70  | Loc..D\.. "Wimp|
000009b0  5f 4c 6f 61 64 54 65 6d  70 6c 61 74 65 22 2c 2c  |_LoadTemplate",,|
000009c0  54 65 6d 70 6c 61 74 65  73 2c 53 70 79 49 6e 64  |Templates,SpyInd|
000009d0  2c 53 70 79 49 6e 64 2b  31 30 38 37 2c 2d 31 2c  |,SpyInd+1087,-1,|
000009e0  22 53 70 79 43 61 6c 63  22 2c 30 3a 54 65 6d 70  |"SpyCalc",0:Temp|
000009f0  6c 61 74 65 73 21 36 34  3d 53 70 72 69 74 65 73  |lates!64=Sprites|
00000a00  0d 02 4e 2f c8 99 20 22  57 69 6d 70 5f 43 72 65  |..N/.. "Wimp_Cre|
00000a10  61 74 65 57 69 6e 64 6f  77 22 2c 2c 54 65 6d 70  |ateWindow",,Temp|
00000a20  6c 61 74 65 73 20 b8 20  53 70 79 43 61 6c 63 0d  |lates . SpyCalc.|
00000a30  02 58 1b c8 99 20 22 57  69 6d 70 5f 43 6c 6f 73  |.X... "Wimp_Clos|
00000a40  65 54 65 6d 70 6c 61 74  65 22 0d 02 62 05 3a 0d  |eTemplate"..b.:.|
00000a50  02 6c 0f f2 42 75 69 6c  64 4d 65 6e 75 73 0d 02  |.l..BuildMenus..|
00000a60  76 05 3a 0d 02 80 15 f2  43 6c 65 61 6e 55 70 4c  |v.:.....CleanUpL|
00000a70  6f 63 57 69 6e 64 6f 77  0d 02 8a 1e 52 65 61 64  |ocWindow....Read|
00000a80  45 72 72 6f 72 3d ac 28  a4 4c 6f 61 64 53 65 74  |Error=.(.LoadSet|
00000a90  74 69 6e 67 73 29 0d 02  94 1f f2 43 6c 65 61 72  |tings).....Clear|
00000aa0  53 70 79 43 61 6c 63 57  69 6e 64 6f 77 28 53 70  |SpyCalcWindow(Sp|
00000ab0  79 69 6e 67 29 0d 02 9e  05 3a 0d 02 a8 0f f2 49  |ying)....:.....I|
00000ac0  6e 69 74 69 61 6c 69 73  65 0d 02 b2 05 3a 0d 02  |nitialise....:..|
00000ad0  bc 12 e7 20 4f 6d 6e 69  44 65 73 6b 3d 30 20 8c  |... OmniDesk=0 .|
00000ae0  0d 02 c6 20 20 20 f4 20  50 75 74 20 49 63 6f 6e  |...   . Put Icon|
00000af0  20 6f 6e 20 74 68 65 20  69 63 6f 6e 2d 62 61 72  | on the icon-bar|
00000b00  0d 02 d0 10 20 20 42 6c  6f 63 6b 21 30 3d 2d 31  |....  Block!0=-1|
00000b10  0d 02 da 31 20 20 42 6c  6f 63 6b 21 34 3d 30 3a  |...1  Block!4=0:|
00000b20  42 6c 6f 63 6b 21 38 3d  30 3a 42 6c 6f 63 6b 21  |Block!8=0:Block!|
00000b30  31 32 3d 36 38 3a 42 6c  6f 63 6b 21 31 36 3d 36  |12=68:Block!16=6|
00000b40  38 0d 02 e4 35 20 20 42  6c 6f 63 6b 21 32 30 3d  |8...5  Block!20=|
00000b50  26 31 37 30 30 33 30 30  32 3a 24 28 42 6c 6f 63  |&17003002:$(Bloc|
00000b60  6b 2b 32 34 29 3d 22 21  57 69 6e 64 46 6c 61 67  |k+24)="!WindFlag|
00000b70  73 22 2b bd 31 33 0d 02  ee 2b 20 20 c8 99 20 22  |s"+.13...+  .. "|
00000b80  57 69 6d 70 5f 43 72 65  61 74 65 49 63 6f 6e 22  |Wimp_CreateIcon"|
00000b90  2c 2c 42 6c 6f 63 6b 20  b8 20 49 63 6f 6e 42 61  |,,Block . IconBa|
00000ba0  72 0d 02 f8 05 cd 0d 03  02 05 3a 0d 03 0c 26 e7  |r.........:...&.|
00000bb0  20 4f 6d 6e 69 44 65 73  6b 3c 3e 30 20 8c 20 f2  | OmniDesk<>0 . .|
00000bc0  44 65 63 6c 61 72 65 54  6f 4f 6d 6e 69 44 65 73  |DeclareToOmniDes|
00000bd0  6b 0d 03 16 52 e7 20 53  74 61 72 74 75 70 20 8c  |k...R. Startup .|
00000be0  20 44 6f 6e 65 3d b9 3a  f4 20 27 2d 53 74 61 72  | Done=.:. '-Star|
00000bf0  74 75 70 27 20 70 61 72  61 6d 65 74 65 72 20 6d  |tup' parameter m|
00000c00  65 61 6e 73 20 27 64 65  63 6c 61 72 65 20 61 6e  |eans 'declare an|
00000c10  64 20 64 69 65 20 69 6d  6d 65 64 69 61 74 65 6c  |d die immediatel|
00000c20  79 27 2e 0d 03 20 05 3a  0d 03 2a 26 f2 55 70 64  |y'... .:..*&.Upd|
00000c30  61 74 65 49 63 6f 6e 28  49 6e 66 6f 2c 33 2c 56  |ateIcon(Info,3,V|
00000c40  65 72 73 69 6f 6e 4e 75  6d 62 65 72 24 29 0d 03  |ersionNumber$)..|
00000c50  34 36 f2 4d 6f 64 65 43  68 61 6e 67 65 3a f4 20  |46.ModeChange:. |
00000c60  54 6f 20 75 70 64 61 74  65 20 69 63 6f 6e 2d 62  |To update icon-b|
00000c70  61 72 20 69 63 6f 6e 20  69 66 20 6e 65 63 65 73  |ar icon if neces|
00000c80  73 61 72 79 0d 03 3e 05  3a 0d 03 48 0e ee 20 85  |sary..>.:..H.. .|
00000c90  20 f2 45 72 72 6f 72 0d  03 52 94 e7 20 52 65 61  | .Error..R.. Rea|
00000ca0  64 45 72 72 6f 72 20 8c  20 52 65 61 64 45 72 72  |dError . ReadErr|
00000cb0  6f 72 3d a3 3a f2 44 65  66 61 75 6c 74 53 65 74  |or=.:.DefaultSet|
00000cc0  74 69 6e 67 73 3a 85 20  39 39 39 39 2c 22 41 6e  |tings:. 9999,"An|
00000cd0  20 65 72 72 6f 72 20 6f  63 63 75 72 72 65 64 20  | error occurred |
00000ce0  77 68 69 6c 73 74 20 72  65 61 64 69 6e 67 20 74  |whilst reading t|
00000cf0  68 65 20 73 65 74 74 69  6e 67 73 20 66 69 6c 65  |he settings file|
00000d00  2e 20 44 65 66 61 75 6c  74 20 73 65 74 74 69 6e  |. Default settin|
00000d10  67 73 20 77 69 6c 6c 20  74 68 65 72 65 66 6f 72  |gs will therefor|
00000d20  65 20 62 65 20 75 73 65  64 2e 22 0d 03 5c 05 3a  |e be used."..\.:|
00000d30  0d 03 66 29 c8 99 20 22  4f 53 5f 52 65 61 64 4d  |..f).. "OS_ReadM|
00000d40  6f 6e 6f 74 6f 6e 69 63  54 69 6d 65 22 20 b8 20  |onotonicTime" . |
00000d50  70 6f 6c 6c 74 69 6d 65  25 0d 03 70 0c 4f 6c 64  |polltime%..p.Old|
00000d60  57 69 6e 3d 30 0d 03 7a  05 3a 0d 03 84 17 f4 20  |Win=0..z.:..... |
00000d70  4d 61 69 6e 20 70 72 6f  67 72 61 6d 20 6c 6f 6f  |Main program loo|
00000d80  70 0d 03 8e 05 f5 0d 03  98 36 20 20 c8 99 20 22  |p........6  .. "|
00000d90  57 69 6d 70 5f 50 6f 6c  6c 49 64 6c 65 22 2c 25  |Wimp_PollIdle",%|
00000da0  31 31 30 30 30 30 30 31  31 30 30 30 30 2c 42 6c  |1100000110000,Bl|
00000db0  6f 63 6b 20 b8 20 52 65  61 73 6f 6e 0d 03 a2 26  |ock . Reason...&|
00000dc0  20 20 c8 99 20 22 49 6e  74 65 72 66 61 63 65 5f  |  .. "Interface_|
00000dd0  50 6f 6c 6c 22 2c 52 65  61 73 6f 6e 2c 2c 54 61  |Poll",Reason,,Ta|
00000de0  73 6b 0d 03 ac 34 20 20  c8 99 20 22 49 6e 74 65  |sk...4  .. "Inte|
00000df0  72 66 61 63 65 5f 50 72  65 50 72 6f 63 65 73 73  |rface_PreProcess|
00000e00  4b 65 79 22 2c 52 65 61  73 6f 6e 2c 42 6c 6f 63  |Key",Reason,Bloc|
00000e10  6b 2c 54 61 73 6b 0d 03  b6 11 20 20 c8 8e 20 52  |k,Task....  .. R|
00000e20  65 61 73 6f 6e 20 ca 0d  03 c0 33 20 20 20 20 c9  |eason ....3    .|
00000e30  20 30 20 3a 20 c8 99 20  22 4f 53 5f 52 65 61 64  | 0 : .. "OS_Read|
00000e40  4d 6f 6e 6f 74 6f 6e 69  63 54 69 6d 65 22 20 b8  |MonotonicTime" .|
00000e50  20 70 6f 6c 6c 74 69 6d  65 25 0d 03 ca 34 20 20  | polltime%...4  |
00000e60  20 20 20 20 20 20 20 20  20 20 20 e7 20 53 70 79  |           . Spy|
00000e70  69 6e 67 20 80 20 28 a4  4f 70 65 6e 53 74 61 74  |ing . (.OpenStat|
00000e80  65 28 53 70 79 43 61 6c  63 29 29 20 20 8c 0d 03  |e(SpyCalc))  ...|
00000e90  d4 36 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |.6              |
00000ea0  20 4f 6c 64 57 69 6e 3d  a4 44 6f 53 70 79 28 4f  | OldWin=.DoSpy(O|
00000eb0  6c 64 57 69 6e 29 3a 70  6f 6c 6c 74 69 6d 65 25  |ldWin):polltime%|
00000ec0  2b 3d 31 30 0d 03 de 12  20 20 20 20 20 20 20 20  |+=10....        |
00000ed0  20 20 20 20 20 cc 0d 03  e8 4e 20 20 20 20 20 20  |     ....N      |
00000ee0  20 20 20 20 20 20 20 20  20 70 6f 6c 6c 74 69 6d  |         polltim|
00000ef0  65 25 2b 3d 31 30 30 3a  f4 20 44 6f 20 61 20 57  |e%+=100:. Do a W|
00000f00  69 6d 70 5f 50 6f 6c 6c  20 61 70 70 72 6f 78 69  |imp_Poll approxi|
00000f10  6d 61 74 65 6c 79 20 6f  6e 63 65 20 61 20 73 65  |mately once a se|
00000f20  63 6f 6e 64 0d 03 f2 12  20 20 20 20 20 20 20 20  |cond....        |
00000f30  20 20 20 20 20 cd 0d 03  fc 5e 20 20 20 20 20 20  |     ....^      |
00000f40  20 20 20 20 20 20 20 e7  20 44 6f 4d 6f 64 65 43  |       . DoModeC|
00000f50  68 61 6e 67 65 20 8c 20  e7 20 a4 4f 70 65 6e 53  |hange . . .OpenS|
00000f60  74 61 74 65 28 53 70 79  43 61 6c 63 29 20 8c 20  |tate(SpyCalc) . |
00000f70  f2 4f 70 65 6e 28 53 70  79 43 61 6c 63 2c a3 2c  |.Open(SpyCalc,.,|
00000f80  58 50 6f 73 69 74 69 6f  6e 2c 59 50 6f 73 69 74  |XPosition,YPosit|
00000f90  69 6f 6e 29 0d 04 06 15  20 20 20 20 c9 20 31 20  |ion)....    . 1 |
00000fa0  3a 20 f2 52 65 64 72 61  77 0d 04 10 29 20 20 20  |: .Redraw...)   |
00000fb0  20 c9 20 32 20 3a 20 c8  99 20 22 57 69 6d 70 5f  | . 2 : .. "Wimp_|
00000fc0  4f 70 65 6e 57 69 6e 64  6f 77 22 2c 2c 42 6c 6f  |OpenWindow",,Blo|
00000fd0  63 6b 0d 04 1a 2a 20 20  20 20 c9 20 33 20 3a 20  |ck...*    . 3 : |
00000fe0  c8 99 20 22 57 69 6d 70  5f 43 6c 6f 73 65 57 69  |.. "Wimp_CloseWi|
00000ff0  6e 64 6f 77 22 2c 2c 42  6c 6f 63 6b 0d 04 24 20  |ndow",,Block..$ |
00001000  20 20 20 20 20 20 20 20  20 20 20 20 20 e7 20 45  |             . E|
00001010  78 69 74 20 8c 20 44 6f  6e 65 3d b9 0d 04 2e 1a  |xit . Done=.....|
00001020  20 20 20 20 c9 20 36 20  3a 20 f2 4d 6f 75 73 65  |    . 6 : .Mouse|
00001030  42 75 74 74 6f 6e 0d 04  38 1b 20 20 20 20 c9 20  |Button..8.    . |
00001040  37 20 3a 20 f2 44 72 61  67 46 69 6e 69 73 68 65  |7 : .DragFinishe|
00001050  64 0d 04 42 19 20 20 20  20 c9 20 38 20 3a 20 f2  |d..B.    . 8 : .|
00001060  4b 65 79 50 72 65 73 73  65 64 0d 04 4c 19 20 20  |KeyPressed..L.  |
00001070  20 20 c9 20 39 20 3a 20  f2 44 65 63 6f 64 65 4d  |  . 9 : .DecodeM|
00001080  65 6e 75 0d 04 56 24 20  20 20 20 c9 20 31 37 2c  |enu..V$    . 17,|
00001090  31 38 2c 31 39 20 3a 20  f2 52 65 63 69 65 76 65  |18,19 : .Recieve|
000010a0  4d 65 73 73 61 67 65 0d  04 60 07 20 20 cb 0d 04  |Message..`.  ...|
000010b0  6a 0a fd 20 44 6f 6e 65  0d 04 74 0f f2 53 61 79  |j.. Done..t..Say|
000010c0  47 6f 6f 64 62 79 65 0d  04 7e 05 e0 0d 04 88 05  |Goodbye..~......|
000010d0  3a 0d 04 92 0c dd 20 f2  45 72 72 6f 72 0d 04 9c  |:..... .Error...|
000010e0  1c 43 6c 69 63 6b 3d 30  3a 42 6c 6f 63 6b 21 30  |.Click=0:Block!0|
000010f0  3d 9f 3a c8 8e 20 9f 20  ca 0d 04 a6 1b 20 20 c9  |=.:.. . .....  .|
00001100  20 39 39 39 39 3a f4 20  43 75 73 74 6f 6d 20 65  | 9999:. Custom e|
00001110  72 72 6f 72 0d 04 b0 18  20 20 20 20 24 28 42 6c  |rror....    $(Bl|
00001120  6f 63 6b 2b 34 29 3d f6  24 2b bd 30 0d 04 ba 3f  |ock+4)=.$+.0...?|
00001130  20 20 20 20 c8 99 20 22  57 69 6d 70 5f 52 65 70  |    .. "Wimp_Rep|
00001140  6f 72 74 45 72 72 6f 72  22 2c 42 6c 6f 63 6b 2c  |ortError",Block,|
00001150  31 37 2c 22 4e 6f 74 69  63 65 20 66 72 6f 6d 20  |17,"Notice from |
00001160  22 2b 54 61 73 6b 6e 61  6d 65 24 0d 04 c4 07 20  |"+Taskname$.... |
00001170  20 7f 0d 04 ce 76 20 20  20 20 24 28 42 6c 6f 63  | ....v    $(Bloc|
00001180  6b 2b 34 29 3d f6 24 2b  22 20 28 69 6e 74 65 72  |k+4)=.$+" (inter|
00001190  6e 61 6c 20 65 72 72 6f  72 20 63 6f 64 65 20 22  |nal error code "|
000011a0  2b c3 9e 2b 22 29 2e 20  43 6c 69 63 6b 20 6f 6e  |+..+"). Click on|
000011b0  20 4f 4b 20 74 6f 20 63  6f 6e 74 69 6e 75 65 2c  | OK to continue,|
000011c0  20 6f 72 20 43 61 6e 63  65 6c 20 74 6f 20 74 65  | or Cancel to te|
000011d0  72 6d 69 6e 61 74 65 20  74 68 65 20 70 72 6f 67  |rminate the prog|
000011e0  72 61 6d 2e 22 2b bd 30  0d 04 d8 38 20 20 20 20  |ram."+.0...8    |
000011f0  c8 99 20 22 57 69 6d 70  5f 52 65 70 6f 72 74 45  |.. "Wimp_ReportE|
00001200  72 72 6f 72 22 2c 42 6c  6f 63 6b 2c 33 2c 54 61  |rror",Block,3,Ta|
00001210  73 6b 6e 61 6d 65 24 20  b8 20 2c 43 6c 69 63 6b  |skname$ . ,Click|
00001220  0d 04 e2 05 cb 0d 04 ec  1d e7 20 43 6c 69 63 6b  |.......... Click|
00001230  3d 32 20 8c 20 f2 53 61  79 47 6f 6f 64 62 79 65  |=2 . .SayGoodbye|
00001240  3a e0 0d 04 f6 05 e1 0d  05 00 05 3a 0d 05 0a 2e  |:..........:....|
00001250  dd 20 f2 4f 70 65 6e 28  57 69 6e 64 6f 77 48 61  |. .Open(WindowHa|
00001260  6e 64 6c 65 2c 54 6f 70  4f 66 53 74 61 63 6b 2c  |ndle,TopOfStack,|
00001270  61 63 72 6f 73 73 2c 75  70 29 0d 05 14 18 42 6c  |across,up)....Bl|
00001280  6f 63 6b 21 30 3d 57 69  6e 64 6f 77 48 61 6e 64  |ock!0=WindowHand|
00001290  6c 65 0d 05 1e 23 c8 99  20 22 57 69 6d 70 5f 47  |le...#.. "Wimp_G|
000012a0  65 74 57 69 6e 64 6f 77  53 74 61 74 65 22 2c 2c  |etWindowState",,|
000012b0  42 6c 6f 63 6b 0d 05 28  4a e7 20 28 61 63 72 6f  |Block..(J. (acro|
000012c0  73 73 3c 3e 2d 31 29 20  80 20 28 61 63 72 6f 73  |ss<>-1) . (acros|
000012d0  73 3c 3e 2d 31 29 20 8c  20 f2 44 65 63 69 64 65  |s<>-1) . .Decide|
000012e0  57 69 6e 64 6f 77 50 6f  73 69 74 69 6f 6e 28 42  |WindowPosition(B|
000012f0  6c 6f 63 6b 2c 61 63 72  6f 73 73 2c 75 70 29 0d  |lock,across,up).|
00001300  05 32 1e e7 20 54 6f 70  4f 66 53 74 61 63 6b 20  |.2.. TopOfStack |
00001310  8c 20 42 6c 6f 63 6b 21  32 38 3d 2d 31 0d 05 3c  |. Block!28=-1..<|
00001320  1f c8 99 20 22 57 69 6d  70 5f 4f 70 65 6e 57 69  |... "Wimp_OpenWi|
00001330  6e 64 6f 77 22 2c 2c 42  6c 6f 63 6b 0d 05 46 05  |ndow",,Block..F.|
00001340  e1 0d 05 50 05 3a 0d 05  5a 1a dd 20 f2 43 6c 6f  |...P.:..Z.. .Clo|
00001350  73 65 28 57 69 6e 64 6f  77 48 61 6e 64 6c 65 29  |se(WindowHandle)|
00001360  0d 05 64 18 42 6c 6f 63  6b 21 30 3d 57 69 6e 64  |..d.Block!0=Wind|
00001370  6f 77 48 61 6e 64 6c 65  0d 05 6e 23 c8 99 20 22  |owHandle..n#.. "|
00001380  57 69 6d 70 5f 47 65 74  57 69 6e 64 6f 77 53 74  |Wimp_GetWindowSt|
00001390  61 74 65 22 2c 2c 42 6c  6f 63 6b 0d 05 78 20 c8  |ate",,Block..x .|
000013a0  99 20 22 57 69 6d 70 5f  43 6c 6f 73 65 57 69 6e  |. "Wimp_CloseWin|
000013b0  64 6f 77 22 2c 2c 42 6c  6f 63 6b 0d 05 82 05 e1  |dow",,Block.....|
000013c0  0d 05 8c 05 3a 0d 05 96  2c dd 20 f2 44 65 63 69  |....:...,. .Deci|
000013d0  64 65 57 69 6e 64 6f 77  50 6f 73 69 74 69 6f 6e  |deWindowPosition|
000013e0  28 42 6c 6f 63 6b 2c 61  63 72 6f 73 73 2c 75 70  |(Block,across,up|
000013f0  29 0d 05 a0 4c f4 20 55  73 65 20 6f 66 20 74 68  |)...L. Use of th|
00001400  69 73 20 70 72 6f 63 65  64 75 72 65 20 6c 65 74  |is procedure let|
00001410  73 20 79 6f 75 20 6f 70  65 6e 20 77 69 6e 64 6f  |s you open windo|
00001420  77 73 20 6f 6e 20 61 6e  20 69 6e 76 69 73 69 62  |ws on an invisib|
00001430  6c 65 20 67 72 69 64 20  77 68 69 63 68 0d 05 aa  |le grid which...|
00001440  49 f4 20 61 75 74 6f 6d  61 74 69 63 61 6c 6c 79  |I. automatically|
00001450  20 66 69 74 73 20 69 74  73 65 6c 66 20 74 6f 20  | fits itself to |
00001460  74 68 65 20 73 63 72 65  65 6e 20 6d 6f 64 65 20  |the screen mode |
00001470  69 6e 20 75 73 65 2e 20  54 68 65 72 65 20 61 72  |in use. There ar|
00001480  65 20 66 69 76 65 0d 05  b4 4a f4 20 70 6f 73 69  |e five...J. posi|
00001490  74 69 6f 6e 73 20 61 63  72 6f 73 73 20 28 6c 65  |tions across (le|
000014a0  66 74 2c 20 6d 69 64 2d  6c 65 66 74 2c 20 63 65  |ft, mid-left, ce|
000014b0  6e 74 72 65 2c 20 6d 69  64 2d 72 69 67 68 74 2c  |ntre, mid-right,|
000014c0  20 72 69 67 68 74 29 20  61 6e 64 20 66 69 76 65  | right) and five|
000014d0  0d 05 be 47 f4 20 70 6f  73 69 74 69 6f 6e 73 20  |...G. positions |
000014e0  75 70 20 28 62 6f 74 74  6f 6d 20 6f 66 20 73 63  |up (bottom of sc|
000014f0  72 65 65 6e 2c 20 61 62  6f 76 65 20 69 63 6f 6e  |reen, above icon|
00001500  2d 62 61 72 2c 20 63 65  6e 74 72 65 20 6f 66 20  |-bar, centre of |
00001510  73 63 72 65 65 6e 2c 0d  05 c8 2b f4 20 63 65 6e  |screen,...+. cen|
00001520  74 72 65 20 74 6f 70 20  6f 66 20 73 63 72 65 65  |tre top of scree|
00001530  6e 2c 20 74 6f 70 20 6f  66 20 73 63 72 65 65 6e  |n, top of screen|
00001540  29 2e 0d 05 d2 07 20 20  3a 0d 05 dc 43 58 70 69  |).....  :...CXpi|
00001550  78 65 6c 73 3d a4 4d 6f  64 65 49 6e 66 6f 28 22  |xels=.ModeInfo("|
00001560  58 50 69 78 65 6c 73 22  2c 2d 31 29 3a 59 70 69  |XPixels",-1):Ypi|
00001570  78 65 6c 73 3d a4 4d 6f  64 65 49 6e 66 6f 28 22  |xels=.ModeInfo("|
00001580  59 50 69 78 65 6c 73 22  2c 2d 31 29 0d 05 e6 4f  |YPixels",-1)...O|
00001590  58 45 69 67 46 61 63 74  6f 72 3d a4 4d 6f 64 65  |XEigFactor=.Mode|
000015a0  49 6e 66 6f 28 22 58 45  69 67 46 61 63 74 6f 72  |Info("XEigFactor|
000015b0  22 2c 2d 31 29 3a 59 45  69 67 46 61 63 74 6f 72  |",-1):YEigFactor|
000015c0  3d a4 4d 6f 64 65 49 6e  66 6f 28 22 59 45 69 67  |=.ModeInfo("YEig|
000015d0  46 61 63 74 6f 72 22 2c  2d 31 29 0d 05 f0 07 20  |Factor",-1).... |
000015e0  20 3a 0d 05 fa 38 74 6f  70 3d 42 6c 6f 63 6b 21  | :...8top=Block!|
000015f0  31 36 3a 72 69 67 68 74  3d 42 6c 6f 63 6b 21 31  |16:right=Block!1|
00001600  32 3a 62 6f 74 3d 42 6c  6f 63 6b 21 38 3a 6c 65  |2:bot=Block!8:le|
00001610  66 74 3d 42 6c 6f 63 6b  21 34 0d 06 04 41 c8 99  |ft=Block!4...A..|
00001620  20 22 57 69 6d 70 5f 4f  70 65 6e 57 69 6e 64 6f  | "Wimp_OpenWindo|
00001630  77 22 2c 2c 42 6c 6f 63  6b 3a c8 99 20 22 57 69  |w",,Block:.. "Wi|
00001640  6d 70 5f 47 65 74 57 69  6e 64 6f 77 4f 75 74 6c  |mp_GetWindowOutl|
00001650  69 6e 65 22 2c 2c 42 6c  6f 63 6b 0d 06 0e 26 54  |ine",,Block...&T|
00001660  42 3d 28 28 42 6c 6f 63  6b 21 31 36 29 2d 74 6f  |B=((Block!16)-to|
00001670  70 29 2f 28 32 5e 59 45  69 67 46 61 63 74 6f 72  |p)/(2^YEigFactor|
00001680  29 0d 06 18 28 56 53 3d  28 28 42 6c 6f 63 6b 21  |)...(VS=((Block!|
00001690  31 32 29 2d 72 69 67 68  74 29 2f 28 32 5e 58 45  |12)-right)/(2^XE|
000016a0  69 67 46 61 63 74 6f 72  29 0d 06 22 25 48 53 3d  |igFactor).."%HS=|
000016b0  28 62 6f 74 2d 28 42 6c  6f 63 6b 21 38 29 29 2f  |(bot-(Block!8))/|
000016c0  28 32 5e 59 45 69 67 46  61 63 74 6f 72 29 0d 06  |(2^YEigFactor)..|
000016d0  2c 26 4c 50 3d 28 6c 65  66 74 2d 28 42 6c 6f 63  |,&LP=(left-(Bloc|
000016e0  6b 21 34 29 29 2f 28 32  5e 58 45 69 67 46 61 63  |k!4))/(2^XEigFac|
000016f0  74 6f 72 29 0d 06 36 4b  f4 20 4c 50 20 69 73 20  |tor)..6K. LP is |
00001700  4c 65 66 74 20 50 69 78  65 6c 3a 20 6e 6f 72 6d  |Left Pixel: norm|
00001710  61 6c 6c 79 20 70 72 65  73 65 6e 74 2c 20 62 75  |ally present, bu|
00001720  74 20 6e 6f 74 20 69 66  20 77 69 6e 64 6f 77 20  |t not if window |
00001730  69 73 20 74 72 61 6e 73  70 61 72 65 6e 74 2e 0d  |is transparent..|
00001740  06 40 25 77 69 64 74 68  3d 28 72 69 67 68 74 2d  |.@%width=(right-|
00001750  6c 65 66 74 29 2f 28 32  5e 58 45 69 67 46 61 63  |left)/(2^XEigFac|
00001760  74 6f 72 29 0d 06 4a 23  68 65 69 67 68 74 3d 28  |tor)..J#height=(|
00001770  74 6f 70 2d 62 6f 74 29  2f 28 32 5e 59 45 69 67  |top-bot)/(2^YEig|
00001780  46 61 63 74 6f 72 29 0d  06 54 0f c8 8e 20 61 63  |Factor)..T... ac|
00001790  72 6f 73 73 20 ca 0d 06  5e 0e 20 20 c9 20 30 3a  |ross ...^.  . 0:|
000017a0  78 3d 4c 50 0d 06 68 2c  20 20 c9 20 31 3a 78 3d  |x=LP..h,  . 1:x=|
000017b0  4c 50 2b 28 28 58 70 69  78 65 6c 73 2b 31 29 2d  |LP+((Xpixels+1)-|
000017c0  28 77 69 64 74 68 2b 4c  50 2b 56 53 29 29 2f 34  |(width+LP+VS))/4|
000017d0  0d 06 72 2c 20 20 c9 20  32 3a 78 3d 4c 50 2b 28  |..r,  . 2:x=LP+(|
000017e0  28 58 70 69 78 65 6c 73  2b 31 29 2d 28 77 69 64  |(Xpixels+1)-(wid|
000017f0  74 68 2b 4c 50 2b 56 53  29 29 2f 32 0d 06 7c 32  |th+LP+VS))/2..|2|
00001800  20 20 c9 20 33 3a 78 3d  4c 50 2b 28 33 2a 28 28  |  . 3:x=LP+(3*((|
00001810  28 58 70 69 78 65 6c 73  2b 31 29 2d 28 77 69 64  |(Xpixels+1)-(wid|
00001820  74 68 2b 4c 50 2b 56 53  29 29 2f 34 29 29 0d 06  |th+LP+VS))/4))..|
00001830  86 22 20 20 c9 20 34 3a  78 3d 28 58 70 69 78 65  |."  . 4:x=(Xpixe|
00001840  6c 73 2b 31 29 2d 28 77  69 64 74 68 2b 56 53 29  |ls+1)-(width+VS)|
00001850  0d 06 90 05 cb 0d 06 9a  0b c8 8e 20 75 70 20 ca  |........... up .|
00001860  0d 06 a4 0e 20 20 c9 20  30 3a 79 3d 48 53 0d 06  |....  . 0:y=HS..|
00001870  ae 23 20 20 c9 20 31 3a  79 3d 48 53 2b 28 31 33  |.#  . 1:y=HS+(13|
00001880  32 2f 28 32 5e 59 45 69  67 46 61 63 74 6f 72 29  |2/(2^YEigFactor)|
00001890  29 0d 06 b8 2d 20 20 c9  20 32 3a 79 3d 48 53 2b  |)...-  . 2:y=HS+|
000018a0  28 28 59 70 69 78 65 6c  73 2b 31 29 2d 28 68 65  |((Ypixels+1)-(he|
000018b0  69 67 68 74 2b 54 42 2b  48 53 29 29 2f 32 0d 06  |ight+TB+HS))/2..|
000018c0  c2 33 20 20 c9 20 33 3a  79 3d 48 53 2b 28 33 2a  |.3  . 3:y=HS+(3*|
000018d0  28 28 28 59 70 69 78 65  6c 73 2b 31 29 2d 28 68  |(((Ypixels+1)-(h|
000018e0  65 69 67 68 74 2b 54 42  2b 48 53 29 29 2f 34 29  |eight+TB+HS))/4)|
000018f0  29 0d 06 cc 23 20 20 c9  20 34 3a 79 3d 28 59 70  |)...#  . 4:y=(Yp|
00001900  69 78 65 6c 73 2b 31 29  2d 28 68 65 69 67 68 74  |ixels+1)-(height|
00001910  2b 54 42 29 0d 06 d6 05  cb 0d 06 e0 28 f4 20 41  |+TB)........(. A|
00001920  62 6f 76 65 20 63 6f 6f  72 64 69 6e 61 74 65 73  |bove coordinates|
00001930  20 70 6f 73 69 74 69 6f  6e 20 77 69 6e 64 6f 77  | position window|
00001940  2e 0d 06 ea 28 f4 20 4e  6f 77 20 63 6f 6e 76 65  |....(. Now conve|
00001950  72 74 20 74 6f 20 73 63  72 65 65 6e 20 63 6f 6f  |rt to screen coo|
00001960  72 64 69 6e 61 74 65 73  3a 0d 06 f4 29 78 3d 78  |rdinates:...)x=x|
00001970  2a 28 32 5e 58 45 69 67  46 61 63 74 6f 72 29 3a  |*(2^XEigFactor):|
00001980  79 3d 79 2a 28 32 5e 59  45 69 67 46 61 63 74 6f  |y=y*(2^YEigFacto|
00001990  72 29 0d 06 fe 3b 77 69  64 74 68 3d 77 69 64 74  |r)...;width=widt|
000019a0  68 2a 28 32 5e 58 45 69  67 46 61 63 74 6f 72 29  |h*(2^XEigFactor)|
000019b0  3a 68 65 69 67 68 74 3d  68 65 69 67 68 74 2a 28  |:height=height*(|
000019c0  32 5e 59 45 69 67 46 61  63 74 6f 72 29 0d 07 08  |2^YEigFactor)...|
000019d0  1e 42 6c 6f 63 6b 21 31  32 3d 78 2b 77 69 64 74  |.Block!12=x+widt|
000019e0  68 3a 42 6c 6f 63 6b 21  34 3d 78 0d 07 12 1f 42  |h:Block!4=x....B|
000019f0  6c 6f 63 6b 21 31 36 3d  79 2b 68 65 69 67 68 74  |lock!16=y+height|
00001a00  3a 42 6c 6f 63 6b 21 38  3d 79 0d 07 1c 05 e1 0d  |:Block!8=y......|
00001a10  07 26 05 3a 0d 07 30 4f  f4 20 2d 2d 2d 2d 2d 2d  |.&.:..0O. ------|
00001a20  2d 2d 2d 2d 2d 2d 2d 2d  2d 2d 2d 2d 2d 2d 2d 2d  |----------------|
*
00001a60  2d 2d 2d 0d 07 3a 18 f4  20 57 69 6d 70 20 70 6f  |---..:.. Wimp po|
00001a70  6c 6c 20 72 6f 75 74 69  6e 65 73 0d 07 44 4f f4  |ll routines..DO.|
00001a80  20 2d 2d 2d 2d 2d 2d 2d  2d 2d 2d 2d 2d 2d 2d 2d  | ---------------|
00001a90  2d 2d 2d 2d 2d 2d 2d 2d  2d 2d 2d 2d 2d 2d 2d 2d  |----------------|
*
00001ac0  2d 2d 2d 2d 2d 2d 2d 2d  2d 2d 0d 07 4e 05 3a 0d  |----------..N.:.|
00001ad0  07 58 0d dd 20 f2 52 65  64 72 61 77 0d 07 62 14  |.X.. .Redraw..b.|
00001ae0  e7 20 44 6f 4d 6f 64 65  43 68 61 6e 67 65 20 8c  |. DoModeChange .|
00001af0  0d 07 6c 64 20 20 f4 20  52 65 2d 6f 70 65 6e 69  |..ld  . Re-openi|
00001b00  6e 67 20 77 69 6e 64 6f  77 73 20 6e 65 65 64 20  |ng windows need |
00001b10  61 6e 20 65 78 74 72 61  20 77 69 6d 70 5f 70 6f  |an extra wimp_po|
00001b20  6c 6c 20 74 6f 20 68 61  70 70 65 6e 20 61 66 74  |ll to happen aft|
00001b30  65 72 20 74 68 65 20 6d  6f 64 65 20 63 68 61 6e  |er the mode chan|
00001b40  67 65 20 69 6e 20 6f 72  64 65 72 20 74 6f 20 77  |ge in order to w|
00001b50  6f 72 6b 3a 0d 07 76 42  20 20 e7 20 a4 4f 70 65  |ork:..vB  . .Ope|
00001b60  6e 53 74 61 74 65 28 53  70 79 43 61 6c 63 29 20  |nState(SpyCalc) |
00001b70  8c 20 f2 4f 70 65 6e 28  53 70 79 43 61 6c 63 2c  |. .Open(SpyCalc,|
00001b80  a3 2c 58 50 6f 73 69 74  69 6f 6e 2c 59 50 6f 73  |.,XPosition,YPos|
00001b90  69 74 69 6f 6e 29 0d 07  80 14 20 20 44 6f 4d 6f  |ition)....  DoMo|
00001ba0  64 65 43 68 61 6e 67 65  3d a3 0d 07 8a 05 cd 0d  |deChange=.......|
00001bb0  07 94 28 c8 99 20 22 57  69 6d 70 5f 52 65 64 72  |..(.. "Wimp_Redr|
00001bc0  61 77 57 69 6e 64 6f 77  22 2c 2c 42 6c 6f 63 6b  |awWindow",,Block|
00001bd0  20 b8 20 66 6c 61 67 0d  07 9e 0b c8 95 20 66 6c  | . flag...... fl|
00001be0  61 67 0d 07 a8 2a 20 20  c8 99 20 22 49 6e 74 65  |ag...*  .. "Inte|
00001bf0  72 66 61 63 65 5f 52 65  6e 64 65 72 33 64 57 69  |rface_Render3dWi|
00001c00  6e 64 6f 77 22 2c 2c 42  6c 6f 63 6b 0d 07 b2 2a  |ndow",,Block...*|
00001c10  20 20 c8 99 20 22 57 69  6d 70 5f 47 65 74 52 65  |  .. "Wimp_GetRe|
00001c20  63 74 61 6e 67 6c 65 22  2c 2c 42 6c 6f 63 6b 20  |ctangle",,Block |
00001c30  b8 20 66 6c 61 67 0d 07  bc 05 ce 0d 07 c6 05 e1  |. flag..........|
00001c40  0d 07 d0 05 3a 0d 07 da  15 dd 20 f2 52 65 63 69  |....:..... .Reci|
00001c50  65 76 65 4d 65 73 73 61  67 65 0d 07 e4 11 c8 8e  |eveMessage......|
00001c60  20 42 6c 6f 63 6b 21 31  36 20 ca 0d 07 ee 12 20  | Block!16 ..... |
00001c70  20 c9 20 30 20 3a 20 44  6f 6e 65 3d b9 0d 07 f8  | . 0 : Done=....|
00001c80  19 20 20 c9 20 32 20 3a  20 f4 20 44 61 74 61 53  |.  . 2 : . DataS|
00001c90  61 76 65 41 63 6b 0d 08  02 4d 20 20 20 20 20 20  |aveAck...M      |
00001ca0  20 20 20 20 20 f4 20 4f  74 68 65 72 20 74 61 73  |     . Other tas|
00001cb0  6b 20 77 61 6e 74 73 20  61 20 74 72 61 6e 73 66  |k wants a transf|
00001cc0  65 72 20 76 69 61 20 3c  57 69 6d 70 24 53 63 72  |er via <Wimp$Scr|
00001cd0  61 70 3e 20 72 61 74 68  65 72 20 74 68 61 6e 20  |ap> rather than |
00001ce0  52 41 4d 0d 08 0c 21 20  20 20 20 20 20 20 20 20  |RAM...!         |
00001cf0  20 20 f2 57 69 6d 70 53  63 72 61 70 54 72 61 6e  |  .WimpScrapTran|
00001d00  73 6d 69 74 0d 08 16 17  20 20 c9 20 36 20 3a 20  |smit....  . 6 : |
00001d10  f4 20 52 41 4d 20 46 65  74 63 68 0d 08 20 2e 20  |. RAM Fetch.. . |
00001d20  20 20 20 20 20 20 20 20  20 20 f4 20 4f 74 68 65  |          . Othe|
00001d30  72 20 74 61 73 6b 20 69  73 20 61 73 6b 69 6e 67  |r task is asking|
00001d40  20 66 6f 72 20 64 61 74  61 0d 08 2a 1b 20 20 20  | for data..*.   |
00001d50  20 20 20 20 20 20 20 20  f2 52 41 4d 54 72 61 6e  |        .RAMTran|
00001d60  73 6d 69 74 0d 08 34 31  20 20 c9 20 31 30 3a 20  |smit..41  . 10: |
00001d70  e7 20 4f 6d 6e 69 44 65  73 6b 3d 30 20 8c 20 f2  |. OmniDesk=0 . .|
00001d80  53 61 76 65 44 65 73 6b  74 6f 70 28 42 6c 6f 63  |SaveDesktop(Bloc|
00001d90  6b 21 32 30 29 0d 08 3e  45 20 20 20 20 20 20 20  |k!20)..>E       |
00001da0  20 20 20 20 f4 20 4f 6e  6c 79 20 73 61 76 65 20  |    . Only save |
00001db0  69 66 20 77 65 20 68 61  76 65 20 6e 6f 74 20 62  |if we have not b|
00001dc0  65 65 6e 20 73 74 61 72  74 65 64 20 75 70 20 62  |een started up b|
00001dd0  79 20 4f 6d 6e 69 44 65  73 6b 0d 08 48 14 20 20  |y OmniDesk..H.  |
00001de0  c9 20 26 35 30 32 20 3a  20 f2 48 65 6c 70 0d 08  |. &502 : .Help..|
00001df0  52 1c 20 20 c9 20 26 34  30 30 43 31 20 3a 20 f2  |R.  . &400C1 : .|
00001e00  4d 6f 64 65 43 68 61 6e  67 65 0d 08 5c 3d 20 20  |ModeChange..\=  |
00001e10  c9 20 55 74 69 6c 4f 70  65 6e 20 3a 20 e7 20 24  |. UtilOpen : . $|
00001e20  28 42 6c 6f 63 6b 2b 32  34 29 3d 54 61 73 6b 6e  |(Block+24)=Taskn|
00001e30  61 6d 65 24 20 8c 20 f2  4f 6d 6e 69 44 65 73 6b  |ame$ . .OmniDesk|
00001e40  43 61 6c 6c 69 6e 67 0d  08 66 26 20 20 c9 20 55  |Calling..f&  . U|
00001e50  74 69 6c 51 75 69 74 74  69 6e 67 20 3a 20 e7 20  |tilQuitting : . |
00001e60  4f 6d 6e 69 44 65 73 6b  3c 3e 30 20 8c 0d 08 70  |OmniDesk<>0 ...p|
00001e70  38 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |8               |
00001e80  20 20 20 20 20 20 20 20  20 e7 20 42 6c 6f 63 6b  |         . Block|
00001e90  21 32 30 3d 4f 6d 6e 69  44 65 73 6b 20 8c 20 44  |!20=OmniDesk . D|
00001ea0  6f 6e 65 3d b9 0d 08 7a  1b 20 20 20 20 20 20 20  |one=...z.       |
00001eb0  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 cd  |               .|
00001ec0  0d 08 84 1b 20 20 c9 20  55 74 69 6c 52 65 73 69  |....  . UtilResi|
00001ed0  64 65 20 3a 20 45 78 69  74 3d a3 0d 08 8e 05 cb  |de : Exit=......|
00001ee0  0d 08 98 05 e1 0d 08 a2  05 3a 0d 08 ac 16 dd 20  |.........:..... |
00001ef0  f2 44 65 6c 65 74 65 57  69 6d 70 53 63 72 61 70  |.DeleteWimpScrap|
00001f00  0d 08 b6 07 ea 20 85 0d  08 c0 0f ee 20 85 20 ea  |..... ...... . .|
00001f10  20 f7 20 85 3a e1 0d 08  ca 3c f4 20 57 65 20 6d  | . .:....<. We m|
00001f20  61 79 20 72 65 63 65 69  76 65 20 74 72 79 20 74  |ay receive try t|
00001f30  6f 20 64 65 6c 65 74 65  20 61 20 6e 6f 6e 2d 65  |o delete a non-e|
00001f40  78 69 73 74 61 6e 74 20  57 69 6d 70 24 53 63 72  |xistant Wimp$Scr|
00001f50  61 70 0d 08 d4 40 f4 20  66 69 6c 65 20 69 66 20  |ap...@. file if |
00001f60  74 68 65 20 72 65 63 65  69 76 69 6e 67 20 74 61  |the receiving ta|
00001f70  73 6b 20 64 69 64 20 6e  6f 74 20 72 65 63 6f 67  |sk did not recog|
00001f80  6e 69 73 65 20 74 68 65  20 66 69 6c 65 74 79 70  |nise the filetyp|
00001f90  65 2e 0d 08 de 1c ff 28  22 44 65 6c 65 74 65 20  |e......("Delete |
00001fa0  3c 57 69 6d 70 24 53 63  72 61 70 3e 22 29 0d 08  |<Wimp$Scrap>")..|
00001fb0  e8 05 e1 0d 08 f2 05 3a  0d 08 fc 12 dd 20 f2 4d  |.......:..... .M|
00001fc0  6f 75 73 65 42 75 74 74  6f 6e 0d 09 06 31 4d 6f  |ouseButton...1Mo|
00001fd0  75 73 65 58 3d 42 6c 6f  63 6b 21 30 3a 4d 6f 75  |useX=Block!0:Mou|
00001fe0  73 65 59 3d 42 6c 6f 63  6b 21 34 3a 42 75 74 74  |seY=Block!4:Butt|
00001ff0  6f 6e 73 3d 42 6c 6f 63  6b 21 38 0d 09 10 21 57  |ons=Block!8...!W|
00002000  69 6e 64 6f 77 3d 42 6c  6f 63 6b 21 31 32 3a 49  |indow=Block!12:I|
00002010  63 6f 6e 3d 42 6c 6f 63  6b 21 31 36 0d 09 1a 0f  |con=Block!16....|
00002020  c8 8e 20 57 69 6e 64 6f  77 20 ca 0d 09 24 22 20  |.. Window ...$" |
00002030  20 c9 20 2d 32 3a f4 20  49 63 6f 6e 20 62 61 72  | . -2:. Icon bar|
00002040  20 69 63 6f 6e 20 63 6c  69 63 6b 65 64 0d 09 2e  | icon clicked...|
00002050  14 20 20 20 20 c8 8e 20  42 75 74 74 6f 6e 73 20  |.    .. Buttons |
00002060  ca 0d 09 38 18 20 20 20  20 20 20 c9 20 31 20 3a  |...8.      . 1 :|
00002070  20 f4 20 41 64 6a 75 73  74 0d 09 42 16 20 20 20  | . Adjust..B.   |
00002080  20 20 20 c9 20 32 20 3a  20 f4 20 4d 65 6e 75 0d  |   . 2 : . Menu.|
00002090  09 4c 39 20 20 20 20 20  20 20 20 4d 25 3d 49 42  |.L9        M%=IB|
000020a0  4d 65 6e 75 3a 4d 65 6e  75 58 3d 4d 6f 75 73 65  |Menu:MenuX=Mouse|
000020b0  58 3a 4d 65 6e 75 59 3d  4d 6f 75 73 65 59 3a f2  |X:MenuY=MouseY:.|
000020c0  4d 61 6b 65 4d 65 6e 75  0d 09 56 18 20 20 20 20  |MakeMenu..V.    |
000020d0  20 20 c9 20 34 20 3a 20  f4 20 53 65 6c 65 63 74  |  . 4 : . Select|
000020e0  0d 09 60 30 20 20 20 20  20 20 20 20 f2 4f 70 65  |..`0        .Ope|
000020f0  6e 28 53 70 79 43 61 6c  63 2c b9 2c 58 50 6f 73  |n(SpyCalc,.,XPos|
00002100  69 74 69 6f 6e 2c 59 50  6f 73 69 74 69 6f 6e 29  |ition,YPosition)|
00002110  0d 09 6a 09 20 20 20 20  cb 0d 09 74 0f 20 20 c9  |..j.    ...t.  .|
00002120  20 53 70 79 43 61 6c 63  0d 09 7e 14 20 20 20 20  | SpyCalc..~.    |
00002130  c8 8e 20 42 75 74 74 6f  6e 73 20 ca 0d 09 88 16  |.. Buttons .....|
00002140  20 20 20 20 20 20 c9 20  32 20 3a 20 f4 20 4d 65  |      . 2 : . Me|
00002150  6e 75 0d 09 92 31 20 20  20 20 20 20 20 20 4d 25  |nu...1        M%|
00002160  3d 4d 61 69 6e 4d 65 6e  75 3a 4d 65 6e 75 58 3d  |=MainMenu:MenuX=|
00002170  4d 6f 75 73 65 58 3a 4d  65 6e 75 59 3d 4d 6f 75  |MouseX:MenuY=Mou|
00002180  73 65 59 0d 09 9c 19 20  20 20 20 20 20 20 20 e7  |seY....        .|
00002190  20 77 69 6d 70 3e 3d 33  31 30 20 8c 0d 09 a6 60  | wimp>=310 ....`|
000021a0  20 20 20 20 20 20 20 20  20 20 e7 20 c0 24 4d 61  |          . .$Ma|
000021b0  69 6e 4d 65 6e 75 54 69  74 6c 65 2c 31 29 3d 22  |inMenuTitle,1)="|
000021c0  5c 22 20 8c 20 24 4d 61  69 6e 4d 65 6e 75 54 69  |\" . $MainMenuTi|
000021d0  74 6c 65 3d c2 24 4d 61  69 6e 4d 65 6e 75 54 69  |tle=.$MainMenuTi|
000021e0  74 6c 65 2c a9 28 24 4d  61 69 6e 4d 65 6e 75 54  |tle,.($MainMenuT|
000021f0  69 74 6c 65 29 2d 31 29  2b bd 31 33 0d 09 b0 43  |itle)-1)+.13...C|
00002200  20 20 20 20 20 20 20 20  20 20 e7 20 58 50 6f 73  |          . XPos|
00002210  69 74 69 6f 6e 3d 34 20  8c 20 24 4d 61 69 6e 4d  |ition=4 . $MainM|
00002220  65 6e 75 54 69 74 6c 65  3d 22 5c 22 2b 24 4d 61  |enuTitle="\"+$Ma|
00002230  69 6e 4d 65 6e 75 54 69  74 6c 65 2b bd 31 33 0d  |inMenuTitle+.13.|
00002240  09 ba 0d 20 20 20 20 20  20 20 20 cd 0d 09 c4 15  |...        .....|
00002250  20 20 20 20 20 20 20 20  f2 4d 61 6b 65 4d 65 6e  |        .MakeMen|
00002260  75 0d 09 ce 21 20 20 20  20 20 20 c9 20 31 2c 34  |u...!      . 1,4|
00002270  20 3a 20 f4 20 53 65 6c  65 63 74 2c 41 64 6a 75  | : . Select,Adju|
00002280  73 74 0d 09 d8 27 20 20  20 20 20 20 20 20 e7 20  |st...'        . |
00002290  28 49 63 6f 6e 3e 3d 32  36 29 20 80 20 28 49 63  |(Icon>=26) . (Ic|
000022a0  6f 6e 3c 3d 34 34 29 20  8c 0d 09 e2 36 20 20 20  |on<=44) ....6   |
000022b0  20 20 20 20 20 20 20 f2  55 70 64 61 74 65 49 63  |       .UpdateIc|
000022c0  6f 6e 28 53 70 79 43 61  6c 63 2c 34 36 2c 22 26  |on(SpyCalc,46,"&|
000022d0  22 2b c3 7e a4 57 69 6e  64 46 6c 61 67 73 29 0d  |"+.~.WindFlags).|
000022e0  09 ec 0d 20 20 20 20 20  20 20 20 cd 0d 09 f6 0b  |...        .....|
000022f0  20 20 20 20 20 20 7f 0d  0a 00 3a 20 20 20 20 20  |      ....:     |
00002300  20 20 20 e7 20 28 42 75  74 74 6f 6e 73 3e 37 29  |   . (Buttons>7)|
00002310  20 80 20 28 57 69 6e 64  6f 77 3d 53 70 79 43 61  | . (Window=SpyCa|
00002320  6c 63 29 20 80 20 28 49  63 6f 6e 3d 34 36 29 20  |lc) . (Icon=46) |
00002330  8c 0d 0a 0a 34 20 20 20  20 20 20 20 20 20 20 24  |....4          $|
00002340  54 72 61 6e 73 6d 69 73  73 69 6f 6e 3d a4 52 65  |Transmission=.Re|
00002350  61 64 49 63 6f 6e 53 74  72 28 53 70 79 43 61 6c  |adIconStr(SpyCal|
00002360  63 2c 34 36 29 0d 0a 14  52 20 20 20 20 20 20 20  |c,46)...R       |
00002370  20 20 20 44 72 61 67 67  69 6e 67 24 3d 22 46 6c  |   Dragging$="Fl|
00002380  61 67 73 22 3a f2 44 72  61 67 42 6f 78 28 53 70  |ags":.DragBox(Sp|
00002390  79 43 61 6c 63 2c 34 36  2c 35 2c 53 70 72 69 74  |yCalc,46,5,Sprit|
000023a0  65 73 2c a4 4d 61 6b 65  44 72 61 67 67 69 6e 67  |es,.MakeDragging|
000023b0  53 70 72 69 74 65 29 0d  0a 1e 0d 20 20 20 20 20  |Sprite)....     |
000023c0  20 20 20 cd 0d 0a 28 09  20 20 20 20 cb 0d 0a 32  |   ...(.    ...2|
000023d0  30 20 20 c9 20 4c 6f 63  20 80 20 42 75 74 74 6f  |0  . Loc . Butto|
000023e0  6e 73 3c 38 3a f4 20 52  65 70 6f 73 69 74 69 6f  |ns<8:. Repositio|
000023f0  6e 20 6d 61 69 6e 20 77  69 6e 64 6f 77 0d 0a 3c  |n main window..<|
00002400  13 20 20 20 20 e7 20 49  63 6f 6e 3e 3d 36 20 8c  |.    . Icon>=6 .|
00002410  0d 0a 46 2c 20 20 20 20  20 20 58 50 6f 73 69 74  |..F,      XPosit|
00002420  69 6f 6e 3d a4 52 65 61  64 57 69 6e 64 6f 77 4c  |ion=.ReadWindowL|
00002430  6f 63 61 74 69 6f 6e 28  22 58 22 29 0d 0a 50 2c  |ocation("X")..P,|
00002440  20 20 20 20 20 20 59 50  6f 73 69 74 69 6f 6e 3d  |      YPosition=|
00002450  a4 52 65 61 64 57 69 6e  64 6f 77 4c 6f 63 61 74  |.ReadWindowLocat|
00002460  69 6f 6e 28 22 59 22 29  0d 0a 5a 46 20 20 20 20  |ion("Y")..ZF    |
00002470  20 20 e7 20 a4 4f 70 65  6e 53 74 61 74 65 28 53  |  . .OpenState(S|
00002480  70 79 43 61 6c 63 29 20  8c 20 f2 4f 70 65 6e 28  |pyCalc) . .Open(|
00002490  53 70 79 43 61 6c 63 2c  a3 2c 58 50 6f 73 69 74  |SpyCalc,.,XPosit|
000024a0  69 6f 6e 2c 59 50 6f 73  69 74 69 6f 6e 29 0d 0a  |ion,YPosition)..|
000024b0  64 09 20 20 20 20 cd 0d  0a 6e 05 cb 0d 0a 78 05  |d.    ...n....x.|
000024c0  e1 0d 0a 82 05 3a 0d 0a  8c 13 dd 20 f2 44 72 61  |.....:..... .Dra|
000024d0  67 46 69 6e 69 73 68 65  64 0d 0a 96 29 e7 20 44  |gFinished...). D|
000024e0  72 61 67 41 53 70 72 69  74 65 20 8c 20 c8 99 20  |ragASprite . .. |
000024f0  22 44 72 61 67 41 53 70  72 69 74 65 5f 53 74 6f  |"DragASprite_Sto|
00002500  70 22 0d 0a a0 23 c8 99  20 22 57 69 6d 70 5f 47  |p"...#.. "Wimp_G|
00002510  65 74 50 6f 69 6e 74 65  72 49 6e 66 6f 22 2c 2c  |etPointerInfo",,|
00002520  42 6c 6f 63 6b 0d 0a aa  2e e7 20 42 6c 6f 63 6b  |Block..... Block|
00002530  21 31 32 3d 2d 31 20 8c  20 e1 3a f4 20 44 72 61  |!12=-1 . .:. Dra|
00002540  67 67 65 64 20 74 6f 20  62 61 63 6b 67 72 6f 75  |gged to backgrou|
00002550  6e 64 2e 0d 0a b4 59 44  72 61 67 67 65 64 54 6f  |nd....YDraggedTo|
00002560  58 3d 42 6c 6f 63 6b 21  30 3a 44 72 61 67 67 65  |X=Block!0:Dragge|
00002570  64 54 6f 59 3d 42 6c 6f  63 6b 21 34 3a 44 72 61  |dToY=Block!4:Dra|
00002580  67 67 65 64 54 6f 57 69  6e 64 6f 77 3d 42 6c 6f  |ggedToWindow=Blo|
00002590  63 6b 21 31 32 3a 44 72  61 67 67 65 64 54 6f 49  |ck!12:DraggedToI|
000025a0  63 6f 6e 3d 42 6c 6f 63  6b 21 31 36 0d 0a be 30  |con=Block!16...0|
000025b0  f4 20 4f 4b 20 2d 20 4c  65 74 27 73 20 62 65 67  |. OK - Let's beg|
000025c0  69 6e 20 61 6e 20 69 6e  74 65 72 2d 61 70 70 6c  |in an inter-appl|
000025d0  69 63 61 74 69 6f 6e 20  73 61 76 65 0d 0a c8 0b  |ication save....|
000025e0  4d 79 52 65 66 3d 30 0d  0a d2 34 42 6c 6f 63 6b  |MyRef=0...4Block|
000025f0  21 30 3d 32 35 36 3a 42  6c 6f 63 6b 21 31 32 3d  |!0=256:Block!12=|
00002600  4d 79 52 65 66 3a 42 6c  6f 63 6b 21 31 36 3d 31  |MyRef:Block!16=1|
00002610  3a f4 20 44 61 74 61 53  61 76 65 0d 0a dc 5b 42  |:. DataSave...[B|
00002620  6c 6f 63 6b 21 32 30 3d  44 72 61 67 67 65 64 54  |lock!20=DraggedT|
00002630  6f 57 69 6e 64 6f 77 3a  42 6c 6f 63 6b 21 32 34  |oWindow:Block!24|
00002640  3d 44 72 61 67 67 65 64  54 6f 49 63 6f 6e 3a 42  |=DraggedToIcon:B|
00002650  6c 6f 63 6b 21 32 38 3d  44 72 61 67 67 65 64 54  |lock!28=DraggedT|
00002660  6f 58 3a 42 6c 6f 63 6b  21 33 32 3d 44 72 61 67  |oX:Block!32=Drag|
00002670  67 65 64 54 6f 59 0d 0a  e6 2a 42 6c 6f 63 6b 21  |gedToY...*Block!|
00002680  33 36 3d 31 32 3a f4 20  4e 65 76 65 72 20 6d 6f  |36=12:. Never mo|
00002690  72 65 20 74 68 61 6e 20  31 32 20 62 79 74 65 73  |re than 12 bytes|
000026a0  0d 0a f0 24 42 6c 6f 63  6b 21 34 30 3d 26 46 46  |...$Block!40=&FF|
000026b0  46 3a f4 20 46 69 6c 65  74 79 70 65 20 6f 66 20  |F:. Filetype of |
000026c0  54 65 78 74 0d 0a fa 1c  24 28 42 6c 6f 63 6b 2b  |Text....$(Block+|
000026d0  34 34 29 3d 44 72 61 67  67 69 6e 67 24 2b bd 30  |44)=Dragging$+.0|
000026e0  0d 0b 04 40 c8 99 20 22  57 69 6d 70 5f 53 65 6e  |...@.. "Wimp_Sen|
000026f0  64 4d 65 73 73 61 67 65  22 2c 31 37 2c 42 6c 6f  |dMessage",17,Blo|
00002700  63 6b 2c 44 72 61 67 67  65 64 54 6f 57 69 6e 64  |ck,DraggedToWind|
00002710  6f 77 2c 44 72 61 67 67  65 64 54 6f 49 63 6f 6e  |ow,DraggedToIcon|
00002720  0d 0b 0e 42 f4 20 44 72  61 67 67 65 64 54 6f 49  |...B. DraggedToI|
00002730  63 6f 6e 20 69 6e 63 6c  75 64 65 64 20 69 6e 20  |con included in |
00002740  63 61 73 65 20 44 72 61  67 67 65 64 54 6f 57 69  |case DraggedToWi|
00002750  6e 64 6f 77 3d 2d 32 20  28 69 63 6f 6e 20 62 61  |ndow=-2 (icon ba|
00002760  72 29 0d 0b 18 05 e1 0d  0b 22 05 3a 0d 0b 2c 11  |r).......".:..,.|
00002770  dd 20 f2 4b 65 79 50 72  65 73 73 65 64 0d 0b 36  |. .KeyPressed..6|
00002780  32 57 69 6e 64 6f 77 3d  42 6c 6f 63 6b 21 30 3a  |2Window=Block!0:|
00002790  49 63 6f 6e 3d 42 6c 6f  63 6b 21 34 3a 43 68 61  |Icon=Block!4:Cha|
000027a0  72 61 63 74 65 72 3d 42  6c 6f 63 6b 21 32 34 0d  |racter=Block!24.|
000027b0  0b 40 0f c8 8e 20 57 69  6e 64 6f 77 20 ca 0d 0b  |.@... Window ...|
000027c0  4a 10 20 20 c9 20 53 70  79 43 61 6c 63 3a 0d 0b  |J.  . SpyCalc:..|
000027d0  54 18 20 20 20 20 e7 20  43 68 61 72 61 63 74 65  |T.    . Characte|
000027e0  72 3d 31 33 20 8c 0d 0b  5e 53 20 20 20 20 20 20  |r=13 ...^S      |
000027f0  41 24 3d a4 52 65 61 64  49 63 6f 6e 53 74 72 28  |A$=.ReadIconStr(|
00002800  53 70 79 43 61 6c 63 2c  34 36 29 3a e7 20 41 24  |SpyCalc,46):. A$|
00002810  3d 22 22 20 8c 20 41 24  3d 22 30 22 3a f2 55 70  |="" . A$="0":.Up|
00002820  64 61 74 65 49 63 6f 6e  28 53 70 79 43 61 6c 63  |dateIcon(SpyCalc|
00002830  2c 34 36 2c 22 26 30 22  29 0d 0b 68 20 20 20 20  |,46,"&0")..h    |
00002840  20 20 20 f2 55 70 64 61  74 65 53 77 69 74 63 68  |   .UpdateSwitch|
00002850  65 73 28 a0 28 41 24 29  29 0d 0b 72 09 20 20 20  |es(.(A$))..r.   |
00002860  20 cc 0d 0b 7c 28 20 20  20 20 20 20 c8 99 20 22  | ...|(      .. "|
00002870  57 69 6d 70 5f 50 72 6f  63 65 73 73 4b 65 79 22  |Wimp_ProcessKey"|
00002880  2c 43 68 61 72 61 63 74  65 72 0d 0b 86 09 20 20  |,Character....  |
00002890  20 20 cd 0d 0b 90 07 20  20 7f 0d 0b 9a 26 20 20  |  .....  ....&  |
000028a0  20 20 c8 99 20 22 57 69  6d 70 5f 50 72 6f 63 65  |  .. "Wimp_Proce|
000028b0  73 73 4b 65 79 22 2c 43  68 61 72 61 63 74 65 72  |ssKey",Character|
000028c0  0d 0b a4 05 cb 0d 0b ae  05 e1 0d 0b b8 05 3a 0d  |..............:.|
000028d0  0b c2 11 dd 20 f2 44 65  63 6f 64 65 4d 65 6e 75  |.... .DecodeMenu|
000028e0  0d 0b cc 2a 53 75 62 30  3d 42 6c 6f 63 6b 21 30  |...*Sub0=Block!0|
000028f0  3a 53 75 62 31 3d 42 6c  6f 63 6b 21 34 3a 53 75  |:Sub1=Block!4:Su|
00002900  62 32 3d 42 6c 6f 63 6b  21 38 0d 0b d6 0f 43 6c  |b2=Block!8....Cl|
00002910  6f 73 65 4d 65 6e 75 3d  a3 0d 0b e0 0b c8 8e 20  |oseMenu=....... |
00002920  4d 25 20 ca 0d 0b ea 0f  20 20 c9 20 49 42 4d 65  |M% .....  . IBMe|
00002930  6e 75 3a 0d 0b f4 11 20  20 20 20 c8 8e 20 53 75  |nu:....    .. Su|
00002940  62 30 20 ca 0d 0b fe 0d  20 20 20 20 20 20 c9 20  |b0 .....      . |
00002950  30 0d 0c 08 2b 20 20 20  20 20 20 20 20 c8 99 20  |0...+        .. |
00002960  22 57 69 6d 70 5f 47 65  74 50 6f 69 6e 74 65 72  |"Wimp_GetPointer|
00002970  49 6e 66 6f 22 2c 2c 42  6c 6f 63 6b 0d 0c 12 3c  |Info",,Block...<|
00002980  20 20 20 20 20 20 20 20  c8 99 20 22 57 69 6d 70  |        .. "Wimp|
00002990  5f 43 72 65 61 74 65 4d  65 6e 75 22 2c 2c 49 6e  |_CreateMenu",,In|
000029a0  66 6f 2c 42 6c 6f 63 6b  21 30 2d 32 34 2c 42 6c  |fo,Block!0-24,Bl|
000029b0  6f 63 6b 21 34 2b 32 34  0d 0c 1c 17 20 20 20 20  |ock!4+24....    |
000029c0  20 20 20 20 43 6c 6f 73  65 4d 65 6e 75 3d b9 0d  |    CloseMenu=..|
000029d0  0c 26 0d 20 20 20 20 20  20 c9 20 31 0d 0c 30 12  |.&.      . 1..0.|
000029e0  20 20 20 20 20 20 20 20  44 6f 6e 65 3d b9 0d 0c  |        Done=...|
000029f0  3a 09 20 20 20 20 cb 0d  0c 44 11 20 20 c9 20 4d  |:.    ...D.  . M|
00002a00  61 69 6e 4d 65 6e 75 3a  0d 0c 4e 11 20 20 20 20  |ainMenu:..N.    |
00002a10  c8 8e 20 53 75 62 30 20  ca 0d 0c 58 0d 20 20 20  |.. Sub0 ...X.   |
00002a20  20 20 20 c9 20 30 0d 0c  62 2b 20 20 20 20 20 20  |   . 0..b+      |
00002a30  20 20 c8 99 20 22 57 69  6d 70 5f 47 65 74 50 6f  |  .. "Wimp_GetPo|
00002a40  69 6e 74 65 72 49 6e 66  6f 22 2c 2c 42 6c 6f 63  |interInfo",,Bloc|
00002a50  6b 0d 0c 6c 3c 20 20 20  20 20 20 20 20 c8 99 20  |k..l<        .. |
00002a60  22 57 69 6d 70 5f 43 72  65 61 74 65 4d 65 6e 75  |"Wimp_CreateMenu|
00002a70  22 2c 2c 49 6e 66 6f 2c  42 6c 6f 63 6b 21 30 2d  |",,Info,Block!0-|
00002a80  32 34 2c 42 6c 6f 63 6b  21 34 2b 32 34 0d 0c 76  |24,Block!4+24..v|
00002a90  17 20 20 20 20 20 20 20  20 43 6c 6f 73 65 4d 65  |.        CloseMe|
00002aa0  6e 75 3d b9 0d 0c 80 0d  20 20 20 20 20 20 c9 20  |nu=.....      . |
00002ab0  31 0d 0c 8a 38 20 20 20  20 20 20 20 20 53 70 79  |1...8        Spy|
00002ac0  69 6e 67 3d ac 20 53 70  79 69 6e 67 3a f2 54 69  |ing=. Spying:.Ti|
00002ad0  63 6b 4d 65 6e 75 28 4d  61 69 6e 4d 65 6e 75 2c  |ckMenu(MainMenu,|
00002ae0  31 2c 53 70 79 69 6e 67  29 0d 0c 94 30 20 20 20  |1,Spying)...0   |
00002af0  20 20 20 20 20 f2 43 6c  65 61 72 53 70 79 43 61  |     .ClearSpyCa|
00002b00  6c 63 57 69 6e 64 6f 77  28 53 70 79 69 6e 67 29  |lcWindow(Spying)|
00002b10  3a 4f 6c 64 57 69 6e 3d  30 0d 0c 9e 34 20 20 20  |:OldWin=0...4   |
00002b20  20 20 20 20 20 f2 55 70  64 61 74 65 49 63 6f 6e  |     .UpdateIcon|
00002b30  28 53 70 79 43 61 6c 63  2c 34 36 2c 22 26 22 2b  |(SpyCalc,46,"&"+|
00002b40  c3 7e a4 57 69 6e 64 46  6c 61 67 73 29 0d 0c a8  |.~.WindFlags)...|
00002b50  6d 20 20 20 20 20 20 20  20 c8 99 20 22 57 69 6d  |m        .. "Wim|
00002b60  70 5f 47 65 74 43 61 72  65 74 50 6f 73 69 74 69  |p_GetCaretPositi|
00002b70  6f 6e 22 2c 2c 42 6c 6f  63 6b 3a e7 20 28 42 6c  |on",,Block:. (Bl|
00002b80  6f 63 6b 21 30 3d 53 70  79 43 61 6c 63 29 20 80  |ock!0=SpyCalc) .|
00002b90  20 53 70 79 69 6e 67 20  8c 20 c8 99 20 22 57 69  | Spying . .. "Wi|
00002ba0  6d 70 5f 53 65 74 43 61  72 65 74 50 6f 73 69 74  |mp_SetCaretPosit|
00002bb0  69 6f 6e 22 2c 2d 31 2c  2d 31 0d 0c b2 0d 20 20  |ion",-1,-1....  |
00002bc0  20 20 20 20 c9 20 32 0d  0c bc 2b 20 20 20 20 20  |    . 2...+     |
00002bd0  20 20 20 c8 99 20 22 57  69 6d 70 5f 47 65 74 50  |   .. "Wimp_GetP|
00002be0  6f 69 6e 74 65 72 49 6e  66 6f 22 2c 2c 42 6c 6f  |ointerInfo",,Blo|
00002bf0  63 6b 0d 0c c6 3b 20 20  20 20 20 20 20 20 c8 99  |ck...;        ..|
00002c00  20 22 57 69 6d 70 5f 43  72 65 61 74 65 4d 65 6e  | "Wimp_CreateMen|
00002c10  75 22 2c 2c 4c 6f 63 2c  42 6c 6f 63 6b 21 30 2d  |u",,Loc,Block!0-|
00002c20  32 34 2c 42 6c 6f 63 6b  21 34 2b 32 34 0d 0c d0  |24,Block!4+24...|
00002c30  17 20 20 20 20 20 20 20  20 43 6c 6f 73 65 4d 65  |.        CloseMe|
00002c40  6e 75 3d b9 0d 0c da 0d  20 20 20 20 20 20 c9 20  |nu=.....      . |
00002c50  33 0d 0c e4 5c 20 20 20  20 20 20 20 20 e7 20 ac  |3...\        . .|
00002c60  20 a4 53 61 76 65 53 65  74 74 69 6e 67 73 20 8c  | .SaveSettings .|
00002c70  20 85 20 39 39 39 39 2c  22 41 6e 20 65 72 72 6f  | . 9999,"An erro|
00002c80  72 20 6f 63 63 75 72 72  65 64 20 77 68 69 6c 73  |r occurred whils|
00002c90  74 20 77 72 69 74 69 6e  67 20 74 68 65 20 73 65  |t writing the se|
00002ca0  74 74 69 6e 67 73 20 66  69 6c 65 2e 22 0d 0c ee  |ttings file."...|
00002cb0  09 20 20 20 20 cb 0d 0c  f8 05 cb 0d 0d 02 23 c8  |.    .........#.|
00002cc0  99 20 22 57 69 6d 70 5f  47 65 74 50 6f 69 6e 74  |. "Wimp_GetPoint|
00002cd0  65 72 49 6e 66 6f 22 2c  2c 42 6c 6f 63 6b 0d 0d  |erInfo",,Block..|
00002ce0  0c 33 e7 20 28 28 42 6c  6f 63 6b 21 38 20 80 20  |.3. ((Block!8 . |
00002cf0  31 29 3d 31 29 20 80 20  28 ac 20 43 6c 6f 73 65  |1)=1) . (. Close|
00002d00  4d 65 6e 75 29 20 8c 20  f2 4d 61 6b 65 4d 65 6e  |Menu) . .MakeMen|
00002d10  75 0d 0d 16 05 e1 0d 0d  20 05 3a 0d 0d 2a 4f f4  |u....... .:..*O.|
00002d20  20 2d 2d 2d 2d 2d 2d 2d  2d 2d 2d 2d 2d 2d 2d 2d  | ---------------|
00002d30  2d 2d 2d 2d 2d 2d 2d 2d  2d 2d 2d 2d 2d 2d 2d 2d  |----------------|
*
00002d60  2d 2d 2d 2d 2d 2d 2d 2d  2d 2d 0d 0d 34 13 f4 20  |----------..4.. |
00002d70  4d 65 6e 75 20 72 6f 75  74 69 6e 65 73 0d 0d 3e  |Menu routines..>|
00002d80  4f f4 20 2d 2d 2d 2d 2d  2d 2d 2d 2d 2d 2d 2d 2d  |O. -------------|
00002d90  2d 2d 2d 2d 2d 2d 2d 2d  2d 2d 2d 2d 2d 2d 2d 2d  |----------------|
*
00002dc0  2d 2d 2d 2d 2d 2d 2d 2d  2d 2d 2d 2d 0d 0d 48 05  |------------..H.|
00002dd0  3a 0d 0d 52 11 dd 20 f2  42 75 69 6c 64 4d 65 6e  |:..R.. .BuildMen|
00002de0  75 73 0d 0d 5c 49 f4 20  54 68 69 73 20 70 72 6f  |us..\I. This pro|
00002df0  63 65 64 75 72 65 20 73  68 6f 75 6c 64 20 6f 6e  |cedure should on|
00002e00  6c 79 20 62 65 20 76 69  73 69 74 65 64 20 6f 6e  |ly be visited on|
00002e10  63 65 2c 20 73 69 6e 63  65 20 69 74 20 63 6f 6e  |ce, since it con|
00002e20  74 61 69 6e 73 20 44 49  4d 73 2e 0d 0d 66 07 20  |tains DIMs...f. |
00002e30  20 3a 0d 0d 70 4f f4 20  49 6e 20 74 68 65 20 6d  | :..pO. In the m|
00002e40  65 6e 75 20 74 69 74 6c  65 20 73 74 72 69 6e 67  |enu title string|
00002e50  73 20 62 65 6c 6f 77 2c  20 69 66 20 61 20 22 7c  |s below, if a "||
00002e60  22 20 63 68 61 72 61 63  74 65 72 20 69 73 20 70  |" character is p|
00002e70  72 65 73 65 6e 74 20 69  74 20 77 69 6c 6c 20 62  |resent it will b|
00002e80  65 0d 0d 7a 4f f4 20 72  65 70 6c 61 63 65 64 20  |e..zO. replaced |
00002e90  62 79 20 61 20 73 70 61  63 65 20 75 6e 64 65 72  |by a space under|
00002ea0  20 52 49 53 43 20 4f 53  20 33 2e 31 20 28 6f 72  | RISC OS 3.1 (or|
00002eb0  20 67 72 65 61 74 65 72  29 2c 20 6f 72 20 77 69  | greater), or wi|
00002ec0  6c 6c 20 74 65 72 6d 69  6e 61 74 65 20 74 68 65  |ll terminate the|
00002ed0  0d 0d 84 4f f4 20 73 74  72 69 6e 67 20 75 6e 64  |...O. string und|
00002ee0  65 72 20 65 61 72 6c 69  65 72 20 76 65 72 73 69  |er earlier versi|
00002ef0  6f 6e 73 20 6f 66 20 74  68 65 20 77 69 6d 70 2e  |ons of the wimp.|
00002f00  20 54 68 69 73 20 61 6c  6c 6f 77 73 20 74 68 65  | This allows the|
00002f10  20 6e 65 77 20 69 6e 64  69 72 65 63 74 65 64 0d  | new indirected.|
00002f20  0d 8e 46 f4 20 6d 65 6e  75 20 74 69 74 6c 65 73  |..F. menu titles|
00002f30  20 74 6f 20 62 65 20 75  73 65 64 20 28 77 68 69  | to be used (whi|
00002f40  63 68 20 77 65 72 65 20  69 6e 74 72 6f 64 75 63  |ch were introduc|
00002f50  65 64 20 77 69 74 68 20  52 49 53 43 20 4f 53 20  |ed with RISC OS |
00002f60  33 2e 31 29 2e 0d 0d 98  07 20 20 3a 0d 0d a2 23  |3.1).....  :...#|
00002f70  49 6e 64 69 72 65 63 74  4d 65 6e 75 54 65 78 74  |IndirectMenuText|
00002f80  4f 66 66 73 65 74 50 6f  69 6e 74 65 72 3d 30 0d  |OffsetPointer=0.|
00002f90  0d ac 4e f4 20 54 68 69  73 20 70 6f 69 6e 74 73  |..N. This points|
00002fa0  20 74 6f 20 61 20 70 6f  6f 6c 20 74 6f 20 62 65  | to a pool to be|
00002fb0  20 75 73 65 64 20 62 79  20 61 6c 6c 20 6d 65 6e  | used by all men|
00002fc0  75 73 20 66 6f 72 20 74  68 65 69 72 20 69 6e 64  |us for their ind|
00002fd0  69 72 65 63 74 65 64 20  74 65 78 74 2e 0d 0d b6  |irected text....|
00002fe0  07 20 20 3a 0d 0d c0 0d  4d 25 3d 49 42 4d 65 6e  |.  :....M%=IBMen|
00002ff0  75 0d 0d ca 3d e7 20 77  69 6d 70 3e 3d 33 31 30  |u...=. wimp>=310|
00003000  20 8c 20 54 69 74 6c 65  24 3d 22 57 69 6e 64 6f  | . Title$="Windo|
00003010  77 20 46 6c 61 67 73 22  3a 8b 20 54 69 74 6c 65  |w Flags":. Title|
00003020  24 3d 22 57 69 6e 64 20  46 6c 61 67 73 22 0d 0d  |$="Wind Flags"..|
00003030  d4 35 de 20 49 42 4d 65  6e 75 54 69 74 6c 65 20  |.5. IBMenuTitle |
00003040  a9 28 54 69 74 6c 65 24  29 2b 31 3a 24 49 42 4d  |.(Title$)+1:$IBM|
00003050  65 6e 75 54 69 74 6c 65  3d 54 69 74 6c 65 24 2b  |enuTitle=Title$+|
00003060  bd 31 33 0d 0d de 1a f2  4d 65 6e 75 49 6e 69 74  |.13.....MenuInit|
00003070  28 49 42 4d 65 6e 75 54  69 74 6c 65 29 0d 0d e8  |(IBMenuTitle)...|
00003080  1c f2 4d 65 6e 75 49 74  65 6d 28 22 49 6e 66 6f  |..MenuItem("Info|
00003090  22 2c 30 2c 49 6e 66 6f  29 0d 0d f2 1c f2 4d 65  |",0,Info).....Me|
000030a0  6e 75 49 74 65 6d 28 22  51 75 69 74 22 2c 31 32  |nuItem("Quit",12|
000030b0  38 2c 2d 31 29 0d 0d fc  07 20 20 3a 0d 0e 06 0f  |8,-1)....  :....|
000030c0  4d 25 3d 4d 61 69 6e 4d  65 6e 75 0d 0e 10 3d e7  |M%=MainMenu...=.|
000030d0  20 77 69 6d 70 3e 3d 33  31 30 20 8c 20 54 69 74  | wimp>=310 . Tit|
000030e0  6c 65 24 3d 22 57 69 6e  64 6f 77 20 46 6c 61 67  |le$="Window Flag|
000030f0  73 22 3a 8b 20 54 69 74  6c 65 24 3d 22 57 69 6e  |s":. Title$="Win|
00003100  64 20 46 6c 61 67 73 22  0d 0e 1a 39 de 20 4d 61  |d Flags"...9. Ma|
00003110  69 6e 4d 65 6e 75 54 69  74 6c 65 20 a9 28 54 69  |inMenuTitle .(Ti|
00003120  74 6c 65 24 29 2b 32 3a  24 4d 61 69 6e 4d 65 6e  |tle$)+2:$MainMen|
00003130  75 54 69 74 6c 65 3d 54  69 74 6c 65 24 2b bd 31  |uTitle=Title$+.1|
00003140  33 0d 0e 24 1c f2 4d 65  6e 75 49 6e 69 74 28 4d  |3..$..MenuInit(M|
00003150  61 69 6e 4d 65 6e 75 54  69 74 6c 65 29 0d 0e 2e  |ainMenuTitle)...|
00003160  1c f2 4d 65 6e 75 49 74  65 6d 28 22 49 6e 66 6f  |..MenuItem("Info|
00003170  22 2c 32 2c 49 6e 66 6f  29 0d 0e 38 24 f2 4d 65  |",2,Info)..8$.Me|
00003180  6e 75 49 74 65 6d 28 22  53 70 79 20 6f 6e 20 77  |nuItem("Spy on w|
00003190  69 6e 64 6f 77 73 22 2c  30 2c 2d 31 29 0d 0e 42  |indows",0,-1)..B|
000031a0  26 f2 4d 65 6e 75 49 74  65 6d 28 22 57 69 6e 64  |&.MenuItem("Wind|
000031b0  6f 77 20 70 6f 73 69 74  69 6f 6e 22 2c 32 2c 4c  |ow position",2,L|
000031c0  6f 63 29 0d 0e 4c 25 f2  4d 65 6e 75 49 74 65 6d  |oc)..L%.MenuItem|
000031d0  28 22 53 61 76 65 20 73  65 74 74 69 6e 67 73 22  |("Save settings"|
000031e0  2c 31 32 38 2c 2d 31 29  0d 0e 56 05 e1 0d 0e 60  |,128,-1)..V....`|
000031f0  05 3a 0d 0e 6a 0f dd 20  f2 4d 61 6b 65 4d 65 6e  |.:..j.. .MakeMen|
00003200  75 0d 0e 74 17 e7 20 4d  65 6e 75 58 3c 30 20 8c  |u..t.. MenuX<0 .|
00003210  20 4d 65 6e 75 58 3d 30  0d 0e 7e 2a e7 20 4d 65  | MenuX=0..~*. Me|
00003220  6e 75 59 3c 31 38 34 20  8c 20 4d 65 6e 75 59 3d  |nuY<184 . MenuY=|
00003230  31 38 34 3a f4 20 66 6f  72 20 69 63 6f 6e 20 62  |184:. for icon b|
00003240  61 72 0d 0e 88 37 c8 99  20 22 57 69 6d 70 5f 43  |ar...7.. "Wimp_C|
00003250  72 65 61 74 65 4d 65 6e  75 22 2c 2c 4d 25 2c 4d  |reateMenu",,M%,M|
00003260  65 6e 75 58 2d 28 28 33  36 2b 4d 25 21 31 36 29  |enuX-((36+M%!16)|
00003270  2f 32 29 2c 4d 65 6e 75  59 0d 0e 92 05 e1 0d 0e  |/2),MenuY.......|
00003280  9c 05 3a 0d 0e a6 1a dd  20 f2 4d 65 6e 75 49 6e  |..:..... .MenuIn|
00003290  69 74 28 4d 65 6e 75 54  69 74 6c 65 29 0d 0e b0  |it(MenuTitle)...|
000032a0  11 e7 20 77 69 6d 70 3e  3d 33 31 30 20 8c 0d 0e  |.. wimp>=310 ...|
000032b0  ba 37 20 20 41 3d a7 24  4d 65 6e 75 54 69 74 6c  |.7  A=.$MenuTitl|
000032c0  65 2c 22 7c 22 29 3a e7  20 41 3c 3e 30 20 8c 20  |e,"|"):. A<>0 . |
000032d0  3f 28 4d 65 6e 75 54 69  74 6c 65 2b 28 41 2d 31  |?(MenuTitle+(A-1|
000032e0  29 29 3d 33 32 0d 0e c4  1b 20 20 4d 65 6e 75 4d  |))=32....  MenuM|
000032f0  61 78 3d a9 28 24 4d 65  6e 75 54 69 74 6c 65 29  |ax=.($MenuTitle)|
00003300  0d 0e ce 14 20 20 4d 25  21 30 3d 4d 65 6e 75 54  |....  M%!0=MenuT|
00003310  69 74 6c 65 0d 0e d8 05  cc 0d 0e e2 37 20 20 41  |itle........7  A|
00003320  3d a7 24 4d 65 6e 75 54  69 74 6c 65 2c 22 7c 22  |=.$MenuTitle,"|"|
00003330  29 3a e7 20 41 3c 3e 30  20 8c 20 3f 28 4d 65 6e  |):. A<>0 . ?(Men|
00003340  75 54 69 74 6c 65 2b 28  41 2d 31 29 29 3d 31 33  |uTitle+(A-1))=13|
00003350  0d 0e ec 20 20 20 4d 65  6e 75 4d 61 78 3d a9 28  |...   MenuMax=.(|
00003360  c0 24 4d 65 6e 75 54 69  74 6c 65 2c 31 32 29 29  |.$MenuTitle,12))|
00003370  0d 0e f6 19 20 20 24 4d  25 3d c0 24 4d 65 6e 75  |....  $M%=.$Menu|
00003380  54 69 74 6c 65 2c 31 32  29 0d 0f 00 05 cd 0d 0f  |Title,12).......|
00003390  0a 24 4d 25 3f 31 32 3d  37 3a 4d 25 3f 31 33 3d  |.$M%?12=7:M%?13=|
000033a0  32 3a 4d 25 3f 31 34 3d  31 31 3a 4d 25 3f 31 35  |2:M%?14=11:M%?15|
000033b0  3d 30 0d 0f 14 14 4d 25  21 31 36 3d 4d 65 6e 75  |=0....M%!16=Menu|
000033c0  4d 61 78 2a 31 36 0d 0f  1e 14 4d 25 21 32 30 3d  |Max*16....M%!20=|
000033d0  34 34 3a 4d 25 21 32 34  3d 30 0d 0f 28 0c 50 25  |44:M%!24=0..(.P%|
000033e0  3d 4d 25 2b 32 38 0d 0f  32 05 e1 0d 0f 3c 05 3a  |=M%+28..2....<.:|
000033f0  0d 0f 46 21 dd 20 f2 4d  65 6e 75 49 74 65 6d 28  |..F!. .MenuItem(|
00003400  54 65 78 74 24 2c 46 6c  61 67 73 2c 4c 69 6e 6b  |Text$,Flags,Link|
00003410  29 0d 0f 50 4b f4 20 46  6c 61 67 73 3a 20 31 2d  |)..PK. Flags: 1-|
00003420  74 69 63 6b 65 64 2c 20  32 2d 64 61 73 68 65 64  |ticked, 2-dashed|
00003430  20 6c 69 6e 65 2c 20 34  2d 77 72 69 74 65 61 62  | line, 4-writeab|
00003440  6c 65 2c 20 38 2d 6d 65  73 73 61 67 65 2c 20 31  |le, 8-message, 1|
00003450  32 38 2d 6c 61 73 74 20  69 74 65 6d 0d 0f 5a 31  |28-last item..Z1|
00003460  f4 20 4c 69 6e 6b 3a 20  6d 65 6e 75 20 6f 72 20  |. Link: menu or |
00003470  77 69 6e 64 6f 77 20 68  61 6e 64 6c 65 20 66 6f  |window handle fo|
00003480  72 20 73 75 62 2d 70 6f  69 6e 74 65 72 0d 0f 64  |r sub-pointer..d|
00003490  18 50 25 21 30 3d 46 6c  61 67 73 3a 50 25 21 34  |.P%!0=Flags:P%!4|
000034a0  3d 4c 69 6e 6b 0d 0f 6e  14 e7 20 a9 28 54 65 78  |=Link..n.. .(Tex|
000034b0  74 24 29 3c 3d 31 32 20  8c 0d 0f 78 25 20 20 50  |t$)<=12 ...x%  P|
000034c0  25 21 38 3d 26 30 37 30  30 33 30 32 31 3a f4 20  |%!8=&07003021:. |
000034d0  4e 6f 74 20 69 6e 64 69  72 65 63 74 65 64 0d 0f  |Not indirected..|
000034e0  82 14 20 20 24 28 50 25  2b 31 32 29 3d 54 65 78  |..  $(P%+12)=Tex|
000034f0  74 24 0d 0f 8c 05 cc 0d  0f 96 21 20 20 50 25 21  |t$........!  P%!|
00003500  38 3d 26 30 37 30 30 33  31 32 31 3a f4 20 49 6e  |8=&07003121:. In|
00003510  64 69 72 65 63 74 65 64  0d 0f a0 3a 20 20 50 25  |directed...:  P%|
00003520  21 31 32 3d 49 6e 64 69  72 65 63 74 4d 65 6e 75  |!12=IndirectMenu|
00003530  54 65 78 74 2b 49 6e 64  69 72 65 63 74 4d 65 6e  |Text+IndirectMen|
00003540  75 54 65 78 74 4f 66 66  73 65 74 50 6f 69 6e 74  |uTextOffsetPoint|
00003550  65 72 0d 0f aa 15 20 20  50 25 21 31 36 3d 30 3a  |er....  P%!16=0:|
00003560  50 25 21 32 30 3d 30 0d  0f b4 41 20 20 24 28 49  |P%!20=0...A  $(I|
00003570  6e 64 69 72 65 63 74 4d  65 6e 75 54 65 78 74 2b  |ndirectMenuText+|
00003580  49 6e 64 69 72 65 63 74  4d 65 6e 75 54 65 78 74  |IndirectMenuText|
00003590  4f 66 66 73 65 74 50 6f  69 6e 74 65 72 29 3d 54  |OffsetPointer)=T|
000035a0  65 78 74 24 2b bd 31 33  0d 0f be 2f 20 20 49 6e  |ext$+.13.../  In|
000035b0  64 69 72 65 63 74 4d 65  6e 75 54 65 78 74 4f 66  |directMenuTextOf|
000035c0  66 73 65 74 50 6f 69 6e  74 65 72 2b 3d a9 28 54  |fsetPointer+=.(T|
000035d0  65 78 74 24 29 2b 31 0d  0f c8 82 20 20 e7 20 49  |ext$)+1....  . I|
000035e0  6e 64 69 72 65 63 74 4d  65 6e 75 54 65 78 74 4f  |ndirectMenuTextO|
000035f0  66 66 73 65 74 50 6f 69  6e 74 65 72 3e 49 6e 64  |ffsetPointer>Ind|
00003600  4d 65 6e 75 4d 61 78 20  8c 20 85 20 30 2c 22 54  |MenuMax . . 0,"T|
00003610  68 65 20 69 6e 64 69 72  65 63 74 20 6d 65 6e 75  |he indirect menu|
00003620  20 74 65 78 74 20 62 75  66 66 65 72 20 68 61 73  | text buffer has|
00003630  20 6f 76 65 72 66 6c 6f  77 65 64 2e 20 50 6c 65  | overflowed. Ple|
00003640  61 73 65 20 61 6c 6c 6f  63 61 74 65 20 6d 6f 72  |ase allocate mor|
00003650  65 20 73 70 61 63 65 2e  22 0d 0f d2 05 cd 0d 0f  |e space.".......|
00003660  dc 0a 50 25 2b 3d 32 34  0d 0f e6 3e e7 20 4d 65  |..P%+=24...>. Me|
00003670  6e 75 4d 61 78 3c a9 28  54 65 78 74 24 29 20 8c  |nuMax<.(Text$) .|
00003680  20 4d 65 6e 75 4d 61 78  3d a9 28 54 65 78 74 24  | MenuMax=.(Text$|
00003690  29 3a 4d 25 21 31 36 3d  28 4d 65 6e 75 4d 61 78  |):M%!16=(MenuMax|
000036a0  2b 31 29 2a 31 36 0d 0f  f0 41 e7 20 28 46 6c 61  |+1)*16...A. (Fla|
000036b0  67 73 3d 31 32 38 29 20  80 20 28 77 69 6d 70 3e  |gs=128) . (wimp>|
000036c0  3d 33 31 30 29 20 8c 20  4d 25 21 32 38 3d 28 28  |=310) . M%!28=((|
000036d0  28 4d 25 21 32 38 29 20  80 20 ac 20 32 35 36 29  |(M%!28) . . 256)|
000036e0  20 82 20 32 35 36 29 0d  0f fa 37 20 20 f4 20 49  | . 256)...7  . I|
000036f0  6e 64 69 72 65 63 74 65  64 20 6d 65 6e 75 20 74  |ndirected menu t|
00003700  69 74 6c 65 73 20 66 6f  72 20 52 49 53 43 20 4f  |itles for RISC O|
00003710  53 20 33 2e 31 20 75 70  77 61 72 64 73 2e 0d 10  |S 3.1 upwards...|
00003720  04 05 e1 0d 10 0e 05 3a  0d 10 18 4f f4 20 2d 2d  |.......:...O. --|
00003730  2d 2d 2d 2d 2d 2d 2d 2d  2d 2d 2d 2d 2d 2d 2d 2d  |----------------|
*
00003770  2d 2d 2d 2d 2d 2d 2d 0d  10 22 29 f4 20 52 65 73  |-------.."). Res|
00003780  70 6f 6e 73 65 73 20 74  6f 20 69 6e 63 6f 6d 69  |ponses to incomi|
00003790  6e 67 20 77 69 6d 70 20  6d 65 73 73 61 67 65 73  |ng wimp messages|
000037a0  0d 10 2c 4f f4 20 2d 2d  2d 2d 2d 2d 2d 2d 2d 2d  |..,O. ----------|
000037b0  2d 2d 2d 2d 2d 2d 2d 2d  2d 2d 2d 2d 2d 2d 2d 2d  |----------------|
*
000037e0  2d 2d 2d 2d 2d 2d 2d 2d  2d 2d 2d 2d 2d 2d 2d 0d  |---------------.|
000037f0  10 36 05 3a 0d 10 40 18  dd 20 f2 53 61 76 65 44  |.6.:..@.. .SaveD|
00003800  65 73 6b 74 6f 70 28 46  69 6c 65 29 0d 10 4a 07  |esktop(File)..J.|
00003810  ea 20 85 0d 10 54 47 ee  20 85 20 ea 20 42 6c 6f  |. ...TG. . . Blo|
00003820  63 6b 21 31 32 3d 42 6c  6f 63 6b 21 38 3a c8 99  |ck!12=Block!8:..|
00003830  20 22 57 69 6d 70 5f 53  65 6e 64 4d 65 73 73 61  | "Wimp_SendMessa|
00003840  67 65 22 2c 31 39 2c 42  6c 6f 63 6b 2c 42 6c 6f  |ge",19,Block,Blo|
00003850  63 6b 21 34 3a f7 20 85  3a e1 0d 10 5e 49 f4 20  |ck!4:. .:...^I. |
00003860  54 68 65 20 61 62 6f 76  65 20 6c 69 6e 65 20 61  |The above line a|
00003870  63 6b 6e 6f 77 6c 65 64  67 65 73 20 74 68 65 20  |cknowledges the |
00003880  6d 65 73 73 61 67 65 20  69 66 20 61 6e 20 65 72  |message if an er|
00003890  72 6f 72 20 6f 63 63 75  72 73 2c 20 74 68 65 72  |ror occurs, ther|
000038a0  65 62 79 0d 10 68 20 f4  20 61 62 6f 72 74 69 6e  |eby..h . abortin|
000038b0  67 20 74 68 65 20 64 65  73 6b 74 6f 70 20 73 61  |g the desktop sa|
000038c0  76 65 2e 0d 10 72 2b d5  23 46 69 6c 65 2c 22 52  |ve...r+.#File,"R|
000038d0  75 6e 20 22 2b 4f 75 72  50 61 74 68 4e 61 6d 65  |un "+OurPathName|
000038e0  24 2b 4f 75 72 46 69 6c  65 4e 61 6d 65 24 0d 10  |$+OurFileName$..|
000038f0  7c 05 e1 0d 10 86 05 3a  0d 10 90 0b dd 20 f2 48  ||......:..... .H|
00003900  65 6c 70 0d 10 9a 34 42  6c 6f 63 6b 21 31 32 3d  |elp...4Block!12=|
00003910  42 6c 6f 63 6b 21 38 3a  42 6c 6f 63 6b 21 31 36  |Block!8:Block!16|
00003920  3d 26 35 30 33 3a 48 65  6c 70 49 6e 66 6f 3d 42  |=&503:HelpInfo=B|
00003930  6c 6f 63 6b 2b 32 30 0d  10 a4 07 20 20 3a 0d 10  |lock+20....  :..|
00003940  ae 30 f4 20 42 6c 6f 63  6b 21 33 32 20 67 69 76  |.0. Block!32 giv|
00003950  65 73 20 77 69 6e 64 6f  77 2c 20 42 6c 6f 63 6b  |es window, Block|
00003960  21 33 36 20 67 69 76 65  73 20 69 63 6f 6e 0d 10  |!36 gives icon..|
00003970  b8 07 20 20 3a 0d 10 c2  11 c8 8e 20 42 6c 6f 63  |..  :...... Bloc|
00003980  6b 21 33 32 20 ca 0d 10  cc 32 20 20 c9 20 2d 32  |k!32 ....2  . -2|
00003990  3a f2 53 65 6e 64 28 22  54 68 69 73 20 69 73 20  |:.Send("This is |
000039a0  74 68 65 20 57 69 6e 64  6f 77 20 46 6c 61 67 73  |the Window Flags|
000039b0  20 69 63 6f 6e 2e 22 29  0d 10 d6 3d 20 20 20 20  | icon.")...=    |
000039c0  20 20 20 20 20 20 f2 53  65 6e 64 28 22 43 6c 69  |      .Send("Cli|
000039d0  63 6b 20 4d 45 4e 55 20  66 6f 72 20 69 6e 66 6f  |ck MENU for info|
000039e0  72 6d 61 74 69 6f 6e 20  6f 72 20 74 6f 20 71 75  |rmation or to qu|
000039f0  69 74 2e 22 29 0d 10 e0  44 20 20 20 20 20 20 20  |it.")...D       |
00003a00  20 20 20 f2 53 65 6e 64  28 22 43 6c 69 63 6b 20  |   .Send("Click |
00003a10  53 45 4c 45 43 54 20 74  6f 20 6f 70 65 6e 20 74  |SELECT to open t|
00003a20  68 65 20 57 69 6e 64 6f  77 20 46 6c 61 67 73 20  |he Window Flags |
00003a30  77 69 6e 64 6f 77 2e 22  29 0d 10 ea 10 20 20 c9  |window.")....  .|
00003a40  20 53 70 79 43 61 6c 63  3a 0d 10 f4 15 20 20 20  | SpyCalc:....   |
00003a50  20 c8 8e 20 42 6c 6f 63  6b 21 33 36 20 ca 0d 10  | .. Block!36 ...|
00003a60  fe 5f 20 20 20 20 20 20  c9 20 30 2c 31 2c 32 2c  |._      . 0,1,2,|
00003a70  33 2c 34 2c 35 3a f2 53  65 6e 64 28 22 54 68 69  |3,4,5:.Send("Thi|
00003a80  73 20 61 72 65 61 20 73  68 6f 77 73 20 74 68 65  |s area shows the|
00003a90  20 77 69 6e 64 6f 77 20  61 6e 64 20 69 63 6f 6e  | window and icon|
00003aa0  20 68 61 6e 64 6c 65 73  20 75 6e 64 65 72 20 74  | handles under t|
00003ab0  68 65 20 70 6f 69 6e 74  65 72 2e 22 29 0d 11 08  |he pointer.")...|
00003ac0  6b 20 20 20 20 20 20 c9  20 36 2c 37 2c 38 2c 39  |k      . 6,7,8,9|
00003ad0  2c 31 30 2c 31 31 3a f2  53 65 6e 64 28 22 54 68  |,10,11:.Send("Th|
00003ae0  69 73 20 61 72 65 61 20  73 68 6f 77 73 20 74 68  |is area shows th|
00003af0  65 20 6d 69 6e 69 6d 75  6d 20 63 6f 6f 72 64 69  |e minimum coordi|
00003b00  6e 61 74 65 73 20 6f 66  20 74 68 65 20 77 69 6e  |nates of the win|
00003b10  64 6f 77 20 75 6e 64 65  72 20 74 68 65 20 70 6f  |dow under the po|
00003b20  69 6e 74 65 72 2e 22 29  0d 11 12 6f 20 20 20 20  |inter.")...o    |
00003b30  20 20 c9 20 31 32 2c 31  33 2c 31 34 2c 31 35 2c  |  . 12,13,14,15,|
00003b40  31 36 2c 31 37 3a f2 53  65 6e 64 28 22 54 68 69  |16,17:.Send("Thi|
00003b50  73 20 61 72 65 61 20 73  68 6f 77 73 20 74 68 65  |s area shows the|
00003b60  20 6d 61 78 69 6d 75 6d  20 63 6f 6f 72 64 69 6e  | maximum coordin|
00003b70  61 74 65 73 20 6f 66 20  74 68 65 20 77 69 6e 64  |ates of the wind|
00003b80  6f 77 20 75 6e 64 65 72  20 74 68 65 20 70 6f 69  |ow under the poi|
00003b90  6e 74 65 72 2e 22 29 0d  11 1c 6f 20 20 20 20 20  |nter.")...o     |
00003ba0  20 c9 20 31 38 2c 31 39  2c 32 30 2c 32 31 2c 32  | . 18,19,20,21,2|
00003bb0  32 2c 32 33 3a f2 53 65  6e 64 28 22 54 68 69 73  |2,23:.Send("This|
00003bc0  20 61 72 65 61 20 73 68  6f 77 73 20 68 6f 77 20  | area shows how |
00003bd0  6d 75 63 68 20 74 68 65  20 77 69 6e 64 6f 77 20  |much the window |
00003be0  75 6e 64 65 72 20 74 68  65 20 70 6f 69 6e 74 65  |under the pointe|
00003bf0  72 20 68 61 73 20 62 65  65 6e 20 73 63 72 6f 6c  |r has been scrol|
00003c00  6c 65 64 2e 22 29 0d 11  26 1f 20 20 20 20 20 20  |led.")..&.      |
00003c10  c9 20 32 34 2c 32 35 2c  34 37 3a e7 20 53 70 79  |. 24,25,47:. Spy|
00003c20  69 6e 67 20 8c 0d 11 30  69 20 20 20 20 20 20 20  |ing ...0i       |
00003c30  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 f2  |               .|
00003c40  53 65 6e 64 28 22 54 68  69 73 20 61 72 65 61 20  |Send("This area |
00003c50  73 68 6f 77 73 20 74 68  65 20 69 6e 64 69 76 69  |shows the indivi|
00003c60  64 75 61 6c 20 66 6c 61  67 73 20 66 6f 72 20 74  |dual flags for t|
00003c70  68 65 20 77 69 6e 64 6f  77 20 75 6e 64 65 72 20  |he window under |
00003c80  74 68 65 20 70 6f 69 6e  74 65 72 2e 22 29 0d 11  |the pointer.")..|
00003c90  3a 19 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |:.              |
00003ca0  20 20 20 20 20 20 cc 0d  11 44 a8 20 20 20 20 20  |      ...D.     |
00003cb0  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |                |
00003cc0  20 f2 53 65 6e 64 28 22  43 6c 69 63 6b 20 74 68  | .Send("Click th|
00003cd0  65 20 73 77 69 74 63 68  65 73 20 69 6e 20 74 68  |e switches in th|
00003ce0  69 73 20 61 72 65 61 20  74 6f 20 77 6f 72 6b 20  |is area to work |
00003cf0  6f 75 74 20 74 68 65 20  77 69 6e 64 6f 77 20 66  |out the window f|
00003d00  6c 61 67 73 2c 20 6f 72  20 65 6e 74 65 72 20 61  |lags, or enter a|
00003d10  20 76 61 6c 75 65 20 69  6e 20 74 68 65 20 62 6f  | value in the bo|
00003d20  78 20 61 6e 64 20 70 72  65 73 73 20 52 45 54 55  |x and press RETU|
00003d30  52 4e 20 74 6f 20 66 69  6e 64 20 6f 75 74 20 77  |RN to find out w|
00003d40  68 61 74 20 69 74 20 6d  65 61 6e 73 2e 22 29 0d  |hat it means.").|
00003d50  11 4e 19 20 20 20 20 20  20 20 20 20 20 20 20 20  |.N.             |
00003d60  20 20 20 20 20 20 20 cd  0d 11 58 4e 20 20 20 20  |       ...XN    |
00003d70  20 20 c9 20 32 36 3a f2  53 65 6e 64 28 22 54 68  |  . 26:.Send("Th|
00003d80  69 73 20 73 77 69 74 63  68 20 69 73 20 73 65 6c  |is switch is sel|
00003d90  65 63 74 65 64 20 69 66  20 74 68 65 20 77 69 6e  |ected if the win|
00003da0  64 6f 77 20 68 61 73 20  61 20 42 61 63 6b 20 69  |dow has a Back i|
00003db0  63 6f 6e 2e 22 29 0d 11  62 4f 20 20 20 20 20 20  |con.")..bO      |
00003dc0  c9 20 32 37 3a f2 53 65  6e 64 28 22 54 68 69 73  |. 27:.Send("This|
00003dd0  20 73 77 69 74 63 68 20  69 73 20 73 65 6c 65 63  | switch is selec|
00003de0  74 65 64 20 69 66 20 74  68 65 20 77 69 6e 64 6f  |ted if the windo|
00003df0  77 20 68 61 73 20 61 20  43 6c 6f 73 65 20 69 63  |w has a Close ic|
00003e00  6f 6e 2e 22 29 0d 11 6c  53 20 20 20 20 20 20 c9  |on.")..lS      .|
00003e10  20 32 38 3a f2 53 65 6e  64 28 22 54 68 69 73 20  | 28:.Send("This |
00003e20  73 77 69 74 63 68 20 69  73 20 73 65 6c 65 63 74  |switch is select|
00003e30  65 64 20 69 66 20 74 68  65 20 77 69 6e 64 6f 77  |ed if the window|
00003e40  20 68 61 73 20 61 20 54  69 74 6c 65 20 42 61 72  | has a Title Bar|
00003e50  20 69 63 6f 6e 2e 22 29  0d 11 76 55 20 20 20 20  | icon.")..vU    |
00003e60  20 20 c9 20 32 39 3a f2  53 65 6e 64 28 22 54 68  |  . 29:.Send("Th|
00003e70  69 73 20 73 77 69 74 63  68 20 69 73 20 73 65 6c  |is switch is sel|
00003e80  65 63 74 65 64 20 69 66  20 74 68 65 20 77 69 6e  |ected if the win|
00003e90  64 6f 77 20 68 61 73 20  61 20 54 6f 67 67 6c 65  |dow has a Toggle|
00003ea0  20 53 69 7a 65 20 69 63  6f 6e 2e 22 29 0d 11 80  | Size icon.")...|
00003eb0  58 20 20 20 20 20 20 c9  20 33 30 3a f2 53 65 6e  |X      . 30:.Sen|
00003ec0  64 28 22 54 68 69 73 20  73 77 69 74 63 68 20 69  |d("This switch i|
00003ed0  73 20 73 65 6c 65 63 74  65 64 20 69 66 20 74 68  |s selected if th|
00003ee0  65 20 77 69 6e 64 6f 77  20 68 61 73 20 61 20 76  |e window has a v|
00003ef0  65 72 74 69 63 61 6c 20  73 63 72 6f 6c 6c 20 62  |ertical scroll b|
00003f00  61 72 2e 22 29 0d 11 8a  4e 20 20 20 20 20 20 c9  |ar.")...N      .|
00003f10  20 33 31 3a f2 53 65 6e  64 28 22 54 68 69 73 20  | 31:.Send("This |
00003f20  73 77 69 74 63 68 20 69  73 20 73 65 6c 65 63 74  |switch is select|
00003f30  65 64 20 69 66 20 74 68  65 20 77 69 6e 64 6f 77  |ed if the window|
00003f40  20 68 61 73 20 61 20 53  69 7a 65 20 69 63 6f 6e  | has a Size icon|
00003f50  2e 22 29 0d 11 94 5a 20  20 20 20 20 20 c9 20 33  |.")...Z      . 3|
00003f60  32 3a f2 53 65 6e 64 28  22 54 68 69 73 20 73 77  |2:.Send("This sw|
00003f70  69 74 63 68 20 69 73 20  73 65 6c 65 63 74 65 64  |itch is selected|
00003f80  20 69 66 20 74 68 65 20  77 69 6e 64 6f 77 20 68  | if the window h|
00003f90  61 73 20 61 20 68 6f 72  69 7a 6f 6e 74 61 6c 20  |as a horizontal |
00003fa0  73 63 72 6f 6c 6c 20 62  61 72 2e 22 29 0d 11 9e  |scroll bar.")...|
00003fb0  4b 20 20 20 20 20 20 c9  20 33 33 3a f2 53 65 6e  |K      . 33:.Sen|
00003fc0  64 28 22 54 68 69 73 20  73 77 69 74 63 68 20 69  |d("This switch i|
00003fd0  73 20 73 65 6c 65 63 74  65 64 20 69 66 20 74 68  |s selected if th|
00003fe0  65 20 77 69 6e 64 6f 77  20 63 61 6e 20 62 65 20  |e window can be |
00003ff0  6d 6f 76 65 64 2e 22 29  0d 11 a8 71 20 20 20 20  |moved.")...q    |
00004000  20 20 c9 20 33 34 3a f2  53 65 6e 64 28 22 54 68  |  . 34:.Send("Th|
00004010  69 73 20 73 77 69 74 63  68 20 69 73 20 73 65 6c  |is switch is sel|
00004020  65 63 74 65 64 20 69 66  20 74 68 65 20 77 69 6e  |ected if the win|
00004030  64 6f 77 20 63 61 6e 20  62 65 20 75 70 64 61 74  |dow can be updat|
00004040  65 64 20 61 75 74 6f 6d  61 74 69 63 61 6c 6c 79  |ed automatically|
00004050  20 62 79 20 74 68 65 20  77 69 6e 64 6f 77 20 6d  | by the window m|
00004060  61 6e 61 67 65 72 2e 22  29 0d 11 b2 48 20 20 20  |anager.")...H   |
00004070  20 20 20 c9 20 33 35 3a  f2 53 65 6e 64 28 22 54  |   . 35:.Send("T|
00004080  68 69 73 20 73 77 69 74  63 68 20 69 73 20 73 65  |his switch is se|
00004090  6c 65 63 74 65 64 20 69  66 20 74 68 65 20 77 69  |lected if the wi|
000040a0  6e 64 6f 77 20 69 73 20  61 20 70 61 6e 65 2e 22  |ndow is a pane."|
000040b0  29 0d 11 bc 68 20 20 20  20 20 20 c9 20 33 36 3a  |)...h      . 36:|
000040c0  f2 53 65 6e 64 28 22 54  68 69 73 20 73 77 69 74  |.Send("This swit|
000040d0  63 68 20 69 73 20 73 65  6c 65 63 74 65 64 20 69  |ch is selected i|
000040e0  66 20 74 68 65 20 77 69  6e 64 6f 77 20 63 61 6e  |f the window can|
000040f0  20 6d 6f 76 65 20 62 65  79 6f 6e 64 20 74 68 65  | move beyond the|
00004100  20 6c 69 6d 69 74 73 20  6f 66 20 74 68 65 20 64  | limits of the d|
00004110  65 73 6b 74 6f 70 2e 22  29 0d 11 c6 76 20 20 20  |esktop.")...v   |
00004120  20 20 20 c9 20 33 37 3a  f2 53 65 6e 64 28 22 54  |   . 37:.Send("T|
00004130  68 69 73 20 73 77 69 74  63 68 20 69 73 20 73 65  |his switch is se|
00004140  6c 65 63 74 65 64 20 69  66 20 77 69 6e 64 6f 77  |lected if window|
00004150  20 73 63 72 6f 6c 6c 69  6e 67 20 69 73 20 6e 6f  | scrolling is no|
00004160  74 20 61 75 74 6f 6d 61  74 69 63 2c 20 61 6e 64  |t automatic, and|
00004170  20 74 68 65 20 61 72 72  6f 77 20 69 63 6f 6e 73  | the arrow icons|
00004180  20 61 75 74 6f 2d 72 65  70 65 61 74 2e 22 29 0d  | auto-repeat.").|
00004190  11 d0 7d 20 20 20 20 20  20 c9 20 33 38 3a f2 53  |..}      . 38:.S|
000041a0  65 6e 64 28 22 54 68 69  73 20 73 77 69 74 63 68  |end("This switch|
000041b0  20 69 73 20 73 65 6c 65  63 74 65 64 20 69 66 20  | is selected if |
000041c0  77 69 6e 64 6f 77 20 73  63 72 6f 6c 6c 69 6e 67  |window scrolling|
000041d0  20 69 73 20 6e 6f 74 20  61 75 74 6f 6d 61 74 69  | is not automati|
000041e0  63 2c 20 61 6e 64 20 74  68 65 20 61 72 72 6f 77  |c, and the arrow|
000041f0  20 69 63 6f 6e 73 20 64  6f 20 6e 6f 74 20 61 75  | icons do not au|
00004200  74 6f 2d 72 65 70 65 61  74 2e 22 29 0d 11 da 80  |to-repeat.")....|
00004210  20 20 20 20 20 20 c9 20  33 39 3a f2 53 65 6e 64  |      . 39:.Send|
00004220  28 22 54 68 69 73 20 73  77 69 74 63 68 20 69 73  |("This switch is|
00004230  20 73 65 6c 65 63 74 65  64 20 69 66 20 74 68 65  | selected if the|
00004240  20 77 69 6e 64 6f 77 27  73 20 63 6f 6c 6f 75 72  | window's colour|
00004250  73 20 61 72 65 20 74 72  65 61 74 65 64 20 61 73  |s are treated as|
00004260  20 47 43 4f 4c 20 63 6f  6c 6f 75 72 73 20 72 61  | GCOL colours ra|
00004270  74 68 65 72 20 74 68 61  6e 20 44 65 73 6b 74 6f  |ther than Deskto|
00004280  70 20 63 6f 6c 6f 75 72  73 2e 22 29 0d 11 e4 71  |p colours.")...q|
00004290  20 20 20 20 20 20 c9 20  34 30 3a f2 53 65 6e 64  |      . 40:.Send|
000042a0  28 22 54 68 69 73 20 73  77 69 74 63 68 20 69 73  |("This switch is|
000042b0  20 73 65 6c 65 63 74 65  64 20 69 66 20 6f 74 68  | selected if oth|
000042c0  65 72 20 77 69 6e 64 6f  77 73 20 61 72 65 20 6e  |er windows are n|
000042d0  6f 74 20 61 6c 6c 6f 77  65 64 20 74 6f 20 62 65  |ot allowed to be|
000042e0  20 6f 70 65 6e 65 64 20  62 65 68 69 6e 64 20 74  | opened behind t|
000042f0  68 69 73 20 77 69 6e 64  6f 77 2e 22 29 0d 11 ee  |his window.")...|
00004300  5a 20 20 20 20 20 20 c9  20 34 31 3a f2 53 65 6e  |Z      . 41:.Sen|
00004310  64 28 22 54 68 69 73 20  73 77 69 74 63 68 20 69  |d("This switch i|
00004320  73 20 73 65 6c 65 63 74  65 64 20 69 66 20 74 68  |s selected if th|
00004330  65 20 77 69 6e 64 6f 77  20 67 65 6e 65 72 65 61  |e window generea|
00004340  74 65 73 20 27 68 6f 74  20 6b 65 79 27 20 65 76  |tes 'hot key' ev|
00004350  65 6e 74 73 2e 22 29 0d  11 f8 71 20 20 20 20 20  |ents.")...q     |
00004360  20 c9 20 34 32 3a f2 53  65 6e 64 28 22 54 68 69  | . 42:.Send("Thi|
00004370  73 20 73 77 69 74 63 68  20 69 73 20 73 65 6c 65  |s switch is sele|
00004380  63 74 65 64 20 69 66 20  74 68 65 20 77 69 6e 64  |cted if the wind|
00004390  6f 77 20 69 73 20 62 65  69 6e 67 20 66 6f 72 63  |ow is being forc|
000043a0  65 64 20 74 6f 20 73 74  61 79 20 6f 6e 20 73 63  |ed to stay on sc|
000043b0  72 65 65 6e 20 28 52 49  53 43 20 4f 53 20 33 20  |reen (RISC OS 3 |
000043c0  6f 6e 6c 79 29 2e 22 29  0d 12 02 80 20 20 20 20  |only).")....    |
000043d0  20 20 c9 20 34 33 3a f2  53 65 6e 64 28 22 54 68  |  . 43:.Send("Th|
000043e0  69 73 20 73 77 69 74 63  68 20 69 73 20 73 65 6c  |is switch is sel|
000043f0  65 63 74 65 64 20 69 66  20 74 68 65 20 72 69 67  |ected if the rig|
00004400  68 74 2d 68 61 6e 64 20  77 69 6e 64 6f 77 20 65  |ht-hand window e|
00004410  78 74 65 6e 64 20 69 73  20 69 67 6e 6f 72 65 64  |xtend is ignored|
00004420  20 64 75 72 69 6e 67 20  72 65 73 69 7a 65 20 64  | during resize d|
00004430  72 61 67 73 20 28 52 49  53 43 20 4f 53 20 33 20  |rags (RISC OS 3 |
00004440  6f 6e 6c 79 29 2e 22 29  0d 12 0c 7b 20 20 20 20  |only).")...{    |
00004450  20 20 c9 20 34 34 3a f2  53 65 6e 64 28 22 54 68  |  . 44:.Send("Th|
00004460  69 73 20 73 77 69 74 63  68 20 69 73 20 73 65 6c  |is switch is sel|
00004470  65 63 74 65 64 20 69 66  20 74 68 65 20 6c 6f 77  |ected if the low|
00004480  65 72 20 77 69 6e 64 6f  77 20 65 78 74 65 6e 74  |er window extent|
00004490  20 69 73 20 69 67 6e 6f  72 65 64 20 64 75 72 69  | is ignored duri|
000044a0  6e 67 20 72 65 73 69 7a  65 20 64 72 61 67 73 20  |ng resize drags |
000044b0  28 52 49 53 43 20 4f 53  20 33 20 6f 6e 6c 79 29  |(RISC OS 3 only)|
000044c0  2e 22 29 0d 12 16 72 20  20 20 20 20 20 c9 20 34  |.")...r      . 4|
000044d0  35 3a f2 53 65 6e 64 28  22 54 68 69 73 20 73 77  |5:.Send("This sw|
000044e0  69 74 63 68 20 69 73 20  73 65 6c 65 63 74 65 64  |itch is selected|
000044f0  20 69 66 20 74 68 65 20  77 69 6e 64 6f 77 20 68  | if the window h|
00004500  61 73 20 62 65 65 6e 20  64 65 66 69 6e 65 64 20  |as been defined |
00004510  75 73 69 6e 67 20 74 68  65 20 6e 65 77 20 66 6f  |using the new fo|
00004520  72 6d 61 74 20 73 70 65  63 69 66 69 63 61 74 69  |rmat specificati|
00004530  6f 6e 2e 22 29 0d 12 20  43 20 20 20 20 20 20 c9  |on.").. C      .|
00004540  20 34 36 3a f2 53 65 6e  64 28 22 54 68 69 73 20  | 46:.Send("This |
00004550  73 68 6f 77 73 20 74 68  65 20 77 69 6e 64 6f 77  |shows the window|
00004560  20 66 6c 61 67 73 20 69  6e 20 68 65 78 61 64 65  | flags in hexade|
00004570  63 69 6d 61 6c 2e 22 29  0d 12 2a 66 20 20 20 20  |cimal.")..*f    |
00004580  20 20 20 20 20 20 20 20  20 20 e7 20 ac 20 53 70  |          . . Sp|
00004590  79 69 6e 67 20 8c 20 f2  53 65 6e 64 28 22 45 6e  |ying . .Send("En|
000045a0  74 65 72 20 61 20 76 61  6c 75 65 20 68 65 72 65  |ter a value here|
000045b0  20 61 6e 64 20 70 72 65  73 73 20 52 45 54 55 52  | and press RETUR|
000045c0  4e 20 74 6f 20 66 69 6e  64 20 6f 75 74 20 77 68  |N to find out wh|
000045d0  61 74 20 69 74 20 6d 65  61 6e 73 2e 22 29 0d 12  |at it means.")..|
000045e0  34 76 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |4v              |
000045f0  e7 20 ac 20 53 70 79 69  6e 67 20 8c 20 f2 53 65  |. . Spying . .Se|
00004600  6e 64 28 22 59 6f 75 20  63 61 6e 20 64 72 61 67  |nd("You can drag|
00004610  20 74 68 69 73 20 66 69  67 75 72 65 20 6f 75 74  | this figure out|
00004620  20 74 6f 20 61 6e 6f 74  68 65 72 20 61 70 70 6c  | to another appl|
00004630  69 63 61 74 69 6f 6e 20  6f 72 20 74 6f 20 61 20  |ication or to a |
00004640  64 69 72 65 63 74 6f 72  79 20 64 69 73 70 6c 61  |directory displa|
00004650  79 2e 22 29 0d 12 3e 3a  20 20 20 20 20 20 7f 20  |y.")..>:      . |
00004660  f2 53 65 6e 64 28 22 54  68 69 73 20 69 73 20 74  |.Send("This is t|
00004670  68 65 20 57 69 6e 64 6f  77 20 46 6c 61 67 73 20  |he Window Flags |
00004680  6d 61 69 6e 20 77 69 6e  64 6f 77 2e 22 29 0d 12  |main window.")..|
00004690  48 4e 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |HN              |
000046a0  20 20 f2 53 65 6e 64 28  22 59 6f 75 20 63 61 6e  |  .Send("You can|
000046b0  20 73 70 79 20 6f 6e 20  77 69 6e 64 6f 77 73 20  | spy on windows |
000046c0  6f 72 20 63 61 6c 63 75  6c 61 74 65 20 77 69 6e  |or calculate win|
000046d0  64 6f 77 20 66 6c 61 67  73 2e 22 29 0d 12 52 09  |dow flags.")..R.|
000046e0  20 20 20 20 cb 0d 12 5c  4a 20 20 c9 20 49 6e 66  |    ...\J  . Inf|
000046f0  6f 3a f2 53 65 6e 64 28  22 54 68 69 73 20 77 69  |o:.Send("This wi|
00004700  6e 64 6f 77 20 64 69 73  70 6c 61 79 73 20 69 6e  |ndow displays in|
00004710  66 6f 72 6d 61 74 69 6f  6e 20 61 62 6f 75 74 20  |formation about |
00004720  57 69 6e 64 6f 77 20 46  6c 61 67 73 2e 22 29 0d  |Window Flags.").|
00004730  12 66 5d 20 20 20 20 20  20 20 20 20 20 20 20 f2  |.f]            .|
00004740  53 65 6e 64 28 22 57 69  6e 64 6f 77 20 46 6c 61  |Send("Window Fla|
00004750  67 73 20 69 73 20 61 20  6d 65 6d 62 65 72 20 6f  |gs is a member o|
00004760  66 20 74 68 65 20 4f 6d  6e 69 44 65 73 6b 20 53  |f the OmniDesk S|
00004770  75 69 74 65 20 6f 66 20  64 65 73 6b 74 6f 70 20  |uite of desktop |
00004780  75 74 69 6c 69 74 69 65  73 2e 22 29 0d 12 70 0c  |utilities.")..p.|
00004790  20 20 c9 20 4c 6f 63 3a  0d 12 7a 0d 20 20 20 c8  |  . Loc:..z.   .|
000047a0  8e 20 b9 20 ca 0d 12 84  6d 20 20 20 20 20 c9 20  |. . ....m     . |
000047b0  28 28 42 6c 6f 63 6b 21  33 36 29 3c 36 29 3a f2  |((Block!36)<6):.|
000047c0  53 65 6e 64 28 22 54 68  69 73 20 77 69 6e 64 6f  |Send("This windo|
000047d0  77 20 6c 65 74 73 20 79  6f 75 20 73 6e 61 70 20  |w lets you snap |
000047e0  74 68 65 20 6d 61 67 6e  69 66 69 65 72 20 77 69  |the magnifier wi|
000047f0  6e 64 6f 77 20 74 6f 20  61 6e 20 69 6e 76 69 73  |ndow to an invis|
00004800  62 6c 65 20 73 63 72 65  65 6e 20 67 72 69 64 2e  |ble screen grid.|
00004810  22 29 0d 12 8e 9d 20 20  20 20 20 20 20 20 20 20  |")....          |
00004820  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 f2  |               .|
00004830  53 65 6e 64 28 22 54 68  65 20 73 65 63 6f 6e 64  |Send("The second|
00004840  20 70 6f 73 69 74 69 6f  6e 20 75 70 20 70 75 74  | position up put|
00004850  73 20 74 68 65 20 77 69  6e 64 6f 77 20 6a 75 73  |s the window jus|
00004860  74 20 61 62 6f 76 65 20  74 68 65 20 69 63 6f 6e  |t above the icon|
00004870  2d 62 61 72 2c 20 61 6e  64 20 69 73 20 74 68 65  |-bar, and is the|
00004880  72 65 66 6f 72 65 20 6e  6f 74 20 65 76 65 6e 6c  |refore not evenl|
00004890  79 20 73 70 61 63 65 64  20 77 69 74 68 20 74 68  |y spaced with th|
000048a0  65 20 6f 74 68 65 72 20  72 6f 77 73 2e 22 29 0d  |e other rows.").|
000048b0  12 98 87 20 20 20 20 20  7f 20 f2 53 65 6e 64 28  |...     . .Send(|
000048c0  22 43 6c 69 63 6b 20 53  45 4c 45 43 54 20 6f 6e  |"Click SELECT on|
000048d0  20 74 68 65 20 70 6f 73  69 74 69 6f 6e 20 79 6f  | the position yo|
000048e0  75 20 77 61 6e 74 20 74  68 65 20 77 69 6e 64 6f  |u want the windo|
000048f0  77 20 74 6f 20 73 6e 61  70 20 74 6f 2c 20 6f 72  |w to snap to, or|
00004900  20 41 44 4a 55 53 54 20  6f 6e 20 74 68 65 20 77  | ADJUST on the w|
00004910  69 6e 64 6f 77 20 69 63  6f 6e 20 74 6f 20 74 75  |indow icon to tu|
00004920  72 6e 20 74 68 65 20 73  6e 61 70 70 69 6e 67 20  |rn the snapping |
00004930  6f 66 66 2e 22 29 0d 12  a2 75 20 20 20 20 20 20  |off.")...u      |
00004940  20 20 20 20 20 20 20 20  20 f2 53 65 6e 64 28 22  |         .Send("|
00004950  49 66 20 73 6e 61 70 70  69 6e 67 20 69 73 20 6f  |If snapping is o|
00004960  6e 2c 20 74 68 65 20 77  69 6e 64 6f 77 20 77 69  |n, the window wi|
00004970  6c 6c 20 6f 70 65 6e 20  61 74 20 74 68 65 20 61  |ll open at the a|
00004980  70 70 72 6f 70 72 69 61  74 65 20 70 6f 73 69 74  |ppropriate posit|
00004990  69 6f 6e 20 77 68 65 6e  20 79 6f 75 20 63 68 61  |ion when you cha|
000049a0  6e 67 65 20 6d 6f 64 65  2e 22 29 0d 12 ac 08 20  |nge mode.").... |
000049b0  20 20 cb 0d 12 b6 05 7f  0d 12 c0 13 20 20 e7 20  |  ..........  . |
000049c0  77 69 6d 70 3e 3d 32 31  37 20 8c 0d 12 ca 31 20  |wimp>=217 ....1 |
000049d0  20 20 20 4d 65 6e 75 48  65 6c 70 21 30 3d 2d 31  |   MenuHelp!0=-1|
000049e0  3a 4d 65 6e 75 48 65 6c  70 21 34 3d 2d 31 3a 4d  |:MenuHelp!4=-1:M|
000049f0  65 6e 75 48 65 6c 70 21  38 3d 2d 31 0d 12 d4 3b  |enuHelp!8=-1...;|
00004a00  20 20 20 20 c8 99 20 22  57 69 6d 70 5f 47 65 74  |    .. "Wimp_Get|
00004a10  4d 65 6e 75 53 74 61 74  65 22 2c 31 2c 4d 65 6e  |MenuState",1,Men|
00004a20  75 48 65 6c 70 2c 42 6c  6f 63 6b 21 33 32 2c 42  |uHelp,Block!32,B|
00004a30  6c 6f 63 6b 21 33 36 0d  12 de 0f 20 20 20 20 c8  |lock!36....    .|
00004a40  8e 20 4d 25 20 ca 0d 12  e8 13 20 20 20 20 20 20  |. M% .....      |
00004a50  c9 20 49 42 4d 65 6e 75  3a 0d 12 f2 1d 20 20 20  |. IBMenu:....   |
00004a60  20 20 20 20 20 e7 20 4d  65 6e 75 48 65 6c 70 21  |     . MenuHelp!|
00004a70  34 3d 2d 31 20 8c 0d 12  fc 1d 20 20 20 20 20 20  |4=-1 .....      |
00004a80  20 20 20 20 c8 8e 20 4d  65 6e 75 48 65 6c 70 21  |    .. MenuHelp!|
00004a90  30 20 ca 0d 13 06 5a 20  20 20 20 20 20 20 20 20  |0 ....Z         |
00004aa0  20 20 20 c9 20 30 3a f2  53 65 6e 64 28 22 4d 6f  |   . 0:.Send("Mo|
00004ab0  76 65 20 74 68 65 20 70  6f 69 6e 74 65 72 20 72  |ve the pointer r|
00004ac0  69 67 68 74 20 74 6f 20  73 65 65 20 69 6e 66 6f  |ight to see info|
00004ad0  72 6d 61 74 69 6f 6e 20  61 62 6f 75 74 20 57 69  |rmation about Wi|
00004ae0  6e 64 6f 77 20 46 6c 61  67 73 2e 22 29 0d 13 10  |ndow Flags.")...|
00004af0  3f 20 20 20 20 20 20 20  20 20 20 20 20 c9 20 31  |?            . 1|
00004b00  3a f2 53 65 6e 64 28 22  43 6c 69 63 6b 20 53 45  |:.Send("Click SE|
00004b10  4c 45 43 54 20 74 6f 20  71 75 69 74 20 57 69 6e  |LECT to quit Win|
00004b20  64 6f 77 20 46 6c 61 67  73 2e 22 29 0d 13 1a 42  |dow Flags.")...B|
00004b30  20 20 20 20 20 20 20 20  20 20 20 20 7f 20 f2 53  |            . .S|
00004b40  65 6e 64 28 22 54 68 69  73 20 69 73 20 74 68 65  |end("This is the|
00004b50  20 57 69 6e 64 6f 77 20  46 6c 61 67 73 20 69 63  | Window Flags ic|
00004b60  6f 6e 2d 62 61 72 20 6d  65 6e 75 2e 22 29 0d 13  |on-bar menu.")..|
00004b70  24 0f 20 20 20 20 20 20  20 20 20 20 cb 0d 13 2e  |$.          ....|
00004b80  0d 20 20 20 20 20 20 20  20 cd 0d 13 38 15 20 20  |.        ...8.  |
00004b90  20 20 20 20 c9 20 4d 61  69 6e 4d 65 6e 75 3a 0d  |    . MainMenu:.|
00004ba0  13 42 57 20 20 20 20 20  20 20 20 44 69 72 65 63  |.BW        Direc|
00004bb0  74 69 6f 6e 24 3d 22 72  69 67 68 74 22 3a e7 20  |tion$="right":. |
00004bc0  77 69 6d 70 3e 3d 33 31  30 20 80 20 bd 28 4d 61  |wimp>=310 . .(Ma|
00004bd0  69 6e 4d 65 6e 75 54 69  74 6c 65 3f 30 29 3d 22  |inMenuTitle?0)="|
00004be0  5c 22 20 8c 20 44 69 72  65 63 74 69 6f 6e 24 3d  |\" . Direction$=|
00004bf0  22 6c 65 66 74 22 0d 13  4c 1b 20 20 20 20 20 20  |"left"..L.      |
00004c00  20 20 c8 8e 20 4d 65 6e  75 48 65 6c 70 21 30 20  |  .. MenuHelp!0 |
00004c10  ca 0d 13 56 61 20 20 20  20 20 20 20 20 20 20 c9  |...Va          .|
00004c20  20 30 3a f2 53 65 6e 64  28 22 4d 6f 76 65 20 74  | 0:.Send("Move t|
00004c30  68 65 20 70 6f 69 6e 74  65 72 20 22 2b 44 69 72  |he pointer "+Dir|
00004c40  65 63 74 69 6f 6e 24 2b  22 20 74 6f 20 73 65 65  |ection$+" to see|
00004c50  20 69 6e 66 6f 72 6d 61  74 69 6f 6e 20 61 62 6f  | information abo|
00004c60  75 74 20 57 69 6e 64 6f  77 20 46 6c 61 67 73 2e  |ut Window Flags.|
00004c70  22 29 0d 13 60 1c 20 20  20 20 20 20 20 20 20 20  |")..`.          |
00004c80  c9 20 31 3a e7 20 53 70  79 69 6e 67 20 8c 0d 13  |. 1:. Spying ...|
00004c90  6a 60 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |j`              |
00004ca0  20 20 20 20 20 f2 53 65  6e 64 28 22 43 6c 69 63  |     .Send("Clic|
00004cb0  6b 20 53 45 4c 45 43 54  20 6f 72 20 41 44 4a 55  |k SELECT or ADJU|
00004cc0  53 54 20 74 6f 20 73 74  6f 70 20 73 70 79 69 6e  |ST to stop spyin|
00004cd0  67 20 61 6e 64 20 77 6f  72 6b 20 6f 75 74 20 77  |g and work out w|
00004ce0  69 6e 64 6f 77 20 66 6c  61 67 73 2e 22 29 0d 13  |indow flags.")..|
00004cf0  74 16 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |t.              |
00004d00  20 20 20 cc 0d 13 7e 6d  20 20 20 20 20 20 20 20  |   ...~m        |
00004d10  20 20 20 20 20 20 20 20  20 20 20 f2 53 65 6e 64  |           .Send|
00004d20  28 22 43 6c 69 63 6b 20  53 45 4c 45 43 54 20 6f  |("Click SELECT o|
00004d30  72 20 41 44 4a 55 53 54  20 74 6f 20 73 70 79 20  |r ADJUST to spy |
00004d40  6f 6e 20 77 69 6e 64 6f  77 73 20 79 6f 75 20 70  |on windows you p|
00004d50  6f 69 6e 74 20 74 6f 20  77 69 74 68 20 74 68 65  |oint to with the|
00004d60  20 6d 6f 75 73 65 20 70  6f 69 6e 74 65 72 2e 22  | mouse pointer."|
00004d70  29 0d 13 88 16 20 20 20  20 20 20 20 20 20 20 20  |)....           |
00004d80  20 20 20 20 20 20 cd 0d  13 92 78 20 20 20 20 20  |      ....x     |
00004d90  20 20 20 20 20 c9 20 32  3a f2 53 65 6e 64 28 22  |     . 2:.Send("|
00004da0  4d 6f 76 65 20 74 68 65  20 70 6f 69 6e 74 65 72  |Move the pointer|
00004db0  20 22 2b 44 69 72 65 63  74 69 6f 6e 24 2b 22 20  | "+Direction$+" |
00004dc0  74 6f 20 73 65 74 20 74  68 65 20 70 6f 73 69 74  |to set the posit|
00004dd0  69 6f 6e 20 6f 66 20 74  68 65 20 57 69 6e 64 6f  |ion of the Windo|
00004de0  77 20 46 6c 61 67 73 20  77 69 6e 64 6f 77 20 6f  |w Flags window o|
00004df0  6e 20 74 68 65 20 73 63  72 65 65 6e 2e 22 29 0d  |n the screen.").|
00004e00  13 9c 6d 20 20 20 20 20  20 20 20 20 20 c9 20 33  |..m          . 3|
00004e10  3a f2 53 65 6e 64 28 22  43 6c 69 63 6b 20 53 45  |:.Send("Click SE|
00004e20  4c 45 43 54 20 6f 72 20  41 44 4a 55 53 54 20 74  |LECT or ADJUST t|
00004e30  6f 20 73 61 76 65 20 74  68 65 20 57 69 6e 64 6f  |o save the Windo|
00004e40  77 20 46 6c 61 67 73 20  77 69 6e 64 6f 77 20 70  |w Flags window p|
00004e50  6f 73 69 74 69 6f 6e 20  61 6e 64 20 73 70 79 69  |osition and spyi|
00004e60  6e 67 20 73 74 61 74 75  73 2e 22 29 0d 13 a6 3c  |ng status.")...<|
00004e70  20 20 20 20 20 20 20 20  20 20 7f 20 f2 53 65 6e  |          . .Sen|
00004e80  64 28 22 54 68 69 73 20  69 73 20 74 68 65 20 57  |d("This is the W|
00004e90  69 6e 64 6f 77 20 46 6c  61 67 73 20 6d 61 69 6e  |indow Flags main|
00004ea0  20 6d 65 6e 75 2e 22 29  0d 13 b0 0d 20 20 20 20  | menu.")....    |
00004eb0  20 20 20 20 cb 0d 13 ba  09 20 20 20 20 cb 0d 13  |    .....    ...|
00004ec0  c4 07 20 20 cd 0d 13 ce  05 cb 0d 13 d8 07 20 20  |..  ..........  |
00004ed0  3a 0d 13 e2 0f 3f 48 65  6c 70 49 6e 66 6f 3d 30  |:....?HelpInfo=0|
00004ee0  0d 13 ec 24 42 6c 6f 63  6b 21 30 3d 28 48 65 6c  |...$Block!0=(Hel|
00004ef0  70 49 6e 66 6f 2b 34 2d  42 6c 6f 63 6b 29 20 80  |pInfo+4-Block) .|
00004f00  20 ac 20 33 0d 13 f6 2a  c8 99 20 22 57 69 6d 70  | . 3...*.. "Wimp|
00004f10  5f 53 65 6e 64 4d 65 73  73 61 67 65 22 2c 31 37  |_SendMessage",17|
00004f20  2c 42 6c 6f 63 6b 2c 42  6c 6f 63 6b 21 34 0d 14  |,Block,Block!4..|
00004f30  00 05 e1 0d 14 0a 05 3a  0d 14 14 1a dd 20 a4 4f  |.......:..... .O|
00004f40  6d 6e 69 48 65 6c 70 4d  65 73 73 61 67 65 28 41  |mniHelpMessage(A|
00004f50  24 29 0d 14 1e 3c e7 20  41 24 3d 22 43 4c 49 43  |$)...<. A$="CLIC|
00004f60  4b 22 20 8c 20 3d c0 22  6f 70 65 6e 20 74 68 65  |K" . =."open the|
00004f70  20 57 69 6e 64 6f 77 20  46 6c 61 67 73 20 77 69  | Window Flags wi|
00004f80  6e 64 6f 77 2e 22 2c 37  36 29 2b bd 31 33 0d 14  |ndow.",76)+.13..|
00004f90  28 1e e7 20 41 24 3d 22  44 52 41 47 22 20 8c 20  |(.. A$="DRAG" . |
00004fa0  3d c0 22 22 2c 37 36 29  2b bd 31 33 0d 14 32 07  |=."",76)+.13..2.|
00004fb0  3d 22 22 0d 14 3c 05 3a  0d 14 46 12 dd 20 f2 53  |=""..<.:..F.. .S|
00004fc0  65 6e 64 28 54 65 78 74  24 29 0d 14 50 18 24 48  |end(Text$)..P.$H|
00004fd0  65 6c 70 49 6e 66 6f 3d  54 65 78 74 24 2b 22 7c  |elpInfo=Text$+"||
00004fe0  4d 22 0d 14 5a 18 48 65  6c 70 49 6e 66 6f 2b 3d  |M"..Z.HelpInfo+=|
00004ff0  a9 28 54 65 78 74 24 29  2b 32 0d 14 64 05 e1 0d  |.(Text$)+2..d...|
00005000  14 6e 05 3a 0d 14 78 16  dd 20 f2 4f 6d 6e 69 44  |.n.:..x.. .OmniD|
00005010  65 73 6b 43 61 6c 6c 69  6e 67 0d 14 82 14 e7 20  |eskCalling..... |
00005020  4f 6d 6e 69 44 65 73 6b  3d 30 20 8c 20 e1 0d 14  |OmniDesk=0 . ...|
00005030  8c 49 f4 20 54 68 69 73  20 66 69 72 73 74 20 6c  |.I. This first l|
00005040  69 6e 65 20 69 73 20 66  6f 72 20 69 66 20 61 20  |ine is for if a |
00005050  62 72 6f 61 64 63 61 73  74 20 6d 65 73 73 61 67  |broadcast messag|
00005060  65 20 69 73 20 72 65 63  65 69 76 65 64 20 77 68  |e is received wh|
00005070  69 63 68 20 77 61 73 0d  14 96 41 f4 20 69 6e 74  |ich was...A. int|
00005080  65 6e 64 65 64 20 66 6f  72 20 61 20 74 72 61 6e  |ended for a tran|
00005090  73 69 65 6e 74 20 63 6f  70 79 20 6f 66 20 74 68  |sient copy of th|
000050a0  65 20 75 74 69 6c 69 74  79 2e 20 41 20 73 74 61  |e utility. A sta|
000050b0  6e 64 2d 61 6c 6f 6e 65  0d 14 a0 3f f4 20 69 6e  |nd-alone...?. in|
000050c0  73 74 61 6e 74 69 61 74  69 6f 6e 20 6f 66 20 74  |stantiation of t|
000050d0  68 65 20 75 74 69 6c 69  74 79 20 73 68 6f 75 6c  |he utility shoul|
000050e0  64 20 69 67 6e 6f 72 65  20 73 75 63 68 20 6d 65  |d ignore such me|
000050f0  73 73 61 67 65 73 2e 0d  14 aa 11 c8 8e 20 42 6c  |ssages....... Bl|
00005100  6f 63 6b 21 32 30 20 ca  0d 14 b4 2e 20 20 c9 20  |ock!20 .....  . |
00005110  34 3a f2 4f 70 65 6e 28  53 70 79 43 61 6c 63 2c  |4:.Open(SpyCalc,|
00005120  b9 2c 58 50 6f 73 69 74  69 6f 6e 2c 59 50 6f 73  |.,XPosition,YPos|
00005130  69 74 69 6f 6e 29 0d 14  be 05 cb 0d 14 c8 05 e1  |ition)..........|
00005140  0d 14 d2 05 3a 0d 14 dc  11 dd 20 f2 4d 6f 64 65  |....:..... .Mode|
00005150  43 68 61 6e 67 65 0d 14  e6 12 44 6f 4d 6f 64 65  |Change....DoMode|
00005160  43 68 61 6e 67 65 3d b9  0d 14 f0 3e e7 20 4f 6d  |Change=....>. Om|
00005170  6e 69 44 65 73 6b 3d 30  20 8c 20 f2 55 70 64 61  |niDesk=0 . .Upda|
00005180  74 65 49 63 6f 6e 46 6f  72 4d 6f 64 65 28 22 21  |teIconForMode("!|
00005190  57 69 6e 64 46 6c 61 67  73 22 2c 2d 32 2c 49 63  |WindFlags",-2,Ic|
000051a0  6f 6e 42 61 72 29 0d 14  fa 05 e1 0d 15 04 05 3a  |onBar).........:|
000051b0  0d 15 0e 4f f4 20 2d 2d  2d 2d 2d 2d 2d 2d 2d 2d  |...O. ----------|
000051c0  2d 2d 2d 2d 2d 2d 2d 2d  2d 2d 2d 2d 2d 2d 2d 2d  |----------------|
*
000051f0  2d 2d 2d 2d 2d 2d 2d 2d  2d 2d 2d 2d 2d 2d 2d 0d  |---------------.|
00005200  15 18 38 f4 20 47 65 6e  65 72 61 6c 20 6e 6f 6e  |..8. General non|
00005210  2d 73 70 65 63 69 66 69  63 20 75 73 65 66 75 6c  |-specific useful|
00005220  20 72 6f 75 74 69 6e 65  73 20 28 6d 6f 73 74 6c  | routines (mostl|
00005230  79 20 77 69 6d 70 29 0d  15 22 4f f4 20 2d 2d 2d  |y wimp).."O. ---|
00005240  2d 2d 2d 2d 2d 2d 2d 2d  2d 2d 2d 2d 2d 2d 2d 2d  |----------------|
*
00005280  2d 2d 2d 2d 2d 2d 0d 15  2c 05 3a 0d 15 36 20 dd  |------..,.:..6 .|
00005290  20 f2 55 70 64 61 74 65  49 63 6f 6e 28 57 6e 64  | .UpdateIcon(Wnd|
000052a0  77 2c 49 63 6e 2c 54 78  74 24 29 0d 15 40 3a 42  |w,Icn,Txt$)..@:B|
000052b0  6c 6f 63 6b 21 30 3d 57  6e 64 77 3a 42 6c 6f 63  |lock!0=Wndw:Bloc|
000052c0  6b 21 34 3d 49 63 6e 3a  c8 99 20 22 57 69 6d 70  |k!4=Icn:.. "Wimp|
000052d0  5f 47 65 74 49 63 6f 6e  53 74 61 74 65 22 2c 2c  |_GetIconState",,|
000052e0  42 6c 6f 63 6b 0d 15 4a  1c e7 20 a9 28 54 78 74  |Block..J.. .(Txt|
000052f0  24 29 3e 28 42 6c 6f 63  6b 21 33 36 29 2d 31 20  |$)>(Block!36)-1 |
00005300  8c 0d 15 54 26 20 20 e7  20 28 28 42 6c 6f 63 6b  |...T&  . ((Block|
00005310  21 32 34 29 20 80 20 28  31 3c 3c 39 29 29 3d 28  |!24) . (1<<9))=(|
00005320  31 3c 3c 39 29 20 8c 0d  15 5e 19 20 20 20 20 f4  |1<<9) ...^.    .|
00005330  20 52 69 67 68 74 2d 6a  75 73 74 69 66 69 65 64  | Right-justified|
00005340  0d 15 68 24 20 20 20 20  54 78 74 24 3d 22 88 22  |..h$    Txt$="."|
00005350  2b c2 54 78 74 24 2c 28  42 6c 6f 63 6b 21 33 36  |+.Txt$,(Block!36|
00005360  29 2d 32 29 0d 15 72 07  20 20 cc 0d 15 7c 23 20  |)-2)..r.  ...|# |
00005370  20 20 20 f4 20 4c 65 66  74 2d 6a 75 73 74 69 66  |   . Left-justif|
00005380  69 65 64 20 6f 72 20 63  65 6e 74 72 65 64 0d 15  |ied or centred..|
00005390  86 2b 20 20 20 20 54 78  74 24 3d c0 54 78 74 24  |.+    Txt$=.Txt$|
000053a0  2c 28 42 6c 6f 63 6b 21  33 36 29 2d 31 29 3a c2  |,(Block!36)-1):.|
000053b0  54 78 74 24 29 3d 22 89  22 0d 15 90 07 20 20 cd  |Txt$)="."....  .|
000053c0  0d 15 9a 05 cd 0d 15 a4  46 f4 20 5e 20 45 6e 73  |........F. ^ Ens|
000053d0  75 72 65 73 20 74 68 65  20 74 65 78 74 20 63 61  |ures the text ca|
000053e0  6e 27 74 20 6f 76 65 72  66 6c 6f 77 20 74 68 65  |n't overflow the|
000053f0  20 6d 61 78 69 6d 75 6d  20 73 70 61 63 65 20 69  | maximum space i|
00005400  6e 20 74 68 65 20 69 63  6f 6e 2e 0d 15 ae 19 e7  |n the icon......|
00005410  20 24 28 42 6c 6f 63 6b  21 32 38 29 3c 3e 54 78  | $(Block!28)<>Tx|
00005420  74 24 20 8c 0d 15 b8 2b  20 20 24 28 42 6c 6f 63  |t$ ....+  $(Bloc|
00005430  6b 21 32 38 29 3d 54 78  74 24 3a 42 6c 6f 63 6b  |k!28)=Txt$:Block|
00005440  21 38 3d 30 3a 42 6c 6f  63 6b 21 31 32 3d 30 0d  |!8=0:Block!12=0.|
00005450  15 c2 23 20 20 c8 99 20  22 57 69 6d 70 5f 53 65  |..#  .. "Wimp_Se|
00005460  74 49 63 6f 6e 53 74 61  74 65 22 2c 2c 42 6c 6f  |tIconState",,Blo|
00005470  63 6b 0d 15 cc 05 cd 0d  15 d6 25 c8 99 20 22 57  |ck........%.. "W|
00005480  69 6d 70 5f 47 65 74 43  61 72 65 74 50 6f 73 69  |imp_GetCaretPosi|
00005490  74 69 6f 6e 22 2c 2c 42  6c 6f 63 6b 0d 15 e0 22  |tion",,Block..."|
000054a0  e7 20 42 6c 6f 63 6b 21  30 3d 57 6e 64 77 20 80  |. Block!0=Wndw .|
000054b0  20 42 6c 6f 63 6b 21 34  3d 49 63 6e 20 8c 0d 15  | Block!4=Icn ...|
000054c0  ea 3c 20 20 f4 20 49 66  20 74 68 69 73 20 69 63  |.<  . If this ic|
000054d0  6f 6e 20 6f 77 6e 73 20  74 68 65 20 63 61 72 65  |on owns the care|
000054e0  74 2c 20 74 68 65 6e 20  70 75 74 20 69 74 20 61  |t, then put it a|
000054f0  74 20 74 68 65 20 65 6e  64 2e 0d 15 f4 38 20 20  |t the end....8  |
00005500  c8 99 20 22 57 69 6d 70  5f 53 65 74 43 61 72 65  |.. "Wimp_SetCare|
00005510  74 50 6f 73 69 74 69 6f  6e 22 2c 57 6e 64 77 2c  |tPosition",Wndw,|
00005520  49 63 6e 2c 30 2c 30 2c  2d 31 2c a9 28 54 78 74  |Icn,0,0,-1,.(Txt|
00005530  24 29 0d 15 fe 05 cd 0d  16 08 05 e1 0d 16 12 05  |$)..............|
00005540  3a 0d 16 1c 2b dd 20 f2  55 70 64 61 74 65 49 63  |:...+. .UpdateIc|
00005550  6f 6e 43 6f 6c 6f 75 72  28 57 6e 64 77 2c 49 63  |onColour(Wndw,Ic|
00005560  6e 2c 46 43 6f 6c 2c 42  43 6f 6c 29 0d 16 26 1e  |n,FCol,BCol)..&.|
00005570  f4 20 43 68 61 6e 67 65  20 61 6e 20 69 63 6f 6e  |. Change an icon|
00005580  27 73 20 63 6f 6c 6f 75  72 73 0d 16 30 3a 42 6c  |'s colours..0:Bl|
00005590  6f 63 6b 21 30 3d 57 6e  64 77 3a 42 6c 6f 63 6b  |ock!0=Wndw:Block|
000055a0  21 34 3d 49 63 6e 3a c8  99 20 22 57 69 6d 70 5f  |!4=Icn:.. "Wimp_|
000055b0  47 65 74 49 63 6f 6e 53  74 61 74 65 22 2c 2c 42  |GetIconState",,B|
000055c0  6c 6f 63 6b 0d 16 3a 3b  e7 20 28 28 28 42 6c 6f  |lock..:;. (((Blo|
000055d0  63 6b 3f 32 37 29 3e 3e  34 29 3d 42 43 6f 6c 29  |ck?27)>>4)=BCol)|
000055e0  20 80 20 28 28 28 42 6c  6f 63 6b 3f 32 37 29 20  | . (((Block?27) |
000055f0  83 20 31 36 29 3d 46 43  6f 6c 29 20 8c 20 e1 0d  |. 16)=FCol) . ..|
00005600  16 44 27 20 20 f4 20 5e  20 53 61 6d 65 20 63 6f  |.D'  . ^ Same co|
00005610  6c 6f 75 72 2c 20 73 6f  20 64 6f 6e 27 74 20 63  |lour, so don't c|
00005620  68 61 6e 67 65 2e 0d 16  4e 3a 42 6c 6f 63 6b 21  |hange...N:Block!|
00005630  31 32 3d 28 25 31 31 31  31 31 31 31 31 3c 3c 32  |12=(%11111111<<2|
00005640  34 29 3a 42 6c 6f 63 6b  21 38 3d 28 42 43 6f 6c  |4):Block!8=(BCol|
00005650  3c 3c 32 38 29 2b 28 46  43 6f 6c 3c 3c 32 34 29  |<<28)+(FCol<<24)|
00005660  0d 16 58 21 c8 99 20 22  57 69 6d 70 5f 53 65 74  |..X!.. "Wimp_Set|
00005670  49 63 6f 6e 53 74 61 74  65 22 2c 2c 42 6c 6f 63  |IconState",,Bloc|
00005680  6b 0d 16 62 05 e1 0d 16  6c 05 3a 0d 16 76 29 dd  |k..b....l.:..v).|
00005690  20 f2 55 70 64 61 74 65  53 65 6c 65 63 74 65 64  | .UpdateSelected|
000056a0  46 6c 61 67 28 57 6e 64  77 2c 49 63 6e 2c 53 74  |Flag(Wndw,Icn,St|
000056b0  61 74 65 29 0d 16 80 31  f4 20 55 73 65 20 53 74  |ate)...1. Use St|
000056c0  61 74 65 3d 54 52 55 45  20 74 6f 20 6d 61 6b 65  |ate=TRUE to make|
000056d0  20 69 63 6f 6e 20 62 65  63 6f 6d 65 20 73 65 6c  | icon become sel|
000056e0  65 63 74 65 64 0d 16 8a  3a 42 6c 6f 63 6b 21 30  |ected...:Block!0|
000056f0  3d 57 6e 64 77 3a 42 6c  6f 63 6b 21 34 3d 49 63  |=Wndw:Block!4=Ic|
00005700  6e 3a c8 99 20 22 57 69  6d 70 5f 47 65 74 49 63  |n:.. "Wimp_GetIc|
00005710  6f 6e 53 74 61 74 65 22  2c 2c 42 6c 6f 63 6b 0d  |onState",,Block.|
00005720  16 94 2f e7 20 28 28 42  6c 6f 63 6b 21 32 34 29  |../. ((Block!24)|
00005730  20 80 20 28 31 3c 3c 32  31 29 29 3d 28 28 2d 53  | . (1<<21))=((-S|
00005740  74 61 74 65 29 3c 3c 32  31 29 20 8c 20 e1 0d 16  |tate)<<21) . ...|
00005750  9e 40 42 6c 6f 63 6b 21  31 32 3d 28 31 3c 3c 32  |.@Block!12=(1<<2|
00005760  31 29 3a e7 20 53 74 61  74 65 20 8c 20 42 6c 6f  |1):. State . Blo|
00005770  63 6b 21 38 3d 28 31 3c  3c 32 31 29 20 8b 20 42  |ck!8=(1<<21) . B|
00005780  6c 6f 63 6b 21 38 3d 28  30 3c 3c 32 31 29 0d 16  |lock!8=(0<<21)..|
00005790  a8 21 c8 99 20 22 57 69  6d 70 5f 53 65 74 49 63  |.!.. "Wimp_SetIc|
000057a0  6f 6e 53 74 61 74 65 22  2c 2c 42 6c 6f 63 6b 0d  |onState",,Block.|
000057b0  16 b2 05 e1 0d 16 bc 05  3a 0d 16 c6 27 dd 20 f2  |........:...'. .|
000057c0  55 70 64 61 74 65 53 68  61 64 65 64 46 6c 61 67  |UpdateShadedFlag|
000057d0  28 57 6e 64 77 2c 49 63  6e 2c 53 74 61 74 65 29  |(Wndw,Icn,State)|
000057e0  0d 16 d0 2f f4 20 55 73  65 20 53 74 61 74 65 3d  |.../. Use State=|
000057f0  54 52 55 45 20 74 6f 20  6d 61 6b 65 20 69 63 6f  |TRUE to make ico|
00005800  6e 20 62 65 63 6f 6d 65  20 73 68 61 64 65 64 0d  |n become shaded.|
00005810  16 da 3a 42 6c 6f 63 6b  21 30 3d 57 6e 64 77 3a  |..:Block!0=Wndw:|
00005820  42 6c 6f 63 6b 21 34 3d  49 63 6e 3a c8 99 20 22  |Block!4=Icn:.. "|
00005830  57 69 6d 70 5f 47 65 74  49 63 6f 6e 53 74 61 74  |Wimp_GetIconStat|
00005840  65 22 2c 2c 42 6c 6f 63  6b 0d 16 e4 2f e7 20 28  |e",,Block.../. (|
00005850  28 42 6c 6f 63 6b 21 32  34 29 20 80 20 28 31 3c  |(Block!24) . (1<|
00005860  3c 32 32 29 29 3d 28 28  2d 53 74 61 74 65 29 3c  |<22))=((-State)<|
00005870  3c 32 32 29 20 8c 20 e1  0d 16 ee 40 42 6c 6f 63  |<22) . ....@Bloc|
00005880  6b 21 31 32 3d 28 31 3c  3c 32 32 29 3a e7 20 53  |k!12=(1<<22):. S|
00005890  74 61 74 65 20 8c 20 42  6c 6f 63 6b 21 38 3d 28  |tate . Block!8=(|
000058a0  31 3c 3c 32 32 29 20 8b  20 42 6c 6f 63 6b 21 38  |1<<22) . Block!8|
000058b0  3d 28 30 3c 3c 32 32 29  0d 16 f8 21 c8 99 20 22  |=(0<<22)...!.. "|
000058c0  57 69 6d 70 5f 53 65 74  49 63 6f 6e 53 74 61 74  |Wimp_SetIconStat|
000058d0  65 22 2c 2c 42 6c 6f 63  6b 0d 17 02 05 e1 0d 17  |e",,Block.......|
000058e0  0c 05 3a 0d 17 16 1e dd  20 a4 53 65 6c 65 63 74  |..:..... .Select|
000058f0  65 64 53 74 61 74 65 28  57 6e 64 77 2c 49 63 6e  |edState(Wndw,Icn|
00005900  29 0d 17 20 3a 42 6c 6f  63 6b 21 30 3d 57 6e 64  |).. :Block!0=Wnd|
00005910  77 3a 42 6c 6f 63 6b 21  34 3d 49 63 6e 3a c8 99  |w:Block!4=Icn:..|
00005920  20 22 57 69 6d 70 5f 47  65 74 49 63 6f 6e 53 74  | "Wimp_GetIconSt|
00005930  61 74 65 22 2c 2c 42 6c  6f 63 6b 0d 17 2a 29 e7  |ate",,Block..*).|
00005940  20 28 28 42 6c 6f 63 6b  21 32 34 29 20 80 20 28  | ((Block!24) . (|
00005950  31 3c 3c 32 31 29 29 3d  28 31 3c 3c 32 31 29 20  |1<<21))=(1<<21) |
00005960  8c 20 3d b9 0d 17 34 06  3d a3 0d 17 3e 05 3a 0d  |. =...4.=...>.:.|
00005970  17 48 1c dd 20 a4 53 68  61 64 65 64 53 74 61 74  |.H.. .ShadedStat|
00005980  65 28 57 6e 64 77 2c 49  63 6e 29 0d 17 52 3a 42  |e(Wndw,Icn)..R:B|
00005990  6c 6f 63 6b 21 30 3d 57  6e 64 77 3a 42 6c 6f 63  |lock!0=Wndw:Bloc|
000059a0  6b 21 34 3d 49 63 6e 3a  c8 99 20 22 57 69 6d 70  |k!4=Icn:.. "Wimp|
000059b0  5f 47 65 74 49 63 6f 6e  53 74 61 74 65 22 2c 2c  |_GetIconState",,|
000059c0  42 6c 6f 63 6b 0d 17 5c  29 e7 20 28 28 42 6c 6f  |Block..\). ((Blo|
000059d0  63 6b 21 32 34 29 20 80  20 28 31 3c 3c 32 32 29  |ck!24) . (1<<22)|
000059e0  29 3d 28 31 3c 3c 32 32  29 20 8c 20 3d b9 0d 17  |)=(1<<22) . =...|
000059f0  66 06 3d a3 0d 17 70 05  3a 0d 17 7a 16 dd 20 a4  |f.=...p.:..z.. .|
00005a00  4f 70 65 6e 53 74 61 74  65 28 57 6e 64 77 29 0d  |OpenState(Wndw).|
00005a10  17 84 35 f4 20 52 65 74  75 72 6e 73 20 54 52 55  |..5. Returns TRU|
00005a20  45 20 69 66 20 77 69 6e  64 6f 77 20 69 73 20 6f  |E if window is o|
00005a30  70 65 6e 3b 20 66 61 6c  73 65 20 6f 74 68 65 72  |pen; false other|
00005a40  77 69 73 65 0d 17 8e 30  42 6c 6f 63 6b 21 30 3d  |wise...0Block!0=|
00005a50  57 6e 64 77 3a c8 99 20  22 57 69 6d 70 5f 47 65  |Wndw:.. "Wimp_Ge|
00005a60  74 57 69 6e 64 6f 77 53  74 61 74 65 22 2c 2c 42  |tWindowState",,B|
00005a70  6c 6f 63 6b 0d 17 98 29  e7 20 28 28 42 6c 6f 63  |lock...). ((Bloc|
00005a80  6b 21 33 32 29 20 80 20  28 31 3c 3c 31 36 29 29  |k!32) . (1<<16))|
00005a90  3d 28 31 3c 3c 31 36 29  20 8c 20 3d b9 0d 17 a2  |=(1<<16) . =....|
00005aa0  06 3d a3 0d 17 ac 05 3a  0d 17 b6 21 dd 20 f2 53  |.=.....:...!. .S|
00005ab0  68 61 64 65 4d 65 6e 75  28 4d 65 6e 75 2c 49 74  |hadeMenu(Menu,It|
00005ac0  65 6d 2c 53 74 61 74 65  29 0d 17 c0 50 21 28 4d  |em,State)...P!(M|
00005ad0  65 6e 75 2b 32 38 2b 28  32 34 2a 49 74 65 6d 29  |enu+28+(24*Item)|
00005ae0  2b 38 29 3d 28 21 28 4d  65 6e 75 2b 32 38 2b 28  |+8)=(!(Menu+28+(|
00005af0  32 34 2a 49 74 65 6d 29  2b 38 29 20 80 20 ac 20  |24*Item)+8) . . |
00005b00  28 31 3c 3c 32 32 29 29  20 82 20 28 28 2d 53 74  |(1<<22)) . ((-St|
00005b10  61 74 65 29 3c 3c 32 32  29 0d 17 ca 05 e1 0d 17  |ate)<<22).......|
00005b20  d4 05 3a 0d 17 de 20 dd  20 f2 54 69 63 6b 4d 65  |..:... . .TickMe|
00005b30  6e 75 28 4d 65 6e 75 2c  49 74 65 6d 2c 53 74 61  |nu(Menu,Item,Sta|
00005b40  74 65 29 0d 17 e8 40 21  28 4d 65 6e 75 2b 32 38  |te)...@!(Menu+28|
00005b50  2b 28 32 34 2a 49 74 65  6d 29 29 3d 28 21 28 4d  |+(24*Item))=(!(M|
00005b60  65 6e 75 2b 32 38 2b 28  32 34 2a 49 74 65 6d 29  |enu+28+(24*Item)|
00005b70  29 20 80 20 ac 20 31 29  20 82 20 28 2d 53 74 61  |) . . 1) . (-Sta|
00005b80  74 65 29 0d 17 f2 05 e1  0d 17 fc 05 3a 0d 18 06  |te).........:...|
00005b90  1c dd 20 a4 4d 65 6e 75  53 68 61 64 65 64 28 4d  |.. .MenuShaded(M|
00005ba0  65 6e 75 2c 49 74 65 6d  29 0d 18 10 35 e7 20 28  |enu,Item)...5. (|
00005bb0  21 28 4d 65 6e 75 2b 32  38 2b 28 32 34 2a 49 74  |!(Menu+28+(24*It|
00005bc0  65 6d 29 2b 38 29 20 80  20 28 31 3c 3c 32 32 29  |em)+8) . (1<<22)|
00005bd0  29 3d 28 31 3c 3c 32 32  29 20 8c 20 3d b9 0d 18  |)=(1<<22) . =...|
00005be0  1a 06 3d a3 0d 18 24 05  3a 0d 18 2e 1c dd 20 a4  |..=...$.:..... .|
00005bf0  4d 65 6e 75 54 69 63 6b  65 64 28 4d 65 6e 75 2c  |MenuTicked(Menu,|
00005c00  49 74 65 6d 29 0d 18 38  27 e7 20 28 21 28 4d 65  |Item)..8'. (!(Me|
00005c10  6e 75 2b 32 38 2b 28 32  34 2a 49 74 65 6d 29 29  |nu+28+(24*Item))|
00005c20  20 80 20 31 29 3d 31 20  8c 20 3d b9 0d 18 42 06  | . 1)=1 . =...B.|
00005c30  3d a3 0d 18 4c 05 3a 0d  18 56 19 dd 20 a4 52 65  |=...L.:..V.. .Re|
00005c40  61 64 49 63 6f 6e 28 57  6e 64 77 2c 49 63 6e 29  |adIcon(Wndw,Icn)|
00005c50  0d 18 60 20 f4 20 52 65  61 64 20 6e 75 6d 65 72  |..` . Read numer|
00005c60  69 63 20 76 61 6c 75 65  20 6f 66 20 69 63 6f 6e  |ic value of icon|
00005c70  0d 18 6a 3a 42 6c 6f 63  6b 21 30 3d 57 6e 64 77  |..j:Block!0=Wndw|
00005c80  3a 42 6c 6f 63 6b 21 34  3d 49 63 6e 3a c8 99 20  |:Block!4=Icn:.. |
00005c90  22 57 69 6d 70 5f 47 65  74 49 63 6f 6e 53 74 61  |"Wimp_GetIconSta|
00005ca0  74 65 22 2c 2c 42 6c 6f  63 6b 0d 18 74 13 3d bb  |te",,Block..t.=.|
00005cb0  28 24 28 42 6c 6f 63 6b  21 32 38 29 29 0d 18 7e  |($(Block!28))..~|
00005cc0  05 3a 0d 18 88 1c dd 20  a4 52 65 61 64 49 63 6f  |.:..... .ReadIco|
00005cd0  6e 53 74 72 28 57 6e 64  77 2c 49 63 6e 29 0d 18  |nStr(Wndw,Icn)..|
00005ce0  92 1f f4 20 52 65 61 64  20 73 74 72 69 6e 67 20  |... Read string |
00005cf0  76 61 6c 75 65 20 6f 66  20 69 63 6f 6e 0d 18 9c  |value of icon...|
00005d00  3a 42 6c 6f 63 6b 21 30  3d 57 6e 64 77 3a 42 6c  |:Block!0=Wndw:Bl|
00005d10  6f 63 6b 21 34 3d 49 63  6e 3a c8 99 20 22 57 69  |ock!4=Icn:.. "Wi|
00005d20  6d 70 5f 47 65 74 49 63  6f 6e 53 74 61 74 65 22  |mp_GetIconState"|
00005d30  2c 2c 42 6c 6f 63 6b 0d  18 a6 10 3d 24 28 42 6c  |,,Block....=$(Bl|
00005d40  6f 63 6b 21 32 38 29 0d  18 b0 05 3a 0d 18 ba 1a  |ock!28)....:....|
00005d50  dd 20 a4 4d 6f 64 65 49  6e 66 6f 28 76 61 72 24  |. .ModeInfo(var$|
00005d60  2c 6d 6f 64 65 29 0d 18  c4 29 f4 20 55 73 65 20  |,mode)...). Use |
00005d70  6d 6f 64 65 3d 2d 31 20  66 6f 72 20 63 75 72 72  |mode=-1 for curr|
00005d80  65 6e 74 20 73 63 72 65  65 6e 20 6d 6f 64 65 0d  |ent screen mode.|
00005d90  18 ce 0d c8 8e 20 76 61  72 24 20 ca 0d 18 d8 3a  |..... var$ ....:|
00005da0  20 20 c9 20 22 58 50 69  78 65 6c 73 22 3a c8 99  |  . "XPixels":..|
00005db0  20 22 4f 53 5f 52 65 61  64 4d 6f 64 65 56 61 72  | "OS_ReadModeVar|
00005dc0  69 61 62 6c 65 22 2c 6d  6f 64 65 2c 31 31 20 b8  |iable",mode,11 .|
00005dd0  20 2c 2c 76 61 72 0d 18  e2 3a 20 20 c9 20 22 59  | ,,var...:  . "Y|
00005de0  50 69 78 65 6c 73 22 3a  c8 99 20 22 4f 53 5f 52  |Pixels":.. "OS_R|
00005df0  65 61 64 4d 6f 64 65 56  61 72 69 61 62 6c 65 22  |eadModeVariable"|
00005e00  2c 6d 6f 64 65 2c 31 32  20 b8 20 2c 2c 76 61 72  |,mode,12 . ,,var|
00005e10  0d 18 ec 36 20 20 c9 20  22 4e 43 6f 6c 22 3a c8  |...6  . "NCol":.|
00005e20  99 20 22 4f 53 5f 52 65  61 64 4d 6f 64 65 56 61  |. "OS_ReadModeVa|
00005e30  72 69 61 62 6c 65 22 2c  6d 6f 64 65 2c 33 20 b8  |riable",mode,3 .|
00005e40  20 2c 2c 76 61 72 0d 18  f6 3c 20 20 c9 20 22 58  | ,,var...<  . "X|
00005e50  45 69 67 46 61 63 74 6f  72 22 3a c8 99 20 22 4f  |EigFactor":.. "O|
00005e60  53 5f 52 65 61 64 4d 6f  64 65 56 61 72 69 61 62  |S_ReadModeVariab|
00005e70  6c 65 22 2c 6d 6f 64 65  2c 34 20 b8 20 2c 2c 76  |le",mode,4 . ,,v|
00005e80  61 72 0d 19 00 3c 20 20  c9 20 22 59 45 69 67 46  |ar...<  . "YEigF|
00005e90  61 63 74 6f 72 22 3a c8  99 20 22 4f 53 5f 52 65  |actor":.. "OS_Re|
00005ea0  61 64 4d 6f 64 65 56 61  72 69 61 62 6c 65 22 2c  |adModeVariable",|
00005eb0  6d 6f 64 65 2c 35 20 b8  20 2c 2c 76 61 72 0d 19  |mode,5 . ,,var..|
00005ec0  0a 3f 20 20 c9 20 22 42  50 50 22 3a c8 99 20 22  |.?  . "BPP":.. "|
00005ed0  4f 53 5f 52 65 61 64 4d  6f 64 65 56 61 72 69 61  |OS_ReadModeVaria|
00005ee0  62 6c 65 22 2c 6d 6f 64  65 2c 39 20 b8 20 2c 2c  |ble",mode,9 . ,,|
00005ef0  76 61 72 3a 76 61 72 3d  32 5e 76 61 72 0d 19 14  |var:var=2^var...|
00005f00  36 20 20 7f 20 76 61 72  3d 2d 31 3a f4 20 46 61  |6  . var=-1:. Fa|
00005f10  6c 6c 2d 74 68 72 6f 75  67 68 20 66 6f 72 20 61  |ll-through for a|
00005f20  20 66 61 75 6c 74 79 20  69 6e 70 75 74 20 76 61  | faulty input va|
00005f30  6c 75 65 0d 19 1e 05 cb  0d 19 28 08 3d 76 61 72  |lue.......(.=var|
00005f40  0d 19 32 05 3a 0d 19 3c  2b dd 20 f2 55 70 64 61  |..2.:..<+. .Upda|
00005f50  74 65 49 63 6f 6e 46 6f  72 4d 6f 64 65 28 41 70  |teIconForMode(Ap|
00005f60  70 6e 61 6d 65 24 2c 57  6e 64 77 2c 49 63 6e 29  |pname$,Wndw,Icn)|
00005f70  0d 19 46 4e f4 20 54 68  69 73 20 70 72 6f 63 65  |..FN. This proce|
00005f80  64 75 72 65 20 72 65 71  75 69 72 65 73 20 74 68  |dure requires th|
00005f90  61 74 20 41 4c 4c 20 74  68 65 20 69 63 6f 6e 20  |at ALL the icon |
00005fa0  73 70 72 69 74 65 73 20  61 72 65 20 64 65 66 69  |sprites are defi|
00005fb0  6e 65 64 20 69 6e 20 6d  6f 64 65 20 32 30 0d 19  |ned in mode 20..|
00005fc0  50 4e f4 20 6f 72 20 6d  6f 64 65 20 32 37 20 28  |PN. or mode 27 (|
00005fd0  77 68 69 63 68 20 69 73  20 65 71 75 69 76 61 6c  |which is equival|
00005fe0  65 6e 74 29 20 77 69 74  68 20 61 20 6d 61 73 6b  |ent) with a mask|
00005ff0  20 62 75 74 20 6e 6f 20  70 61 6c 65 74 74 65 2e  | but no palette.|
00006000  20 54 68 65 79 20 73 68  6f 75 6c 64 0d 19 5a 4e  | They should..ZN|
00006010  f4 20 73 74 69 6c 6c 20  61 70 70 65 61 72 20 74  |. still appear t|
00006020  6f 20 68 61 76 65 20 74  68 65 20 65 78 70 65 63  |o have the expec|
00006030  74 65 64 20 72 65 73 6f  6c 75 74 69 6f 6e 73 20  |ted resolutions |
00006040  61 6e 64 20 6e 75 6d 62  65 72 20 6f 66 20 63 6f  |and number of co|
00006050  6c 6f 75 72 73 2c 20 69  2e 65 0d 19 64 4e f4 20  |lours, i.e..dN. |
00006060  21 53 70 72 69 74 65 73  32 33 3a 20 74 77 6f 20  |!Sprites23: two |
00006070  63 6f 6c 6f 75 72 73 2c  20 68 69 67 68 20 72 65  |colours, high re|
00006080  73 6f 6c 75 74 69 6f 6e  2c 20 21 53 70 72 69 74  |solution, !Sprit|
00006090  65 73 20 28 61 63 74 75  61 6c 6c 79 20 21 53 70  |es (actually !Sp|
000060a0  72 69 74 65 73 32 34 29  0d 19 6e 4c f4 20 61 74  |rites24)..nL. at|
000060b0  20 6d 6f 64 65 20 31 32  20 72 65 73 6f 6c 75 74  | mode 12 resolut|
000060c0  69 6f 6e 20 28 64 6f 75  62 6c 65 20 68 65 69 67  |ion (double heig|
000060d0  68 74 20 70 69 78 65 6c  73 29 20 69 6e 20 31 36  |ht pixels) in 16|
000060e0  20 63 6f 6c 6f 75 72 73  2c 20 61 6e 64 20 6e 6f  | colours, and no|
000060f0  72 6d 61 6c 0d 19 78 4c  f4 20 6d 6f 64 65 20 32  |rmal..xL. mode 2|
00006100  30 20 72 65 73 6f 6c 75  74 69 6f 6e 2c 20 31 36  |0 resolution, 16|
00006110  20 63 6f 6c 6f 75 72 73  20 66 6f 72 20 74 68 65  | colours for the|
00006120  20 21 53 70 72 69 74 65  73 32 32 20 69 63 6f 6e  | !Sprites22 icon|
00006130  2e 20 49 66 20 74 68 69  73 20 69 73 20 6e 6f 74  |. If this is not|
00006140  0d 19 82 49 f4 20 61 64  68 65 72 65 64 20 74 6f  |...I. adhered to|
00006150  2c 20 74 68 65 6e 20 6d  65 6d 6f 72 79 20 73 68  |, then memory sh|
00006160  6f 72 74 61 67 65 20 65  72 72 6f 72 73 20 6d 61  |ortage errors ma|
00006170  79 20 6f 63 63 75 72 20  6f 6e 20 61 20 6d 6f 64  |y occur on a mod|
00006180  65 20 63 68 61 6e 67 65  2e 0d 19 8c 13 45 78 74  |e change.....Ext|
00006190  65 6e 73 69 6f 6e 24 3d  22 32 34 22 0d 19 96 24  |ension$="24"...$|
000061a0  e7 20 a4 4d 6f 64 65 49  6e 66 6f 28 22 59 45 69  |. .ModeInfo("YEi|
000061b0  67 46 61 63 74 6f 72 22  2c 2d 31 29 3c 32 20 8c  |gFactor",-1)<2 .|
000061c0  0d 19 a0 20 20 20 e7 20  a4 4d 6f 64 65 49 6e 66  |...   . .ModeInf|
000061d0  6f 28 22 4e 43 6f 6c 22  2c 2d 31 29 3e 32 20 8c  |o("NCol",-1)>2 .|
000061e0  0d 19 aa 17 20 20 20 20  45 78 74 65 6e 73 69 6f  |....    Extensio|
000061f0  6e 24 3d 22 32 32 22 0d  19 b4 07 20 20 cc 0d 19  |n$="22"....  ...|
00006200  be 17 20 20 20 20 45 78  74 65 6e 73 69 6f 6e 24  |..    Extension$|
00006210  3d 22 32 33 22 0d 19 c8  07 20 20 cd 0d 19 d2 05  |="23"....  .....|
00006220  cd 0d 19 dc 2a c8 99 20  22 57 69 6d 70 5f 42 61  |....*.. "Wimp_Ba|
00006230  73 65 4f 66 53 70 72 69  74 65 73 22 20 b8 20 2c  |seOfSprites" . ,|
00006240  69 63 6f 6e 73 70 72 69  74 65 25 0d 19 e6 45 c8  |iconsprite%...E.|
00006250  99 20 22 4f 53 5f 53 70  72 69 74 65 4f 70 22 2c  |. "OS_SpriteOp",|
00006260  32 35 36 2b 32 35 2c 69  63 6f 6e 73 70 72 69 74  |256+25,iconsprit|
00006270  65 25 2c 41 70 70 6e 61  6d 65 24 3a f4 20 44 65  |e%,Appname$:. De|
00006280  6c 65 74 65 20 69 63 6f  6e 20 73 70 72 69 74 65  |lete icon sprite|
00006290  0d 19 f0 3d f4 20 54 68  65 20 66 6f 6c 6c 6f 77  |...=. The follow|
000062a0  69 6e 67 20 74 68 72 65  65 20 6c 69 6e 65 73 20  |ing three lines |
000062b0  61 73 73 75 6d 65 20 61  20 6d 61 73 6b 20 62 75  |assume a mask bu|
000062c0  74 20 6e 6f 20 70 61 6c  65 74 74 65 3a 0d 19 fa  |t no palette:...|
000062d0  62 c8 99 20 22 4f 53 5f  53 70 72 69 74 65 4f 70  |b.. "OS_SpriteOp|
000062e0  22 2c 32 35 36 2b 34 30  2c 53 70 72 69 74 65 73  |",256+40,Sprites|
000062f0  2c 41 70 70 6e 61 6d 65  24 2b 45 78 74 65 6e 73  |,Appname$+Extens|
00006300  69 6f 6e 24 20 b8 20 2c  2c 2c 77 2c 68 2c 2c 6d  |ion$ . ,,,w,h,,m|
00006310  6f 64 65 3a f4 20 47 65  74 20 69 6e 66 6f 20 61  |ode:. Get info a|
00006320  62 6f 75 74 20 6e 65 77  20 73 70 72 69 74 65 0d  |bout new sprite.|
00006330  1a 04 5c c8 99 20 22 4f  53 5f 53 70 72 69 74 65  |..\.. "OS_Sprite|
00006340  4f 70 22 2c 32 35 36 2b  31 35 2c 69 63 6f 6e 73  |Op",256+15,icons|
00006350  70 72 69 74 65 25 2c 41  70 70 6e 61 6d 65 24 2c  |prite%,Appname$,|
00006360  30 2c 77 2c 68 2c 6d 6f  64 65 3a f4 20 43 72 65  |0,w,h,mode:. Cre|
00006370  61 74 65 20 72 65 70 6c  61 63 65 6d 65 6e 74 20  |ate replacement |
00006380  69 63 6f 6e 20 73 70 72  69 74 65 0d 1a 0e 3e c8  |icon sprite...>.|
00006390  99 20 22 4f 53 5f 53 70  72 69 74 65 4f 70 22 2c  |. "OS_SpriteOp",|
000063a0  32 35 36 2b 32 39 2c 69  63 6f 6e 73 70 72 69 74  |256+29,iconsprit|
000063b0  65 25 2c 41 70 70 6e 61  6d 65 24 3a f4 20 43 72  |e%,Appname$:. Cr|
000063c0  65 61 74 65 20 6d 61 73  6b 0d 1a 18 07 20 20 3a  |eate mask....  :|
000063d0  0d 1a 22 2d f4 20 50 61  69 6e 74 20 73 70 72 69  |.."-. Paint spri|
000063e0  74 65 20 6d 61 73 6b 20  69 6e 74 6f 20 69 63 6f  |te mask into ico|
000063f0  6e 73 70 72 69 74 65 20  6d 61 73 6b 3a 0d 1a 2c  |nsprite mask:..,|
00006400  51 c8 99 20 22 4f 53 5f  53 70 72 69 74 65 4f 70  |Q.. "OS_SpriteOp|
00006410  22 2c 32 35 36 2b 36 31  2c 69 63 6f 6e 73 70 72  |",256+61,iconspr|
00006420  69 74 65 25 2c 41 70 70  6e 61 6d 65 24 2c 30 20  |ite%,Appname$,0 |
00006430  b8 20 72 30 2c 72 31 2c  72 32 2c 72 33 3a f4 20  |. r0,r1,r2,r3:. |
00006440  4f 75 74 70 75 74 20 74  6f 20 6d 61 73 6b 0d 1a  |Output to mask..|
00006450  36 55 c8 99 20 22 4f 53  5f 53 70 72 69 74 65 4f  |6U.. "OS_SpriteO|
00006460  70 22 2c 32 35 36 2b 34  39 2c 53 70 72 69 74 65  |p",256+49,Sprite|
00006470  73 2c 41 70 70 6e 61 6d  65 24 2b 45 78 74 65 6e  |s,Appname$+Exten|
00006480  73 69 6f 6e 24 2c 30 2c  30 3a f4 20 50 61 69 6e  |sion$,0,0:. Pain|
00006490  74 20 6d 61 73 6b 20 66  72 6f 6d 20 53 70 72 69  |t mask from Spri|
000064a0  74 65 73 0d 1a 40 37 e6  20 34 2c 31 32 38 3a da  |tes..@7. 4,128:.|
000064b0  3a f4 20 49 6e 76 65 72  74 20 74 6f 20 6d 61 6b  |:. Invert to mak|
000064c0  65 20 6d 61 73 6b 20 74  68 65 20 72 69 67 68 74  |e mask the right|
000064d0  20 77 61 79 20 72 6f 75  6e 64 0d 1a 4a 36 c8 99  | way round..J6..|
000064e0  20 22 4f 53 5f 53 70 72  69 74 65 4f 70 22 2c 72  | "OS_SpriteOp",r|
000064f0  30 2c 72 31 2c 72 32 2c  72 33 3a f4 20 52 65 73  |0,r1,r2,r3:. Res|
00006500  65 74 20 73 63 72 65 65  6e 20 6f 75 74 70 75 74  |et screen output|
00006510  0d 1a 54 07 20 20 3a 0d  1a 5e 23 f4 20 50 61 69  |..T.  :..^#. Pai|
00006520  6e 74 20 73 70 72 69 74  65 20 69 6e 74 6f 20 69  |nt sprite into i|
00006530  63 6f 6e 73 70 72 69 74  65 3a 0d 1a 68 5c c8 99  |consprite:..h\..|
00006540  20 22 4f 53 5f 53 70 72  69 74 65 4f 70 22 2c 32  | "OS_SpriteOp",2|
00006550  35 36 2b 36 30 2c 69 63  6f 6e 73 70 72 69 74 65  |56+60,iconsprite|
00006560  25 2c 41 70 70 6e 61 6d  65 24 2c 30 20 b8 20 72  |%,Appname$,0 . r|
00006570  30 2c 72 31 2c 72 32 2c  72 33 3a f4 20 4f 75 74  |0,r1,r2,r3:. Out|
00006580  70 75 74 20 74 6f 20 6e  65 77 20 69 63 6f 6e 20  |put to new icon |
00006590  73 70 72 69 74 65 0d 1a  72 57 c8 99 20 22 4f 53  |sprite..rW.. "OS|
000065a0  5f 53 70 72 69 74 65 4f  70 22 2c 32 35 36 2b 33  |_SpriteOp",256+3|
000065b0  34 2c 53 70 72 69 74 65  73 2c 41 70 70 6e 61 6d  |4,Sprites,Appnam|
000065c0  65 24 2b 45 78 74 65 6e  73 69 6f 6e 24 2c 30 2c  |e$+Extension$,0,|
000065d0  30 2c 38 3a f4 20 50 61  69 6e 74 20 63 6f 70 79  |0,8:. Paint copy|
000065e0  20 66 72 6f 6d 20 53 70  72 69 74 65 73 0d 1a 7c  | from Sprites..||
000065f0  36 c8 99 20 22 4f 53 5f  53 70 72 69 74 65 4f 70  |6.. "OS_SpriteOp|
00006600  22 2c 72 30 2c 72 31 2c  72 32 2c 72 33 3a f4 20  |",r0,r1,r2,r3:. |
00006610  52 65 73 65 74 20 73 63  72 65 65 6e 20 6f 75 74  |Reset screen out|
00006620  70 75 74 0d 1a 86 3a 42  6c 6f 63 6b 21 30 3d 57  |put...:Block!0=W|
00006630  6e 64 77 3a 42 6c 6f 63  6b 21 34 3d 49 63 6e 3a  |ndw:Block!4=Icn:|
00006640  c8 99 20 22 57 69 6d 70  5f 47 65 74 49 63 6f 6e  |.. "Wimp_GetIcon|
00006650  53 74 61 74 65 22 2c 2c  42 6c 6f 63 6b 0d 1a 90  |State",,Block...|
00006660  45 42 6c 6f 63 6b 21 38  3d 30 3a 42 6c 6f 63 6b  |EBlock!8=0:Block|
00006670  21 31 32 3d 30 3a c8 99  20 22 57 69 6d 70 5f 53  |!12=0:.. "Wimp_S|
00006680  65 74 49 63 6f 6e 53 74  61 74 65 22 2c 2c 42 6c  |etIconState",,Bl|
00006690  6f 63 6b 3a f4 20 52 65  2d 70 6c 6f 74 20 69 63  |ock:. Re-plot ic|
000066a0  6f 6e 0d 1a 9a 05 e1 0d  1a a4 05 3a 0d 1a ae d8  |on.........:....|
000066b0  dd 20 a4 43 72 65 61 74  65 57 69 6e 64 6f 77 28  |. .CreateWindow(|
000066c0  6d 69 6e 58 2c 6d 69 6e  59 2c 6d 61 78 58 2c 6d  |minX,minY,maxX,m|
000066d0  61 78 59 2c 58 6f 66 66  73 65 74 2c 59 6f 66 66  |axY,Xoffset,Yoff|
000066e0  73 65 74 2c 48 61 6e 64  6c 65 2c 46 6c 61 67 73  |set,Handle,Flags|
000066f0  2c 54 69 74 6c 65 43 6f  6c 2c 54 69 74 6c 65 42  |,TitleCol,TitleB|
00006700  61 63 6b 43 6f 6c 2c 57  6f 72 6b 43 6f 6c 2c 57  |ackCol,WorkCol,W|
00006710  6f 72 6b 42 61 63 6b 43  6f 6c 2c 53 63 72 6f 6c  |orkBackCol,Scrol|
00006720  6c 43 6f 6c 2c 53 6c 69  64 65 72 43 6f 6c 2c 49  |lCol,SliderCol,I|
00006730  6e 70 75 74 43 6f 6c 2c  57 6d 69 6e 58 2c 57 6d  |nputCol,WminX,Wm|
00006740  69 6e 59 2c 57 6d 61 78  58 2c 57 6d 61 78 59 2c  |inY,WmaxX,WmaxY,|
00006750  54 69 74 6c 65 46 6c 61  67 73 2c 57 62 75 74 74  |TitleFlags,Wbutt|
00006760  6f 6e 2c 53 70 72 69 74  65 50 6f 69 6e 74 2c 4d  |on,SpritePoint,M|
00006770  69 6e 57 2c 4d 69 6e 48  2c 54 69 74 6c 65 44 61  |inW,MinH,TitleDa|
00006780  74 61 24 29 0d 1a b8 5a  42 6c 6f 63 6b 21 30 3d  |ta$)...ZBlock!0=|
00006790  6d 69 6e 58 3a 42 6c 6f  63 6b 21 34 3d 6d 69 6e  |minX:Block!4=min|
000067a0  59 3a 42 6c 6f 63 6b 21  38 3d 6d 61 78 58 3a 42  |Y:Block!8=maxX:B|
000067b0  6c 6f 63 6b 21 31 32 3d  6d 61 78 59 3a 42 6c 6f  |lock!12=maxY:Blo|
000067c0  63 6b 21 31 36 3d 58 6f  66 66 73 65 74 3a 42 6c  |ck!16=Xoffset:Bl|
000067d0  6f 63 6b 21 32 30 3d 59  6f 66 66 73 65 74 0d 1a  |ock!20=Yoffset..|
000067e0  c2 22 42 6c 6f 63 6b 21  32 34 3d 48 61 6e 64 6c  |."Block!24=Handl|
000067f0  65 3a 42 6c 6f 63 6b 21  32 38 3d 46 6c 61 67 73  |e:Block!28=Flags|
00006800  0d 1a cc 51 42 6c 6f 63  6b 3f 33 32 3d 54 69 74  |...QBlock?32=Tit|
00006810  6c 65 43 6f 6c 3a 42 6c  6f 63 6b 3f 33 33 3d 54  |leCol:Block?33=T|
00006820  69 74 6c 65 42 61 63 6b  43 6f 6c 3a 42 6c 6f 63  |itleBackCol:Bloc|
00006830  6b 3f 33 34 3d 57 6f 72  6b 43 6f 6c 3a 42 6c 6f  |k?34=WorkCol:Blo|
00006840  63 6b 3f 33 35 3d 57 6f  72 6b 42 61 63 6b 43 6f  |ck?35=WorkBackCo|
00006850  6c 0d 1a d6 46 42 6c 6f  63 6b 3f 33 36 3d 53 63  |l...FBlock?36=Sc|
00006860  72 6f 6c 6c 43 6f 6c 3a  42 6c 6f 63 6b 3f 33 37  |rollCol:Block?37|
00006870  3d 53 6c 69 64 65 72 43  6f 6c 3a 42 6c 6f 63 6b  |=SliderCol:Block|
00006880  3f 33 38 3d 49 6e 70 75  74 43 6f 6c 3a 42 6c 6f  |?38=InputCol:Blo|
00006890  63 6b 3f 33 39 3d 30 0d  1a e0 3f 42 6c 6f 63 6b  |ck?39=0...?Block|
000068a0  21 34 30 3d 57 6d 69 6e  58 3a 42 6c 6f 63 6b 21  |!40=WminX:Block!|
000068b0  34 34 3d 57 6d 69 6e 59  3a 42 6c 6f 63 6b 21 34  |44=WminY:Block!4|
000068c0  38 3d 57 6d 61 78 58 3a  42 6c 6f 63 6b 21 35 32  |8=WmaxX:Block!52|
000068d0  3d 57 6d 61 78 59 0d 1a  ea 3d 42 6c 6f 63 6b 21  |=WmaxY...=Block!|
000068e0  35 36 3d 54 69 74 6c 65  46 6c 61 67 73 3a 42 6c  |56=TitleFlags:Bl|
000068f0  6f 63 6b 21 36 30 3d 57  62 75 74 74 6f 6e 3a 42  |ock!60=Wbutton:B|
00006900  6c 6f 63 6b 21 36 34 3d  53 70 72 69 74 65 50 6f  |lock!64=SpritePo|
00006910  69 6e 74 0d 1a f4 5f 42  6c 6f 63 6b 21 36 38 3d  |int..._Block!68=|
00006920  28 4d 69 6e 48 3c 3c 31  35 29 2b 4d 69 6e 57 20  |(MinH<<15)+MinW |
00006930  3a 3a 3a 3a 3a 3a 3a 3a  3a 3a 3a 3a 20 f4 20 30  |:::::::::::: . 0|
00006940  2c 30 20 73 65 74 73 20  74 68 65 20 6d 69 6e 69  |,0 sets the mini|
00006950  6d 75 6d 20 77 69 6e 64  6f 77 20 77 69 74 68 20  |mum window with |
00006960  74 6f 20 74 68 65 20 74  69 74 6c 65 20 77 69 64  |to the title wid|
00006970  74 68 0d 1a fe 3e 24 28  42 6c 6f 63 6b 2b 37 32  |th...>$(Block+72|
00006980  29 3d 54 69 74 6c 65 44  61 74 61 24 3a 42 6c 6f  |)=TitleData$:Blo|
00006990  63 6b 21 38 34 3d 30 20  3a 3a 3a 20 f4 20 4e 6f  |ck!84=0 ::: . No|
000069a0  20 69 63 6f 6e 73 20 69  6e 69 74 69 61 6c 6c 79  | icons initially|
000069b0  0d 1b 08 30 c8 99 20 22  57 69 6d 70 5f 43 72 65  |...0.. "Wimp_Cre|
000069c0  61 74 65 57 69 6e 64 6f  77 22 2c 2c 42 6c 6f 63  |ateWindow",,Bloc|
000069d0  6b 20 b8 20 57 69 6e 64  6f 77 48 61 6e 64 6c 65  |k . WindowHandle|
000069e0  0d 1b 12 11 3d 57 69 6e  64 6f 77 48 61 6e 64 6c  |....=WindowHandl|
000069f0  65 0d 1b 1c 05 3a 0d 1b  26 42 dd 20 a4 43 72 65  |e....:..&B. .Cre|
00006a00  61 74 65 49 63 6f 6e 28  57 69 6e 64 6f 77 48 61  |ateIcon(WindowHa|
00006a10  6e 64 6c 65 2c 6d 69 6e  58 2c 6d 69 6e 59 2c 6d  |ndle,minX,minY,m|
00006a20  61 78 58 2c 6d 61 78 59  2c 46 6c 61 67 73 2c 49  |axX,maxY,Flags,I|
00006a30  63 6f 6e 44 61 74 61 29  0d 1b 30 18 42 6c 6f 63  |conData)..0.Bloc|
00006a40  6b 21 30 3d 57 69 6e 64  6f 77 48 61 6e 64 6c 65  |k!0=WindowHandle|
00006a50  0d 1b 3a 48 42 6c 6f 63  6b 21 34 3d 6d 69 6e 58  |..:HBlock!4=minX|
00006a60  3a 42 6c 6f 63 6b 21 38  3d 6d 69 6e 59 3a 42 6c  |:Block!8=minY:Bl|
00006a70  6f 63 6b 21 31 32 3d 6d  61 78 58 3a 42 6c 6f 63  |ock!12=maxX:Bloc|
00006a80  6b 21 31 36 3d 6d 61 78  59 3a 42 6c 6f 63 6b 21  |k!16=maxY:Block!|
00006a90  32 30 3d 46 6c 61 67 73  0d 1b 44 3f 42 6c 6f 63  |20=Flags..D?Bloc|
00006aa0  6b 21 32 34 3d 49 63 6f  6e 44 61 74 61 21 30 3a  |k!24=IconData!0:|
00006ab0  42 6c 6f 63 6b 21 32 38  3d 49 63 6f 6e 44 61 74  |Block!28=IconDat|
00006ac0  61 21 34 3a 42 6c 6f 63  6b 21 33 32 3d 49 63 6f  |a!4:Block!32=Ico|
00006ad0  6e 44 61 74 61 21 38 0d  1b 4e 2c c8 99 20 22 57  |nData!8..N,.. "W|
00006ae0  69 6d 70 5f 43 72 65 61  74 65 49 63 6f 6e 22 2c  |imp_CreateIcon",|
00006af0  2c 42 6c 6f 63 6b 20 b8  20 49 63 6f 6e 48 61 6e  |,Block . IconHan|
00006b00  64 6c 65 0d 1b 58 0f 3d  49 63 6f 6e 48 61 6e 64  |dle..X.=IconHand|
00006b10  6c 65 0d 1b 62 05 3a 0d  1b 6c 11 dd 20 f2 49 6e  |le..b.:..l.. .In|
00006b20  69 74 69 61 6c 69 73 65  0d 1b 76 2d 41 70 70 53  |itialise..v-AppS|
00006b30  69 7a 65 3d 93 2d 26 38  30 30 30 3a 4d 69 6e 53  |ize=.-&8000:MinS|
00006b40  69 7a 65 3d 41 70 70 53  69 7a 65 3a 53 6c 6f 74  |ize=AppSize:Slot|
00006b50  45 6e 64 3d 93 0d 1b 80  05 e1 0d 1b 8a 05 3a 0d  |End=..........:.|
00006b60  1b 94 1f dd 20 a4 41 6c  6c 6f 63 61 74 65 4d 65  |.... .AllocateMe|
00006b70  6d 6f 72 79 28 52 65 71  75 69 72 65 64 29 0d 1b  |mory(Required)..|
00006b80  9e 1a 53 6c 6f 74 53 69  7a 65 3d a4 53 6c 6f 74  |..SlotSize=.Slot|
00006b90  53 69 7a 65 28 2d 31 29  0d 1b a8 92 e7 20 53 6c  |Size(-1)..... Sl|
00006ba0  6f 74 53 69 7a 65 3c 52  65 71 75 69 72 65 64 20  |otSize<Required |
00006bb0  8c 20 4e 65 77 53 69 7a  65 3d a4 53 6c 6f 74 53  |. NewSize=.SlotS|
00006bc0  69 7a 65 28 52 65 71 75  69 72 65 64 29 3a e7 20  |ize(Required):. |
00006bd0  4e 65 77 53 69 7a 65 3c  52 65 71 75 69 72 65 64  |NewSize<Required|
00006be0  20 8c 20 53 6c 6f 74 53  69 7a 65 3d a4 53 6c 6f  | . SlotSize=.Slo|
00006bf0  74 53 69 7a 65 28 41 70  70 53 69 7a 65 29 3a 3d  |tSize(AppSize):=|
00006c00  30 3a f4 20 52 65 74 75  72 6e 73 2c 20 69 6e 64  |0:. Returns, ind|
00006c10  69 63 61 74 69 6e 67 20  6d 65 6d 6f 72 79 20 6e  |icating memory n|
00006c20  6f 74 20 63 6c 61 69 6d  65 64 0d 1b b2 36 e7 20  |ot claimed...6. |
00006c30  53 6c 6f 74 53 69 7a 65  3e 52 65 71 75 69 72 65  |SlotSize>Require|
00006c40  64 20 8c 20 53 6c 6f 74  53 69 7a 65 3d a4 53 6c  |d . SlotSize=.Sl|
00006c50  6f 74 53 69 7a 65 28 52  65 71 75 69 72 65 64 29  |otSize(Required)|
00006c60  0d 1b bc 2a 3d 53 6c 6f  74 53 69 7a 65 3a f4 20  |...*=SlotSize:. |
00006c70  52 65 74 75 72 6e 73 20  77 69 74 68 20 62 79 74  |Returns with byt|
00006c80  65 73 20 63 6c 61 69 6d  65 64 0d 1b c6 05 3a 0d  |es claimed....:.|
00006c90  1b d0 16 dd 20 a4 53 6c  6f 74 53 69 7a 65 28 42  |.... .SlotSize(B|
00006ca0  79 74 65 73 29 0d 1b da  27 c8 99 20 22 57 69 6d  |ytes)...'.. "Wim|
00006cb0  70 5f 53 6c 6f 74 53 69  7a 65 22 2c 42 79 74 65  |p_SlotSize",Byte|
00006cc0  73 2c 2d 31 20 b8 20 42  79 74 65 73 0d 1b e4 0a  |s,-1 . Bytes....|
00006cd0  3d 42 79 74 65 73 0d 1b  ee 05 3a 0d 1b f8 17 dd  |=Bytes....:.....|
00006ce0  20 f2 4d 69 6e 69 6d 69  73 65 57 69 6d 70 53 6c  | .MinimiseWimpSl|
00006cf0  6f 74 0d 1c 02 22 64 75  6d 6d 79 3d a4 41 6c 6c  |ot..."dummy=.All|
00006d00  6f 63 61 74 65 4d 65 6d  6f 72 79 28 4d 69 6e 53  |ocateMemory(MinS|
00006d10  69 7a 65 29 0d 1c 0c 05  e1 0d 1c 16 05 3a 0d 1c  |ize).........:..|
00006d20  20 22 dd 20 f2 43 6c 6f  73 65 46 69 6c 65 49 66  | ". .CloseFileIf|
00006d30  50 6f 73 73 28 46 69 6c  65 48 61 6e 64 6c 65 29  |Poss(FileHandle)|
00006d40  0d 1c 2a 07 ea 20 85 0d  1c 34 26 ee 20 85 20 ea  |..*.. ...4&. . .|
00006d50  20 f7 20 85 3a e1 3a f4  20 55 6e 61 62 6c 65 20  | . .:.:. Unable |
00006d60  74 6f 20 63 6c 6f 73 65  20 66 69 6c 65 0d 1c 3e  |to close file..>|
00006d70  10 d9 23 46 69 6c 65 48  61 6e 64 6c 65 0d 1c 48  |..#FileHandle..H|
00006d80  05 e1 0d 1c 52 05 3a 0d  1c 5c 1e dd 20 a4 46 69  |....R.:..\.. .Fi|
00006d90  6e 64 46 69 6c 65 53 69  7a 65 28 46 69 6c 65 4e  |ndFileSize(FileN|
00006da0  61 6d 65 24 29 0d 1c 66  20 e7 20 46 69 6c 65 4e  |ame$)..f . FileN|
00006db0  61 6d 65 24 3d 22 3c 57  69 6d 70 24 53 63 72 61  |ame$="<Wimp$Scra|
00006dc0  70 3e 22 20 8c 0d 1c 70  3a 20 20 c8 99 20 22 4f  |p>" ...p:  .. "O|
00006dd0  53 5f 46 69 6c 65 22 2c  31 35 2c 46 69 6c 65 4e  |S_File",15,FileN|
00006de0  61 6d 65 24 2c 2c 2c 46  69 6c 65 4e 61 6d 65 24  |ame$,,,FileName$|
00006df0  20 b8 20 2c 2c 2c 2c 46  69 6c 65 53 69 7a 65 0d  | . ,,,,FileSize.|
00006e00  1c 7a 05 cc 0d 1c 84 34  20 20 4e 3d 2d 31 3a f5  |.z.....4  N=-1:.|
00006e10  3a 4e 2b 3d 31 3a fd 20  c1 46 69 6c 65 4e 61 6d  |:N+=1:. .FileNam|
00006e20  65 24 2c a9 28 46 69 6c  65 4e 61 6d 65 24 29 2d  |e$,.(FileName$)-|
00006e30  4e 2c 31 29 3d 22 2e 22  0d 1c 8e 42 20 20 50 61  |N,1)="."...B  Pa|
00006e40  74 68 4e 61 6d 65 24 3d  c0 46 69 6c 65 4e 61 6d  |thName$=.FileNam|
00006e50  65 24 2c a9 28 46 69 6c  65 4e 61 6d 65 24 29 2d  |e$,.(FileName$)-|
00006e60  4e 29 3a 4c 65 61 66 4e  61 6d 65 24 3d c2 46 69  |N):LeafName$=.Fi|
00006e70  6c 65 4e 61 6d 65 24 2c  4e 29 0d 1c 98 3a 20 20  |leName$,N)...:  |
00006e80  c8 99 20 22 4f 53 5f 46  69 6c 65 22 2c 31 33 2c  |.. "OS_File",13,|
00006e90  4c 65 61 66 4e 61 6d 65  24 2c 2c 2c 50 61 74 68  |LeafName$,,,Path|
00006ea0  4e 61 6d 65 24 20 b8 20  2c 2c 2c 2c 46 69 6c 65  |Name$ . ,,,,File|
00006eb0  53 69 7a 65 0d 1c a2 05  cd 0d 1c ac 0d 3d 46 69  |Size.........=Fi|
00006ec0  6c 65 53 69 7a 65 0d 1c  b6 05 3a 0d 1c c0 10 dd  |leSize....:.....|
00006ed0  20 a4 4e 65 78 74 45 6e  74 72 79 0d 1c ca 48 f4  | .NextEntry...H.|
00006ee0  20 47 65 74 73 20 6e 65  78 74 20 65 6e 74 72 79  | Gets next entry|
00006ef0  20 28 63 72 65 61 74 65  64 20 62 79 20 42 50 55  | (created by BPU|
00006f00  54 23 44 61 74 61 2c 41  24 29 20 66 72 6f 6d 20  |T#Data,A$) from |
00006f10  61 20 66 69 6c 65 20 61  73 20 61 20 73 74 72 69  |a file as a stri|
00006f20  6e 67 2e 0d 1c d4 1c f4  20 55 73 65 20 61 73 20  |ng...... Use as |
00006f30  41 24 3d 46 4e 4e 65 78  74 45 6e 74 72 79 2e 0d  |A$=FNNextEntry..|
00006f40  1c de 07 ea 20 85 0d 1c  e8 26 ee 20 85 20 ea 20  |.... ....&. . . |
00006f50  f7 20 85 3a 3d 22 22 3a  f4 20 45 72 72 6f 72 20  |. .:="":. Error |
00006f60  72 65 61 64 69 6e 67 20  66 69 6c 65 0d 1c f2 0e  |reading file....|
00006f70  4e 45 24 3d be 23 44 61  74 61 0d 1c fc 12 c8 95  |NE$=.#Data......|
00006f80  20 c0 4e 45 24 2c 31 29  3d 22 7c 22 0d 1d 06 10  | .NE$,1)="|"....|
00006f90  20 20 4e 45 24 3d be 23  44 61 74 61 0d 1d 10 05  |  NE$=.#Data....|
00006fa0  ce 0d 1d 1a 08 3d 4e 45  24 0d 1d 24 05 3a 0d 1d  |.....=NE$..$.:..|
00006fb0  2e 47 dd 20 f2 44 72 61  67 42 6f 78 28 57 69 6e  |.G. .DragBox(Win|
00006fc0  64 6f 77 48 61 6e 64 6c  65 2c 49 63 6f 6e 48 61  |dowHandle,IconHa|
00006fd0  6e 64 6c 65 2c 44 72 61  67 54 79 70 65 2c 53 70  |ndle,DragType,Sp|
00006fe0  72 69 74 65 41 72 65 61  2c 53 70 72 69 74 65 4e  |riteArea,SpriteN|
00006ff0  61 6d 65 24 29 0d 1d 38  38 42 6c 6f 63 6b 21 30  |ame$)..88Block!0|
00007000  3d 57 69 6e 64 6f 77 48  61 6e 64 6c 65 3a c8 99  |=WindowHandle:..|
00007010  20 22 57 69 6d 70 5f 47  65 74 57 69 6e 64 6f 77  | "Wimp_GetWindow|
00007020  53 74 61 74 65 22 2c 2c  42 6c 6f 63 6b 0d 1d 42  |State",,Block..B|
00007030  20 77 6d 69 6e 78 3d 42  6c 6f 63 6b 21 34 3a 77  | wminx=Block!4:w|
00007040  6d 61 78 79 3d 42 6c 6f  63 6b 21 31 36 0d 1d 4c  |maxy=Block!16..L|
00007050  49 42 6c 6f 63 6b 21 30  3d 57 69 6e 64 6f 77 48  |IBlock!0=WindowH|
00007060  61 6e 64 6c 65 3a 42 6c  6f 63 6b 21 34 3d 49 63  |andle:Block!4=Ic|
00007070  6f 6e 48 61 6e 64 6c 65  3a c8 99 20 22 57 69 6d  |onHandle:.. "Wim|
00007080  70 5f 47 65 74 49 63 6f  6e 53 74 61 74 65 22 2c  |p_GetIconState",|
00007090  2c 42 6c 6f 63 6b 0d 1d  56 3e 69 6d 69 6e 78 3d  |,Block..V>iminx=|
000070a0  42 6c 6f 63 6b 21 38 3a  69 6d 69 6e 79 3d 42 6c  |Block!8:iminy=Bl|
000070b0  6f 63 6b 21 31 32 3a 69  6d 61 78 78 3d 42 6c 6f  |ock!12:imaxx=Blo|
000070c0  63 6b 21 31 36 3a 69 6d  61 78 79 3d 42 6c 6f 63  |ck!16:imaxy=Bloc|
000070d0  6b 21 32 30 0d 1d 60 29  42 6c 6f 63 6b 21 30 3d  |k!20..`)Block!0=|
000070e0  57 69 6e 64 6f 77 48 61  6e 64 6c 65 3a 42 6c 6f  |WindowHandle:Blo|
000070f0  63 6b 21 34 3d 44 72 61  67 54 79 70 65 0d 1d 6a  |ck!4=DragType..j|
00007100  19 42 6c 6f 63 6b 21 38  3d 28 77 6d 69 6e 78 2b  |.Block!8=(wminx+|
00007110  69 6d 69 6e 78 29 0d 1d  74 1a 42 6c 6f 63 6b 21  |iminx)..t.Block!|
00007120  31 32 3d 28 77 6d 61 78  79 2b 69 6d 69 6e 79 29  |12=(wmaxy+iminy)|
00007130  0d 1d 7e 1a 42 6c 6f 63  6b 21 31 36 3d 28 77 6d  |..~.Block!16=(wm|
00007140  69 6e 78 2b 69 6d 61 78  78 29 0d 1d 88 1a 42 6c  |inx+imaxx)....Bl|
00007150  6f 63 6b 21 32 30 3d 28  77 6d 61 78 79 2b 69 6d  |ock!20=(wmaxy+im|
00007160  61 78 79 29 0d 1d 92 19  42 6c 6f 63 6b 21 32 34  |axy)....Block!24|
00007170  3d 31 3a 42 6c 6f 63 6b  21 32 38 3d 31 0d 1d 9c  |=1:Block!28=1...|
00007180  47 42 6c 6f 63 6b 21 33  32 3d 28 a4 4d 6f 64 65  |GBlock!32=(.Mode|
00007190  49 6e 66 6f 28 22 58 70  69 78 65 6c 73 22 2c 2d  |Info("Xpixels",-|
000071a0  31 29 2b 31 29 2a 28 32  5e a4 4d 6f 64 65 49 6e  |1)+1)*(2^.ModeIn|
000071b0  66 6f 28 22 58 45 69 67  46 61 63 74 6f 72 22 2c  |fo("XEigFactor",|
000071c0  2d 31 29 29 0d 1d a6 47  42 6c 6f 63 6b 21 33 36  |-1))...GBlock!36|
000071d0  3d 28 a4 4d 6f 64 65 49  6e 66 6f 28 22 59 70 69  |=(.ModeInfo("Ypi|
000071e0  78 65 6c 73 22 2c 2d 31  29 2b 31 29 2a 28 32 5e  |xels",-1)+1)*(2^|
000071f0  a4 4d 6f 64 65 49 6e 66  6f 28 22 59 45 69 67 46  |.ModeInfo("YEigF|
00007200  61 63 74 6f 72 22 2c 2d  31 29 29 0d 1d b0 13 e7  |actor",-1)).....|
00007210  20 44 72 61 67 41 53 70  72 69 74 65 20 8c 0d 1d  | DragASprite ...|
00007220  ba 45 20 20 c8 99 20 22  44 72 61 67 41 53 70 72  |.E  .. "DragASpr|
00007230  69 74 65 5f 53 74 61 72  74 22 2c 25 31 30 30 30  |ite_Start",%1000|
00007240  30 31 30 31 2c 53 70 72  69 74 65 41 72 65 61 2c  |0101,SpriteArea,|
00007250  53 70 72 69 74 65 4e 61  6d 65 24 2c 42 6c 6f 63  |SpriteName$,Bloc|
00007260  6b 2b 38 0d 1d c4 05 cc  0d 1d ce 1e 20 20 c8 99  |k+8.........  ..|
00007270  20 22 57 69 6d 70 5f 44  72 61 67 42 6f 78 22 2c  | "Wimp_DragBox",|
00007280  2c 42 6c 6f 63 6b 0d 1d  d8 05 cd 0d 1d e2 05 e1  |,Block..........|
00007290  0d 1d ec 05 3a 0d 1d f6  4f f4 20 2d 2d 2d 2d 2d  |....:...O. -----|
000072a0  2d 2d 2d 2d 2d 2d 2d 2d  2d 2d 2d 2d 2d 2d 2d 2d  |----------------|
*
000072e0  2d 2d 2d 2d 0d 1e 00 2f  f4 20 52 6f 75 74 69 6e  |----.../. Routin|
000072f0  65 73 20 63 6f 6d 6d 6f  6e 20 74 6f 20 74 68 65  |es common to the|
00007300  20 4f 6d 6e 69 44 65 73  6b 20 75 74 69 6c 69 74  | OmniDesk utilit|
00007310  69 65 73 0d 1e 0a 4f f4  20 2d 2d 2d 2d 2d 2d 2d  |ies...O. -------|
00007320  2d 2d 2d 2d 2d 2d 2d 2d  2d 2d 2d 2d 2d 2d 2d 2d  |----------------|
*
00007360  2d 2d 0d 1e 14 05 3a 0d  1e 1e 18 dd 20 f2 44 65  |--....:..... .De|
00007370  63 6c 61 72 65 54 6f 4f  6d 6e 69 44 65 73 6b 0d  |clareToOmniDesk.|
00007380  1e 28 2f 42 6c 6f 63 6b  21 30 3d 32 30 38 3a 42  |.(/Block!0=208:B|
00007390  6c 6f 63 6b 21 31 32 3d  30 3a 42 6c 6f 63 6b 21  |lock!12=0:Block!|
000073a0  31 36 3d 55 74 69 6c 44  65 63 6c 61 72 65 0d 1e  |16=UtilDeclare..|
000073b0  32 11 42 6c 6f 63 6b 21  32 30 3d 54 61 73 6b 0d  |2.Block!20=Task.|
000073c0  1e 3c 19 24 28 42 6c 6f  63 6b 2b 32 34 29 3d 54  |.<.$(Block+24)=T|
000073d0  61 73 6b 6e 61 6d 65 24  0d 1e 46 1c 24 28 42 6c  |askname$..F.$(Bl|
000073e0  6f 63 6b 2b 34 34 29 3d  4f 75 72 46 69 6c 65 4e  |ock+44)=OurFileN|
000073f0  61 6d 65 24 0d 1e 50 29  24 28 42 6c 6f 63 6b 2b  |ame$..P)$(Block+|
00007400  35 35 29 3d a4 4f 6d 6e  69 48 65 6c 70 4d 65 73  |55)=.OmniHelpMes|
00007410  73 61 67 65 28 22 43 4c  49 43 4b 22 29 0d 1e 5a  |sage("CLICK")..Z|
00007420  29 24 28 42 6c 6f 63 6b  2b 31 33 32 29 3d a4 4f  |)$(Block+132)=.O|
00007430  6d 6e 69 48 65 6c 70 4d  65 73 73 61 67 65 28 22  |mniHelpMessage("|
00007440  44 52 41 47 22 29 0d 1e  64 2b c8 99 20 22 57 69  |DRAG")..d+.. "Wi|
00007450  6d 70 5f 53 65 6e 64 4d  65 73 73 61 67 65 22 2c  |mp_SendMessage",|
00007460  31 37 2c 42 6c 6f 63 6b  2c 4f 6d 6e 69 44 65 73  |17,Block,OmniDes|
00007470  6b 0d 1e 6e 05 e1 0d 1e  78 05 3a 0d 1e 82 11 dd  |k..n....x.:.....|
00007480  20 f2 53 61 79 47 6f 6f  64 62 79 65 0d 1e 8c 13  | .SayGoodbye....|
00007490  e7 20 4f 6d 6e 69 44 65  73 6b 3c 3e 30 20 8c 0d  |. OmniDesk<>0 ..|
000074a0  1e 96 31 20 20 42 6c 6f  63 6b 21 30 3d 32 34 3a  |..1  Block!0=24:|
000074b0  42 6c 6f 63 6b 21 31 32  3d 30 3a 42 6c 6f 63 6b  |Block!12=0:Block|
000074c0  21 31 36 3d 55 74 69 6c  51 75 69 74 74 69 6e 67  |!16=UtilQuitting|
000074d0  0d 1e a0 13 20 20 42 6c  6f 63 6b 21 32 30 3d 54  |....  Block!20=T|
000074e0  61 73 6b 0d 1e aa 2d 20  20 c8 99 20 22 57 69 6d  |ask...-  .. "Wim|
000074f0  70 5f 53 65 6e 64 4d 65  73 73 61 67 65 22 2c 31  |p_SendMessage",1|
00007500  37 2c 42 6c 6f 63 6b 2c  4f 6d 6e 69 44 65 73 6b  |7,Block,OmniDesk|
00007510  0d 1e b4 05 cd 0d 1e be  21 c8 99 20 22 49 6e 74  |........!.. "Int|
00007520  65 72 66 61 63 65 5f 43  6c 6f 73 65 44 6f 77 6e  |erface_CloseDown|
00007530  22 2c 54 61 73 6b 0d 1e  c8 26 c8 99 20 22 57 69  |",Task...&.. "Wi|
00007540  6d 70 5f 43 6c 6f 73 65  44 6f 77 6e 22 2c 54 61  |mp_CloseDown",Ta|
00007550  73 6b 2c 26 34 42 35 33  34 31 35 34 0d 1e d2 05  |sk,&4B534154....|
00007560  e1 0d 1e dc 05 3a 0d 1e  e6 18 dd 20 a4 52 65 61  |.....:..... .Rea|
00007570  64 53 74 61 72 74 75 70  53 74 72 69 6e 67 0d 1e  |dStartupString..|
00007580  f0 4d f4 20 52 65 74 75  72 6e 73 20 74 61 73 6b  |.M. Returns task|
00007590  20 68 61 6e 64 6c 65 20  6f 66 20 4f 6d 6e 69 44  | handle of OmniD|
000075a0  65 73 6b 20 28 77 68 69  63 68 20 69 73 20 70 61  |esk (which is pa|
000075b0  73 73 65 64 20 69 6e 20  74 68 65 20 63 6f 6d 6d  |ssed in the comm|
000075c0  61 6e 64 20 73 74 72 69  6e 67 29 0d 1e fa 26 f4  |and string)...&.|
000075d0  20 6f 72 20 30 20 69 66  20 6e 6f 74 20 73 74 61  | or 0 if not sta|
000075e0  72 74 65 64 20 62 79 20  4f 6d 6e 69 44 65 73 6b  |rted by OmniDesk|
000075f0  2e 0d 1f 04 1d c8 99 20  22 4f 53 5f 47 65 74 45  |....... "OS_GetE|
00007600  6e 76 22 20 b8 20 43 6f  6d 6d 61 6e 64 24 0d 1f  |nv" . Command$..|
00007610  0e 1b 41 3d a7 43 6f 6d  6d 61 6e 64 24 2c 22 2d  |..A=.Command$,"-|
00007620  53 74 61 72 74 75 70 22  29 0d 1f 18 16 e7 20 41  |Startup")..... A|
00007630  3c 3e 30 20 8c 20 53 74  61 72 74 75 70 3d b9 0d  |<>0 . Startup=..|
00007640  1f 22 18 41 3d a7 43 6f  6d 6d 61 6e 64 24 2c 22  |.".A=.Command$,"|
00007650  2d 45 78 69 74 22 29 0d  1f 2c 13 e7 20 41 3c 3e  |-Exit")..,.. A<>|
00007660  30 20 8c 20 45 78 69 74  3d b9 0d 1f 36 1c 41 3d  |0 . Exit=...6.A=|
00007670  a7 43 6f 6d 6d 61 6e 64  24 2c 22 2d 4f 6d 6e 69  |.Command$,"-Omni|
00007680  44 65 73 6b 22 29 0d 1f  40 0e e7 20 41 3d 30 20  |Desk")..@.. A=0 |
00007690  8c 20 3d 30 0d 1f 4a 16  3d bb 28 c1 43 6f 6d 6d  |. =0..J.=.(.Comm|
000076a0  61 6e 64 24 2c 41 2b 39  29 29 0d 1f 54 05 3a 0d  |and$,A+9))..T.:.|
000076b0  1f 5e 20 dd 20 a4 52 65  61 64 57 69 6e 64 6f 77  |.^ . .ReadWindow|
000076c0  4c 6f 63 61 74 69 6f 6e  28 41 78 69 73 24 29 0d  |Location(Axis$).|
000076d0  1f 68 48 f4 20 52 65 61  64 73 20 77 68 69 63 68  |.hH. Reads which|
000076e0  20 72 61 64 69 6f 20 69  63 6f 6e 20 28 69 66 20  | radio icon (if |
000076f0  61 6e 79 29 20 69 73 20  73 65 6c 65 63 74 65 64  |any) is selected|
00007700  20 69 6e 20 74 68 65 20  57 69 6e 64 6f 77 20 50  | in the Window P|
00007710  6f 73 69 74 69 6f 6e 0d  1f 72 48 f4 20 73 65 6c  |osition..rH. sel|
00007720  65 63 74 6f 72 20 77 69  6e 64 6f 77 20 61 6e 64  |ector window and|
00007730  20 72 65 74 75 72 6e 73  20 74 68 65 20 61 78 69  | returns the axi|
00007740  73 20 63 6f 6f 72 64 69  6e 61 74 65 20 28 74 77  |s coordinate (tw|
00007750  6f 20 63 61 6c 6c 73 20  6e 65 65 64 65 64 29 0d  |o calls needed).|
00007760  1f 7c 25 f4 20 6f 72 20  2d 31 20 66 6f 72 20 6e  |.|%. or -1 for n|
00007770  6f 20 70 6f 73 69 74 69  6f 6e 20 73 65 6c 65 63  |o position selec|
00007780  74 65 64 2e 0d 1f 86 3f  49 63 6f 6e 3d 35 3a f5  |ted....?Icon=5:.|
00007790  3a 49 63 6f 6e 2b 3d 31  3a fd 20 28 a4 53 65 6c  |:Icon+=1:. (.Sel|
000077a0  65 63 74 65 64 53 74 61  74 65 28 4c 6f 63 2c 49  |ectedState(Loc,I|
000077b0  63 6f 6e 29 3d b9 29 20  84 20 28 49 63 6f 6e 3d  |con)=.) . (Icon=|
000077c0  33 31 29 0d 1f 90 2a e7  20 49 63 6f 6e 3d 33 31  |31)...*. Icon=31|
000077d0  20 8c 20 3d 2d 31 3a f4  20 41 6c 6c 20 69 63 6f  | . =-1:. All ico|
000077e0  6e 73 20 64 65 73 65 6c  65 63 74 65 64 0d 1f 9a  |ns deselected...|
000077f0  34 4c 6f 63 61 74 69 6f  6e 3d 2d 31 3a 49 63 6f  |4Location=-1:Ico|
00007800  6e 2d 3d 36 3a f4 20 42  72 69 6e 67 20 69 63 6f  |n-=6:. Bring ico|
00007810  6e 20 69 6e 74 6f 20 72  61 6e 67 65 20 30 2d 31  |n into range 0-1|
00007820  34 0d 1f a4 0e c8 8e 20  41 78 69 73 24 20 ca 0d  |4...... Axis$ ..|
00007830  1f ae 21 20 20 c9 20 22  58 22 2c 22 78 22 3a 4c  |..!  . "X","x":L|
00007840  6f 63 61 74 69 6f 6e 3d  49 63 6f 6e 20 81 20 35  |ocation=Icon . 5|
00007850  0d 1f b8 25 20 20 c9 20  22 59 22 2c 22 79 22 3a  |...%  . "Y","y":|
00007860  4c 6f 63 61 74 69 6f 6e  3d 34 2d 28 49 63 6f 6e  |Location=4-(Icon|
00007870  20 83 20 35 29 0d 1f c2  05 cb 0d 1f cc 0d 3d 4c  | . 5).........=L|
00007880  6f 63 61 74 69 6f 6e 0d  1f d6 05 3a 0d 1f e0 17  |ocation....:....|
00007890  dd 20 f2 43 6c 65 61 6e  55 70 4c 6f 63 57 69 6e  |. .CleanUpLocWin|
000078a0  64 6f 77 0d 1f ea 4f f4  20 4d 61 6b 65 73 20 73  |dow...O. Makes s|
000078b0  75 72 65 20 74 68 61 74  20 6e 6f 6e 65 20 6f 66  |ure that none of|
000078c0  20 74 68 65 20 27 77 69  6e 64 6f 77 27 20 69 63  | the 'window' ic|
000078d0  6f 6e 73 20 69 6e 20 74  68 65 20 4c 6f 63 20 77  |ons in the Loc w|
000078e0  69 6e 64 6f 77 20 69 73  20 73 65 6c 65 63 74 65  |indow is selecte|
000078f0  64 2e 0d 1f f4 09 4e 3d  35 3a f5 0d 1f fe 27 4e  |d.....N=5:....'N|
00007900  2b 3d 31 3a fd 20 4e 3d  33 30 20 84 20 a4 53 65  |+=1:. N=30 . .Se|
00007910  6c 65 63 74 65 64 53 74  61 74 65 28 4c 6f 63 2c  |lectedState(Loc,|
00007920  4e 29 0d 20 08 20 f2 55  70 64 61 74 65 53 65 6c  |N). . .UpdateSel|
00007930  65 63 74 65 64 46 6c 61  67 28 4c 6f 63 2c 4e 2c  |ectedFlag(Loc,N,|
00007940  a3 29 0d 20 12 05 e1 0d  20 1c 05 3a 0d 20 26 4f  |.). .... ..:. &O|
00007950  f4 20 2d 2d 2d 2d 2d 2d  2d 2d 2d 2d 2d 2d 2d 2d  |. --------------|
00007960  2d 2d 2d 2d 2d 2d 2d 2d  2d 2d 2d 2d 2d 2d 2d 2d  |----------------|
*
00007990  2d 2d 2d 2d 2d 2d 2d 2d  2d 2d 2d 0d 20 30 2c f4  |-----------. 0,.|
000079a0  20 53 70 65 63 69 61 6c  20 72 6f 75 74 69 6e 65  | Special routine|
000079b0  73 20 66 6f 72 20 74 68  69 73 20 70 72 6f 67 72  |s for this progr|
000079c0  61 6d 20 6f 6e 6c 79 0d  20 3a 4f f4 20 2d 2d 2d  |am only. :O. ---|
000079d0  2d 2d 2d 2d 2d 2d 2d 2d  2d 2d 2d 2d 2d 2d 2d 2d  |----------------|
*
00007a10  2d 2d 2d 2d 2d 2d 0d 20  44 05 3a 0d 20 4e 1e dd  |------. D.:. N..|
00007a20  20 f2 43 6c 65 61 72 53  70 79 43 61 6c 63 57 69  | .ClearSpyCalcWi|
00007a30  6e 64 6f 77 28 53 70 79  29 0d 20 58 08 f7 20 2b  |ndow(Spy). X.. +|
00007a40  31 0d 20 62 1b dc 20 34  2c 35 2c 31 30 2c 31 31  |1. b.. 4,5,10,11|
00007a50  2c 31 36 2c 31 37 2c 32  32 2c 32 33 0d 20 6c 0d  |,16,17,22,23. l.|
00007a60  e3 20 4e 3d 31 20 b8 20  38 0d 20 76 29 20 20 f3  |. N=1 . 8. v)  .|
00007a70  20 49 63 6f 6e 3a f2 55  70 64 61 74 65 49 63 6f  | Icon:.UpdateIco|
00007a80  6e 28 53 70 79 43 61 6c  63 2c 49 63 6f 6e 2c 22  |n(SpyCalc,Icon,"|
00007a90  22 29 0d 20 80 05 ed 0d  20 8a 0f e3 20 4e 3d 32  |"). .... ... N=2|
00007aa0  36 20 b8 20 34 34 0d 20  94 3d 20 20 42 6c 6f 63  |6 . 44. .=  Bloc|
00007ab0  6b 21 30 3d 53 70 79 43  61 6c 63 3a 42 6c 6f 63  |k!0=SpyCalc:Bloc|
00007ac0  6b 21 34 3d 4e 3a c8 99  20 22 57 69 6d 70 5f 47  |k!4=N:.. "Wimp_G|
00007ad0  65 74 49 63 6f 6e 53 74  61 74 65 22 2c 2c 42 6c  |etIconState",,Bl|
00007ae0  6f 63 6b 0d 20 9e 26 20  20 42 6c 6f 63 6b 21 38  |ock. .&  Block!8|
00007af0  3d 28 30 3c 3c 32 31 29  3a 42 6c 6f 63 6b 21 31  |=(0<<21):Block!1|
00007b00  32 3d 28 31 3c 3c 32 31  29 0d 20 a8 32 20 20 e7  |2=(1<<21). .2  .|
00007b10  20 53 70 79 20 8c 20 42  6c 6f 63 6b 21 38 2b 3d  | Spy . Block!8+=|
00007b20  28 30 3c 3c 31 32 29 3a  8b 20 42 6c 6f 63 6b 21  |(0<<12):. Block!|
00007b30  38 2b 3d 28 31 31 3c 3c  31 32 29 0d 20 b2 19 20  |8+=(11<<12). .. |
00007b40  20 42 6c 6f 63 6b 21 31  32 2b 3d 28 32 35 35 3c  | Block!12+=(255<|
00007b50  3c 31 32 29 0d 20 bc 23  20 20 c8 99 20 22 57 69  |<12). .#  .. "Wi|
00007b60  6d 70 5f 53 65 74 49 63  6f 6e 53 74 61 74 65 22  |mp_SetIconState"|
00007b70  2c 2c 42 6c 6f 63 6b 0d  20 c6 05 ed 0d 20 d0 3c  |,,Block. .... .<|
00007b80  42 6c 6f 63 6b 21 30 3d  53 70 79 43 61 6c 63 3a  |Block!0=SpyCalc:|
00007b90  42 6c 6f 63 6b 21 34 3d  34 35 3a c8 99 20 22 57  |Block!4=45:.. "W|
00007ba0  69 6d 70 5f 47 65 74 49  63 6f 6e 53 74 61 74 65  |imp_GetIconState|
00007bb0  22 2c 2c 42 6c 6f 63 6b  0d 20 da 24 42 6c 6f 63  |",,Block. .$Bloc|
00007bc0  6b 21 38 3d 28 31 3c 3c  32 31 29 3a 42 6c 6f 63  |k!8=(1<<21):Bloc|
00007bd0  6b 21 31 32 3d 28 31 3c  3c 32 31 29 0d 20 e4 28  |k!12=(1<<21). .(|
00007be0  42 6c 6f 63 6b 21 38 2b  3d 28 30 3c 3c 31 32 29  |Block!8+=(0<<12)|
00007bf0  3a 42 6c 6f 63 6b 21 31  32 2b 3d 28 32 35 35 3c  |:Block!12+=(255<|
00007c00  3c 31 32 29 0d 20 ee 21  c8 99 20 22 57 69 6d 70  |<12). .!.. "Wimp|
00007c10  5f 53 65 74 49 63 6f 6e  53 74 61 74 65 22 2c 2c  |_SetIconState",,|
00007c20  42 6c 6f 63 6b 0d 20 f8  20 f2 55 70 64 61 74 65  |Block. . .Update|
00007c30  49 63 6f 6e 28 53 70 79  43 61 6c 63 2c 34 36 2c  |Icon(SpyCalc,46,|
00007c40  22 26 30 22 29 0d 21 02  3c 42 6c 6f 63 6b 21 30  |"&0").!.<Block!0|
00007c50  3d 53 70 79 43 61 6c 63  3a 42 6c 6f 63 6b 21 34  |=SpyCalc:Block!4|
00007c60  3d 34 36 3a c8 99 20 22  57 69 6d 70 5f 47 65 74  |=46:.. "Wimp_Get|
00007c70  49 63 6f 6e 53 74 61 74  65 22 2c 2c 42 6c 6f 63  |IconState",,Bloc|
00007c80  6b 0d 21 0c 2e e7 20 53  70 79 20 8c 20 42 6c 6f  |k.!... Spy . Blo|
00007c90  63 6b 21 38 3d 28 30 3c  3c 31 32 29 3a 8b 20 42  |ck!8=(0<<12):. B|
00007ca0  6c 6f 63 6b 21 38 3d 28  31 34 3c 3c 31 32 29 0d  |lock!8=(14<<12).|
00007cb0  21 16 16 42 6c 6f 63 6b  21 31 32 3d 28 32 35 35  |!..Block!12=(255|
00007cc0  3c 3c 31 32 29 0d 21 20  21 c8 99 20 22 57 69 6d  |<<12).! !.. "Wim|
00007cd0  70 5f 53 65 74 49 63 6f  6e 53 74 61 74 65 22 2c  |p_SetIconState",|
00007ce0  2c 42 6c 6f 63 6b 0d 21  2a 05 e1 0d 21 34 05 3a  |,Block.!*...!4.:|
00007cf0  0d 21 3e 14 dd 20 a4 44  6f 53 70 79 28 4f 6c 64  |.!>.. .DoSpy(Old|
00007d00  57 69 6e 29 0d 21 48 23  c8 99 20 22 57 69 6d 70  |Win).!H#.. "Wimp|
00007d10  5f 47 65 74 50 6f 69 6e  74 65 72 49 6e 66 6f 22  |_GetPointerInfo"|
00007d20  2c 2c 42 6c 6f 63 6b 0d  21 52 1c 57 69 6e 3d 42  |,,Block.!R.Win=B|
00007d30  6c 6f 63 6b 21 31 32 3a  49 63 3d 42 6c 6f 63 6b  |lock!12:Ic=Block|
00007d40  21 31 36 0d 21 5c 48 e7  20 57 69 6e 3d 2d 31 20  |!16.!\H. Win=-1 |
00007d50  8c 20 f2 55 70 64 61 74  65 49 63 6f 6e 28 53 70  |. .UpdateIcon(Sp|
00007d60  79 43 61 6c 63 2c 34 2c  22 22 29 20 8b 20 f2 55  |yCalc,4,"") . .U|
00007d70  70 64 61 74 65 49 63 6f  6e 28 53 70 79 43 61 6c  |pdateIcon(SpyCal|
00007d80  63 2c 34 2c c3 28 57 69  6e 29 29 0d 21 66 46 e7  |c,4,.(Win)).!fF.|
00007d90  20 49 63 3d 2d 31 20 8c  20 f2 55 70 64 61 74 65  | Ic=-1 . .Update|
00007da0  49 63 6f 6e 28 53 70 79  43 61 6c 63 2c 35 2c 22  |Icon(SpyCalc,5,"|
00007db0  22 29 20 8b 20 f2 55 70  64 61 74 65 49 63 6f 6e  |") . .UpdateIcon|
00007dc0  28 53 70 79 43 61 6c 63  2c 35 2c c3 28 49 63 29  |(SpyCalc,5,.(Ic)|
00007dd0  29 0d 21 70 2a e7 20 28  57 69 6e 3e 30 29 20 84  |).!p*. (Win>0) .|
00007de0  20 28 28 57 69 6e 3d 2d  32 29 20 80 20 28 77 69  | ((Win=-2) . (wi|
00007df0  6d 70 3e 3d 33 30 30 29  29 20 8c 0d 21 7a 31 20  |mp>=300)) ..!z1 |
00007e00  20 42 6c 6f 63 6b 21 30  3d 57 69 6e 3a c8 99 20  | Block!0=Win:.. |
00007e10  22 57 69 6d 70 5f 47 65  74 57 69 6e 64 6f 77 53  |"Wimp_GetWindowS|
00007e20  74 61 74 65 22 2c 2c 42  6c 6f 63 6b 0d 21 84 21  |tate",,Block.!.!|
00007e30  20 20 56 6d 69 6e 58 3d  42 6c 6f 63 6b 21 34 3a  |  VminX=Block!4:|
00007e40  56 6d 69 6e 59 3d 42 6c  6f 63 6b 21 38 0d 21 8e  |VminY=Block!8.!.|
00007e50  23 20 20 56 6d 61 78 58  3d 42 6c 6f 63 6b 21 31  |#  VmaxX=Block!1|
00007e60  32 3a 56 6d 61 78 59 3d  42 6c 6f 63 6b 21 31 36  |2:VmaxY=Block!16|
00007e70  0d 21 98 27 20 20 53 63  72 6f 6c 6c 58 3d 42 6c  |.!.'  ScrollX=Bl|
00007e80  6f 63 6b 21 32 30 3a 53  63 72 6f 6c 6c 59 3d 42  |ock!20:ScrollY=B|
00007e90  6c 6f 63 6b 21 32 34 0d  21 a2 18 20 20 57 69 6e  |lock!24.!..  Win|
00007ea0  64 46 6c 61 67 73 3d 42  6c 6f 63 6b 21 33 32 0d  |dFlags=Block!32.|
00007eb0  21 ac 47 20 20 f2 55 70  64 61 74 65 49 63 6f 6e  |!.G  .UpdateIcon|
00007ec0  28 53 70 79 43 61 6c 63  2c 31 30 2c c3 28 56 6d  |(SpyCalc,10,.(Vm|
00007ed0  69 6e 58 29 29 3a f2 55  70 64 61 74 65 49 63 6f  |inX)):.UpdateIco|
00007ee0  6e 28 53 70 79 43 61 6c  63 2c 31 31 2c c3 28 56  |n(SpyCalc,11,.(V|
00007ef0  6d 69 6e 59 29 29 0d 21  b6 47 20 20 f2 55 70 64  |minY)).!.G  .Upd|
00007f00  61 74 65 49 63 6f 6e 28  53 70 79 43 61 6c 63 2c  |ateIcon(SpyCalc,|
00007f10  31 36 2c c3 28 56 6d 61  78 58 29 29 3a f2 55 70  |16,.(VmaxX)):.Up|
00007f20  64 61 74 65 49 63 6f 6e  28 53 70 79 43 61 6c 63  |dateIcon(SpyCalc|
00007f30  2c 31 37 2c c3 28 56 6d  61 78 59 29 29 0d 21 c0  |,17,.(VmaxY)).!.|
00007f40  4b 20 20 f2 55 70 64 61  74 65 49 63 6f 6e 28 53  |K  .UpdateIcon(S|
00007f50  70 79 43 61 6c 63 2c 32  32 2c c3 28 53 63 72 6f  |pyCalc,22,.(Scro|
00007f60  6c 6c 58 29 29 3a f2 55  70 64 61 74 65 49 63 6f  |llX)):.UpdateIco|
00007f70  6e 28 53 70 79 43 61 6c  63 2c 32 33 2c c3 28 53  |n(SpyCalc,23,.(S|
00007f80  63 72 6f 6c 6c 59 29 29  0d 21 ca 30 20 20 e7 20  |crollY)).!.0  . |
00007f90  57 69 6e 3c 3e 4f 6c 64  57 69 6e 20 8c 20 f2 55  |Win<>OldWin . .U|
00007fa0  70 64 61 74 65 53 77 69  74 63 68 65 73 28 57 69  |pdateSwitches(Wi|
00007fb0  6e 64 46 6c 61 67 73 29  0d 21 d4 3e 20 20 e7 20  |ndFlags).!.>  . |
00007fc0  57 69 6e 3c 3e 4f 6c 64  57 69 6e 20 8c 20 f2 55  |Win<>OldWin . .U|
00007fd0  70 64 61 74 65 49 63 6f  6e 28 53 70 79 43 61 6c  |pdateIcon(SpyCal|
00007fe0  63 2c 34 36 2c 22 26 22  2b c3 7e a4 57 69 6e 64  |c,46,"&"+.~.Wind|
00007ff0  46 6c 61 67 73 29 0d 21  de 3b 20 20 f4 20 4f 6e  |Flags).!.;  . On|
00008000  6c 79 20 75 70 64 61 74  65 20 66 6c 61 67 73 20  |ly update flags |
00008010  69 66 20 74 68 65 20 77  69 6e 64 6f 77 20 68 61  |if the window ha|
00008020  6e 64 6c 65 20 68 61 73  20 63 68 61 6e 67 65 64  |ndle has changed|
00008030  2e 0d 21 e8 05 cc 0d 21  f2 15 20 20 e7 20 57 69  |..!....!..  . Wi|
00008040  6e 3c 3e 4f 6c 64 57 69  6e 20 8c 0d 21 fc 33 20  |n<>OldWin ..!.3 |
00008050  20 20 20 f4 20 4e 6f 74  20 74 68 65 20 73 61 6d  |   . Not the sam|
00008060  65 20 77 69 6e 64 6f 77  20 61 73 20 62 65 66 6f  |e window as befo|
00008070  72 65 2c 20 73 6f 20 75  70 64 61 74 65 3a 0d 22  |re, so update:."|
00008080  06 0c 20 20 20 20 f7 20  2b 31 0d 22 10 1b 20 20  |..    . +1."..  |
00008090  20 20 dc 20 31 30 2c 31  31 2c 31 36 2c 31 37 2c  |  . 10,11,16,17,|
000080a0  32 32 2c 32 33 0d 22 1a  11 20 20 20 20 e3 20 4e  |22,23."..    . N|
000080b0  3d 31 20 b8 20 36 0d 22  24 2d 20 20 20 20 20 20  |=1 . 6."$-      |
000080c0  f3 20 49 63 6f 6e 3a f2  55 70 64 61 74 65 49 63  |. Icon:.UpdateIc|
000080d0  6f 6e 28 53 70 79 43 61  6c 63 2c 49 63 6f 6e 2c  |on(SpyCalc,Icon,|
000080e0  22 22 29 0d 22 2e 09 20  20 20 20 ed 0d 22 38 13  |"")."..    .."8.|
000080f0  20 20 20 20 e3 20 4e 3d  32 36 20 b8 20 34 35 0d  |    . N=26 . 45.|
00008100  22 42 41 20 20 20 20 20  20 42 6c 6f 63 6b 21 30  |"BA      Block!0|
00008110  3d 53 70 79 43 61 6c 63  3a 42 6c 6f 63 6b 21 34  |=SpyCalc:Block!4|
00008120  3d 4e 3a c8 99 20 22 57  69 6d 70 5f 47 65 74 49  |=N:.. "Wimp_GetI|
00008130  63 6f 6e 53 74 61 74 65  22 2c 2c 42 6c 6f 63 6b  |conState",,Block|
00008140  0d 22 4c 2a 20 20 20 20  20 20 42 6c 6f 63 6b 21  |."L*      Block!|
00008150  38 3d 28 30 3c 3c 32 31  29 3a 42 6c 6f 63 6b 21  |8=(0<<21):Block!|
00008160  31 32 3d 28 31 3c 3c 32  31 29 0d 22 56 27 20 20  |12=(1<<21)."V'  |
00008170  20 20 20 20 c8 99 20 22  57 69 6d 70 5f 53 65 74  |    .. "Wimp_Set|
00008180  49 63 6f 6e 53 74 61 74  65 22 2c 2c 42 6c 6f 63  |IconState",,Bloc|
00008190  6b 0d 22 60 09 20 20 20  20 ed 0d 22 6a 30 20 20  |k."`.    .."j0  |
000081a0  20 20 f2 55 70 64 61 74  65 49 63 6f 6e 28 53 70  |  .UpdateIcon(Sp|
000081b0  79 43 61 6c 63 2c 34 36  2c 22 26 22 2b c3 7e a4  |yCalc,46,"&"+.~.|
000081c0  57 69 6e 64 46 6c 61 67  73 29 0d 22 74 07 20 20  |WindFlags)."t.  |
000081d0  cd 0d 22 7e 05 cd 0d 22  88 08 3d 57 69 6e 0d 22  |.."~..."..=Win."|
000081e0  92 05 3a 0d 22 9c 20 dd  20 f2 55 70 64 61 74 65  |..:.". . .Update|
000081f0  53 77 69 74 63 68 65 73  28 57 69 6e 64 46 6c 61  |Switches(WindFla|
00008200  67 73 29 0d 22 a6 08 f7  20 2b 31 0d 22 b0 3b dc  |gs)."... +1.".;.|
00008210  20 32 34 2c 32 35 2c 32  36 2c 32 37 2c 32 38 2c  | 24,25,26,27,28,|
00008220  32 39 2c 33 30 2c 31 2c  34 2c 35 2c 36 2c 38 2c  |29,30,1,4,5,6,8,|
00008230  39 2c 31 30 2c 31 31 2c  31 32 2c 31 33 2c 31 34  |9,10,11,12,13,14|
00008240  2c 31 35 2c 33 31 0d 22  ba 0f e3 20 4e 3d 32 36  |,15,31."... N=26|
00008250  20 b8 20 34 35 0d 22 c4  0b 20 20 f3 20 62 69 74  | . 45."..  . bit|
00008260  0d 22 ce 44 20 20 f2 55  70 64 61 74 65 53 65 6c  |.".D  .UpdateSel|
00008270  65 63 74 65 64 46 6c 61  67 28 53 70 79 43 61 6c  |ectedFlag(SpyCal|
00008280  63 2c 4e 2c 28 57 69 6e  64 46 6c 61 67 73 20 80  |c,N,(WindFlags .|
00008290  20 28 31 3c 3c 62 69 74  29 29 3d 28 31 3c 3c 62  | (1<<bit))=(1<<b|
000082a0  69 74 29 29 0d 22 d8 05  ed 0d 22 e2 05 e1 0d 22  |it))."...."...."|
000082b0  ec 05 3a 0d 22 f6 10 dd  20 a4 57 69 6e 64 46 6c  |..:."... .WindFl|
000082c0  61 67 73 0d 23 00 0f 57  69 6e 64 46 6c 61 67 73  |ags.#..WindFlags|
000082d0  3d 30 0d 23 0a 08 f7 20  2b 31 0d 23 14 3b dc 20  |=0.#... +1.#.;. |
000082e0  32 34 2c 32 35 2c 32 36  2c 32 37 2c 32 38 2c 32  |24,25,26,27,28,2|
000082f0  39 2c 33 30 2c 31 2c 34  2c 35 2c 36 2c 38 2c 39  |9,30,1,4,5,6,8,9|
00008300  2c 31 30 2c 31 31 2c 31  32 2c 31 33 2c 31 34 2c  |,10,11,12,13,14,|
00008310  31 35 2c 33 31 0d 23 1e  0f e3 20 4e 3d 32 36 20  |15,31.#... N=26 |
00008320  b8 20 34 35 0d 23 28 0b  20 20 f3 20 62 69 74 0d  |. 45.#(.  . bit.|
00008330  23 32 37 20 20 e7 20 a4  53 65 6c 65 63 74 65 64  |#27  . .Selected|
00008340  53 74 61 74 65 28 53 70  79 43 61 6c 63 2c 4e 29  |State(SpyCalc,N)|
00008350  20 8c 20 57 69 6e 64 46  6c 61 67 73 2b 3d 28 31  | . WindFlags+=(1|
00008360  3c 3c 62 69 74 29 0d 23  3c 05 ed 0d 23 46 0e 3d  |<<bit).#<...#F.=|
00008370  57 69 6e 64 46 6c 61 67  73 0d 23 50 05 3a 0d 23  |WindFlags.#P.:.#|
00008380  5a 13 dd 20 a4 53 61 76  65 53 65 74 74 69 6e 67  |Z.. .SaveSetting|
00008390  73 0d 23 64 07 ea 20 85  0d 23 6e 3c ee 20 85 20  |s.#d.. ..#n<. . |
000083a0  ea 20 f7 20 85 3a f2 43  6c 6f 73 65 46 69 6c 65  |. . .:.CloseFile|
000083b0  49 66 50 6f 73 73 28 44  61 74 61 29 3a 3d a3 3a  |IfPoss(Data):=.:|
000083c0  f4 20 45 72 72 6f 72 20  77 72 69 74 69 6e 67 20  |. Error writing |
000083d0  66 69 6c 65 0d 23 78 07  20 20 3a 0d 23 82 29 20  |file.#x.  :.#.) |
000083e0  20 44 61 74 61 3d ae 20  28 22 3c 57 69 6e 64 46  | Data=. ("<WindF|
000083f0  6c 61 67 73 24 44 69 72  3e 2e 53 65 74 74 69 6e  |lags$Dir>.Settin|
00008400  67 73 22 29 0d 23 8c 41  20 20 d5 23 44 61 74 61  |gs").#.A  .#Data|
00008410  2c 22 7c 20 58 20 61 6e  64 20 59 20 67 72 69 64  |,"| X and Y grid|
00008420  20 63 6f 6f 72 64 69 6e  61 74 65 73 20 6f 66 20  | coordinates of |
00008430  57 69 6e 64 6f 77 20 46  6c 61 67 73 20 77 69 6e  |Window Flags win|
00008440  64 6f 77 3a 22 0d 23 96  19 20 20 d5 23 44 61 74  |dow:".#..  .#Dat|
00008450  61 2c c3 28 58 50 6f 73  69 74 69 6f 6e 29 0d 23  |a,.(XPosition).#|
00008460  a0 19 20 20 d5 23 44 61  74 61 2c c3 28 59 50 6f  |..  .#Data,.(YPo|
00008470  73 69 74 69 6f 6e 29 0d  23 aa 3e 20 20 d5 23 44  |sition).#.>  .#D|
00008480  61 74 61 2c 22 7c 20 53  70 79 69 6e 67 20 61 74  |ata,"| Spying at|
00008490  20 73 74 61 72 74 75 70  20 28 2d 31 20 66 6f 72  | startup (-1 for|
000084a0  20 54 52 55 45 3b 20 30  20 66 6f 72 20 46 41 4c  | TRUE; 0 for FAL|
000084b0  53 45 29 3a 22 0d 23 b4  16 20 20 d5 23 44 61 74  |SE):".#..  .#Dat|
000084c0  61 2c c3 28 53 70 79 69  6e 67 29 0d 23 be 0c 20  |a,.(Spying).#.. |
000084d0  20 d9 23 44 61 74 61 0d  23 c8 30 20 20 ff 28 22  | .#Data.#.0  .("|
000084e0  53 65 74 74 79 70 65 20  3c 57 69 6e 64 46 6c 61  |Settype <WindFla|
000084f0  67 73 24 44 69 72 3e 2e  53 65 74 74 69 6e 67 73  |gs$Dir>.Settings|
00008500  20 54 65 78 74 22 29 0d  23 d2 07 20 20 3a 0d 23  | Text").#..  :.#|
00008510  dc 06 3d b9 0d 23 e6 05  3a 0d 23 f0 13 dd 20 a4  |..=..#..:.#... .|
00008520  4c 6f 61 64 53 65 74 74  69 6e 67 73 0d 23 fa 07  |LoadSettings.#..|
00008530  ea 20 85 0d 24 04 4f ee  20 85 20 ea 20 f7 20 85  |. ..$.O. . . . .|
00008540  3a f2 43 6c 6f 73 65 46  69 6c 65 49 66 50 6f 73  |:.CloseFileIfPos|
00008550  73 28 44 61 74 61 29 3a  3d a3 3a f4 20 27 53 65  |s(Data):=.:. 'Se|
00008560  74 74 69 6e 67 73 27 20  66 69 6c 65 20 69 73 20  |ttings' file is |
00008570  64 61 6d 61 67 65 64 20  6f 72 20 6d 69 73 73 69  |damaged or missi|
00008580  6e 67 0d 24 0e 07 20 20  3a 0d 24 18 27 20 20 44  |ng.$..  :.$.'  D|
00008590  61 74 61 3d 8e 20 22 3c  57 69 6e 64 46 6c 61 67  |ata=. "<WindFlag|
000085a0  73 24 44 69 72 3e 2e 53  65 74 74 69 6e 67 73 22  |s$Dir>.Settings"|
000085b0  0d 24 22 1d 20 20 58 50  6f 73 69 74 69 6f 6e 3d  |.$".  XPosition=|
000085c0  bb 28 a4 4e 65 78 74 45  6e 74 72 79 29 0d 24 2c  |.(.NextEntry).$,|
000085d0  1d 20 20 59 50 6f 73 69  74 69 6f 6e 3d bb 28 a4  |.  YPosition=.(.|
000085e0  4e 65 78 74 45 6e 74 72  79 29 0d 24 36 1a 20 20  |NextEntry).$6.  |
000085f0  53 70 79 69 6e 67 3d bb  28 a4 4e 65 78 74 45 6e  |Spying=.(.NextEn|
00008600  74 72 79 29 0d 24 40 0c  20 20 d9 23 44 61 74 61  |try).$@.  .#Data|
00008610  0d 24 4a 07 20 20 3a 0d  24 54 62 20 20 e7 20 58  |.$J.  :.$Tb  . X|
00008620  50 6f 73 69 74 69 6f 6e  3c 3e 2d 31 20 80 20 59  |Position<>-1 . Y|
00008630  50 6f 73 69 74 69 6f 6e  3c 3e 2d 31 20 8c 20 f2  |Position<>-1 . .|
00008640  55 70 64 61 74 65 53 65  6c 65 63 74 65 64 46 6c  |UpdateSelectedFl|
00008650  61 67 28 4c 6f 63 2c 36  2b 28 28 35 2a 58 50 6f  |ag(Loc,6+((5*XPo|
00008660  73 69 74 69 6f 6e 29 2b  28 34 2d 59 50 6f 73 69  |sition)+(4-YPosi|
00008670  74 69 6f 6e 29 29 2c b9  29 0d 24 5e 22 20 20 f2  |tion)),.).$^"  .|
00008680  54 69 63 6b 4d 65 6e 75  28 4d 61 69 6e 4d 65 6e  |TickMenu(MainMen|
00008690  75 2c 31 2c 53 70 79 69  6e 67 29 0d 24 68 07 20  |u,1,Spying).$h. |
000086a0  20 3a 0d 24 72 06 3d b9  0d 24 7c 05 3a 0d 24 86  | :.$r.=..$|.:.$.|
000086b0  16 dd 20 f2 44 65 66 61  75 6c 74 53 65 74 74 69  |.. .DefaultSetti|
000086c0  6e 67 73 0d 24 90 1b 58  50 6f 73 69 74 69 6f 6e  |ngs.$..XPosition|
000086d0  3d 34 3a 59 50 6f 73 69  74 69 6f 6e 3d 32 0d 24  |=4:YPosition=2.$|
000086e0  9a 3e f2 55 70 64 61 74  65 53 65 6c 65 63 74 65  |.>.UpdateSelecte|
000086f0  64 46 6c 61 67 28 4c 6f  63 2c 36 2b 28 28 35 2a  |dFlag(Loc,6+((5*|
00008700  58 50 6f 73 69 74 69 6f  6e 29 2b 28 34 2d 59 50  |XPosition)+(4-YP|
00008710  6f 73 69 74 69 6f 6e 29  29 2c b9 29 0d 24 a4 0c  |osition)),.).$..|
00008720  53 70 79 69 6e 67 3d b9  0d 24 ae 20 f2 54 69 63  |Spying=..$. .Tic|
00008730  6b 4d 65 6e 75 28 4d 61  69 6e 4d 65 6e 75 2c 31  |kMenu(MainMenu,1|
00008740  2c 53 70 79 69 6e 67 29  0d 24 b8 05 e1 0d 24 c2  |,Spying).$....$.|
00008750  05 3a 0d 24 cc 12 dd 20  f2 52 41 4d 54 72 61 6e  |.:.$... .RAMTran|
00008760  73 6d 69 74 0d 24 d6 41  4f 74 68 65 72 54 61 73  |smit.$.AOtherTas|
00008770  6b 48 61 6e 64 6c 65 3d  42 6c 6f 63 6b 21 34 3a  |kHandle=Block!4:|
00008780  4d 79 52 65 66 3d 42 6c  6f 63 6b 21 38 3a 54 72  |MyRef=Block!8:Tr|
00008790  61 6e 73 6d 69 74 42 75  66 66 65 72 3d 42 6c 6f  |ansmitBuffer=Blo|
000087a0  63 6b 21 32 30 0d 24 e0  4f c8 99 20 22 57 69 6d  |ck!20.$.O.. "Wim|
000087b0  70 5f 54 72 61 6e 73 66  65 72 42 6c 6f 63 6b 22  |p_TransferBlock"|
000087c0  2c 54 61 73 6b 2c 54 72  61 6e 73 6d 69 73 73 69  |,Task,Transmissi|
000087d0  6f 6e 2c 4f 74 68 65 72  54 61 73 6b 48 61 6e 64  |on,OtherTaskHand|
000087e0  6c 65 2c 54 72 61 6e 73  6d 69 74 42 75 66 66 65  |le,TransmitBuffe|
000087f0  72 2c 31 30 0d 24 ea 28  42 6c 6f 63 6b 21 30 3d  |r,10.$.(Block!0=|
00008800  32 38 3a 42 6c 6f 63 6b  21 31 36 3d 37 3a f4 20  |28:Block!16=7:. |
00008810  52 41 4d 20 54 72 61 6e  73 6d 69 74 0d 24 f4 2a  |RAM Transmit.$.*|
00008820  42 6c 6f 63 6b 21 31 32  3d 4d 79 52 65 66 3a 42  |Block!12=MyRef:B|
00008830  6c 6f 63 6b 21 32 30 3d  54 72 61 6e 73 6d 69 74  |lock!20=Transmit|
00008840  42 75 66 66 65 72 0d 24  fe 1d 42 6c 6f 63 6b 21  |Buffer.$..Block!|
00008850  32 34 3d a9 28 24 54 72  61 6e 73 6d 69 73 73 69  |24=.($Transmissi|
00008860  6f 6e 29 0d 25 08 32 c8  99 20 22 57 69 6d 70 5f  |on).%.2.. "Wimp_|
00008870  53 65 6e 64 4d 65 73 73  61 67 65 22 2c 31 37 2c  |SendMessage",17,|
00008880  42 6c 6f 63 6b 2c 4f 74  68 65 72 54 61 73 6b 48  |Block,OtherTaskH|
00008890  61 6e 64 6c 65 0d 25 12  10 44 72 61 67 67 69 6e  |andle.%..Draggin|
000088a0  67 24 3d 22 22 0d 25 1c  05 e1 0d 25 26 05 3a 0d  |g$="".%....%&.:.|
000088b0  25 30 18 dd 20 f2 57 69  6d 70 53 63 72 61 70 54  |%0.. .WimpScrapT|
000088c0  72 61 6e 73 6d 69 74 0d  25 3a 29 4f 74 68 65 72  |ransmit.%:)Other|
000088d0  54 61 73 6b 48 61 6e 64  6c 65 3d 42 6c 6f 63 6b  |TaskHandle=Block|
000088e0  21 34 3a 4d 79 52 65 66  3d 42 6c 6f 63 6b 21 38  |!4:MyRef=Block!8|
000088f0  0d 25 44 32 53 61 76 65  46 69 6c 65 6e 61 6d 65  |.%D2SaveFilename|
00008900  24 3d c0 24 28 42 6c 6f  63 6b 2b 34 34 29 2c a7  |$=.$(Block+44),.|
00008910  24 28 42 6c 6f 63 6b 2b  34 34 29 2c bd 30 29 2d  |$(Block+44),.0)-|
00008920  31 29 0d 25 4e 07 ea 20  85 0d 25 58 41 ee 20 85  |1).%N.. ..%XA. .|
00008930  20 ea 20 f7 20 85 3a 85  20 39 39 39 39 2c 22 41  | . . .:. 9999,"A|
00008940  6e 20 65 72 72 6f 72 20  68 61 73 20 6f 63 63 75  |n error has occu|
00008950  72 72 65 64 20 64 75 72  69 6e 67 20 74 72 61 6e  |rred during tran|
00008960  73 6d 69 73 73 69 6f 6e  2e 22 0d 25 62 18 44 61  |smission.".%b.Da|
00008970  74 61 3d ae 20 53 61 76  65 46 69 6c 65 6e 61 6d  |ta=. SaveFilenam|
00008980  65 24 0d 25 6c 1a d5 23  44 61 74 61 2c 24 28 54  |e$.%l..#Data,$(T|
00008990  72 61 6e 73 6d 69 73 73  69 6f 6e 29 0d 25 76 0a  |ransmission).%v.|
000089a0  d9 23 44 61 74 61 0d 25  80 27 ff 28 22 53 65 74  |.#Data.%.'.("Set|
000089b0  54 79 70 65 20 22 2b 53  61 76 65 46 69 6c 65 6e  |Type "+SaveFilen|
000089c0  61 6d 65 24 2b 22 20 54  65 78 74 22 29 0d 25 8a  |ame$+" Text").%.|
000089d0  54 42 6c 6f 63 6b 21 30  3d 28 34 34 2b a9 28 53  |TBlock!0=(44+.(S|
000089e0  61 76 65 46 69 6c 65 6e  61 6d 65 24 29 29 3a 42  |aveFilename$)):B|
000089f0  6c 6f 63 6b 21 30 3d 28  42 6c 6f 63 6b 21 30 29  |lock!0=(Block!0)|
00008a00  2b 28 34 2d 28 28 42 6c  6f 63 6b 21 30 29 20 83  |+(4-((Block!0) .|
00008a10  20 34 29 29 3a f4 20 57  6f 72 64 20 61 6c 69 67  | 4)):. Word alig|
00008a20  6e 0d 25 94 28 42 6c 6f  63 6b 21 31 32 3d 4d 79  |n.%.(Block!12=My|
00008a30  52 65 66 3a 42 6c 6f 63  6b 21 31 36 3d 33 3a f4  |Ref:Block!16=3:.|
00008a40  20 44 61 74 61 4c 6f 61  64 0d 25 9e 33 42 6c 6f  | DataLoad.%.3Blo|
00008a50  63 6b 21 32 30 3d 44 72  61 67 67 65 64 54 6f 57  |ck!20=DraggedToW|
00008a60  69 6e 64 6f 77 3a 42 6c  6f 63 6b 21 32 34 3d 44  |indow:Block!24=D|
00008a70  72 61 67 67 65 64 54 6f  49 63 6f 6e 0d 25 a8 2b  |raggedToIcon.%.+|
00008a80  42 6c 6f 63 6b 21 32 38  3d 44 72 61 67 67 65 64  |Block!28=Dragged|
00008a90  54 6f 58 3a 42 6c 6f 63  6b 21 33 32 3d 44 72 61  |ToX:Block!32=Dra|
00008aa0  67 67 65 64 54 6f 59 0d  25 b2 2a 42 6c 6f 63 6b  |ggedToY.%.*Block|
00008ab0  21 33 36 3d 31 32 3a f4  20 4e 65 76 65 72 20 6d  |!36=12:. Never m|
00008ac0  6f 72 65 20 74 68 61 6e  20 31 32 20 62 79 74 65  |ore than 12 byte|
00008ad0  73 0d 25 bc 24 42 6c 6f  63 6b 21 34 30 3d 26 46  |s.%.$Block!40=&F|
00008ae0  46 46 3a f4 20 46 69 6c  65 74 79 70 65 20 6f 66  |FF:. Filetype of|
00008af0  20 54 65 78 74 0d 25 c6  2d 24 28 42 6c 6f 63 6b  | Text.%.-$(Block|
00008b00  2b 34 34 29 3d 53 61 76  65 46 69 6c 65 6e 61 6d  |+44)=SaveFilenam|
00008b10  65 24 2b bd 30 3a 44 72  61 67 67 69 6e 67 24 3d  |e$+.0:Dragging$=|
00008b20  22 22 0d 25 d0 32 c8 99  20 22 57 69 6d 70 5f 53  |"".%.2.. "Wimp_S|
00008b30  65 6e 64 4d 65 73 73 61  67 65 22 2c 31 38 2c 42  |endMessage",18,B|
00008b40  6c 6f 63 6b 2c 4f 74 68  65 72 54 61 73 6b 48 61  |lock,OtherTaskHa|
00008b50  6e 64 6c 65 0d 25 da 05  e1 0d 25 e4 05 3a 0d 25  |ndle.%....%..:.%|
00008b60  ee 19 dd 20 a4 4d 61 6b  65 44 72 61 67 67 69 6e  |... .MakeDraggin|
00008b70  67 53 70 72 69 74 65 0d  25 f8 07 ea 20 85 0d 26  |gSprite.%... ..&|
00008b80  02 31 ee 20 85 20 ea 20  c8 99 20 22 4f 53 5f 53  |.1. . . .. "OS_S|
00008b90  70 72 69 74 65 4f 70 22  2c 72 30 2c 72 31 2c 72  |priteOp",r0,r1,r|
00008ba0  32 2c 72 33 3a f7 20 85  3a 85 20 9f 2c f6 24 0d  |2,r3:. .:. .,.$.|
00008bb0  26 0c 26 53 63 61 6c 69  6e 67 3d a4 4d 6f 64 65  |&.&Scaling=.Mode|
00008bc0  49 6e 66 6f 28 22 59 45  69 67 46 61 63 74 6f 72  |Info("YEigFactor|
00008bd0  22 2c 2d 31 29 0d 26 16  12 e7 20 53 63 61 6c 69  |",-1).&... Scali|
00008be0  6e 67 3c 3d 31 20 8c 0d  26 20 18 20 20 4e 61 6d  |ng<=1 ..& .  Nam|
00008bf0  65 24 3d 22 66 6c 61 67  73 5f 68 69 67 68 22 0d  |e$="flags_high".|
00008c00  26 2a 39 20 20 c8 99 20  22 4f 53 5f 53 70 72 69  |&*9  .. "OS_Spri|
00008c10  74 65 4f 70 22 2c 32 35  36 2b 36 30 2c 53 70 72  |teOp",256+60,Spr|
00008c20  69 74 65 73 2c 4e 61 6d  65 24 20 b8 20 72 30 2c  |ites,Name$ . r0,|
00008c30  72 31 2c 72 32 2c 72 33  0d 26 34 36 20 20 c8 99  |r1,r2,r3.&46  ..|
00008c40  20 22 4f 53 5f 53 70 72  69 74 65 4f 70 22 2c 32  | "OS_SpriteOp",2|
00008c50  35 36 2b 33 34 2c 53 70  72 69 74 65 73 2c 22 64  |56+34,Sprites,"d|
00008c60  72 61 67 68 69 67 68 22  2c 30 2c 30 2c 38 0d 26  |raghigh",0,0,8.&|
00008c70  3e 05 cc 0d 26 48 17 20  20 4e 61 6d 65 24 3d 22  |>...&H.  Name$="|
00008c80  66 6c 61 67 73 5f 6c 6f  77 22 0d 26 52 39 20 20  |flags_low".&R9  |
00008c90  c8 99 20 22 4f 53 5f 53  70 72 69 74 65 4f 70 22  |.. "OS_SpriteOp"|
00008ca0  2c 32 35 36 2b 36 30 2c  53 70 72 69 74 65 73 2c  |,256+60,Sprites,|
00008cb0  4e 61 6d 65 24 20 b8 20  72 30 2c 72 31 2c 72 32  |Name$ . r0,r1,r2|
00008cc0  2c 72 33 0d 26 5c 35 20  20 c8 99 20 22 4f 53 5f  |,r3.&\5  .. "OS_|
00008cd0  53 70 72 69 74 65 4f 70  22 2c 32 35 36 2b 33 34  |SpriteOp",256+34|
00008ce0  2c 53 70 72 69 74 65 73  2c 22 64 72 61 67 6c 6f  |,Sprites,"draglo|
00008cf0  77 22 2c 30 2c 30 2c 38  0d 26 66 05 cd 0d 26 70  |w",0,0,8.&f...&p|
00008d00  19 c8 99 20 22 57 69 6d  70 5f 53 65 74 43 6f 6c  |... "Wimp_SetCol|
00008d10  6f 75 72 22 2c 37 0d 26  7a 29 ef 35 3a ec 20 28  |our",7.&z).5:. (|
00008d20  31 36 30 2d 28 31 36 2a  a9 28 24 54 72 61 6e 73  |160-(16*.($Trans|
00008d30  6d 69 73 73 69 6f 6e 29  29 29 2f 32 2c 33 36 0d  |mission)))/2,36.|
00008d40  26 84 2b ef 20 32 33 2c  31 37 2c 37 2c 36 2c 38  |&.+. 23,17,7,6,8|
00008d50  3b 38 3b 30 3b 3a f4 20  53 69 6e 67 6c 65 2d 68  |;8;0;:. Single-h|
00008d60  65 69 67 68 74 20 74 65  78 74 0d 26 8e 3b e7 20  |eight text.&.;. |
00008d70  53 63 61 6c 69 6e 67 3c  3d 31 20 8c 20 ef 20 32  |Scaling<=1 . . 2|
00008d80  33 2c 31 37 2c 37 2c 36  2c 38 3b 31 36 3b 30 3b  |3,17,7,6,8;16;0;|
00008d90  3a f4 20 44 6f 75 62 6c  65 2d 68 65 69 67 68 74  |:. Double-height|
00008da0  20 74 65 78 74 0d 26 98  13 f1 20 24 54 72 61 6e  | text.&... $Tran|
00008db0  73 6d 69 73 73 69 6f 6e  0d 26 a2 20 c8 99 20 22  |smission.&. .. "|
00008dc0  4f 53 5f 53 70 72 69 74  65 4f 70 22 2c 72 30 2c  |OS_SpriteOp",r0,|
00008dd0  72 31 2c 72 32 2c 72 33  0d 26 ac 0a 3d 4e 61 6d  |r1,r2,r3.&..=Nam|
00008de0  65 24 0d ff                                       |e$..|
00008de4