Home » Archimedes archive » Acorn User » AU 1998-05 B.adf » Freeware2 » xuen/!Xuen/!runimage

xuen/!Xuen/!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 1998-05 B.adf » Freeware2
Filename: xuen/!Xuen/!runimage
Read OK:
File size: E6A8 bytes
Load address: 0000
Exec address: 0000
File contents
   10REM ***********************************************
   20REM Name    : Xuen
   30REM Version : 7.00
   40REM Purpose : Make RiscOS Desktop more efficient
   50REM Author  : Barny Short
   60REM Date    : 08-Mar-1998
   70REM ***********************************************
   80REM Revision history :
   90REM 24-Aug-1997   Added Quickfile Icon to iconbar.
  100REM               Clicking on icon open/closes.
  110REM 25-Aug-1997   Added ShortCuts facility.
  120REM               Similar feature to Win95 tool.
  130REM 04-Sep-1997   Added nested directories facility.
  140REM               Changed Shift+IconbarMenu to
  150REM               include EditLinks facility.
  160REM               Changed name to Start and changed
  170REM               shortcuts directory to Links
  180REM 05-Sep-1997   Changed way window cache is
  190REM               administered. Became version 2.00
  200REM 06-Sep-1997   Changed format of link files.
  210REM               Added entire boot at start up.
  220REM 07-Sep-1997   Fixed a mother of a bug that
  230REM               probably has something to do with
  240REM               the pipeline. Also added much
  250REM               more intelligent file type
  260REM               checking.
  270REM 14-Sep-1997   General improvements regarding
  280REM               drag'n'drop and tooltip.
  290REM 04-Nov-1997   Changed icon bar icon
  300REM 05-Nov-1997   Added the ~ history directory
  310REM               to catch all double clicks on
  320REM               file icons.
  330REM               Also added a ~~ directory. Can't
  340REM               think what for.
  350REM               Fixed the EMPTY directory bug.
  360REM               Changed action of TOOL_TIP when
  370REM               pointer moved over it so now it
  380REM               gets 'pushed' around.
  390REM 06-Nov-1997   Changed how destination directory
  400REM               is selected for ADDNEWLINK. User
  410REM               now has to explicitly move to the
  420REM               required menu.
  430REM               Created system directorys that
  440REM               begin with a ~ symbol. These are
  450REM               updated with a history of the
  460REM               desktop filer usage.
  470REM 07-Nov-1997   Built the Alias$Link run tool.
  480REM               Fixed a SysFilePrefix related
  490REM               shortcutmenuselect bug.
  500REM               Added icon bar toggle feature
  510REM               when mouse hits bottom of screen.
  520REM               Added ALT-START_MENU click to
  530REM               efficiently delete items in the
  540REM               startup menu.
  550REM 09-Nov-1997   Added auto cascading for desktop
  560REM               windows. Some windows are never
  570REM               auto cascaded. These are:
  580REM               a) The Tooltip window
  590REM               b) Start's dummyback window
  600REM               c) Any window toggled full size,
  610REM                  that has input focus,
  620REM                  and a toggle size icon.
  630REM 09-Nov-1997   Added animated iconbar icon and
  640REM               alternative tool tips.
  650REM 11-Nov-1997   Added selective cascading of
  660REM               windows to reduce difficulty in
  670REM               using menus. Changed Iconbar
  680REM               button usage and 'alternative'
  690REM               tool tips.
  700REM 19-Nov-1997   Added sensible task bar tool tip.
  710REM               Included AppPath$ to guard
  720REM               against the <Start$Dir> getting
  730REM               corrupted.
  740REM               Added extra checks before
  750REM               deleteing auto-create links.
  760REM               Auto ensure ~ directorys are
  770REM               there whenever they are needed.
  780REM 21-Nov-1997   Disabled window repositioning
  790REM               when a menu is displayed with
  800REM               MenuIsOpenFlag%.
  810REM 21-Nov-1997   Added window drifting. Added
  820REM               dragable yes/no icons to window
  830REM               cache management.
  840REM 22-Nov-1997   Ensured all windows were
  850REM               properly cascaded, even if still
  860REM               waiting for a state to occur
  870REM               when they were allowed to be
  880REM               moved.
  890REM 22-Feb-1998   Changed name of application to
  900REM               Xuen, and system variable to
  910REM               <Xuenbs$Dir> to reflect initials
  920REM               of programmer. A millenium of
  930REM               dire satanic consequences to
  940REM               anyone who changes this variable.
  950REM 08-Mar-1998   Added 4s delay to writing of
  960REM               desktop filer grabbed links to
  970REM               disk. Forced new folder links to
  980REM               overwrite old ones if still in
  990REM               cache. Forced links still in
 1000REM               cache to be written to disc
 1010REM               forcefully if a new cache entry
 1020REM               appears (except folder links).
 1021REM 08-Mar-1998   Changed tool tips again.
 1030REM ***********************************************
 1040REM Note:
 1050REM    When running this program, it is important
 1060REM    to ensure that the corresponding !Boot or
 1070REM    !run file is run at the same time because
 1080REM    they ensure the system variable is set
 1090REM    correctly. ie. Use the !Run file to run this
 1100REM    file.
 1110REM ***********************************************
 1120
 1130PictureType%=&d94:REM Artworks
 1140DocumentType%=&bc5:REM Impression Document
 1150User$="Admin":REM User name is Admin
 1160
 1170app$="Xuen"
 1180AppPath$=""
 1190AppDate$=""
 1200DIM apppath 255, apppathvar 32, appdatevar 32
 1210$appdatevar="<Sys$Time> <Sys$Date>"+CHR$0
 1220$apppathvar="<Xuenbs$Dir>"+CHR$0
 1230
 1240REM Aquire the start path to use for delete operations
 1250SYS"OS_GSTrans",apppathvar,apppath,255
 1260AppPath$=FNstring(apppath)
 1270
 1280DIM errorblock% 2048, block% 2048, block2% 2048, clistring 255
 1290DIM winblock% 2048
 1300
 1310DIM InvalidDrive$(255)
 1320InvalidDriveCount%=0
 1330
 1340DIM dragspritename% 32, boundspritebox% 32
 1350
 1360ON ERROR PROCerror(REPORT$+" at line "+STR$ERL):CLOSE#0:END
 1370
 1380REM Auto link buffer add stuff
 1390alba_destinationdir$=""
 1400alba_type%=-1:REM -1 means nothing in cache
 1410alba_newlinkfile$=""
 1420alba_newlinkleaf$=""
 1430alba_time%=0
 1440
 1450CACHE_SIZE% = 4096
 1460pause% = 200
 1470open_type%=1
 1480close_type%=2
 1490add_window%=1
 1500subtract_window%=2
 1510drag_type%=5
 1520adjust%=1
 1530menu%=2
 1540select%=4
 1550iconbarhandle%=0
 1560dircount%=0
 1570linkloadaddr%=0
 1580objecttype%=0
 1590linkmenu%=0
 1600addlink%=0
 1610iconbar_timer%=TIME:iconbar_timerflag%=0
 1620whandle_tooltip%=0:ToolTip%=0:tooltip_timer%=0
 1630override_tooltip%=0:OldToolTip%=0
 1640internalstackposition%=-2
 1650oldstackposition%=0
 1660currentwindow%=0
 1670currentmenuhandle%=0
 1680firstmenuhandle%=-3
 1690IconBarMenuOpen%=0
 1700StartMenuSeperator%=-1
 1710SysFilePrefix%=126
 1720BottomEdgeFlag=0
 1730after%=0:cascade%=0
 1740whandle_dummyback%=0
 1750LastRightEdge%=0
 1760CascadeRow%=0
 1770RandTipMax%=13
 1780DIM RandTip$(RandTipMax%)
 1800RandTip$(1)="LSD"
 1810RandTip$(2)="Opium"
 1820RandTip$(3)="Magic Mushrooms"
 1830RandTip$(4)="Mescaline"
 1840RandTip$(5)="Peyote"
 1850RandTip$(6)="Lophophora Williamsii"
 1860RandTip$(7)="Trips"
 1870RandTip$(8)="Acid"
 1880RandTip$(9)="Speed"
 1890RandTip$(10)="Mind Bending Drugs"
 1900RandTip$(11)="Psychedelics"
 1910RandTip$(12)="Fun"
 1911RandTip$(13)="Cannabis"
 1920
 1930IconBarAnimSize%=11
 1940DIM IconBarAnim$(IconBarAnimSize%)
 1950IconBarAnim$(0)="Sxuen0"
 1960IconBarAnim$(1)="Sxuen1"
 1970IconBarAnim$(2)="Sxuen2"
 1980IconBarAnim$(3)="Sxuen3"
 1990IconBarAnim$(4)="Sxuen4"
 2000IconBarAnim$(5)="Sxuen5"
 2010IconBarAnim$(6)="Sxuen6"
 2020IconBarAnim$(7)="Sxuen7"
 2030IconBarAnim$(8)="Sxuen8"
 2040IconBarAnim$(9)="Sxuen9"
 2050IconBarAnim$(10)="Sxuen10"
 2060IconBarAnimStep=0
 2070IconBarAnimDir=0.5
 2080
 2090
 2100MenuIsOpenFlag%=0
 2110ReorganiseWindowStack=0
 2120
 2130DIM dblock% 1024, bootblock% 1024, shortcutmenu% 10192, shortcutmenudata% 20384
 2140DIM main_menu% 256, typebuf% 256, iconbarlabel% 32, iconbardata% 32
 2150DIM string% 1024, bootstring% 1024, infodata% 2048, tooltipdata% 2048, tooltipicon% 512
 2160DIM cache% CACHE_SIZE%
 2170DIM dirlist%(32), dirptr%(32)
 2180
 2190currentmenu%=main_menu%
 2200cache_ext%=0
 2210task_handle%=0
 2220drag_button%=adjust%
 2230DX%=0
 2240drag_icon%=0
 2250path$=""
 2260in_leftregion=FALSE
 2270in_rightregion=FALSE
 2280qf_timer=TIME
 2290regionxs%=16
 2300regionys%=64
 2310$iconbarlabel%="Xuen"+CHR$0
 2320$iconbardata%="S!xuen"+CHR$0
 2330globalmenuptr%=shortcutmenu%
 2340
 2350$iconbarlabel%=""+CHR$0
 2360$iconbardata%=IconBarAnim$(0)+CHR$0
 2370
 2380
 2390REM ***************************************************
 2400
 2410quit%=FALSE
 2420
 2430PROCinit
 2440REMPROCerror("Xuen path = "+AppPath$+CHR$0)
 2450PROCCreateToolTip
 2460PROCloadcache
 2470PROCDirectoryBoot(AppPath$+".Users."+User$+".Links")
 2480
 2490WHILE NOT quit%
 2500PROCpoll
 2510ENDWHILE
 2520
 2530PROCDestroyToolTip
 2540SYS "Wimp_CloseDown"
 2550END
 2560
 2570REM ***************************************************
 2580
 2590DEFPROCGetDate
 2600REM Aquire date and time
 2610SYS"OS_GSTrans",appdatevar,apppath,255
 2620AppDate$=FNstring(apppath)
 2630ENDPROC
 2640
 2650REM ***************************************************
 2660
 2670REM poll loop
 2680DEFPROCpoll
 2690SYS"Wimp_Poll",0,block% TO reason%
 2700REM IF reason%<>0 PROCerror(STR$(reason%)+CHR$0)
 2710CASE reason% OF
 2720WHEN 0:PROCnull_reason
 2730WHEN 2:PROCPollReason2
 2740WHEN 3:SYS "Wimp_CloseWindow",,block%
 2750WHEN 6:PROCclick(block%!12)
 2760WHEN 7:PROCdragdrop
 2770REM WHEN 8:PROCkeypressed
 2780WHEN 9:PROCmenuselect
 2790WHEN 17,18:PROCreceive(reason%)
 2800REM WHEN 19:PROCerror("Unsupported window definition.")
 2810ENDCASE
 2820ENDPROC
 2830
 2840REM ***************************************************
 2850
 2860DEFPROCPollReason2
 2870IF ((!block%) > &ffff) THEN
 2880REM PROCerror("Window tobeopened:"+STR$~(!block%)+"  behind: "+STR$~(block%!28)+CHR$0)
 2890SYS "Wimp_OpenWindow",,block%
 2900ELSE
 2910REMcurrentwindow%=!block%:PROCOpenToolTip(2)
 2920REM This is very wierd - the windowhandle is invalid and equals
 2930REM the mouse pointer x position - must be a menu I reckon or
 2940REM could be a bug in RISCOS.
 2950MenuIsOpenFlag%=1
 2960ENDIF
 2970
 2980ENDPROC
 2990
 3000DEFPROCGetScreenSize
 3010SYS"OS_ReadModeVariable",-1,4 TO ,,OS_EX%:REM Eigen
 3020SYS"OS_ReadModeVariable",-1,5 TO ,,OS_EY%
 3030SYS"OS_ReadModeVariable",-1,11 TO ,,OS_WX%:REM Size
 3040SYS"OS_ReadModeVariable",-1,12 TO ,,OS_WY%
 3050OS_MX%=(1+OS_WX%) << OS_EX%
 3060OS_MY%=(1+OS_WY%) << OS_EY%
 3070ENDPROC
 3080
 3090REMDEFPROCkeypressed
 3100REMLOCAL Char%
 3110REMChar%=block%!24
 3120REMREM Is this the delete or backspace key?
 3130REMIF (Char%=8 OR Char%=&7f) THEN
 3140REMREM Is this in a menu?
 3150REMPROCerror("Window handle = "+STR$~(block%!0)+" -- main_menu% = "+STR$~(main_menu%)+CHR$0)
 3160REMELSE
 3170REMSYS "Wimp_ProcessKey",Char%
 3180REMENDIF
 3190REMENDPROC
 3200
 3210DEFPROCReopenDummyWindow
 3220 !block2%=whandle_dummyback%
 3230 SYS"Wimp_GetWindowState",,block2%
 3240 block2%!8=-1024:block2%!16=-1024
 3250 block2%!28=-2
 3260 SYS"Wimp_OpenWindow",,block2% 
 3270 after%=whandle_dummyback%:cascade%=0
 3280 MenuIsOpenFlag%=0
 3290 
 3300 IF (ReorganiseWindowStack=2) ReorganiseWindowStack=0
 3310 IF (ReorganiseWindowStack=1) ReorganiseWindowStack+=1
 3320ENDPROC
 3330
 3340DEF PROCcascade
 3350LOCAL q%,OldAfter%
 3360LOCAL sx%, sy%, ox%, oy%
 3370LOCAL ReopenFlag%, StackFlag%
 3380LOCAL PaneFlag%, IsOpenFlag%, IsMoveableFlag%
 3390LOCAL CurrentWin%,CurrentIcon%
 3400
 3410q%=winblock%
 3420PaneFlag%=FALSE
 3430
 3440REM Get Current window immediately under pointer
 3450SYS"Wimp_GetPointerInfo",,block2%
 3460CurrentWinPtr%=block2%!12
 3470CurrentIcon%=block2%!16
 3480
 3490OldAfter%=after%
 3500!q%=after%
 3510REM _Try_ and reopen this desktop window ...
 3520SYS "XWimp_GetWindowState",,q%
 3530IF (after%=-1 OR ReorganiseWindowStack=1)PROCReopenDummyWindow:ENDPROC
 3540CurrentWin%=!q%
 3550after%=q%!28
 3560IF (CurrentWin%=-1 OR (after%=OldAfter%)) THEN
 3570 PROCReopenDummyWindow
 3580ELSE 
 3590 REM Reposition window
 3600 IF (cascade%=0) CascadeRow%=0:LastRightEdge%=0
 3610 REM !q%=after%:SYS "Wimp_GetWindowState",,q%
 3620 
 3630 
 3640 PaneFlag%=FALSE
 3650 IF (((q%!32) AND ((2^22)+(2^23)))>0) PaneFlag%=TRUE
 3660 IF (((q%!32) AND 32)=32) PaneFlag%=TRUE
 3670 IsOpenFlag% = ((q%!32) AND (2^16))
 3680 IsMoveableFlag% = ((q%!32) AND 2)
 3690 REM Has window moved at all for repositioning?
 3700
 3710 ReopenFlag%=TRUE
 3720 StackFlag%=TRUE
 3730REM  IF (((q%!32) AND (2^18))>0 AND ((q%!32) AND (2^20))>0 AND ((q%!32) AND (2^27))>0) StackFlag%=FALSE:ReopenFlag%=FALSE:REM Toggled Maximise & has input focus & has toggle icon
 3740IF (CurrentWin%=CurrentWinPtr% AND ((q%!32) AND (2^28))=0 AND ((q%!32) AND (2^30))=0 AND ((q%!32) AND (2^17))>0 AND after%=-1) StackFlag%=FALSE:ReopenFlag%=FALSE:REM Under pointer and _no_ horiz/vert scroll bars and fully visible (likely to be part of menu so leave alone)
 3750IF (((q%!32) AND (2^18))>0 AND ((q%!32) AND (2^27))>0 AND ((q%!32) AND (2^28))>0 AND ((q%!32) AND (2^30))>0) StackFlag%=FALSE:ReopenFlag%=FALSE:REM Toggled Maximise & has toggle icon and has horiz/vert scroll bars - likely to be a word processor window
 3760IF ( (q%!16 < (OS_MY%-(cascade%*40))) AND (q%!4 > 0) AND (q%!12 < (OS_MX%-40)) AND (q%!8>40) AND ((q%!32) AND (2^17))>0) StackFlag%=FALSE:ReopenFlag%=FALSE:REM Fully visible
 3770 IF (CurrentWin%=whandle_tooltip%) StackFlag%=FALSE:ReopenFlag%=FALSE
 3780 IF (CurrentWin%=whandle_dummyback%) StackFlag%=FALSE:ReopenFlag%=FALSE
 3790 IF (PaneFlag%=TRUE) StackFlag%=FALSE:ReopenFlag%=FALSE
 3800 IF (IsOpenFlag%=0 OR IsMoveableFlag%=0) StackFlag%=FALSE:ReopenFlag%=FALSE
 3810 IF (MenuIsOpenFlag%=1) StackFlag%=FALSE:ReopenFlag%=FALSE
 3820REM If pointer is over window and within the work area
 3830REM then don't move it.
 3840IF (CurrentWin%=CurrentWinPtr%) ReopenFlag%=FALSE
 3850 REM Reset position of window and do a Re-Open
 3860 REM Get size of window
 3870 IF (StackFlag%=TRUE) THEN
 3880  ox%=q%!4
 3890  oy%=q%!16
 3900  sx%=(q%!12)-(q%!4)
 3910  sy%=(q%!16)-(q%!8)
 3920  
 3930  IF (ReorganiseWindowStack>0) THEN
 3940    REM Try and fit as many windows horizontally as possible
 3950    IF ((LastRightEdge%+sx%)<(OS_MX%-40)) THEN
 3960     q%!4=LastRightEdge%
 3970     q%!16=(OS_MY%-40)-(CascadeRow%*40):REM 1160
 3980     q%!12=(q%!4)+sx%
 3990     IF ((q%!12)>(OS_MX%-40)) q%!12=(OS_MX%-40)
 4000     q%!8=(q%!16)-sy%
 4010     IF ((q%!8)<40) q%!8=40
 4020     LastRightEdge%=(q%!12)+48
 4030    ELSE
 4040     LastRightEdge%=0
 4050     CascadeRow%+=1
 4060     q%!4=(CascadeRow%*8)
 4070     q%!16=(OS_MY%-40)-(CascadeRow%*40):REM 1160
 4080     q%!12=(q%!4)+sx%
 4090     IF ((q%!12)>(OS_MX%-40)) q%!12=(OS_MX%-40)
 4100     q%!8=(q%!16)-sy%
 4110     IF ((q%!8)<40) q%!8=40
 4120     LastRightEdge%=(q%!12)+48
 4130    ENDIF
 4140
 4150
 4160
 4170REM  REM Enable window 'drift'
 4180REM  IF (ox%<>q%!4) THEN
 4190REM   nx%=q%!4
 4200REM   sx%=(q%!12)-(q%!4)
 4210REM   dx%=nx%-ox%
 4220REM   IF (ABS(dx%)>40) THEN
 4230REM    nx%=ox%+(SGN(dx%)*40)
 4240REM    q%!4=nx%:q%!12=nx%+sx%
 4250REM   ENDIF
 4260REM  ENDIF
 4270REM  IF (oy%<>q%!16) THEN
 4280REM   ny%=q%!16
 4290REM   sy%=(q%!16)-(q%!8)
 4300REM   dy%=ny%-oy%
 4310REM   IF (ABS(dy%)>40) THEN
 4320REM    ny%=oy%+(SGN(dy%)*40)
 4330REM    q%!16=ny%:q%!8=ny%-sy%
 4340REM   ENDIF
 4350REM  ENDIF
 4360
 4370    REM Having allowed space for this window in the
 4380    REM window cascade, are we sure we want to move
 4390    REM it just yet?
 4400  
 4410    IF (ReopenFlag%=TRUE) THEN
 4420     SYS "XWimp_SendMessage",2,q%,CurrentWin%
 4430    ENDIF
 4440 ENDIF:REM End of IF (ReorganiseWindowStack) ...
 4450   
 4460  cascade%+=1
 4470  
 4480 ENDIF
 4490 ENDIF
 4500ENDPROC
 4510
 4520REM *********************************************
 4530REM * Animate the icon bar icon                 *
 4540REM *********************************************
 4550DEFPROCAnimateIconBar
 4560$iconbardata%=IconBarAnim$(IconBarAnimStep)
 4570IconBarAnimStep+=IconBarAnimDir
 4580IF (IconBarAnimStep<0 OR IconBarAnimStep=IconBarAnimSize%) THEN
 4590IconBarAnimStep=0
 4600REM  IconBarAnimDir = IconBarAnimDir*-1
 4610REM IconBarAnimStep+=IconBarAnimDir
 4620ENDIF
 4630REM Activate an update on the task bar icon .....
 4640!block2%=-2
 4650block2%!4=iconbarhandle%
 4660SYS"Wimp_GetIconState",,block2%
 4670block2%!8=0:REM Don't change anything,
 4680block2%!12=0:REM Just signal an update ...
 4690SYS"Wimp_SetIconState",,block2%
 4700ENDPROC
 4710
 4720REM *********************************************
 4730REM What shall we do during the idle wimp poll ?
 4740REM This is the most important aspect of this
 4750REM program and one which should enable a lot of
 4760REM change with future versions of the software.
 4770REM *********************************************
 4780DEFPROCnull_reason
 4790LOCAL window%
 4800SYS"Wimp_GetPointerInfo",,block%
 4810
 4820PROCalba_purge(400)
 4830
 4840X%=block%!0
 4850Y%=block%!4
 4860window%=block%!12
 4870currentwindow%=window%
 4880PROCGetScreenSize
 4890
 4900REM Are any mouse buttons pressed?
 4910REM If not then reorganise [cascade] windows
 4920IF (((block%!8) AND 7)=0) THEN
 4930 PROCcascade
 4940ENDIF
 4950
 4960REM Update the task bar icon each WIMP POLL
 4970PROCAnimateIconBar
 4980
 4990REM If the task bar tool tip shows the TIME
 5000REM then update it ...
 5010IF (ToolTip%=1) PROCUpdateToolTipTime
 5020
 5030SYS"Wimp_GetPointerInfo",,block%
 5040X%=block%!0
 5050Y%=block%!4
 5060window%=block%!12
 5070currentwindow%=window%
 5080
 5090REM This may be needed to stop flicker
 5100REM *fx19
 5110
 5120REMENDIF
 5130REMIF (qf_timer>0) PROCfocusdelay
 5140IF (X%<regionxs%) THEN
 5150PROCleft_corner:ENDPROC
 5160ENDIF
 5170IF (X%>(OS_MX%-regionxs%)) THEN
 5180PROCright_corner:ENDPROC
 5190ENDIF
 5200REM Is Pointer over iconbar icon?
 5210REM Close tooltip if pointer moves over it (effectively push tip)
 5220REM IF (((block%!12)=-2 AND (block%!16=iconbarhandle%)) OR (window%=whandle_tooltip% AND ToolTip%>0)) THEN
 5230IF (((block%!12)=-2 AND (block%!16=iconbarhandle%))) THEN
 5240PROCmove_overiconbar
 5250ELSE
 5260OldToolTip%=0
 5270
 5280REMIF (((TIME-tooltip_timer%)>100) AND ToolTip%>0) THEN
 5290IF (ToolTip%>0) THEN
 5300IF (block%!16 <> whandle_tooltip%) iconbar_timerflag%=0
 5310PROCCloseToolTip
 5320ELSE
 5330REMiconbar_timer%=TIME
 5340iconbar_timerflag%=0
 5350ENDIF
 5360ENDIF
 5370REMIF (window%=-2) firstmenuhandle%=-2
 5380REMIF (window%<>-2) PROCpointernotoniconbar:REM Must come first
 5390IF ((X%>regionxs% AND X%<(OS_MX%-regionxs%)) OR Y%>regionys%) PROCoutoffocus
 5400REMIF ((X%>regionxs% AND X%<(OS_MX%-regionxs%)) AND Y%=0) PROCpointeronbottomedge
 5410IF (Y%=0) THEN
 5420IF (BottomEdgeFlag=0) PROCpointeronbottomedge
 5430ELSE
 5440BottomEdgeFlag=0
 5450ENDIF
 5460
 5470REMPROCCloseToolTip
 5480REMPROCOpenToolTip(2)
 5490ENDPROC
 5500
 5510REM ***************************************************
 5520
 5530DEFPROCpointeronbottomedge
 5540LOCAL stackposition%
 5550REM Is iconbar at top of stack? If not make it so.
 5560REMSYS"Wimp_ProcessKey",&1dc
 5570
 5580REM PROCerror("Pointer on bottom edge."+CHR$0)
 5590REM Open up start menu if it's not already open
 5600BottomEdgeFlag=1
 5610ReorganiseWindowStack=1
 5620REM Close relevant window
 5630REMSYS "Wimp_CreateMenu",,-1
 5640REM Open start menu
 5650REMPROCclick_iconbarmenu
 5660REMENDPROC
 5670
 5680REM!block%=-2
 5690REMSYS"Wimp_GetWindowState",,block%
 5700REMstackposition%=block%!28
 5710REMIF (stackposition%<>-1) THEN
 5720REMblock%!28=-1
 5730REMSYS"Wimp_OpenWindow",,block%
 5740REM Toggle icon bar back/front
 5750SYS"Wimp_ProcessKey",&1dc
 5760
 5770REM Reopen dummyback window at bottom of stack
 5780!block%=whandle_dummyback%
 5790SYS"Wimp_GetWindowState",,block%
 5800block%!8=-1024:block%!16=-1024
 5810block%!28=-2
 5820SYS"Wimp_OpenWindow",,block%
 5830after%=whandle_dummyback%:cascade%=0
 5840
 5850ENDPROC
 5860
 5870DEFPROCpointernotoniconbar
 5880REM ENDPROC
 5890REM Is iconbar on bottom of stack? If not make it so/
 5900REM No allowed to manually open iconbar so use our internal
 5910REM value
 5920IF (ToolTip%=0 OR (ToolTip%<>0 AND currentwindow%<>whandle_tooltip%)) THEN
 5930IF firstmenuhandle%=-2 firstmenuhandle%=currentwindow%
 5940ENDIF
 5950
 5960!block%=-2
 5970SYS"Wimp_GetWindowState",,block%
 5980stackposition%=block%!28
 5990REMIF (stackposition%=oldstackposition%) THEN
 6000IF (stackposition%<>oldstackposition%) THEN
 6010REMblock%!28=-2
 6020REMSYS"Wimp_CloseWindow",,block%
 6030IF (currentwindow%<>firstmenuhandle% AND firstmenuhandle%>-2) THEN
 6040SYS"Wimp_ProcessKey",&1dc
 6050firstmenuhandle%=-3
 6060REMENDIF
 6070!block%=-2
 6080SYS"Wimp_GetWindowState",,block%
 6090stackposition%=block%!28
 6100REMIF (stackposition%<>-1) oldstackposition%=stackposition%
 6110oldstackposition%=stackposition%
 6120ENDIF
 6130ENDIF
 6140ENDPROC
 6150
 6160REM IF (internalstackposition%=-1 AND currentwindow%>0) THEN
 6170REM SYS"Wimp_ProcessKey",&1dc
 6180REM PROCerror("Window : "+STR$(currentwindow%)+CHR$0)
 6190REM internalstackposition%=-2:REM At bottom
 6200REM ENDIF
 6210REM ENDPROC
 6220
 6230DEFPROCoutoffocus
 6240IF (in_leftregion) THEN PROCleaveleftregion
 6250IF (in_rightregion) THEN PROCleaverightregion
 6260qf_timer=TIME
 6270ENDPROC
 6280
 6290DEFPROCleaveleftregion
 6300in_leftregion=FALSE
 6310ENDPROC
 6320
 6330DEFPROCleaverightregion
 6340in_rightregion=FALSE
 6350ENDPROC
 6360
 6370DEFPROCfocusdelay
 6380IF ((TIME-pause%)>qf_timer) THEN qf_timer=-1:PROCOpenInfoBox
 6390ENDPROC
 6400
 6410DEFPROCleft_corner
 6420IF (in_leftregion=FALSE) ec_timer=TIME:ec_flag=FALSE
 6430in_leftregion=TRUE
 6440REM Check if windows need opening
 6450IF (TIME-ec_timer>=50 AND ec_flag=FALSE) THEN
 6460PROCreopenfiler:ec_flag=TRUE
 6470ENDIF
 6480
 6490ENDPROC
 6500
 6510DEFPROCright_corner
 6520IF (in_rightregion=FALSE) ec_timer=TIME:ec_flag=FALSE
 6530in_rightregion=TRUE
 6540REM Check if windows need closing
 6550REMIF (TIME-ec_timer>=100 AND ec_flag=FALSE) THEN
 6560IF (ec_flag=FALSE) THEN
 6570PROCclosefiler:PROCCloseInfoBox:ec_flag=TRUE
 6580ENDIF
 6590ENDPROC
 6600
 6610REM ***************************************************
 6620
 6630DEFPROCOpenInfoBox
 6640!block%=whandle_info%
 6650SYS"Wimp_GetWindowState",,block%
 6660SYS"Wimp_OpenWindow",,block%
 6670ENDPROC
 6680
 6690DEFPROCCloseInfoBox
 6700!block%=whandle_info%
 6710SYS"Wimp_CloseWindow",,block%
 6720ENDPROC
 6730
 6740REM ***************************************************
 6750
 6760DEFPROCCreateToolTip
 6770LOCAL XOffset%
 6780REM Create the tooltip and dummy global windows
 6790REM The tooltip window displays brief info about the
 6800REM icon under the pointer.
 6810REM The dummy window is needed to provide a 'bottom'
 6820REM window for the window re-organisation tool to
 6830REM start from.
 6840
 6850REM Create the tooltip window
 6860Tip$="Hello"
 6870XS%=(LEN(Tip$)*16)+20:YS%=40
 6880SYS"Wimp_GetPointerInfo",,block%
 6890REM Define screen position of tooltip
 6900XOffset%=XS%/2
 6910IF (XOffset%>32) XOffset%=32
 6920X%=(!block%)-XOffset%
 6930Y%=(block%!4)+24
 6940PROCGetScreenSize
 6950IF ((X%+XS%)>OS_MX%) X%=OS_MX%-XS%
 6960IF (X%<0) X%=0
 6970IF ((Y%+YS%)>OS_MY%) Y%=(block%!4)-(YS%+24)
 6980REM IF ((Y%-YS%)<0) Y%=0
 6990!block%=X%:block%!4=Y%:block%!8=X%+XS%:block%!12=Y%+YS%
 7000XS%=(512*16)+20:YS%=40
 7010block%!16=0:block%!20=0:REM Scroll offsets
 7020block%!24=-1:block%!28=&80000050:REM Depth, window flags
 7030block%!32=&00070207:block%!36=&120103:REM Colours
 7040block%!40=0:block%!44=-YS%:block%!48=XS%:block%!52=0
 7050block%!56=&19:block%!60=3<<12:REM Titlebar/workarea flags
 7060block%!64=0:block%!68=0:REM Sprite area
 7070$(block%+72)=CHR$0
 7080block%!84=1
 7090REM Define 1 icon starting at block%!88
 7100!tooltipicon%=0:REM Null validation string
 7110$(tooltipicon%+4)=Tip$+CHR$0:REM Icon text
 7120block%!88=4:REM Bounding box
 7130block%!92=-40:REM Bounding box
 7140block%!96=((512*16)+20):REM Bounding box of _largest_ tip
 7150block%!100=0:REM Bounding box
 7160block%!104=&17003101
 7170block%!108=tooltipicon%+4
 7180block%!112=tooltipicon%
 7190block%!116=512:REM Buffer length
 7200SYS"Wimp_CreateWindow",,block% TO whandle_tooltip%
 7210XS%=(LEN(Tip$)*16)+20:YS%=40
 7220SYS"Wimp_GetPointerInfo",,block%
 7230REM Define screen position of tooltip
 7240XOffset%=XS%/2
 7250IF (XOffset%>32) XOffset%=32
 7260X%=(!block%)-XOffset%
 7270PROCGetScreenSize
 7280IF ((X%+XS%)>OS_MX%) X%=OS_MX%-XS%
 7290IF (X%<0) X%=0
 7300IF ((Y%+YS%)>OS_MY%) Y%=(block%!4)-(YS%+24)
 7310Y%=-1024
 7320REM IF ((Y%-YS%)<0) Y%=0
 7330REM Get Tooltip window state
 7340!block%=whandle_tooltip%
 7350SYS"Wimp_GetWindowState",,block%
 7360block%!4=X%:block%!8=-1024:block%!12=X%+XS%:block%!16=-1024
 7370block%!20=0:block%!24=0:REM Scroll offsets
 7380REM block%!28=-1
 7390SYS"Wimp_OpenWindow",,block%
 7400ToolTip%=0
 7410
 7420
 7430
 7440REM Create the dummy back window
 7450REM Define screen position of tooltip
 7460XS%=(LEN(Tip$)*16)+20:YS%=40
 7470XOffset%=XS%/2
 7480IF (XOffset%>32) XOffset%=32
 7490X%=64
 7500Y%=-1024
 7510!block%=X%:block%!4=Y%:block%!8=X%+XS%:block%!12=Y%+YS%
 7520XS%=(512*16)+20:YS%=40
 7530block%!16=0:block%!20=0:REM Scroll offsets
 7540block%!24=-1:block%!28=&80000050:REM Depth, window flags
 7550block%!32=&00070207:block%!36=&120103:REM Colours
 7560block%!40=0:block%!44=-YS%:block%!48=XS%:block%!52=0
 7570block%!56=&19:block%!60=3<<12:REM Titlebar/workarea flags
 7580block%!64=0:block%!68=0:REM Sprite area
 7590$(block%+72)=CHR$0
 7600block%!84=1
 7610REM Define 1 icon starting at block%!88
 7620!tooltipicon%=0:REM Null validation string
 7630$(tooltipicon%+4)=Tip$+CHR$0:REM Icon text
 7640block%!88=4:REM Bounding box
 7650block%!92=-32:REM Bounding box
 7660block%!96=((512*16)+20):REM Bounding box of _largest_ tip
 7670block%!100=-8:REM Bounding box
 7680block%!104=&17003101
 7690block%!108=tooltipicon%+4
 7700block%!112=tooltipicon%
 7710block%!116=512:REM Buffer length
 7720SYS"Wimp_CreateWindow",,block% TO whandle_dummyback%
 7730REM Get Tooltip window state
 7740!block%=whandle_dummyback%
 7750SYS"Wimp_GetWindowState",,block%
 7760block%!28=-2
 7770SYS"Wimp_OpenWindow",,block%
 7780after%=whandle_dummyback%:cascade%=0
 7790
 7800ENDPROC
 7810
 7820DEFPROCDestroyToolTip
 7830!block%=whandle_tooltip%
 7840SYS"Wimp_CloseWindow",,block%
 7850SYS"Wimp_DeleteWindow",,block%
 7860
 7870!block%=whandle_dummyback%
 7880SYS"Wimp_CloseWindow",,block%
 7890SYS"Wimp_DeleteWindow",,block%
 7900ENDPROC
 7910
 7920DEFPROCUpdateToolTipTime
 7930LOCAL XOffset%, OldTip$
 7940OldTip$=Tip$
 7950PROCGetDate
 7960Tip$=AppDate$
 7970IF (OldTip$<>Tip$) THEN
 7980REM IF (TipID%=1) Tip$="after% = &"+STR$~(after%)
 7990XS%=(LEN(Tip$)*16)+20:YS%=40
 8000SYS"Wimp_GetPointerInfo",,block2%
 8010REM Adjust Tooltip window state
 8020!block2%=whandle_tooltip%
 8030SYS"Wimp_GetWindowState",,block2%
 8040X%=block2%!4
 8050Y%=block2%!8
 8060!block2%=whandle_tooltip%
 8070block2%!4=X%:block2%!8=Y%:block2%!12=X%+XS%:block2%!16=Y%+YS%
 8080block2%!20=0:block2%!24=0:REM Scroll offsets
 8090block2%!28=-1
 8100$(tooltipicon%+4)=Tip$+CHR$0:REM Icon text
 8110REMSYS"Wimp_OpenWindow",,block2%
 8120REM Update icon
 8130!block2%=whandle_tooltip%
 8140block2%!4=0
 8150SYS"Wimp_GetIconState",,block2%
 8160block2%!8=0:REM Don't change anything,
 8170block2%!12=0:REM Just signal an update ...
 8180SYS"Wimp_SetIconState",,block2%
 8190ENDIF
 8200ENDPROC
 8210
 8220DEFPROCOpenToolTip(TipID%)
 8230LOCAL XOffset%, RandTipID%, RSeed%
 8240IF (TipID%=ToolTip%) ENDPROC
 8250IF (ToolTip%>0) PROCCloseToolTip
 8260REM Create ToolTip Window
 8270IF (TipID%=1) THEN
 8280 PROCGetDate
 8290 Tip$=AppDate$
 8300ENDIF
 8310IF (TipID%=2) THEN
 8320 REM Tip$="Click for more ..."
 8321 Tip$=""
 8340 RandTipID%=RND(RandTipMax%)
 8360 Tip$=Tip$+RandTip$(RandTipID%) 
 8380ENDIF
 8390IF (TipID%=3) Tip$="currentwindow% = "+STR$(currentwindow%)
 8400REM IF (TipID%=1) Tip$="after% = &"+STR$~(after%)
 8410XS%=(LEN(Tip$)*16)+20:YS%=40
 8420SYS"Wimp_GetPointerInfo",,block%
 8430REM Define screen position of tooltip
 8440XOffset%=XS%/2
 8450IF (XOffset%>32) XOffset%=32
 8460X%=(!block%)-XOffset%
 8470Y%=(block%!4)+24
 8480PROCGetScreenSize
 8490IF ((X%+XS%)>OS_MX%) X%=OS_MX%-XS%
 8500IF (X%<0) X%=0
 8510IF ((Y%+YS%)>OS_MY%) Y%=(block%!4)-(YS%+24)
 8520REM IF ((Y%-YS%)<0) Y%=0
 8530
 8540REM Adjust Tooltip window state
 8550!block%=whandle_tooltip%
 8560SYS"Wimp_GetWindowState",,block%
 8570!block%=whandle_tooltip%
 8580block%!4=X%:block%!8=Y%:block%!12=X%+XS%:block%!16=Y%+YS%
 8590block%!20=0:block%!24=0:REM Scroll offsets
 8600block%!28=-1
 8610$(tooltipicon%+4)=Tip$+CHR$0:REM Icon text
 8620SYS"Wimp_OpenWindow",,block%
 8630ToolTip%=TipID%
 8640tooltip_timer%=TIME
 8650ENDPROC
 8660
 8670DEFPROCCloseToolTip
 8680IF (ToolTip%=0) ENDPROC
 8690!block%=whandle_tooltip%
 8700SYS"Wimp_GetWindowState",,block%
 8710!block%=whandle_tooltip%
 8720block%!8=-1024
 8730block%!16=-1024
 8740SYS"Wimp_OpenWindow",,block%
 8750REMSYS"Wimp_CloseWindow",,block%
 8760REM SYS"Wimp_DeleteWindow",,block%
 8770ToolTip%=0
 8780ENDPROC
 8790
 8800DEFPROCPersistCloseToolTip
 8810IF (ToolTip%=0) ENDPROC
 8820OldToolTip%=ToolTip%
 8830REM!block%=whandle_tooltip%
 8840REMSYS"Wimp_CloseWindow",,block%
 8850!block%=whandle_tooltip%
 8860SYS"Wimp_GetWindowState",,block%
 8870!block%=whandle_tooltip%
 8880block%!8=-1024
 8890block%!16=-1024
 8900SYS"Wimp_OpenWindow",,block%
 8910REM SYS"Wimp_DeleteWindow",,block%
 8920ToolTip%=0
 8930ENDPROC
 8940
 8950REM ***************************************************
 8960
 8970DEFPROCinit_drag(icon%)
 8980qf_timer=-1
 8990SYS"Wimp_GetPointerInfo",,block%
 9000ox%=block%!0
 9010oy%=block%!4
 9020block%!4=icon%
 9030drag_icon%=icon%
 9040block%!4=drag_type%
 9050block%!8=ox%-32
 9060block%!12=oy%-32
 9070block%!16=ox%+32
 9080block%!20=oy%+32
 9090block%!24=&80000000
 9100block%!28=&80000000
 9110block%!32=&7FFFFFFF
 9120block%!36=&7FFFFFFF
 9130SYS"Wimp_DragBox",,block%
 9140
 9150REM Start a sprite drag ....
 9160IF (icon%=add_window%) $dragspritename%="yes"+CHR$0
 9170IF (icon%=subtract_window%) $dragspritename%="no"+CHR$0
 9180!boundspritebox%=0
 9190boundspritebox%!4=0
 9200boundspritebox%!8=ox%+24
 9210boundspritebox%!12=oy%+24
 9220SYS"DragASprite_Start",2+8+64+128,1,dragspritename%,boundspritebox%
 9230ENDPROC
 9240
 9250DEFPROCdragdrop
 9260SYS"Wimp_GetPointerInfo",,block%
 9270block%!20=block%!12
 9280block%!24=block%!16
 9290block%!28=!block%
 9300block%!32=block%!4
 9310block%!36=0
 9320!block%=64:block%!12=0
 9330block%!16=1:block%!40=&fff
 9340$(block%+44) =""
 9350SYS"Wimp_SendMessage",18,block%,block%!20,block%!24
 9360
 9370REM Cancel a sprite drag .......
 9380SYS"DragASprite_Stop"
 9390ENDPROC
 9400
 9410REM ***************************************************
 9420
 9430DEFFNstring(ptr%)
 9440LOCAL a$
 9450WHILE ?ptr%<>0 AND LEN(a$)<254
 9460a$+=CHR$(?ptr%):ptr%+=1
 9470ENDWHILE
 9480=a$
 9490
 9500DEFFNget_line(filehandle%)
 9510LOCAL a$,z%
 9520z%=0
 9530a$=""
 9540REPEAT
 9550IF (NOT(EOF#filehandle%)) THEN z%=BGET#filehandle%
 9560IF z%>=32 a$+=CHR$(z%)
 9570UNTIL z%<32 OR EOF#filehandle%
 9580=a$+CHR$0
 9590
 9600DEFPROCput_line(filehandle%, A$)
 9610LOCAL a$,z%
 9620z%=1
 9630FORz%=1TO LEN(A$)
 9640a$=MID$(A$,z%,1)
 9650IF (ASC(a$)>0) THEN BPUT#filehandle%, ASC(a$)
 9660NEXT
 9670BPUT#filehandle%, 10
 9680ENDPROC
 9690
 9700REM ***************************************************
 9710
 9720DEFPROCloadcache
 9730cache_ext%=0
 9740!cache%=0
 9750REM Load in commands to open filer display
 9760F%=OPENIN(AppPath$+".Users."+User$+".~~open"+CHR$0)
 9770REPEAT
 9780A$=FNget_line(F%)
 9790IF A$<>"" THEN PROCadd_to_cache(A$, open_type%)
 9800UNTIL EOF#F%
 9810CLOSE#F%
 9820REM Load in commands to close filer display
 9830F%=OPENIN(AppPath$+".Users."+User$+".~~close"+CHR$0)
 9840REPEAT
 9850A$=FNget_line(F%)
 9860IF A$<>"" THEN PROCadd_to_cache(A$, close_type%)
 9870UNTIL EOF#F%
 9880CLOSE#F%
 9890ENDPROC
 9900
 9910DEFPROCadd_to_cache(com$, type%)
 9920record_size%=LEN(com$)+1+2
 9930IF (record_size%>255) THEN PROCerror("Path too big! Please shrink !Xuen and reorganise your (lengthy labeled) directory structure.")  
 9940?(cache%+cache_ext%)=record_size%
 9950?(cache%+cache_ext%+1)=type%
 9960FORX%=1 TO LEN(com$)
 9970?(cache%+cache_ext%+1+X%)=ASC(MID$(com$,X%,1))
 9980NEXT
 9990?(cache%+cache_ext%+1+X%)=0:REM Add terminating zero to string
10000cache_ext%+=record_size%
10010IF (cache_ext%>CACHE_SIZE%) THEN PROCerror("Too many windows! Please increase CACHE_SIZE% and rerun !Xuen.")
10020?(cache%+cache_ext%)=0:REM Initialise next record size to NULL
10030ENDPROC
10040
10050REM ***************************************************
10060
10070DEFPROCcache_open
10080cache_ptr%=0
10090REPEAT
10100r_size%=?(cache%+cache_ptr%)
10110type%=?(cache%+cache_ptr%+1)
10120IF (r_size%>0 AND type%=open_type%) THEN PROCexecute_string(cache%+cache_ptr%+2)
10130cache_ptr%+=r_size%
10140UNTILr_size%=0
10150
10160PROCOpenFSView
10170ENDPROC
10180
10190DEFPROCcache_close
10200cache_ptr%=0
10210REPEAT
10220r_size%=?(cache%+cache_ptr%)
10230type%=?(cache%+cache_ptr%+1)
10240IF (r_size%>0 AND type%=close_type%) THEN PROCexecute_string(cache%+cache_ptr%+2)
10250cache_ptr%+=r_size%
10260UNTILr_size%=0
10270
10280PROCCloseFSView
10290ENDPROC
10300
10310DEFPROCexecute_string(str_ptr%)
10320A$=FNstring(str_ptr%)
10330IF A$<>"" THEN OSCLI(A$)
10340ENDPROC
10350
10360REM ***************************************************
10370
10380DEFPROCreopenfiler
10390PROCcache_close
10400PROCcache_open
10410ENDPROC
10420
10430DEFPROCclosefiler
10440PROCcache_close
10450ENDPROC
10460
10470REM ***************************************************
10480
10490DEFPROCsavedesktop
10500DX%=OPENOUT(AppPath$+".tmpfile"+CHR$0)
10510dblock%!0=28
10520dblock%!4=task_handle%
10530dblock%!12=0
10540dblock%!16=10
10550dblock%!20=DX%
10560dblock%!24=0
10570SYS"Wimp_SendMessage",17,dblock%,0
10580ENDPROC
10590
10600REM ************************************************
10610REM Get leaf name of a full path name
10620REM ************************************************
10630DEFFNGetLeafName(ptr%)
10640LOCAL a$,leafptr%,size%
10650REM Determine size of zstring
10660size%=0
10670WHILE ?(ptr%+size%)>31
10680size%+=1
10690ENDWHILE
10700REM Determine offset of leafname
10710leafptr%=size%
10720WHILE (?(ptr%+leafptr%)<>ASC(".")) AND leafptr%>0
10730leafptr%-=1
10740ENDWHILE
10750leafptr%+=1
10760REM Build leafname
10770a$=""
10780WHILE leafptr%<size%
10790a$+=CHR$(?(ptr%+leafptr%))
10800leafptr%+=1
10810ENDWHILE
10820=a$
10830
10840REM ************************************************
10850REM function to deal with incoming messages
10860REM ************************************************
10870DEFPROCreceive(reason%)
10880message%=block%!16
10890REM PROCerror("Message : &"+STR$~(message%)+CHR$0)
10900CASE message% OF
10910WHEN 0:quit%=TRUE
10920WHEN 3:PROCdata_load_add_link:REM PROCerror("DataLoad:"+FNstring(block%+44)+" Leafname:"+FNGetLeafName(block%+44)+" Type:&"+STR$~(!(block%+40))+CHR$0)
10930WHEN 2:PROCdata_ack
10940WHEN 5:PROCdata_open
10950WHEN 10:PROCdesktop_ack
10960WHEN &400C0:PROCsubmenu_warning
10970WHEN &400C9:IconBarMenuOpen%=0
10980ENDCASE
10990ENDPROC
11000
11010REM User has double clicked on a fileicon
11020REM Response - store a link to this file in the ~ directory
11030DEFPROCdata_open
11040LOCAL type%, destinationdir$
11050
11060REM Flush cache if stuff in it ...
11070IF (alba_type%>0 AND alba_type%<>4096) THEN PROCalba_purge(0)
11080
11090alba_newlinkfile$=FNstring(block%+44)
11100alba_newlinkleaf$=FNGetLeafName(block%+44)
11110type%=!(block%+40)
11120alba_type%=type%
11130REM PROCerror("Type = "+STR$(type%)+CHR$0)
11140destinationdir$=AppPath$+".Users."+User$+".Links."
11150
11160
11170IF (type%=4096) THEN
11180REM Store this directory access
11190destinationdir$=destinationdir$+CHR$(SysFilePrefix%)+"Folders"
11200ENDIF
11210
11220IF (type%=8192) THEN
11230REM Store this application access
11240destinationdir$=destinationdir$+CHR$(SysFilePrefix%)+"Programs"
11250ENDIF
11260
11270IF (type%<4096) THEN
11280 IF (type%=DocumentType%) THEN
11290 destinationdir$=destinationdir$+CHR$(SysFilePrefix%)+"Document"
11300 ENDIF
11310 
11320 IF (type%=PictureType%) THEN
11330 destinationdir$=destinationdir$+CHR$(SysFilePrefix%)+"Picture"
11340 ENDIF
11350
11360 IF (type%<>PictureType% AND type%<>DocumentType%) THEN
11370 destinationdir$=destinationdir$+CHR$(SysFilePrefix%)+"Files"
11380 ENDIF
11390ENDIF
11400
11410alba_destinationdir$=destinationdir$
11420alba_time%=TIME
11430ENDPROC
11440
11450DEFPROCautoaddnewshortcut
11460LOCAL autodropdirectory$
11470LOCAL number%, next%,numberofitems%
11480LOCAL oldestdate%,oldestname$,oldesttype%,oldestnext%,oldnext%
11490LOCAL delstring$
11500autodropdirectory$ = alba_destinationdir$
11510PROCensuredir(autodropdirectory$)
11520REM Auto insert directorys have a limit of 9 items
11530REM Is link directory empty?
11540numberofitems%=0
11550next%=0
11560oldestdate%=0
11570WHILE(next%<>-1 AND numberofitems%<=16)
11580$string%=autodropdirectory$+CHR$0
11590oldnext%=next%
11600SYS "OS_GBPB",11,string%,dblock%,1,next%,63,"*" TO ,,,number%,next%
11610IF next%<>-1 THEN
11620numberofitems%+=1
11630IF ((dblock%!24)<oldestdate% OR oldestdate%=0) oldestdate%=dblock%!24:oldestname$=FNstring(dblock%+29):oldestnext%=oldnext%
11640ENDIF
11650ENDWHILE
11660IF (numberofitems%<9) THEN
11670 REM If so then automatically insert
11680 PROCaddnewshortcut(autodropdirectory$,alba_newlinkfile$,alba_newlinkleaf$)
11690ELSE
11700 REM Intelligently delete an old file and
11710 REM Get filetype of this file
11720 $string%=autodropdirectory$+CHR$0
11730 SYS "OS_GBPB",12,string%,dblock%,1,oldestnext%,63,"*"
11740 oldesttype%=dblock%!20
11750  REM PROCerror("Oldest file to remove : "+oldestname$+" of type "+STR$~(oldesttype%)+CHR$0)
11760 REM Delete the oldest link in this dir ...
11770 REM Final check - !Start can only remove a file if it's
11780 REM filetype is &af3 ... (Precaution against error)
11790 IF (oldesttype%=&af3) THEN
11800 delstring$="delete "+autodropdirectory$+"."+oldestname$
11810 REM PROCerror("about to OSCLI "+delstring$+CHR$0)
11820 OSCLI(delstring$+CHR$0)
11830 REM insert a new one ...
11840 PROCaddnewshortcut(autodropdirectory$,alba_newlinkfile$,alba_newlinkleaf$)
11850 ENDIF
11860ENDIF
11870alba_type%=-1
11880ENDPROC
11890
11900REM Prompt user to select directory for new link
11910DEFPROCdata_load_add_link
11920LOCAL path$,leaf$,type%,leafptr%,linkname$
11930IF (FNCheckLinksDirExists=0) ENDPROC
11940path$=FNstring(block%+44)
11950leaf$=FNGetLeafName(block%+44)
11960type%=!(block%+40)
11970linkname$=AppPath$+".Users."+User$+".Links."+leaf$
11980newlinkleaf$=leaf$
11990newlinkfile$=FNstring(block%+44)
12000REM Is link directory empty?
12010$string%=AppPath$+".Users."+User$+".Links"+CHR$0
12020SYS "OS_GBPB",10,string%,dblock%,1,0,63,"*" TO ,,,number%
12030IF number%=0 THEN
12040REM If so then automatically add to root directory
12050PROCaddnewshortcut(AppPath$+".Users."+User$+".Links",newlinkfile$,newlinkleaf$)
12060ELSE
12070PROCshowshortcutmenu(1)
12080ENDIF
12090ENDPROC
12100
12110REM Add new link to the shortcut directory
12120DEFPROCaddnewshortcut(dropdirectory$,add_newlinkfile$,add_newlinkleaf$)
12130LOCAL linkname$,leafptr%
12140linkname$=dropdirectory$+"."+add_newlinkleaf$
12150$string%=add_newlinkfile$+CHR$0
12160REMPROCerror("Contents of "+linkname$+"="+add_newlinkfile$+CHR$0)
12170leafptr%=string%
12180REM Check to see if this file already exists and if so
12190REM prompt for overwrite.
12200X%=OPENOUT(linkname$+CHR$0)
12210WHILE((?leafptr%) > 31)
12220BPUT#X%, ?leafptr%
12230leafptr%+=1
12240ENDWHILE
12250BPUT#X%, 10:REM Output a terminating LF
12260CLOSE#X%
12270REM Set type appropriately
12280OSCLI("SetType "+linkname$+" af3"+CHR$0)
12290ENDPROC
12300
12310DEFPROCalba_purge(expiry%)
12320IF (alba_type%<0) THEN ENDPROC
12330IF (expiry%>0 AND (alba_time%+expiry%)>TIME) THEN ENDPROC
12340PROCautoaddnewshortcut
12350ENDPROC
12360
12370DEFPROCdata_ack
12380REM Store path in temp string
12390path$=FNstring(block%+44)
12400path$=LEFT$(path$)
12410dhandle%=block%!20
12420IF INSTR(path$,"<Wimp$ScrapDir>")>0 THEN
12430 REMIF (drag_icon%=add_window%) THEN 
12440  PROCerror("You can't add that to the Filer window cache."+CHR$0)
12450 REMENDIF
12460 ENDPROC
12470ENDIF
12480REM Compile desktop boot file
12490SYS"Hourglass_On"
12500IF (drag_icon%=add_window%) THEN PROCsavedesktop
12510IF (drag_icon%=subtract_window%) THEN PROCsubtract_window
12520ENDPROC
12530
12540DEFPROCdesktop_ack
12550REM If we get a desktop_ack then that means that all
12560REM applications have responded to the request to write
12570REM to the desktop boot file.
12580IF (DX%<>0) THEN CLOSE#DX%:DX%=0
12590IF drag_icon%=add_window% THEN PROCadd_window
12600ENDPROC
12610
12620REM ***************************************************
12630
12640DEFPROCadd_window
12650REM Go through desktop bootfile looking for path string
12660REM If this line contains path_string then add relevant
12670REM line of boot file to config file.
12680newline$=""
12690X%=OPENIN(AppPath$+".tmpfile"+CHR$0)
12700REPEAT
12710A$=FNget_line(X%)
12720path_start%=INSTR(A$, path$)
12730path_length%=LEN(path$)
12740IF (INSTR(A$, "Filer_OpenDir")>0 AND path_start%>0 AND ASC(MID$(A$,path_start%+path_length%,1))<=32) THEN newline$=A$
12750UNTIL EOF#X%
12760CLOSE#X%
12770REM No serious precautions needed here because of the
12780REM file name used ... tmpfile
12790OSCLI("Delete "+AppPath$+".tmpfile"+CHR$0)
12800
12810X%=OPENUP(AppPath$+".Users."+User$+".~~Open"+CHR$0)
12820PTR#X%=EXT#X%
12830PROCput_line(X%, newline$)
12840CLOSE#X%
12850
12860X%=OPENUP(AppPath$+".Users."+User$+".~~Close"+CHR$0)
12870PTR#X%=EXT#X%
12880PROCput_line(X%, "Filer_CloseDir "+path$)
12890CLOSE#X%
12900REM Re-initialise the Cache
12910PROCloadcache
12920SYS"Hourglass_Off"
12930ENDPROC
12940
12950REM ***************************************************
12960
12970DEFPROCsubtract_window
12980X%=OPENIN(AppPath$+".Users."+User$+".~~Open"+CHR$0)
12990Y%=OPENOUT(AppPath$+".Users."+User$+".tmpfile"+CHR$0)
13000REPEAT
13010A$=FNget_line(X%)
13020path_start%=INSTR(A$, path$)
13030path_length%=LEN(path$)
13040IF (INSTR(A$, "Filer_OpenDir")=0 OR path_start%=0 OR ASC(MID$(A$,path_start%+path_length%,1))>32) THEN PROCput_line(Y%, A$)
13050UNTIL EOF#X%
13060CLOSE#X%
13070CLOSE#Y%
13080OSCLI("Delete "+AppPath$+".Users."+User$+".~~Open"+CHR$0)
13090OSCLI("Rename "+AppPath$+".tmpfile "+AppPath$+".Users."+User$+".~~Open"+CHR$0)
13100
13110X%=OPENIN(AppPath$+".Users."+User$+".~~Close"+CHR$0)
13120Y%=OPENOUT(AppPath$+".tmpfile"+CHR$0)
13130REPEAT
13140A$=FNget_line(X%)
13150path_start%=INSTR(A$, path$)
13160path_length%=LEN(path$)
13170IF (INSTR(A$, "Filer_CloseDir")=0 OR path_start%=0 OR ASC(MID$(A$,path_start%+path_length%,1))>32) THEN PROCput_line(Y%, A$)
13180UNTIL EOF#X%
13190CLOSE#X%
13200CLOSE#Y%
13210OSCLI("Delete "+AppPath$+".Users."+User$+".~~Close"+CHR$0)
13220OSCLI("Rename "+AppPath$+".tmpfile "+AppPath$+".Users."+User$+".~~Close"+CHR$0)
13230REM Re-initialise the Cache
13240PROCloadcache
13250SYS"Hourglass_Off"
13260ENDPROC
13270
13280REM ***************************************************
13290REM ***************************************************
13300REM ***************************************************
13310REM ***************************************************
13320
13330DEFPROCinit
13340REM Do ~~Open and ~~Close files exist? If not, create empty
13350REM copies of them to prevent !Start crashing.
13360PROCensuredir(AppPath$+".Users")
13370PROCensuredir(AppPath$+".Users."+User$)
13380PROCensuredir(AppPath$+".Users."+User$+".Links")
13390
13400$string%=AppPath$+".Users."+User$+".~~Open"
13410SYS"OS_File",17,string% TO result%
13420IF (result%=0) THEN X%=OPENOUT(AppPath$+".Users."+User$+".~~Open"):CLOSE#X%
13430$string%=AppPath$+".Users."+User$+".~~Close"
13440SYS"OS_File",17,string% TO result%
13450IF (result%=0) THEN X%=OPENOUT(AppPath$+".Users."+User$+".~~Close"):CLOSE#X%
13460
13470SYS "Wimp_Initialise",200,&4B534154,app$ TO current_wimp_version%,task_handle%
13480
13490SYS"Wimp_OpenTemplate",,AppPath$+".Templates"
13500$string%="Info"
13510SYS"Wimp_LoadTemplate",,block%,infodata%,infodata%+2048,-1,string%,0
13520SYS"Wimp_CreateWindow",,block% TO whandle_info%
13530SYS"Wimp_CloseTemplate"
13540
13550RESTORE 13680
13560PROCsetupmenu(main_menu%)
13570
13580REM Install an icon on the icon bar using the shortcut icon
13590iconbarhandle%=FNcreate_icon(-2,0,-16,84,106,&1700310B,"!xuen",iconbarlabel%,iconbardata%,32)
13600
13610ENDPROC
13620
13630REM ***************************************************
13640REM ***************************************************
13650REM ***************************************************
13660REM ***************************************************
13670
13680DATA "Xuen",5
13690DATA 0,whandle_info%,"Info"
13700DATA 0,-1,"Clean Desk"
13710DATA 0,-1,"NoHourglass"
13720DATA 0,-1,"Edit Links"
13730DATA &80,-1,"Quit"
13740
13750REM *********************************************************
13760
13770REM function to inform the wimp of the presence of an icon
13780DEFFNcreate_icon(whan%,ix%,iy%,iw%,ih%,flag%,text$,ptr1%,ptr2%,ptr3%)
13790!block%=whan%
13800block%!4=ix%
13810block%!8=iy%
13820block%!12=ix%+iw%
13830block%!16=iy%+ih%
13840block%!20=flag%
13850IF ptr1%=0 THEN
13860$(block%+24)=text$
13870ELSE
13880block%!24=ptr1%
13890block%!28=ptr2%
13900block%!32=ptr3%
13910ENDIF
13920SYS"Wimp_CreateIcon",,block% TO ihandle%
13930=ihandle%
13940
13950REM ********************************************************
13960
13970REM General mouse click handling routine.
13980REM Note to people who don't really have a clue about WIMP system:
13990REM All clickings on menus will never reach this procedure,
14000REM it deals with all clicks on windows and the iconbar.
14010DEFPROCclick(win%)
14020CASE win% OF
14030WHEN -2:PROCclick_iconbar(block%!8)
14040WHEN whandle_info%:PROCclick_info(block%!8)
14050ENDCASE
14060ENDPROC
14070
14080DEFPROCclick_iconbar(button%)
14090CASE button% OF
14100WHEN 0:PROCmove_overiconbar
14110WHEN 1:PROCclick_iconbaradjust
14120WHEN 2:PROCclick_iconbarmenu
14130WHEN 4:PROCclick_iconbarselect
14140ENDCASE
14150ENDPROC
14160
14170DEFPROCmove_overiconbar
14180IF IconBarMenuOpen%=1 iconbar_timerflag%=0
14190REM Is pointer over iconbar icon? If so inc iconbar_timer
14200IF (iconbar_timerflag%=0 AND IconBarMenuOpen%<>1) iconbar_timerflag%=1:iconbar_timer%=TIME
14210IF (((TIME-iconbar_timer%)>25) AND iconbar_timerflag%=1 AND OldToolTip%<>1) THEN
14220 REM What sort of tool tip?
14230 RSeed%=RND(-TIME)
14240 IF (RND(4)=1) THEN
14270  PROCOpenToolTip(2):iconbar_timerflag%=2
14271 ELSE
14280  PROCOpenToolTip(1):iconbar_timerflag%=2
14290 ENDIF
14291ENDIF
14300IF (((TIME-iconbar_timer%)>1000) AND ToolTip%>0) PROCPersistCloseToolTip:iconbar_timerflag%=0
14310ENDPROC
14320
14330DEFPROCclick_iconbargeneral
14340IF ToolTip%=1 PROCPersistCloseToolTip
14350SYS"Wimp_GetPointerInfo",,block%
14360override_tooltip%=1
14370IconBarMenuOpen%=1:REM Inhibit tool tip display over menu
14380IF (INKEY-1) THEN
14390PROCshowmenu(main_menu%,!block%-64, 96+(5*44))
14400ELSE
14410PROCshowshortcutmenu(0)
14420ENDIF
14430ENDPROC
14440
14450DEFPROCclick_iconbarmenu
14460PROCclick_iconbargeneral
14470ENDPROC
14480
14490DEFPROCclick_iconbarselect
14500IF (INKEY-1) AND (INKEY-2) THEN
14510REM Open cache windows
14520PROCreopenfiler
14530ENDPROC
14540ENDIF
14550
14560IF (INKEY-2) THEN
14570REM Start drag to add a window
14580SYS"Wimp_GetPointerInfo",,block%
14590IF (block%!8) PROCinit_drag(add_window%)
14600ELSE
14610REM Click menu
14620PROCclick_iconbargeneral
14630ENDIF
14640ENDPROC
14650
14660DEFPROCclick_iconbaradjust
14670IF (INKEY-1) AND (INKEY-2) THEN
14680REM Close cache windows
14690PROCclosefiler:PROCCloseInfoBox
14700ENDPROC
14710ENDIF
14720IF (INKEY-2) THEN
14730SYS"Wimp_GetPointerInfo",,block%
14740REM Start drag to remove a window
14750IF (block%!8) PROCinit_drag(subtract_window%)
14760ELSE
14770PROCclick_iconbargeneral
14780ENDIF
14790ENDPROC
14800
14810DEFFNCheckLinksDirExists
14820LOCAL dir$,result%
14830dir$=AppPath$+".Users."+User$+".Links"
14840REM Does the Links directory exist?
14850$string%=dir$+CHR$0
14860SYS"OS_File",17,string% TO result%
14870REM If not, create one.
14880IF (result%=0) THEN OSCLI("CDIR "+dir$+CHR$0)
14890SYS"OS_File",17,string% TO result%
14900REM Has it created it? If not, error.
14910IF (result%=0) THEN
14920PROCerror("Fatal : Couldn't create "+dir$+CHR$0)
14930=0
14940ENDIF
14950=1
14960
14970DEFPROCensuredir(edir$)
14980LOCAL result%
14990REM Does the directory exist?
15000$string%=edir$+CHR$0
15010SYS"OS_File",17,string% TO result%
15020REM If not, create one.
15030IF (result%=0) THEN OSCLI("CDIR "+edir$+CHR$0)
15040SYS"OS_File",17,string% TO result%
15050REM Has it created it? If not, error.
15060IF (result%=0) THEN
15070PROCerror("Fatal : Couldn't create "+edir$+CHR$0)
15080REM =0
15090ENDIF
15100REM=1
15110ENDPROC
15120
15130REM **************************************************
15140REM Start building the shortcutmenu
15150REM **************************************************
15160DEFPROCshowshortcutmenu(arg%)
15170IF (ToolTip%=1) PROCPersistCloseToolTip
15180addlink%=arg%
15190IF (FNCheckLinksDirExists=0) ENDPROC
15200dirptr%(0)=shortcutmenu%
15210REM linkmenudepth%=0:REM At top level
15220
15230PROCSingleDirectoryRead(AppPath$+".Users."+User$+".Links", User$, 0)
15240initialmenusize%=dirlist%(0)
15250IF initialmenusize%=0 initialmenusize%=1
15260SYS"Wimp_GetPointerInfo",,block%
15270PROCshowmenu(shortcutmenu%,!block%-64, 96+((initialmenusize%)*44))
15280ENDPROC
15290
15300
15310
15320REM *****************************************************
15330REM Read contents of a directory into the menu data areas
15340REM *****************************************************
15350DEFPROCSingleDirectoryRead(localdir$,dirfilename$,linkdepth%)
15360LOCAL oldlocaldir$,olddirfilename$,oldlinkdepth%, olddirptr%
15370LOCAL dirsize%, DirScan%
15380LOCAL dir$,next%,type%,item$,currentdir%,ptr%
15390LOCAL currentmenuptr%, locali%, width%,title$
15400LOCAL TitlePtr%, MenuExtent%
15410LOCAL filetype%, filetypeinfo%,linktype%,objecttype%,linktypeinfo%
15420LOCAL ValidLoadFlag%
15430LOCAL CurrentLinkDepth%
15440LOCAL NumberOfLinks%
15450
15460CurrentLinkDepth%=linkdepth%
15470oldlocaldir$ = localdir$
15480olddirfilename$ = dirfilename$
15490oldlinkdepth% = linkdepth%
15500olddirptr%=dirptr%(oldlinkdepth%)
15510DirScan%=FALSE
15520
15530REPEAT:REM Repeat until loaded in directory with no errors
15540localdir$ = oldlocaldir$
15550dirfilename$ = olddirfilename$
15560linkdepth% = oldlinkdepth%
15570dirptr%(oldlinkdepth%)=olddirptr%
15580DirScan%=TRUE
15590
15600REM Calculate pointer to shortcutmenu% & index into
15610REM shortcutmenudata%
15620dir$=localdir$
15630a%=0
15640currentmenuptr%=shortcutmenu%
15650i%=0
15660WHILE a%<linkdepth%
15670currentmenuptr%+=(28+(dirlist%(a%)*24))
15680i%+=dirlist%(a%)
15690a%+=1
15700ENDWHILE
15710
15720REM Initialise start menu user/system seperator to be null
15730IF (linkdepth%=0) StartMenuSeperator%=-1
15740
15750REMPROCerror("MenuPtr = "+STR$~(currentmenuptr%)+CHR$0)
15760next%=0
15770numberofitems%=0
15780
15790REM Get number of items in current directory localdir$
15800WHILE (next%<>-1)
15810$string%=dir$+CHR$0
15820SYS "OS_GBPB",10,string%,dblock%,1,next%,63,"*" TO ,,,number%,next%
15830IF next%<>-1 numberofitems%+=1
15840ENDWHILE
15850
15860
15870REMPROCerror("Directory size = "+STR$(numberofitems%)+CHR$0)
15880
15890dirlist%(linkdepth%)=numberofitems%
15900nextmenuptr%=currentmenuptr%+(28+(numberofitems%*24))
15910dirptr%(linkdepth%+1)=nextmenuptr%
15920
15930locali%=i%
15940REM Build titleless menu
15950REM title$="Menu "+STR$(currentdir%)+CHR$0
15960IF (linkdepth%=1 AND LEFT$(dirfilename$,1)=CHR$(SysFilePrefix%)) THEN
15970 title$=RIGHT$(dirfilename$,LEN(dirfilename$)-1)+CHR$0
15980 ELSE
15990 title$=dirfilename$+CHR$0
16000ENDIF
16010
16020TitlePtr%=currentmenuptr%
16030$TitlePtr%=title$
16040width%=(LEN(title$)-2)*16
16050currentmenuptr%!12 = &00070207
16060currentmenuptr%!20=44
16070currentmenuptr%!24=0
16080ptr%=currentmenuptr%+28
16090
16100next%=0
16110
16120NumberOfLinks%=numberofitems%
16130
16140WHILE (next%<NumberOfLinks% AND DirScan%=TRUE)
16150ValidLoadFlag%=TRUE
16160SYS "OS_GBPB",10,dir$,dblock%,1,next%,63,"*"
16170next%+=1
16180locali%=i%
16190REM Get Object type (2 = directory, 1 = file)
16200type% = dblock%?&10
16210REM Get name of this object
16220item$=FNgetname(dblock%+&14)
16230REM Get file attributes
16240filetypeinfo%= !dblock% >>> 20
16250filetype%=(!dblock% >> 8)AND &FFF
16260
16270REM Initialise menu object
16280!ptr%=8:REM mflags = &80 means last menu item
16290ptr%!4=-1:REM pointer to sub menu
16300REM Store this filer object, whatever it is
16310!(shortcutmenudata%+(locali%*64)+32+28) = type%
16320REM Is this object a directory?
16330IF (type% =2) THEN
16340 REM If so, then add to directory list
16350 $(shortcutmenudata%+(locali%*64)+32) = ""+CHR$0
16360 ptr%!4 = nextmenuptr%:REM Pointer to submenu
16370 ELSE
16380 REM This is a link and not a directory
16390 REM  PROCerror("Processing "+item$+CHR$0)
16400 REM Get filetype of link object
16410 $string%=FNGetLinkContents(dir$+"."+item$)+CHR$0
16420 
16430 IF (FNCheckValidDrive(FNstring(string%)) =1) THEN
16440  SYS "OS_File",17,string% TO objecttype%,,linkloadaddr%
16450  linktype%=(linkloadaddr%>>8) AND &FFF
16460  linktypeinfo%= linkloadaddr% >>> 20
16470 ELSE
16480  objecttype%=0
16490 ENDIF
16500 REMPROCerror(FNGetLinkContents(dir$+"."+item$)+" is a "+STR$(linktypeinfo%)+CHR$0)
16510 IF (objecttype%=0) THEN
16520  REM PROCerror("Error : Link("+FNGetLinkContents(dir$+"."+item$)+") not found."+CHR$0)
16530  REM Delete this link and rescan the directory
16540  REM Safety first - ensure this file is actually a link in
16550  REM case the <Start$Dir> system variable has become corrupt (!)
16560  IF (filetype%=&af3) THEN
16570   REM PROCerror("Invalid link "+dir$+"."+item$+" has been found and will be deleted when you click OK."+CHR$0)
16580   OSCLI("delete "+dir$+"."+item$+CHR$0)
16590   DirScan%=FALSE
16600   ValidLoadFlag%=FALSE
16610   ELSE
16620   PROCerror("Error: Another prog has altered the <Xuenbs$Dir> system variable or someone has placed a non-link "+dir$+"."+item$+" into the links directory. Rerun the !Xuen application or remove the offending file from the !Xuen.Links directory."+CHR$0)
16630  ENDIF
16640 
16650 ENDIF
16660 
16670 REM $(shortcutmenudata%+(locali%*64)+32) = "Ssmall_dir"+CHR$0
16680 
16690 IF (objecttype%=1) THEN
16700  REM This link is a pointer to a file
16710  REM PROCerror(FNstring(string%)+" is a file"+CHR$0)
16720  $(shortcutmenudata%+(locali%*64)+32) = "Ssmall_"+STR$~(linktype%)+CHR$0
16730 ENDIF
16740
16750 REM For some wierd reason the following two variables must
16760 REM be evaluated outside of the objecttype test. I think
16770 REM it must be something to do with the pipeline and/or a
16780 REM bug in the BASIC rom.
16790 shriek%=ASC("!")
16800 namestart%=ASC(LEFT$(item$,1))
16810 REM PROCerror(STR$(namestart%-shriek%)+CHR$0) 
16820 IF (objecttype%=2) THEN
16830  REM This link is a pointer to an application or directory
16840  REM PROCerror(FirstChar$+CHR$0)
16850  IF (namestart%<>shriek%) THEN
16860   REM !ptr%=(!ptr%)+4
16870   $(shortcutmenudata%+(locali%*64)+32) = "Ssmall_dir"+CHR$0
16880   ELSE
16890   $(shortcutmenudata%+(locali%*64)+32) = "Ssm"+item$+CHR$0
16900  ENDIF
16910 ENDIF
16920
16930ENDIF
16940
16950REM Build rest of menu item attributes
16960ptr%!8=&7000313:REM icon type
16970REM IF (type%=2 AND objecttype%=0) ptr%!8=&7400313:REM Invalid line
16980IF (addlink%=1) ptr%!8=&3000313
16990$(shortcutmenudata%+(locali%*64))=item$+CHR$0
17000ptr%!12 = shortcutmenudata%+(locali%*64)
17010ptr%!16 = shortcutmenudata%+(locali%*64)+32
17020ptr%!20 = 28:REM menu item string buffer = 28 bytes
17030
17040IF (linkdepth%=0) THEN
17050IF (MID$(item$,1,1)=CHR$(SysFilePrefix%) AND StartMenuSeperator%<0) THEN
17060REM PROCerror("Name = "+FNstring(shortcutmenudata%+(locali%*64))+CHR$0)
17070StartMenuSeperator%=locali%
17080REM Does this item need a dotted line above it?
17090IF (locali%>0) !(ptr%-24)=(!(ptr%-24)) + 2
17100ENDIF
17110IF (locali%>=StartMenuSeperator% AND StartMenuSeperator%>=0) $(shortcutmenudata%+(locali%*64))=RIGHT$(item$,LEN(item$)-1)+CHR$0
17120ENDIF
17130
17140
17150a%=(LEN(item$)+4)*16
17160IF a%>width% width%=a%
17170ptr%+=24
17180i%+=1
17190ENDWHILE
17200
17210REM Has this list got anything in it?
17220IF (dirlist%(linkdepth%)>0) THEN
17230!(ptr%-24)=&88:REM Set last menu item
17240ELSE
17250width%=(LEN(title$)-2)*16
17260REM Make default first entry be greyed out label 'empty'
17270item$="Empty"+CHR$0
17280$(shortcutmenudata%+(locali%*64)+32) = ""+CHR$0
17290!ptr%=&88:REM mflags = &80 means last menu item 8=IssueWarn
17300ptr%!4=-1:REM pointer to sub menu
17310IF (addlink%=1) THEN
17320ptr%!8=&3000313:REM greyed out SELECTABLE icon type (Add link)
17330ELSE
17340ptr%!8=&2400B33:REM greyed out UNSELECTABLE icon type
17350ENDIF
17360$(shortcutmenudata%+(locali%*64))=item$
17370$(ptr%+12)=item$
17380ptr%!12 = shortcutmenudata%+(locali%*64)
17390ptr%!16 = shortcutmenudata%+(locali%*64)+32
17400ptr%!20 = 28:REM menu item string buffer = 28 bytes
17410a%=(LEN(item$)+4)*16
17420IF a%>width% width%=a%
17430i%+=1
17440ENDIF
17450REM Does this menu fit on the screen ?
17460REMMenuExtent% = MenuX%+(width% * MenuDirection%)
17470REMIF (MenuExtent%>OS_MX% OR MenuExtent%<0) THEN
17480REM title$="\"+title$
17490REM $TitlePtr% = title$
17500REM MenuDirection%=MenuDirection%*-1
17510REM REM Adjust width
17520REM IF ((LEN(title$)-2)*16) > width%) THEN
17530REM  width%=(LEN(title$)-2)*16
17540REM ENDIF
17550REMENDIF
17560currentmenuptr%!16=width%
17570
17580REM ENDPROC
17590
17600REM End of directory scanning
17610UNTIL DirScan%=TRUE
17620dirlist%(linkdepth%)=numberofitems%
17630
17640IF (dirlist%(linkdepth%)=0) dirlist%(linkdepth%)=1
17650ENDPROC
17660
17670REM *************************************************
17680REM A Submenu is about to open
17690REM *************************************************
17700DEFPROCsubmenu_warning
17710LOCAL ptr%,localdir$,depth%,index%,selection%,leaf$,i%
17720localdir$=AppPath$+".Users."+User$+".Links"
17730REM Navigate menu index data to determine where we are
17740depth%=0
17750index%=0
17760ptr%=block%+32
17770WHILE !((block%+32)+(depth%*4)) <> -1
17780selection%=!((block%+32)+(depth%*4))
17790leaf$=FNstring(shortcutmenudata%+((index%+selection%)*64))
17800REM Is this a system directory name?
17810i%=selection%
17820IF (depth%=0 AND i%>=StartMenuSeperator% AND StartMenuSeperator%>=0) THEN
17830leaf$=CHR$(SysFilePrefix%)+leaf$
17840ENDIF
17850localdir$=localdir$+"."+leaf$
17860index%+=dirlist%(depth%)
17870depth%+=1
17880ENDWHILE
17890PROCSingleDirectoryRead(localdir$,leaf$,depth%)
17900SYS"Wimp_CreateSubMenu",,block%!20,block%!24,block%!28
17910ENDPROC
17920
17930REM *****************************************************
17940REM Recursive Directory boot
17950REM *****************************************************
17960DEFPROCDirectoryBoot(localdir$)
17970LOCAL dir$, next%,type%, item$, objectcount%, currentdir%
17980LOCAL number%,LD%
17990LOCAL linktype%,linkdir$
18000dir$=localdir$
18010next%=0
18020REMSYS"Hourglass_On"
18030WHILE next%<>-1
18040
18050PROCpoll
18060PROCpoll
18070
18080SYS "OS_GBPB",10,dir$,bootblock%,1,next%,63,"*" TO ,,,number%,next%
18090REM Get Object type (2 = directory, 1 = file)
18100type% = bootblock%?&10
18110REM Get name of this object
18120item$=FNgetname(bootblock%+&14)
18130REM Has this directory got anything in it?
18140IF (next%<>-1) THEN
18150 REM Is this a directory (ie type=2) 
18160 IF (type%=2) THEN
18170   PROCDirectoryBoot(dir$+"."+item$)
18180 ELSE
18190   REM Must be a link to a file or application
18200   REM What type of thing does this link point to?
18210   REM PROCerror("Opening "+dir$+CHR$0)
18220   LD%=OPENIN(dir$+"."+item$+CHR$0)
18230   linkdir$=""
18240   REPEAT
18250   LD$=CHR$(BGET#LD%)
18260   IF (ASC(LD$)>31) linkdir$+=LD$
18270   UNTIL ASC(LD$)<32 OR EOF#LD%
18280   CLOSE#LD% 
18290   REM What type is the linkdir?
18300   $bootstring%=linkdir$+CHR$0
18310   IF (FNCheckValidDrive(linkdir$) =1) THEN
18320    SYS "XOS_File",5,bootstring% TO linktype%
18330    IF (LEFT$(item$,1)="!" OR linktype%<>2) THEN
18340     REM Must be either a file or app or dir so let's boot it
18350     REM If directory, only boot if begin with a ! (Save time)
18360     $clistring = "Filer_Boot "+linkdir$+CHR$0
18370     SYS "XOS_CLI", clistring
18380    ENDIF
18390   ENDIF
18400 ENDIF
18410ENDIF
18420ENDWHILE
18430REMSYS"Hourglass_Off"
18440ENDPROC
18450
18460DEFFNCheckValidDrive(isvpath$)
18470LOCAL fs_drive$, pptr%, char$, a%
18480REM Check that isvpath$ resides on a valid file system
18490REM and a valid drive.
18500REM If not then return 0 else return 1
18510pptr%=1
18520fs_drive$=""
18530REPEAT
18540char$=MID$(isvpath$,pptr%,1)
18550IF (char$<>".") fs_drive$=fs_drive$+char$
18560pptr%=pptr%+1
18570UNTIL (pptr%>LEN(isvpath$) OR char$=".")
18580REM Check fs_drive$ with all currently invalid devices
18590a%=0
18600WHILE(a%<InvalidDriveCount%)
18610IF (fs_drive$=InvalidDrive$(a%)) a%=InvalidDriveCount%+1
18620a%+=1
18630ENDWHILE
18640REM return if it matches an invalid drive
18650IF (a%>InvalidDriveCount%) THEN =0
18660REM Is this device valid?
18670$clistring=fs_drive$+CHR$0
18680SYS"XOS_File",5,clistring TO result%
18690IF (result%<=8192) THEN
18700 REM This is a valid drive
18710 =1
18720ENDIF
18730REM Update list of invalid drives
18740InvalidDrive$(InvalidDriveCount%) = fs_drive$
18750InvalidDriveCount%+=1
18760=0
18770
18780DEFFNGetLinkContents(glinkfilename$)
18790LOCAL linkdir$,LD%
18800   LD%=OPENIN(glinkfilename$+CHR$0)
18810   linkdir$=""
18820   REPEAT
18830   LD$=CHR$(BGET#LD%)
18840   IF (ASC(LD$)>31) linkdir$+=LD$
18850   UNTIL ASC(LD$)<32 OR EOF#LD%
18860   CLOSE#LD%
18870   =linkdir$
18880
18890
18900REM Extract the wstring stored at addr%.
18910DEF FNgetname(addr%)
18920LOCAL b$
18930WHILE ?addr%>31
18940b$+=CHR$(?addr%)
18950addr%+=1
18960ENDWHILE
18970=b$
18980
18990REM **************************************
19000REM Click on shortcut menu list
19010REM **************************************
19020DEFPROCshortcutmenuselect
19030LOCAL currentmenuptr%,dir$,linkdir$,dropdir$,currentdropdir$,leaf$
19040LOCAL ReOpenFlag%
19050LOCAL IconFlagsAddr%
19060
19070ReOpenFlag%=FALSE
19080dir$=AppPath$+".Users."+User$+".Links"
19090dropdir$=dir$
19100currentdropdir$=dir$
19110currentmenuptr%=shortcutmenu%
19120globalmenuptr%=shortcutmenu%
19130REM block%+00 is selection number of menu,
19140nestlevel%=0
19150sel1%=block%!nestlevel%
19160
19170REM Recurse menu directory pointers until leaf node found
19180REPEAT
19190selection%=block%!(nestlevel%*4)
19200nextselection%=block%!((nestlevel%+1)*4)
19210REMPROCerror("Menu Selection = "+STR$(selection%)+CHR$0)
19220REM Get pointer to icon definition from menu definition
19230submenuptr%=!(currentmenuptr%+28+(selection%*24)+4)
19240dataptr%=!(currentmenuptr%+28+(selection%*24)+12)
19250leaf$=FNstring(dataptr%)
19260REM Is this a system file name?
19270
19280IF (selection%>=StartMenuSeperator% AND StartMenuSeperator%>=0 AND nestlevel%=0) leaf$=CHR$(SysFilePrefix%)+leaf$
19290
19300currentdropdir$=dropdir$
19310IF (selection%<>-1) THEN
19320 dir$=dir$+"."+leaf$
19330 REM Is this menu entry a pointer to a submenu?
19340 IF (submenuptr%<>-1) THEN
19350 dropdir$=dropdir$+"."+leaf$
19360 currentmenuptr%=submenuptr%
19370 nestlevel%+=1
19380 ENDIF
19390ENDIF
19400UNTIL nextselection%=-1
19410
19420IF (addlink%=1) THEN
19430REM PROCerror("Adding shortcut["+newlinkleaf$+"] into "+dropdir$+CHR$0)
19440PROCaddnewshortcut(currentdropdir$,newlinkfile$,newlinkleaf$)
19450ELSE
19460 REM Is this a valid object?
19470 IF (submenuptr%=-1) THEN
19480  REM Is the ALT key pressed?
19490  REM If so delete this link
19500  IF (INKEY-3) THEN
19510   OSCLI("delete "+dir$+CHR$0)
19520   REM Alter menu structure
19530   IconFlagsAddr%=currentmenuptr%+28+8+(selection%*24)
19540   !IconFlagsAddr% = (!IconFlagsAddr%)+(2^22):REM Grey out sprite
19550   !IconFlagsAddr% = !IconFlagsAddr% AND &ffffff:REM Grey out
19560   !IconFlagsAddr% = !IconFlagsAddr%+&1000000:REM text
19570  ELSE
19580   REM Get the desktop filer to run this link
19590   dir$="Filer_Run "+FNGetLinkContents(dir$)
19600   REM PROCerror("OSCLI "+dir$+CHR$0)
19610   OSCLI(dir$+CHR$0)
19620  ENDIF
19630 ENDIF
19640 REM Check if ADJUST pressed in which case, reprint menus.
19650 SYS"Wimp_GetPointerInfo",,block2%
19660 button%=block2%!8
19670IF button%=1 ReOpenFlag%=TRUE
19680
19690IF (ReOpenFlag%) THEN
19700 PROCshowmenu(shortcutmenu%,0,0)
19710 ELSE
19720 IconBarMenuOpen%=0:REM Reenable icon bar tooltip
19730ENDIF
19740ENDIF
19750ENDPROC
19760
19770DEFPROCclick_info(button%)
19780CASE button% OF
19790WHEN 2:PROCshowmenu(main_menu%,!block%-64, (block%!4)+32)
19800ENDCASE
19810ENDPROC
19820
19830DEFPROCmenuselect
19840LOCAL Skronky%
19850Skronky%=currentmenu%
19860CASE Skronky% OF
19870WHEN main_menu%:PROCmainmenuselect
19880WHEN shortcutmenu%:PROCshortcutmenuselect
19890ENDCASE
19900ENDPROC
19910
19920DEFPROCmainmenuselect
19930REM block%+00 is selection number of first menu,
19940REM block%+04 is selection number of second level etc.
19950sel1%=!block%:sel2%=block%!4
19960SYS"Wimp_GetPointerInfo",,block%
19970button%=block%!8
19980CASE sel1% OF
19990WHEN 0:PROCOpenInfoBox
20000WHEN 1:PROCclear
20010WHEN 2:PROCsmash
20020WHEN 3:PROCOpenLinks
20030WHEN 4:quit%=TRUE
20040ENDCASE
20050REM Check if ADJUST pressed in which case, reprint menus.
20060IF button%=1 THEN
20070PROCshowmenu(main_menu%,0,0)
20080ELSE
20090IconBarMenuOpen%=0:REM Reenable icon bar tooltip
20100ENDIF
20110ENDPROC
20120
20130DEFPROCOpenLinks
20140OSCLI("Filer_Opendir "+AppPath$+".Users."+User$+".Links"+CHR$0)
20150ENDPROC
20160
20170DEFPROCshowmenu(menu%,mx%,my%)
20180currentmenu%=menu%
20190SYS"Wimp_CreateMenu",,menu%,mx%,my% TO currentmenuhandle%
20200ENDPROC
20210
20220REM ***************************************************
20230
20240DEFPROCclear
20250X%=OPENOUT(AppPath$+".Users."+User$+".~~Open"):CLOSE#X%
20260X%=OPENOUT(AppPath$+".Users."+User$+".~~Close"):CLOSE#X%
20270PROCloadcache
20280ENDPROC
20290
20300REM *******************************************************
20310
20320DEFPROCsmash
20330OSCLI("Close")
20340SYS"Hourglass_Smash"
20350ENDPROC
20360
20370REM *******************************************************
20380
20390REM Tell WIMP to initialise a new menu.
20400REM This should really be done by loading in a MENU template.
20410DEFPROCsetupmenu(menu%)
20420READ title$,num%:$menu%=title$
20430width%=(LEN(title$)-2)*16
20440menu%!12=&00070207:menu%!20=44:menu%!24=0
20450ptr%=menu%+28:FOR i%=1TOnum%
20460READ mflags%,subptr%,item$
20470!ptr%=mflags%:ptr%!4=subptr%
20480ptr%!8=&7000021:$(ptr%+12)=item$
20490a%=(LEN(item$)+1)*16
20500IF a%>width% width%=a%
20510ptr%+=24:NEXT
20520menu%!16=width%
20530ENDPROC
20540
20550REM *****************************************************
20560
20570REM function to deal with errors
20580DEFPROCerror(err$)
20590!errorblock%=255
20600$(errorblock%+4)=err$+CHR$0
20610SYS "Wimp_ReportError",errorblock%,1,app$
20620ENDPROC
20630
20640REM *****************************************************
20650DEFPROCOpenFSView
20660
20670ENDPROC
20680REM *****************************************************
20690DEFPROCCloseFSView
20700
20710ENDPROC
20720REM *****************************************************

5� ***********************************************
� Name    : Xuen
� Version : 7.00
(2� Purpose : Make RiscOS Desktop more efficient
2� Author  : Barny Short
<� Date    : 08-Mar-1998
F5� ***********************************************
P� Revision history :
Z4� 24-Aug-1997   Added Quickfile Icon to iconbar.
d1�               Clicking on icon open/closes.
n-� 25-Aug-1997   Added ShortCuts facility.
x2�               Similar feature to Win95 tool.
�6� 04-Sep-1997   Added nested directories facility.
�0�               Changed Shift+IconbarMenu to
�/�               include EditLinks facility.
�5�               Changed name to Start and changed
�0�               shortcuts directory to Links
�/� 05-Sep-1997   Changed way window cache is
�5�               administered. Became version 2.00
�1� 06-Sep-1997   Changed format of link files.
�2�               Added entire boot at start up.
�0� 07-Sep-1997   Fixed a mother of a bug that
�5�               probably has something to do with
�1�               the pipeline. Also added much
�.�               more intelligent file type
�               checking.
2� 14-Sep-1997   General improvements regarding
,�               drag'n'drop and tooltip.
")� 04-Nov-1997   Changed icon bar icon
,1� 05-Nov-1997   Added the ~ history directory
61�               to catch all double clicks on
@�               file icons.
J4�               Also added a ~~ directory. Can't
T#�               think what for.
^2�               Fixed the EMPTY directory bug.
h3�               Changed action of TOOL_TIP when
r3�               pointer moved over it so now it
|)�               gets 'pushed' around.
�5� 06-Nov-1997   Changed how destination directory
�4�               is selected for ADDNEWLINK. User
�5�               now has to explicitly move to the
�"�               required menu.
�2�               Created system directorys that
�4�               begin with a ~ symbol. These are
�1�               updated with a history of the
�(�               desktop filer usage.
�2� 07-Nov-1997   Built the Alias$Link run tool.
�1�               Fixed a SysFilePrefix related
�+�               shortcutmenuselect bug.
�1�               Added icon bar toggle feature
�5�               when mouse hits bottom of screen.
1�               Added ALT-START_MENU click to
3�               efficiently delete items in the
!�               startup menu.
&4� 09-Nov-1997   Added auto cascading for desktop
03�               windows. Some windows are never
:-�               auto cascaded. These are:
D)�               a) The Tooltip window
N/�               b) Start's dummyback window
X4�               c) Any window toggled full size,
b,�                  that has input focus,
l.�                  and a toggle size icon.
v3� 09-Nov-1997   Added animated iconbar icon and
�*�               alternative tool tips.
�0� 11-Nov-1997   Added selective cascading of
�3�               windows to reduce difficulty in
�0�               using menus. Changed Iconbar
�2�               button usage and 'alternative'
��               tool tips.
�5� 19-Nov-1997   Added sensible task bar tool tip.
�.�               Included AppPath$ to guard
�3�               against the <Start$Dir> getting
��               corrupted.
�-�               Added extra checks before
�0�               deleteing auto-create links.
�0�               Auto ensure ~ directorys are
3�               there whenever they are needed.
1� 21-Nov-1997   Disabled window repositioning
1�               when a menu is displayed with
 $�               MenuIsOpenFlag%.
*0� 21-Nov-1997   Added window drifting. Added
43�               dragable yes/no icons to window
>%�               cache management.
H,� 22-Nov-1997   Ensured all windows were
R4�               properly cascaded, even if still
\0�               waiting for a state to occur
f0�               when they were allowed to be
p�               moved.
z2� 22-Feb-1998   Changed name of application to
�0�               Xuen, and system variable to
�4�               <Xuenbs$Dir> to reflect initials
�1�               of programmer. A millenium of
�0�               dire satanic consequences to
�5�               anyone who changes this variable.
�0� 08-Mar-1998   Added 4s delay to writing of
�2�               desktop filer grabbed links to
�4�               disk. Forced new folder links to
�2�               overwrite old ones if still in
�0�               cache. Forced links still in
�/�               cache to be written to disc
�3�               forcefully if a new cache entry
�2�               appears (except folder links).
�,� 08-Mar-1998   Changed tool tips again.
5� ***********************************************
� Note:
3�    When running this program, it is important
$2�    to ensure that the corresponding !Boot or
.2�    !run file is run at the same time because
8/�    they ensure the system variable is set
B5�    correctly. ie. Use the !Run file to run this
L�    file.
V5� ***********************************************
`
j PictureType%=&d94:� Artworks
t,DocumentType%=&bc5:� Impression Document
~&User$="Admin":� User name is Admin
�
�app$="Xuen"
�AppPath$=""
�AppDate$=""
�/� apppath 255, apppathvar 32, appdatevar 32
�*$appdatevar="<Sys$Time> <Sys$Date>"+�0
�!$apppathvar="<Xuenbs$Dir>"+�0
�
�8� Aquire the start path to use for delete operations
�)ș"OS_GSTrans",apppathvar,apppath,255
�AppPath$=�string(apppath)
�
@� errorblock% 2048, block% 2048, block2% 2048, clistring 255

� winblock% 2048

� InvalidDrive$(255)
(InvalidDriveCount%=0
2
<,� dragspritename% 32, boundspritebox% 32
F
P'� � �error(�$+" at line "+Þ):�#0:�
Z
d � Auto link buffer add stuff
nalba_destinationdir$=""
x-alba_type%=-1:� -1 means nothing in cache
�alba_newlinkfile$=""
�alba_newlinkleaf$=""
�alba_time%=0
�
�CACHE_SIZE% = 4096
�pause% = 200
�open_type%=1
�close_type%=2
�add_window%=1
�subtract_window%=2
�drag_type%=5
�
adjust%=1
�menu%=2

select%=4
iconbarhandle%=0
dircount%=0
"linkloadaddr%=0
,objecttype%=0
6linkmenu%=0
@addlink%=0
J)iconbar_timer%=�:iconbar_timerflag%=0
T2whandle_tooltip%=0:ToolTip%=0:tooltip_timer%=0
^%override_tooltip%=0:OldToolTip%=0
hinternalstackposition%=-2
roldstackposition%=0
|currentwindow%=0
�currentmenuhandle%=0
�firstmenuhandle%=-3
�IconBarMenuOpen%=0
�StartMenuSeperator%=-1
�SysFilePrefix%=126
�BottomEdgeFlag=0
�after%=0:cascade%=0
�whandle_dummyback%=0
�LastRightEdge%=0
�CascadeRow%=0
�RandTipMax%=13
�� RandTip$(RandTipMax%)
RandTip$(1)="LSD"
RandTip$(2)="Opium"
!RandTip$(3)="Magic Mushrooms"
&RandTip$(4)="Mescaline"
0RandTip$(5)="Peyote"
:'RandTip$(6)="Lophophora Williamsii"
DRandTip$(7)="Trips"
NRandTip$(8)="Acid"
XRandTip$(9)="Speed"
b%RandTip$(10)="Mind Bending Drugs"
lRandTip$(11)="Psychedelics"
vRandTip$(12)="Fun"
wRandTip$(13)="Cannabis"
�
�IconBarAnimSize%=11
�$� IconBarAnim$(IconBarAnimSize%)
�IconBarAnim$(0)="Sxuen0"
�IconBarAnim$(1)="Sxuen1"
�IconBarAnim$(2)="Sxuen2"
�IconBarAnim$(3)="Sxuen3"
�IconBarAnim$(4)="Sxuen4"
�IconBarAnim$(5)="Sxuen5"
�IconBarAnim$(6)="Sxuen6"
�IconBarAnim$(7)="Sxuen7"
�IconBarAnim$(8)="Sxuen8"
�IconBarAnim$(9)="Sxuen9"
IconBarAnim$(10)="Sxuen10"
IconBarAnimStep=0
IconBarAnimDir=0.5
 
*
4MenuIsOpenFlag%=0
>ReorganiseWindowStack=0
H
RQ� dblock% 1024, bootblock% 1024, shortcutmenu% 10192, shortcutmenudata% 20384
\E� main_menu% 256, typebuf% 256, iconbarlabel% 32, iconbardata% 32
fY� string% 1024, bootstring% 1024, infodata% 2048, tooltipdata% 2048, tooltipicon% 512
p� cache% CACHE_SIZE%
z� dirlist%(32), dirptr%(32)
�
�currentmenu%=main_menu%
�cache_ext%=0
�task_handle%=0
�drag_button%=adjust%
�	DX%=0
�drag_icon%=0
�path$=""
�in_leftregion=�
�in_rightregion=�
�qf_timer=�
�regionxs%=16
�regionys%=64
	$iconbarlabel%="Xuen"+�0
	$iconbardata%="S!xuen"+�0
	 globalmenuptr%=shortcutmenu%
	$
	.$iconbarlabel%=""+�0
	8$$iconbardata%=IconBarAnim$(0)+�0
	B
	L
	V9� ***************************************************
	`
	jquit%=�
	t
	~	�init
	�-�PROCerror("Xuen path = "+AppPath$+CHR$0)
	��CreateToolTip
	��loadcache
	�5�DirectoryBoot(AppPath$+".Users."+User$+".Links")
	�
	�ȕ � quit%
	�	�poll
	��
	�
	��DestroyToolTip
	�ș "Wimp_CloseDown"
	��


9� ***************************************************


��GetDate
(� Aquire date and time
2)È™"OS_GSTrans",appdatevar,apppath,255
<AppDate$=�string(apppath)
F�
P
Z9� ***************************************************
d
n� poll loop
x
��poll
�$ș"Wimp_Poll",0,block% � reason%
�2� IF reason%<>0 PROCerror(STR$(reason%)+CHR$0)
�Ȏ reason% �
�� 0:�null_reason
�� 2:�PollReason2
�%� 3:ș "Wimp_CloseWindow",,block%
�� 6:�click(block%!12)
�� 7:�dragdrop
�� WHEN 8:PROCkeypressed
�� 9:�menuselect
�� 17,18:�receive(reason%)
�9� WHEN 19:PROCerror("Unsupported window definition.")
��
�

9� ***************************************************
"
,��PollReason2
6� ((!block%) > &ffff) �
@X� PROCerror("Window tobeopened:"+STR$~(!block%)+"  behind: "+STR$~(block%!28)+CHR$0)
J È™ "Wimp_OpenWindow",,block%
T�
^.�currentwindow%=!block%:PROCOpenToolTip(2)
hA� This is very wierd - the windowhandle is invalid and equals
r?� the mouse pointer x position - must be a menu I reckon or
|� could be a bug in RISCOS.
�MenuIsOpenFlag%=1
��
�
��
�
���GetScreenSize
�3ș"OS_ReadModeVariable",-1,4 � ,,OS_EX%:� Eigen
�+ș"OS_ReadModeVariable",-1,5 � ,,OS_EY%
�3ș"OS_ReadModeVariable",-1,11 � ,,OS_WX%:� Size
�,ș"OS_ReadModeVariable",-1,12 � ,,OS_WY%
�OS_MX%=(1+OS_WX%) << OS_EX%
�OS_MY%=(1+OS_WY%) << OS_EY%
��

�DEFPROCkeypressed
�LOCAL Char%
&�Char%=block%!24
0-�REM Is this the delete or backspace key?
:#�IF (Char%=8 OR Char%=&7f) THEN
D�REM Is this in a menu?
N^�PROCerror("Window handle = "+STR$~(block%!0)+" -- main_menu% = "+STR$~(main_menu%)+CHR$0)
X	�ELSE
b �SYS "Wimp_ProcessKey",Char%
l
�ENDIF
v�ENDPROC
�
���ReopenDummyWindow
�  !block2%=whandle_dummyback%
�% ș"Wimp_GetWindowState",,block2%
�% block2%!8=-1024:block2%!16=-1024
� block2%!28=-2
�" ș"Wimp_OpenWindow",,block2% 
�) after%=whandle_dummyback%:cascade%=0
� MenuIsOpenFlag%=0
� 
�8 � (ReorganiseWindowStack=2) ReorganiseWindowStack=0
�9 � (ReorganiseWindowStack=1) ReorganiseWindowStack+=1
��



� �cascade

� q%,OldAfter%

 � sx%, sy%, ox%, oy%

*� ReopenFlag%, StackFlag%

4-� PaneFlag%, IsOpenFlag%, IsMoveableFlag%

>� CurrentWin%,CurrentIcon%

H

Rq%=winblock%

\PaneFlag%=�

f

p2� Get Current window immediately under pointer

z$È™"Wimp_GetPointerInfo",,block2%

�CurrentWinPtr%=block2%!12

�CurrentIcon%=block2%!16

�

�OldAfter%=after%

�!q%=after%

�.� _Try_ and reopen this desktop window ...

�!ș "XWimp_GetWindowState",,q%

�?� (after%=-1 � ReorganiseWindowStack=1)�ReopenDummyWindow:�

�CurrentWin%=!q%

�after%=q%!28

�-� (CurrentWin%=-1 � (after%=OldAfter%)) �

� �ReopenDummyWindow

�� 
 � Reposition window
2 � (cascade%=0) CascadeRow%=0:LastRightEdge%=0
/ � !q%=after%:SYS "Wimp_GetWindowState",,q%
$ 
. 
8 PaneFlag%=�
B2 � (((q%!32) � ((2^22)+(2^23)))>0) PaneFlag%=�
L& � (((q%!32) � 32)=32) PaneFlag%=�
V% IsOpenFlag% = ((q%!32) � (2^16))
`$ IsMoveableFlag% = ((q%!32) � 2)
j1 � Has window moved at all for repositioning?
t
~ ReopenFlag%=�
� StackFlag%=�
���  IF (((q%!32) AND (2^18))>0 AND ((q%!32) AND (2^20))>0 AND ((q%!32) AND (2^27))>0) StackFlag%=FALSE:ReopenFlag%=FALSE:REM Toggled Maximise & has input focus & has toggle icon
��� (CurrentWin%=CurrentWinPtr% � ((q%!32) � (2^28))=0 � ((q%!32) � (2^30))=0 � ((q%!32) � (2^17))>0 � after%=-1) StackFlag%=�:ReopenFlag%=�:� Under pointer and _no_ horiz/vert scroll bars and fully visible (likely to be part of menu so leave alone)
��� (((q%!32) � (2^18))>0 � ((q%!32) � (2^27))>0 � ((q%!32) � (2^28))>0 � ((q%!32) � (2^30))>0) StackFlag%=�:ReopenFlag%=�:� Toggled Maximise & has toggle icon and has horiz/vert scroll bars - likely to be a word processor window
��� ( (q%!16 < (OS_MY%-(cascade%*40))) � (q%!4 > 0) � (q%!12 < (OS_MX%-40)) � (q%!8>40) � ((q%!32) � (2^17))>0) StackFlag%=�:ReopenFlag%=�:� Fully visible
�@ � (CurrentWin%=whandle_tooltip%) StackFlag%=�:ReopenFlag%=�
�B � (CurrentWin%=whandle_dummyback%) StackFlag%=�:ReopenFlag%=�
�/ � (PaneFlag%=�) StackFlag%=�:ReopenFlag%=�
�E � (IsOpenFlag%=0 � IsMoveableFlag%=0) StackFlag%=�:ReopenFlag%=�
�5 � (MenuIsOpenFlag%=1) StackFlag%=�:ReopenFlag%=�
�8� If pointer is over window and within the work area
�� then don't move it.
0� (CurrentWin%=CurrentWinPtr%) ReopenFlag%=�

0 � Reset position of window and do a Re-Open
 � Get size of window
 � (StackFlag%=�) �
(  ox%=q%!4
2  oy%=q%!16
<  sx%=(q%!12)-(q%!4)
F  sy%=(q%!16)-(q%!8)
P  
Z#  � (ReorganiseWindowStack>0) �
d>    � Try and fit as many windows horizontally as possible
n.    � ((LastRightEdge%+sx%)<(OS_MX%-40)) �
x     q%!4=LastRightEdge%
�2     q%!16=(OS_MY%-40)-(CascadeRow%*40):� 1160
�     q%!12=(q%!4)+sx%
�2     � ((q%!12)>(OS_MX%-40)) q%!12=(OS_MX%-40)
�     q%!8=(q%!16)-sy%
�     � ((q%!8)<40) q%!8=40
�"     LastRightEdge%=(q%!12)+48
�	    �
�     LastRightEdge%=0
�     CascadeRow%+=1
�     q%!4=(CascadeRow%*8)
�2     q%!16=(OS_MY%-40)-(CascadeRow%*40):� 1160
�     q%!12=(q%!4)+sx%
�2     � ((q%!12)>(OS_MX%-40)) q%!12=(OS_MX%-40)
     q%!8=(q%!16)-sy%
     � ((q%!8)<40) q%!8=40
"     LastRightEdge%=(q%!12)+48
"	    �
,
6
@
J �  REM Enable window 'drift'
T�  IF (ox%<>q%!4) THEN
^�   nx%=q%!4
h�   sx%=(q%!12)-(q%!4)
r�   dx%=nx%-ox%
|�   IF (ABS(dx%)>40) THEN
��    nx%=ox%+(SGN(dx%)*40)
��    q%!4=nx%:q%!12=nx%+sx%
�
�   ENDIF
��  ENDIF
��  IF (oy%<>q%!16) THEN
��   ny%=q%!16
��   sy%=(q%!16)-(q%!8)
��   dy%=ny%-oy%
��   IF (ABS(dy%)>40) THEN
��    ny%=oy%+(SGN(dy%)*40)
��    q%!16=ny%:q%!8=ny%-sy%
�
�   ENDIF
��  ENDIF

5    � Having allowed space for this window in the
5    � window cascade, are we sure we want to move
&    � it just yet?
0  
:    � (ReopenFlag%=�) �
D0     È™ "XWimp_SendMessage",2,q%,CurrentWin%
N	    �
X. �:� End of IF (ReorganiseWindowStack) ...
b   
l  cascade%+=1
v  
� �
� �
��
�
�3� *********************************************
�3� * Animate the icon bar icon                 *
�3� *********************************************
���AnimateIconBar
�/$iconbardata%=IconBarAnim$(IconBarAnimStep)
�#IconBarAnimStep+=IconBarAnimDir
�>� (IconBarAnimStep<0 � IconBarAnimStep=IconBarAnimSize%) �
�IconBarAnimStep=0
�)�  IconBarAnimDir = IconBarAnimDir*-1
%� IconBarAnimStep+=IconBarAnimDir
�
3� Activate an update on the task bar icon .....
 !block2%=-2
*block2%!4=iconbarhandle%
4"È™"Wimp_GetIconState",,block2%
>(block2%!8=0:� Don't change anything,
H,block2%!12=0:� Just signal an update ...
R"È™"Wimp_SetIconState",,block2%
\�
f
p3� *********************************************
z2� What shall we do during the idle wimp poll ?
�/� This is the most important aspect of this
�2� program and one which should enable a lot of
�2� change with future versions of the software.
�3� *********************************************
���null_reason
�
� window%
�#ș"Wimp_GetPointerInfo",,block%
�
��alba_purge(400)
�
�X%=block%!0
�Y%=block%!4
�window%=block%!12
currentwindow%=window%
�GetScreenSize

$$� Are any mouse buttons pressed?
..� If not then reorganise [cascade] windows
8� (((block%!8) � 7)=0) �
B
 �cascade
L�
V
`-� Update the task bar icon each WIMP POLL
j�AnimateIconBar
t
~-� If the task bar tool tip shows the TIME
�� then update it ...
�%� (ToolTip%=1) �UpdateToolTipTime
�
�#ș"Wimp_GetPointerInfo",,block%
�X%=block%!0
�Y%=block%!4
�window%=block%!12
�currentwindow%=window%
�
�(� This may be needed to stop flicker
�� *fx19
�

�ENDIF

#�IF (qf_timer>0) PROCfocusdelay
� (X%<regionxs%) �
�left_corner:�
(�
2� (X%>(OS_MX%-regionxs%)) �
<�right_corner:�
F�
P#� Is Pointer over iconbar icon?
ZC� Close tooltip if pointer moves over it (effectively push tip)
dl� IF (((block%!12)=-2 AND (block%!16=iconbarhandle%)) OR (window%=whandle_tooltip% AND ToolTip%>0)) THEN
n7� (((block%!12)=-2 � (block%!16=iconbarhandle%))) �
x�move_overiconbar
��
�OldToolTip%=0
�
�9�IF (((TIME-tooltip_timer%)>100) AND ToolTip%>0) THEN
�� (ToolTip%>0) �
�:� (block%!16 <> whandle_tooltip%) iconbar_timerflag%=0
��CloseToolTip
��
��iconbar_timer%=TIME
�iconbar_timerflag%=0
��
��
�(�IF (window%=-2) firstmenuhandle%=-2
A�IF (window%<>-2) PROCpointernotoniconbar:REM Must come first
I� ((X%>regionxs% � X%<(OS_MX%-regionxs%)) � Y%>regionys%) �outoffocus
S�IF ((X%>regionxs% AND X%<(OS_MX%-regionxs%)) AND Y%=0) PROCpointeronbottomedge
"� (Y%=0) �
,-� (BottomEdgeFlag=0) �pointeronbottomedge
6�
@BottomEdgeFlag=0
J�
T
^�PROCCloseToolTip
h�PROCOpenToolTip(2)
r�
|
�9� ***************************************************
�
���pointeronbottomedge
�� stackposition%
�4� Is iconbar at top of stack? If not make it so.
��SYS"Wimp_ProcessKey",&1dc
�
�0� PROCerror("Pointer on bottom edge."+CHR$0)
�1� Open up start menu if it's not already open
�BottomEdgeFlag=1
�ReorganiseWindowStack=1
�� Close relevant window
��SYS "Wimp_CreateMenu",,-1
� Open start menu
�PROCclick_iconbarmenu
�ENDPROC
&
0�!block%=-2
:%�SYS"Wimp_GetWindowState",,block%
D�stackposition%=block%!28
N!�IF (stackposition%<>-1) THEN
X�block%!28=-1
b!�SYS"Wimp_OpenWindow",,block%
l � Toggle icon bar back/front
vÈ™"Wimp_ProcessKey",&1dc
�
�0� Reopen dummyback window at bottom of stack
�!block%=whandle_dummyback%
�#ș"Wimp_GetWindowState",,block%
�"block%!8=-1024:block%!16=-1024
�block%!28=-2
�ș"Wimp_OpenWindow",,block%
�(after%=whandle_dummyback%:cascade%=0
�
��
�
���pointernotoniconbar
�
� ENDPROC
7� Is iconbar on bottom of stack? If not make it so/
=� No allowed to manually open iconbar so use our internal
� value
 G� (ToolTip%=0 � (ToolTip%<>0 � currentwindow%<>whandle_tooltip%)) �
*9� firstmenuhandle%=-2 firstmenuhandle%=currentwindow%
4�
>
H!block%=-2
R#È™"Wimp_GetWindowState",,block%
\stackposition%=block%!28
f/�IF (stackposition%=oldstackposition%) THEN
p+� (stackposition%<>oldstackposition%) �
z�block%!28=-2
�"�SYS"Wimp_CloseWindow",,block%
�@� (currentwindow%<>firstmenuhandle% � firstmenuhandle%>-2) �
�ș"Wimp_ProcessKey",&1dc
�firstmenuhandle%=-3
�
�ENDIF
�!block%=-2
�#ș"Wimp_GetWindowState",,block%
�stackposition%=block%!28
�=�IF (stackposition%<>-1) oldstackposition%=stackposition%
�$oldstackposition%=stackposition%
��
��
��

>� IF (internalstackposition%=-1 AND currentwindow%>0) THEN
� SYS"Wimp_ProcessKey",&1dc
$7� PROCerror("Window : "+STR$(currentwindow%)+CHR$0)
.-� internalstackposition%=-2:REM At bottom
8� ENDIF
B
� ENDPROC
L
V��outoffocus
`(� (in_leftregion) � �leaveleftregion
j*� (in_rightregion) � �leaverightregion
tqf_timer=�
~�
�
���leaveleftregion
�in_leftregion=�
��
�
���leaverightregion
�in_rightregion=�
��
�
���focusdelay
�6� ((�-pause%)>qf_timer) � qf_timer=-1:�OpenInfoBox
��


��left_corner
,� (in_leftregion=�) ec_timer=�:ec_flag=�
in_leftregion=�
(#� Check if windows need opening
2$� (�-ec_timer>=50 � ec_flag=�) �
<�reopenfiler:ec_flag=�
F�
P
Z�
d
n��right_corner
x-� (in_rightregion=�) ec_timer=�:ec_flag=�
�in_rightregion=�
�#� Check if windows need closing
�3�IF (TIME-ec_timer>=100 AND ec_flag=FALSE) THEN
�� (ec_flag=�) �
�'�closefiler:�CloseInfoBox:ec_flag=�
��
��
�
�9� ***************************************************
�
���OpenInfoBox
�!block%=whandle_info%
�#ș"Wimp_GetWindowState",,block%
È™"Wimp_OpenWindow",,block%
�

"��CloseInfoBox
,!block%=whandle_info%
6 È™"Wimp_CloseWindow",,block%
@�
J
T9� ***************************************************
^
h��CreateToolTip
r� XOffset%
|1� Create the tooltip and dummy global windows
�6� The tooltip window displays brief info about the
�� icon under the pointer.
�6� The dummy window is needed to provide a 'bottom'
�3� window for the window re-organisation tool to
�� start from.
�
�� Create the tooltip window
�Tip$="Hello"
�XS%=(�(Tip$)*16)+20:YS%=40
�#È™"Wimp_GetPointerInfo",,block%
�'� Define screen position of tooltip
�XOffset%=XS%/2
�� (XOffset%>32) XOffset%=32
X%=(!block%)-XOffset%
Y%=(block%!4)+24
�GetScreenSize
&%� ((X%+XS%)>OS_MX%) X%=OS_MX%-XS%
0� (X%<0) X%=0
:.� ((Y%+YS%)>OS_MY%) Y%=(block%!4)-(YS%+24)
D� IF ((Y%-YS%)<0) Y%=0
N;!block%=X%:block%!4=Y%:block%!8=X%+XS%:block%!12=Y%+YS%
XXS%=(512*16)+20:YS%=40
b,block%!16=0:block%!20=0:� Scroll offsets
l:block%!24=-1:block%!28=&80000050:� Depth, window flags
v3block%!32=&00070207:block%!36=&120103:� Colours
�8block%!40=0:block%!44=-YS%:block%!48=XS%:block%!52=0
�;block%!56=&19:block%!60=3<<12:� Titlebar/workarea flags
�)block%!64=0:block%!68=0:� Sprite area
�$(block%+72)=�0
�block%!84=1
�)� Define 1 icon starting at block%!88
�,!tooltipicon%=0:� Null validation string
�)$(tooltipicon%+4)=Tip$+�0:� Icon text
�block%!88=4:� Bounding box
� block%!92=-40:� Bounding box
�;block%!96=((512*16)+20):� Bounding box of _largest_ tip
�block%!100=0:� Bounding box
�block%!104=&17003101
block%!108=tooltipicon%+4
block%!112=tooltipicon%
"block%!116=512:� Buffer length
 4ș"Wimp_CreateWindow",,block% � whandle_tooltip%
*XS%=(�(Tip$)*16)+20:YS%=40
4#È™"Wimp_GetPointerInfo",,block%
>'� Define screen position of tooltip
HXOffset%=XS%/2
R� (XOffset%>32) XOffset%=32
\X%=(!block%)-XOffset%
f�GetScreenSize
p%� ((X%+XS%)>OS_MX%) X%=OS_MX%-XS%
z� (X%<0) X%=0
�.� ((Y%+YS%)>OS_MY%) Y%=(block%!4)-(YS%+24)
�Y%=-1024
�� IF ((Y%-YS%)<0) Y%=0
�� Get Tooltip window state
�!block%=whandle_tooltip%
�#ș"Wimp_GetWindowState",,block%
�?block%!4=X%:block%!8=-1024:block%!12=X%+XS%:block%!16=-1024
�,block%!20=0:block%!24=0:� Scroll offsets
�� block%!28=-1
�ș"Wimp_OpenWindow",,block%
�ToolTip%=0
�
�

"� Create the dummy back window
'� Define screen position of tooltip
$XS%=(�(Tip$)*16)+20:YS%=40
.XOffset%=XS%/2
8� (XOffset%>32) XOffset%=32
B	X%=64
LY%=-1024
V;!block%=X%:block%!4=Y%:block%!8=X%+XS%:block%!12=Y%+YS%
`XS%=(512*16)+20:YS%=40
j,block%!16=0:block%!20=0:� Scroll offsets
t:block%!24=-1:block%!28=&80000050:� Depth, window flags
~3block%!32=&00070207:block%!36=&120103:� Colours
�8block%!40=0:block%!44=-YS%:block%!48=XS%:block%!52=0
�;block%!56=&19:block%!60=3<<12:� Titlebar/workarea flags
�)block%!64=0:block%!68=0:� Sprite area
�$(block%+72)=�0
�block%!84=1
�)� Define 1 icon starting at block%!88
�,!tooltipicon%=0:� Null validation string
�)$(tooltipicon%+4)=Tip$+�0:� Icon text
�block%!88=4:� Bounding box
� block%!92=-32:� Bounding box
�;block%!96=((512*16)+20):� Bounding box of _largest_ tip
� block%!100=-8:� Bounding box
block%!104=&17003101

block%!108=tooltipicon%+4
block%!112=tooltipicon%
"block%!116=512:� Buffer length
(6ș"Wimp_CreateWindow",,block% � whandle_dummyback%
2� Get Tooltip window state
<!block%=whandle_dummyback%
F#È™"Wimp_GetWindowState",,block%
Pblock%!28=-2
ZÈ™"Wimp_OpenWindow",,block%
d(after%=whandle_dummyback%:cascade%=0
n
x�
�
���DestroyToolTip
�!block%=whandle_tooltip%
� ș"Wimp_CloseWindow",,block%
�!ș"Wimp_DeleteWindow",,block%
�
�!block%=whandle_dummyback%
� ș"Wimp_CloseWindow",,block%
�!ș"Wimp_DeleteWindow",,block%
��
�
���UpdateToolTipTime
�� XOffset%, OldTip$
OldTip$=Tip$
�GetDate
Tip$=AppDate$
"� (OldTip$<>Tip$) �
,3� IF (TipID%=1) Tip$="after% = &"+STR$~(after%)
6XS%=(�(Tip$)*16)+20:YS%=40
@$È™"Wimp_GetPointerInfo",,block2%
J!� Adjust Tooltip window state
T!block2%=whandle_tooltip%
^$È™"Wimp_GetWindowState",,block2%
hX%=block2%!4
rY%=block2%!8
|!block2%=whandle_tooltip%
�Ablock2%!4=X%:block2%!8=Y%:block2%!12=X%+XS%:block2%!16=Y%+YS%
�.block2%!20=0:block2%!24=0:� Scroll offsets
�block2%!28=-1
�)$(tooltipicon%+4)=Tip$+�0:� Icon text
�"�SYS"Wimp_OpenWindow",,block2%
�� Update icon
�!block2%=whandle_tooltip%
�block2%!4=0
�"ș"Wimp_GetIconState",,block2%
�(block2%!8=0:� Don't change anything,
�,block2%!12=0:� Just signal an update ...
�"ș"Wimp_SetIconState",,block2%
��
 �
 
 ��OpenToolTip(TipID%)
 &"� XOffset%, RandTipID%, RSeed%
 0� (TipID%=ToolTip%) �
 : � (ToolTip%>0) �CloseToolTip
 D� Create ToolTip Window
 N� (TipID%=1) �
 X
 �GetDate
 b Tip$=AppDate$
 l�
 v� (TipID%=2) �
 �  � Tip$="Click for more ..."
 � Tip$=""
 � RandTipID%=�(RandTipMax%)
 �$ Tip$=Tip$+RandTip$(RandTipID%) 
 ��
 �;� (TipID%=3) Tip$="currentwindow% = "+�(currentwindow%)
 �3� IF (TipID%=1) Tip$="after% = &"+STR$~(after%)
 �XS%=(�(Tip$)*16)+20:YS%=40
 �#ș"Wimp_GetPointerInfo",,block%
 �'� Define screen position of tooltip
 �XOffset%=XS%/2
!� (XOffset%>32) XOffset%=32
!X%=(!block%)-XOffset%
!Y%=(block%!4)+24
! �GetScreenSize
!*%� ((X%+XS%)>OS_MX%) X%=OS_MX%-XS%
!4� (X%<0) X%=0
!>.� ((Y%+YS%)>OS_MY%) Y%=(block%!4)-(YS%+24)
!H� IF ((Y%-YS%)<0) Y%=0
!R
!\!� Adjust Tooltip window state
!f!block%=whandle_tooltip%
!p#È™"Wimp_GetWindowState",,block%
!z!block%=whandle_tooltip%
!�=block%!4=X%:block%!8=Y%:block%!12=X%+XS%:block%!16=Y%+YS%
!�,block%!20=0:block%!24=0:� Scroll offsets
!�block%!28=-1
!�)$(tooltipicon%+4)=Tip$+�0:� Icon text
!�ș"Wimp_OpenWindow",,block%
!�ToolTip%=TipID%
!�tooltip_timer%=�
!��
!�
!���CloseToolTip
!�� (ToolTip%=0) �
!�!block%=whandle_tooltip%
!�#ș"Wimp_GetWindowState",,block%
"!block%=whandle_tooltip%
"block%!8=-1024
"block%!16=-1024
"$È™"Wimp_OpenWindow",,block%
"."�SYS"Wimp_CloseWindow",,block%
"8$� SYS"Wimp_DeleteWindow",,block%
"BToolTip%=0
"L�
"V
"`��PersistCloseToolTip
"j� (ToolTip%=0) �
"tOldToolTip%=ToolTip%
"~�!block%=whandle_tooltip%
"�"�SYS"Wimp_CloseWindow",,block%
"�!block%=whandle_tooltip%
"�#ș"Wimp_GetWindowState",,block%
"�!block%=whandle_tooltip%
"�block%!8=-1024
"�block%!16=-1024
"�ș"Wimp_OpenWindow",,block%
"�$� SYS"Wimp_DeleteWindow",,block%
"�ToolTip%=0
"��
"�
"�9� ***************************************************
#
#
��init_drag(icon%)
#qf_timer=-1
##È™"Wimp_GetPointerInfo",,block%
#(ox%=block%!0
#2oy%=block%!4
#<block%!4=icon%
#Fdrag_icon%=icon%
#Pblock%!4=drag_type%
#Zblock%!8=ox%-32
#dblock%!12=oy%-32
#nblock%!16=ox%+32
#xblock%!20=oy%+32
#�block%!24=&80000000
#�block%!28=&80000000
#�block%!32=&7FFFFFFF
#�block%!36=&7FFFFFFF
#�ș"Wimp_DragBox",,block%
#�
#�� Start a sprite drag ....
#�3� (icon%=add_window%) $dragspritename%="yes"+�0
#�7� (icon%=subtract_window%) $dragspritename%="no"+�0
#�!boundspritebox%=0
#�boundspritebox%!4=0
#�boundspritebox%!8=ox%+24
#�boundspritebox%!12=oy%+24
$FÈ™"DragASprite_Start",2+8+64+128,1,dragspritename%,boundspritebox%
$�
$
$"��dragdrop
$,#È™"Wimp_GetPointerInfo",,block%
$6block%!20=block%!12
$@block%!24=block%!16
$Jblock%!28=!block%
$Tblock%!32=block%!4
$^block%!36=0
$h!block%=64:block%!12=0
$rblock%!16=1:block%!40=&fff
$|$(block%+44) =""
$�6ș"Wimp_SendMessage",18,block%,block%!20,block%!24
$�
$�"� Cancel a sprite drag .......
$�ș"DragASprite_Stop"
$��
$�
$�9� ***************************************************
$�
$�ݤstring(ptr%)
$�� a$
$�ȕ ?ptr%<>0 � �(a$)<254
$�a$+=�(?ptr%):ptr%+=1
$��
%=a$
%
%ݤget_line(filehandle%)
%&� a$,z%
%0z%=0
%:	a$=""
%D�
%N+� (�(�#filehandle%)) � z%=�#filehandle%
%X� z%>=32 a$+=�(z%)
%b� z%<32 � �#filehandle%
%l
=a$+�0
%v
%���put_line(filehandle%, A$)
%�� a$,z%
%�z%=1
%��z%=1� �(A$)
%�a$=�A$,z%,1)
%�&� (�(a$)>0) � �#filehandle%, �(a$)
%��
%��#filehandle%, 10
%��
%�
%�9� ***************************************************
%�
%���loadcache
&cache_ext%=0
&
!cache%=0
&,� Load in commands to open filer display
& /F%=�(AppPath$+".Users."+User$+".~~open"+�0)
&*�
&4A$=�get_line(F%)
&>,� A$<>"" � �add_to_cache(A$, open_type%)
&H
� �#F%
&R�#F%
&\-� Load in commands to close filer display
&f0F%=�(AppPath$+".Users."+User$+".~~close"+�0)
&p�
&zA$=�get_line(F%)
&�-� A$<>"" � �add_to_cache(A$, close_type%)
&�
� �#F%
&��#F%
&��
&�
&���add_to_cache(com$, type%)
&�record_size%=�(com$)+1+2
&ʃ� (record_size%>255) � �error("Path too big! Please shrink !Xuen and reorganise your (lengthy labeled) directory structure.")  
&�%?(cache%+cache_ext%)=record_size%
&� ?(cache%+cache_ext%+1)=type%
&��X%=1 � �(com$)
&�,?(cache%+cache_ext%+1+X%)=�(�com$,X%,1))
&��
'@?(cache%+cache_ext%+1+X%)=0:� Add terminating zero to string
'cache_ext%+=record_size%
'i� (cache_ext%>CACHE_SIZE%) � �error("Too many windows! Please increase CACHE_SIZE% and rerun !Xuen.")
'$@?(cache%+cache_ext%)=0:� Initialise next record size to NULL
'.�
'8
'B9� ***************************************************
'L
'V��cache_open
'`cache_ptr%=0
'j�
't r_size%=?(cache%+cache_ptr%)
'~ type%=?(cache%+cache_ptr%+1)
'�K� (r_size%>0 � type%=open_type%) � �execute_string(cache%+cache_ptr%+2)
'�cache_ptr%+=r_size%
'��r_size%=0
'�
'��OpenFSView
'��
'�
'���cache_close
'�cache_ptr%=0
'��
'� r_size%=?(cache%+cache_ptr%)
'� type%=?(cache%+cache_ptr%+1)
(L� (r_size%>0 � type%=close_type%) � �execute_string(cache%+cache_ptr%+2)
(
cache_ptr%+=r_size%
(�r_size%=0
(
((�CloseFSView
(2�
(<
(F��execute_string(str_ptr%)
(PA$=�string(str_ptr%)
(Z� A$<>"" � �(A$)
(d�
(n
(x9� ***************************************************
(�
(���reopenfiler
(��cache_close
(��cache_open
(��
(�
(���closefiler
(��cache_close
(��
(�
(�9� ***************************************************
(�
(���savedesktop
)!DX%=�(AppPath$+".tmpfile"+�0)
)dblock%!0=28
)dblock%!4=task_handle%
)"dblock%!12=0
),dblock%!16=10
)6dblock%!20=DX%
)@dblock%!24=0
)J%È™"Wimp_SendMessage",17,dblock%,0
)T�
)^
)h6� ************************************************
)r'� Get leaf name of a full path name
)|6� ************************************************
)�ݤGetLeafName(ptr%)
)�� a$,leafptr%,size%
)�� Determine size of zstring
)�size%=0
)�ȕ ?(ptr%+size%)>31
)�size%+=1
)��
)�"� Determine offset of leafname
)�leafptr%=size%
)�.ȕ (?(ptr%+leafptr%)<>�(".")) � leafptr%>0
)�leafptr%-=1
)��
)�leafptr%+=1
*� Build leafname
*	a$=""
*È• leafptr%<size%
*&a$+=�(?(ptr%+leafptr%))
*0leafptr%+=1
*:�
*D=a$
*N
*X6� ************************************************
*b-� function to deal with incoming messages
*l6� ************************************************
*v��receive(reason%)
*�message%=block%!16
*�4� PROCerror("Message : &"+STR$~(message%)+CHR$0)
*�Ȏ message% �
*�� 0:quit%=�
*��� 3:�data_load_add_link:� PROCerror("DataLoad:"+FNstring(block%+44)+" Leafname:"+FNGetLeafName(block%+44)+" Type:&"+STR$~(!(block%+40))+CHR$0)
*�� 2:�data_ack
*�� 5:�data_open
*�� 10:�desktop_ack
*�� &400C0:�submenu_warning
*�� &400C9:IconBarMenuOpen%=0
*��
*��
*�
++� User has double clicked on a fileicon
+=� Response - store a link to this file in the ~ directory
+��data_open
+ � type%, destinationdir$
+*
+4$� Flush cache if stuff in it ...
+>8� (alba_type%>0 � alba_type%<>4096) � �alba_purge(0)
+H
+R(alba_newlinkfile$=�string(block%+44)
+\-alba_newlinkleaf$=�GetLeafName(block%+44)
+ftype%=!(block%+40)
+palba_type%=type%
+z,� PROCerror("Type = "+STR$(type%)+CHR$0)
+�6destinationdir$=AppPath$+".Users."+User$+".Links."
+�
+�
+�� (type%=4096) �
+�!� Store this directory access
+�?destinationdir$=destinationdir$+�(SysFilePrefix%)+"Folders"
+��
+�
+�� (type%=8192) �
+�#� Store this application access
+�@destinationdir$=destinationdir$+�(SysFilePrefix%)+"Programs"
+��
+�
,� (type%<4096) �
, � (type%=DocumentType%) �
,A destinationdir$=destinationdir$+�(SysFilePrefix%)+"Document"
,$ �
,. 
,8 � (type%=PictureType%) �
,B@ destinationdir$=destinationdir$+�(SysFilePrefix%)+"Picture"
,L �
,V
,`5 � (type%<>PictureType% � type%<>DocumentType%) �
,j> destinationdir$=destinationdir$+�(SysFilePrefix%)+"Files"
,t �
,~�
,�
,�(alba_destinationdir$=destinationdir$
,�alba_time%=�
,��
,�
,���autoaddnewshortcut
,�� autodropdirectory$
,�#� number%, next%,numberofitems%
,�>� oldestdate%,oldestname$,oldesttype%,oldestnext%,oldnext%
,�� delstring$
,�-autodropdirectory$ = alba_destinationdir$
,�"�ensuredir(autodropdirectory$)
-4� Auto insert directorys have a limit of 9 items
-
� Is link directory empty?
-numberofitems%=0
-next%=0
-(oldestdate%=0
-2&ȕ(next%<>-1 � numberofitems%<=16)
-<"$string%=autodropdirectory$+�0
-Foldnext%=next%
-PEș "OS_GBPB",11,string%,dblock%,1,next%,63,"*" � ,,,number%,next%
-Z� next%<>-1 �
-dnumberofitems%+=1
-n|� ((dblock%!24)<oldestdate% � oldestdate%=0) oldestdate%=dblock%!24:oldestname$=�string(dblock%+29):oldestnext%=oldnext%
-x�
-��
-�� (numberofitems%<9) �
-�& � If so then automatically insert
-�L �addnewshortcut(autodropdirectory$,alba_newlinkfile$,alba_newlinkleaf$)
-��
-�+ � Intelligently delete an old file and
-�  � Get filetype of this file
-�# $string%=autodropdirectory$+�0
-�9 ș "OS_GBPB",12,string%,dblock%,1,oldestnext%,63,"*"
-� oldesttype%=dblock%!20
-�^  � PROCerror("Oldest file to remove : "+oldestname$+" of type "+STR$~(oldesttype%)+CHR$0)
-�- � Delete the oldest link in this dir ...
-�: � Final check - !Start can only remove a file if it's
.6 � filetype is &af3 ... (Precaution against error)
. � (oldesttype%=&af3) �
.< delstring$="delete "+autodropdirectory$+"."+oldestname$
."4 � PROCerror("about to OSCLI "+delstring$+CHR$0)
., �(delstring$+�0)
.6 � insert a new one ...
.@L �addnewshortcut(autodropdirectory$,alba_newlinkfile$,alba_newlinkleaf$)
.J �
.T�
.^alba_type%=-1
.h�
.r
.|2� Prompt user to select directory for new link
.���data_load_add_link
.�*� path$,leaf$,type%,leafptr%,linkname$
.� � (�CheckLinksDirExists=0) �
.�path$=�string(block%+44)
.�!leaf$=�GetLeafName(block%+44)
.�type%=!(block%+40)
.�6linkname$=AppPath$+".Users."+User$+".Links."+leaf$
.�newlinkleaf$=leaf$
.�#newlinkfile$=�string(block%+44)
.�� Is link directory empty?
.�1$string%=AppPath$+".Users."+User$+".Links"+�0
.�;ș "OS_GBPB",10,string%,dblock%,1,0,63,"*" � ,,,number%
.�� number%=0 �
/4� If so then automatically add to root directory
/P�addnewshortcut(AppPath$+".Users."+User$+".Links",newlinkfile$,newlinkleaf$)
/�
/&�showshortcutmenu(1)
/0�
/:�
/D
/N,� Add new link to the shortcut directory
/XF��addnewshortcut(dropdirectory$,add_newlinkfile$,add_newlinkleaf$)
/b� linkname$,leafptr%
/l1linkname$=dropdirectory$+"."+add_newlinkleaf$
/v $string%=add_newlinkfile$+�0
/�C�PROCerror("Contents of "+linkname$+"="+add_newlinkfile$+CHR$0)
/�leafptr%=string%
/�8� Check to see if this file already exists and if so
/�� prompt for overwrite.
/�X%=�(linkname$+�0)
/�ȕ((?leafptr%) > 31)
/��#X%, ?leafptr%
/�leafptr%+=1
/��
/�&�#X%, 10:� Output a terminating LF
/��#X%
/�� Set type appropriately
/�%�("SetType "+linkname$+" af3"+�0)
0�
0
0��alba_purge(expiry%)
0 � (alba_type%<0) � �
0*.� (expiry%>0 � (alba_time%+expiry%)>�) � �
04�autoaddnewshortcut
0>�
0H
0R��data_ack
0\� Store path in temp string
0fpath$=�string(block%+44)
0ppath$=�path$)
0zdhandle%=block%!20
0�#� �path$,"<Wimp$ScrapDir>")>0 �
0�' �IF (drag_icon%=add_window%) THEN 
0�@  �error("You can't add that to the Filer window cache."+�0)
0� �ENDIF
0� �
0��
0�� Compile desktop boot file
0�ș"Hourglass_On"
0�-� (drag_icon%=add_window%) � �savedesktop
0�6� (drag_icon%=subtract_window%) � �subtract_window
0��
0�
0���desktop_ack
16� If we get a desktop_ack then that means that all
19� applications have responded to the request to write
1� to the desktop boot file.
1$� (DX%<>0) � �#DX%:DX%=0
1.*� drag_icon%=add_window% � �add_window
18�
1B
1L9� ***************************************************
1V
1`��add_window
1j9� Go through desktop bootfile looking for path string
1t9� If this line contains path_string then add relevant
1~'� line of boot file to config file.
1�newline$=""
1� X%=�(AppPath$+".tmpfile"+�0)
1��
1�A$=�get_line(X%)
1�path_start%=�A$, path$)
1�path_length%=�(path$)
1�f� (�A$, "Filer_OpenDir")>0 � path_start%>0 � �(�A$,path_start%+path_length%,1))<=32) � newline$=A$
1�
� �#X%
1��#X%
1�7� No serious precautions needed here because of the
1� � file name used ... tmpfile
1�'�("Delete "+AppPath$+".tmpfile"+�0)
2
2
/X%=�(AppPath$+".Users."+User$+".~~Open"+�0)
2
�#X%=�#X%
2�put_line(X%, newline$)
2(�#X%
22
2<0X%=�(AppPath$+".Users."+User$+".~~Close"+�0)
2F
�#X%=�#X%
2P*�put_line(X%, "Filer_CloseDir "+path$)
2Z�#X%
2d� Re-initialise the Cache
2n�loadcache
2xÈ™"Hourglass_Off"
2��
2�
2�9� ***************************************************
2�
2���subtract_window
2�/X%=�(AppPath$+".Users."+User$+".~~Open"+�0)
2�0Y%=�(AppPath$+".Users."+User$+".tmpfile"+�0)
2��
2�A$=�get_line(X%)
2�path_start%=�A$, path$)
2�path_length%=�(path$)
2�k� (�A$, "Filer_OpenDir")=0 � path_start%=0 � �(�A$,path_start%+path_length%,1))>32) � �put_line(Y%, A$)
2�
� �#X%
3�#X%
3�#Y%
36�("Delete "+AppPath$+".Users."+User$+".~~Open"+�0)
3"K�("Rename "+AppPath$+".tmpfile "+AppPath$+".Users."+User$+".~~Open"+�0)
3,
360X%=�(AppPath$+".Users."+User$+".~~Close"+�0)
3@ Y%=�(AppPath$+".tmpfile"+�0)
3J�
3TA$=�get_line(X%)
3^path_start%=�A$, path$)
3hpath_length%=�(path$)
3rl� (�A$, "Filer_CloseDir")=0 � path_start%=0 � �(�A$,path_start%+path_length%,1))>32) � �put_line(Y%, A$)
3|
� �#X%
3��#X%
3��#Y%
3�7�("Delete "+AppPath$+".Users."+User$+".~~Close"+�0)
3�L�("Rename "+AppPath$+".tmpfile "+AppPath$+".Users."+User$+".~~Close"+�0)
3�� Re-initialise the Cache
3��loadcache
3�ș"Hourglass_Off"
3��
3�
3�9� ***************************************************
3�9� ***************************************************
3�9� ***************************************************
3�9� ***************************************************
4
4
��init
4=� Do ~~Open and ~~Close files exist? If not, create empty
4&0� copies of them to prevent !Start crashing.
40!�ensuredir(AppPath$+".Users")
4:(�ensuredir(AppPath$+".Users."+User$)
4D1�ensuredir(AppPath$+".Users."+User$+".Links")
4N
4X/$string%=AppPath$+".Users."+User$+".~~Open"
4b$ș"OS_File",17,string% � result%
4lA� (result%=0) � X%=�(AppPath$+".Users."+User$+".~~Open"):�#X%
4v0$string%=AppPath$+".Users."+User$+".~~Close"
4�$ș"OS_File",17,string% � result%
4�B� (result%=0) � X%=�(AppPath$+".Users."+User$+".~~Close"):�#X%
4�
4�Pș "Wimp_Initialise",200,&4B534154,app$ � current_wimp_version%,task_handle%
4�
4�0ș"Wimp_OpenTemplate",,AppPath$+".Templates"
4�$string%="Info"
4�Gș"Wimp_LoadTemplate",,block%,infodata%,infodata%+2048,-1,string%,0
4�1ș"Wimp_CreateWindow",,block% � whandle_info%
4�ș"Wimp_CloseTemplate"
4�
4�
� �Dpu
4��setupmenu(main_menu%)
5
5=� Install an icon on the icon bar using the shortcut icon
5`iconbarhandle%=�create_icon(-2,0,-16,84,106,&1700310B,"!xuen",iconbarlabel%,iconbardata%,32)
5 
5*�
54
5>9� ***************************************************
5H9� ***************************************************
5R9� ***************************************************
5\9� ***************************************************
5f
5p� "Xuen",5
5z� 0,whandle_info%,"Info"
5�� 0,-1,"Clean Desk"
5�� 0,-1,"NoHourglass"
5�� 0,-1,"Edit Links"
5�� &80,-1,"Quit"
5�
5�?� *********************************************************
5�
5�<� function to inform the wimp of the presence of an icon
5�Fݤcreate_icon(whan%,ix%,iy%,iw%,ih%,flag%,text$,ptr1%,ptr2%,ptr3%)
5�!block%=whan%
5�block%!4=ix%
5�block%!8=iy%
5�block%!12=ix%+iw%
6block%!16=iy%+ih%
6block%!20=flag%
6� ptr1%=0 �
6$$(block%+24)=text$
6.�
68block%!24=ptr1%
6Bblock%!28=ptr2%
6Lblock%!32=ptr3%
6V�
6`*ș"Wimp_CreateIcon",,block% � ihandle%
6j
=ihandle%
6t
6~>� ********************************************************
6�
6�+� General mouse click handling routine.
6�D� Note to people who don't really have a clue about WIMP system:
6�=� All clickings on menus will never reach this procedure,
6�:� it deals with all clicks on windows and the iconbar.
6���click(win%)
6�
Ȏ win% �
6�!� -2:�click_iconbar(block%!8)
6�)� whandle_info%:�click_info(block%!8)
6��
6��
6�
7��click_iconbar(button%)
7
Ȏ button% �
7� 0:�move_overiconbar
7� 1:�click_iconbaradjust
7(� 2:�click_iconbarmenu
72� 4:�click_iconbarselect
7<�
7F�
7P
7Z��move_overiconbar
7d-� IconBarMenuOpen%=1 iconbar_timerflag%=0
7n;� Is pointer over iconbar icon? If so inc iconbar_timer
7xX� (iconbar_timerflag%=0 � IconBarMenuOpen%<>1) iconbar_timerflag%=1:iconbar_timer%=�
7�I� (((�-iconbar_timer%)>25) � iconbar_timerflag%=1 � OldToolTip%<>1) �
7� � What sort of tool tip?
7� RSeed%=�(-�)
7� � (�(4)=1) �
7�*  �OpenToolTip(2):iconbar_timerflag%=2
7� �
7�*  �OpenToolTip(1):iconbar_timerflag%=2
7� �
7��
7�X� (((�-iconbar_timer%)>1000) � ToolTip%>0) �PersistCloseToolTip:iconbar_timerflag%=0
7��
7�
7���click_iconbargeneral
8%� ToolTip%=1 �PersistCloseToolTip
8#È™"Wimp_GetPointerInfo",,block%
8override_tooltip%=1
8";IconBarMenuOpen%=1:� Inhibit tool tip display over menu
8,
� (�-1) �
86/�showmenu(main_menu%,!block%-64, 96+(5*44))
8@�
8J�showshortcutmenu(0)
8T�
8^�
8h
8r��click_iconbarmenu
8|�click_iconbargeneral
8��
8�
8���click_iconbarselect
8�� (�-1) � (�-2) �
8�� Open cache windows
8��reopenfiler
8��
8��
8�
8�
� (�-2) �
8� � Start drag to add a window
8�#ș"Wimp_GetPointerInfo",,block%
8�(� (block%!8) �init_drag(add_window%)
9�
9� Click menu
9�click_iconbargeneral
9&�
90�
9:
9D��click_iconbaradjust
9N� (�-1) � (�-2) �
9X� Close cache windows
9b�closefiler:�CloseInfoBox
9l�
9v�
9�
� (�-2) �
9�#ș"Wimp_GetPointerInfo",,block%
9�#� Start drag to remove a window
9�-� (block%!8) �init_drag(subtract_window%)
9��
9��click_iconbargeneral
9��
9��
9�
9�ݤCheckLinksDirExists
9�� dir$,result%
9�*dir$=AppPath$+".Users."+User$+".Links"
9�%� Does the Links directory exist?
:$string%=dir$+�0
:$ș"OS_File",17,string% � result%
:� If not, create one.
: &� (result%=0) � �("CDIR "+dir$+�0)
:*$ș"OS_File",17,string% � result%
:4'� Has it created it? If not, error.
:>� (result%=0) �
:H.�error("Fatal : Couldn't create "+dir$+�0)
:R=0
:\�
:f=1
:p
:z��ensuredir(edir$)
:�
� result%
:�� Does the directory exist?
:�$string%=edir$+�0
:�$ș"OS_File",17,string% � result%
:�� If not, create one.
:�'� (result%=0) � �("CDIR "+edir$+�0)
:�$ș"OS_File",17,string% � result%
:�'� Has it created it? If not, error.
:�� (result%=0) �
:�/�error("Fatal : Couldn't create "+edir$+�0)
:�� =0
:��
:��=1
;�
;
;8� **************************************************
;$%� Start building the shortcutmenu
;.8� **************************************************
;8��showshortcutmenu(arg%)
;B'� (ToolTip%=1) �PersistCloseToolTip
;Laddlink%=arg%
;V � (�CheckLinksDirExists=0) �
;`dirptr%(0)=shortcutmenu%
;j'� linkmenudepth%=0:REM At top level
;t
;~E�SingleDirectoryRead(AppPath$+".Users."+User$+".Links", User$, 0)
;� initialmenusize%=dirlist%(0)
;�+� initialmenusize%=0 initialmenusize%=1
;�#ș"Wimp_GetPointerInfo",,block%
;�C�showmenu(shortcutmenu%,!block%-64, 96+((initialmenusize%)*44))
;��
;�
;�
;�
;�;� *****************************************************
;�;� Read contents of a directory into the menu data areas
;�;� *****************************************************
;�<��SingleDirectoryRead(localdir$,dirfilename$,linkdepth%)
<<� oldlocaldir$,olddirfilename$,oldlinkdepth%, olddirptr%
<
� dirsize%, DirScan%
<-� dir$,next%,type%,item$,currentdir%,ptr%
<-� currentmenuptr%, locali%, width%,title$
<(� TitlePtr%, MenuExtent%
<2B� filetype%, filetypeinfo%,linktype%,objecttype%,linktypeinfo%
<<� ValidLoadFlag%
<F� CurrentLinkDepth%
<P� NumberOfLinks%
<Z
<d CurrentLinkDepth%=linkdepth%
<noldlocaldir$ = localdir$
<x"olddirfilename$ = dirfilename$
<�oldlinkdepth% = linkdepth%
<�%olddirptr%=dirptr%(oldlinkdepth%)
<�DirScan%=�
<�
<�7�:� Repeat until loaded in directory with no errors
<�localdir$ = oldlocaldir$
<�"dirfilename$ = olddirfilename$
<�linkdepth% = oldlinkdepth%
<�%dirptr%(oldlinkdepth%)=olddirptr%
<�DirScan%=�
<�
<�5� Calculate pointer to shortcutmenu% & index into
<�� shortcutmenudata%
=dir$=localdir$
=a%=0
=!currentmenuptr%=shortcutmenu%
="i%=0
=,È• a%<linkdepth%
=6+currentmenuptr%+=(28+(dirlist%(a%)*24))
=@i%+=dirlist%(a%)
=J	a%+=1
=T�
=^
=h<� Initialise start menu user/system seperator to be null
=r+� (linkdepth%=0) StartMenuSeperator%=-1
=|
=�9�PROCerror("MenuPtr = "+STR$~(currentmenuptr%)+CHR$0)
=�next%=0
=�numberofitems%=0
=�
=�8� Get number of items in current directory localdir$
=�ȕ (next%<>-1)
=�$string%=dir$+�0
=�Eș "OS_GBPB",10,string%,dblock%,1,next%,63,"*" � ,,,number%,next%
=�!� next%<>-1 numberofitems%+=1
=��
=�
=�
=�>�PROCerror("Directory size = "+STR$(numberofitems%)+CHR$0)
>
>'dirlist%(linkdepth%)=numberofitems%
>9nextmenuptr%=currentmenuptr%+(28+(numberofitems%*24))
>&&dirptr%(linkdepth%+1)=nextmenuptr%
>0
>:locali%=i%
>D� Build titleless menu
>N,� title$="Menu "+STR$(currentdir%)+CHR$0
>X;� (linkdepth%=1 � �dirfilename$,1)=�(SysFilePrefix%)) �
>b/ title$=�dirfilename$,�(dirfilename$)-1)+�0
>l �
>v title$=dirfilename$+�0
>��
>�
>�TitlePtr%=currentmenuptr%
>�$TitlePtr%=title$
>�width%=(�(title$)-2)*16
>�"currentmenuptr%!12 = &00070207
>�currentmenuptr%!20=44
>�currentmenuptr%!24=0
>�ptr%=currentmenuptr%+28
>�
>�next%=0
>�
>�!NumberOfLinks%=numberofitems%
?
?*ȕ (next%<NumberOfLinks% � DirScan%=�)
?ValidLoadFlag%=�
? /È™ "OS_GBPB",10,dir$,dblock%,1,next%,63,"*"
?*next%+=1
?4locali%=i%
?>/� Get Object type (2 = directory, 1 = file)
?Htype% = dblock%?&10
?R� Get name of this object
?\item$=�getname(dblock%+&14)
?f� Get file attributes
?p"filetypeinfo%= !dblock% >>> 20
?z#filetype%=(!dblock% >> 8)� &FFF
?�
?�� Initialise menu object
?�/!ptr%=8:� mflags = &80 means last menu item
?�#ptr%!4=-1:� pointer to sub menu
?�-� Store this filer object, whatever it is
?�3!(shortcutmenudata%+(locali%*64)+32+28) = type%
?�!� Is this object a directory?
?�� (type% =2) �
?�( � If so, then add to directory list
?�1 $(shortcutmenudata%+(locali%*64)+32) = ""+�0
?�/ ptr%!4 = nextmenuptr%:� Pointer to submenu
?� �
?�) � This is a link and not a directory
@, �  PROCerror("Processing "+item$+CHR$0)
@" � Get filetype of link object
@1 $string%=�GetLinkContents(dir$+"."+item$)+�0
@$ 
@.0 � (�CheckValidDrive(�string(string%)) =1) �
@8:  ș "OS_File",17,string% � objecttype%,,linkloadaddr%
@B)  linktype%=(linkloadaddr%>>8) � &FFF
@L)  linktypeinfo%= linkloadaddr% >>> 20
@V �
@`  objecttype%=0
@j �
@tU �PROCerror(FNGetLinkContents(dir$+"."+item$)+" is a "+STR$(linktypeinfo%)+CHR$0)
@~ � (objecttype%=0) �
@�Y  � PROCerror("Error : Link("+FNGetLinkContents(dir$+"."+item$)+") not found."+CHR$0)
@�1  � Delete this link and rescan the directory
@�=  � Safety first - ensure this file is actually a link in
@�C  � case the <Start$Dir> system variable has become corrupt (!)
@�  � (filetype%=&af3) �
@�q   � PROCerror("Invalid link "+dir$+"."+item$+" has been found and will be deleted when you click OK."+CHR$0)
@�%   �("delete "+dir$+"."+item$+�0)
@�   DirScan%=�
@�   ValidLoadFlag%=�
@�   �
@�   �error("Error: Another prog has altered the <Xuenbs$Dir> system variable or someone has placed a non-link "+dir$+"."+item$+" into the links directory. Rerun the !Xuen application or remove the offending file from the !Xuen.Links directory."+�0)
@�  �
A 
A
 �
A 
A@ � $(shortcutmenudata%+(locali%*64)+32) = "Ssmall_dir"+CHR$0
A( 
A2 � (objecttype%=1) �
A<(  � This link is a pointer to a file
AF7  � PROCerror(FNstring(string%)+" is a file"+CHR$0)
APG  $(shortcutmenudata%+(locali%*64)+32) = "Ssmall_"+�~(linktype%)+�0
AZ �
Ad
An= � For some wierd reason the following two variables must
Ax; � be evaluated outside of the objecttype test. I think
A�< � it must be something to do with the pipeline and/or a
A� � bug in the BASIC rom.
A� shriek%=�("!")
A� namestart%=�(�item$,1))
A�1 � PROCerror(STR$(namestart%-shriek%)+CHR$0) 
A� � (objecttype%=2) �
A�=  � This link is a pointer to an application or directory
A�#  � PROCerror(FirstChar$+CHR$0)
A�  � (namestart%<>shriek%) �
A�   � !ptr%=(!ptr%)+4
A�=   $(shortcutmenudata%+(locali%*64)+32) = "Ssmall_dir"+�0
A�   �
A�<   $(shortcutmenudata%+(locali%*64)+32) = "Ssm"+item$+�0
B  �
B �
B
B"�
B,
B6(� Build rest of menu item attributes
B@ptr%!8=&7000313:� icon type
BJE� IF (type%=2 AND objecttype%=0) ptr%!8=&7400313:REM Invalid line
BT"� (addlink%=1) ptr%!8=&3000313
B^.$(shortcutmenudata%+(locali%*64))=item$+�0
Bh,ptr%!12 = shortcutmenudata%+(locali%*64)
Br/ptr%!16 = shortcutmenudata%+(locali%*64)+32
B|5ptr%!20 = 28:� menu item string buffer = 28 bytes
B�
B�� (linkdepth%=0) �
B�?� (�item$,1,1)=�(SysFilePrefix%) � StartMenuSeperator%<0) �
B�I� PROCerror("Name = "+FNstring(shortcutmenudata%+(locali%*64))+CHR$0)
B�StartMenuSeperator%=locali%
B�1� Does this item need a dotted line above it?
B�-� (locali%>0) !(ptr%-24)=(!(ptr%-24)) + 2
B��
B�u� (locali%>=StartMenuSeperator% � StartMenuSeperator%>=0) $(shortcutmenudata%+(locali%*64))=�item$,�(item$)-1)+�0
B��
B�
B�
B�a%=(�(item$)+4)*16
C� a%>width% width%=a%
Cptr%+=24
C	i%+=1
C&�
C0
C:'� Has this list got anything in it?
CD � (dirlist%(linkdepth%)>0) �
CN'!(ptr%-24)=&88:� Set last menu item
CX�
Cbwidth%=(�(title$)-2)*16
Cl:� Make default first entry be greyed out label 'empty'
Cvitem$="Empty"+�0
C�0$(shortcutmenudata%+(locali%*64)+32) = ""+�0
C�=!ptr%=&88:� mflags = &80 means last menu item 8=IssueWarn
C�#ptr%!4=-1:� pointer to sub menu
C�� (addlink%=1) �
C�@ptr%!8=&3000313:� greyed out SELECTABLE icon type (Add link)
C��
C�7ptr%!8=&2400B33:� greyed out UNSELECTABLE icon type
C��
C�+$(shortcutmenudata%+(locali%*64))=item$
C�$(ptr%+12)=item$
C�,ptr%!12 = shortcutmenudata%+(locali%*64)
C�/ptr%!16 = shortcutmenudata%+(locali%*64)+32
C�5ptr%!20 = 28:� menu item string buffer = 28 bytes
Da%=(�(item$)+4)*16
D� a%>width% width%=a%
D	i%+=1
D �
D*(� Does this menu fit on the screen ?
D43�MenuExtent% = MenuX%+(width% * MenuDirection%)
D>2�IF (MenuExtent%>OS_MX% OR MenuExtent%<0) THEN
DH� title$="\"+title$
DR� $TitlePtr% = title$
D\&� MenuDirection%=MenuDirection%*-1
Df� REM Adjust width
Dp,� IF ((LEN(title$)-2)*16) > width%) THEN
Dz �  width%=(LEN(title$)-2)*16
D�� ENDIF
D�
�ENDIF
D�currentmenuptr%!16=width%
D�
D�
� ENDPROC
D�
D�� End of directory scanning
D�� DirScan%=�
D�'dirlist%(linkdepth%)=numberofitems%
D�
D�5� (dirlist%(linkdepth%)=0) dirlist%(linkdepth%)=1
D��
D�
E7� *************************************************
E � A Submenu is about to open
E7� *************************************************
E$��submenu_warning
E.6� ptr%,localdir$,depth%,index%,selection%,leaf$,i%
E8/localdir$=AppPath$+".Users."+User$+".Links"
EB8� Navigate menu index data to determine where we are
ELdepth%=0
EVindex%=0
E`ptr%=block%+32
Ej&È• !((block%+32)+(depth%*4)) <> -1
Et(selection%=!((block%+32)+(depth%*4))
E~=leaf$=�string(shortcutmenudata%+((index%+selection%)*64))
E�&� Is this a system directory name?
E�i%=selection%
E�E� (depth%=0 � i%>=StartMenuSeperator% � StartMenuSeperator%>=0) �
E�!leaf$=�(SysFilePrefix%)+leaf$
E��
E�!localdir$=localdir$+"."+leaf$
E�index%+=dirlist%(depth%)
E�
depth%+=1
E��
E�0�SingleDirectoryRead(localdir$,leaf$,depth%)
E�9ș"Wimp_CreateSubMenu",,block%!20,block%!24,block%!28
E��
F
F
;� *****************************************************
F� Recursive Directory boot
F;� *****************************************************
F(��DirectoryBoot(localdir$)
F29� dir$, next%,type%, item$, objectcount%, currentdir%
F<� number%,LD%
FF� linktype%,linkdir$
FPdir$=localdir$
FZnext%=0
Fd�SYS"Hourglass_On"
Fnȕ next%<>-1
Fx
F�	�poll
F�	�poll
F�
F�Eș "OS_GBPB",10,dir$,bootblock%,1,next%,63,"*" � ,,,number%,next%
F�/� Get Object type (2 = directory, 1 = file)
F�type% = bootblock%?&10
F�� Get name of this object
F�"item$=�getname(bootblock%+&14)
F�,� Has this directory got anything in it?
F�� (next%<>-1) �
F�' � Is this a directory (ie type=2) 
F� � (type%=2) �
F�%   �DirectoryBoot(dir$+"."+item$)
G �
G0   � Must be a link to a file or application
G4   � What type of thing does this link point to?
G")   � PROCerror("Opening "+dir$+CHR$0)
G,   LD%=�(dir$+"."+item$+�0)
G6   linkdir$=""
G@   �
GJ   LD$=�(�#LD%)
GT"   � (�(LD$)>31) linkdir$+=LD$
G^   � �(LD$)<32 � �#LD%
Gh
   �#LD% 
Gr"   � What type is the linkdir?
G|   $bootstring%=linkdir$+�0
G�*   � (�CheckValidDrive(linkdir$) =1) �
G�/    ș "XOS_File",5,bootstring% � linktype%
G�*    � (�item$,1)="!" � linktype%<>2) �
G�?     � Must be either a file or app or dir so let's boot it
G�@     � If directory, only boot if begin with a ! (Save time)
G�/     $clistring = "Filer_Boot "+linkdir$+�0
G�      ș "XOS_CLI", clistring
G�	    �
G�   �
G� �
G��
G��
G��SYS"Hourglass_Off"
H�
H
HݤCheckValidDrive(isvpath$)
H&!� fs_drive$, pptr%, char$, a%
H08� Check that isvpath$ resides on a valid file system
H:� and a valid drive.
HD(� If not then return 0 else return 1
HNpptr%=1
HXfs_drive$=""
Hb�
Hlchar$=�isvpath$,pptr%,1)
Hv,� (char$<>".") fs_drive$=fs_drive$+char$
H�pptr%=pptr%+1
H�%� (pptr%>�(isvpath$) � char$=".")
H�8� Check fs_drive$ with all currently invalid devices
H�a%=0
H�ȕ(a%<InvalidDriveCount%)
H�;� (fs_drive$=InvalidDrive$(a%)) a%=InvalidDriveCount%+1
H�	a%+=1
H��
H�+� return if it matches an invalid drive
H�"� (a%>InvalidDriveCount%) � =0
H�� Is this device valid?
H�$clistring=fs_drive$+�0
H�&ș"XOS_File",5,clistring � result%
I� (result%<=8192) �
I � This is a valid drive
I =1
I �
I*#� Update list of invalid drives
I41InvalidDrive$(InvalidDriveCount%) = fs_drive$
I>InvalidDriveCount%+=1
IH=0
IR
I\%ݤGetLinkContents(glinkfilename$)
If� linkdir$,LD%
Ip   LD%=�(glinkfilename$+�0)
Iz   linkdir$=""
I�   �
I�   LD$=�(�#LD%)
I�"   � (�(LD$)>31) linkdir$+=LD$
I�   � �(LD$)<32 � �#LD%
I�   �#LD%
I�   =linkdir$
I�
I�
I�*� Extract the wstring stored at addr%.
I�� �getname(addr%)
I�� b$
I�ȕ ?addr%>31
I�b$+=�(?addr%)
Jaddr%+=1
J�
J=b$
J$
J.,� **************************************
J8!� Click on shortcut menu list
JB,� **************************************
JL��shortcutmenuselect
JVB� currentmenuptr%,dir$,linkdir$,dropdir$,currentdropdir$,leaf$
J`� ReOpenFlag%
Jj� IconFlagsAddr%
Jt
J~ReOpenFlag%=�
J�*dir$=AppPath$+".Users."+User$+".Links"
J�dropdir$=dir$
J�currentdropdir$=dir$
J�!currentmenuptr%=shortcutmenu%
J� globalmenuptr%=shortcutmenu%
J�,� block%+00 is selection number of menu,
J�nestlevel%=0
J�sel1%=block%!nestlevel%
J�
J�;� Recurse menu directory pointers until leaf node found
J��
J�$selection%=block%!(nestlevel%*4)
K,nextselection%=block%!((nestlevel%+1)*4)
K
:�PROCerror("Menu Selection = "+STR$(selection%)+CHR$0)
K9� Get pointer to icon definition from menu definition
K7submenuptr%=!(currentmenuptr%+28+(selection%*24)+4)
K(5dataptr%=!(currentmenuptr%+28+(selection%*24)+12)
K2leaf$=�string(dataptr%)
K<!� Is this a system file name?
KF
KPm� (selection%>=StartMenuSeperator% � StartMenuSeperator%>=0 � nestlevel%=0) leaf$=�(SysFilePrefix%)+leaf$
KZ
Kdcurrentdropdir$=dropdir$
Kn� (selection%<>-1) �
Kx dir$=dir$+"."+leaf$
K�1 � Is this menu entry a pointer to a submenu?
K� � (submenuptr%<>-1) �
K�  dropdir$=dropdir$+"."+leaf$
K�  currentmenuptr%=submenuptr%
K� nestlevel%+=1
K� �
K��
K�� nextselection%=-1
K�
K�� (addlink%=1) �
K�I� PROCerror("Adding shortcut["+newlinkleaf$+"] into "+dropdir$+CHR$0)
K�>�addnewshortcut(currentdropdir$,newlinkfile$,newlinkleaf$)
K��
L � Is this a valid object?
L � (submenuptr%=-1) �
L  � Is the ALT key pressed?
L"  � If so delete this link
L,  � (�-3) �
L6   �("delete "+dir$+�0)
L@   � Alter menu structure
LJ:   IconFlagsAddr%=currentmenuptr%+28+8+(selection%*24)
LTC   !IconFlagsAddr% = (!IconFlagsAddr%)+(2^22):� Grey out sprite
L^=   !IconFlagsAddr% = !IconFlagsAddr% � &ffffff:� Grey out
Lh8   !IconFlagsAddr% = !IconFlagsAddr%+&1000000:� text
Lr  �
L|/   � Get the desktop filer to run this link
L�/   dir$="Filer_Run "+�GetLinkContents(dir$)
L�'   � PROCerror("OSCLI "+dir$+CHR$0)
L�   �(dir$+�0)
L�  �
L� �
L�< � Check if ADJUST pressed in which case, reprint menus.
L�% ș"Wimp_GetPointerInfo",,block2%
L� button%=block2%!8
L�� button%=1 ReOpenFlag%=�
L�
L�� (ReOpenFlag%) �
L�! �showmenu(shortcutmenu%,0,0)
L� �
M3 IconBarMenuOpen%=0:� Reenable icon bar tooltip
M�
M�
M&�
M0
M:��click_info(button%)
MDȎ button% �
MN7� 2:�showmenu(main_menu%,!block%-64, (block%!4)+32)
MX�
Mb�
Ml
Mv��menuselect
M�� Skronky%
M�Skronky%=currentmenu%
M�Ȏ Skronky% �
M� � main_menu%:�mainmenuselect
M�'� shortcutmenu%:�shortcutmenuselect
M��
M��
M�
M���mainmenuselect
M�2� block%+00 is selection number of first menu,
M�8� block%+04 is selection number of second level etc.
M� sel1%=!block%:sel2%=block%!4
M�#ș"Wimp_GetPointerInfo",,block%
Nbutton%=block%!8
NȎ sel1% �
N� 0:�OpenInfoBox
N � 1:�clear
N*� 2:�smash
N4� 3:�OpenLinks
N>� 4:quit%=�
NH�
NR;� Check if ADJUST pressed in which case, reprint menus.
N\� button%=1 �
Nf�showmenu(main_menu%,0,0)
Np�
Nz2IconBarMenuOpen%=0:� Reenable icon bar tooltip
N��
N��
N�
N���OpenLinks
N�<�("Filer_Opendir "+AppPath$+".Users."+User$+".Links"+�0)
N��
N�
N���showmenu(menu%,mx%,my%)
N�currentmenu%=menu%
N�;ș"Wimp_CreateMenu",,menu%,mx%,my% � currentmenuhandle%
N��
N�
N�9� ***************************************************
O
O��clear
O1X%=�(AppPath$+".Users."+User$+".~~Open"):�#X%
O$2X%=�(AppPath$+".Users."+User$+".~~Close"):�#X%
O.�loadcache
O8�
OB
OL=� *******************************************************
OV
O`��smash
Oj�("Close")
OtÈ™"Hourglass_Smash"
O~�
O�
O�=� *******************************************************
O�
O�)� Tell WIMP to initialise a new menu.
O�?� This should really be done by loading in a MENU template.
O���setupmenu(menu%)
O�� title$,num%:$menu%=title$
O�width%=(�(title$)-2)*16
O�-menu%!12=&00070207:menu%!20=44:menu%!24=0
O�ptr%=menu%+28:� i%=1�num%
O�� mflags%,subptr%,item$
O� !ptr%=mflags%:ptr%!4=subptr%
P$ptr%!8=&7000021:$(ptr%+12)=item$
P
a%=(�(item$)+1)*16
P� a%>width% width%=a%
Pptr%+=24:�
P(menu%!16=width%
P2�
P<
PF;� *****************************************************
PP
PZ"� function to deal with errors
Pd��error(err$)
Pn!errorblock%=255
Px$(errorblock%+4)=err$+�0
P�,ș "Wimp_ReportError",errorblock%,1,app$
P��
P�
P�;� *****************************************************
P���OpenFSView
P�
P��
P�;� *****************************************************
P���CloseFSView
P�
P��
P�;� *****************************************************
�
00000000  0d 00 0a 35 f4 20 2a 2a  2a 2a 2a 2a 2a 2a 2a 2a  |...5. **********|
00000010  2a 2a 2a 2a 2a 2a 2a 2a  2a 2a 2a 2a 2a 2a 2a 2a  |****************|
*
00000030  2a 2a 2a 2a 2a 0d 00 14  14 f4 20 4e 61 6d 65 20  |*****..... Name |
00000040  20 20 20 3a 20 58 75 65  6e 0d 00 1e 14 f4 20 56  |   : Xuen..... V|
00000050  65 72 73 69 6f 6e 20 3a  20 37 2e 30 30 0d 00 28  |ersion : 7.00..(|
00000060  32 f4 20 50 75 72 70 6f  73 65 20 3a 20 4d 61 6b  |2. Purpose : Mak|
00000070  65 20 52 69 73 63 4f 53  20 44 65 73 6b 74 6f 70  |e RiscOS Desktop|
00000080  20 6d 6f 72 65 20 65 66  66 69 63 69 65 6e 74 0d  | more efficient.|
00000090  00 32 1b f4 20 41 75 74  68 6f 72 20 20 3a 20 42  |.2.. Author  : B|
000000a0  61 72 6e 79 20 53 68 6f  72 74 0d 00 3c 1b f4 20  |arny Short..<.. |
000000b0  44 61 74 65 20 20 20 20  3a 20 30 38 2d 4d 61 72  |Date    : 08-Mar|
000000c0  2d 31 39 39 38 0d 00 46  35 f4 20 2a 2a 2a 2a 2a  |-1998..F5. *****|
000000d0  2a 2a 2a 2a 2a 2a 2a 2a  2a 2a 2a 2a 2a 2a 2a 2a  |****************|
*
000000f0  2a 2a 2a 2a 2a 2a 2a 2a  2a 2a 0d 00 50 18 f4 20  |**********..P.. |
00000100  52 65 76 69 73 69 6f 6e  20 68 69 73 74 6f 72 79  |Revision history|
00000110  20 3a 0d 00 5a 34 f4 20  32 34 2d 41 75 67 2d 31  | :..Z4. 24-Aug-1|
00000120  39 39 37 20 20 20 41 64  64 65 64 20 51 75 69 63  |997   Added Quic|
00000130  6b 66 69 6c 65 20 49 63  6f 6e 20 74 6f 20 69 63  |kfile Icon to ic|
00000140  6f 6e 62 61 72 2e 0d 00  64 31 f4 20 20 20 20 20  |onbar...d1.     |
00000150  20 20 20 20 20 20 20 20  20 20 43 6c 69 63 6b 69  |          Clicki|
00000160  6e 67 20 6f 6e 20 69 63  6f 6e 20 6f 70 65 6e 2f  |ng on icon open/|
00000170  63 6c 6f 73 65 73 2e 0d  00 6e 2d f4 20 32 35 2d  |closes...n-. 25-|
00000180  41 75 67 2d 31 39 39 37  20 20 20 41 64 64 65 64  |Aug-1997   Added|
00000190  20 53 68 6f 72 74 43 75  74 73 20 66 61 63 69 6c  | ShortCuts facil|
000001a0  69 74 79 2e 0d 00 78 32  f4 20 20 20 20 20 20 20  |ity...x2.       |
000001b0  20 20 20 20 20 20 20 20  53 69 6d 69 6c 61 72 20  |        Similar |
000001c0  66 65 61 74 75 72 65 20  74 6f 20 57 69 6e 39 35  |feature to Win95|
000001d0  20 74 6f 6f 6c 2e 0d 00  82 36 f4 20 30 34 2d 53  | tool....6. 04-S|
000001e0  65 70 2d 31 39 39 37 20  20 20 41 64 64 65 64 20  |ep-1997   Added |
000001f0  6e 65 73 74 65 64 20 64  69 72 65 63 74 6f 72 69  |nested directori|
00000200  65 73 20 66 61 63 69 6c  69 74 79 2e 0d 00 8c 30  |es facility....0|
00000210  f4 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |.               |
00000220  43 68 61 6e 67 65 64 20  53 68 69 66 74 2b 49 63  |Changed Shift+Ic|
00000230  6f 6e 62 61 72 4d 65 6e  75 20 74 6f 0d 00 96 2f  |onbarMenu to.../|
00000240  f4 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |.               |
00000250  69 6e 63 6c 75 64 65 20  45 64 69 74 4c 69 6e 6b  |include EditLink|
00000260  73 20 66 61 63 69 6c 69  74 79 2e 0d 00 a0 35 f4  |s facility....5.|
00000270  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 43  |               C|
00000280  68 61 6e 67 65 64 20 6e  61 6d 65 20 74 6f 20 53  |hanged name to S|
00000290  74 61 72 74 20 61 6e 64  20 63 68 61 6e 67 65 64  |tart and changed|
000002a0  0d 00 aa 30 f4 20 20 20  20 20 20 20 20 20 20 20  |...0.           |
000002b0  20 20 20 20 73 68 6f 72  74 63 75 74 73 20 64 69  |    shortcuts di|
000002c0  72 65 63 74 6f 72 79 20  74 6f 20 4c 69 6e 6b 73  |rectory to Links|
000002d0  0d 00 b4 2f f4 20 30 35  2d 53 65 70 2d 31 39 39  |.../. 05-Sep-199|
000002e0  37 20 20 20 43 68 61 6e  67 65 64 20 77 61 79 20  |7   Changed way |
000002f0  77 69 6e 64 6f 77 20 63  61 63 68 65 20 69 73 0d  |window cache is.|
00000300  00 be 35 f4 20 20 20 20  20 20 20 20 20 20 20 20  |..5.            |
00000310  20 20 20 61 64 6d 69 6e  69 73 74 65 72 65 64 2e  |   administered.|
00000320  20 42 65 63 61 6d 65 20  76 65 72 73 69 6f 6e 20  | Became version |
00000330  32 2e 30 30 0d 00 c8 31  f4 20 30 36 2d 53 65 70  |2.00...1. 06-Sep|
00000340  2d 31 39 39 37 20 20 20  43 68 61 6e 67 65 64 20  |-1997   Changed |
00000350  66 6f 72 6d 61 74 20 6f  66 20 6c 69 6e 6b 20 66  |format of link f|
00000360  69 6c 65 73 2e 0d 00 d2  32 f4 20 20 20 20 20 20  |iles....2.      |
00000370  20 20 20 20 20 20 20 20  20 41 64 64 65 64 20 65  |         Added e|
00000380  6e 74 69 72 65 20 62 6f  6f 74 20 61 74 20 73 74  |ntire boot at st|
00000390  61 72 74 20 75 70 2e 0d  00 dc 30 f4 20 30 37 2d  |art up....0. 07-|
000003a0  53 65 70 2d 31 39 39 37  20 20 20 46 69 78 65 64  |Sep-1997   Fixed|
000003b0  20 61 20 6d 6f 74 68 65  72 20 6f 66 20 61 20 62  | a mother of a b|
000003c0  75 67 20 74 68 61 74 0d  00 e6 35 f4 20 20 20 20  |ug that...5.    |
000003d0  20 20 20 20 20 20 20 20  20 20 20 70 72 6f 62 61  |           proba|
000003e0  62 6c 79 20 68 61 73 20  73 6f 6d 65 74 68 69 6e  |bly has somethin|
000003f0  67 20 74 6f 20 64 6f 20  77 69 74 68 0d 00 f0 31  |g to do with...1|
00000400  f4 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |.               |
00000410  74 68 65 20 70 69 70 65  6c 69 6e 65 2e 20 41 6c  |the pipeline. Al|
00000420  73 6f 20 61 64 64 65 64  20 6d 75 63 68 0d 00 fa  |so added much...|
00000430  2e f4 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |..              |
00000440  20 6d 6f 72 65 20 69 6e  74 65 6c 6c 69 67 65 6e  | more intelligen|
00000450  74 20 66 69 6c 65 20 74  79 70 65 0d 01 04 1d f4  |t file type.....|
00000460  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 63  |               c|
00000470  68 65 63 6b 69 6e 67 2e  0d 01 0e 32 f4 20 31 34  |hecking....2. 14|
00000480  2d 53 65 70 2d 31 39 39  37 20 20 20 47 65 6e 65  |-Sep-1997   Gene|
00000490  72 61 6c 20 69 6d 70 72  6f 76 65 6d 65 6e 74 73  |ral improvements|
000004a0  20 72 65 67 61 72 64 69  6e 67 0d 01 18 2c f4 20  | regarding...,. |
000004b0  20 20 20 20 20 20 20 20  20 20 20 20 20 20 64 72  |              dr|
000004c0  61 67 27 6e 27 64 72 6f  70 20 61 6e 64 20 74 6f  |ag'n'drop and to|
000004d0  6f 6c 74 69 70 2e 0d 01  22 29 f4 20 30 34 2d 4e  |oltip..."). 04-N|
000004e0  6f 76 2d 31 39 39 37 20  20 20 43 68 61 6e 67 65  |ov-1997   Change|
000004f0  64 20 69 63 6f 6e 20 62  61 72 20 69 63 6f 6e 0d  |d icon bar icon.|
00000500  01 2c 31 f4 20 30 35 2d  4e 6f 76 2d 31 39 39 37  |.,1. 05-Nov-1997|
00000510  20 20 20 41 64 64 65 64  20 74 68 65 20 7e 20 68  |   Added the ~ h|
00000520  69 73 74 6f 72 79 20 64  69 72 65 63 74 6f 72 79  |istory directory|
00000530  0d 01 36 31 f4 20 20 20  20 20 20 20 20 20 20 20  |..61.           |
00000540  20 20 20 20 74 6f 20 63  61 74 63 68 20 61 6c 6c  |    to catch all|
00000550  20 64 6f 75 62 6c 65 20  63 6c 69 63 6b 73 20 6f  | double clicks o|
00000560  6e 0d 01 40 1f f4 20 20  20 20 20 20 20 20 20 20  |n..@..          |
00000570  20 20 20 20 20 66 69 6c  65 20 69 63 6f 6e 73 2e  |     file icons.|
00000580  0d 01 4a 34 f4 20 20 20  20 20 20 20 20 20 20 20  |..J4.           |
00000590  20 20 20 20 41 6c 73 6f  20 61 64 64 65 64 20 61  |    Also added a|
000005a0  20 7e 7e 20 64 69 72 65  63 74 6f 72 79 2e 20 43  | ~~ directory. C|
000005b0  61 6e 27 74 0d 01 54 23  f4 20 20 20 20 20 20 20  |an't..T#.       |
000005c0  20 20 20 20 20 20 20 20  74 68 69 6e 6b 20 77 68  |        think wh|
000005d0  61 74 20 66 6f 72 2e 0d  01 5e 32 f4 20 20 20 20  |at for...^2.    |
000005e0  20 20 20 20 20 20 20 20  20 20 20 46 69 78 65 64  |           Fixed|
000005f0  20 74 68 65 20 45 4d 50  54 59 20 64 69 72 65 63  | the EMPTY direc|
00000600  74 6f 72 79 20 62 75 67  2e 0d 01 68 33 f4 20 20  |tory bug...h3.  |
00000610  20 20 20 20 20 20 20 20  20 20 20 20 20 43 68 61  |             Cha|
00000620  6e 67 65 64 20 61 63 74  69 6f 6e 20 6f 66 20 54  |nged action of T|
00000630  4f 4f 4c 5f 54 49 50 20  77 68 65 6e 0d 01 72 33  |OOL_TIP when..r3|
00000640  f4 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |.               |
00000650  70 6f 69 6e 74 65 72 20  6d 6f 76 65 64 20 6f 76  |pointer moved ov|
00000660  65 72 20 69 74 20 73 6f  20 6e 6f 77 20 69 74 0d  |er it so now it.|
00000670  01 7c 29 f4 20 20 20 20  20 20 20 20 20 20 20 20  |.|).            |
00000680  20 20 20 67 65 74 73 20  27 70 75 73 68 65 64 27  |   gets 'pushed'|
00000690  20 61 72 6f 75 6e 64 2e  0d 01 86 35 f4 20 30 36  | around....5. 06|
000006a0  2d 4e 6f 76 2d 31 39 39  37 20 20 20 43 68 61 6e  |-Nov-1997   Chan|
000006b0  67 65 64 20 68 6f 77 20  64 65 73 74 69 6e 61 74  |ged how destinat|
000006c0  69 6f 6e 20 64 69 72 65  63 74 6f 72 79 0d 01 90  |ion directory...|
000006d0  34 f4 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |4.              |
000006e0  20 69 73 20 73 65 6c 65  63 74 65 64 20 66 6f 72  | is selected for|
000006f0  20 41 44 44 4e 45 57 4c  49 4e 4b 2e 20 55 73 65  | ADDNEWLINK. Use|
00000700  72 0d 01 9a 35 f4 20 20  20 20 20 20 20 20 20 20  |r...5.          |
00000710  20 20 20 20 20 6e 6f 77  20 68 61 73 20 74 6f 20  |     now has to |
00000720  65 78 70 6c 69 63 69 74  6c 79 20 6d 6f 76 65 20  |explicitly move |
00000730  74 6f 20 74 68 65 0d 01  a4 22 f4 20 20 20 20 20  |to the...".     |
00000740  20 20 20 20 20 20 20 20  20 20 72 65 71 75 69 72  |          requir|
00000750  65 64 20 6d 65 6e 75 2e  0d 01 ae 32 f4 20 20 20  |ed menu....2.   |
00000760  20 20 20 20 20 20 20 20  20 20 20 20 43 72 65 61  |            Crea|
00000770  74 65 64 20 73 79 73 74  65 6d 20 64 69 72 65 63  |ted system direc|
00000780  74 6f 72 79 73 20 74 68  61 74 0d 01 b8 34 f4 20  |torys that...4. |
00000790  20 20 20 20 20 20 20 20  20 20 20 20 20 20 62 65  |              be|
000007a0  67 69 6e 20 77 69 74 68  20 61 20 7e 20 73 79 6d  |gin with a ~ sym|
000007b0  62 6f 6c 2e 20 54 68 65  73 65 20 61 72 65 0d 01  |bol. These are..|
000007c0  c2 31 f4 20 20 20 20 20  20 20 20 20 20 20 20 20  |.1.             |
000007d0  20 20 75 70 64 61 74 65  64 20 77 69 74 68 20 61  |  updated with a|
000007e0  20 68 69 73 74 6f 72 79  20 6f 66 20 74 68 65 0d  | history of the.|
000007f0  01 cc 28 f4 20 20 20 20  20 20 20 20 20 20 20 20  |..(.            |
00000800  20 20 20 64 65 73 6b 74  6f 70 20 66 69 6c 65 72  |   desktop filer|
00000810  20 75 73 61 67 65 2e 0d  01 d6 32 f4 20 30 37 2d  | usage....2. 07-|
00000820  4e 6f 76 2d 31 39 39 37  20 20 20 42 75 69 6c 74  |Nov-1997   Built|
00000830  20 74 68 65 20 41 6c 69  61 73 24 4c 69 6e 6b 20  | the Alias$Link |
00000840  72 75 6e 20 74 6f 6f 6c  2e 0d 01 e0 31 f4 20 20  |run tool....1.  |
00000850  20 20 20 20 20 20 20 20  20 20 20 20 20 46 69 78  |             Fix|
00000860  65 64 20 61 20 53 79 73  46 69 6c 65 50 72 65 66  |ed a SysFilePref|
00000870  69 78 20 72 65 6c 61 74  65 64 0d 01 ea 2b f4 20  |ix related...+. |
00000880  20 20 20 20 20 20 20 20  20 20 20 20 20 20 73 68  |              sh|
00000890  6f 72 74 63 75 74 6d 65  6e 75 73 65 6c 65 63 74  |ortcutmenuselect|
000008a0  20 62 75 67 2e 0d 01 f4  31 f4 20 20 20 20 20 20  | bug....1.      |
000008b0  20 20 20 20 20 20 20 20  20 41 64 64 65 64 20 69  |         Added i|
000008c0  63 6f 6e 20 62 61 72 20  74 6f 67 67 6c 65 20 66  |con bar toggle f|
000008d0  65 61 74 75 72 65 0d 01  fe 35 f4 20 20 20 20 20  |eature...5.     |
000008e0  20 20 20 20 20 20 20 20  20 20 77 68 65 6e 20 6d  |          when m|
000008f0  6f 75 73 65 20 68 69 74  73 20 62 6f 74 74 6f 6d  |ouse hits bottom|
00000900  20 6f 66 20 73 63 72 65  65 6e 2e 0d 02 08 31 f4  | of screen....1.|
00000910  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 41  |               A|
00000920  64 64 65 64 20 41 4c 54  2d 53 54 41 52 54 5f 4d  |dded ALT-START_M|
00000930  45 4e 55 20 63 6c 69 63  6b 20 74 6f 0d 02 12 33  |ENU click to...3|
00000940  f4 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |.               |
00000950  65 66 66 69 63 69 65 6e  74 6c 79 20 64 65 6c 65  |efficiently dele|
00000960  74 65 20 69 74 65 6d 73  20 69 6e 20 74 68 65 0d  |te items in the.|
00000970  02 1c 21 f4 20 20 20 20  20 20 20 20 20 20 20 20  |..!.            |
00000980  20 20 20 73 74 61 72 74  75 70 20 6d 65 6e 75 2e  |   startup menu.|
00000990  0d 02 26 34 f4 20 30 39  2d 4e 6f 76 2d 31 39 39  |..&4. 09-Nov-199|
000009a0  37 20 20 20 41 64 64 65  64 20 61 75 74 6f 20 63  |7   Added auto c|
000009b0  61 73 63 61 64 69 6e 67  20 66 6f 72 20 64 65 73  |ascading for des|
000009c0  6b 74 6f 70 0d 02 30 33  f4 20 20 20 20 20 20 20  |ktop..03.       |
000009d0  20 20 20 20 20 20 20 20  77 69 6e 64 6f 77 73 2e  |        windows.|
000009e0  20 53 6f 6d 65 20 77 69  6e 64 6f 77 73 20 61 72  | Some windows ar|
000009f0  65 20 6e 65 76 65 72 0d  02 3a 2d f4 20 20 20 20  |e never..:-.    |
00000a00  20 20 20 20 20 20 20 20  20 20 20 61 75 74 6f 20  |           auto |
00000a10  63 61 73 63 61 64 65 64  2e 20 54 68 65 73 65 20  |cascaded. These |
00000a20  61 72 65 3a 0d 02 44 29  f4 20 20 20 20 20 20 20  |are:..D).       |
00000a30  20 20 20 20 20 20 20 20  61 29 20 54 68 65 20 54  |        a) The T|
00000a40  6f 6f 6c 74 69 70 20 77  69 6e 64 6f 77 0d 02 4e  |ooltip window..N|
00000a50  2f f4 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |/.              |
00000a60  20 62 29 20 53 74 61 72  74 27 73 20 64 75 6d 6d  | b) Start's dumm|
00000a70  79 62 61 63 6b 20 77 69  6e 64 6f 77 0d 02 58 34  |yback window..X4|
00000a80  f4 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |.               |
00000a90  63 29 20 41 6e 79 20 77  69 6e 64 6f 77 20 74 6f  |c) Any window to|
00000aa0  67 67 6c 65 64 20 66 75  6c 6c 20 73 69 7a 65 2c  |ggled full size,|
00000ab0  0d 02 62 2c f4 20 20 20  20 20 20 20 20 20 20 20  |..b,.           |
00000ac0  20 20 20 20 20 20 20 74  68 61 74 20 68 61 73 20  |       that has |
00000ad0  69 6e 70 75 74 20 66 6f  63 75 73 2c 0d 02 6c 2e  |input focus,..l.|
00000ae0  f4 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |.               |
00000af0  20 20 20 61 6e 64 20 61  20 74 6f 67 67 6c 65 20  |   and a toggle |
00000b00  73 69 7a 65 20 69 63 6f  6e 2e 0d 02 76 33 f4 20  |size icon...v3. |
00000b10  30 39 2d 4e 6f 76 2d 31  39 39 37 20 20 20 41 64  |09-Nov-1997   Ad|
00000b20  64 65 64 20 61 6e 69 6d  61 74 65 64 20 69 63 6f  |ded animated ico|
00000b30  6e 62 61 72 20 69 63 6f  6e 20 61 6e 64 0d 02 80  |nbar icon and...|
00000b40  2a f4 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |*.              |
00000b50  20 61 6c 74 65 72 6e 61  74 69 76 65 20 74 6f 6f  | alternative too|
00000b60  6c 20 74 69 70 73 2e 0d  02 8a 30 f4 20 31 31 2d  |l tips....0. 11-|
00000b70  4e 6f 76 2d 31 39 39 37  20 20 20 41 64 64 65 64  |Nov-1997   Added|
00000b80  20 73 65 6c 65 63 74 69  76 65 20 63 61 73 63 61  | selective casca|
00000b90  64 69 6e 67 20 6f 66 0d  02 94 33 f4 20 20 20 20  |ding of...3.    |
00000ba0  20 20 20 20 20 20 20 20  20 20 20 77 69 6e 64 6f  |           windo|
00000bb0  77 73 20 74 6f 20 72 65  64 75 63 65 20 64 69 66  |ws to reduce dif|
00000bc0  66 69 63 75 6c 74 79 20  69 6e 0d 02 9e 30 f4 20  |ficulty in...0. |
00000bd0  20 20 20 20 20 20 20 20  20 20 20 20 20 20 75 73  |              us|
00000be0  69 6e 67 20 6d 65 6e 75  73 2e 20 43 68 61 6e 67  |ing menus. Chang|
00000bf0  65 64 20 49 63 6f 6e 62  61 72 0d 02 a8 32 f4 20  |ed Iconbar...2. |
00000c00  20 20 20 20 20 20 20 20  20 20 20 20 20 20 62 75  |              bu|
00000c10  74 74 6f 6e 20 75 73 61  67 65 20 61 6e 64 20 27  |tton usage and '|
00000c20  61 6c 74 65 72 6e 61 74  69 76 65 27 0d 02 b2 1e  |alternative'....|
00000c30  f4 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |.               |
00000c40  74 6f 6f 6c 20 74 69 70  73 2e 0d 02 bc 35 f4 20  |tool tips....5. |
00000c50  31 39 2d 4e 6f 76 2d 31  39 39 37 20 20 20 41 64  |19-Nov-1997   Ad|
00000c60  64 65 64 20 73 65 6e 73  69 62 6c 65 20 74 61 73  |ded sensible tas|
00000c70  6b 20 62 61 72 20 74 6f  6f 6c 20 74 69 70 2e 0d  |k bar tool tip..|
00000c80  02 c6 2e f4 20 20 20 20  20 20 20 20 20 20 20 20  |....            |
00000c90  20 20 20 49 6e 63 6c 75  64 65 64 20 41 70 70 50  |   Included AppP|
00000ca0  61 74 68 24 20 74 6f 20  67 75 61 72 64 0d 02 d0  |ath$ to guard...|
00000cb0  33 f4 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |3.              |
00000cc0  20 61 67 61 69 6e 73 74  20 74 68 65 20 3c 53 74  | against the <St|
00000cd0  61 72 74 24 44 69 72 3e  20 67 65 74 74 69 6e 67  |art$Dir> getting|
00000ce0  0d 02 da 1e f4 20 20 20  20 20 20 20 20 20 20 20  |.....           |
00000cf0  20 20 20 20 63 6f 72 72  75 70 74 65 64 2e 0d 02  |    corrupted...|
00000d00  e4 2d f4 20 20 20 20 20  20 20 20 20 20 20 20 20  |.-.             |
00000d10  20 20 41 64 64 65 64 20  65 78 74 72 61 20 63 68  |  Added extra ch|
00000d20  65 63 6b 73 20 62 65 66  6f 72 65 0d 02 ee 30 f4  |ecks before...0.|
00000d30  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 64  |               d|
00000d40  65 6c 65 74 65 69 6e 67  20 61 75 74 6f 2d 63 72  |eleteing auto-cr|
00000d50  65 61 74 65 20 6c 69 6e  6b 73 2e 0d 02 f8 30 f4  |eate links....0.|
00000d60  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 41  |               A|
00000d70  75 74 6f 20 65 6e 73 75  72 65 20 7e 20 64 69 72  |uto ensure ~ dir|
00000d80  65 63 74 6f 72 79 73 20  61 72 65 0d 03 02 33 f4  |ectorys are...3.|
00000d90  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 74  |               t|
00000da0  68 65 72 65 20 77 68 65  6e 65 76 65 72 20 74 68  |here whenever th|
00000db0  65 79 20 61 72 65 20 6e  65 65 64 65 64 2e 0d 03  |ey are needed...|
00000dc0  0c 31 f4 20 32 31 2d 4e  6f 76 2d 31 39 39 37 20  |.1. 21-Nov-1997 |
00000dd0  20 20 44 69 73 61 62 6c  65 64 20 77 69 6e 64 6f  |  Disabled windo|
00000de0  77 20 72 65 70 6f 73 69  74 69 6f 6e 69 6e 67 0d  |w repositioning.|
00000df0  03 16 31 f4 20 20 20 20  20 20 20 20 20 20 20 20  |..1.            |
00000e00  20 20 20 77 68 65 6e 20  61 20 6d 65 6e 75 20 69  |   when a menu i|
00000e10  73 20 64 69 73 70 6c 61  79 65 64 20 77 69 74 68  |s displayed with|
00000e20  0d 03 20 24 f4 20 20 20  20 20 20 20 20 20 20 20  |.. $.           |
00000e30  20 20 20 20 4d 65 6e 75  49 73 4f 70 65 6e 46 6c  |    MenuIsOpenFl|
00000e40  61 67 25 2e 0d 03 2a 30  f4 20 32 31 2d 4e 6f 76  |ag%...*0. 21-Nov|
00000e50  2d 31 39 39 37 20 20 20  41 64 64 65 64 20 77 69  |-1997   Added wi|
00000e60  6e 64 6f 77 20 64 72 69  66 74 69 6e 67 2e 20 41  |ndow drifting. A|
00000e70  64 64 65 64 0d 03 34 33  f4 20 20 20 20 20 20 20  |dded..43.       |
00000e80  20 20 20 20 20 20 20 20  64 72 61 67 61 62 6c 65  |        dragable|
00000e90  20 79 65 73 2f 6e 6f 20  69 63 6f 6e 73 20 74 6f  | yes/no icons to|
00000ea0  20 77 69 6e 64 6f 77 0d  03 3e 25 f4 20 20 20 20  | window..>%.    |
00000eb0  20 20 20 20 20 20 20 20  20 20 20 63 61 63 68 65  |           cache|
00000ec0  20 6d 61 6e 61 67 65 6d  65 6e 74 2e 0d 03 48 2c  | management...H,|
00000ed0  f4 20 32 32 2d 4e 6f 76  2d 31 39 39 37 20 20 20  |. 22-Nov-1997   |
00000ee0  45 6e 73 75 72 65 64 20  61 6c 6c 20 77 69 6e 64  |Ensured all wind|
00000ef0  6f 77 73 20 77 65 72 65  0d 03 52 34 f4 20 20 20  |ows were..R4.   |
00000f00  20 20 20 20 20 20 20 20  20 20 20 20 70 72 6f 70  |            prop|
00000f10  65 72 6c 79 20 63 61 73  63 61 64 65 64 2c 20 65  |erly cascaded, e|
00000f20  76 65 6e 20 69 66 20 73  74 69 6c 6c 0d 03 5c 30  |ven if still..\0|
00000f30  f4 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |.               |
00000f40  77 61 69 74 69 6e 67 20  66 6f 72 20 61 20 73 74  |waiting for a st|
00000f50  61 74 65 20 74 6f 20 6f  63 63 75 72 0d 03 66 30  |ate to occur..f0|
00000f60  f4 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |.               |
00000f70  77 68 65 6e 20 74 68 65  79 20 77 65 72 65 20 61  |when they were a|
00000f80  6c 6c 6f 77 65 64 20 74  6f 20 62 65 0d 03 70 1a  |llowed to be..p.|
00000f90  f4 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |.               |
00000fa0  6d 6f 76 65 64 2e 0d 03  7a 32 f4 20 32 32 2d 46  |moved...z2. 22-F|
00000fb0  65 62 2d 31 39 39 38 20  20 20 43 68 61 6e 67 65  |eb-1998   Change|
00000fc0  64 20 6e 61 6d 65 20 6f  66 20 61 70 70 6c 69 63  |d name of applic|
00000fd0  61 74 69 6f 6e 20 74 6f  0d 03 84 30 f4 20 20 20  |ation to...0.   |
00000fe0  20 20 20 20 20 20 20 20  20 20 20 20 58 75 65 6e  |            Xuen|
00000ff0  2c 20 61 6e 64 20 73 79  73 74 65 6d 20 76 61 72  |, and system var|
00001000  69 61 62 6c 65 20 74 6f  0d 03 8e 34 f4 20 20 20  |iable to...4.   |
00001010  20 20 20 20 20 20 20 20  20 20 20 20 3c 58 75 65  |            <Xue|
00001020  6e 62 73 24 44 69 72 3e  20 74 6f 20 72 65 66 6c  |nbs$Dir> to refl|
00001030  65 63 74 20 69 6e 69 74  69 61 6c 73 0d 03 98 31  |ect initials...1|
00001040  f4 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |.               |
00001050  6f 66 20 70 72 6f 67 72  61 6d 6d 65 72 2e 20 41  |of programmer. A|
00001060  20 6d 69 6c 6c 65 6e 69  75 6d 20 6f 66 0d 03 a2  | millenium of...|
00001070  30 f4 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |0.              |
00001080  20 64 69 72 65 20 73 61  74 61 6e 69 63 20 63 6f  | dire satanic co|
00001090  6e 73 65 71 75 65 6e 63  65 73 20 74 6f 0d 03 ac  |nsequences to...|
000010a0  35 f4 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |5.              |
000010b0  20 61 6e 79 6f 6e 65 20  77 68 6f 20 63 68 61 6e  | anyone who chan|
000010c0  67 65 73 20 74 68 69 73  20 76 61 72 69 61 62 6c  |ges this variabl|
000010d0  65 2e 0d 03 b6 30 f4 20  30 38 2d 4d 61 72 2d 31  |e....0. 08-Mar-1|
000010e0  39 39 38 20 20 20 41 64  64 65 64 20 34 73 20 64  |998   Added 4s d|
000010f0  65 6c 61 79 20 74 6f 20  77 72 69 74 69 6e 67 20  |elay to writing |
00001100  6f 66 0d 03 c0 32 f4 20  20 20 20 20 20 20 20 20  |of...2.         |
00001110  20 20 20 20 20 20 64 65  73 6b 74 6f 70 20 66 69  |      desktop fi|
00001120  6c 65 72 20 67 72 61 62  62 65 64 20 6c 69 6e 6b  |ler grabbed link|
00001130  73 20 74 6f 0d 03 ca 34  f4 20 20 20 20 20 20 20  |s to...4.       |
00001140  20 20 20 20 20 20 20 20  64 69 73 6b 2e 20 46 6f  |        disk. Fo|
00001150  72 63 65 64 20 6e 65 77  20 66 6f 6c 64 65 72 20  |rced new folder |
00001160  6c 69 6e 6b 73 20 74 6f  0d 03 d4 32 f4 20 20 20  |links to...2.   |
00001170  20 20 20 20 20 20 20 20  20 20 20 20 6f 76 65 72  |            over|
00001180  77 72 69 74 65 20 6f 6c  64 20 6f 6e 65 73 20 69  |write old ones i|
00001190  66 20 73 74 69 6c 6c 20  69 6e 0d 03 de 30 f4 20  |f still in...0. |
000011a0  20 20 20 20 20 20 20 20  20 20 20 20 20 20 63 61  |              ca|
000011b0  63 68 65 2e 20 46 6f 72  63 65 64 20 6c 69 6e 6b  |che. Forced link|
000011c0  73 20 73 74 69 6c 6c 20  69 6e 0d 03 e8 2f f4 20  |s still in.../. |
000011d0  20 20 20 20 20 20 20 20  20 20 20 20 20 20 63 61  |              ca|
000011e0  63 68 65 20 74 6f 20 62  65 20 77 72 69 74 74 65  |che to be writte|
000011f0  6e 20 74 6f 20 64 69 73  63 0d 03 f2 33 f4 20 20  |n to disc...3.  |
00001200  20 20 20 20 20 20 20 20  20 20 20 20 20 66 6f 72  |             for|
00001210  63 65 66 75 6c 6c 79 20  69 66 20 61 20 6e 65 77  |cefully if a new|
00001220  20 63 61 63 68 65 20 65  6e 74 72 79 0d 03 fc 32  | cache entry...2|
00001230  f4 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |.               |
00001240  61 70 70 65 61 72 73 20  28 65 78 63 65 70 74 20  |appears (except |
00001250  66 6f 6c 64 65 72 20 6c  69 6e 6b 73 29 2e 0d 03  |folder links)...|
00001260  fd 2c f4 20 30 38 2d 4d  61 72 2d 31 39 39 38 20  |.,. 08-Mar-1998 |
00001270  20 20 43 68 61 6e 67 65  64 20 74 6f 6f 6c 20 74  |  Changed tool t|
00001280  69 70 73 20 61 67 61 69  6e 2e 0d 04 06 35 f4 20  |ips again....5. |
00001290  2a 2a 2a 2a 2a 2a 2a 2a  2a 2a 2a 2a 2a 2a 2a 2a  |****************|
*
000012b0  2a 2a 2a 2a 2a 2a 2a 2a  2a 2a 2a 2a 2a 2a 2a 0d  |***************.|
000012c0  04 10 0b f4 20 4e 6f 74  65 3a 0d 04 1a 33 f4 20  |.... Note:...3. |
000012d0  20 20 20 57 68 65 6e 20  72 75 6e 6e 69 6e 67 20  |   When running |
000012e0  74 68 69 73 20 70 72 6f  67 72 61 6d 2c 20 69 74  |this program, it|
000012f0  20 69 73 20 69 6d 70 6f  72 74 61 6e 74 0d 04 24  | is important..$|
00001300  32 f4 20 20 20 20 74 6f  20 65 6e 73 75 72 65 20  |2.    to ensure |
00001310  74 68 61 74 20 74 68 65  20 63 6f 72 72 65 73 70  |that the corresp|
00001320  6f 6e 64 69 6e 67 20 21  42 6f 6f 74 20 6f 72 0d  |onding !Boot or.|
00001330  04 2e 32 f4 20 20 20 20  21 72 75 6e 20 66 69 6c  |..2.    !run fil|
00001340  65 20 69 73 20 72 75 6e  20 61 74 20 74 68 65 20  |e is run at the |
00001350  73 61 6d 65 20 74 69 6d  65 20 62 65 63 61 75 73  |same time becaus|
00001360  65 0d 04 38 2f f4 20 20  20 20 74 68 65 79 20 65  |e..8/.    they e|
00001370  6e 73 75 72 65 20 74 68  65 20 73 79 73 74 65 6d  |nsure the system|
00001380  20 76 61 72 69 61 62 6c  65 20 69 73 20 73 65 74  | variable is set|
00001390  0d 04 42 35 f4 20 20 20  20 63 6f 72 72 65 63 74  |..B5.    correct|
000013a0  6c 79 2e 20 69 65 2e 20  55 73 65 20 74 68 65 20  |ly. ie. Use the |
000013b0  21 52 75 6e 20 66 69 6c  65 20 74 6f 20 72 75 6e  |!Run file to run|
000013c0  20 74 68 69 73 0d 04 4c  0e f4 20 20 20 20 66 69  | this..L..    fi|
000013d0  6c 65 2e 0d 04 56 35 f4  20 2a 2a 2a 2a 2a 2a 2a  |le...V5. *******|
000013e0  2a 2a 2a 2a 2a 2a 2a 2a  2a 2a 2a 2a 2a 2a 2a 2a  |****************|
*
00001400  2a 2a 2a 2a 2a 2a 2a 2a  0d 04 60 04 0d 04 6a 20  |********..`...j |
00001410  50 69 63 74 75 72 65 54  79 70 65 25 3d 26 64 39  |PictureType%=&d9|
00001420  34 3a f4 20 41 72 74 77  6f 72 6b 73 0d 04 74 2c  |4:. Artworks..t,|
00001430  44 6f 63 75 6d 65 6e 74  54 79 70 65 25 3d 26 62  |DocumentType%=&b|
00001440  63 35 3a f4 20 49 6d 70  72 65 73 73 69 6f 6e 20  |c5:. Impression |
00001450  44 6f 63 75 6d 65 6e 74  0d 04 7e 26 55 73 65 72  |Document..~&User|
00001460  24 3d 22 41 64 6d 69 6e  22 3a f4 20 55 73 65 72  |$="Admin":. User|
00001470  20 6e 61 6d 65 20 69 73  20 41 64 6d 69 6e 0d 04  | name is Admin..|
00001480  88 04 0d 04 92 0f 61 70  70 24 3d 22 58 75 65 6e  |......app$="Xuen|
00001490  22 0d 04 9c 0f 41 70 70  50 61 74 68 24 3d 22 22  |"....AppPath$=""|
000014a0  0d 04 a6 0f 41 70 70 44  61 74 65 24 3d 22 22 0d  |....AppDate$="".|
000014b0  04 b0 2f de 20 61 70 70  70 61 74 68 20 32 35 35  |../. apppath 255|
000014c0  2c 20 61 70 70 70 61 74  68 76 61 72 20 33 32 2c  |, apppathvar 32,|
000014d0  20 61 70 70 64 61 74 65  76 61 72 20 33 32 0d 04  | appdatevar 32..|
000014e0  ba 2a 24 61 70 70 64 61  74 65 76 61 72 3d 22 3c  |.*$appdatevar="<|
000014f0  53 79 73 24 54 69 6d 65  3e 20 3c 53 79 73 24 44  |Sys$Time> <Sys$D|
00001500  61 74 65 3e 22 2b bd 30  0d 04 c4 21 24 61 70 70  |ate>"+.0...!$app|
00001510  70 61 74 68 76 61 72 3d  22 3c 58 75 65 6e 62 73  |pathvar="<Xuenbs|
00001520  24 44 69 72 3e 22 2b bd  30 0d 04 ce 04 0d 04 d8  |$Dir>"+.0.......|
00001530  38 f4 20 41 71 75 69 72  65 20 74 68 65 20 73 74  |8. Aquire the st|
00001540  61 72 74 20 70 61 74 68  20 74 6f 20 75 73 65 20  |art path to use |
00001550  66 6f 72 20 64 65 6c 65  74 65 20 6f 70 65 72 61  |for delete opera|
00001560  74 69 6f 6e 73 0d 04 e2  29 c8 99 22 4f 53 5f 47  |tions...).."OS_G|
00001570  53 54 72 61 6e 73 22 2c  61 70 70 70 61 74 68 76  |STrans",apppathv|
00001580  61 72 2c 61 70 70 70 61  74 68 2c 32 35 35 0d 04  |ar,apppath,255..|
00001590  ec 1d 41 70 70 50 61 74  68 24 3d a4 73 74 72 69  |..AppPath$=.stri|
000015a0  6e 67 28 61 70 70 70 61  74 68 29 0d 04 f6 04 0d  |ng(apppath).....|
000015b0  05 00 40 de 20 65 72 72  6f 72 62 6c 6f 63 6b 25  |..@. errorblock%|
000015c0  20 32 30 34 38 2c 20 62  6c 6f 63 6b 25 20 32 30  | 2048, block% 20|
000015d0  34 38 2c 20 62 6c 6f 63  6b 32 25 20 32 30 34 38  |48, block2% 2048|
000015e0  2c 20 63 6c 69 73 74 72  69 6e 67 20 32 35 35 0d  |, clistring 255.|
000015f0  05 0a 14 de 20 77 69 6e  62 6c 6f 63 6b 25 20 32  |.... winblock% 2|
00001600  30 34 38 0d 05 14 04 0d  05 1e 18 de 20 49 6e 76  |048......... Inv|
00001610  61 6c 69 64 44 72 69 76  65 24 28 32 35 35 29 0d  |alidDrive$(255).|
00001620  05 28 18 49 6e 76 61 6c  69 64 44 72 69 76 65 43  |.(.InvalidDriveC|
00001630  6f 75 6e 74 25 3d 30 0d  05 32 04 0d 05 3c 2c de  |ount%=0..2...<,.|
00001640  20 64 72 61 67 73 70 72  69 74 65 6e 61 6d 65 25  | dragspritename%|
00001650  20 33 32 2c 20 62 6f 75  6e 64 73 70 72 69 74 65  | 32, boundsprite|
00001660  62 6f 78 25 20 33 32 0d  05 46 04 0d 05 50 27 ee  |box% 32..F...P'.|
00001670  20 85 20 f2 65 72 72 6f  72 28 f6 24 2b 22 20 61  | . .error(.$+" a|
00001680  74 20 6c 69 6e 65 20 22  2b c3 9e 29 3a d9 23 30  |t line "+..):.#0|
00001690  3a e0 0d 05 5a 04 0d 05  64 20 f4 20 41 75 74 6f  |:...Z...d . Auto|
000016a0  20 6c 69 6e 6b 20 62 75  66 66 65 72 20 61 64 64  | link buffer add|
000016b0  20 73 74 75 66 66 0d 05  6e 1b 61 6c 62 61 5f 64  | stuff..n.alba_d|
000016c0  65 73 74 69 6e 61 74 69  6f 6e 64 69 72 24 3d 22  |estinationdir$="|
000016d0  22 0d 05 78 2d 61 6c 62  61 5f 74 79 70 65 25 3d  |"..x-alba_type%=|
000016e0  2d 31 3a f4 20 2d 31 20  6d 65 61 6e 73 20 6e 6f  |-1:. -1 means no|
000016f0  74 68 69 6e 67 20 69 6e  20 63 61 63 68 65 0d 05  |thing in cache..|
00001700  82 18 61 6c 62 61 5f 6e  65 77 6c 69 6e 6b 66 69  |..alba_newlinkfi|
00001710  6c 65 24 3d 22 22 0d 05  8c 18 61 6c 62 61 5f 6e  |le$=""....alba_n|
00001720  65 77 6c 69 6e 6b 6c 65  61 66 24 3d 22 22 0d 05  |ewlinkleaf$=""..|
00001730  96 10 61 6c 62 61 5f 74  69 6d 65 25 3d 30 0d 05  |..alba_time%=0..|
00001740  a0 04 0d 05 aa 16 43 41  43 48 45 5f 53 49 5a 45  |......CACHE_SIZE|
00001750  25 20 3d 20 34 30 39 36  0d 05 b4 10 70 61 75 73  |% = 4096....paus|
00001760  65 25 20 3d 20 32 30 30  0d 05 be 10 6f 70 65 6e  |e% = 200....open|
00001770  5f 74 79 70 65 25 3d 31  0d 05 c8 11 63 6c 6f 73  |_type%=1....clos|
00001780  65 5f 74 79 70 65 25 3d  32 0d 05 d2 11 61 64 64  |e_type%=2....add|
00001790  5f 77 69 6e 64 6f 77 25  3d 31 0d 05 dc 16 73 75  |_window%=1....su|
000017a0  62 74 72 61 63 74 5f 77  69 6e 64 6f 77 25 3d 32  |btract_window%=2|
000017b0  0d 05 e6 10 64 72 61 67  5f 74 79 70 65 25 3d 35  |....drag_type%=5|
000017c0  0d 05 f0 0d 61 64 6a 75  73 74 25 3d 31 0d 05 fa  |....adjust%=1...|
000017d0  0b 6d 65 6e 75 25 3d 32  0d 06 04 0d 73 65 6c 65  |.menu%=2....sele|
000017e0  63 74 25 3d 34 0d 06 0e  14 69 63 6f 6e 62 61 72  |ct%=4....iconbar|
000017f0  68 61 6e 64 6c 65 25 3d  30 0d 06 18 0f 64 69 72  |handle%=0....dir|
00001800  63 6f 75 6e 74 25 3d 30  0d 06 22 13 6c 69 6e 6b  |count%=0..".link|
00001810  6c 6f 61 64 61 64 64 72  25 3d 30 0d 06 2c 11 6f  |loadaddr%=0..,.o|
00001820  62 6a 65 63 74 74 79 70  65 25 3d 30 0d 06 36 0f  |bjecttype%=0..6.|
00001830  6c 69 6e 6b 6d 65 6e 75  25 3d 30 0d 06 40 0e 61  |linkmenu%=0..@.a|
00001840  64 64 6c 69 6e 6b 25 3d  30 0d 06 4a 29 69 63 6f  |ddlink%=0..J)ico|
00001850  6e 62 61 72 5f 74 69 6d  65 72 25 3d 91 3a 69 63  |nbar_timer%=.:ic|
00001860  6f 6e 62 61 72 5f 74 69  6d 65 72 66 6c 61 67 25  |onbar_timerflag%|
00001870  3d 30 0d 06 54 32 77 68  61 6e 64 6c 65 5f 74 6f  |=0..T2whandle_to|
00001880  6f 6c 74 69 70 25 3d 30  3a 54 6f 6f 6c 54 69 70  |oltip%=0:ToolTip|
00001890  25 3d 30 3a 74 6f 6f 6c  74 69 70 5f 74 69 6d 65  |%=0:tooltip_time|
000018a0  72 25 3d 30 0d 06 5e 25  6f 76 65 72 72 69 64 65  |r%=0..^%override|
000018b0  5f 74 6f 6f 6c 74 69 70  25 3d 30 3a 4f 6c 64 54  |_tooltip%=0:OldT|
000018c0  6f 6f 6c 54 69 70 25 3d  30 0d 06 68 1d 69 6e 74  |oolTip%=0..h.int|
000018d0  65 72 6e 61 6c 73 74 61  63 6b 70 6f 73 69 74 69  |ernalstackpositi|
000018e0  6f 6e 25 3d 2d 32 0d 06  72 17 6f 6c 64 73 74 61  |on%=-2..r.oldsta|
000018f0  63 6b 70 6f 73 69 74 69  6f 6e 25 3d 30 0d 06 7c  |ckposition%=0..||
00001900  14 63 75 72 72 65 6e 74  77 69 6e 64 6f 77 25 3d  |.currentwindow%=|
00001910  30 0d 06 86 18 63 75 72  72 65 6e 74 6d 65 6e 75  |0....currentmenu|
00001920  68 61 6e 64 6c 65 25 3d  30 0d 06 90 17 66 69 72  |handle%=0....fir|
00001930  73 74 6d 65 6e 75 68 61  6e 64 6c 65 25 3d 2d 33  |stmenuhandle%=-3|
00001940  0d 06 9a 16 49 63 6f 6e  42 61 72 4d 65 6e 75 4f  |....IconBarMenuO|
00001950  70 65 6e 25 3d 30 0d 06  a4 1a 53 74 61 72 74 4d  |pen%=0....StartM|
00001960  65 6e 75 53 65 70 65 72  61 74 6f 72 25 3d 2d 31  |enuSeperator%=-1|
00001970  0d 06 ae 16 53 79 73 46  69 6c 65 50 72 65 66 69  |....SysFilePrefi|
00001980  78 25 3d 31 32 36 0d 06  b8 14 42 6f 74 74 6f 6d  |x%=126....Bottom|
00001990  45 64 67 65 46 6c 61 67  3d 30 0d 06 c2 17 61 66  |EdgeFlag=0....af|
000019a0  74 65 72 25 3d 30 3a 63  61 73 63 61 64 65 25 3d  |ter%=0:cascade%=|
000019b0  30 0d 06 cc 18 77 68 61  6e 64 6c 65 5f 64 75 6d  |0....whandle_dum|
000019c0  6d 79 62 61 63 6b 25 3d  30 0d 06 d6 14 4c 61 73  |myback%=0....Las|
000019d0  74 52 69 67 68 74 45 64  67 65 25 3d 30 0d 06 e0  |tRightEdge%=0...|
000019e0  11 43 61 73 63 61 64 65  52 6f 77 25 3d 30 0d 06  |.CascadeRow%=0..|
000019f0  ea 12 52 61 6e 64 54 69  70 4d 61 78 25 3d 31 33  |..RandTipMax%=13|
00001a00  0d 06 f4 1b de 20 52 61  6e 64 54 69 70 24 28 52  |..... RandTip$(R|
00001a10  61 6e 64 54 69 70 4d 61  78 25 29 0d 07 08 15 52  |andTipMax%)....R|
00001a20  61 6e 64 54 69 70 24 28  31 29 3d 22 4c 53 44 22  |andTip$(1)="LSD"|
00001a30  0d 07 12 17 52 61 6e 64  54 69 70 24 28 32 29 3d  |....RandTip$(2)=|
00001a40  22 4f 70 69 75 6d 22 0d  07 1c 21 52 61 6e 64 54  |"Opium"...!RandT|
00001a50  69 70 24 28 33 29 3d 22  4d 61 67 69 63 20 4d 75  |ip$(3)="Magic Mu|
00001a60  73 68 72 6f 6f 6d 73 22  0d 07 26 1b 52 61 6e 64  |shrooms"..&.Rand|
00001a70  54 69 70 24 28 34 29 3d  22 4d 65 73 63 61 6c 69  |Tip$(4)="Mescali|
00001a80  6e 65 22 0d 07 30 18 52  61 6e 64 54 69 70 24 28  |ne"..0.RandTip$(|
00001a90  35 29 3d 22 50 65 79 6f  74 65 22 0d 07 3a 27 52  |5)="Peyote"..:'R|
00001aa0  61 6e 64 54 69 70 24 28  36 29 3d 22 4c 6f 70 68  |andTip$(6)="Loph|
00001ab0  6f 70 68 6f 72 61 20 57  69 6c 6c 69 61 6d 73 69  |ophora Williamsi|
00001ac0  69 22 0d 07 44 17 52 61  6e 64 54 69 70 24 28 37  |i"..D.RandTip$(7|
00001ad0  29 3d 22 54 72 69 70 73  22 0d 07 4e 16 52 61 6e  |)="Trips"..N.Ran|
00001ae0  64 54 69 70 24 28 38 29  3d 22 41 63 69 64 22 0d  |dTip$(8)="Acid".|
00001af0  07 58 17 52 61 6e 64 54  69 70 24 28 39 29 3d 22  |.X.RandTip$(9)="|
00001b00  53 70 65 65 64 22 0d 07  62 25 52 61 6e 64 54 69  |Speed"..b%RandTi|
00001b10  70 24 28 31 30 29 3d 22  4d 69 6e 64 20 42 65 6e  |p$(10)="Mind Ben|
00001b20  64 69 6e 67 20 44 72 75  67 73 22 0d 07 6c 1f 52  |ding Drugs"..l.R|
00001b30  61 6e 64 54 69 70 24 28  31 31 29 3d 22 50 73 79  |andTip$(11)="Psy|
00001b40  63 68 65 64 65 6c 69 63  73 22 0d 07 76 16 52 61  |chedelics"..v.Ra|
00001b50  6e 64 54 69 70 24 28 31  32 29 3d 22 46 75 6e 22  |ndTip$(12)="Fun"|
00001b60  0d 07 77 1b 52 61 6e 64  54 69 70 24 28 31 33 29  |..w.RandTip$(13)|
00001b70  3d 22 43 61 6e 6e 61 62  69 73 22 0d 07 80 04 0d  |="Cannabis".....|
00001b80  07 8a 17 49 63 6f 6e 42  61 72 41 6e 69 6d 53 69  |...IconBarAnimSi|
00001b90  7a 65 25 3d 31 31 0d 07  94 24 de 20 49 63 6f 6e  |ze%=11...$. Icon|
00001ba0  42 61 72 41 6e 69 6d 24  28 49 63 6f 6e 42 61 72  |BarAnim$(IconBar|
00001bb0  41 6e 69 6d 53 69 7a 65  25 29 0d 07 9e 1c 49 63  |AnimSize%)....Ic|
00001bc0  6f 6e 42 61 72 41 6e 69  6d 24 28 30 29 3d 22 53  |onBarAnim$(0)="S|
00001bd0  78 75 65 6e 30 22 0d 07  a8 1c 49 63 6f 6e 42 61  |xuen0"....IconBa|
00001be0  72 41 6e 69 6d 24 28 31  29 3d 22 53 78 75 65 6e  |rAnim$(1)="Sxuen|
00001bf0  31 22 0d 07 b2 1c 49 63  6f 6e 42 61 72 41 6e 69  |1"....IconBarAni|
00001c00  6d 24 28 32 29 3d 22 53  78 75 65 6e 32 22 0d 07  |m$(2)="Sxuen2"..|
00001c10  bc 1c 49 63 6f 6e 42 61  72 41 6e 69 6d 24 28 33  |..IconBarAnim$(3|
00001c20  29 3d 22 53 78 75 65 6e  33 22 0d 07 c6 1c 49 63  |)="Sxuen3"....Ic|
00001c30  6f 6e 42 61 72 41 6e 69  6d 24 28 34 29 3d 22 53  |onBarAnim$(4)="S|
00001c40  78 75 65 6e 34 22 0d 07  d0 1c 49 63 6f 6e 42 61  |xuen4"....IconBa|
00001c50  72 41 6e 69 6d 24 28 35  29 3d 22 53 78 75 65 6e  |rAnim$(5)="Sxuen|
00001c60  35 22 0d 07 da 1c 49 63  6f 6e 42 61 72 41 6e 69  |5"....IconBarAni|
00001c70  6d 24 28 36 29 3d 22 53  78 75 65 6e 36 22 0d 07  |m$(6)="Sxuen6"..|
00001c80  e4 1c 49 63 6f 6e 42 61  72 41 6e 69 6d 24 28 37  |..IconBarAnim$(7|
00001c90  29 3d 22 53 78 75 65 6e  37 22 0d 07 ee 1c 49 63  |)="Sxuen7"....Ic|
00001ca0  6f 6e 42 61 72 41 6e 69  6d 24 28 38 29 3d 22 53  |onBarAnim$(8)="S|
00001cb0  78 75 65 6e 38 22 0d 07  f8 1c 49 63 6f 6e 42 61  |xuen8"....IconBa|
00001cc0  72 41 6e 69 6d 24 28 39  29 3d 22 53 78 75 65 6e  |rAnim$(9)="Sxuen|
00001cd0  39 22 0d 08 02 1e 49 63  6f 6e 42 61 72 41 6e 69  |9"....IconBarAni|
00001ce0  6d 24 28 31 30 29 3d 22  53 78 75 65 6e 31 30 22  |m$(10)="Sxuen10"|
00001cf0  0d 08 0c 15 49 63 6f 6e  42 61 72 41 6e 69 6d 53  |....IconBarAnimS|
00001d00  74 65 70 3d 30 0d 08 16  16 49 63 6f 6e 42 61 72  |tep=0....IconBar|
00001d10  41 6e 69 6d 44 69 72 3d  30 2e 35 0d 08 20 04 0d  |AnimDir=0.5.. ..|
00001d20  08 2a 04 0d 08 34 15 4d  65 6e 75 49 73 4f 70 65  |.*...4.MenuIsOpe|
00001d30  6e 46 6c 61 67 25 3d 30  0d 08 3e 1b 52 65 6f 72  |nFlag%=0..>.Reor|
00001d40  67 61 6e 69 73 65 57 69  6e 64 6f 77 53 74 61 63  |ganiseWindowStac|
00001d50  6b 3d 30 0d 08 48 04 0d  08 52 51 de 20 64 62 6c  |k=0..H...RQ. dbl|
00001d60  6f 63 6b 25 20 31 30 32  34 2c 20 62 6f 6f 74 62  |ock% 1024, bootb|
00001d70  6c 6f 63 6b 25 20 31 30  32 34 2c 20 73 68 6f 72  |lock% 1024, shor|
00001d80  74 63 75 74 6d 65 6e 75  25 20 31 30 31 39 32 2c  |tcutmenu% 10192,|
00001d90  20 73 68 6f 72 74 63 75  74 6d 65 6e 75 64 61 74  | shortcutmenudat|
00001da0  61 25 20 32 30 33 38 34  0d 08 5c 45 de 20 6d 61  |a% 20384..\E. ma|
00001db0  69 6e 5f 6d 65 6e 75 25  20 32 35 36 2c 20 74 79  |in_menu% 256, ty|
00001dc0  70 65 62 75 66 25 20 32  35 36 2c 20 69 63 6f 6e  |pebuf% 256, icon|
00001dd0  62 61 72 6c 61 62 65 6c  25 20 33 32 2c 20 69 63  |barlabel% 32, ic|
00001de0  6f 6e 62 61 72 64 61 74  61 25 20 33 32 0d 08 66  |onbardata% 32..f|
00001df0  59 de 20 73 74 72 69 6e  67 25 20 31 30 32 34 2c  |Y. string% 1024,|
00001e00  20 62 6f 6f 74 73 74 72  69 6e 67 25 20 31 30 32  | bootstring% 102|
00001e10  34 2c 20 69 6e 66 6f 64  61 74 61 25 20 32 30 34  |4, infodata% 204|
00001e20  38 2c 20 74 6f 6f 6c 74  69 70 64 61 74 61 25 20  |8, tooltipdata% |
00001e30  32 30 34 38 2c 20 74 6f  6f 6c 74 69 70 69 63 6f  |2048, tooltipico|
00001e40  6e 25 20 35 31 32 0d 08  70 18 de 20 63 61 63 68  |n% 512..p.. cach|
00001e50  65 25 20 43 41 43 48 45  5f 53 49 5a 45 25 0d 08  |e% CACHE_SIZE%..|
00001e60  7a 1f de 20 64 69 72 6c  69 73 74 25 28 33 32 29  |z.. dirlist%(32)|
00001e70  2c 20 64 69 72 70 74 72  25 28 33 32 29 0d 08 84  |, dirptr%(32)...|
00001e80  04 0d 08 8e 1b 63 75 72  72 65 6e 74 6d 65 6e 75  |.....currentmenu|
00001e90  25 3d 6d 61 69 6e 5f 6d  65 6e 75 25 0d 08 98 10  |%=main_menu%....|
00001ea0  63 61 63 68 65 5f 65 78  74 25 3d 30 0d 08 a2 12  |cache_ext%=0....|
00001eb0  74 61 73 6b 5f 68 61 6e  64 6c 65 25 3d 30 0d 08  |task_handle%=0..|
00001ec0  ac 18 64 72 61 67 5f 62  75 74 74 6f 6e 25 3d 61  |..drag_button%=a|
00001ed0  64 6a 75 73 74 25 0d 08  b6 09 44 58 25 3d 30 0d  |djust%....DX%=0.|
00001ee0  08 c0 10 64 72 61 67 5f  69 63 6f 6e 25 3d 30 0d  |...drag_icon%=0.|
00001ef0  08 ca 0c 70 61 74 68 24  3d 22 22 0d 08 d4 13 69  |...path$=""....i|
00001f00  6e 5f 6c 65 66 74 72 65  67 69 6f 6e 3d a3 0d 08  |n_leftregion=...|
00001f10  de 14 69 6e 5f 72 69 67  68 74 72 65 67 69 6f 6e  |..in_rightregion|
00001f20  3d a3 0d 08 e8 0e 71 66  5f 74 69 6d 65 72 3d 91  |=.....qf_timer=.|
00001f30  0d 08 f2 10 72 65 67 69  6f 6e 78 73 25 3d 31 36  |....regionxs%=16|
00001f40  0d 08 fc 10 72 65 67 69  6f 6e 79 73 25 3d 36 34  |....regionys%=64|
00001f50  0d 09 06 1c 24 69 63 6f  6e 62 61 72 6c 61 62 65  |....$iconbarlabe|
00001f60  6c 25 3d 22 58 75 65 6e  22 2b bd 30 0d 09 10 1d  |l%="Xuen"+.0....|
00001f70  24 69 63 6f 6e 62 61 72  64 61 74 61 25 3d 22 53  |$iconbardata%="S|
00001f80  21 78 75 65 6e 22 2b bd  30 0d 09 1a 20 67 6c 6f  |!xuen"+.0... glo|
00001f90  62 61 6c 6d 65 6e 75 70  74 72 25 3d 73 68 6f 72  |balmenuptr%=shor|
00001fa0  74 63 75 74 6d 65 6e 75  25 0d 09 24 04 0d 09 2e  |tcutmenu%..$....|
00001fb0  18 24 69 63 6f 6e 62 61  72 6c 61 62 65 6c 25 3d  |.$iconbarlabel%=|
00001fc0  22 22 2b bd 30 0d 09 38  24 24 69 63 6f 6e 62 61  |""+.0..8$$iconba|
00001fd0  72 64 61 74 61 25 3d 49  63 6f 6e 42 61 72 41 6e  |rdata%=IconBarAn|
00001fe0  69 6d 24 28 30 29 2b bd  30 0d 09 42 04 0d 09 4c  |im$(0)+.0..B...L|
00001ff0  04 0d 09 56 39 f4 20 2a  2a 2a 2a 2a 2a 2a 2a 2a  |...V9. *********|
00002000  2a 2a 2a 2a 2a 2a 2a 2a  2a 2a 2a 2a 2a 2a 2a 2a  |****************|
*
00002020  2a 2a 2a 2a 2a 2a 2a 2a  2a 2a 0d 09 60 04 0d 09  |**********..`...|
00002030  6a 0b 71 75 69 74 25 3d  a3 0d 09 74 04 0d 09 7e  |j.quit%=...t...~|
00002040  09 f2 69 6e 69 74 0d 09  88 2d f4 50 52 4f 43 65  |..init...-.PROCe|
00002050  72 72 6f 72 28 22 58 75  65 6e 20 70 61 74 68 20  |rror("Xuen path |
00002060  3d 20 22 2b 41 70 70 50  61 74 68 24 2b 43 48 52  |= "+AppPath$+CHR|
00002070  24 30 29 0d 09 92 12 f2  43 72 65 61 74 65 54 6f  |$0).....CreateTo|
00002080  6f 6c 54 69 70 0d 09 9c  0e f2 6c 6f 61 64 63 61  |olTip.....loadca|
00002090  63 68 65 0d 09 a6 35 f2  44 69 72 65 63 74 6f 72  |che...5.Director|
000020a0  79 42 6f 6f 74 28 41 70  70 50 61 74 68 24 2b 22  |yBoot(AppPath$+"|
000020b0  2e 55 73 65 72 73 2e 22  2b 55 73 65 72 24 2b 22  |.Users."+User$+"|
000020c0  2e 4c 69 6e 6b 73 22 29  0d 09 b0 04 0d 09 ba 0e  |.Links")........|
000020d0  c8 95 20 ac 20 71 75 69  74 25 0d 09 c4 09 f2 70  |.. . quit%.....p|
000020e0  6f 6c 6c 0d 09 ce 05 ce  0d 09 d8 04 0d 09 e2 13  |oll.............|
000020f0  f2 44 65 73 74 72 6f 79  54 6f 6f 6c 54 69 70 0d  |.DestroyToolTip.|
00002100  09 ec 17 c8 99 20 22 57  69 6d 70 5f 43 6c 6f 73  |..... "Wimp_Clos|
00002110  65 44 6f 77 6e 22 0d 09  f6 05 e0 0d 0a 00 04 0d  |eDown"..........|
00002120  0a 0a 39 f4 20 2a 2a 2a  2a 2a 2a 2a 2a 2a 2a 2a  |..9. ***********|
00002130  2a 2a 2a 2a 2a 2a 2a 2a  2a 2a 2a 2a 2a 2a 2a 2a  |****************|
*
00002150  2a 2a 2a 2a 2a 2a 2a 2a  0d 0a 14 04 0d 0a 1e 0d  |********........|
00002160  dd f2 47 65 74 44 61 74  65 0d 0a 28 1a f4 20 41  |..GetDate..(.. A|
00002170  71 75 69 72 65 20 64 61  74 65 20 61 6e 64 20 74  |quire date and t|
00002180  69 6d 65 0d 0a 32 29 c8  99 22 4f 53 5f 47 53 54  |ime..2).."OS_GST|
00002190  72 61 6e 73 22 2c 61 70  70 64 61 74 65 76 61 72  |rans",appdatevar|
000021a0  2c 61 70 70 70 61 74 68  2c 32 35 35 0d 0a 3c 1d  |,apppath,255..<.|
000021b0  41 70 70 44 61 74 65 24  3d a4 73 74 72 69 6e 67  |AppDate$=.string|
000021c0  28 61 70 70 70 61 74 68  29 0d 0a 46 05 e1 0d 0a  |(apppath)..F....|
000021d0  50 04 0d 0a 5a 39 f4 20  2a 2a 2a 2a 2a 2a 2a 2a  |P...Z9. ********|
000021e0  2a 2a 2a 2a 2a 2a 2a 2a  2a 2a 2a 2a 2a 2a 2a 2a  |****************|
*
00002200  2a 2a 2a 2a 2a 2a 2a 2a  2a 2a 2a 0d 0a 64 04 0d  |***********..d..|
00002210  0a 6e 0f f4 20 70 6f 6c  6c 20 6c 6f 6f 70 0d 0a  |.n.. poll loop..|
00002220  78 0a dd f2 70 6f 6c 6c  0d 0a 82 24 c8 99 22 57  |x...poll...$.."W|
00002230  69 6d 70 5f 50 6f 6c 6c  22 2c 30 2c 62 6c 6f 63  |imp_Poll",0,bloc|
00002240  6b 25 20 b8 20 72 65 61  73 6f 6e 25 0d 0a 8c 32  |k% . reason%...2|
00002250  f4 20 49 46 20 72 65 61  73 6f 6e 25 3c 3e 30 20  |. IF reason%<>0 |
00002260  50 52 4f 43 65 72 72 6f  72 28 53 54 52 24 28 72  |PROCerror(STR$(r|
00002270  65 61 73 6f 6e 25 29 2b  43 48 52 24 30 29 0d 0a  |eason%)+CHR$0)..|
00002280  96 10 c8 8e 20 72 65 61  73 6f 6e 25 20 ca 0d 0a  |.... reason% ...|
00002290  a0 14 c9 20 30 3a f2 6e  75 6c 6c 5f 72 65 61 73  |... 0:.null_reas|
000022a0  6f 6e 0d 0a aa 14 c9 20  32 3a f2 50 6f 6c 6c 52  |on..... 2:.PollR|
000022b0  65 61 73 6f 6e 32 0d 0a  b4 25 c9 20 33 3a c8 99  |eason2...%. 3:..|
000022c0  20 22 57 69 6d 70 5f 43  6c 6f 73 65 57 69 6e 64  | "Wimp_CloseWind|
000022d0  6f 77 22 2c 2c 62 6c 6f  63 6b 25 0d 0a be 19 c9  |ow",,block%.....|
000022e0  20 36 3a f2 63 6c 69 63  6b 28 62 6c 6f 63 6b 25  | 6:.click(block%|
000022f0  21 31 32 29 0d 0a c8 11  c9 20 37 3a f2 64 72 61  |!12)..... 7:.dra|
00002300  67 64 72 6f 70 0d 0a d2  1b f4 20 57 48 45 4e 20  |gdrop..... WHEN |
00002310  38 3a 50 52 4f 43 6b 65  79 70 72 65 73 73 65 64  |8:PROCkeypressed|
00002320  0d 0a dc 13 c9 20 39 3a  f2 6d 65 6e 75 73 65 6c  |..... 9:.menusel|
00002330  65 63 74 0d 0a e6 1d c9  20 31 37 2c 31 38 3a f2  |ect..... 17,18:.|
00002340  72 65 63 65 69 76 65 28  72 65 61 73 6f 6e 25 29  |receive(reason%)|
00002350  0d 0a f0 39 f4 20 57 48  45 4e 20 31 39 3a 50 52  |...9. WHEN 19:PR|
00002360  4f 43 65 72 72 6f 72 28  22 55 6e 73 75 70 70 6f  |OCerror("Unsuppo|
00002370  72 74 65 64 20 77 69 6e  64 6f 77 20 64 65 66 69  |rted window defi|
00002380  6e 69 74 69 6f 6e 2e 22  29 0d 0a fa 05 cb 0d 0b  |nition.").......|
00002390  04 05 e1 0d 0b 0e 04 0d  0b 18 39 f4 20 2a 2a 2a  |..........9. ***|
000023a0  2a 2a 2a 2a 2a 2a 2a 2a  2a 2a 2a 2a 2a 2a 2a 2a  |****************|
*
000023d0  0d 0b 22 04 0d 0b 2c 11  dd f2 50 6f 6c 6c 52 65  |.."...,...PollRe|
000023e0  61 73 6f 6e 32 0d 0b 36  1b e7 20 28 28 21 62 6c  |ason2..6.. ((!bl|
000023f0  6f 63 6b 25 29 20 3e 20  26 66 66 66 66 29 20 8c  |ock%) > &ffff) .|
00002400  0d 0b 40 58 f4 20 50 52  4f 43 65 72 72 6f 72 28  |..@X. PROCerror(|
00002410  22 57 69 6e 64 6f 77 20  74 6f 62 65 6f 70 65 6e  |"Window tobeopen|
00002420  65 64 3a 22 2b 53 54 52  24 7e 28 21 62 6c 6f 63  |ed:"+STR$~(!bloc|
00002430  6b 25 29 2b 22 20 20 62  65 68 69 6e 64 3a 20 22  |k%)+"  behind: "|
00002440  2b 53 54 52 24 7e 28 62  6c 6f 63 6b 25 21 32 38  |+STR$~(block%!28|
00002450  29 2b 43 48 52 24 30 29  0d 0b 4a 20 c8 99 20 22  |)+CHR$0)..J .. "|
00002460  57 69 6d 70 5f 4f 70 65  6e 57 69 6e 64 6f 77 22  |Wimp_OpenWindow"|
00002470  2c 2c 62 6c 6f 63 6b 25  0d 0b 54 05 cc 0d 0b 5e  |,,block%..T....^|
00002480  2e f4 63 75 72 72 65 6e  74 77 69 6e 64 6f 77 25  |..currentwindow%|
00002490  3d 21 62 6c 6f 63 6b 25  3a 50 52 4f 43 4f 70 65  |=!block%:PROCOpe|
000024a0  6e 54 6f 6f 6c 54 69 70  28 32 29 0d 0b 68 41 f4  |nToolTip(2)..hA.|
000024b0  20 54 68 69 73 20 69 73  20 76 65 72 79 20 77 69  | This is very wi|
000024c0  65 72 64 20 2d 20 74 68  65 20 77 69 6e 64 6f 77  |erd - the window|
000024d0  68 61 6e 64 6c 65 20 69  73 20 69 6e 76 61 6c 69  |handle is invali|
000024e0  64 20 61 6e 64 20 65 71  75 61 6c 73 0d 0b 72 3f  |d and equals..r?|
000024f0  f4 20 74 68 65 20 6d 6f  75 73 65 20 70 6f 69 6e  |. the mouse poin|
00002500  74 65 72 20 78 20 70 6f  73 69 74 69 6f 6e 20 2d  |ter x position -|
00002510  20 6d 75 73 74 20 62 65  20 61 20 6d 65 6e 75 20  | must be a menu |
00002520  49 20 72 65 63 6b 6f 6e  20 6f 72 0d 0b 7c 1f f4  |I reckon or..|..|
00002530  20 63 6f 75 6c 64 20 62  65 20 61 20 62 75 67 20  | could be a bug |
00002540  69 6e 20 52 49 53 43 4f  53 2e 0d 0b 86 15 4d 65  |in RISCOS.....Me|
00002550  6e 75 49 73 4f 70 65 6e  46 6c 61 67 25 3d 31 0d  |nuIsOpenFlag%=1.|
00002560  0b 90 05 cd 0d 0b 9a 04  0d 0b a4 05 e1 0d 0b ae  |................|
00002570  04 0d 0b b8 13 dd f2 47  65 74 53 63 72 65 65 6e  |.......GetScreen|
00002580  53 69 7a 65 0d 0b c2 33  c8 99 22 4f 53 5f 52 65  |Size...3.."OS_Re|
00002590  61 64 4d 6f 64 65 56 61  72 69 61 62 6c 65 22 2c  |adModeVariable",|
000025a0  2d 31 2c 34 20 b8 20 2c  2c 4f 53 5f 45 58 25 3a  |-1,4 . ,,OS_EX%:|
000025b0  f4 20 45 69 67 65 6e 0d  0b cc 2b c8 99 22 4f 53  |. Eigen...+.."OS|
000025c0  5f 52 65 61 64 4d 6f 64  65 56 61 72 69 61 62 6c  |_ReadModeVariabl|
000025d0  65 22 2c 2d 31 2c 35 20  b8 20 2c 2c 4f 53 5f 45  |e",-1,5 . ,,OS_E|
000025e0  59 25 0d 0b d6 33 c8 99  22 4f 53 5f 52 65 61 64  |Y%...3.."OS_Read|
000025f0  4d 6f 64 65 56 61 72 69  61 62 6c 65 22 2c 2d 31  |ModeVariable",-1|
00002600  2c 31 31 20 b8 20 2c 2c  4f 53 5f 57 58 25 3a f4  |,11 . ,,OS_WX%:.|
00002610  20 53 69 7a 65 0d 0b e0  2c c8 99 22 4f 53 5f 52  | Size...,.."OS_R|
00002620  65 61 64 4d 6f 64 65 56  61 72 69 61 62 6c 65 22  |eadModeVariable"|
00002630  2c 2d 31 2c 31 32 20 b8  20 2c 2c 4f 53 5f 57 59  |,-1,12 . ,,OS_WY|
00002640  25 0d 0b ea 1f 4f 53 5f  4d 58 25 3d 28 31 2b 4f  |%....OS_MX%=(1+O|
00002650  53 5f 57 58 25 29 20 3c  3c 20 4f 53 5f 45 58 25  |S_WX%) << OS_EX%|
00002660  0d 0b f4 1f 4f 53 5f 4d  59 25 3d 28 31 2b 4f 53  |....OS_MY%=(1+OS|
00002670  5f 57 59 25 29 20 3c 3c  20 4f 53 5f 45 59 25 0d  |_WY%) << OS_EY%.|
00002680  0b fe 05 e1 0d 0c 08 04  0d 0c 12 16 f4 44 45 46  |.............DEF|
00002690  50 52 4f 43 6b 65 79 70  72 65 73 73 65 64 0d 0c  |PROCkeypressed..|
000026a0  1c 10 f4 4c 4f 43 41 4c  20 43 68 61 72 25 0d 0c  |...LOCAL Char%..|
000026b0  26 14 f4 43 68 61 72 25  3d 62 6c 6f 63 6b 25 21  |&..Char%=block%!|
000026c0  32 34 0d 0c 30 2d f4 52  45 4d 20 49 73 20 74 68  |24..0-.REM Is th|
000026d0  69 73 20 74 68 65 20 64  65 6c 65 74 65 20 6f 72  |is the delete or|
000026e0  20 62 61 63 6b 73 70 61  63 65 20 6b 65 79 3f 0d  | backspace key?.|
000026f0  0c 3a 23 f4 49 46 20 28  43 68 61 72 25 3d 38 20  |.:#.IF (Char%=8 |
00002700  4f 52 20 43 68 61 72 25  3d 26 37 66 29 20 54 48  |OR Char%=&7f) TH|
00002710  45 4e 0d 0c 44 1b f4 52  45 4d 20 49 73 20 74 68  |EN..D..REM Is th|
00002720  69 73 20 69 6e 20 61 20  6d 65 6e 75 3f 0d 0c 4e  |is in a menu?..N|
00002730  5e f4 50 52 4f 43 65 72  72 6f 72 28 22 57 69 6e  |^.PROCerror("Win|
00002740  64 6f 77 20 68 61 6e 64  6c 65 20 3d 20 22 2b 53  |dow handle = "+S|
00002750  54 52 24 7e 28 62 6c 6f  63 6b 25 21 30 29 2b 22  |TR$~(block%!0)+"|
00002760  20 2d 2d 20 6d 61 69 6e  5f 6d 65 6e 75 25 20 3d  | -- main_menu% =|
00002770  20 22 2b 53 54 52 24 7e  28 6d 61 69 6e 5f 6d 65  | "+STR$~(main_me|
00002780  6e 75 25 29 2b 43 48 52  24 30 29 0d 0c 58 09 f4  |nu%)+CHR$0)..X..|
00002790  45 4c 53 45 0d 0c 62 20  f4 53 59 53 20 22 57 69  |ELSE..b .SYS "Wi|
000027a0  6d 70 5f 50 72 6f 63 65  73 73 4b 65 79 22 2c 43  |mp_ProcessKey",C|
000027b0  68 61 72 25 0d 0c 6c 0a  f4 45 4e 44 49 46 0d 0c  |har%..l..ENDIF..|
000027c0  76 0c f4 45 4e 44 50 52  4f 43 0d 0c 80 04 0d 0c  |v..ENDPROC......|
000027d0  8a 17 dd f2 52 65 6f 70  65 6e 44 75 6d 6d 79 57  |....ReopenDummyW|
000027e0  69 6e 64 6f 77 0d 0c 94  20 20 21 62 6c 6f 63 6b  |indow...  !block|
000027f0  32 25 3d 77 68 61 6e 64  6c 65 5f 64 75 6d 6d 79  |2%=whandle_dummy|
00002800  62 61 63 6b 25 0d 0c 9e  25 20 c8 99 22 57 69 6d  |back%...% .."Wim|
00002810  70 5f 47 65 74 57 69 6e  64 6f 77 53 74 61 74 65  |p_GetWindowState|
00002820  22 2c 2c 62 6c 6f 63 6b  32 25 0d 0c a8 25 20 62  |",,block2%...% b|
00002830  6c 6f 63 6b 32 25 21 38  3d 2d 31 30 32 34 3a 62  |lock2%!8=-1024:b|
00002840  6c 6f 63 6b 32 25 21 31  36 3d 2d 31 30 32 34 0d  |lock2%!16=-1024.|
00002850  0c b2 12 20 62 6c 6f 63  6b 32 25 21 32 38 3d 2d  |... block2%!28=-|
00002860  32 0d 0c bc 22 20 c8 99  22 57 69 6d 70 5f 4f 70  |2..." .."Wimp_Op|
00002870  65 6e 57 69 6e 64 6f 77  22 2c 2c 62 6c 6f 63 6b  |enWindow",,block|
00002880  32 25 20 0d 0c c6 29 20  61 66 74 65 72 25 3d 77  |2% ...) after%=w|
00002890  68 61 6e 64 6c 65 5f 64  75 6d 6d 79 62 61 63 6b  |handle_dummyback|
000028a0  25 3a 63 61 73 63 61 64  65 25 3d 30 0d 0c d0 16  |%:cascade%=0....|
000028b0  20 4d 65 6e 75 49 73 4f  70 65 6e 46 6c 61 67 25  | MenuIsOpenFlag%|
000028c0  3d 30 0d 0c da 05 20 0d  0c e4 38 20 e7 20 28 52  |=0.... ...8 . (R|
000028d0  65 6f 72 67 61 6e 69 73  65 57 69 6e 64 6f 77 53  |eorganiseWindowS|
000028e0  74 61 63 6b 3d 32 29 20  52 65 6f 72 67 61 6e 69  |tack=2) Reorgani|
000028f0  73 65 57 69 6e 64 6f 77  53 74 61 63 6b 3d 30 0d  |seWindowStack=0.|
00002900  0c ee 39 20 e7 20 28 52  65 6f 72 67 61 6e 69 73  |..9 . (Reorganis|
00002910  65 57 69 6e 64 6f 77 53  74 61 63 6b 3d 31 29 20  |eWindowStack=1) |
00002920  52 65 6f 72 67 61 6e 69  73 65 57 69 6e 64 6f 77  |ReorganiseWindow|
00002930  53 74 61 63 6b 2b 3d 31  0d 0c f8 05 e1 0d 0d 02  |Stack+=1........|
00002940  04 0d 0d 0c 0e dd 20 f2  63 61 73 63 61 64 65 0d  |...... .cascade.|
00002950  0d 16 12 ea 20 71 25 2c  4f 6c 64 41 66 74 65 72  |.... q%,OldAfter|
00002960  25 0d 0d 20 18 ea 20 73  78 25 2c 20 73 79 25 2c  |%.. .. sx%, sy%,|
00002970  20 6f 78 25 2c 20 6f 79  25 0d 0d 2a 1d ea 20 52  | ox%, oy%..*.. R|
00002980  65 6f 70 65 6e 46 6c 61  67 25 2c 20 53 74 61 63  |eopenFlag%, Stac|
00002990  6b 46 6c 61 67 25 0d 0d  34 2d ea 20 50 61 6e 65  |kFlag%..4-. Pane|
000029a0  46 6c 61 67 25 2c 20 49  73 4f 70 65 6e 46 6c 61  |Flag%, IsOpenFla|
000029b0  67 25 2c 20 49 73 4d 6f  76 65 61 62 6c 65 46 6c  |g%, IsMoveableFl|
000029c0  61 67 25 0d 0d 3e 1e ea  20 43 75 72 72 65 6e 74  |ag%..>.. Current|
000029d0  57 69 6e 25 2c 43 75 72  72 65 6e 74 49 63 6f 6e  |Win%,CurrentIcon|
000029e0  25 0d 0d 48 04 0d 0d 52  10 71 25 3d 77 69 6e 62  |%..H...R.q%=winb|
000029f0  6c 6f 63 6b 25 0d 0d 5c  0f 50 61 6e 65 46 6c 61  |lock%..\.PaneFla|
00002a00  67 25 3d a3 0d 0d 66 04  0d 0d 70 32 f4 20 47 65  |g%=...f...p2. Ge|
00002a10  74 20 43 75 72 72 65 6e  74 20 77 69 6e 64 6f 77  |t Current window|
00002a20  20 69 6d 6d 65 64 69 61  74 65 6c 79 20 75 6e 64  | immediately und|
00002a30  65 72 20 70 6f 69 6e 74  65 72 0d 0d 7a 24 c8 99  |er pointer..z$..|
00002a40  22 57 69 6d 70 5f 47 65  74 50 6f 69 6e 74 65 72  |"Wimp_GetPointer|
00002a50  49 6e 66 6f 22 2c 2c 62  6c 6f 63 6b 32 25 0d 0d  |Info",,block2%..|
00002a60  84 1d 43 75 72 72 65 6e  74 57 69 6e 50 74 72 25  |..CurrentWinPtr%|
00002a70  3d 62 6c 6f 63 6b 32 25  21 31 32 0d 0d 8e 1b 43  |=block2%!12....C|
00002a80  75 72 72 65 6e 74 49 63  6f 6e 25 3d 62 6c 6f 63  |urrentIcon%=bloc|
00002a90  6b 32 25 21 31 36 0d 0d  98 04 0d 0d a2 14 4f 6c  |k2%!16........Ol|
00002aa0  64 41 66 74 65 72 25 3d  61 66 74 65 72 25 0d 0d  |dAfter%=after%..|
00002ab0  ac 0e 21 71 25 3d 61 66  74 65 72 25 0d 0d b6 2e  |..!q%=after%....|
00002ac0  f4 20 5f 54 72 79 5f 20  61 6e 64 20 72 65 6f 70  |. _Try_ and reop|
00002ad0  65 6e 20 74 68 69 73 20  64 65 73 6b 74 6f 70 20  |en this desktop |
00002ae0  77 69 6e 64 6f 77 20 2e  2e 2e 0d 0d c0 21 c8 99  |window ......!..|
00002af0  20 22 58 57 69 6d 70 5f  47 65 74 57 69 6e 64 6f  | "XWimp_GetWindo|
00002b00  77 53 74 61 74 65 22 2c  2c 71 25 0d 0d ca 3f e7  |wState",,q%...?.|
00002b10  20 28 61 66 74 65 72 25  3d 2d 31 20 84 20 52 65  | (after%=-1 . Re|
00002b20  6f 72 67 61 6e 69 73 65  57 69 6e 64 6f 77 53 74  |organiseWindowSt|
00002b30  61 63 6b 3d 31 29 f2 52  65 6f 70 65 6e 44 75 6d  |ack=1).ReopenDum|
00002b40  6d 79 57 69 6e 64 6f 77  3a e1 0d 0d d4 13 43 75  |myWindow:.....Cu|
00002b50  72 72 65 6e 74 57 69 6e  25 3d 21 71 25 0d 0d de  |rrentWin%=!q%...|
00002b60  10 61 66 74 65 72 25 3d  71 25 21 32 38 0d 0d e8  |.after%=q%!28...|
00002b70  2d e7 20 28 43 75 72 72  65 6e 74 57 69 6e 25 3d  |-. (CurrentWin%=|
00002b80  2d 31 20 84 20 28 61 66  74 65 72 25 3d 4f 6c 64  |-1 . (after%=Old|
00002b90  41 66 74 65 72 25 29 29  20 8c 0d 0d f2 17 20 f2  |After%)) ..... .|
00002ba0  52 65 6f 70 65 6e 44 75  6d 6d 79 57 69 6e 64 6f  |ReopenDummyWindo|
00002bb0  77 0d 0d fc 06 cc 20 0d  0e 06 18 20 f4 20 52 65  |w..... .... . Re|
00002bc0  70 6f 73 69 74 69 6f 6e  20 77 69 6e 64 6f 77 0d  |position window.|
00002bd0  0e 10 32 20 e7 20 28 63  61 73 63 61 64 65 25 3d  |..2 . (cascade%=|
00002be0  30 29 20 43 61 73 63 61  64 65 52 6f 77 25 3d 30  |0) CascadeRow%=0|
00002bf0  3a 4c 61 73 74 52 69 67  68 74 45 64 67 65 25 3d  |:LastRightEdge%=|
00002c00  30 0d 0e 1a 2f 20 f4 20  21 71 25 3d 61 66 74 65  |0.../ . !q%=afte|
00002c10  72 25 3a 53 59 53 20 22  57 69 6d 70 5f 47 65 74  |r%:SYS "Wimp_Get|
00002c20  57 69 6e 64 6f 77 53 74  61 74 65 22 2c 2c 71 25  |WindowState",,q%|
00002c30  0d 0e 24 05 20 0d 0e 2e  05 20 0d 0e 38 10 20 50  |..$. .... ..8. P|
00002c40  61 6e 65 46 6c 61 67 25  3d a3 0d 0e 42 32 20 e7  |aneFlag%=...B2 .|
00002c50  20 28 28 28 71 25 21 33  32 29 20 80 20 28 28 32  | (((q%!32) . ((2|
00002c60  5e 32 32 29 2b 28 32 5e  32 33 29 29 29 3e 30 29  |^22)+(2^23)))>0)|
00002c70  20 50 61 6e 65 46 6c 61  67 25 3d b9 0d 0e 4c 26  | PaneFlag%=...L&|
00002c80  20 e7 20 28 28 28 71 25  21 33 32 29 20 80 20 33  | . (((q%!32) . 3|
00002c90  32 29 3d 33 32 29 20 50  61 6e 65 46 6c 61 67 25  |2)=32) PaneFlag%|
00002ca0  3d b9 0d 0e 56 25 20 49  73 4f 70 65 6e 46 6c 61  |=...V% IsOpenFla|
00002cb0  67 25 20 3d 20 28 28 71  25 21 33 32 29 20 80 20  |g% = ((q%!32) . |
00002cc0  28 32 5e 31 36 29 29 0d  0e 60 24 20 49 73 4d 6f  |(2^16))..`$ IsMo|
00002cd0  76 65 61 62 6c 65 46 6c  61 67 25 20 3d 20 28 28  |veableFlag% = ((|
00002ce0  71 25 21 33 32 29 20 80  20 32 29 0d 0e 6a 31 20  |q%!32) . 2)..j1 |
00002cf0  f4 20 48 61 73 20 77 69  6e 64 6f 77 20 6d 6f 76  |. Has window mov|
00002d00  65 64 20 61 74 20 61 6c  6c 20 66 6f 72 20 72 65  |ed at all for re|
00002d10  70 6f 73 69 74 69 6f 6e  69 6e 67 3f 0d 0e 74 04  |positioning?..t.|
00002d20  0d 0e 7e 12 20 52 65 6f  70 65 6e 46 6c 61 67 25  |..~. ReopenFlag%|
00002d30  3d b9 0d 0e 88 11 20 53  74 61 63 6b 46 6c 61 67  |=..... StackFlag|
00002d40  25 3d b9 0d 0e 92 b4 f4  20 20 49 46 20 28 28 28  |%=......  IF (((|
00002d50  71 25 21 33 32 29 20 41  4e 44 20 28 32 5e 31 38  |q%!32) AND (2^18|
00002d60  29 29 3e 30 20 41 4e 44  20 28 28 71 25 21 33 32  |))>0 AND ((q%!32|
00002d70  29 20 41 4e 44 20 28 32  5e 32 30 29 29 3e 30 20  |) AND (2^20))>0 |
00002d80  41 4e 44 20 28 28 71 25  21 33 32 29 20 41 4e 44  |AND ((q%!32) AND|
00002d90  20 28 32 5e 32 37 29 29  3e 30 29 20 53 74 61 63  | (2^27))>0) Stac|
00002da0  6b 46 6c 61 67 25 3d 46  41 4c 53 45 3a 52 65 6f  |kFlag%=FALSE:Reo|
00002db0  70 65 6e 46 6c 61 67 25  3d 46 41 4c 53 45 3a 52  |penFlag%=FALSE:R|
00002dc0  45 4d 20 54 6f 67 67 6c  65 64 20 4d 61 78 69 6d  |EM Toggled Maxim|
00002dd0  69 73 65 20 26 20 68 61  73 20 69 6e 70 75 74 20  |ise & has input |
00002de0  66 6f 63 75 73 20 26 20  68 61 73 20 74 6f 67 67  |focus & has togg|
00002df0  6c 65 20 69 63 6f 6e 0d  0e 9c fb e7 20 28 43 75  |le icon..... (Cu|
00002e00  72 72 65 6e 74 57 69 6e  25 3d 43 75 72 72 65 6e  |rrentWin%=Curren|
00002e10  74 57 69 6e 50 74 72 25  20 80 20 28 28 71 25 21  |tWinPtr% . ((q%!|
00002e20  33 32 29 20 80 20 28 32  5e 32 38 29 29 3d 30 20  |32) . (2^28))=0 |
00002e30  80 20 28 28 71 25 21 33  32 29 20 80 20 28 32 5e  |. ((q%!32) . (2^|
00002e40  33 30 29 29 3d 30 20 80  20 28 28 71 25 21 33 32  |30))=0 . ((q%!32|
00002e50  29 20 80 20 28 32 5e 31  37 29 29 3e 30 20 80 20  |) . (2^17))>0 . |
00002e60  61 66 74 65 72 25 3d 2d  31 29 20 53 74 61 63 6b  |after%=-1) Stack|
00002e70  46 6c 61 67 25 3d a3 3a  52 65 6f 70 65 6e 46 6c  |Flag%=.:ReopenFl|
00002e80  61 67 25 3d a3 3a f4 20  55 6e 64 65 72 20 70 6f  |ag%=.:. Under po|
00002e90  69 6e 74 65 72 20 61 6e  64 20 5f 6e 6f 5f 20 68  |inter and _no_ h|
00002ea0  6f 72 69 7a 2f 76 65 72  74 20 73 63 72 6f 6c 6c  |oriz/vert scroll|
00002eb0  20 62 61 72 73 20 61 6e  64 20 66 75 6c 6c 79 20  | bars and fully |
00002ec0  76 69 73 69 62 6c 65 20  28 6c 69 6b 65 6c 79 20  |visible (likely |
00002ed0  74 6f 20 62 65 20 70 61  72 74 20 6f 66 20 6d 65  |to be part of me|
00002ee0  6e 75 20 73 6f 20 6c 65  61 76 65 20 61 6c 6f 6e  |nu so leave alon|
00002ef0  65 29 0d 0e a6 e7 e7 20  28 28 28 71 25 21 33 32  |e)..... (((q%!32|
00002f00  29 20 80 20 28 32 5e 31  38 29 29 3e 30 20 80 20  |) . (2^18))>0 . |
00002f10  28 28 71 25 21 33 32 29  20 80 20 28 32 5e 32 37  |((q%!32) . (2^27|
00002f20  29 29 3e 30 20 80 20 28  28 71 25 21 33 32 29 20  |))>0 . ((q%!32) |
00002f30  80 20 28 32 5e 32 38 29  29 3e 30 20 80 20 28 28  |. (2^28))>0 . ((|
00002f40  71 25 21 33 32 29 20 80  20 28 32 5e 33 30 29 29  |q%!32) . (2^30))|
00002f50  3e 30 29 20 53 74 61 63  6b 46 6c 61 67 25 3d a3  |>0) StackFlag%=.|
00002f60  3a 52 65 6f 70 65 6e 46  6c 61 67 25 3d a3 3a f4  |:ReopenFlag%=.:.|
00002f70  20 54 6f 67 67 6c 65 64  20 4d 61 78 69 6d 69 73  | Toggled Maximis|
00002f80  65 20 26 20 68 61 73 20  74 6f 67 67 6c 65 20 69  |e & has toggle i|
00002f90  63 6f 6e 20 61 6e 64 20  68 61 73 20 68 6f 72 69  |con and has hori|
00002fa0  7a 2f 76 65 72 74 20 73  63 72 6f 6c 6c 20 62 61  |z/vert scroll ba|
00002fb0  72 73 20 2d 20 6c 69 6b  65 6c 79 20 74 6f 20 62  |rs - likely to b|
00002fc0  65 20 61 20 77 6f 72 64  20 70 72 6f 63 65 73 73  |e a word process|
00002fd0  6f 72 20 77 69 6e 64 6f  77 0d 0e b0 9c e7 20 28  |or window..... (|
00002fe0  20 28 71 25 21 31 36 20  3c 20 28 4f 53 5f 4d 59  | (q%!16 < (OS_MY|
00002ff0  25 2d 28 63 61 73 63 61  64 65 25 2a 34 30 29 29  |%-(cascade%*40))|
00003000  29 20 80 20 28 71 25 21  34 20 3e 20 30 29 20 80  |) . (q%!4 > 0) .|
00003010  20 28 71 25 21 31 32 20  3c 20 28 4f 53 5f 4d 58  | (q%!12 < (OS_MX|
00003020  25 2d 34 30 29 29 20 80  20 28 71 25 21 38 3e 34  |%-40)) . (q%!8>4|
00003030  30 29 20 80 20 28 28 71  25 21 33 32 29 20 80 20  |0) . ((q%!32) . |
00003040  28 32 5e 31 37 29 29 3e  30 29 20 53 74 61 63 6b  |(2^17))>0) Stack|
00003050  46 6c 61 67 25 3d a3 3a  52 65 6f 70 65 6e 46 6c  |Flag%=.:ReopenFl|
00003060  61 67 25 3d a3 3a f4 20  46 75 6c 6c 79 20 76 69  |ag%=.:. Fully vi|
00003070  73 69 62 6c 65 0d 0e ba  40 20 e7 20 28 43 75 72  |sible...@ . (Cur|
00003080  72 65 6e 74 57 69 6e 25  3d 77 68 61 6e 64 6c 65  |rentWin%=whandle|
00003090  5f 74 6f 6f 6c 74 69 70  25 29 20 53 74 61 63 6b  |_tooltip%) Stack|
000030a0  46 6c 61 67 25 3d a3 3a  52 65 6f 70 65 6e 46 6c  |Flag%=.:ReopenFl|
000030b0  61 67 25 3d a3 0d 0e c4  42 20 e7 20 28 43 75 72  |ag%=....B . (Cur|
000030c0  72 65 6e 74 57 69 6e 25  3d 77 68 61 6e 64 6c 65  |rentWin%=whandle|
000030d0  5f 64 75 6d 6d 79 62 61  63 6b 25 29 20 53 74 61  |_dummyback%) Sta|
000030e0  63 6b 46 6c 61 67 25 3d  a3 3a 52 65 6f 70 65 6e  |ckFlag%=.:Reopen|
000030f0  46 6c 61 67 25 3d a3 0d  0e ce 2f 20 e7 20 28 50  |Flag%=..../ . (P|
00003100  61 6e 65 46 6c 61 67 25  3d b9 29 20 53 74 61 63  |aneFlag%=.) Stac|
00003110  6b 46 6c 61 67 25 3d a3  3a 52 65 6f 70 65 6e 46  |kFlag%=.:ReopenF|
00003120  6c 61 67 25 3d a3 0d 0e  d8 45 20 e7 20 28 49 73  |lag%=....E . (Is|
00003130  4f 70 65 6e 46 6c 61 67  25 3d 30 20 84 20 49 73  |OpenFlag%=0 . Is|
00003140  4d 6f 76 65 61 62 6c 65  46 6c 61 67 25 3d 30 29  |MoveableFlag%=0)|
00003150  20 53 74 61 63 6b 46 6c  61 67 25 3d a3 3a 52 65  | StackFlag%=.:Re|
00003160  6f 70 65 6e 46 6c 61 67  25 3d a3 0d 0e e2 35 20  |openFlag%=....5 |
00003170  e7 20 28 4d 65 6e 75 49  73 4f 70 65 6e 46 6c 61  |. (MenuIsOpenFla|
00003180  67 25 3d 31 29 20 53 74  61 63 6b 46 6c 61 67 25  |g%=1) StackFlag%|
00003190  3d a3 3a 52 65 6f 70 65  6e 46 6c 61 67 25 3d a3  |=.:ReopenFlag%=.|
000031a0  0d 0e ec 38 f4 20 49 66  20 70 6f 69 6e 74 65 72  |...8. If pointer|
000031b0  20 69 73 20 6f 76 65 72  20 77 69 6e 64 6f 77 20  | is over window |
000031c0  61 6e 64 20 77 69 74 68  69 6e 20 74 68 65 20 77  |and within the w|
000031d0  6f 72 6b 20 61 72 65 61  0d 0e f6 19 f4 20 74 68  |ork area..... th|
000031e0  65 6e 20 64 6f 6e 27 74  20 6d 6f 76 65 20 69 74  |en don't move it|
000031f0  2e 0d 0f 00 30 e7 20 28  43 75 72 72 65 6e 74 57  |....0. (CurrentW|
00003200  69 6e 25 3d 43 75 72 72  65 6e 74 57 69 6e 50 74  |in%=CurrentWinPt|
00003210  72 25 29 20 52 65 6f 70  65 6e 46 6c 61 67 25 3d  |r%) ReopenFlag%=|
00003220  a3 0d 0f 0a 30 20 f4 20  52 65 73 65 74 20 70 6f  |....0 . Reset po|
00003230  73 69 74 69 6f 6e 20 6f  66 20 77 69 6e 64 6f 77  |sition of window|
00003240  20 61 6e 64 20 64 6f 20  61 20 52 65 2d 4f 70 65  | and do a Re-Ope|
00003250  6e 0d 0f 14 19 20 f4 20  47 65 74 20 73 69 7a 65  |n.... . Get size|
00003260  20 6f 66 20 77 69 6e 64  6f 77 0d 0f 1e 17 20 e7  | of window.... .|
00003270  20 28 53 74 61 63 6b 46  6c 61 67 25 3d b9 29 20  | (StackFlag%=.) |
00003280  8c 0d 0f 28 0e 20 20 6f  78 25 3d 71 25 21 34 0d  |...(.  ox%=q%!4.|
00003290  0f 32 0f 20 20 6f 79 25  3d 71 25 21 31 36 0d 0f  |.2.  oy%=q%!16..|
000032a0  3c 18 20 20 73 78 25 3d  28 71 25 21 31 32 29 2d  |<.  sx%=(q%!12)-|
000032b0  28 71 25 21 34 29 0d 0f  46 18 20 20 73 79 25 3d  |(q%!4)..F.  sy%=|
000032c0  28 71 25 21 31 36 29 2d  28 71 25 21 38 29 0d 0f  |(q%!16)-(q%!8)..|
000032d0  50 06 20 20 0d 0f 5a 23  20 20 e7 20 28 52 65 6f  |P.  ..Z#  . (Reo|
000032e0  72 67 61 6e 69 73 65 57  69 6e 64 6f 77 53 74 61  |rganiseWindowSta|
000032f0  63 6b 3e 30 29 20 8c 0d  0f 64 3e 20 20 20 20 f4  |ck>0) ...d>    .|
00003300  20 54 72 79 20 61 6e 64  20 66 69 74 20 61 73 20  | Try and fit as |
00003310  6d 61 6e 79 20 77 69 6e  64 6f 77 73 20 68 6f 72  |many windows hor|
00003320  69 7a 6f 6e 74 61 6c 6c  79 20 61 73 20 70 6f 73  |izontally as pos|
00003330  73 69 62 6c 65 0d 0f 6e  2e 20 20 20 20 e7 20 28  |sible..n.    . (|
00003340  28 4c 61 73 74 52 69 67  68 74 45 64 67 65 25 2b  |(LastRightEdge%+|
00003350  73 78 25 29 3c 28 4f 53  5f 4d 58 25 2d 34 30 29  |sx%)<(OS_MX%-40)|
00003360  29 20 8c 0d 0f 78 1c 20  20 20 20 20 71 25 21 34  |) ...x.     q%!4|
00003370  3d 4c 61 73 74 52 69 67  68 74 45 64 67 65 25 0d  |=LastRightEdge%.|
00003380  0f 82 32 20 20 20 20 20  71 25 21 31 36 3d 28 4f  |..2     q%!16=(O|
00003390  53 5f 4d 59 25 2d 34 30  29 2d 28 43 61 73 63 61  |S_MY%-40)-(Casca|
000033a0  64 65 52 6f 77 25 2a 34  30 29 3a f4 20 31 31 36  |deRow%*40):. 116|
000033b0  30 0d 0f 8c 19 20 20 20  20 20 71 25 21 31 32 3d  |0....     q%!12=|
000033c0  28 71 25 21 34 29 2b 73  78 25 0d 0f 96 32 20 20  |(q%!4)+sx%...2  |
000033d0  20 20 20 e7 20 28 28 71  25 21 31 32 29 3e 28 4f  |   . ((q%!12)>(O|
000033e0  53 5f 4d 58 25 2d 34 30  29 29 20 71 25 21 31 32  |S_MX%-40)) q%!12|
000033f0  3d 28 4f 53 5f 4d 58 25  2d 34 30 29 0d 0f a0 19  |=(OS_MX%-40)....|
00003400  20 20 20 20 20 71 25 21  38 3d 28 71 25 21 31 36  |     q%!8=(q%!16|
00003410  29 2d 73 79 25 0d 0f aa  1e 20 20 20 20 20 e7 20  |)-sy%....     . |
00003420  28 28 71 25 21 38 29 3c  34 30 29 20 71 25 21 38  |((q%!8)<40) q%!8|
00003430  3d 34 30 0d 0f b4 22 20  20 20 20 20 4c 61 73 74  |=40..."     Last|
00003440  52 69 67 68 74 45 64 67  65 25 3d 28 71 25 21 31  |RightEdge%=(q%!1|
00003450  32 29 2b 34 38 0d 0f be  09 20 20 20 20 cc 0d 0f  |2)+48....    ...|
00003460  c8 19 20 20 20 20 20 4c  61 73 74 52 69 67 68 74  |..     LastRight|
00003470  45 64 67 65 25 3d 30 0d  0f d2 17 20 20 20 20 20  |Edge%=0....     |
00003480  43 61 73 63 61 64 65 52  6f 77 25 2b 3d 31 0d 0f  |CascadeRow%+=1..|
00003490  dc 1d 20 20 20 20 20 71  25 21 34 3d 28 43 61 73  |..     q%!4=(Cas|
000034a0  63 61 64 65 52 6f 77 25  2a 38 29 0d 0f e6 32 20  |cadeRow%*8)...2 |
000034b0  20 20 20 20 71 25 21 31  36 3d 28 4f 53 5f 4d 59  |    q%!16=(OS_MY|
000034c0  25 2d 34 30 29 2d 28 43  61 73 63 61 64 65 52 6f  |%-40)-(CascadeRo|
000034d0  77 25 2a 34 30 29 3a f4  20 31 31 36 30 0d 0f f0  |w%*40):. 1160...|
000034e0  19 20 20 20 20 20 71 25  21 31 32 3d 28 71 25 21  |.     q%!12=(q%!|
000034f0  34 29 2b 73 78 25 0d 0f  fa 32 20 20 20 20 20 e7  |4)+sx%...2     .|
00003500  20 28 28 71 25 21 31 32  29 3e 28 4f 53 5f 4d 58  | ((q%!12)>(OS_MX|
00003510  25 2d 34 30 29 29 20 71  25 21 31 32 3d 28 4f 53  |%-40)) q%!12=(OS|
00003520  5f 4d 58 25 2d 34 30 29  0d 10 04 19 20 20 20 20  |_MX%-40)....    |
00003530  20 71 25 21 38 3d 28 71  25 21 31 36 29 2d 73 79  | q%!8=(q%!16)-sy|
00003540  25 0d 10 0e 1e 20 20 20  20 20 e7 20 28 28 71 25  |%....     . ((q%|
00003550  21 38 29 3c 34 30 29 20  71 25 21 38 3d 34 30 0d  |!8)<40) q%!8=40.|
00003560  10 18 22 20 20 20 20 20  4c 61 73 74 52 69 67 68  |.."     LastRigh|
00003570  74 45 64 67 65 25 3d 28  71 25 21 31 32 29 2b 34  |tEdge%=(q%!12)+4|
00003580  38 0d 10 22 09 20 20 20  20 cd 0d 10 2c 04 0d 10  |8..".    ...,...|
00003590  36 04 0d 10 40 04 0d 10  4a 20 f4 20 20 52 45 4d  |6...@...J .  REM|
000035a0  20 45 6e 61 62 6c 65 20  77 69 6e 64 6f 77 20 27  | Enable window '|
000035b0  64 72 69 66 74 27 0d 10  54 1a f4 20 20 49 46 20  |drift'..T..  IF |
000035c0  28 6f 78 25 3c 3e 71 25  21 34 29 20 54 48 45 4e  |(ox%<>q%!4) THEN|
000035d0  0d 10 5e 10 f4 20 20 20  6e 78 25 3d 71 25 21 34  |..^..   nx%=q%!4|
000035e0  0d 10 68 1a f4 20 20 20  73 78 25 3d 28 71 25 21  |..h..   sx%=(q%!|
000035f0  31 32 29 2d 28 71 25 21  34 29 0d 10 72 13 f4 20  |12)-(q%!4)..r.. |
00003600  20 20 64 78 25 3d 6e 78  25 2d 6f 78 25 0d 10 7c  |  dx%=nx%-ox%..||
00003610  1d f4 20 20 20 49 46 20  28 41 42 53 28 64 78 25  |..   IF (ABS(dx%|
00003620  29 3e 34 30 29 20 54 48  45 4e 0d 10 86 1e f4 20  |)>40) THEN..... |
00003630  20 20 20 6e 78 25 3d 6f  78 25 2b 28 53 47 4e 28  |   nx%=ox%+(SGN(|
00003640  64 78 25 29 2a 34 30 29  0d 10 90 1f f4 20 20 20  |dx%)*40).....   |
00003650  20 71 25 21 34 3d 6e 78  25 3a 71 25 21 31 32 3d  | q%!4=nx%:q%!12=|
00003660  6e 78 25 2b 73 78 25 0d  10 9a 0d f4 20 20 20 45  |nx%+sx%.....   E|
00003670  4e 44 49 46 0d 10 a4 0c  f4 20 20 45 4e 44 49 46  |NDIF.....  ENDIF|
00003680  0d 10 ae 1b f4 20 20 49  46 20 28 6f 79 25 3c 3e  |.....  IF (oy%<>|
00003690  71 25 21 31 36 29 20 54  48 45 4e 0d 10 b8 11 f4  |q%!16) THEN.....|
000036a0  20 20 20 6e 79 25 3d 71  25 21 31 36 0d 10 c2 1a  |   ny%=q%!16....|
000036b0  f4 20 20 20 73 79 25 3d  28 71 25 21 31 36 29 2d  |.   sy%=(q%!16)-|
000036c0  28 71 25 21 38 29 0d 10  cc 13 f4 20 20 20 64 79  |(q%!8).....   dy|
000036d0  25 3d 6e 79 25 2d 6f 79  25 0d 10 d6 1d f4 20 20  |%=ny%-oy%.....  |
000036e0  20 49 46 20 28 41 42 53  28 64 79 25 29 3e 34 30  | IF (ABS(dy%)>40|
000036f0  29 20 54 48 45 4e 0d 10  e0 1e f4 20 20 20 20 6e  |) THEN.....    n|
00003700  79 25 3d 6f 79 25 2b 28  53 47 4e 28 64 79 25 29  |y%=oy%+(SGN(dy%)|
00003710  2a 34 30 29 0d 10 ea 1f  f4 20 20 20 20 71 25 21  |*40).....    q%!|
00003720  31 36 3d 6e 79 25 3a 71  25 21 38 3d 6e 79 25 2d  |16=ny%:q%!8=ny%-|
00003730  73 79 25 0d 10 f4 0d f4  20 20 20 45 4e 44 49 46  |sy%.....   ENDIF|
00003740  0d 10 fe 0c f4 20 20 45  4e 44 49 46 0d 11 08 04  |.....  ENDIF....|
00003750  0d 11 12 35 20 20 20 20  f4 20 48 61 76 69 6e 67  |...5    . Having|
00003760  20 61 6c 6c 6f 77 65 64  20 73 70 61 63 65 20 66  | allowed space f|
00003770  6f 72 20 74 68 69 73 20  77 69 6e 64 6f 77 20 69  |or this window i|
00003780  6e 20 74 68 65 0d 11 1c  35 20 20 20 20 f4 20 77  |n the...5    . w|
00003790  69 6e 64 6f 77 20 63 61  73 63 61 64 65 2c 20 61  |indow cascade, a|
000037a0  72 65 20 77 65 20 73 75  72 65 20 77 65 20 77 61  |re we sure we wa|
000037b0  6e 74 20 74 6f 20 6d 6f  76 65 0d 11 26 16 20 20  |nt to move..&.  |
000037c0  20 20 f4 20 69 74 20 6a  75 73 74 20 79 65 74 3f  |  . it just yet?|
000037d0  0d 11 30 06 20 20 0d 11  3a 1b 20 20 20 20 e7 20  |..0.  ..:.    . |
000037e0  28 52 65 6f 70 65 6e 46  6c 61 67 25 3d b9 29 20  |(ReopenFlag%=.) |
000037f0  8c 0d 11 44 30 20 20 20  20 20 c8 99 20 22 58 57  |...D0     .. "XW|
00003800  69 6d 70 5f 53 65 6e 64  4d 65 73 73 61 67 65 22  |imp_SendMessage"|
00003810  2c 32 2c 71 25 2c 43 75  72 72 65 6e 74 57 69 6e  |,2,q%,CurrentWin|
00003820  25 0d 11 4e 09 20 20 20  20 cd 0d 11 58 2e 20 cd  |%..N.    ...X. .|
00003830  3a f4 20 45 6e 64 20 6f  66 20 49 46 20 28 52 65  |:. End of IF (Re|
00003840  6f 72 67 61 6e 69 73 65  57 69 6e 64 6f 77 53 74  |organiseWindowSt|
00003850  61 63 6b 29 20 2e 2e 2e  0d 11 62 07 20 20 20 0d  |ack) .....b.   .|
00003860  11 6c 11 20 20 63 61 73  63 61 64 65 25 2b 3d 31  |.l.  cascade%+=1|
00003870  0d 11 76 06 20 20 0d 11  80 06 20 cd 0d 11 8a 06  |..v.  .... .....|
00003880  20 cd 0d 11 94 05 e1 0d  11 9e 04 0d 11 a8 33 f4  | .............3.|
00003890  20 2a 2a 2a 2a 2a 2a 2a  2a 2a 2a 2a 2a 2a 2a 2a  | ***************|
000038a0  2a 2a 2a 2a 2a 2a 2a 2a  2a 2a 2a 2a 2a 2a 2a 2a  |****************|
000038b0  2a 2a 2a 2a 2a 2a 2a 2a  2a 2a 2a 2a 2a 2a 0d 11  |**************..|
000038c0  b2 33 f4 20 2a 20 41 6e  69 6d 61 74 65 20 74 68  |.3. * Animate th|
000038d0  65 20 69 63 6f 6e 20 62  61 72 20 69 63 6f 6e 20  |e icon bar icon |
000038e0  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |                |
000038f0  2a 0d 11 bc 33 f4 20 2a  2a 2a 2a 2a 2a 2a 2a 2a  |*...3. *********|
00003900  2a 2a 2a 2a 2a 2a 2a 2a  2a 2a 2a 2a 2a 2a 2a 2a  |****************|
*
00003920  2a 2a 2a 2a 0d 11 c6 14  dd f2 41 6e 69 6d 61 74  |****......Animat|
00003930  65 49 63 6f 6e 42 61 72  0d 11 d0 2f 24 69 63 6f  |eIconBar.../$ico|
00003940  6e 62 61 72 64 61 74 61  25 3d 49 63 6f 6e 42 61  |nbardata%=IconBa|
00003950  72 41 6e 69 6d 24 28 49  63 6f 6e 42 61 72 41 6e  |rAnim$(IconBarAn|
00003960  69 6d 53 74 65 70 29 0d  11 da 23 49 63 6f 6e 42  |imStep)...#IconB|
00003970  61 72 41 6e 69 6d 53 74  65 70 2b 3d 49 63 6f 6e  |arAnimStep+=Icon|
00003980  42 61 72 41 6e 69 6d 44  69 72 0d 11 e4 3e e7 20  |BarAnimDir...>. |
00003990  28 49 63 6f 6e 42 61 72  41 6e 69 6d 53 74 65 70  |(IconBarAnimStep|
000039a0  3c 30 20 84 20 49 63 6f  6e 42 61 72 41 6e 69 6d  |<0 . IconBarAnim|
000039b0  53 74 65 70 3d 49 63 6f  6e 42 61 72 41 6e 69 6d  |Step=IconBarAnim|
000039c0  53 69 7a 65 25 29 20 8c  0d 11 ee 15 49 63 6f 6e  |Size%) .....Icon|
000039d0  42 61 72 41 6e 69 6d 53  74 65 70 3d 30 0d 11 f8  |BarAnimStep=0...|
000039e0  29 f4 20 20 49 63 6f 6e  42 61 72 41 6e 69 6d 44  |).  IconBarAnimD|
000039f0  69 72 20 3d 20 49 63 6f  6e 42 61 72 41 6e 69 6d  |ir = IconBarAnim|
00003a00  44 69 72 2a 2d 31 0d 12  02 25 f4 20 49 63 6f 6e  |Dir*-1...%. Icon|
00003a10  42 61 72 41 6e 69 6d 53  74 65 70 2b 3d 49 63 6f  |BarAnimStep+=Ico|
00003a20  6e 42 61 72 41 6e 69 6d  44 69 72 0d 12 0c 05 cd  |nBarAnimDir.....|
00003a30  0d 12 16 33 f4 20 41 63  74 69 76 61 74 65 20 61  |...3. Activate a|
00003a40  6e 20 75 70 64 61 74 65  20 6f 6e 20 74 68 65 20  |n update on the |
00003a50  74 61 73 6b 20 62 61 72  20 69 63 6f 6e 20 2e 2e  |task bar icon ..|
00003a60  2e 2e 2e 0d 12 20 0f 21  62 6c 6f 63 6b 32 25 3d  |..... .!block2%=|
00003a70  2d 32 0d 12 2a 1c 62 6c  6f 63 6b 32 25 21 34 3d  |-2..*.block2%!4=|
00003a80  69 63 6f 6e 62 61 72 68  61 6e 64 6c 65 25 0d 12  |iconbarhandle%..|
00003a90  34 22 c8 99 22 57 69 6d  70 5f 47 65 74 49 63 6f  |4".."Wimp_GetIco|
00003aa0  6e 53 74 61 74 65 22 2c  2c 62 6c 6f 63 6b 32 25  |nState",,block2%|
00003ab0  0d 12 3e 28 62 6c 6f 63  6b 32 25 21 38 3d 30 3a  |..>(block2%!8=0:|
00003ac0  f4 20 44 6f 6e 27 74 20  63 68 61 6e 67 65 20 61  |. Don't change a|
00003ad0  6e 79 74 68 69 6e 67 2c  0d 12 48 2c 62 6c 6f 63  |nything,..H,bloc|
00003ae0  6b 32 25 21 31 32 3d 30  3a f4 20 4a 75 73 74 20  |k2%!12=0:. Just |
00003af0  73 69 67 6e 61 6c 20 61  6e 20 75 70 64 61 74 65  |signal an update|
00003b00  20 2e 2e 2e 0d 12 52 22  c8 99 22 57 69 6d 70 5f  | .....R".."Wimp_|
00003b10  53 65 74 49 63 6f 6e 53  74 61 74 65 22 2c 2c 62  |SetIconState",,b|
00003b20  6c 6f 63 6b 32 25 0d 12  5c 05 e1 0d 12 66 04 0d  |lock2%..\....f..|
00003b30  12 70 33 f4 20 2a 2a 2a  2a 2a 2a 2a 2a 2a 2a 2a  |.p3. ***********|
00003b40  2a 2a 2a 2a 2a 2a 2a 2a  2a 2a 2a 2a 2a 2a 2a 2a  |****************|
*
00003b60  2a 2a 0d 12 7a 32 f4 20  57 68 61 74 20 73 68 61  |**..z2. What sha|
00003b70  6c 6c 20 77 65 20 64 6f  20 64 75 72 69 6e 67 20  |ll we do during |
00003b80  74 68 65 20 69 64 6c 65  20 77 69 6d 70 20 70 6f  |the idle wimp po|
00003b90  6c 6c 20 3f 0d 12 84 2f  f4 20 54 68 69 73 20 69  |ll ?.../. This i|
00003ba0  73 20 74 68 65 20 6d 6f  73 74 20 69 6d 70 6f 72  |s the most impor|
00003bb0  74 61 6e 74 20 61 73 70  65 63 74 20 6f 66 20 74  |tant aspect of t|
00003bc0  68 69 73 0d 12 8e 32 f4  20 70 72 6f 67 72 61 6d  |his...2. program|
00003bd0  20 61 6e 64 20 6f 6e 65  20 77 68 69 63 68 20 73  | and one which s|
00003be0  68 6f 75 6c 64 20 65 6e  61 62 6c 65 20 61 20 6c  |hould enable a l|
00003bf0  6f 74 20 6f 66 0d 12 98  32 f4 20 63 68 61 6e 67  |ot of...2. chang|
00003c00  65 20 77 69 74 68 20 66  75 74 75 72 65 20 76 65  |e with future ve|
00003c10  72 73 69 6f 6e 73 20 6f  66 20 74 68 65 20 73 6f  |rsions of the so|
00003c20  66 74 77 61 72 65 2e 0d  12 a2 33 f4 20 2a 2a 2a  |ftware....3. ***|
00003c30  2a 2a 2a 2a 2a 2a 2a 2a  2a 2a 2a 2a 2a 2a 2a 2a  |****************|
*
00003c50  2a 2a 2a 2a 2a 2a 2a 2a  2a 2a 0d 12 ac 11 dd f2  |**********......|
00003c60  6e 75 6c 6c 5f 72 65 61  73 6f 6e 0d 12 b6 0d ea  |null_reason.....|
00003c70  20 77 69 6e 64 6f 77 25  0d 12 c0 23 c8 99 22 57  | window%...#.."W|
00003c80  69 6d 70 5f 47 65 74 50  6f 69 6e 74 65 72 49 6e  |imp_GetPointerIn|
00003c90  66 6f 22 2c 2c 62 6c 6f  63 6b 25 0d 12 ca 04 0d  |fo",,block%.....|
00003ca0  12 d4 14 f2 61 6c 62 61  5f 70 75 72 67 65 28 34  |....alba_purge(4|
00003cb0  30 30 29 0d 12 de 04 0d  12 e8 0f 58 25 3d 62 6c  |00)........X%=bl|
00003cc0  6f 63 6b 25 21 30 0d 12  f2 0f 59 25 3d 62 6c 6f  |ock%!0....Y%=blo|
00003cd0  63 6b 25 21 34 0d 12 fc  15 77 69 6e 64 6f 77 25  |ck%!4....window%|
00003ce0  3d 62 6c 6f 63 6b 25 21  31 32 0d 13 06 1a 63 75  |=block%!12....cu|
00003cf0  72 72 65 6e 74 77 69 6e  64 6f 77 25 3d 77 69 6e  |rrentwindow%=win|
00003d00  64 6f 77 25 0d 13 10 12  f2 47 65 74 53 63 72 65  |dow%.....GetScre|
00003d10  65 6e 53 69 7a 65 0d 13  1a 04 0d 13 24 24 f4 20  |enSize......$$. |
00003d20  41 72 65 20 61 6e 79 20  6d 6f 75 73 65 20 62 75  |Are any mouse bu|
00003d30  74 74 6f 6e 73 20 70 72  65 73 73 65 64 3f 0d 13  |ttons pressed?..|
00003d40  2e 2e f4 20 49 66 20 6e  6f 74 20 74 68 65 6e 20  |... If not then |
00003d50  72 65 6f 72 67 61 6e 69  73 65 20 5b 63 61 73 63  |reorganise [casc|
00003d60  61 64 65 5d 20 77 69 6e  64 6f 77 73 0d 13 38 1c  |ade] windows..8.|
00003d70  e7 20 28 28 28 62 6c 6f  63 6b 25 21 38 29 20 80  |. (((block%!8) .|
00003d80  20 37 29 3d 30 29 20 8c  0d 13 42 0d 20 f2 63 61  | 7)=0) ...B. .ca|
00003d90  73 63 61 64 65 0d 13 4c  05 cd 0d 13 56 04 0d 13  |scade..L....V...|
00003da0  60 2d f4 20 55 70 64 61  74 65 20 74 68 65 20 74  |`-. Update the t|
00003db0  61 73 6b 20 62 61 72 20  69 63 6f 6e 20 65 61 63  |ask bar icon eac|
00003dc0  68 20 57 49 4d 50 20 50  4f 4c 4c 0d 13 6a 13 f2  |h WIMP POLL..j..|
00003dd0  41 6e 69 6d 61 74 65 49  63 6f 6e 42 61 72 0d 13  |AnimateIconBar..|
00003de0  74 04 0d 13 7e 2d f4 20  49 66 20 74 68 65 20 74  |t...~-. If the t|
00003df0  61 73 6b 20 62 61 72 20  74 6f 6f 6c 20 74 69 70  |ask bar tool tip|
00003e00  20 73 68 6f 77 73 20 74  68 65 20 54 49 4d 45 0d  | shows the TIME.|
00003e10  13 88 18 f4 20 74 68 65  6e 20 75 70 64 61 74 65  |.... then update|
00003e20  20 69 74 20 2e 2e 2e 0d  13 92 25 e7 20 28 54 6f  | it ......%. (To|
00003e30  6f 6c 54 69 70 25 3d 31  29 20 f2 55 70 64 61 74  |olTip%=1) .Updat|
00003e40  65 54 6f 6f 6c 54 69 70  54 69 6d 65 0d 13 9c 04  |eToolTipTime....|
00003e50  0d 13 a6 23 c8 99 22 57  69 6d 70 5f 47 65 74 50  |...#.."Wimp_GetP|
00003e60  6f 69 6e 74 65 72 49 6e  66 6f 22 2c 2c 62 6c 6f  |ointerInfo",,blo|
00003e70  63 6b 25 0d 13 b0 0f 58  25 3d 62 6c 6f 63 6b 25  |ck%....X%=block%|
00003e80  21 30 0d 13 ba 0f 59 25  3d 62 6c 6f 63 6b 25 21  |!0....Y%=block%!|
00003e90  34 0d 13 c4 15 77 69 6e  64 6f 77 25 3d 62 6c 6f  |4....window%=blo|
00003ea0  63 6b 25 21 31 32 0d 13  ce 1a 63 75 72 72 65 6e  |ck%!12....curren|
00003eb0  74 77 69 6e 64 6f 77 25  3d 77 69 6e 64 6f 77 25  |twindow%=window%|
00003ec0  0d 13 d8 04 0d 13 e2 28  f4 20 54 68 69 73 20 6d  |.......(. This m|
00003ed0  61 79 20 62 65 20 6e 65  65 64 65 64 20 74 6f 20  |ay be needed to |
00003ee0  73 74 6f 70 20 66 6c 69  63 6b 65 72 0d 13 ec 0b  |stop flicker....|
00003ef0  f4 20 2a 66 78 31 39 0d  13 f6 04 0d 14 00 0a f4  |. *fx19.........|
00003f00  45 4e 44 49 46 0d 14 0a  23 f4 49 46 20 28 71 66  |ENDIF...#.IF (qf|
00003f10  5f 74 69 6d 65 72 3e 30  29 20 50 52 4f 43 66 6f  |_timer>0) PROCfo|
00003f20  63 75 73 64 65 6c 61 79  0d 14 14 16 e7 20 28 58  |cusdelay..... (X|
00003f30  25 3c 72 65 67 69 6f 6e  78 73 25 29 20 8c 0d 14  |%<regionxs%) ...|
00003f40  1e 12 f2 6c 65 66 74 5f  63 6f 72 6e 65 72 3a e1  |...left_corner:.|
00003f50  0d 14 28 05 cd 0d 14 32  1f e7 20 28 58 25 3e 28  |..(....2.. (X%>(|
00003f60  4f 53 5f 4d 58 25 2d 72  65 67 69 6f 6e 78 73 25  |OS_MX%-regionxs%|
00003f70  29 29 20 8c 0d 14 3c 13  f2 72 69 67 68 74 5f 63  |)) ...<..right_c|
00003f80  6f 72 6e 65 72 3a e1 0d  14 46 05 cd 0d 14 50 23  |orner:...F....P#|
00003f90  f4 20 49 73 20 50 6f 69  6e 74 65 72 20 6f 76 65  |. Is Pointer ove|
00003fa0  72 20 69 63 6f 6e 62 61  72 20 69 63 6f 6e 3f 0d  |r iconbar icon?.|
00003fb0  14 5a 43 f4 20 43 6c 6f  73 65 20 74 6f 6f 6c 74  |.ZC. Close toolt|
00003fc0  69 70 20 69 66 20 70 6f  69 6e 74 65 72 20 6d 6f  |ip if pointer mo|
00003fd0  76 65 73 20 6f 76 65 72  20 69 74 20 28 65 66 66  |ves over it (eff|
00003fe0  65 63 74 69 76 65 6c 79  20 70 75 73 68 20 74 69  |ectively push ti|
00003ff0  70 29 0d 14 64 6c f4 20  49 46 20 28 28 28 62 6c  |p)..dl. IF (((bl|
00004000  6f 63 6b 25 21 31 32 29  3d 2d 32 20 41 4e 44 20  |ock%!12)=-2 AND |
00004010  28 62 6c 6f 63 6b 25 21  31 36 3d 69 63 6f 6e 62  |(block%!16=iconb|
00004020  61 72 68 61 6e 64 6c 65  25 29 29 20 4f 52 20 28  |arhandle%)) OR (|
00004030  77 69 6e 64 6f 77 25 3d  77 68 61 6e 64 6c 65 5f  |window%=whandle_|
00004040  74 6f 6f 6c 74 69 70 25  20 41 4e 44 20 54 6f 6f  |tooltip% AND Too|
00004050  6c 54 69 70 25 3e 30 29  29 20 54 48 45 4e 0d 14  |lTip%>0)) THEN..|
00004060  6e 37 e7 20 28 28 28 62  6c 6f 63 6b 25 21 31 32  |n7. (((block%!12|
00004070  29 3d 2d 32 20 80 20 28  62 6c 6f 63 6b 25 21 31  |)=-2 . (block%!1|
00004080  36 3d 69 63 6f 6e 62 61  72 68 61 6e 64 6c 65 25  |6=iconbarhandle%|
00004090  29 29 29 20 8c 0d 14 78  15 f2 6d 6f 76 65 5f 6f  |))) ...x..move_o|
000040a0  76 65 72 69 63 6f 6e 62  61 72 0d 14 82 05 cc 0d  |vericonbar......|
000040b0  14 8c 11 4f 6c 64 54 6f  6f 6c 54 69 70 25 3d 30  |...OldToolTip%=0|
000040c0  0d 14 96 04 0d 14 a0 39  f4 49 46 20 28 28 28 54  |.......9.IF (((T|
000040d0  49 4d 45 2d 74 6f 6f 6c  74 69 70 5f 74 69 6d 65  |IME-tooltip_time|
000040e0  72 25 29 3e 31 30 30 29  20 41 4e 44 20 54 6f 6f  |r%)>100) AND Too|
000040f0  6c 54 69 70 25 3e 30 29  20 54 48 45 4e 0d 14 aa  |lTip%>0) THEN...|
00004100  14 e7 20 28 54 6f 6f 6c  54 69 70 25 3e 30 29 20  |.. (ToolTip%>0) |
00004110  8c 0d 14 b4 3a e7 20 28  62 6c 6f 63 6b 25 21 31  |....:. (block%!1|
00004120  36 20 3c 3e 20 77 68 61  6e 64 6c 65 5f 74 6f 6f  |6 <> whandle_too|
00004130  6c 74 69 70 25 29 20 69  63 6f 6e 62 61 72 5f 74  |ltip%) iconbar_t|
00004140  69 6d 65 72 66 6c 61 67  25 3d 30 0d 14 be 11 f2  |imerflag%=0.....|
00004150  43 6c 6f 73 65 54 6f 6f  6c 54 69 70 0d 14 c8 05  |CloseToolTip....|
00004160  cc 0d 14 d2 18 f4 69 63  6f 6e 62 61 72 5f 74 69  |......iconbar_ti|
00004170  6d 65 72 25 3d 54 49 4d  45 0d 14 dc 18 69 63 6f  |mer%=TIME....ico|
00004180  6e 62 61 72 5f 74 69 6d  65 72 66 6c 61 67 25 3d  |nbar_timerflag%=|
00004190  30 0d 14 e6 05 cd 0d 14  f0 05 cd 0d 14 fa 28 f4  |0.............(.|
000041a0  49 46 20 28 77 69 6e 64  6f 77 25 3d 2d 32 29 20  |IF (window%=-2) |
000041b0  66 69 72 73 74 6d 65 6e  75 68 61 6e 64 6c 65 25  |firstmenuhandle%|
000041c0  3d 2d 32 0d 15 04 41 f4  49 46 20 28 77 69 6e 64  |=-2...A.IF (wind|
000041d0  6f 77 25 3c 3e 2d 32 29  20 50 52 4f 43 70 6f 69  |ow%<>-2) PROCpoi|
000041e0  6e 74 65 72 6e 6f 74 6f  6e 69 63 6f 6e 62 61 72  |nternotoniconbar|
000041f0  3a 52 45 4d 20 4d 75 73  74 20 63 6f 6d 65 20 66  |:REM Must come f|
00004200  69 72 73 74 0d 15 0e 49  e7 20 28 28 58 25 3e 72  |irst...I. ((X%>r|
00004210  65 67 69 6f 6e 78 73 25  20 80 20 58 25 3c 28 4f  |egionxs% . X%<(O|
00004220  53 5f 4d 58 25 2d 72 65  67 69 6f 6e 78 73 25 29  |S_MX%-regionxs%)|
00004230  29 20 84 20 59 25 3e 72  65 67 69 6f 6e 79 73 25  |) . Y%>regionys%|
00004240  29 20 f2 6f 75 74 6f 66  66 6f 63 75 73 0d 15 18  |) .outoffocus...|
00004250  53 f4 49 46 20 28 28 58  25 3e 72 65 67 69 6f 6e  |S.IF ((X%>region|
00004260  78 73 25 20 41 4e 44 20  58 25 3c 28 4f 53 5f 4d  |xs% AND X%<(OS_M|
00004270  58 25 2d 72 65 67 69 6f  6e 78 73 25 29 29 20 41  |X%-regionxs%)) A|
00004280  4e 44 20 59 25 3d 30 29  20 50 52 4f 43 70 6f 69  |ND Y%=0) PROCpoi|
00004290  6e 74 65 72 6f 6e 62 6f  74 74 6f 6d 65 64 67 65  |nteronbottomedge|
000042a0  0d 15 22 0e e7 20 28 59  25 3d 30 29 20 8c 0d 15  |..".. (Y%=0) ...|
000042b0  2c 2d e7 20 28 42 6f 74  74 6f 6d 45 64 67 65 46  |,-. (BottomEdgeF|
000042c0  6c 61 67 3d 30 29 20 f2  70 6f 69 6e 74 65 72 6f  |lag=0) .pointero|
000042d0  6e 62 6f 74 74 6f 6d 65  64 67 65 0d 15 36 05 cc  |nbottomedge..6..|
000042e0  0d 15 40 14 42 6f 74 74  6f 6d 45 64 67 65 46 6c  |..@.BottomEdgeFl|
000042f0  61 67 3d 30 0d 15 4a 05  cd 0d 15 54 04 0d 15 5e  |ag=0..J....T...^|
00004300  15 f4 50 52 4f 43 43 6c  6f 73 65 54 6f 6f 6c 54  |..PROCCloseToolT|
00004310  69 70 0d 15 68 17 f4 50  52 4f 43 4f 70 65 6e 54  |ip..h..PROCOpenT|
00004320  6f 6f 6c 54 69 70 28 32  29 0d 15 72 05 e1 0d 15  |oolTip(2)..r....|
00004330  7c 04 0d 15 86 39 f4 20  2a 2a 2a 2a 2a 2a 2a 2a  ||....9. ********|
00004340  2a 2a 2a 2a 2a 2a 2a 2a  2a 2a 2a 2a 2a 2a 2a 2a  |****************|
*
00004360  2a 2a 2a 2a 2a 2a 2a 2a  2a 2a 2a 0d 15 90 04 0d  |***********.....|
00004370  15 9a 19 dd f2 70 6f 69  6e 74 65 72 6f 6e 62 6f  |.....pointeronbo|
00004380  74 74 6f 6d 65 64 67 65  0d 15 a4 14 ea 20 73 74  |ttomedge..... st|
00004390  61 63 6b 70 6f 73 69 74  69 6f 6e 25 0d 15 ae 34  |ackposition%...4|
000043a0  f4 20 49 73 20 69 63 6f  6e 62 61 72 20 61 74 20  |. Is iconbar at |
000043b0  74 6f 70 20 6f 66 20 73  74 61 63 6b 3f 20 49 66  |top of stack? If|
000043c0  20 6e 6f 74 20 6d 61 6b  65 20 69 74 20 73 6f 2e  | not make it so.|
000043d0  0d 15 b8 1e f4 53 59 53  22 57 69 6d 70 5f 50 72  |.....SYS"Wimp_Pr|
000043e0  6f 63 65 73 73 4b 65 79  22 2c 26 31 64 63 0d 15  |ocessKey",&1dc..|
000043f0  c2 04 0d 15 cc 30 f4 20  50 52 4f 43 65 72 72 6f  |.....0. PROCerro|
00004400  72 28 22 50 6f 69 6e 74  65 72 20 6f 6e 20 62 6f  |r("Pointer on bo|
00004410  74 74 6f 6d 20 65 64 67  65 2e 22 2b 43 48 52 24  |ttom edge."+CHR$|
00004420  30 29 0d 15 d6 31 f4 20  4f 70 65 6e 20 75 70 20  |0)...1. Open up |
00004430  73 74 61 72 74 20 6d 65  6e 75 20 69 66 20 69 74  |start menu if it|
00004440  27 73 20 6e 6f 74 20 61  6c 72 65 61 64 79 20 6f  |'s not already o|
00004450  70 65 6e 0d 15 e0 14 42  6f 74 74 6f 6d 45 64 67  |pen....BottomEdg|
00004460  65 46 6c 61 67 3d 31 0d  15 ea 1b 52 65 6f 72 67  |eFlag=1....Reorg|
00004470  61 6e 69 73 65 57 69 6e  64 6f 77 53 74 61 63 6b  |aniseWindowStack|
00004480  3d 31 0d 15 f4 1b f4 20  43 6c 6f 73 65 20 72 65  |=1..... Close re|
00004490  6c 65 76 61 6e 74 20 77  69 6e 64 6f 77 0d 15 fe  |levant window...|
000044a0  1e f4 53 59 53 20 22 57  69 6d 70 5f 43 72 65 61  |..SYS "Wimp_Crea|
000044b0  74 65 4d 65 6e 75 22 2c  2c 2d 31 0d 16 08 15 f4  |teMenu",,-1.....|
000044c0  20 4f 70 65 6e 20 73 74  61 72 74 20 6d 65 6e 75  | Open start menu|
000044d0  0d 16 12 1a f4 50 52 4f  43 63 6c 69 63 6b 5f 69  |.....PROCclick_i|
000044e0  63 6f 6e 62 61 72 6d 65  6e 75 0d 16 1c 0c f4 45  |conbarmenu.....E|
000044f0  4e 44 50 52 4f 43 0d 16  26 04 0d 16 30 0f f4 21  |NDPROC..&...0..!|
00004500  62 6c 6f 63 6b 25 3d 2d  32 0d 16 3a 25 f4 53 59  |block%=-2..:%.SY|
00004510  53 22 57 69 6d 70 5f 47  65 74 57 69 6e 64 6f 77  |S"Wimp_GetWindow|
00004520  53 74 61 74 65 22 2c 2c  62 6c 6f 63 6b 25 0d 16  |State",,block%..|
00004530  44 1d f4 73 74 61 63 6b  70 6f 73 69 74 69 6f 6e  |D..stackposition|
00004540  25 3d 62 6c 6f 63 6b 25  21 32 38 0d 16 4e 21 f4  |%=block%!28..N!.|
00004550  49 46 20 28 73 74 61 63  6b 70 6f 73 69 74 69 6f  |IF (stackpositio|
00004560  6e 25 3c 3e 2d 31 29 20  54 48 45 4e 0d 16 58 11  |n%<>-1) THEN..X.|
00004570  f4 62 6c 6f 63 6b 25 21  32 38 3d 2d 31 0d 16 62  |.block%!28=-1..b|
00004580  21 f4 53 59 53 22 57 69  6d 70 5f 4f 70 65 6e 57  |!.SYS"Wimp_OpenW|
00004590  69 6e 64 6f 77 22 2c 2c  62 6c 6f 63 6b 25 0d 16  |indow",,block%..|
000045a0  6c 20 f4 20 54 6f 67 67  6c 65 20 69 63 6f 6e 20  |l . Toggle icon |
000045b0  62 61 72 20 62 61 63 6b  2f 66 72 6f 6e 74 0d 16  |bar back/front..|
000045c0  76 1c c8 99 22 57 69 6d  70 5f 50 72 6f 63 65 73  |v..."Wimp_Proces|
000045d0  73 4b 65 79 22 2c 26 31  64 63 0d 16 80 04 0d 16  |sKey",&1dc......|
000045e0  8a 30 f4 20 52 65 6f 70  65 6e 20 64 75 6d 6d 79  |.0. Reopen dummy|
000045f0  62 61 63 6b 20 77 69 6e  64 6f 77 20 61 74 20 62  |back window at b|
00004600  6f 74 74 6f 6d 20 6f 66  20 73 74 61 63 6b 0d 16  |ottom of stack..|
00004610  94 1e 21 62 6c 6f 63 6b  25 3d 77 68 61 6e 64 6c  |..!block%=whandl|
00004620  65 5f 64 75 6d 6d 79 62  61 63 6b 25 0d 16 9e 23  |e_dummyback%...#|
00004630  c8 99 22 57 69 6d 70 5f  47 65 74 57 69 6e 64 6f  |.."Wimp_GetWindo|
00004640  77 53 74 61 74 65 22 2c  2c 62 6c 6f 63 6b 25 0d  |wState",,block%.|
00004650  16 a8 22 62 6c 6f 63 6b  25 21 38 3d 2d 31 30 32  |.."block%!8=-102|
00004660  34 3a 62 6c 6f 63 6b 25  21 31 36 3d 2d 31 30 32  |4:block%!16=-102|
00004670  34 0d 16 b2 10 62 6c 6f  63 6b 25 21 32 38 3d 2d  |4....block%!28=-|
00004680  32 0d 16 bc 1f c8 99 22  57 69 6d 70 5f 4f 70 65  |2......"Wimp_Ope|
00004690  6e 57 69 6e 64 6f 77 22  2c 2c 62 6c 6f 63 6b 25  |nWindow",,block%|
000046a0  0d 16 c6 28 61 66 74 65  72 25 3d 77 68 61 6e 64  |...(after%=whand|
000046b0  6c 65 5f 64 75 6d 6d 79  62 61 63 6b 25 3a 63 61  |le_dummyback%:ca|
000046c0  73 63 61 64 65 25 3d 30  0d 16 d0 04 0d 16 da 05  |scade%=0........|
000046d0  e1 0d 16 e4 04 0d 16 ee  19 dd f2 70 6f 69 6e 74  |...........point|
000046e0  65 72 6e 6f 74 6f 6e 69  63 6f 6e 62 61 72 0d 16  |ernotoniconbar..|
000046f0  f8 0d f4 20 45 4e 44 50  52 4f 43 0d 17 02 37 f4  |... ENDPROC...7.|
00004700  20 49 73 20 69 63 6f 6e  62 61 72 20 6f 6e 20 62  | Is iconbar on b|
00004710  6f 74 74 6f 6d 20 6f 66  20 73 74 61 63 6b 3f 20  |ottom of stack? |
00004720  49 66 20 6e 6f 74 20 6d  61 6b 65 20 69 74 20 73  |If not make it s|
00004730  6f 2f 0d 17 0c 3d f4 20  4e 6f 20 61 6c 6c 6f 77  |o/...=. No allow|
00004740  65 64 20 74 6f 20 6d 61  6e 75 61 6c 6c 79 20 6f  |ed to manually o|
00004750  70 65 6e 20 69 63 6f 6e  62 61 72 20 73 6f 20 75  |pen iconbar so u|
00004760  73 65 20 6f 75 72 20 69  6e 74 65 72 6e 61 6c 0d  |se our internal.|
00004770  17 16 0b f4 20 76 61 6c  75 65 0d 17 20 47 e7 20  |.... value.. G. |
00004780  28 54 6f 6f 6c 54 69 70  25 3d 30 20 84 20 28 54  |(ToolTip%=0 . (T|
00004790  6f 6f 6c 54 69 70 25 3c  3e 30 20 80 20 63 75 72  |oolTip%<>0 . cur|
000047a0  72 65 6e 74 77 69 6e 64  6f 77 25 3c 3e 77 68 61  |rentwindow%<>wha|
000047b0  6e 64 6c 65 5f 74 6f 6f  6c 74 69 70 25 29 29 20  |ndle_tooltip%)) |
000047c0  8c 0d 17 2a 39 e7 20 66  69 72 73 74 6d 65 6e 75  |...*9. firstmenu|
000047d0  68 61 6e 64 6c 65 25 3d  2d 32 20 66 69 72 73 74  |handle%=-2 first|
000047e0  6d 65 6e 75 68 61 6e 64  6c 65 25 3d 63 75 72 72  |menuhandle%=curr|
000047f0  65 6e 74 77 69 6e 64 6f  77 25 0d 17 34 05 cd 0d  |entwindow%..4...|
00004800  17 3e 04 0d 17 48 0e 21  62 6c 6f 63 6b 25 3d 2d  |.>...H.!block%=-|
00004810  32 0d 17 52 23 c8 99 22  57 69 6d 70 5f 47 65 74  |2..R#.."Wimp_Get|
00004820  57 69 6e 64 6f 77 53 74  61 74 65 22 2c 2c 62 6c  |WindowState",,bl|
00004830  6f 63 6b 25 0d 17 5c 1c  73 74 61 63 6b 70 6f 73  |ock%..\.stackpos|
00004840  69 74 69 6f 6e 25 3d 62  6c 6f 63 6b 25 21 32 38  |ition%=block%!28|
00004850  0d 17 66 2f f4 49 46 20  28 73 74 61 63 6b 70 6f  |..f/.IF (stackpo|
00004860  73 69 74 69 6f 6e 25 3d  6f 6c 64 73 74 61 63 6b  |sition%=oldstack|
00004870  70 6f 73 69 74 69 6f 6e  25 29 20 54 48 45 4e 0d  |position%) THEN.|
00004880  17 70 2b e7 20 28 73 74  61 63 6b 70 6f 73 69 74  |.p+. (stackposit|
00004890  69 6f 6e 25 3c 3e 6f 6c  64 73 74 61 63 6b 70 6f  |ion%<>oldstackpo|
000048a0  73 69 74 69 6f 6e 25 29  20 8c 0d 17 7a 11 f4 62  |sition%) ...z..b|
000048b0  6c 6f 63 6b 25 21 32 38  3d 2d 32 0d 17 84 22 f4  |lock%!28=-2...".|
000048c0  53 59 53 22 57 69 6d 70  5f 43 6c 6f 73 65 57 69  |SYS"Wimp_CloseWi|
000048d0  6e 64 6f 77 22 2c 2c 62  6c 6f 63 6b 25 0d 17 8e  |ndow",,block%...|
000048e0  40 e7 20 28 63 75 72 72  65 6e 74 77 69 6e 64 6f  |@. (currentwindo|
000048f0  77 25 3c 3e 66 69 72 73  74 6d 65 6e 75 68 61 6e  |w%<>firstmenuhan|
00004900  64 6c 65 25 20 80 20 66  69 72 73 74 6d 65 6e 75  |dle% . firstmenu|
00004910  68 61 6e 64 6c 65 25 3e  2d 32 29 20 8c 0d 17 98  |handle%>-2) ....|
00004920  1c c8 99 22 57 69 6d 70  5f 50 72 6f 63 65 73 73  |..."Wimp_Process|
00004930  4b 65 79 22 2c 26 31 64  63 0d 17 a2 17 66 69 72  |Key",&1dc....fir|
00004940  73 74 6d 65 6e 75 68 61  6e 64 6c 65 25 3d 2d 33  |stmenuhandle%=-3|
00004950  0d 17 ac 0a f4 45 4e 44  49 46 0d 17 b6 0e 21 62  |.....ENDIF....!b|
00004960  6c 6f 63 6b 25 3d 2d 32  0d 17 c0 23 c8 99 22 57  |lock%=-2...#.."W|
00004970  69 6d 70 5f 47 65 74 57  69 6e 64 6f 77 53 74 61  |imp_GetWindowSta|
00004980  74 65 22 2c 2c 62 6c 6f  63 6b 25 0d 17 ca 1c 73  |te",,block%....s|
00004990  74 61 63 6b 70 6f 73 69  74 69 6f 6e 25 3d 62 6c  |tackposition%=bl|
000049a0  6f 63 6b 25 21 32 38 0d  17 d4 3d f4 49 46 20 28  |ock%!28...=.IF (|
000049b0  73 74 61 63 6b 70 6f 73  69 74 69 6f 6e 25 3c 3e  |stackposition%<>|
000049c0  2d 31 29 20 6f 6c 64 73  74 61 63 6b 70 6f 73 69  |-1) oldstackposi|
000049d0  74 69 6f 6e 25 3d 73 74  61 63 6b 70 6f 73 69 74  |tion%=stackposit|
000049e0  69 6f 6e 25 0d 17 de 24  6f 6c 64 73 74 61 63 6b  |ion%...$oldstack|
000049f0  70 6f 73 69 74 69 6f 6e  25 3d 73 74 61 63 6b 70  |position%=stackp|
00004a00  6f 73 69 74 69 6f 6e 25  0d 17 e8 05 cd 0d 17 f2  |osition%........|
00004a10  05 cd 0d 17 fc 05 e1 0d  18 06 04 0d 18 10 3e f4  |..............>.|
00004a20  20 49 46 20 28 69 6e 74  65 72 6e 61 6c 73 74 61  | IF (internalsta|
00004a30  63 6b 70 6f 73 69 74 69  6f 6e 25 3d 2d 31 20 41  |ckposition%=-1 A|
00004a40  4e 44 20 63 75 72 72 65  6e 74 77 69 6e 64 6f 77  |ND currentwindow|
00004a50  25 3e 30 29 20 54 48 45  4e 0d 18 1a 1f f4 20 53  |%>0) THEN..... S|
00004a60  59 53 22 57 69 6d 70 5f  50 72 6f 63 65 73 73 4b  |YS"Wimp_ProcessK|
00004a70  65 79 22 2c 26 31 64 63  0d 18 24 37 f4 20 50 52  |ey",&1dc..$7. PR|
00004a80  4f 43 65 72 72 6f 72 28  22 57 69 6e 64 6f 77 20  |OCerror("Window |
00004a90  3a 20 22 2b 53 54 52 24  28 63 75 72 72 65 6e 74  |: "+STR$(current|
00004aa0  77 69 6e 64 6f 77 25 29  2b 43 48 52 24 30 29 0d  |window%)+CHR$0).|
00004ab0  18 2e 2d f4 20 69 6e 74  65 72 6e 61 6c 73 74 61  |..-. internalsta|
00004ac0  63 6b 70 6f 73 69 74 69  6f 6e 25 3d 2d 32 3a 52  |ckposition%=-2:R|
00004ad0  45 4d 20 41 74 20 62 6f  74 74 6f 6d 0d 18 38 0b  |EM At bottom..8.|
00004ae0  f4 20 45 4e 44 49 46 0d  18 42 0d f4 20 45 4e 44  |. ENDIF..B.. END|
00004af0  50 52 4f 43 0d 18 4c 04  0d 18 56 10 dd f2 6f 75  |PROC..L...V...ou|
00004b00  74 6f 66 66 6f 63 75 73  0d 18 60 28 e7 20 28 69  |toffocus..`(. (i|
00004b10  6e 5f 6c 65 66 74 72 65  67 69 6f 6e 29 20 8c 20  |n_leftregion) . |
00004b20  f2 6c 65 61 76 65 6c 65  66 74 72 65 67 69 6f 6e  |.leaveleftregion|
00004b30  0d 18 6a 2a e7 20 28 69  6e 5f 72 69 67 68 74 72  |..j*. (in_rightr|
00004b40  65 67 69 6f 6e 29 20 8c  20 f2 6c 65 61 76 65 72  |egion) . .leaver|
00004b50  69 67 68 74 72 65 67 69  6f 6e 0d 18 74 0e 71 66  |ightregion..t.qf|
00004b60  5f 74 69 6d 65 72 3d 91  0d 18 7e 05 e1 0d 18 88  |_timer=...~.....|
00004b70  04 0d 18 92 15 dd f2 6c  65 61 76 65 6c 65 66 74  |.......leaveleft|
00004b80  72 65 67 69 6f 6e 0d 18  9c 13 69 6e 5f 6c 65 66  |region....in_lef|
00004b90  74 72 65 67 69 6f 6e 3d  a3 0d 18 a6 05 e1 0d 18  |tregion=........|
00004ba0  b0 04 0d 18 ba 16 dd f2  6c 65 61 76 65 72 69 67  |........leaverig|
00004bb0  68 74 72 65 67 69 6f 6e  0d 18 c4 14 69 6e 5f 72  |htregion....in_r|
00004bc0  69 67 68 74 72 65 67 69  6f 6e 3d a3 0d 18 ce 05  |ightregion=.....|
00004bd0  e1 0d 18 d8 04 0d 18 e2  10 dd f2 66 6f 63 75 73  |...........focus|
00004be0  64 65 6c 61 79 0d 18 ec  36 e7 20 28 28 91 2d 70  |delay...6. ((.-p|
00004bf0  61 75 73 65 25 29 3e 71  66 5f 74 69 6d 65 72 29  |ause%)>qf_timer)|
00004c00  20 8c 20 71 66 5f 74 69  6d 65 72 3d 2d 31 3a f2  | . qf_timer=-1:.|
00004c10  4f 70 65 6e 49 6e 66 6f  42 6f 78 0d 18 f6 05 e1  |OpenInfoBox.....|
00004c20  0d 19 00 04 0d 19 0a 11  dd f2 6c 65 66 74 5f 63  |..........left_c|
00004c30  6f 72 6e 65 72 0d 19 14  2c e7 20 28 69 6e 5f 6c  |orner...,. (in_l|
00004c40  65 66 74 72 65 67 69 6f  6e 3d a3 29 20 65 63 5f  |eftregion=.) ec_|
00004c50  74 69 6d 65 72 3d 91 3a  65 63 5f 66 6c 61 67 3d  |timer=.:ec_flag=|
00004c60  a3 0d 19 1e 13 69 6e 5f  6c 65 66 74 72 65 67 69  |.....in_leftregi|
00004c70  6f 6e 3d b9 0d 19 28 23  f4 20 43 68 65 63 6b 20  |on=...(#. Check |
00004c80  69 66 20 77 69 6e 64 6f  77 73 20 6e 65 65 64 20  |if windows need |
00004c90  6f 70 65 6e 69 6e 67 0d  19 32 24 e7 20 28 91 2d  |opening..2$. (.-|
00004ca0  65 63 5f 74 69 6d 65 72  3e 3d 35 30 20 80 20 65  |ec_timer>=50 . e|
00004cb0  63 5f 66 6c 61 67 3d a3  29 20 8c 0d 19 3c 1a f2  |c_flag=.) ...<..|
00004cc0  72 65 6f 70 65 6e 66 69  6c 65 72 3a 65 63 5f 66  |reopenfiler:ec_f|
00004cd0  6c 61 67 3d b9 0d 19 46  05 cd 0d 19 50 04 0d 19  |lag=...F....P...|
00004ce0  5a 05 e1 0d 19 64 04 0d  19 6e 12 dd f2 72 69 67  |Z....d...n...rig|
00004cf0  68 74 5f 63 6f 72 6e 65  72 0d 19 78 2d e7 20 28  |ht_corner..x-. (|
00004d00  69 6e 5f 72 69 67 68 74  72 65 67 69 6f 6e 3d a3  |in_rightregion=.|
00004d10  29 20 65 63 5f 74 69 6d  65 72 3d 91 3a 65 63 5f  |) ec_timer=.:ec_|
00004d20  66 6c 61 67 3d a3 0d 19  82 14 69 6e 5f 72 69 67  |flag=.....in_rig|
00004d30  68 74 72 65 67 69 6f 6e  3d b9 0d 19 8c 23 f4 20  |htregion=....#. |
00004d40  43 68 65 63 6b 20 69 66  20 77 69 6e 64 6f 77 73  |Check if windows|
00004d50  20 6e 65 65 64 20 63 6c  6f 73 69 6e 67 0d 19 96  | need closing...|
00004d60  33 f4 49 46 20 28 54 49  4d 45 2d 65 63 5f 74 69  |3.IF (TIME-ec_ti|
00004d70  6d 65 72 3e 3d 31 30 30  20 41 4e 44 20 65 63 5f  |mer>=100 AND ec_|
00004d80  66 6c 61 67 3d 46 41 4c  53 45 29 20 54 48 45 4e  |flag=FALSE) THEN|
00004d90  0d 19 a0 13 e7 20 28 65  63 5f 66 6c 61 67 3d a3  |..... (ec_flag=.|
00004da0  29 20 8c 0d 19 aa 27 f2  63 6c 6f 73 65 66 69 6c  |) ....'.closefil|
00004db0  65 72 3a f2 43 6c 6f 73  65 49 6e 66 6f 42 6f 78  |er:.CloseInfoBox|
00004dc0  3a 65 63 5f 66 6c 61 67  3d b9 0d 19 b4 05 cd 0d  |:ec_flag=.......|
00004dd0  19 be 05 e1 0d 19 c8 04  0d 19 d2 39 f4 20 2a 2a  |...........9. **|
00004de0  2a 2a 2a 2a 2a 2a 2a 2a  2a 2a 2a 2a 2a 2a 2a 2a  |****************|
*
00004e10  2a 0d 19 dc 04 0d 19 e6  11 dd f2 4f 70 65 6e 49  |*..........OpenI|
00004e20  6e 66 6f 42 6f 78 0d 19  f0 19 21 62 6c 6f 63 6b  |nfoBox....!block|
00004e30  25 3d 77 68 61 6e 64 6c  65 5f 69 6e 66 6f 25 0d  |%=whandle_info%.|
00004e40  19 fa 23 c8 99 22 57 69  6d 70 5f 47 65 74 57 69  |..#.."Wimp_GetWi|
00004e50  6e 64 6f 77 53 74 61 74  65 22 2c 2c 62 6c 6f 63  |ndowState",,bloc|
00004e60  6b 25 0d 1a 04 1f c8 99  22 57 69 6d 70 5f 4f 70  |k%......"Wimp_Op|
00004e70  65 6e 57 69 6e 64 6f 77  22 2c 2c 62 6c 6f 63 6b  |enWindow",,block|
00004e80  25 0d 1a 0e 05 e1 0d 1a  18 04 0d 1a 22 12 dd f2  |%..........."...|
00004e90  43 6c 6f 73 65 49 6e 66  6f 42 6f 78 0d 1a 2c 19  |CloseInfoBox..,.|
00004ea0  21 62 6c 6f 63 6b 25 3d  77 68 61 6e 64 6c 65 5f  |!block%=whandle_|
00004eb0  69 6e 66 6f 25 0d 1a 36  20 c8 99 22 57 69 6d 70  |info%..6 .."Wimp|
00004ec0  5f 43 6c 6f 73 65 57 69  6e 64 6f 77 22 2c 2c 62  |_CloseWindow",,b|
00004ed0  6c 6f 63 6b 25 0d 1a 40  05 e1 0d 1a 4a 04 0d 1a  |lock%..@....J...|
00004ee0  54 39 f4 20 2a 2a 2a 2a  2a 2a 2a 2a 2a 2a 2a 2a  |T9. ************|
00004ef0  2a 2a 2a 2a 2a 2a 2a 2a  2a 2a 2a 2a 2a 2a 2a 2a  |****************|
*
00004f10  2a 2a 2a 2a 2a 2a 2a 0d  1a 5e 04 0d 1a 68 13 dd  |*******..^...h..|
00004f20  f2 43 72 65 61 74 65 54  6f 6f 6c 54 69 70 0d 1a  |.CreateToolTip..|
00004f30  72 0e ea 20 58 4f 66 66  73 65 74 25 0d 1a 7c 31  |r.. XOffset%..|1|
00004f40  f4 20 43 72 65 61 74 65  20 74 68 65 20 74 6f 6f  |. Create the too|
00004f50  6c 74 69 70 20 61 6e 64  20 64 75 6d 6d 79 20 67  |ltip and dummy g|
00004f60  6c 6f 62 61 6c 20 77 69  6e 64 6f 77 73 0d 1a 86  |lobal windows...|
00004f70  36 f4 20 54 68 65 20 74  6f 6f 6c 74 69 70 20 77  |6. The tooltip w|
00004f80  69 6e 64 6f 77 20 64 69  73 70 6c 61 79 73 20 62  |indow displays b|
00004f90  72 69 65 66 20 69 6e 66  6f 20 61 62 6f 75 74 20  |rief info about |
00004fa0  74 68 65 0d 1a 90 1d f4  20 69 63 6f 6e 20 75 6e  |the..... icon un|
00004fb0  64 65 72 20 74 68 65 20  70 6f 69 6e 74 65 72 2e  |der the pointer.|
00004fc0  0d 1a 9a 36 f4 20 54 68  65 20 64 75 6d 6d 79 20  |...6. The dummy |
00004fd0  77 69 6e 64 6f 77 20 69  73 20 6e 65 65 64 65 64  |window is needed|
00004fe0  20 74 6f 20 70 72 6f 76  69 64 65 20 61 20 27 62  | to provide a 'b|
00004ff0  6f 74 74 6f 6d 27 0d 1a  a4 33 f4 20 77 69 6e 64  |ottom'...3. wind|
00005000  6f 77 20 66 6f 72 20 74  68 65 20 77 69 6e 64 6f  |ow for the windo|
00005010  77 20 72 65 2d 6f 72 67  61 6e 69 73 61 74 69 6f  |w re-organisatio|
00005020  6e 20 74 6f 6f 6c 20 74  6f 0d 1a ae 11 f4 20 73  |n tool to..... s|
00005030  74 61 72 74 20 66 72 6f  6d 2e 0d 1a b8 04 0d 1a  |tart from.......|
00005040  c2 1f f4 20 43 72 65 61  74 65 20 74 68 65 20 74  |... Create the t|
00005050  6f 6f 6c 74 69 70 20 77  69 6e 64 6f 77 0d 1a cc  |ooltip window...|
00005060  10 54 69 70 24 3d 22 48  65 6c 6c 6f 22 0d 1a d6  |.Tip$="Hello"...|
00005070  1e 58 53 25 3d 28 a9 28  54 69 70 24 29 2a 31 36  |.XS%=(.(Tip$)*16|
00005080  29 2b 32 30 3a 59 53 25  3d 34 30 0d 1a e0 23 c8  |)+20:YS%=40...#.|
00005090  99 22 57 69 6d 70 5f 47  65 74 50 6f 69 6e 74 65  |."Wimp_GetPointe|
000050a0  72 49 6e 66 6f 22 2c 2c  62 6c 6f 63 6b 25 0d 1a  |rInfo",,block%..|
000050b0  ea 27 f4 20 44 65 66 69  6e 65 20 73 63 72 65 65  |.'. Define scree|
000050c0  6e 20 70 6f 73 69 74 69  6f 6e 20 6f 66 20 74 6f  |n position of to|
000050d0  6f 6c 74 69 70 0d 1a f4  12 58 4f 66 66 73 65 74  |oltip....XOffset|
000050e0  25 3d 58 53 25 2f 32 0d  1a fe 1f e7 20 28 58 4f  |%=XS%/2..... (XO|
000050f0  66 66 73 65 74 25 3e 33  32 29 20 58 4f 66 66 73  |ffset%>32) XOffs|
00005100  65 74 25 3d 33 32 0d 1b  08 19 58 25 3d 28 21 62  |et%=32....X%=(!b|
00005110  6c 6f 63 6b 25 29 2d 58  4f 66 66 73 65 74 25 0d  |lock%)-XOffset%.|
00005120  1b 12 14 59 25 3d 28 62  6c 6f 63 6b 25 21 34 29  |...Y%=(block%!4)|
00005130  2b 32 34 0d 1b 1c 12 f2  47 65 74 53 63 72 65 65  |+24.....GetScree|
00005140  6e 53 69 7a 65 0d 1b 26  25 e7 20 28 28 58 25 2b  |nSize..&%. ((X%+|
00005150  58 53 25 29 3e 4f 53 5f  4d 58 25 29 20 58 25 3d  |XS%)>OS_MX%) X%=|
00005160  4f 53 5f 4d 58 25 2d 58  53 25 0d 1b 30 11 e7 20  |OS_MX%-XS%..0.. |
00005170  28 58 25 3c 30 29 20 58  25 3d 30 0d 1b 3a 2e e7  |(X%<0) X%=0..:..|
00005180  20 28 28 59 25 2b 59 53  25 29 3e 4f 53 5f 4d 59  | ((Y%+YS%)>OS_MY|
00005190  25 29 20 59 25 3d 28 62  6c 6f 63 6b 25 21 34 29  |%) Y%=(block%!4)|
000051a0  2d 28 59 53 25 2b 32 34  29 0d 1b 44 1a f4 20 49  |-(YS%+24)..D.. I|
000051b0  46 20 28 28 59 25 2d 59  53 25 29 3c 30 29 20 59  |F ((Y%-YS%)<0) Y|
000051c0  25 3d 30 0d 1b 4e 3b 21  62 6c 6f 63 6b 25 3d 58  |%=0..N;!block%=X|
000051d0  25 3a 62 6c 6f 63 6b 25  21 34 3d 59 25 3a 62 6c  |%:block%!4=Y%:bl|
000051e0  6f 63 6b 25 21 38 3d 58  25 2b 58 53 25 3a 62 6c  |ock%!8=X%+XS%:bl|
000051f0  6f 63 6b 25 21 31 32 3d  59 25 2b 59 53 25 0d 1b  |ock%!12=Y%+YS%..|
00005200  58 1a 58 53 25 3d 28 35  31 32 2a 31 36 29 2b 32  |X.XS%=(512*16)+2|
00005210  30 3a 59 53 25 3d 34 30  0d 1b 62 2c 62 6c 6f 63  |0:YS%=40..b,bloc|
00005220  6b 25 21 31 36 3d 30 3a  62 6c 6f 63 6b 25 21 32  |k%!16=0:block%!2|
00005230  30 3d 30 3a f4 20 53 63  72 6f 6c 6c 20 6f 66 66  |0=0:. Scroll off|
00005240  73 65 74 73 0d 1b 6c 3a  62 6c 6f 63 6b 25 21 32  |sets..l:block%!2|
00005250  34 3d 2d 31 3a 62 6c 6f  63 6b 25 21 32 38 3d 26  |4=-1:block%!28=&|
00005260  38 30 30 30 30 30 35 30  3a f4 20 44 65 70 74 68  |80000050:. Depth|
00005270  2c 20 77 69 6e 64 6f 77  20 66 6c 61 67 73 0d 1b  |, window flags..|
00005280  76 33 62 6c 6f 63 6b 25  21 33 32 3d 26 30 30 30  |v3block%!32=&000|
00005290  37 30 32 30 37 3a 62 6c  6f 63 6b 25 21 33 36 3d  |70207:block%!36=|
000052a0  26 31 32 30 31 30 33 3a  f4 20 43 6f 6c 6f 75 72  |&120103:. Colour|
000052b0  73 0d 1b 80 38 62 6c 6f  63 6b 25 21 34 30 3d 30  |s...8block%!40=0|
000052c0  3a 62 6c 6f 63 6b 25 21  34 34 3d 2d 59 53 25 3a  |:block%!44=-YS%:|
000052d0  62 6c 6f 63 6b 25 21 34  38 3d 58 53 25 3a 62 6c  |block%!48=XS%:bl|
000052e0  6f 63 6b 25 21 35 32 3d  30 0d 1b 8a 3b 62 6c 6f  |ock%!52=0...;blo|
000052f0  63 6b 25 21 35 36 3d 26  31 39 3a 62 6c 6f 63 6b  |ck%!56=&19:block|
00005300  25 21 36 30 3d 33 3c 3c  31 32 3a f4 20 54 69 74  |%!60=3<<12:. Tit|
00005310  6c 65 62 61 72 2f 77 6f  72 6b 61 72 65 61 20 66  |lebar/workarea f|
00005320  6c 61 67 73 0d 1b 94 29  62 6c 6f 63 6b 25 21 36  |lags...)block%!6|
00005330  34 3d 30 3a 62 6c 6f 63  6b 25 21 36 38 3d 30 3a  |4=0:block%!68=0:|
00005340  f4 20 53 70 72 69 74 65  20 61 72 65 61 0d 1b 9e  |. Sprite area...|
00005350  13 24 28 62 6c 6f 63 6b  25 2b 37 32 29 3d bd 30  |.$(block%+72)=.0|
00005360  0d 1b a8 0f 62 6c 6f 63  6b 25 21 38 34 3d 31 0d  |....block%!84=1.|
00005370  1b b2 29 f4 20 44 65 66  69 6e 65 20 31 20 69 63  |..). Define 1 ic|
00005380  6f 6e 20 73 74 61 72 74  69 6e 67 20 61 74 20 62  |on starting at b|
00005390  6c 6f 63 6b 25 21 38 38  0d 1b bc 2c 21 74 6f 6f  |lock%!88...,!too|
000053a0  6c 74 69 70 69 63 6f 6e  25 3d 30 3a f4 20 4e 75  |ltipicon%=0:. Nu|
000053b0  6c 6c 20 76 61 6c 69 64  61 74 69 6f 6e 20 73 74  |ll validation st|
000053c0  72 69 6e 67 0d 1b c6 29  24 28 74 6f 6f 6c 74 69  |ring...)$(toolti|
000053d0  70 69 63 6f 6e 25 2b 34  29 3d 54 69 70 24 2b bd  |picon%+4)=Tip$+.|
000053e0  30 3a f4 20 49 63 6f 6e  20 74 65 78 74 0d 1b d0  |0:. Icon text...|
000053f0  1e 62 6c 6f 63 6b 25 21  38 38 3d 34 3a f4 20 42  |.block%!88=4:. B|
00005400  6f 75 6e 64 69 6e 67 20  62 6f 78 0d 1b da 20 62  |ounding box... b|
00005410  6c 6f 63 6b 25 21 39 32  3d 2d 34 30 3a f4 20 42  |lock%!92=-40:. B|
00005420  6f 75 6e 64 69 6e 67 20  62 6f 78 0d 1b e4 3b 62  |ounding box...;b|
00005430  6c 6f 63 6b 25 21 39 36  3d 28 28 35 31 32 2a 31  |lock%!96=((512*1|
00005440  36 29 2b 32 30 29 3a f4  20 42 6f 75 6e 64 69 6e  |6)+20):. Boundin|
00005450  67 20 62 6f 78 20 6f 66  20 5f 6c 61 72 67 65 73  |g box of _larges|
00005460  74 5f 20 74 69 70 0d 1b  ee 1f 62 6c 6f 63 6b 25  |t_ tip....block%|
00005470  21 31 30 30 3d 30 3a f4  20 42 6f 75 6e 64 69 6e  |!100=0:. Boundin|
00005480  67 20 62 6f 78 0d 1b f8  18 62 6c 6f 63 6b 25 21  |g box....block%!|
00005490  31 30 34 3d 26 31 37 30  30 33 31 30 31 0d 1c 02  |104=&17003101...|
000054a0  1d 62 6c 6f 63 6b 25 21  31 30 38 3d 74 6f 6f 6c  |.block%!108=tool|
000054b0  74 69 70 69 63 6f 6e 25  2b 34 0d 1c 0c 1b 62 6c  |tipicon%+4....bl|
000054c0  6f 63 6b 25 21 31 31 32  3d 74 6f 6f 6c 74 69 70  |ock%!112=tooltip|
000054d0  69 63 6f 6e 25 0d 1c 16  22 62 6c 6f 63 6b 25 21  |icon%..."block%!|
000054e0  31 31 36 3d 35 31 32 3a  f4 20 42 75 66 66 65 72  |116=512:. Buffer|
000054f0  20 6c 65 6e 67 74 68 0d  1c 20 34 c8 99 22 57 69  | length.. 4.."Wi|
00005500  6d 70 5f 43 72 65 61 74  65 57 69 6e 64 6f 77 22  |mp_CreateWindow"|
00005510  2c 2c 62 6c 6f 63 6b 25  20 b8 20 77 68 61 6e 64  |,,block% . whand|
00005520  6c 65 5f 74 6f 6f 6c 74  69 70 25 0d 1c 2a 1e 58  |le_tooltip%..*.X|
00005530  53 25 3d 28 a9 28 54 69  70 24 29 2a 31 36 29 2b  |S%=(.(Tip$)*16)+|
00005540  32 30 3a 59 53 25 3d 34  30 0d 1c 34 23 c8 99 22  |20:YS%=40..4#.."|
00005550  57 69 6d 70 5f 47 65 74  50 6f 69 6e 74 65 72 49  |Wimp_GetPointerI|
00005560  6e 66 6f 22 2c 2c 62 6c  6f 63 6b 25 0d 1c 3e 27  |nfo",,block%..>'|
00005570  f4 20 44 65 66 69 6e 65  20 73 63 72 65 65 6e 20  |. Define screen |
00005580  70 6f 73 69 74 69 6f 6e  20 6f 66 20 74 6f 6f 6c  |position of tool|
00005590  74 69 70 0d 1c 48 12 58  4f 66 66 73 65 74 25 3d  |tip..H.XOffset%=|
000055a0  58 53 25 2f 32 0d 1c 52  1f e7 20 28 58 4f 66 66  |XS%/2..R.. (XOff|
000055b0  73 65 74 25 3e 33 32 29  20 58 4f 66 66 73 65 74  |set%>32) XOffset|
000055c0  25 3d 33 32 0d 1c 5c 19  58 25 3d 28 21 62 6c 6f  |%=32..\.X%=(!blo|
000055d0  63 6b 25 29 2d 58 4f 66  66 73 65 74 25 0d 1c 66  |ck%)-XOffset%..f|
000055e0  12 f2 47 65 74 53 63 72  65 65 6e 53 69 7a 65 0d  |..GetScreenSize.|
000055f0  1c 70 25 e7 20 28 28 58  25 2b 58 53 25 29 3e 4f  |.p%. ((X%+XS%)>O|
00005600  53 5f 4d 58 25 29 20 58  25 3d 4f 53 5f 4d 58 25  |S_MX%) X%=OS_MX%|
00005610  2d 58 53 25 0d 1c 7a 11  e7 20 28 58 25 3c 30 29  |-XS%..z.. (X%<0)|
00005620  20 58 25 3d 30 0d 1c 84  2e e7 20 28 28 59 25 2b  | X%=0..... ((Y%+|
00005630  59 53 25 29 3e 4f 53 5f  4d 59 25 29 20 59 25 3d  |YS%)>OS_MY%) Y%=|
00005640  28 62 6c 6f 63 6b 25 21  34 29 2d 28 59 53 25 2b  |(block%!4)-(YS%+|
00005650  32 34 29 0d 1c 8e 0c 59  25 3d 2d 31 30 32 34 0d  |24)....Y%=-1024.|
00005660  1c 98 1a f4 20 49 46 20  28 28 59 25 2d 59 53 25  |.... IF ((Y%-YS%|
00005670  29 3c 30 29 20 59 25 3d  30 0d 1c a2 1e f4 20 47  |)<0) Y%=0..... G|
00005680  65 74 20 54 6f 6f 6c 74  69 70 20 77 69 6e 64 6f  |et Tooltip windo|
00005690  77 20 73 74 61 74 65 0d  1c ac 1c 21 62 6c 6f 63  |w state....!bloc|
000056a0  6b 25 3d 77 68 61 6e 64  6c 65 5f 74 6f 6f 6c 74  |k%=whandle_toolt|
000056b0  69 70 25 0d 1c b6 23 c8  99 22 57 69 6d 70 5f 47  |ip%...#.."Wimp_G|
000056c0  65 74 57 69 6e 64 6f 77  53 74 61 74 65 22 2c 2c  |etWindowState",,|
000056d0  62 6c 6f 63 6b 25 0d 1c  c0 3f 62 6c 6f 63 6b 25  |block%...?block%|
000056e0  21 34 3d 58 25 3a 62 6c  6f 63 6b 25 21 38 3d 2d  |!4=X%:block%!8=-|
000056f0  31 30 32 34 3a 62 6c 6f  63 6b 25 21 31 32 3d 58  |1024:block%!12=X|
00005700  25 2b 58 53 25 3a 62 6c  6f 63 6b 25 21 31 36 3d  |%+XS%:block%!16=|
00005710  2d 31 30 32 34 0d 1c ca  2c 62 6c 6f 63 6b 25 21  |-1024...,block%!|
00005720  32 30 3d 30 3a 62 6c 6f  63 6b 25 21 32 34 3d 30  |20=0:block%!24=0|
00005730  3a f4 20 53 63 72 6f 6c  6c 20 6f 66 66 73 65 74  |:. Scroll offset|
00005740  73 0d 1c d4 12 f4 20 62  6c 6f 63 6b 25 21 32 38  |s..... block%!28|
00005750  3d 2d 31 0d 1c de 1f c8  99 22 57 69 6d 70 5f 4f  |=-1......"Wimp_O|
00005760  70 65 6e 57 69 6e 64 6f  77 22 2c 2c 62 6c 6f 63  |penWindow",,bloc|
00005770  6b 25 0d 1c e8 0e 54 6f  6f 6c 54 69 70 25 3d 30  |k%....ToolTip%=0|
00005780  0d 1c f2 04 0d 1c fc 04  0d 1d 06 04 0d 1d 10 22  |..............."|
00005790  f4 20 43 72 65 61 74 65  20 74 68 65 20 64 75 6d  |. Create the dum|
000057a0  6d 79 20 62 61 63 6b 20  77 69 6e 64 6f 77 0d 1d  |my back window..|
000057b0  1a 27 f4 20 44 65 66 69  6e 65 20 73 63 72 65 65  |.'. Define scree|
000057c0  6e 20 70 6f 73 69 74 69  6f 6e 20 6f 66 20 74 6f  |n position of to|
000057d0  6f 6c 74 69 70 0d 1d 24  1e 58 53 25 3d 28 a9 28  |oltip..$.XS%=(.(|
000057e0  54 69 70 24 29 2a 31 36  29 2b 32 30 3a 59 53 25  |Tip$)*16)+20:YS%|
000057f0  3d 34 30 0d 1d 2e 12 58  4f 66 66 73 65 74 25 3d  |=40....XOffset%=|
00005800  58 53 25 2f 32 0d 1d 38  1f e7 20 28 58 4f 66 66  |XS%/2..8.. (XOff|
00005810  73 65 74 25 3e 33 32 29  20 58 4f 66 66 73 65 74  |set%>32) XOffset|
00005820  25 3d 33 32 0d 1d 42 09  58 25 3d 36 34 0d 1d 4c  |%=32..B.X%=64..L|
00005830  0c 59 25 3d 2d 31 30 32  34 0d 1d 56 3b 21 62 6c  |.Y%=-1024..V;!bl|
00005840  6f 63 6b 25 3d 58 25 3a  62 6c 6f 63 6b 25 21 34  |ock%=X%:block%!4|
00005850  3d 59 25 3a 62 6c 6f 63  6b 25 21 38 3d 58 25 2b  |=Y%:block%!8=X%+|
00005860  58 53 25 3a 62 6c 6f 63  6b 25 21 31 32 3d 59 25  |XS%:block%!12=Y%|
00005870  2b 59 53 25 0d 1d 60 1a  58 53 25 3d 28 35 31 32  |+YS%..`.XS%=(512|
00005880  2a 31 36 29 2b 32 30 3a  59 53 25 3d 34 30 0d 1d  |*16)+20:YS%=40..|
00005890  6a 2c 62 6c 6f 63 6b 25  21 31 36 3d 30 3a 62 6c  |j,block%!16=0:bl|
000058a0  6f 63 6b 25 21 32 30 3d  30 3a f4 20 53 63 72 6f  |ock%!20=0:. Scro|
000058b0  6c 6c 20 6f 66 66 73 65  74 73 0d 1d 74 3a 62 6c  |ll offsets..t:bl|
000058c0  6f 63 6b 25 21 32 34 3d  2d 31 3a 62 6c 6f 63 6b  |ock%!24=-1:block|
000058d0  25 21 32 38 3d 26 38 30  30 30 30 30 35 30 3a f4  |%!28=&80000050:.|
000058e0  20 44 65 70 74 68 2c 20  77 69 6e 64 6f 77 20 66  | Depth, window f|
000058f0  6c 61 67 73 0d 1d 7e 33  62 6c 6f 63 6b 25 21 33  |lags..~3block%!3|
00005900  32 3d 26 30 30 30 37 30  32 30 37 3a 62 6c 6f 63  |2=&00070207:bloc|
00005910  6b 25 21 33 36 3d 26 31  32 30 31 30 33 3a f4 20  |k%!36=&120103:. |
00005920  43 6f 6c 6f 75 72 73 0d  1d 88 38 62 6c 6f 63 6b  |Colours...8block|
00005930  25 21 34 30 3d 30 3a 62  6c 6f 63 6b 25 21 34 34  |%!40=0:block%!44|
00005940  3d 2d 59 53 25 3a 62 6c  6f 63 6b 25 21 34 38 3d  |=-YS%:block%!48=|
00005950  58 53 25 3a 62 6c 6f 63  6b 25 21 35 32 3d 30 0d  |XS%:block%!52=0.|
00005960  1d 92 3b 62 6c 6f 63 6b  25 21 35 36 3d 26 31 39  |..;block%!56=&19|
00005970  3a 62 6c 6f 63 6b 25 21  36 30 3d 33 3c 3c 31 32  |:block%!60=3<<12|
00005980  3a f4 20 54 69 74 6c 65  62 61 72 2f 77 6f 72 6b  |:. Titlebar/work|
00005990  61 72 65 61 20 66 6c 61  67 73 0d 1d 9c 29 62 6c  |area flags...)bl|
000059a0  6f 63 6b 25 21 36 34 3d  30 3a 62 6c 6f 63 6b 25  |ock%!64=0:block%|
000059b0  21 36 38 3d 30 3a f4 20  53 70 72 69 74 65 20 61  |!68=0:. Sprite a|
000059c0  72 65 61 0d 1d a6 13 24  28 62 6c 6f 63 6b 25 2b  |rea....$(block%+|
000059d0  37 32 29 3d bd 30 0d 1d  b0 0f 62 6c 6f 63 6b 25  |72)=.0....block%|
000059e0  21 38 34 3d 31 0d 1d ba  29 f4 20 44 65 66 69 6e  |!84=1...). Defin|
000059f0  65 20 31 20 69 63 6f 6e  20 73 74 61 72 74 69 6e  |e 1 icon startin|
00005a00  67 20 61 74 20 62 6c 6f  63 6b 25 21 38 38 0d 1d  |g at block%!88..|
00005a10  c4 2c 21 74 6f 6f 6c 74  69 70 69 63 6f 6e 25 3d  |.,!tooltipicon%=|
00005a20  30 3a f4 20 4e 75 6c 6c  20 76 61 6c 69 64 61 74  |0:. Null validat|
00005a30  69 6f 6e 20 73 74 72 69  6e 67 0d 1d ce 29 24 28  |ion string...)$(|
00005a40  74 6f 6f 6c 74 69 70 69  63 6f 6e 25 2b 34 29 3d  |tooltipicon%+4)=|
00005a50  54 69 70 24 2b bd 30 3a  f4 20 49 63 6f 6e 20 74  |Tip$+.0:. Icon t|
00005a60  65 78 74 0d 1d d8 1e 62  6c 6f 63 6b 25 21 38 38  |ext....block%!88|
00005a70  3d 34 3a f4 20 42 6f 75  6e 64 69 6e 67 20 62 6f  |=4:. Bounding bo|
00005a80  78 0d 1d e2 20 62 6c 6f  63 6b 25 21 39 32 3d 2d  |x... block%!92=-|
00005a90  33 32 3a f4 20 42 6f 75  6e 64 69 6e 67 20 62 6f  |32:. Bounding bo|
00005aa0  78 0d 1d ec 3b 62 6c 6f  63 6b 25 21 39 36 3d 28  |x...;block%!96=(|
00005ab0  28 35 31 32 2a 31 36 29  2b 32 30 29 3a f4 20 42  |(512*16)+20):. B|
00005ac0  6f 75 6e 64 69 6e 67 20  62 6f 78 20 6f 66 20 5f  |ounding box of _|
00005ad0  6c 61 72 67 65 73 74 5f  20 74 69 70 0d 1d f6 20  |largest_ tip... |
00005ae0  62 6c 6f 63 6b 25 21 31  30 30 3d 2d 38 3a f4 20  |block%!100=-8:. |
00005af0  42 6f 75 6e 64 69 6e 67  20 62 6f 78 0d 1e 00 18  |Bounding box....|
00005b00  62 6c 6f 63 6b 25 21 31  30 34 3d 26 31 37 30 30  |block%!104=&1700|
00005b10  33 31 30 31 0d 1e 0a 1d  62 6c 6f 63 6b 25 21 31  |3101....block%!1|
00005b20  30 38 3d 74 6f 6f 6c 74  69 70 69 63 6f 6e 25 2b  |08=tooltipicon%+|
00005b30  34 0d 1e 14 1b 62 6c 6f  63 6b 25 21 31 31 32 3d  |4....block%!112=|
00005b40  74 6f 6f 6c 74 69 70 69  63 6f 6e 25 0d 1e 1e 22  |tooltipicon%..."|
00005b50  62 6c 6f 63 6b 25 21 31  31 36 3d 35 31 32 3a f4  |block%!116=512:.|
00005b60  20 42 75 66 66 65 72 20  6c 65 6e 67 74 68 0d 1e  | Buffer length..|
00005b70  28 36 c8 99 22 57 69 6d  70 5f 43 72 65 61 74 65  |(6.."Wimp_Create|
00005b80  57 69 6e 64 6f 77 22 2c  2c 62 6c 6f 63 6b 25 20  |Window",,block% |
00005b90  b8 20 77 68 61 6e 64 6c  65 5f 64 75 6d 6d 79 62  |. whandle_dummyb|
00005ba0  61 63 6b 25 0d 1e 32 1e  f4 20 47 65 74 20 54 6f  |ack%..2.. Get To|
00005bb0  6f 6c 74 69 70 20 77 69  6e 64 6f 77 20 73 74 61  |oltip window sta|
00005bc0  74 65 0d 1e 3c 1e 21 62  6c 6f 63 6b 25 3d 77 68  |te..<.!block%=wh|
00005bd0  61 6e 64 6c 65 5f 64 75  6d 6d 79 62 61 63 6b 25  |andle_dummyback%|
00005be0  0d 1e 46 23 c8 99 22 57  69 6d 70 5f 47 65 74 57  |..F#.."Wimp_GetW|
00005bf0  69 6e 64 6f 77 53 74 61  74 65 22 2c 2c 62 6c 6f  |indowState",,blo|
00005c00  63 6b 25 0d 1e 50 10 62  6c 6f 63 6b 25 21 32 38  |ck%..P.block%!28|
00005c10  3d 2d 32 0d 1e 5a 1f c8  99 22 57 69 6d 70 5f 4f  |=-2..Z..."Wimp_O|
00005c20  70 65 6e 57 69 6e 64 6f  77 22 2c 2c 62 6c 6f 63  |penWindow",,bloc|
00005c30  6b 25 0d 1e 64 28 61 66  74 65 72 25 3d 77 68 61  |k%..d(after%=wha|
00005c40  6e 64 6c 65 5f 64 75 6d  6d 79 62 61 63 6b 25 3a  |ndle_dummyback%:|
00005c50  63 61 73 63 61 64 65 25  3d 30 0d 1e 6e 04 0d 1e  |cascade%=0..n...|
00005c60  78 05 e1 0d 1e 82 04 0d  1e 8c 14 dd f2 44 65 73  |x............Des|
00005c70  74 72 6f 79 54 6f 6f 6c  54 69 70 0d 1e 96 1c 21  |troyToolTip....!|
00005c80  62 6c 6f 63 6b 25 3d 77  68 61 6e 64 6c 65 5f 74  |block%=whandle_t|
00005c90  6f 6f 6c 74 69 70 25 0d  1e a0 20 c8 99 22 57 69  |ooltip%... .."Wi|
00005ca0  6d 70 5f 43 6c 6f 73 65  57 69 6e 64 6f 77 22 2c  |mp_CloseWindow",|
00005cb0  2c 62 6c 6f 63 6b 25 0d  1e aa 21 c8 99 22 57 69  |,block%...!.."Wi|
00005cc0  6d 70 5f 44 65 6c 65 74  65 57 69 6e 64 6f 77 22  |mp_DeleteWindow"|
00005cd0  2c 2c 62 6c 6f 63 6b 25  0d 1e b4 04 0d 1e be 1e  |,,block%........|
00005ce0  21 62 6c 6f 63 6b 25 3d  77 68 61 6e 64 6c 65 5f  |!block%=whandle_|
00005cf0  64 75 6d 6d 79 62 61 63  6b 25 0d 1e c8 20 c8 99  |dummyback%... ..|
00005d00  22 57 69 6d 70 5f 43 6c  6f 73 65 57 69 6e 64 6f  |"Wimp_CloseWindo|
00005d10  77 22 2c 2c 62 6c 6f 63  6b 25 0d 1e d2 21 c8 99  |w",,block%...!..|
00005d20  22 57 69 6d 70 5f 44 65  6c 65 74 65 57 69 6e 64  |"Wimp_DeleteWind|
00005d30  6f 77 22 2c 2c 62 6c 6f  63 6b 25 0d 1e dc 05 e1  |ow",,block%.....|
00005d40  0d 1e e6 04 0d 1e f0 17  dd f2 55 70 64 61 74 65  |..........Update|
00005d50  54 6f 6f 6c 54 69 70 54  69 6d 65 0d 1e fa 17 ea  |ToolTipTime.....|
00005d60  20 58 4f 66 66 73 65 74  25 2c 20 4f 6c 64 54 69  | XOffset%, OldTi|
00005d70  70 24 0d 1f 04 10 4f 6c  64 54 69 70 24 3d 54 69  |p$....OldTip$=Ti|
00005d80  70 24 0d 1f 0e 0c f2 47  65 74 44 61 74 65 0d 1f  |p$.....GetDate..|
00005d90  18 11 54 69 70 24 3d 41  70 70 44 61 74 65 24 0d  |..Tip$=AppDate$.|
00005da0  1f 22 17 e7 20 28 4f 6c  64 54 69 70 24 3c 3e 54  |.".. (OldTip$<>T|
00005db0  69 70 24 29 20 8c 0d 1f  2c 33 f4 20 49 46 20 28  |ip$) ...,3. IF (|
00005dc0  54 69 70 49 44 25 3d 31  29 20 54 69 70 24 3d 22  |TipID%=1) Tip$="|
00005dd0  61 66 74 65 72 25 20 3d  20 26 22 2b 53 54 52 24  |after% = &"+STR$|
00005de0  7e 28 61 66 74 65 72 25  29 0d 1f 36 1e 58 53 25  |~(after%)..6.XS%|
00005df0  3d 28 a9 28 54 69 70 24  29 2a 31 36 29 2b 32 30  |=(.(Tip$)*16)+20|
00005e00  3a 59 53 25 3d 34 30 0d  1f 40 24 c8 99 22 57 69  |:YS%=40..@$.."Wi|
00005e10  6d 70 5f 47 65 74 50 6f  69 6e 74 65 72 49 6e 66  |mp_GetPointerInf|
00005e20  6f 22 2c 2c 62 6c 6f 63  6b 32 25 0d 1f 4a 21 f4  |o",,block2%..J!.|
00005e30  20 41 64 6a 75 73 74 20  54 6f 6f 6c 74 69 70 20  | Adjust Tooltip |
00005e40  77 69 6e 64 6f 77 20 73  74 61 74 65 0d 1f 54 1d  |window state..T.|
00005e50  21 62 6c 6f 63 6b 32 25  3d 77 68 61 6e 64 6c 65  |!block2%=whandle|
00005e60  5f 74 6f 6f 6c 74 69 70  25 0d 1f 5e 24 c8 99 22  |_tooltip%..^$.."|
00005e70  57 69 6d 70 5f 47 65 74  57 69 6e 64 6f 77 53 74  |Wimp_GetWindowSt|
00005e80  61 74 65 22 2c 2c 62 6c  6f 63 6b 32 25 0d 1f 68  |ate",,block2%..h|
00005e90  10 58 25 3d 62 6c 6f 63  6b 32 25 21 34 0d 1f 72  |.X%=block2%!4..r|
00005ea0  10 59 25 3d 62 6c 6f 63  6b 32 25 21 38 0d 1f 7c  |.Y%=block2%!8..||
00005eb0  1d 21 62 6c 6f 63 6b 32  25 3d 77 68 61 6e 64 6c  |.!block2%=whandl|
00005ec0  65 5f 74 6f 6f 6c 74 69  70 25 0d 1f 86 41 62 6c  |e_tooltip%...Abl|
00005ed0  6f 63 6b 32 25 21 34 3d  58 25 3a 62 6c 6f 63 6b  |ock2%!4=X%:block|
00005ee0  32 25 21 38 3d 59 25 3a  62 6c 6f 63 6b 32 25 21  |2%!8=Y%:block2%!|
00005ef0  31 32 3d 58 25 2b 58 53  25 3a 62 6c 6f 63 6b 32  |12=X%+XS%:block2|
00005f00  25 21 31 36 3d 59 25 2b  59 53 25 0d 1f 90 2e 62  |%!16=Y%+YS%....b|
00005f10  6c 6f 63 6b 32 25 21 32  30 3d 30 3a 62 6c 6f 63  |lock2%!20=0:bloc|
00005f20  6b 32 25 21 32 34 3d 30  3a f4 20 53 63 72 6f 6c  |k2%!24=0:. Scrol|
00005f30  6c 20 6f 66 66 73 65 74  73 0d 1f 9a 11 62 6c 6f  |l offsets....blo|
00005f40  63 6b 32 25 21 32 38 3d  2d 31 0d 1f a4 29 24 28  |ck2%!28=-1...)$(|
00005f50  74 6f 6f 6c 74 69 70 69  63 6f 6e 25 2b 34 29 3d  |tooltipicon%+4)=|
00005f60  54 69 70 24 2b bd 30 3a  f4 20 49 63 6f 6e 20 74  |Tip$+.0:. Icon t|
00005f70  65 78 74 0d 1f ae 22 f4  53 59 53 22 57 69 6d 70  |ext...".SYS"Wimp|
00005f80  5f 4f 70 65 6e 57 69 6e  64 6f 77 22 2c 2c 62 6c  |_OpenWindow",,bl|
00005f90  6f 63 6b 32 25 0d 1f b8  11 f4 20 55 70 64 61 74  |ock2%..... Updat|
00005fa0  65 20 69 63 6f 6e 0d 1f  c2 1d 21 62 6c 6f 63 6b  |e icon....!block|
00005fb0  32 25 3d 77 68 61 6e 64  6c 65 5f 74 6f 6f 6c 74  |2%=whandle_toolt|
00005fc0  69 70 25 0d 1f cc 0f 62  6c 6f 63 6b 32 25 21 34  |ip%....block2%!4|
00005fd0  3d 30 0d 1f d6 22 c8 99  22 57 69 6d 70 5f 47 65  |=0...".."Wimp_Ge|
00005fe0  74 49 63 6f 6e 53 74 61  74 65 22 2c 2c 62 6c 6f  |tIconState",,blo|
00005ff0  63 6b 32 25 0d 1f e0 28  62 6c 6f 63 6b 32 25 21  |ck2%...(block2%!|
00006000  38 3d 30 3a f4 20 44 6f  6e 27 74 20 63 68 61 6e  |8=0:. Don't chan|
00006010  67 65 20 61 6e 79 74 68  69 6e 67 2c 0d 1f ea 2c  |ge anything,...,|
00006020  62 6c 6f 63 6b 32 25 21  31 32 3d 30 3a f4 20 4a  |block2%!12=0:. J|
00006030  75 73 74 20 73 69 67 6e  61 6c 20 61 6e 20 75 70  |ust signal an up|
00006040  64 61 74 65 20 2e 2e 2e  0d 1f f4 22 c8 99 22 57  |date ......".."W|
00006050  69 6d 70 5f 53 65 74 49  63 6f 6e 53 74 61 74 65  |imp_SetIconState|
00006060  22 2c 2c 62 6c 6f 63 6b  32 25 0d 1f fe 05 cd 0d  |",,block2%......|
00006070  20 08 05 e1 0d 20 12 04  0d 20 1c 19 dd f2 4f 70  | .... ... ....Op|
00006080  65 6e 54 6f 6f 6c 54 69  70 28 54 69 70 49 44 25  |enToolTip(TipID%|
00006090  29 0d 20 26 22 ea 20 58  4f 66 66 73 65 74 25 2c  |). &". XOffset%,|
000060a0  20 52 61 6e 64 54 69 70  49 44 25 2c 20 52 53 65  | RandTipID%, RSe|
000060b0  65 64 25 0d 20 30 19 e7  20 28 54 69 70 49 44 25  |ed%. 0.. (TipID%|
000060c0  3d 54 6f 6f 6c 54 69 70  25 29 20 e1 0d 20 3a 20  |=ToolTip%) .. : |
000060d0  e7 20 28 54 6f 6f 6c 54  69 70 25 3e 30 29 20 f2  |. (ToolTip%>0) .|
000060e0  43 6c 6f 73 65 54 6f 6f  6c 54 69 70 0d 20 44 1b  |CloseToolTip. D.|
000060f0  f4 20 43 72 65 61 74 65  20 54 6f 6f 6c 54 69 70  |. Create ToolTip|
00006100  20 57 69 6e 64 6f 77 0d  20 4e 12 e7 20 28 54 69  | Window. N.. (Ti|
00006110  70 49 44 25 3d 31 29 20  8c 0d 20 58 0d 20 f2 47  |pID%=1) .. X. .G|
00006120  65 74 44 61 74 65 0d 20  62 12 20 54 69 70 24 3d  |etDate. b. Tip$=|
00006130  41 70 70 44 61 74 65 24  0d 20 6c 05 cd 0d 20 76  |AppDate$. l... v|
00006140  12 e7 20 28 54 69 70 49  44 25 3d 32 29 20 8c 0d  |.. (TipID%=2) ..|
00006150  20 80 20 20 f4 20 54 69  70 24 3d 22 43 6c 69 63  | .  . Tip$="Clic|
00006160  6b 20 66 6f 72 20 6d 6f  72 65 20 2e 2e 2e 22 0d  |k for more ...".|
00006170  20 81 0c 20 54 69 70 24  3d 22 22 0d 20 94 1e 20  | .. Tip$="". .. |
00006180  52 61 6e 64 54 69 70 49  44 25 3d b3 28 52 61 6e  |RandTipID%=.(Ran|
00006190  64 54 69 70 4d 61 78 25  29 0d 20 a8 24 20 54 69  |dTipMax%). .$ Ti|
000061a0  70 24 3d 54 69 70 24 2b  52 61 6e 64 54 69 70 24  |p$=Tip$+RandTip$|
000061b0  28 52 61 6e 64 54 69 70  49 44 25 29 20 0d 20 bc  |(RandTipID%) . .|
000061c0  05 cd 0d 20 c6 3b e7 20  28 54 69 70 49 44 25 3d  |... .;. (TipID%=|
000061d0  33 29 20 54 69 70 24 3d  22 63 75 72 72 65 6e 74  |3) Tip$="current|
000061e0  77 69 6e 64 6f 77 25 20  3d 20 22 2b c3 28 63 75  |window% = "+.(cu|
000061f0  72 72 65 6e 74 77 69 6e  64 6f 77 25 29 0d 20 d0  |rrentwindow%). .|
00006200  33 f4 20 49 46 20 28 54  69 70 49 44 25 3d 31 29  |3. IF (TipID%=1)|
00006210  20 54 69 70 24 3d 22 61  66 74 65 72 25 20 3d 20  | Tip$="after% = |
00006220  26 22 2b 53 54 52 24 7e  28 61 66 74 65 72 25 29  |&"+STR$~(after%)|
00006230  0d 20 da 1e 58 53 25 3d  28 a9 28 54 69 70 24 29  |. ..XS%=(.(Tip$)|
00006240  2a 31 36 29 2b 32 30 3a  59 53 25 3d 34 30 0d 20  |*16)+20:YS%=40. |
00006250  e4 23 c8 99 22 57 69 6d  70 5f 47 65 74 50 6f 69  |.#.."Wimp_GetPoi|
00006260  6e 74 65 72 49 6e 66 6f  22 2c 2c 62 6c 6f 63 6b  |nterInfo",,block|
00006270  25 0d 20 ee 27 f4 20 44  65 66 69 6e 65 20 73 63  |%. .'. Define sc|
00006280  72 65 65 6e 20 70 6f 73  69 74 69 6f 6e 20 6f 66  |reen position of|
00006290  20 74 6f 6f 6c 74 69 70  0d 20 f8 12 58 4f 66 66  | tooltip. ..XOff|
000062a0  73 65 74 25 3d 58 53 25  2f 32 0d 21 02 1f e7 20  |set%=XS%/2.!... |
000062b0  28 58 4f 66 66 73 65 74  25 3e 33 32 29 20 58 4f  |(XOffset%>32) XO|
000062c0  66 66 73 65 74 25 3d 33  32 0d 21 0c 19 58 25 3d  |ffset%=32.!..X%=|
000062d0  28 21 62 6c 6f 63 6b 25  29 2d 58 4f 66 66 73 65  |(!block%)-XOffse|
000062e0  74 25 0d 21 16 14 59 25  3d 28 62 6c 6f 63 6b 25  |t%.!..Y%=(block%|
000062f0  21 34 29 2b 32 34 0d 21  20 12 f2 47 65 74 53 63  |!4)+24.! ..GetSc|
00006300  72 65 65 6e 53 69 7a 65  0d 21 2a 25 e7 20 28 28  |reenSize.!*%. ((|
00006310  58 25 2b 58 53 25 29 3e  4f 53 5f 4d 58 25 29 20  |X%+XS%)>OS_MX%) |
00006320  58 25 3d 4f 53 5f 4d 58  25 2d 58 53 25 0d 21 34  |X%=OS_MX%-XS%.!4|
00006330  11 e7 20 28 58 25 3c 30  29 20 58 25 3d 30 0d 21  |.. (X%<0) X%=0.!|
00006340  3e 2e e7 20 28 28 59 25  2b 59 53 25 29 3e 4f 53  |>.. ((Y%+YS%)>OS|
00006350  5f 4d 59 25 29 20 59 25  3d 28 62 6c 6f 63 6b 25  |_MY%) Y%=(block%|
00006360  21 34 29 2d 28 59 53 25  2b 32 34 29 0d 21 48 1a  |!4)-(YS%+24).!H.|
00006370  f4 20 49 46 20 28 28 59  25 2d 59 53 25 29 3c 30  |. IF ((Y%-YS%)<0|
00006380  29 20 59 25 3d 30 0d 21  52 04 0d 21 5c 21 f4 20  |) Y%=0.!R..!\!. |
00006390  41 64 6a 75 73 74 20 54  6f 6f 6c 74 69 70 20 77  |Adjust Tooltip w|
000063a0  69 6e 64 6f 77 20 73 74  61 74 65 0d 21 66 1c 21  |indow state.!f.!|
000063b0  62 6c 6f 63 6b 25 3d 77  68 61 6e 64 6c 65 5f 74  |block%=whandle_t|
000063c0  6f 6f 6c 74 69 70 25 0d  21 70 23 c8 99 22 57 69  |ooltip%.!p#.."Wi|
000063d0  6d 70 5f 47 65 74 57 69  6e 64 6f 77 53 74 61 74  |mp_GetWindowStat|
000063e0  65 22 2c 2c 62 6c 6f 63  6b 25 0d 21 7a 1c 21 62  |e",,block%.!z.!b|
000063f0  6c 6f 63 6b 25 3d 77 68  61 6e 64 6c 65 5f 74 6f  |lock%=whandle_to|
00006400  6f 6c 74 69 70 25 0d 21  84 3d 62 6c 6f 63 6b 25  |oltip%.!.=block%|
00006410  21 34 3d 58 25 3a 62 6c  6f 63 6b 25 21 38 3d 59  |!4=X%:block%!8=Y|
00006420  25 3a 62 6c 6f 63 6b 25  21 31 32 3d 58 25 2b 58  |%:block%!12=X%+X|
00006430  53 25 3a 62 6c 6f 63 6b  25 21 31 36 3d 59 25 2b  |S%:block%!16=Y%+|
00006440  59 53 25 0d 21 8e 2c 62  6c 6f 63 6b 25 21 32 30  |YS%.!.,block%!20|
00006450  3d 30 3a 62 6c 6f 63 6b  25 21 32 34 3d 30 3a f4  |=0:block%!24=0:.|
00006460  20 53 63 72 6f 6c 6c 20  6f 66 66 73 65 74 73 0d  | Scroll offsets.|
00006470  21 98 10 62 6c 6f 63 6b  25 21 32 38 3d 2d 31 0d  |!..block%!28=-1.|
00006480  21 a2 29 24 28 74 6f 6f  6c 74 69 70 69 63 6f 6e  |!.)$(tooltipicon|
00006490  25 2b 34 29 3d 54 69 70  24 2b bd 30 3a f4 20 49  |%+4)=Tip$+.0:. I|
000064a0  63 6f 6e 20 74 65 78 74  0d 21 ac 1f c8 99 22 57  |con text.!...."W|
000064b0  69 6d 70 5f 4f 70 65 6e  57 69 6e 64 6f 77 22 2c  |imp_OpenWindow",|
000064c0  2c 62 6c 6f 63 6b 25 0d  21 b6 13 54 6f 6f 6c 54  |,block%.!..ToolT|
000064d0  69 70 25 3d 54 69 70 49  44 25 0d 21 c0 14 74 6f  |ip%=TipID%.!..to|
000064e0  6f 6c 74 69 70 5f 74 69  6d 65 72 25 3d 91 0d 21  |oltip_timer%=..!|
000064f0  ca 05 e1 0d 21 d4 04 0d  21 de 12 dd f2 43 6c 6f  |....!...!....Clo|
00006500  73 65 54 6f 6f 6c 54 69  70 0d 21 e8 14 e7 20 28  |seToolTip.!... (|
00006510  54 6f 6f 6c 54 69 70 25  3d 30 29 20 e1 0d 21 f2  |ToolTip%=0) ..!.|
00006520  1c 21 62 6c 6f 63 6b 25  3d 77 68 61 6e 64 6c 65  |.!block%=whandle|
00006530  5f 74 6f 6f 6c 74 69 70  25 0d 21 fc 23 c8 99 22  |_tooltip%.!.#.."|
00006540  57 69 6d 70 5f 47 65 74  57 69 6e 64 6f 77 53 74  |Wimp_GetWindowSt|
00006550  61 74 65 22 2c 2c 62 6c  6f 63 6b 25 0d 22 06 1c  |ate",,block%."..|
00006560  21 62 6c 6f 63 6b 25 3d  77 68 61 6e 64 6c 65 5f  |!block%=whandle_|
00006570  74 6f 6f 6c 74 69 70 25  0d 22 10 12 62 6c 6f 63  |tooltip%."..bloc|
00006580  6b 25 21 38 3d 2d 31 30  32 34 0d 22 1a 13 62 6c  |k%!8=-1024."..bl|
00006590  6f 63 6b 25 21 31 36 3d  2d 31 30 32 34 0d 22 24  |ock%!16=-1024."$|
000065a0  1f c8 99 22 57 69 6d 70  5f 4f 70 65 6e 57 69 6e  |..."Wimp_OpenWin|
000065b0  64 6f 77 22 2c 2c 62 6c  6f 63 6b 25 0d 22 2e 22  |dow",,block%."."|
000065c0  f4 53 59 53 22 57 69 6d  70 5f 43 6c 6f 73 65 57  |.SYS"Wimp_CloseW|
000065d0  69 6e 64 6f 77 22 2c 2c  62 6c 6f 63 6b 25 0d 22  |indow",,block%."|
000065e0  38 24 f4 20 53 59 53 22  57 69 6d 70 5f 44 65 6c  |8$. SYS"Wimp_Del|
000065f0  65 74 65 57 69 6e 64 6f  77 22 2c 2c 62 6c 6f 63  |eteWindow",,bloc|
00006600  6b 25 0d 22 42 0e 54 6f  6f 6c 54 69 70 25 3d 30  |k%."B.ToolTip%=0|
00006610  0d 22 4c 05 e1 0d 22 56  04 0d 22 60 19 dd f2 50  |."L..."V.."`...P|
00006620  65 72 73 69 73 74 43 6c  6f 73 65 54 6f 6f 6c 54  |ersistCloseToolT|
00006630  69 70 0d 22 6a 14 e7 20  28 54 6f 6f 6c 54 69 70  |ip."j.. (ToolTip|
00006640  25 3d 30 29 20 e1 0d 22  74 18 4f 6c 64 54 6f 6f  |%=0) .."t.OldToo|
00006650  6c 54 69 70 25 3d 54 6f  6f 6c 54 69 70 25 0d 22  |lTip%=ToolTip%."|
00006660  7e 1d f4 21 62 6c 6f 63  6b 25 3d 77 68 61 6e 64  |~..!block%=whand|
00006670  6c 65 5f 74 6f 6f 6c 74  69 70 25 0d 22 88 22 f4  |le_tooltip%.".".|
00006680  53 59 53 22 57 69 6d 70  5f 43 6c 6f 73 65 57 69  |SYS"Wimp_CloseWi|
00006690  6e 64 6f 77 22 2c 2c 62  6c 6f 63 6b 25 0d 22 92  |ndow",,block%.".|
000066a0  1c 21 62 6c 6f 63 6b 25  3d 77 68 61 6e 64 6c 65  |.!block%=whandle|
000066b0  5f 74 6f 6f 6c 74 69 70  25 0d 22 9c 23 c8 99 22  |_tooltip%.".#.."|
000066c0  57 69 6d 70 5f 47 65 74  57 69 6e 64 6f 77 53 74  |Wimp_GetWindowSt|
000066d0  61 74 65 22 2c 2c 62 6c  6f 63 6b 25 0d 22 a6 1c  |ate",,block%."..|
000066e0  21 62 6c 6f 63 6b 25 3d  77 68 61 6e 64 6c 65 5f  |!block%=whandle_|
000066f0  74 6f 6f 6c 74 69 70 25  0d 22 b0 12 62 6c 6f 63  |tooltip%."..bloc|
00006700  6b 25 21 38 3d 2d 31 30  32 34 0d 22 ba 13 62 6c  |k%!8=-1024."..bl|
00006710  6f 63 6b 25 21 31 36 3d  2d 31 30 32 34 0d 22 c4  |ock%!16=-1024.".|
00006720  1f c8 99 22 57 69 6d 70  5f 4f 70 65 6e 57 69 6e  |..."Wimp_OpenWin|
00006730  64 6f 77 22 2c 2c 62 6c  6f 63 6b 25 0d 22 ce 24  |dow",,block%.".$|
00006740  f4 20 53 59 53 22 57 69  6d 70 5f 44 65 6c 65 74  |. SYS"Wimp_Delet|
00006750  65 57 69 6e 64 6f 77 22  2c 2c 62 6c 6f 63 6b 25  |eWindow",,block%|
00006760  0d 22 d8 0e 54 6f 6f 6c  54 69 70 25 3d 30 0d 22  |."..ToolTip%=0."|
00006770  e2 05 e1 0d 22 ec 04 0d  22 f6 39 f4 20 2a 2a 2a  |...."...".9. ***|
00006780  2a 2a 2a 2a 2a 2a 2a 2a  2a 2a 2a 2a 2a 2a 2a 2a  |****************|
*
000067b0  0d 23 00 04 0d 23 0a 16  dd f2 69 6e 69 74 5f 64  |.#...#....init_d|
000067c0  72 61 67 28 69 63 6f 6e  25 29 0d 23 14 0f 71 66  |rag(icon%).#..qf|
000067d0  5f 74 69 6d 65 72 3d 2d  31 0d 23 1e 23 c8 99 22  |_timer=-1.#.#.."|
000067e0  57 69 6d 70 5f 47 65 74  50 6f 69 6e 74 65 72 49  |Wimp_GetPointerI|
000067f0  6e 66 6f 22 2c 2c 62 6c  6f 63 6b 25 0d 23 28 10  |nfo",,block%.#(.|
00006800  6f 78 25 3d 62 6c 6f 63  6b 25 21 30 0d 23 32 10  |ox%=block%!0.#2.|
00006810  6f 79 25 3d 62 6c 6f 63  6b 25 21 34 0d 23 3c 12  |oy%=block%!4.#<.|
00006820  62 6c 6f 63 6b 25 21 34  3d 69 63 6f 6e 25 0d 23  |block%!4=icon%.#|
00006830  46 14 64 72 61 67 5f 69  63 6f 6e 25 3d 69 63 6f  |F.drag_icon%=ico|
00006840  6e 25 0d 23 50 17 62 6c  6f 63 6b 25 21 34 3d 64  |n%.#P.block%!4=d|
00006850  72 61 67 5f 74 79 70 65  25 0d 23 5a 13 62 6c 6f  |rag_type%.#Z.blo|
00006860  63 6b 25 21 38 3d 6f 78  25 2d 33 32 0d 23 64 14  |ck%!8=ox%-32.#d.|
00006870  62 6c 6f 63 6b 25 21 31  32 3d 6f 79 25 2d 33 32  |block%!12=oy%-32|
00006880  0d 23 6e 14 62 6c 6f 63  6b 25 21 31 36 3d 6f 78  |.#n.block%!16=ox|
00006890  25 2b 33 32 0d 23 78 14  62 6c 6f 63 6b 25 21 32  |%+32.#x.block%!2|
000068a0  30 3d 6f 79 25 2b 33 32  0d 23 82 17 62 6c 6f 63  |0=oy%+32.#..bloc|
000068b0  6b 25 21 32 34 3d 26 38  30 30 30 30 30 30 30 0d  |k%!24=&80000000.|
000068c0  23 8c 17 62 6c 6f 63 6b  25 21 32 38 3d 26 38 30  |#..block%!28=&80|
000068d0  30 30 30 30 30 30 0d 23  96 17 62 6c 6f 63 6b 25  |000000.#..block%|
000068e0  21 33 32 3d 26 37 46 46  46 46 46 46 46 0d 23 a0  |!32=&7FFFFFFF.#.|
000068f0  17 62 6c 6f 63 6b 25 21  33 36 3d 26 37 46 46 46  |.block%!36=&7FFF|
00006900  46 46 46 46 0d 23 aa 1c  c8 99 22 57 69 6d 70 5f  |FFFF.#...."Wimp_|
00006910  44 72 61 67 42 6f 78 22  2c 2c 62 6c 6f 63 6b 25  |DragBox",,block%|
00006920  0d 23 b4 04 0d 23 be 1e  f4 20 53 74 61 72 74 20  |.#...#... Start |
00006930  61 20 73 70 72 69 74 65  20 64 72 61 67 20 2e 2e  |a sprite drag ..|
00006940  2e 2e 0d 23 c8 33 e7 20  28 69 63 6f 6e 25 3d 61  |...#.3. (icon%=a|
00006950  64 64 5f 77 69 6e 64 6f  77 25 29 20 24 64 72 61  |dd_window%) $dra|
00006960  67 73 70 72 69 74 65 6e  61 6d 65 25 3d 22 79 65  |gspritename%="ye|
00006970  73 22 2b bd 30 0d 23 d2  37 e7 20 28 69 63 6f 6e  |s"+.0.#.7. (icon|
00006980  25 3d 73 75 62 74 72 61  63 74 5f 77 69 6e 64 6f  |%=subtract_windo|
00006990  77 25 29 20 24 64 72 61  67 73 70 72 69 74 65 6e  |w%) $dragspriten|
000069a0  61 6d 65 25 3d 22 6e 6f  22 2b bd 30 0d 23 dc 16  |ame%="no"+.0.#..|
000069b0  21 62 6f 75 6e 64 73 70  72 69 74 65 62 6f 78 25  |!boundspritebox%|
000069c0  3d 30 0d 23 e6 17 62 6f  75 6e 64 73 70 72 69 74  |=0.#..boundsprit|
000069d0  65 62 6f 78 25 21 34 3d  30 0d 23 f0 1c 62 6f 75  |ebox%!4=0.#..bou|
000069e0  6e 64 73 70 72 69 74 65  62 6f 78 25 21 38 3d 6f  |ndspritebox%!8=o|
000069f0  78 25 2b 32 34 0d 23 fa  1d 62 6f 75 6e 64 73 70  |x%+24.#..boundsp|
00006a00  72 69 74 65 62 6f 78 25  21 31 32 3d 6f 79 25 2b  |ritebox%!12=oy%+|
00006a10  32 34 0d 24 04 46 c8 99  22 44 72 61 67 41 53 70  |24.$.F.."DragASp|
00006a20  72 69 74 65 5f 53 74 61  72 74 22 2c 32 2b 38 2b  |rite_Start",2+8+|
00006a30  36 34 2b 31 32 38 2c 31  2c 64 72 61 67 73 70 72  |64+128,1,dragspr|
00006a40  69 74 65 6e 61 6d 65 25  2c 62 6f 75 6e 64 73 70  |itename%,boundsp|
00006a50  72 69 74 65 62 6f 78 25  0d 24 0e 05 e1 0d 24 18  |ritebox%.$....$.|
00006a60  04 0d 24 22 0e dd f2 64  72 61 67 64 72 6f 70 0d  |..$"...dragdrop.|
00006a70  24 2c 23 c8 99 22 57 69  6d 70 5f 47 65 74 50 6f  |$,#.."Wimp_GetPo|
00006a80  69 6e 74 65 72 49 6e 66  6f 22 2c 2c 62 6c 6f 63  |interInfo",,bloc|
00006a90  6b 25 0d 24 36 17 62 6c  6f 63 6b 25 21 32 30 3d  |k%.$6.block%!20=|
00006aa0  62 6c 6f 63 6b 25 21 31  32 0d 24 40 17 62 6c 6f  |block%!12.$@.blo|
00006ab0  63 6b 25 21 32 34 3d 62  6c 6f 63 6b 25 21 31 36  |ck%!24=block%!16|
00006ac0  0d 24 4a 15 62 6c 6f 63  6b 25 21 32 38 3d 21 62  |.$J.block%!28=!b|
00006ad0  6c 6f 63 6b 25 0d 24 54  16 62 6c 6f 63 6b 25 21  |lock%.$T.block%!|
00006ae0  33 32 3d 62 6c 6f 63 6b  25 21 34 0d 24 5e 0f 62  |32=block%!4.$^.b|
00006af0  6c 6f 63 6b 25 21 33 36  3d 30 0d 24 68 1a 21 62  |lock%!36=0.$h.!b|
00006b00  6c 6f 63 6b 25 3d 36 34  3a 62 6c 6f 63 6b 25 21  |lock%=64:block%!|
00006b10  31 32 3d 30 0d 24 72 1e  62 6c 6f 63 6b 25 21 31  |12=0.$r.block%!1|
00006b20  36 3d 31 3a 62 6c 6f 63  6b 25 21 34 30 3d 26 66  |6=1:block%!40=&f|
00006b30  66 66 0d 24 7c 14 24 28  62 6c 6f 63 6b 25 2b 34  |ff.$|.$(block%+4|
00006b40  34 29 20 3d 22 22 0d 24  86 36 c8 99 22 57 69 6d  |4) ="".$.6.."Wim|
00006b50  70 5f 53 65 6e 64 4d 65  73 73 61 67 65 22 2c 31  |p_SendMessage",1|
00006b60  38 2c 62 6c 6f 63 6b 25  2c 62 6c 6f 63 6b 25 21  |8,block%,block%!|
00006b70  32 30 2c 62 6c 6f 63 6b  25 21 32 34 0d 24 90 04  |20,block%!24.$..|
00006b80  0d 24 9a 22 f4 20 43 61  6e 63 65 6c 20 61 20 73  |.$.". Cancel a s|
00006b90  70 72 69 74 65 20 64 72  61 67 20 2e 2e 2e 2e 2e  |prite drag .....|
00006ba0  2e 2e 0d 24 a4 18 c8 99  22 44 72 61 67 41 53 70  |...$...."DragASp|
00006bb0  72 69 74 65 5f 53 74 6f  70 22 0d 24 ae 05 e1 0d  |rite_Stop".$....|
00006bc0  24 b8 04 0d 24 c2 39 f4  20 2a 2a 2a 2a 2a 2a 2a  |$...$.9. *******|
00006bd0  2a 2a 2a 2a 2a 2a 2a 2a  2a 2a 2a 2a 2a 2a 2a 2a  |****************|
*
00006bf0  2a 2a 2a 2a 2a 2a 2a 2a  2a 2a 2a 2a 0d 24 cc 04  |************.$..|
00006c00  0d 24 d6 12 dd a4 73 74  72 69 6e 67 28 70 74 72  |.$....string(ptr|
00006c10  25 29 0d 24 e0 08 ea 20  61 24 0d 24 ea 1b c8 95  |%).$... a$.$....|
00006c20  20 3f 70 74 72 25 3c 3e  30 20 80 20 a9 28 61 24  | ?ptr%<>0 . .(a$|
00006c30  29 3c 32 35 34 0d 24 f4  18 61 24 2b 3d bd 28 3f  |)<254.$..a$+=.(?|
00006c40  70 74 72 25 29 3a 70 74  72 25 2b 3d 31 0d 24 fe  |ptr%):ptr%+=1.$.|
00006c50  05 ce 0d 25 08 07 3d 61  24 0d 25 12 04 0d 25 1c  |...%..=a$.%...%.|
00006c60  1b dd a4 67 65 74 5f 6c  69 6e 65 28 66 69 6c 65  |...get_line(file|
00006c70  68 61 6e 64 6c 65 25 29  0d 25 26 0b ea 20 61 24  |handle%).%&.. a$|
00006c80  2c 7a 25 0d 25 30 08 7a  25 3d 30 0d 25 3a 09 61  |,z%.%0.z%=0.%:.a|
00006c90  24 3d 22 22 0d 25 44 05  f5 0d 25 4e 2b e7 20 28  |$="".%D...%N+. (|
00006ca0  ac 28 c5 23 66 69 6c 65  68 61 6e 64 6c 65 25 29  |.(.#filehandle%)|
00006cb0  29 20 8c 20 7a 25 3d 9a  23 66 69 6c 65 68 61 6e  |) . z%=.#filehan|
00006cc0  64 6c 65 25 0d 25 58 16  e7 20 7a 25 3e 3d 33 32  |dle%.%X.. z%>=32|
00006cd0  20 61 24 2b 3d bd 28 7a  25 29 0d 25 62 1b fd 20  | a$+=.(z%).%b.. |
00006ce0  7a 25 3c 33 32 20 84 20  c5 23 66 69 6c 65 68 61  |z%<32 . .#fileha|
00006cf0  6e 64 6c 65 25 0d 25 6c  0a 3d 61 24 2b bd 30 0d  |ndle%.%l.=a$+.0.|
00006d00  25 76 04 0d 25 80 1f dd  f2 70 75 74 5f 6c 69 6e  |%v..%....put_lin|
00006d10  65 28 66 69 6c 65 68 61  6e 64 6c 65 25 2c 20 41  |e(filehandle%, A|
00006d20  24 29 0d 25 8a 0b ea 20  61 24 2c 7a 25 0d 25 94  |$).%... a$,z%.%.|
00006d30  08 7a 25 3d 31 0d 25 9e  10 e3 7a 25 3d 31 b8 20  |.z%=1.%...z%=1. |
00006d40  a9 28 41 24 29 0d 25 a8  10 61 24 3d c1 41 24 2c  |.(A$).%..a$=.A$,|
00006d50  7a 25 2c 31 29 0d 25 b2  26 e7 20 28 97 28 61 24  |z%,1).%.&. (.(a$|
00006d60  29 3e 30 29 20 8c 20 d5  23 66 69 6c 65 68 61 6e  |)>0) . .#filehan|
00006d70  64 6c 65 25 2c 20 97 28  61 24 29 0d 25 bc 05 ed  |dle%, .(a$).%...|
00006d80  0d 25 c6 15 d5 23 66 69  6c 65 68 61 6e 64 6c 65  |.%...#filehandle|
00006d90  25 2c 20 31 30 0d 25 d0  05 e1 0d 25 da 04 0d 25  |%, 10.%....%...%|
00006da0  e4 39 f4 20 2a 2a 2a 2a  2a 2a 2a 2a 2a 2a 2a 2a  |.9. ************|
00006db0  2a 2a 2a 2a 2a 2a 2a 2a  2a 2a 2a 2a 2a 2a 2a 2a  |****************|
*
00006dd0  2a 2a 2a 2a 2a 2a 2a 0d  25 ee 04 0d 25 f8 0f dd  |*******.%...%...|
00006de0  f2 6c 6f 61 64 63 61 63  68 65 0d 26 02 10 63 61  |.loadcache.&..ca|
00006df0  63 68 65 5f 65 78 74 25  3d 30 0d 26 0c 0d 21 63  |che_ext%=0.&..!c|
00006e00  61 63 68 65 25 3d 30 0d  26 16 2c f4 20 4c 6f 61  |ache%=0.&.,. Loa|
00006e10  64 20 69 6e 20 63 6f 6d  6d 61 6e 64 73 20 74 6f  |d in commands to|
00006e20  20 6f 70 65 6e 20 66 69  6c 65 72 20 64 69 73 70  | open filer disp|
00006e30  6c 61 79 0d 26 20 2f 46  25 3d 8e 28 41 70 70 50  |lay.& /F%=.(AppP|
00006e40  61 74 68 24 2b 22 2e 55  73 65 72 73 2e 22 2b 55  |ath$+".Users."+U|
00006e50  73 65 72 24 2b 22 2e 7e  7e 6f 70 65 6e 22 2b bd  |ser$+".~~open"+.|
00006e60  30 29 0d 26 2a 05 f5 0d  26 34 14 41 24 3d a4 67  |0).&*...&4.A$=.g|
00006e70  65 74 5f 6c 69 6e 65 28  46 25 29 0d 26 3e 2c e7  |et_line(F%).&>,.|
00006e80  20 41 24 3c 3e 22 22 20  8c 20 f2 61 64 64 5f 74  | A$<>"" . .add_t|
00006e90  6f 5f 63 61 63 68 65 28  41 24 2c 20 6f 70 65 6e  |o_cache(A$, open|
00006ea0  5f 74 79 70 65 25 29 0d  26 48 0a fd 20 c5 23 46  |_type%).&H.. .#F|
00006eb0  25 0d 26 52 08 d9 23 46  25 0d 26 5c 2d f4 20 4c  |%.&R..#F%.&\-. L|
00006ec0  6f 61 64 20 69 6e 20 63  6f 6d 6d 61 6e 64 73 20  |oad in commands |
00006ed0  74 6f 20 63 6c 6f 73 65  20 66 69 6c 65 72 20 64  |to close filer d|
00006ee0  69 73 70 6c 61 79 0d 26  66 30 46 25 3d 8e 28 41  |isplay.&f0F%=.(A|
00006ef0  70 70 50 61 74 68 24 2b  22 2e 55 73 65 72 73 2e  |ppPath$+".Users.|
00006f00  22 2b 55 73 65 72 24 2b  22 2e 7e 7e 63 6c 6f 73  |"+User$+".~~clos|
00006f10  65 22 2b bd 30 29 0d 26  70 05 f5 0d 26 7a 14 41  |e"+.0).&p...&z.A|
00006f20  24 3d a4 67 65 74 5f 6c  69 6e 65 28 46 25 29 0d  |$=.get_line(F%).|
00006f30  26 84 2d e7 20 41 24 3c  3e 22 22 20 8c 20 f2 61  |&.-. A$<>"" . .a|
00006f40  64 64 5f 74 6f 5f 63 61  63 68 65 28 41 24 2c 20  |dd_to_cache(A$, |
00006f50  63 6c 6f 73 65 5f 74 79  70 65 25 29 0d 26 8e 0a  |close_type%).&..|
00006f60  fd 20 c5 23 46 25 0d 26  98 08 d9 23 46 25 0d 26  |. .#F%.&...#F%.&|
00006f70  a2 05 e1 0d 26 ac 04 0d  26 b6 1f dd f2 61 64 64  |....&...&....add|
00006f80  5f 74 6f 5f 63 61 63 68  65 28 63 6f 6d 24 2c 20  |_to_cache(com$, |
00006f90  74 79 70 65 25 29 0d 26  c0 1c 72 65 63 6f 72 64  |type%).&..record|
00006fa0  5f 73 69 7a 65 25 3d a9  28 63 6f 6d 24 29 2b 31  |_size%=.(com$)+1|
00006fb0  2b 32 0d 26 ca 83 e7 20  28 72 65 63 6f 72 64 5f  |+2.&... (record_|
00006fc0  73 69 7a 65 25 3e 32 35  35 29 20 8c 20 f2 65 72  |size%>255) . .er|
00006fd0  72 6f 72 28 22 50 61 74  68 20 74 6f 6f 20 62 69  |ror("Path too bi|
00006fe0  67 21 20 50 6c 65 61 73  65 20 73 68 72 69 6e 6b  |g! Please shrink|
00006ff0  20 21 58 75 65 6e 20 61  6e 64 20 72 65 6f 72 67  | !Xuen and reorg|
00007000  61 6e 69 73 65 20 79 6f  75 72 20 28 6c 65 6e 67  |anise your (leng|
00007010  74 68 79 20 6c 61 62 65  6c 65 64 29 20 64 69 72  |thy labeled) dir|
00007020  65 63 74 6f 72 79 20 73  74 72 75 63 74 75 72 65  |ectory structure|
00007030  2e 22 29 20 20 0d 26 d4  25 3f 28 63 61 63 68 65  |.")  .&.%?(cache|
00007040  25 2b 63 61 63 68 65 5f  65 78 74 25 29 3d 72 65  |%+cache_ext%)=re|
00007050  63 6f 72 64 5f 73 69 7a  65 25 0d 26 de 20 3f 28  |cord_size%.&. ?(|
00007060  63 61 63 68 65 25 2b 63  61 63 68 65 5f 65 78 74  |cache%+cache_ext|
00007070  25 2b 31 29 3d 74 79 70  65 25 0d 26 e8 13 e3 58  |%+1)=type%.&...X|
00007080  25 3d 31 20 b8 20 a9 28  63 6f 6d 24 29 0d 26 f2  |%=1 . .(com$).&.|
00007090  2c 3f 28 63 61 63 68 65  25 2b 63 61 63 68 65 5f  |,?(cache%+cache_|
000070a0  65 78 74 25 2b 31 2b 58  25 29 3d 97 28 c1 63 6f  |ext%+1+X%)=.(.co|
000070b0  6d 24 2c 58 25 2c 31 29  29 0d 26 fc 05 ed 0d 27  |m$,X%,1)).&....'|
000070c0  06 40 3f 28 63 61 63 68  65 25 2b 63 61 63 68 65  |.@?(cache%+cache|
000070d0  5f 65 78 74 25 2b 31 2b  58 25 29 3d 30 3a f4 20  |_ext%+1+X%)=0:. |
000070e0  41 64 64 20 74 65 72 6d  69 6e 61 74 69 6e 67 20  |Add terminating |
000070f0  7a 65 72 6f 20 74 6f 20  73 74 72 69 6e 67 0d 27  |zero to string.'|
00007100  10 1c 63 61 63 68 65 5f  65 78 74 25 2b 3d 72 65  |..cache_ext%+=re|
00007110  63 6f 72 64 5f 73 69 7a  65 25 0d 27 1a 69 e7 20  |cord_size%.'.i. |
00007120  28 63 61 63 68 65 5f 65  78 74 25 3e 43 41 43 48  |(cache_ext%>CACH|
00007130  45 5f 53 49 5a 45 25 29  20 8c 20 f2 65 72 72 6f  |E_SIZE%) . .erro|
00007140  72 28 22 54 6f 6f 20 6d  61 6e 79 20 77 69 6e 64  |r("Too many wind|
00007150  6f 77 73 21 20 50 6c 65  61 73 65 20 69 6e 63 72  |ows! Please incr|
00007160  65 61 73 65 20 43 41 43  48 45 5f 53 49 5a 45 25  |ease CACHE_SIZE%|
00007170  20 61 6e 64 20 72 65 72  75 6e 20 21 58 75 65 6e  | and rerun !Xuen|
00007180  2e 22 29 0d 27 24 40 3f  28 63 61 63 68 65 25 2b  |.").'$@?(cache%+|
00007190  63 61 63 68 65 5f 65 78  74 25 29 3d 30 3a f4 20  |cache_ext%)=0:. |
000071a0  49 6e 69 74 69 61 6c 69  73 65 20 6e 65 78 74 20  |Initialise next |
000071b0  72 65 63 6f 72 64 20 73  69 7a 65 20 74 6f 20 4e  |record size to N|
000071c0  55 4c 4c 0d 27 2e 05 e1  0d 27 38 04 0d 27 42 39  |ULL.'....'8..'B9|
000071d0  f4 20 2a 2a 2a 2a 2a 2a  2a 2a 2a 2a 2a 2a 2a 2a  |. **************|
000071e0  2a 2a 2a 2a 2a 2a 2a 2a  2a 2a 2a 2a 2a 2a 2a 2a  |****************|
*
00007200  2a 2a 2a 2a 2a 0d 27 4c  04 0d 27 56 10 dd f2 63  |*****.'L..'V...c|
00007210  61 63 68 65 5f 6f 70 65  6e 0d 27 60 10 63 61 63  |ache_open.'`.cac|
00007220  68 65 5f 70 74 72 25 3d  30 0d 27 6a 05 f5 0d 27  |he_ptr%=0.'j...'|
00007230  74 20 72 5f 73 69 7a 65  25 3d 3f 28 63 61 63 68  |t r_size%=?(cach|
00007240  65 25 2b 63 61 63 68 65  5f 70 74 72 25 29 0d 27  |e%+cache_ptr%).'|
00007250  7e 20 74 79 70 65 25 3d  3f 28 63 61 63 68 65 25  |~ type%=?(cache%|
00007260  2b 63 61 63 68 65 5f 70  74 72 25 2b 31 29 0d 27  |+cache_ptr%+1).'|
00007270  88 4b e7 20 28 72 5f 73  69 7a 65 25 3e 30 20 80  |.K. (r_size%>0 .|
00007280  20 74 79 70 65 25 3d 6f  70 65 6e 5f 74 79 70 65  | type%=open_type|
00007290  25 29 20 8c 20 f2 65 78  65 63 75 74 65 5f 73 74  |%) . .execute_st|
000072a0  72 69 6e 67 28 63 61 63  68 65 25 2b 63 61 63 68  |ring(cache%+cach|
000072b0  65 5f 70 74 72 25 2b 32  29 0d 27 92 17 63 61 63  |e_ptr%+2).'..cac|
000072c0  68 65 5f 70 74 72 25 2b  3d 72 5f 73 69 7a 65 25  |he_ptr%+=r_size%|
000072d0  0d 27 9c 0e fd 72 5f 73  69 7a 65 25 3d 30 0d 27  |.'...r_size%=0.'|
000072e0  a6 04 0d 27 b0 0f f2 4f  70 65 6e 46 53 56 69 65  |...'...OpenFSVie|
000072f0  77 0d 27 ba 05 e1 0d 27  c4 04 0d 27 ce 11 dd f2  |w.'....'...'....|
00007300  63 61 63 68 65 5f 63 6c  6f 73 65 0d 27 d8 10 63  |cache_close.'..c|
00007310  61 63 68 65 5f 70 74 72  25 3d 30 0d 27 e2 05 f5  |ache_ptr%=0.'...|
00007320  0d 27 ec 20 72 5f 73 69  7a 65 25 3d 3f 28 63 61  |.'. r_size%=?(ca|
00007330  63 68 65 25 2b 63 61 63  68 65 5f 70 74 72 25 29  |che%+cache_ptr%)|
00007340  0d 27 f6 20 74 79 70 65  25 3d 3f 28 63 61 63 68  |.'. type%=?(cach|
00007350  65 25 2b 63 61 63 68 65  5f 70 74 72 25 2b 31 29  |e%+cache_ptr%+1)|
00007360  0d 28 00 4c e7 20 28 72  5f 73 69 7a 65 25 3e 30  |.(.L. (r_size%>0|
00007370  20 80 20 74 79 70 65 25  3d 63 6c 6f 73 65 5f 74  | . type%=close_t|
00007380  79 70 65 25 29 20 8c 20  f2 65 78 65 63 75 74 65  |ype%) . .execute|
00007390  5f 73 74 72 69 6e 67 28  63 61 63 68 65 25 2b 63  |_string(cache%+c|
000073a0  61 63 68 65 5f 70 74 72  25 2b 32 29 0d 28 0a 17  |ache_ptr%+2).(..|
000073b0  63 61 63 68 65 5f 70 74  72 25 2b 3d 72 5f 73 69  |cache_ptr%+=r_si|
000073c0  7a 65 25 0d 28 14 0e fd  72 5f 73 69 7a 65 25 3d  |ze%.(...r_size%=|
000073d0  30 0d 28 1e 04 0d 28 28  10 f2 43 6c 6f 73 65 46  |0.(...((..CloseF|
000073e0  53 56 69 65 77 0d 28 32  05 e1 0d 28 3c 04 0d 28  |SView.(2...(<..(|
000073f0  46 1e dd f2 65 78 65 63  75 74 65 5f 73 74 72 69  |F...execute_stri|
00007400  6e 67 28 73 74 72 5f 70  74 72 25 29 0d 28 50 18  |ng(str_ptr%).(P.|
00007410  41 24 3d a4 73 74 72 69  6e 67 28 73 74 72 5f 70  |A$=.string(str_p|
00007420  74 72 25 29 0d 28 5a 14  e7 20 41 24 3c 3e 22 22  |tr%).(Z.. A$<>""|
00007430  20 8c 20 ff 28 41 24 29  0d 28 64 05 e1 0d 28 6e  | . .(A$).(d...(n|
00007440  04 0d 28 78 39 f4 20 2a  2a 2a 2a 2a 2a 2a 2a 2a  |..(x9. *********|
00007450  2a 2a 2a 2a 2a 2a 2a 2a  2a 2a 2a 2a 2a 2a 2a 2a  |****************|
*
00007470  2a 2a 2a 2a 2a 2a 2a 2a  2a 2a 0d 28 82 04 0d 28  |**********.(...(|
00007480  8c 11 dd f2 72 65 6f 70  65 6e 66 69 6c 65 72 0d  |....reopenfiler.|
00007490  28 96 10 f2 63 61 63 68  65 5f 63 6c 6f 73 65 0d  |(...cache_close.|
000074a0  28 a0 0f f2 63 61 63 68  65 5f 6f 70 65 6e 0d 28  |(...cache_open.(|
000074b0  aa 05 e1 0d 28 b4 04 0d  28 be 10 dd f2 63 6c 6f  |....(...(....clo|
000074c0  73 65 66 69 6c 65 72 0d  28 c8 10 f2 63 61 63 68  |sefiler.(...cach|
000074d0  65 5f 63 6c 6f 73 65 0d  28 d2 05 e1 0d 28 dc 04  |e_close.(....(..|
000074e0  0d 28 e6 39 f4 20 2a 2a  2a 2a 2a 2a 2a 2a 2a 2a  |.(.9. **********|
000074f0  2a 2a 2a 2a 2a 2a 2a 2a  2a 2a 2a 2a 2a 2a 2a 2a  |****************|
*
00007510  2a 2a 2a 2a 2a 2a 2a 2a  2a 0d 28 f0 04 0d 28 fa  |*********.(...(.|
00007520  11 dd f2 73 61 76 65 64  65 73 6b 74 6f 70 0d 29  |...savedesktop.)|
00007530  04 21 44 58 25 3d ae 28  41 70 70 50 61 74 68 24  |.!DX%=.(AppPath$|
00007540  2b 22 2e 74 6d 70 66 69  6c 65 22 2b bd 30 29 0d  |+".tmpfile"+.0).|
00007550  29 0e 10 64 62 6c 6f 63  6b 25 21 30 3d 32 38 0d  |)..dblock%!0=28.|
00007560  29 18 1a 64 62 6c 6f 63  6b 25 21 34 3d 74 61 73  |)..dblock%!4=tas|
00007570  6b 5f 68 61 6e 64 6c 65  25 0d 29 22 10 64 62 6c  |k_handle%.)".dbl|
00007580  6f 63 6b 25 21 31 32 3d  30 0d 29 2c 11 64 62 6c  |ock%!12=0.),.dbl|
00007590  6f 63 6b 25 21 31 36 3d  31 30 0d 29 36 12 64 62  |ock%!16=10.)6.db|
000075a0  6c 6f 63 6b 25 21 32 30  3d 44 58 25 0d 29 40 10  |lock%!20=DX%.)@.|
000075b0  64 62 6c 6f 63 6b 25 21  32 34 3d 30 0d 29 4a 25  |dblock%!24=0.)J%|
000075c0  c8 99 22 57 69 6d 70 5f  53 65 6e 64 4d 65 73 73  |.."Wimp_SendMess|
000075d0  61 67 65 22 2c 31 37 2c  64 62 6c 6f 63 6b 25 2c  |age",17,dblock%,|
000075e0  30 0d 29 54 05 e1 0d 29  5e 04 0d 29 68 36 f4 20  |0.)T...)^..)h6. |
000075f0  2a 2a 2a 2a 2a 2a 2a 2a  2a 2a 2a 2a 2a 2a 2a 2a  |****************|
*
00007620  0d 29 72 27 f4 20 47 65  74 20 6c 65 61 66 20 6e  |.)r'. Get leaf n|
00007630  61 6d 65 20 6f 66 20 61  20 66 75 6c 6c 20 70 61  |ame of a full pa|
00007640  74 68 20 6e 61 6d 65 0d  29 7c 36 f4 20 2a 2a 2a  |th name.)|6. ***|
00007650  2a 2a 2a 2a 2a 2a 2a 2a  2a 2a 2a 2a 2a 2a 2a 2a  |****************|
*
00007670  2a 2a 2a 2a 2a 2a 2a 2a  2a 2a 2a 2a 2a 0d 29 86  |*************.).|
00007680  17 dd a4 47 65 74 4c 65  61 66 4e 61 6d 65 28 70  |...GetLeafName(p|
00007690  74 72 25 29 0d 29 90 17  ea 20 61 24 2c 6c 65 61  |tr%).)... a$,lea|
000076a0  66 70 74 72 25 2c 73 69  7a 65 25 0d 29 9a 1f f4  |fptr%,size%.)...|
000076b0  20 44 65 74 65 72 6d 69  6e 65 20 73 69 7a 65 20  | Determine size |
000076c0  6f 66 20 7a 73 74 72 69  6e 67 0d 29 a4 0b 73 69  |of zstring.)..si|
000076d0  7a 65 25 3d 30 0d 29 ae  17 c8 95 20 3f 28 70 74  |ze%=0.).... ?(pt|
000076e0  72 25 2b 73 69 7a 65 25  29 3e 33 31 0d 29 b8 0c  |r%+size%)>31.)..|
000076f0  73 69 7a 65 25 2b 3d 31  0d 29 c2 05 ce 0d 29 cc  |size%+=1.)....).|
00007700  22 f4 20 44 65 74 65 72  6d 69 6e 65 20 6f 66 66  |". Determine off|
00007710  73 65 74 20 6f 66 20 6c  65 61 66 6e 61 6d 65 0d  |set of leafname.|
00007720  29 d6 12 6c 65 61 66 70  74 72 25 3d 73 69 7a 65  |)..leafptr%=size|
00007730  25 0d 29 e0 2e c8 95 20  28 3f 28 70 74 72 25 2b  |%.).... (?(ptr%+|
00007740  6c 65 61 66 70 74 72 25  29 3c 3e 97 28 22 2e 22  |leafptr%)<>.("."|
00007750  29 29 20 80 20 6c 65 61  66 70 74 72 25 3e 30 0d  |)) . leafptr%>0.|
00007760  29 ea 0f 6c 65 61 66 70  74 72 25 2d 3d 31 0d 29  |)..leafptr%-=1.)|
00007770  f4 05 ce 0d 29 fe 0f 6c  65 61 66 70 74 72 25 2b  |....)..leafptr%+|
00007780  3d 31 0d 2a 08 14 f4 20  42 75 69 6c 64 20 6c 65  |=1.*... Build le|
00007790  61 66 6e 61 6d 65 0d 2a  12 09 61 24 3d 22 22 0d  |afname.*..a$="".|
000077a0  2a 1c 15 c8 95 20 6c 65  61 66 70 74 72 25 3c 73  |*.... leafptr%<s|
000077b0  69 7a 65 25 0d 2a 26 1b  61 24 2b 3d bd 28 3f 28  |ize%.*&.a$+=.(?(|
000077c0  70 74 72 25 2b 6c 65 61  66 70 74 72 25 29 29 0d  |ptr%+leafptr%)).|
000077d0  2a 30 0f 6c 65 61 66 70  74 72 25 2b 3d 31 0d 2a  |*0.leafptr%+=1.*|
000077e0  3a 05 ce 0d 2a 44 07 3d  61 24 0d 2a 4e 04 0d 2a  |:...*D.=a$.*N..*|
000077f0  58 36 f4 20 2a 2a 2a 2a  2a 2a 2a 2a 2a 2a 2a 2a  |X6. ************|
00007800  2a 2a 2a 2a 2a 2a 2a 2a  2a 2a 2a 2a 2a 2a 2a 2a  |****************|
*
00007820  2a 2a 2a 2a 0d 2a 62 2d  f4 20 66 75 6e 63 74 69  |****.*b-. functi|
00007830  6f 6e 20 74 6f 20 64 65  61 6c 20 77 69 74 68 20  |on to deal with |
00007840  69 6e 63 6f 6d 69 6e 67  20 6d 65 73 73 61 67 65  |incoming message|
00007850  73 0d 2a 6c 36 f4 20 2a  2a 2a 2a 2a 2a 2a 2a 2a  |s.*l6. *********|
00007860  2a 2a 2a 2a 2a 2a 2a 2a  2a 2a 2a 2a 2a 2a 2a 2a  |****************|
*
00007880  2a 2a 2a 2a 2a 2a 2a 0d  2a 76 16 dd f2 72 65 63  |*******.*v...rec|
00007890  65 69 76 65 28 72 65 61  73 6f 6e 25 29 0d 2a 80  |eive(reason%).*.|
000078a0  16 6d 65 73 73 61 67 65  25 3d 62 6c 6f 63 6b 25  |.message%=block%|
000078b0  21 31 36 0d 2a 8a 34 f4  20 50 52 4f 43 65 72 72  |!16.*.4. PROCerr|
000078c0  6f 72 28 22 4d 65 73 73  61 67 65 20 3a 20 26 22  |or("Message : &"|
000078d0  2b 53 54 52 24 7e 28 6d  65 73 73 61 67 65 25 29  |+STR$~(message%)|
000078e0  2b 43 48 52 24 30 29 0d  2a 94 11 c8 8e 20 6d 65  |+CHR$0).*.... me|
000078f0  73 73 61 67 65 25 20 ca  0d 2a 9e 0f c9 20 30 3a  |ssage% ..*... 0:|
00007900  71 75 69 74 25 3d b9 0d  2a a8 92 c9 20 33 3a f2  |quit%=..*... 3:.|
00007910  64 61 74 61 5f 6c 6f 61  64 5f 61 64 64 5f 6c 69  |data_load_add_li|
00007920  6e 6b 3a f4 20 50 52 4f  43 65 72 72 6f 72 28 22  |nk:. PROCerror("|
00007930  44 61 74 61 4c 6f 61 64  3a 22 2b 46 4e 73 74 72  |DataLoad:"+FNstr|
00007940  69 6e 67 28 62 6c 6f 63  6b 25 2b 34 34 29 2b 22  |ing(block%+44)+"|
00007950  20 4c 65 61 66 6e 61 6d  65 3a 22 2b 46 4e 47 65  | Leafname:"+FNGe|
00007960  74 4c 65 61 66 4e 61 6d  65 28 62 6c 6f 63 6b 25  |tLeafName(block%|
00007970  2b 34 34 29 2b 22 20 54  79 70 65 3a 26 22 2b 53  |+44)+" Type:&"+S|
00007980  54 52 24 7e 28 21 28 62  6c 6f 63 6b 25 2b 34 30  |TR$~(!(block%+40|
00007990  29 29 2b 43 48 52 24 30  29 0d 2a b2 11 c9 20 32  |))+CHR$0).*... 2|
000079a0  3a f2 64 61 74 61 5f 61  63 6b 0d 2a bc 12 c9 20  |:.data_ack.*... |
000079b0  35 3a f2 64 61 74 61 5f  6f 70 65 6e 0d 2a c6 15  |5:.data_open.*..|
000079c0  c9 20 31 30 3a f2 64 65  73 6b 74 6f 70 5f 61 63  |. 10:.desktop_ac|
000079d0  6b 0d 2a d0 1d c9 20 26  34 30 30 43 30 3a f2 73  |k.*... &400C0:.s|
000079e0  75 62 6d 65 6e 75 5f 77  61 72 6e 69 6e 67 0d 2a  |ubmenu_warning.*|
000079f0  da 1f c9 20 26 34 30 30  43 39 3a 49 63 6f 6e 42  |... &400C9:IconB|
00007a00  61 72 4d 65 6e 75 4f 70  65 6e 25 3d 30 0d 2a e4  |arMenuOpen%=0.*.|
00007a10  05 cb 0d 2a ee 05 e1 0d  2a f8 04 0d 2b 02 2b f4  |...*....*...+.+.|
00007a20  20 55 73 65 72 20 68 61  73 20 64 6f 75 62 6c 65  | User has double|
00007a30  20 63 6c 69 63 6b 65 64  20 6f 6e 20 61 20 66 69  | clicked on a fi|
00007a40  6c 65 69 63 6f 6e 0d 2b  0c 3d f4 20 52 65 73 70  |leicon.+.=. Resp|
00007a50  6f 6e 73 65 20 2d 20 73  74 6f 72 65 20 61 20 6c  |onse - store a l|
00007a60  69 6e 6b 20 74 6f 20 74  68 69 73 20 66 69 6c 65  |ink to this file|
00007a70  20 69 6e 20 74 68 65 20  7e 20 64 69 72 65 63 74  | in the ~ direct|
00007a80  6f 72 79 0d 2b 16 0f dd  f2 64 61 74 61 5f 6f 70  |ory.+....data_op|
00007a90  65 6e 0d 2b 20 1c ea 20  74 79 70 65 25 2c 20 64  |en.+ .. type%, d|
00007aa0  65 73 74 69 6e 61 74 69  6f 6e 64 69 72 24 0d 2b  |estinationdir$.+|
00007ab0  2a 04 0d 2b 34 24 f4 20  46 6c 75 73 68 20 63 61  |*..+4$. Flush ca|
00007ac0  63 68 65 20 69 66 20 73  74 75 66 66 20 69 6e 20  |che if stuff in |
00007ad0  69 74 20 2e 2e 2e 0d 2b  3e 38 e7 20 28 61 6c 62  |it ....+>8. (alb|
00007ae0  61 5f 74 79 70 65 25 3e  30 20 80 20 61 6c 62 61  |a_type%>0 . alba|
00007af0  5f 74 79 70 65 25 3c 3e  34 30 39 36 29 20 8c 20  |_type%<>4096) . |
00007b00  f2 61 6c 62 61 5f 70 75  72 67 65 28 30 29 0d 2b  |.alba_purge(0).+|
00007b10  48 04 0d 2b 52 28 61 6c  62 61 5f 6e 65 77 6c 69  |H..+R(alba_newli|
00007b20  6e 6b 66 69 6c 65 24 3d  a4 73 74 72 69 6e 67 28  |nkfile$=.string(|
00007b30  62 6c 6f 63 6b 25 2b 34  34 29 0d 2b 5c 2d 61 6c  |block%+44).+\-al|
00007b40  62 61 5f 6e 65 77 6c 69  6e 6b 6c 65 61 66 24 3d  |ba_newlinkleaf$=|
00007b50  a4 47 65 74 4c 65 61 66  4e 61 6d 65 28 62 6c 6f  |.GetLeafName(blo|
00007b60  63 6b 25 2b 34 34 29 0d  2b 66 16 74 79 70 65 25  |ck%+44).+f.type%|
00007b70  3d 21 28 62 6c 6f 63 6b  25 2b 34 30 29 0d 2b 70  |=!(block%+40).+p|
00007b80  14 61 6c 62 61 5f 74 79  70 65 25 3d 74 79 70 65  |.alba_type%=type|
00007b90  25 0d 2b 7a 2c f4 20 50  52 4f 43 65 72 72 6f 72  |%.+z,. PROCerror|
00007ba0  28 22 54 79 70 65 20 3d  20 22 2b 53 54 52 24 28  |("Type = "+STR$(|
00007bb0  74 79 70 65 25 29 2b 43  48 52 24 30 29 0d 2b 84  |type%)+CHR$0).+.|
00007bc0  36 64 65 73 74 69 6e 61  74 69 6f 6e 64 69 72 24  |6destinationdir$|
00007bd0  3d 41 70 70 50 61 74 68  24 2b 22 2e 55 73 65 72  |=AppPath$+".User|
00007be0  73 2e 22 2b 55 73 65 72  24 2b 22 2e 4c 69 6e 6b  |s."+User$+".Link|
00007bf0  73 2e 22 0d 2b 8e 04 0d  2b 98 04 0d 2b a2 14 e7  |s.".+...+...+...|
00007c00  20 28 74 79 70 65 25 3d  34 30 39 36 29 20 8c 0d  | (type%=4096) ..|
00007c10  2b ac 21 f4 20 53 74 6f  72 65 20 74 68 69 73 20  |+.!. Store this |
00007c20  64 69 72 65 63 74 6f 72  79 20 61 63 63 65 73 73  |directory access|
00007c30  0d 2b b6 3f 64 65 73 74  69 6e 61 74 69 6f 6e 64  |.+.?destinationd|
00007c40  69 72 24 3d 64 65 73 74  69 6e 61 74 69 6f 6e 64  |ir$=destinationd|
00007c50  69 72 24 2b bd 28 53 79  73 46 69 6c 65 50 72 65  |ir$+.(SysFilePre|
00007c60  66 69 78 25 29 2b 22 46  6f 6c 64 65 72 73 22 0d  |fix%)+"Folders".|
00007c70  2b c0 05 cd 0d 2b ca 04  0d 2b d4 14 e7 20 28 74  |+....+...+... (t|
00007c80  79 70 65 25 3d 38 31 39  32 29 20 8c 0d 2b de 23  |ype%=8192) ..+.#|
00007c90  f4 20 53 74 6f 72 65 20  74 68 69 73 20 61 70 70  |. Store this app|
00007ca0  6c 69 63 61 74 69 6f 6e  20 61 63 63 65 73 73 0d  |lication access.|
00007cb0  2b e8 40 64 65 73 74 69  6e 61 74 69 6f 6e 64 69  |+.@destinationdi|
00007cc0  72 24 3d 64 65 73 74 69  6e 61 74 69 6f 6e 64 69  |r$=destinationdi|
00007cd0  72 24 2b bd 28 53 79 73  46 69 6c 65 50 72 65 66  |r$+.(SysFilePref|
00007ce0  69 78 25 29 2b 22 50 72  6f 67 72 61 6d 73 22 0d  |ix%)+"Programs".|
00007cf0  2b f2 05 cd 0d 2b fc 04  0d 2c 06 14 e7 20 28 74  |+....+...,... (t|
00007d00  79 70 65 25 3c 34 30 39  36 29 20 8c 0d 2c 10 1e  |ype%<4096) ..,..|
00007d10  20 e7 20 28 74 79 70 65  25 3d 44 6f 63 75 6d 65  | . (type%=Docume|
00007d20  6e 74 54 79 70 65 25 29  20 8c 0d 2c 1a 41 20 64  |ntType%) ..,.A d|
00007d30  65 73 74 69 6e 61 74 69  6f 6e 64 69 72 24 3d 64  |estinationdir$=d|
00007d40  65 73 74 69 6e 61 74 69  6f 6e 64 69 72 24 2b bd  |estinationdir$+.|
00007d50  28 53 79 73 46 69 6c 65  50 72 65 66 69 78 25 29  |(SysFilePrefix%)|
00007d60  2b 22 44 6f 63 75 6d 65  6e 74 22 0d 2c 24 06 20  |+"Document".,$. |
00007d70  cd 0d 2c 2e 05 20 0d 2c  38 1d 20 e7 20 28 74 79  |..,.. .,8. . (ty|
00007d80  70 65 25 3d 50 69 63 74  75 72 65 54 79 70 65 25  |pe%=PictureType%|
00007d90  29 20 8c 0d 2c 42 40 20  64 65 73 74 69 6e 61 74  |) ..,B@ destinat|
00007da0  69 6f 6e 64 69 72 24 3d  64 65 73 74 69 6e 61 74  |iondir$=destinat|
00007db0  69 6f 6e 64 69 72 24 2b  bd 28 53 79 73 46 69 6c  |iondir$+.(SysFil|
00007dc0  65 50 72 65 66 69 78 25  29 2b 22 50 69 63 74 75  |ePrefix%)+"Pictu|
00007dd0  72 65 22 0d 2c 4c 06 20  cd 0d 2c 56 04 0d 2c 60  |re".,L. ..,V..,`|
00007de0  35 20 e7 20 28 74 79 70  65 25 3c 3e 50 69 63 74  |5 . (type%<>Pict|
00007df0  75 72 65 54 79 70 65 25  20 80 20 74 79 70 65 25  |ureType% . type%|
00007e00  3c 3e 44 6f 63 75 6d 65  6e 74 54 79 70 65 25 29  |<>DocumentType%)|
00007e10  20 8c 0d 2c 6a 3e 20 64  65 73 74 69 6e 61 74 69  | ..,j> destinati|
00007e20  6f 6e 64 69 72 24 3d 64  65 73 74 69 6e 61 74 69  |ondir$=destinati|
00007e30  6f 6e 64 69 72 24 2b bd  28 53 79 73 46 69 6c 65  |ondir$+.(SysFile|
00007e40  50 72 65 66 69 78 25 29  2b 22 46 69 6c 65 73 22  |Prefix%)+"Files"|
00007e50  0d 2c 74 06 20 cd 0d 2c  7e 05 cd 0d 2c 88 04 0d  |.,t. ..,~...,...|
00007e60  2c 92 28 61 6c 62 61 5f  64 65 73 74 69 6e 61 74  |,.(alba_destinat|
00007e70  69 6f 6e 64 69 72 24 3d  64 65 73 74 69 6e 61 74  |iondir$=destinat|
00007e80  69 6f 6e 64 69 72 24 0d  2c 9c 10 61 6c 62 61 5f  |iondir$.,..alba_|
00007e90  74 69 6d 65 25 3d 91 0d  2c a6 05 e1 0d 2c b0 04  |time%=..,....,..|
00007ea0  0d 2c ba 18 dd f2 61 75  74 6f 61 64 64 6e 65 77  |.,....autoaddnew|
00007eb0  73 68 6f 72 74 63 75 74  0d 2c c4 18 ea 20 61 75  |shortcut.,... au|
00007ec0  74 6f 64 72 6f 70 64 69  72 65 63 74 6f 72 79 24  |todropdirectory$|
00007ed0  0d 2c ce 23 ea 20 6e 75  6d 62 65 72 25 2c 20 6e  |.,.#. number%, n|
00007ee0  65 78 74 25 2c 6e 75 6d  62 65 72 6f 66 69 74 65  |ext%,numberofite|
00007ef0  6d 73 25 0d 2c d8 3e ea  20 6f 6c 64 65 73 74 64  |ms%.,.>. oldestd|
00007f00  61 74 65 25 2c 6f 6c 64  65 73 74 6e 61 6d 65 24  |ate%,oldestname$|
00007f10  2c 6f 6c 64 65 73 74 74  79 70 65 25 2c 6f 6c 64  |,oldesttype%,old|
00007f20  65 73 74 6e 65 78 74 25  2c 6f 6c 64 6e 65 78 74  |estnext%,oldnext|
00007f30  25 0d 2c e2 10 ea 20 64  65 6c 73 74 72 69 6e 67  |%.,... delstring|
00007f40  24 0d 2c ec 2d 61 75 74  6f 64 72 6f 70 64 69 72  |$.,.-autodropdir|
00007f50  65 63 74 6f 72 79 24 20  3d 20 61 6c 62 61 5f 64  |ectory$ = alba_d|
00007f60  65 73 74 69 6e 61 74 69  6f 6e 64 69 72 24 0d 2c  |estinationdir$.,|
00007f70  f6 22 f2 65 6e 73 75 72  65 64 69 72 28 61 75 74  |.".ensuredir(aut|
00007f80  6f 64 72 6f 70 64 69 72  65 63 74 6f 72 79 24 29  |odropdirectory$)|
00007f90  0d 2d 00 34 f4 20 41 75  74 6f 20 69 6e 73 65 72  |.-.4. Auto inser|
00007fa0  74 20 64 69 72 65 63 74  6f 72 79 73 20 68 61 76  |t directorys hav|
00007fb0  65 20 61 20 6c 69 6d 69  74 20 6f 66 20 39 20 69  |e a limit of 9 i|
00007fc0  74 65 6d 73 0d 2d 0a 1e  f4 20 49 73 20 6c 69 6e  |tems.-... Is lin|
00007fd0  6b 20 64 69 72 65 63 74  6f 72 79 20 65 6d 70 74  |k directory empt|
00007fe0  79 3f 0d 2d 14 14 6e 75  6d 62 65 72 6f 66 69 74  |y?.-..numberofit|
00007ff0  65 6d 73 25 3d 30 0d 2d  1e 0b 6e 65 78 74 25 3d  |ems%=0.-..next%=|
00008000  30 0d 2d 28 11 6f 6c 64  65 73 74 64 61 74 65 25  |0.-(.oldestdate%|
00008010  3d 30 0d 2d 32 26 c8 95  28 6e 65 78 74 25 3c 3e  |=0.-2&..(next%<>|
00008020  2d 31 20 80 20 6e 75 6d  62 65 72 6f 66 69 74 65  |-1 . numberofite|
00008030  6d 73 25 3c 3d 31 36 29  0d 2d 3c 22 24 73 74 72  |ms%<=16).-<"$str|
00008040  69 6e 67 25 3d 61 75 74  6f 64 72 6f 70 64 69 72  |ing%=autodropdir|
00008050  65 63 74 6f 72 79 24 2b  bd 30 0d 2d 46 12 6f 6c  |ectory$+.0.-F.ol|
00008060  64 6e 65 78 74 25 3d 6e  65 78 74 25 0d 2d 50 45  |dnext%=next%.-PE|
00008070  c8 99 20 22 4f 53 5f 47  42 50 42 22 2c 31 31 2c  |.. "OS_GBPB",11,|
00008080  73 74 72 69 6e 67 25 2c  64 62 6c 6f 63 6b 25 2c  |string%,dblock%,|
00008090  31 2c 6e 65 78 74 25 2c  36 33 2c 22 2a 22 20 b8  |1,next%,63,"*" .|
000080a0  20 2c 2c 2c 6e 75 6d 62  65 72 25 2c 6e 65 78 74  | ,,,number%,next|
000080b0  25 0d 2d 5a 11 e7 20 6e  65 78 74 25 3c 3e 2d 31  |%.-Z.. next%<>-1|
000080c0  20 8c 0d 2d 64 15 6e 75  6d 62 65 72 6f 66 69 74  | ..-d.numberofit|
000080d0  65 6d 73 25 2b 3d 31 0d  2d 6e 7c e7 20 28 28 64  |ems%+=1.-n|. ((d|
000080e0  62 6c 6f 63 6b 25 21 32  34 29 3c 6f 6c 64 65 73  |block%!24)<oldes|
000080f0  74 64 61 74 65 25 20 84  20 6f 6c 64 65 73 74 64  |tdate% . oldestd|
00008100  61 74 65 25 3d 30 29 20  6f 6c 64 65 73 74 64 61  |ate%=0) oldestda|
00008110  74 65 25 3d 64 62 6c 6f  63 6b 25 21 32 34 3a 6f  |te%=dblock%!24:o|
00008120  6c 64 65 73 74 6e 61 6d  65 24 3d a4 73 74 72 69  |ldestname$=.stri|
00008130  6e 67 28 64 62 6c 6f 63  6b 25 2b 32 39 29 3a 6f  |ng(dblock%+29):o|
00008140  6c 64 65 73 74 6e 65 78  74 25 3d 6f 6c 64 6e 65  |ldestnext%=oldne|
00008150  78 74 25 0d 2d 78 05 cd  0d 2d 82 05 ce 0d 2d 8c  |xt%.-x...-....-.|
00008160  1a e7 20 28 6e 75 6d 62  65 72 6f 66 69 74 65 6d  |.. (numberofitem|
00008170  73 25 3c 39 29 20 8c 0d  2d 96 26 20 f4 20 49 66  |s%<9) ..-.& . If|
00008180  20 73 6f 20 74 68 65 6e  20 61 75 74 6f 6d 61 74  | so then automat|
00008190  69 63 61 6c 6c 79 20 69  6e 73 65 72 74 0d 2d a0  |ically insert.-.|
000081a0  4c 20 f2 61 64 64 6e 65  77 73 68 6f 72 74 63 75  |L .addnewshortcu|
000081b0  74 28 61 75 74 6f 64 72  6f 70 64 69 72 65 63 74  |t(autodropdirect|
000081c0  6f 72 79 24 2c 61 6c 62  61 5f 6e 65 77 6c 69 6e  |ory$,alba_newlin|
000081d0  6b 66 69 6c 65 24 2c 61  6c 62 61 5f 6e 65 77 6c  |kfile$,alba_newl|
000081e0  69 6e 6b 6c 65 61 66 24  29 0d 2d aa 05 cc 0d 2d  |inkleaf$).-....-|
000081f0  b4 2b 20 f4 20 49 6e 74  65 6c 6c 69 67 65 6e 74  |.+ . Intelligent|
00008200  6c 79 20 64 65 6c 65 74  65 20 61 6e 20 6f 6c 64  |ly delete an old|
00008210  20 66 69 6c 65 20 61 6e  64 0d 2d be 20 20 f4 20  | file and.-.  . |
00008220  47 65 74 20 66 69 6c 65  74 79 70 65 20 6f 66 20  |Get filetype of |
00008230  74 68 69 73 20 66 69 6c  65 0d 2d c8 23 20 24 73  |this file.-.# $s|
00008240  74 72 69 6e 67 25 3d 61  75 74 6f 64 72 6f 70 64  |tring%=autodropd|
00008250  69 72 65 63 74 6f 72 79  24 2b bd 30 0d 2d d2 39  |irectory$+.0.-.9|
00008260  20 c8 99 20 22 4f 53 5f  47 42 50 42 22 2c 31 32  | .. "OS_GBPB",12|
00008270  2c 73 74 72 69 6e 67 25  2c 64 62 6c 6f 63 6b 25  |,string%,dblock%|
00008280  2c 31 2c 6f 6c 64 65 73  74 6e 65 78 74 25 2c 36  |,1,oldestnext%,6|
00008290  33 2c 22 2a 22 0d 2d dc  1b 20 6f 6c 64 65 73 74  |3,"*".-.. oldest|
000082a0  74 79 70 65 25 3d 64 62  6c 6f 63 6b 25 21 32 30  |type%=dblock%!20|
000082b0  0d 2d e6 5e 20 20 f4 20  50 52 4f 43 65 72 72 6f  |.-.^  . PROCerro|
000082c0  72 28 22 4f 6c 64 65 73  74 20 66 69 6c 65 20 74  |r("Oldest file t|
000082d0  6f 20 72 65 6d 6f 76 65  20 3a 20 22 2b 6f 6c 64  |o remove : "+old|
000082e0  65 73 74 6e 61 6d 65 24  2b 22 20 6f 66 20 74 79  |estname$+" of ty|
000082f0  70 65 20 22 2b 53 54 52  24 7e 28 6f 6c 64 65 73  |pe "+STR$~(oldes|
00008300  74 74 79 70 65 25 29 2b  43 48 52 24 30 29 0d 2d  |ttype%)+CHR$0).-|
00008310  f0 2d 20 f4 20 44 65 6c  65 74 65 20 74 68 65 20  |.- . Delete the |
00008320  6f 6c 64 65 73 74 20 6c  69 6e 6b 20 69 6e 20 74  |oldest link in t|
00008330  68 69 73 20 64 69 72 20  2e 2e 2e 0d 2d fa 3a 20  |his dir ....-.: |
00008340  f4 20 46 69 6e 61 6c 20  63 68 65 63 6b 20 2d 20  |. Final check - |
00008350  21 53 74 61 72 74 20 63  61 6e 20 6f 6e 6c 79 20  |!Start can only |
00008360  72 65 6d 6f 76 65 20 61  20 66 69 6c 65 20 69 66  |remove a file if|
00008370  20 69 74 27 73 0d 2e 04  36 20 f4 20 66 69 6c 65  | it's...6 . file|
00008380  74 79 70 65 20 69 73 20  26 61 66 33 20 2e 2e 2e  |type is &af3 ...|
00008390  20 28 50 72 65 63 61 75  74 69 6f 6e 20 61 67 61  | (Precaution aga|
000083a0  69 6e 73 74 20 65 72 72  6f 72 29 0d 2e 0e 1b 20  |inst error).... |
000083b0  e7 20 28 6f 6c 64 65 73  74 74 79 70 65 25 3d 26  |. (oldesttype%=&|
000083c0  61 66 33 29 20 8c 0d 2e  18 3c 20 64 65 6c 73 74  |af3) ....< delst|
000083d0  72 69 6e 67 24 3d 22 64  65 6c 65 74 65 20 22 2b  |ring$="delete "+|
000083e0  61 75 74 6f 64 72 6f 70  64 69 72 65 63 74 6f 72  |autodropdirector|
000083f0  79 24 2b 22 2e 22 2b 6f  6c 64 65 73 74 6e 61 6d  |y$+"."+oldestnam|
00008400  65 24 0d 2e 22 34 20 f4  20 50 52 4f 43 65 72 72  |e$.."4 . PROCerr|
00008410  6f 72 28 22 61 62 6f 75  74 20 74 6f 20 4f 53 43  |or("about to OSC|
00008420  4c 49 20 22 2b 64 65 6c  73 74 72 69 6e 67 24 2b  |LI "+delstring$+|
00008430  43 48 52 24 30 29 0d 2e  2c 15 20 ff 28 64 65 6c  |CHR$0)..,. .(del|
00008440  73 74 72 69 6e 67 24 2b  bd 30 29 0d 2e 36 1b 20  |string$+.0)..6. |
00008450  f4 20 69 6e 73 65 72 74  20 61 20 6e 65 77 20 6f  |. insert a new o|
00008460  6e 65 20 2e 2e 2e 0d 2e  40 4c 20 f2 61 64 64 6e  |ne .....@L .addn|
00008470  65 77 73 68 6f 72 74 63  75 74 28 61 75 74 6f 64  |ewshortcut(autod|
00008480  72 6f 70 64 69 72 65 63  74 6f 72 79 24 2c 61 6c  |ropdirectory$,al|
00008490  62 61 5f 6e 65 77 6c 69  6e 6b 66 69 6c 65 24 2c  |ba_newlinkfile$,|
000084a0  61 6c 62 61 5f 6e 65 77  6c 69 6e 6b 6c 65 61 66  |alba_newlinkleaf|
000084b0  24 29 0d 2e 4a 06 20 cd  0d 2e 54 05 cd 0d 2e 5e  |$)..J. ...T....^|
000084c0  11 61 6c 62 61 5f 74 79  70 65 25 3d 2d 31 0d 2e  |.alba_type%=-1..|
000084d0  68 05 e1 0d 2e 72 04 0d  2e 7c 32 f4 20 50 72 6f  |h....r...|2. Pro|
000084e0  6d 70 74 20 75 73 65 72  20 74 6f 20 73 65 6c 65  |mpt user to sele|
000084f0  63 74 20 64 69 72 65 63  74 6f 72 79 20 66 6f 72  |ct directory for|
00008500  20 6e 65 77 20 6c 69 6e  6b 0d 2e 86 18 dd f2 64  | new link......d|
00008510  61 74 61 5f 6c 6f 61 64  5f 61 64 64 5f 6c 69 6e  |ata_load_add_lin|
00008520  6b 0d 2e 90 2a ea 20 70  61 74 68 24 2c 6c 65 61  |k...*. path$,lea|
00008530  66 24 2c 74 79 70 65 25  2c 6c 65 61 66 70 74 72  |f$,type%,leafptr|
00008540  25 2c 6c 69 6e 6b 6e 61  6d 65 24 0d 2e 9a 20 e7  |%,linkname$... .|
00008550  20 28 a4 43 68 65 63 6b  4c 69 6e 6b 73 44 69 72  | (.CheckLinksDir|
00008560  45 78 69 73 74 73 3d 30  29 20 e1 0d 2e a4 1c 70  |Exists=0) .....p|
00008570  61 74 68 24 3d a4 73 74  72 69 6e 67 28 62 6c 6f  |ath$=.string(blo|
00008580  63 6b 25 2b 34 34 29 0d  2e ae 21 6c 65 61 66 24  |ck%+44)...!leaf$|
00008590  3d a4 47 65 74 4c 65 61  66 4e 61 6d 65 28 62 6c  |=.GetLeafName(bl|
000085a0  6f 63 6b 25 2b 34 34 29  0d 2e b8 16 74 79 70 65  |ock%+44)....type|
000085b0  25 3d 21 28 62 6c 6f 63  6b 25 2b 34 30 29 0d 2e  |%=!(block%+40)..|
000085c0  c2 36 6c 69 6e 6b 6e 61  6d 65 24 3d 41 70 70 50  |.6linkname$=AppP|
000085d0  61 74 68 24 2b 22 2e 55  73 65 72 73 2e 22 2b 55  |ath$+".Users."+U|
000085e0  73 65 72 24 2b 22 2e 4c  69 6e 6b 73 2e 22 2b 6c  |ser$+".Links."+l|
000085f0  65 61 66 24 0d 2e cc 16  6e 65 77 6c 69 6e 6b 6c  |eaf$....newlinkl|
00008600  65 61 66 24 3d 6c 65 61  66 24 0d 2e d6 23 6e 65  |eaf$=leaf$...#ne|
00008610  77 6c 69 6e 6b 66 69 6c  65 24 3d a4 73 74 72 69  |wlinkfile$=.stri|
00008620  6e 67 28 62 6c 6f 63 6b  25 2b 34 34 29 0d 2e e0  |ng(block%+44)...|
00008630  1e f4 20 49 73 20 6c 69  6e 6b 20 64 69 72 65 63  |.. Is link direc|
00008640  74 6f 72 79 20 65 6d 70  74 79 3f 0d 2e ea 31 24  |tory empty?...1$|
00008650  73 74 72 69 6e 67 25 3d  41 70 70 50 61 74 68 24  |string%=AppPath$|
00008660  2b 22 2e 55 73 65 72 73  2e 22 2b 55 73 65 72 24  |+".Users."+User$|
00008670  2b 22 2e 4c 69 6e 6b 73  22 2b bd 30 0d 2e f4 3b  |+".Links"+.0...;|
00008680  c8 99 20 22 4f 53 5f 47  42 50 42 22 2c 31 30 2c  |.. "OS_GBPB",10,|
00008690  73 74 72 69 6e 67 25 2c  64 62 6c 6f 63 6b 25 2c  |string%,dblock%,|
000086a0  31 2c 30 2c 36 33 2c 22  2a 22 20 b8 20 2c 2c 2c  |1,0,63,"*" . ,,,|
000086b0  6e 75 6d 62 65 72 25 0d  2e fe 11 e7 20 6e 75 6d  |number%..... num|
000086c0  62 65 72 25 3d 30 20 8c  0d 2f 08 34 f4 20 49 66  |ber%=0 ../.4. If|
000086d0  20 73 6f 20 74 68 65 6e  20 61 75 74 6f 6d 61 74  | so then automat|
000086e0  69 63 61 6c 6c 79 20 61  64 64 20 74 6f 20 72 6f  |ically add to ro|
000086f0  6f 74 20 64 69 72 65 63  74 6f 72 79 0d 2f 12 50  |ot directory./.P|
00008700  f2 61 64 64 6e 65 77 73  68 6f 72 74 63 75 74 28  |.addnewshortcut(|
00008710  41 70 70 50 61 74 68 24  2b 22 2e 55 73 65 72 73  |AppPath$+".Users|
00008720  2e 22 2b 55 73 65 72 24  2b 22 2e 4c 69 6e 6b 73  |."+User$+".Links|
00008730  22 2c 6e 65 77 6c 69 6e  6b 66 69 6c 65 24 2c 6e  |",newlinkfile$,n|
00008740  65 77 6c 69 6e 6b 6c 65  61 66 24 29 0d 2f 1c 05  |ewlinkleaf$)./..|
00008750  cc 0d 2f 26 18 f2 73 68  6f 77 73 68 6f 72 74 63  |../&..showshortc|
00008760  75 74 6d 65 6e 75 28 31  29 0d 2f 30 05 cd 0d 2f  |utmenu(1)./0.../|
00008770  3a 05 e1 0d 2f 44 04 0d  2f 4e 2c f4 20 41 64 64  |:.../D../N,. Add|
00008780  20 6e 65 77 20 6c 69 6e  6b 20 74 6f 20 74 68 65  | new link to the|
00008790  20 73 68 6f 72 74 63 75  74 20 64 69 72 65 63 74  | shortcut direct|
000087a0  6f 72 79 0d 2f 58 46 dd  f2 61 64 64 6e 65 77 73  |ory./XF..addnews|
000087b0  68 6f 72 74 63 75 74 28  64 72 6f 70 64 69 72 65  |hortcut(dropdire|
000087c0  63 74 6f 72 79 24 2c 61  64 64 5f 6e 65 77 6c 69  |ctory$,add_newli|
000087d0  6e 6b 66 69 6c 65 24 2c  61 64 64 5f 6e 65 77 6c  |nkfile$,add_newl|
000087e0  69 6e 6b 6c 65 61 66 24  29 0d 2f 62 18 ea 20 6c  |inkleaf$)./b.. l|
000087f0  69 6e 6b 6e 61 6d 65 24  2c 6c 65 61 66 70 74 72  |inkname$,leafptr|
00008800  25 0d 2f 6c 31 6c 69 6e  6b 6e 61 6d 65 24 3d 64  |%./l1linkname$=d|
00008810  72 6f 70 64 69 72 65 63  74 6f 72 79 24 2b 22 2e  |ropdirectory$+".|
00008820  22 2b 61 64 64 5f 6e 65  77 6c 69 6e 6b 6c 65 61  |"+add_newlinklea|
00008830  66 24 0d 2f 76 20 24 73  74 72 69 6e 67 25 3d 61  |f$./v $string%=a|
00008840  64 64 5f 6e 65 77 6c 69  6e 6b 66 69 6c 65 24 2b  |dd_newlinkfile$+|
00008850  bd 30 0d 2f 80 43 f4 50  52 4f 43 65 72 72 6f 72  |.0./.C.PROCerror|
00008860  28 22 43 6f 6e 74 65 6e  74 73 20 6f 66 20 22 2b  |("Contents of "+|
00008870  6c 69 6e 6b 6e 61 6d 65  24 2b 22 3d 22 2b 61 64  |linkname$+"="+ad|
00008880  64 5f 6e 65 77 6c 69 6e  6b 66 69 6c 65 24 2b 43  |d_newlinkfile$+C|
00008890  48 52 24 30 29 0d 2f 8a  14 6c 65 61 66 70 74 72  |HR$0)./..leafptr|
000088a0  25 3d 73 74 72 69 6e 67  25 0d 2f 94 38 f4 20 43  |%=string%./.8. C|
000088b0  68 65 63 6b 20 74 6f 20  73 65 65 20 69 66 20 74  |heck to see if t|
000088c0  68 69 73 20 66 69 6c 65  20 61 6c 72 65 61 64 79  |his file already|
000088d0  20 65 78 69 73 74 73 20  61 6e 64 20 69 66 20 73  | exists and if s|
000088e0  6f 0d 2f 9e 1b f4 20 70  72 6f 6d 70 74 20 66 6f  |o./... prompt fo|
000088f0  72 20 6f 76 65 72 77 72  69 74 65 2e 0d 2f a8 16  |r overwrite../..|
00008900  58 25 3d ae 28 6c 69 6e  6b 6e 61 6d 65 24 2b bd  |X%=.(linkname$+.|
00008910  30 29 0d 2f b2 18 c8 95  28 28 3f 6c 65 61 66 70  |0)./....((?leafp|
00008920  74 72 25 29 20 3e 20 33  31 29 0d 2f bc 13 d5 23  |tr%) > 31)./...#|
00008930  58 25 2c 20 3f 6c 65 61  66 70 74 72 25 0d 2f c6  |X%, ?leafptr%./.|
00008940  0f 6c 65 61 66 70 74 72  25 2b 3d 31 0d 2f d0 05  |.leafptr%+=1./..|
00008950  ce 0d 2f da 26 d5 23 58  25 2c 20 31 30 3a f4 20  |../.&.#X%, 10:. |
00008960  4f 75 74 70 75 74 20 61  20 74 65 72 6d 69 6e 61  |Output a termina|
00008970  74 69 6e 67 20 4c 46 0d  2f e4 08 d9 23 58 25 0d  |ting LF./...#X%.|
00008980  2f ee 1c f4 20 53 65 74  20 74 79 70 65 20 61 70  |/... Set type ap|
00008990  70 72 6f 70 72 69 61 74  65 6c 79 0d 2f f8 25 ff  |propriately./.%.|
000089a0  28 22 53 65 74 54 79 70  65 20 22 2b 6c 69 6e 6b  |("SetType "+link|
000089b0  6e 61 6d 65 24 2b 22 20  61 66 33 22 2b bd 30 29  |name$+" af3"+.0)|
000089c0  0d 30 02 05 e1 0d 30 0c  04 0d 30 16 19 dd f2 61  |.0....0...0....a|
000089d0  6c 62 61 5f 70 75 72 67  65 28 65 78 70 69 72 79  |lba_purge(expiry|
000089e0  25 29 0d 30 20 18 e7 20  28 61 6c 62 61 5f 74 79  |%).0 .. (alba_ty|
000089f0  70 65 25 3c 30 29 20 8c  20 e1 0d 30 2a 2e e7 20  |pe%<0) . ..0*.. |
00008a00  28 65 78 70 69 72 79 25  3e 30 20 80 20 28 61 6c  |(expiry%>0 . (al|
00008a10  62 61 5f 74 69 6d 65 25  2b 65 78 70 69 72 79 25  |ba_time%+expiry%|
00008a20  29 3e 91 29 20 8c 20 e1  0d 30 34 17 f2 61 75 74  |)>.) . ..04..aut|
00008a30  6f 61 64 64 6e 65 77 73  68 6f 72 74 63 75 74 0d  |oaddnewshortcut.|
00008a40  30 3e 05 e1 0d 30 48 04  0d 30 52 0e dd f2 64 61  |0>...0H..0R...da|
00008a50  74 61 5f 61 63 6b 0d 30  5c 1f f4 20 53 74 6f 72  |ta_ack.0\.. Stor|
00008a60  65 20 70 61 74 68 20 69  6e 20 74 65 6d 70 20 73  |e path in temp s|
00008a70  74 72 69 6e 67 0d 30 66  1c 70 61 74 68 24 3d a4  |tring.0f.path$=.|
00008a80  73 74 72 69 6e 67 28 62  6c 6f 63 6b 25 2b 34 34  |string(block%+44|
00008a90  29 0d 30 70 11 70 61 74  68 24 3d c0 70 61 74 68  |).0p.path$=.path|
00008aa0  24 29 0d 30 7a 16 64 68  61 6e 64 6c 65 25 3d 62  |$).0z.dhandle%=b|
00008ab0  6c 6f 63 6b 25 21 32 30  0d 30 84 23 e7 20 a7 70  |lock%!20.0.#. .p|
00008ac0  61 74 68 24 2c 22 3c 57  69 6d 70 24 53 63 72 61  |ath$,"<Wimp$Scra|
00008ad0  70 44 69 72 3e 22 29 3e  30 20 8c 0d 30 8e 27 20  |pDir>")>0 ..0.' |
00008ae0  f4 49 46 20 28 64 72 61  67 5f 69 63 6f 6e 25 3d  |.IF (drag_icon%=|
00008af0  61 64 64 5f 77 69 6e 64  6f 77 25 29 20 54 48 45  |add_window%) THE|
00008b00  4e 20 0d 30 98 40 20 20  f2 65 72 72 6f 72 28 22  |N .0.@  .error("|
00008b10  59 6f 75 20 63 61 6e 27  74 20 61 64 64 20 74 68  |You can't add th|
00008b20  61 74 20 74 6f 20 74 68  65 20 46 69 6c 65 72 20  |at to the Filer |
00008b30  77 69 6e 64 6f 77 20 63  61 63 68 65 2e 22 2b bd  |window cache."+.|
00008b40  30 29 0d 30 a2 0b 20 f4  45 4e 44 49 46 0d 30 ac  |0).0.. .ENDIF.0.|
00008b50  06 20 e1 0d 30 b6 05 cd  0d 30 c0 1f f4 20 43 6f  |. ..0....0... Co|
00008b60  6d 70 69 6c 65 20 64 65  73 6b 74 6f 70 20 62 6f  |mpile desktop bo|
00008b70  6f 74 20 66 69 6c 65 0d  30 ca 14 c8 99 22 48 6f  |ot file.0...."Ho|
00008b80  75 72 67 6c 61 73 73 5f  4f 6e 22 0d 30 d4 2d e7  |urglass_On".0.-.|
00008b90  20 28 64 72 61 67 5f 69  63 6f 6e 25 3d 61 64 64  | (drag_icon%=add|
00008ba0  5f 77 69 6e 64 6f 77 25  29 20 8c 20 f2 73 61 76  |_window%) . .sav|
00008bb0  65 64 65 73 6b 74 6f 70  0d 30 de 36 e7 20 28 64  |edesktop.0.6. (d|
00008bc0  72 61 67 5f 69 63 6f 6e  25 3d 73 75 62 74 72 61  |rag_icon%=subtra|
00008bd0  63 74 5f 77 69 6e 64 6f  77 25 29 20 8c 20 f2 73  |ct_window%) . .s|
00008be0  75 62 74 72 61 63 74 5f  77 69 6e 64 6f 77 0d 30  |ubtract_window.0|
00008bf0  e8 05 e1 0d 30 f2 04 0d  30 fc 11 dd f2 64 65 73  |....0...0....des|
00008c00  6b 74 6f 70 5f 61 63 6b  0d 31 06 36 f4 20 49 66  |ktop_ack.1.6. If|
00008c10  20 77 65 20 67 65 74 20  61 20 64 65 73 6b 74 6f  | we get a deskto|
00008c20  70 5f 61 63 6b 20 74 68  65 6e 20 74 68 61 74 20  |p_ack then that |
00008c30  6d 65 61 6e 73 20 74 68  61 74 20 61 6c 6c 0d 31  |means that all.1|
00008c40  10 39 f4 20 61 70 70 6c  69 63 61 74 69 6f 6e 73  |.9. applications|
00008c50  20 68 61 76 65 20 72 65  73 70 6f 6e 64 65 64 20  | have responded |
00008c60  74 6f 20 74 68 65 20 72  65 71 75 65 73 74 20 74  |to the request t|
00008c70  6f 20 77 72 69 74 65 0d  31 1a 1f f4 20 74 6f 20  |o write.1... to |
00008c80  74 68 65 20 64 65 73 6b  74 6f 70 20 62 6f 6f 74  |the desktop boot|
00008c90  20 66 69 6c 65 2e 0d 31  24 1c e7 20 28 44 58 25  | file..1$.. (DX%|
00008ca0  3c 3e 30 29 20 8c 20 d9  23 44 58 25 3a 44 58 25  |<>0) . .#DX%:DX%|
00008cb0  3d 30 0d 31 2e 2a e7 20  64 72 61 67 5f 69 63 6f  |=0.1.*. drag_ico|
00008cc0  6e 25 3d 61 64 64 5f 77  69 6e 64 6f 77 25 20 8c  |n%=add_window% .|
00008cd0  20 f2 61 64 64 5f 77 69  6e 64 6f 77 0d 31 38 05  | .add_window.18.|
00008ce0  e1 0d 31 42 04 0d 31 4c  39 f4 20 2a 2a 2a 2a 2a  |..1B..1L9. *****|
00008cf0  2a 2a 2a 2a 2a 2a 2a 2a  2a 2a 2a 2a 2a 2a 2a 2a  |****************|
*
00008d10  2a 2a 2a 2a 2a 2a 2a 2a  2a 2a 2a 2a 2a 2a 0d 31  |**************.1|
00008d20  56 04 0d 31 60 10 dd f2  61 64 64 5f 77 69 6e 64  |V..1`...add_wind|
00008d30  6f 77 0d 31 6a 39 f4 20  47 6f 20 74 68 72 6f 75  |ow.1j9. Go throu|
00008d40  67 68 20 64 65 73 6b 74  6f 70 20 62 6f 6f 74 66  |gh desktop bootf|
00008d50  69 6c 65 20 6c 6f 6f 6b  69 6e 67 20 66 6f 72 20  |ile looking for |
00008d60  70 61 74 68 20 73 74 72  69 6e 67 0d 31 74 39 f4  |path string.1t9.|
00008d70  20 49 66 20 74 68 69 73  20 6c 69 6e 65 20 63 6f  | If this line co|
00008d80  6e 74 61 69 6e 73 20 70  61 74 68 5f 73 74 72 69  |ntains path_stri|
00008d90  6e 67 20 74 68 65 6e 20  61 64 64 20 72 65 6c 65  |ng then add rele|
00008da0  76 61 6e 74 0d 31 7e 27  f4 20 6c 69 6e 65 20 6f  |vant.1~'. line o|
00008db0  66 20 62 6f 6f 74 20 66  69 6c 65 20 74 6f 20 63  |f boot file to c|
00008dc0  6f 6e 66 69 67 20 66 69  6c 65 2e 0d 31 88 0f 6e  |onfig file..1..n|
00008dd0  65 77 6c 69 6e 65 24 3d  22 22 0d 31 92 20 58 25  |ewline$="".1. X%|
00008de0  3d 8e 28 41 70 70 50 61  74 68 24 2b 22 2e 74 6d  |=.(AppPath$+".tm|
00008df0  70 66 69 6c 65 22 2b bd  30 29 0d 31 9c 05 f5 0d  |pfile"+.0).1....|
00008e00  31 a6 14 41 24 3d a4 67  65 74 5f 6c 69 6e 65 28  |1..A$=.get_line(|
00008e10  58 25 29 0d 31 b0 1b 70  61 74 68 5f 73 74 61 72  |X%).1..path_star|
00008e20  74 25 3d a7 41 24 2c 20  70 61 74 68 24 29 0d 31  |t%=.A$, path$).1|
00008e30  ba 19 70 61 74 68 5f 6c  65 6e 67 74 68 25 3d a9  |..path_length%=.|
00008e40  28 70 61 74 68 24 29 0d  31 c4 66 e7 20 28 a7 41  |(path$).1.f. (.A|
00008e50  24 2c 20 22 46 69 6c 65  72 5f 4f 70 65 6e 44 69  |$, "Filer_OpenDi|
00008e60  72 22 29 3e 30 20 80 20  70 61 74 68 5f 73 74 61  |r")>0 . path_sta|
00008e70  72 74 25 3e 30 20 80 20  97 28 c1 41 24 2c 70 61  |rt%>0 . .(.A$,pa|
00008e80  74 68 5f 73 74 61 72 74  25 2b 70 61 74 68 5f 6c  |th_start%+path_l|
00008e90  65 6e 67 74 68 25 2c 31  29 29 3c 3d 33 32 29 20  |ength%,1))<=32) |
00008ea0  8c 20 6e 65 77 6c 69 6e  65 24 3d 41 24 0d 31 ce  |. newline$=A$.1.|
00008eb0  0a fd 20 c5 23 58 25 0d  31 d8 08 d9 23 58 25 0d  |.. .#X%.1...#X%.|
00008ec0  31 e2 37 f4 20 4e 6f 20  73 65 72 69 6f 75 73 20  |1.7. No serious |
00008ed0  70 72 65 63 61 75 74 69  6f 6e 73 20 6e 65 65 64  |precautions need|
00008ee0  65 64 20 68 65 72 65 20  62 65 63 61 75 73 65 20  |ed here because |
00008ef0  6f 66 20 74 68 65 0d 31  ec 20 f4 20 66 69 6c 65  |of the.1. . file|
00008f00  20 6e 61 6d 65 20 75 73  65 64 20 2e 2e 2e 20 74  | name used ... t|
00008f10  6d 70 66 69 6c 65 0d 31  f6 27 ff 28 22 44 65 6c  |mpfile.1.'.("Del|
00008f20  65 74 65 20 22 2b 41 70  70 50 61 74 68 24 2b 22  |ete "+AppPath$+"|
00008f30  2e 74 6d 70 66 69 6c 65  22 2b bd 30 29 0d 32 00  |.tmpfile"+.0).2.|
00008f40  04 0d 32 0a 2f 58 25 3d  ad 28 41 70 70 50 61 74  |..2./X%=.(AppPat|
00008f50  68 24 2b 22 2e 55 73 65  72 73 2e 22 2b 55 73 65  |h$+".Users."+Use|
00008f60  72 24 2b 22 2e 7e 7e 4f  70 65 6e 22 2b bd 30 29  |r$+".~~Open"+.0)|
00008f70  0d 32 14 0d cf 23 58 25  3d a2 23 58 25 0d 32 1e  |.2...#X%=.#X%.2.|
00008f80  1b f2 70 75 74 5f 6c 69  6e 65 28 58 25 2c 20 6e  |..put_line(X%, n|
00008f90  65 77 6c 69 6e 65 24 29  0d 32 28 08 d9 23 58 25  |ewline$).2(..#X%|
00008fa0  0d 32 32 04 0d 32 3c 30  58 25 3d ad 28 41 70 70  |.22..2<0X%=.(App|
00008fb0  50 61 74 68 24 2b 22 2e  55 73 65 72 73 2e 22 2b  |Path$+".Users."+|
00008fc0  55 73 65 72 24 2b 22 2e  7e 7e 43 6c 6f 73 65 22  |User$+".~~Close"|
00008fd0  2b bd 30 29 0d 32 46 0d  cf 23 58 25 3d a2 23 58  |+.0).2F..#X%=.#X|
00008fe0  25 0d 32 50 2a f2 70 75  74 5f 6c 69 6e 65 28 58  |%.2P*.put_line(X|
00008ff0  25 2c 20 22 46 69 6c 65  72 5f 43 6c 6f 73 65 44  |%, "Filer_CloseD|
00009000  69 72 20 22 2b 70 61 74  68 24 29 0d 32 5a 08 d9  |ir "+path$).2Z..|
00009010  23 58 25 0d 32 64 1d f4  20 52 65 2d 69 6e 69 74  |#X%.2d.. Re-init|
00009020  69 61 6c 69 73 65 20 74  68 65 20 43 61 63 68 65  |ialise the Cache|
00009030  0d 32 6e 0e f2 6c 6f 61  64 63 61 63 68 65 0d 32  |.2n..loadcache.2|
00009040  78 15 c8 99 22 48 6f 75  72 67 6c 61 73 73 5f 4f  |x..."Hourglass_O|
00009050  66 66 22 0d 32 82 05 e1  0d 32 8c 04 0d 32 96 39  |ff".2....2...2.9|
00009060  f4 20 2a 2a 2a 2a 2a 2a  2a 2a 2a 2a 2a 2a 2a 2a  |. **************|
00009070  2a 2a 2a 2a 2a 2a 2a 2a  2a 2a 2a 2a 2a 2a 2a 2a  |****************|
*
00009090  2a 2a 2a 2a 2a 0d 32 a0  04 0d 32 aa 15 dd f2 73  |*****.2...2....s|
000090a0  75 62 74 72 61 63 74 5f  77 69 6e 64 6f 77 0d 32  |ubtract_window.2|
000090b0  b4 2f 58 25 3d 8e 28 41  70 70 50 61 74 68 24 2b  |./X%=.(AppPath$+|
000090c0  22 2e 55 73 65 72 73 2e  22 2b 55 73 65 72 24 2b  |".Users."+User$+|
000090d0  22 2e 7e 7e 4f 70 65 6e  22 2b bd 30 29 0d 32 be  |".~~Open"+.0).2.|
000090e0  30 59 25 3d ae 28 41 70  70 50 61 74 68 24 2b 22  |0Y%=.(AppPath$+"|
000090f0  2e 55 73 65 72 73 2e 22  2b 55 73 65 72 24 2b 22  |.Users."+User$+"|
00009100  2e 74 6d 70 66 69 6c 65  22 2b bd 30 29 0d 32 c8  |.tmpfile"+.0).2.|
00009110  05 f5 0d 32 d2 14 41 24  3d a4 67 65 74 5f 6c 69  |...2..A$=.get_li|
00009120  6e 65 28 58 25 29 0d 32  dc 1b 70 61 74 68 5f 73  |ne(X%).2..path_s|
00009130  74 61 72 74 25 3d a7 41  24 2c 20 70 61 74 68 24  |tart%=.A$, path$|
00009140  29 0d 32 e6 19 70 61 74  68 5f 6c 65 6e 67 74 68  |).2..path_length|
00009150  25 3d a9 28 70 61 74 68  24 29 0d 32 f0 6b e7 20  |%=.(path$).2.k. |
00009160  28 a7 41 24 2c 20 22 46  69 6c 65 72 5f 4f 70 65  |(.A$, "Filer_Ope|
00009170  6e 44 69 72 22 29 3d 30  20 84 20 70 61 74 68 5f  |nDir")=0 . path_|
00009180  73 74 61 72 74 25 3d 30  20 84 20 97 28 c1 41 24  |start%=0 . .(.A$|
00009190  2c 70 61 74 68 5f 73 74  61 72 74 25 2b 70 61 74  |,path_start%+pat|
000091a0  68 5f 6c 65 6e 67 74 68  25 2c 31 29 29 3e 33 32  |h_length%,1))>32|
000091b0  29 20 8c 20 f2 70 75 74  5f 6c 69 6e 65 28 59 25  |) . .put_line(Y%|
000091c0  2c 20 41 24 29 0d 32 fa  0a fd 20 c5 23 58 25 0d  |, A$).2... .#X%.|
000091d0  33 04 08 d9 23 58 25 0d  33 0e 08 d9 23 59 25 0d  |3...#X%.3...#Y%.|
000091e0  33 18 36 ff 28 22 44 65  6c 65 74 65 20 22 2b 41  |3.6.("Delete "+A|
000091f0  70 70 50 61 74 68 24 2b  22 2e 55 73 65 72 73 2e  |ppPath$+".Users.|
00009200  22 2b 55 73 65 72 24 2b  22 2e 7e 7e 4f 70 65 6e  |"+User$+".~~Open|
00009210  22 2b bd 30 29 0d 33 22  4b ff 28 22 52 65 6e 61  |"+.0).3"K.("Rena|
00009220  6d 65 20 22 2b 41 70 70  50 61 74 68 24 2b 22 2e  |me "+AppPath$+".|
00009230  74 6d 70 66 69 6c 65 20  22 2b 41 70 70 50 61 74  |tmpfile "+AppPat|
00009240  68 24 2b 22 2e 55 73 65  72 73 2e 22 2b 55 73 65  |h$+".Users."+Use|
00009250  72 24 2b 22 2e 7e 7e 4f  70 65 6e 22 2b bd 30 29  |r$+".~~Open"+.0)|
00009260  0d 33 2c 04 0d 33 36 30  58 25 3d 8e 28 41 70 70  |.3,..360X%=.(App|
00009270  50 61 74 68 24 2b 22 2e  55 73 65 72 73 2e 22 2b  |Path$+".Users."+|
00009280  55 73 65 72 24 2b 22 2e  7e 7e 43 6c 6f 73 65 22  |User$+".~~Close"|
00009290  2b bd 30 29 0d 33 40 20  59 25 3d ae 28 41 70 70  |+.0).3@ Y%=.(App|
000092a0  50 61 74 68 24 2b 22 2e  74 6d 70 66 69 6c 65 22  |Path$+".tmpfile"|
000092b0  2b bd 30 29 0d 33 4a 05  f5 0d 33 54 14 41 24 3d  |+.0).3J...3T.A$=|
000092c0  a4 67 65 74 5f 6c 69 6e  65 28 58 25 29 0d 33 5e  |.get_line(X%).3^|
000092d0  1b 70 61 74 68 5f 73 74  61 72 74 25 3d a7 41 24  |.path_start%=.A$|
000092e0  2c 20 70 61 74 68 24 29  0d 33 68 19 70 61 74 68  |, path$).3h.path|
000092f0  5f 6c 65 6e 67 74 68 25  3d a9 28 70 61 74 68 24  |_length%=.(path$|
00009300  29 0d 33 72 6c e7 20 28  a7 41 24 2c 20 22 46 69  |).3rl. (.A$, "Fi|
00009310  6c 65 72 5f 43 6c 6f 73  65 44 69 72 22 29 3d 30  |ler_CloseDir")=0|
00009320  20 84 20 70 61 74 68 5f  73 74 61 72 74 25 3d 30  | . path_start%=0|
00009330  20 84 20 97 28 c1 41 24  2c 70 61 74 68 5f 73 74  | . .(.A$,path_st|
00009340  61 72 74 25 2b 70 61 74  68 5f 6c 65 6e 67 74 68  |art%+path_length|
00009350  25 2c 31 29 29 3e 33 32  29 20 8c 20 f2 70 75 74  |%,1))>32) . .put|
00009360  5f 6c 69 6e 65 28 59 25  2c 20 41 24 29 0d 33 7c  |_line(Y%, A$).3||
00009370  0a fd 20 c5 23 58 25 0d  33 86 08 d9 23 58 25 0d  |.. .#X%.3...#X%.|
00009380  33 90 08 d9 23 59 25 0d  33 9a 37 ff 28 22 44 65  |3...#Y%.3.7.("De|
00009390  6c 65 74 65 20 22 2b 41  70 70 50 61 74 68 24 2b  |lete "+AppPath$+|
000093a0  22 2e 55 73 65 72 73 2e  22 2b 55 73 65 72 24 2b  |".Users."+User$+|
000093b0  22 2e 7e 7e 43 6c 6f 73  65 22 2b bd 30 29 0d 33  |".~~Close"+.0).3|
000093c0  a4 4c ff 28 22 52 65 6e  61 6d 65 20 22 2b 41 70  |.L.("Rename "+Ap|
000093d0  70 50 61 74 68 24 2b 22  2e 74 6d 70 66 69 6c 65  |pPath$+".tmpfile|
000093e0  20 22 2b 41 70 70 50 61  74 68 24 2b 22 2e 55 73  | "+AppPath$+".Us|
000093f0  65 72 73 2e 22 2b 55 73  65 72 24 2b 22 2e 7e 7e  |ers."+User$+".~~|
00009400  43 6c 6f 73 65 22 2b bd  30 29 0d 33 ae 1d f4 20  |Close"+.0).3... |
00009410  52 65 2d 69 6e 69 74 69  61 6c 69 73 65 20 74 68  |Re-initialise th|
00009420  65 20 43 61 63 68 65 0d  33 b8 0e f2 6c 6f 61 64  |e Cache.3...load|
00009430  63 61 63 68 65 0d 33 c2  15 c8 99 22 48 6f 75 72  |cache.3...."Hour|
00009440  67 6c 61 73 73 5f 4f 66  66 22 0d 33 cc 05 e1 0d  |glass_Off".3....|
00009450  33 d6 04 0d 33 e0 39 f4  20 2a 2a 2a 2a 2a 2a 2a  |3...3.9. *******|
00009460  2a 2a 2a 2a 2a 2a 2a 2a  2a 2a 2a 2a 2a 2a 2a 2a  |****************|
*
00009480  2a 2a 2a 2a 2a 2a 2a 2a  2a 2a 2a 2a 0d 33 ea 39  |************.3.9|
00009490  f4 20 2a 2a 2a 2a 2a 2a  2a 2a 2a 2a 2a 2a 2a 2a  |. **************|
000094a0  2a 2a 2a 2a 2a 2a 2a 2a  2a 2a 2a 2a 2a 2a 2a 2a  |****************|
*
000094c0  2a 2a 2a 2a 2a 0d 33 f4  39 f4 20 2a 2a 2a 2a 2a  |*****.3.9. *****|
000094d0  2a 2a 2a 2a 2a 2a 2a 2a  2a 2a 2a 2a 2a 2a 2a 2a  |****************|
*
000094f0  2a 2a 2a 2a 2a 2a 2a 2a  2a 2a 2a 2a 2a 2a 0d 33  |**************.3|
00009500  fe 39 f4 20 2a 2a 2a 2a  2a 2a 2a 2a 2a 2a 2a 2a  |.9. ************|
00009510  2a 2a 2a 2a 2a 2a 2a 2a  2a 2a 2a 2a 2a 2a 2a 2a  |****************|
*
00009530  2a 2a 2a 2a 2a 2a 2a 0d  34 08 04 0d 34 12 0a dd  |*******.4...4...|
00009540  f2 69 6e 69 74 0d 34 1c  3d f4 20 44 6f 20 7e 7e  |.init.4.=. Do ~~|
00009550  4f 70 65 6e 20 61 6e 64  20 7e 7e 43 6c 6f 73 65  |Open and ~~Close|
00009560  20 66 69 6c 65 73 20 65  78 69 73 74 3f 20 49 66  | files exist? If|
00009570  20 6e 6f 74 2c 20 63 72  65 61 74 65 20 65 6d 70  | not, create emp|
00009580  74 79 0d 34 26 30 f4 20  63 6f 70 69 65 73 20 6f  |ty.4&0. copies o|
00009590  66 20 74 68 65 6d 20 74  6f 20 70 72 65 76 65 6e  |f them to preven|
000095a0  74 20 21 53 74 61 72 74  20 63 72 61 73 68 69 6e  |t !Start crashin|
000095b0  67 2e 0d 34 30 21 f2 65  6e 73 75 72 65 64 69 72  |g..40!.ensuredir|
000095c0  28 41 70 70 50 61 74 68  24 2b 22 2e 55 73 65 72  |(AppPath$+".User|
000095d0  73 22 29 0d 34 3a 28 f2  65 6e 73 75 72 65 64 69  |s").4:(.ensuredi|
000095e0  72 28 41 70 70 50 61 74  68 24 2b 22 2e 55 73 65  |r(AppPath$+".Use|
000095f0  72 73 2e 22 2b 55 73 65  72 24 29 0d 34 44 31 f2  |rs."+User$).4D1.|
00009600  65 6e 73 75 72 65 64 69  72 28 41 70 70 50 61 74  |ensuredir(AppPat|
00009610  68 24 2b 22 2e 55 73 65  72 73 2e 22 2b 55 73 65  |h$+".Users."+Use|
00009620  72 24 2b 22 2e 4c 69 6e  6b 73 22 29 0d 34 4e 04  |r$+".Links").4N.|
00009630  0d 34 58 2f 24 73 74 72  69 6e 67 25 3d 41 70 70  |.4X/$string%=App|
00009640  50 61 74 68 24 2b 22 2e  55 73 65 72 73 2e 22 2b  |Path$+".Users."+|
00009650  55 73 65 72 24 2b 22 2e  7e 7e 4f 70 65 6e 22 0d  |User$+".~~Open".|
00009660  34 62 24 c8 99 22 4f 53  5f 46 69 6c 65 22 2c 31  |4b$.."OS_File",1|
00009670  37 2c 73 74 72 69 6e 67  25 20 b8 20 72 65 73 75  |7,string% . resu|
00009680  6c 74 25 0d 34 6c 41 e7  20 28 72 65 73 75 6c 74  |lt%.4lA. (result|
00009690  25 3d 30 29 20 8c 20 58  25 3d ae 28 41 70 70 50  |%=0) . X%=.(AppP|
000096a0  61 74 68 24 2b 22 2e 55  73 65 72 73 2e 22 2b 55  |ath$+".Users."+U|
000096b0  73 65 72 24 2b 22 2e 7e  7e 4f 70 65 6e 22 29 3a  |ser$+".~~Open"):|
000096c0  d9 23 58 25 0d 34 76 30  24 73 74 72 69 6e 67 25  |.#X%.4v0$string%|
000096d0  3d 41 70 70 50 61 74 68  24 2b 22 2e 55 73 65 72  |=AppPath$+".User|
000096e0  73 2e 22 2b 55 73 65 72  24 2b 22 2e 7e 7e 43 6c  |s."+User$+".~~Cl|
000096f0  6f 73 65 22 0d 34 80 24  c8 99 22 4f 53 5f 46 69  |ose".4.$.."OS_Fi|
00009700  6c 65 22 2c 31 37 2c 73  74 72 69 6e 67 25 20 b8  |le",17,string% .|
00009710  20 72 65 73 75 6c 74 25  0d 34 8a 42 e7 20 28 72  | result%.4.B. (r|
00009720  65 73 75 6c 74 25 3d 30  29 20 8c 20 58 25 3d ae  |esult%=0) . X%=.|
00009730  28 41 70 70 50 61 74 68  24 2b 22 2e 55 73 65 72  |(AppPath$+".User|
00009740  73 2e 22 2b 55 73 65 72  24 2b 22 2e 7e 7e 43 6c  |s."+User$+".~~Cl|
00009750  6f 73 65 22 29 3a d9 23  58 25 0d 34 94 04 0d 34  |ose"):.#X%.4...4|
00009760  9e 50 c8 99 20 22 57 69  6d 70 5f 49 6e 69 74 69  |.P.. "Wimp_Initi|
00009770  61 6c 69 73 65 22 2c 32  30 30 2c 26 34 42 35 33  |alise",200,&4B53|
00009780  34 31 35 34 2c 61 70 70  24 20 b8 20 63 75 72 72  |4154,app$ . curr|
00009790  65 6e 74 5f 77 69 6d 70  5f 76 65 72 73 69 6f 6e  |ent_wimp_version|
000097a0  25 2c 74 61 73 6b 5f 68  61 6e 64 6c 65 25 0d 34  |%,task_handle%.4|
000097b0  a8 04 0d 34 b2 30 c8 99  22 57 69 6d 70 5f 4f 70  |...4.0.."Wimp_Op|
000097c0  65 6e 54 65 6d 70 6c 61  74 65 22 2c 2c 41 70 70  |enTemplate",,App|
000097d0  50 61 74 68 24 2b 22 2e  54 65 6d 70 6c 61 74 65  |Path$+".Template|
000097e0  73 22 0d 34 bc 13 24 73  74 72 69 6e 67 25 3d 22  |s".4..$string%="|
000097f0  49 6e 66 6f 22 0d 34 c6  47 c8 99 22 57 69 6d 70  |Info".4.G.."Wimp|
00009800  5f 4c 6f 61 64 54 65 6d  70 6c 61 74 65 22 2c 2c  |_LoadTemplate",,|
00009810  62 6c 6f 63 6b 25 2c 69  6e 66 6f 64 61 74 61 25  |block%,infodata%|
00009820  2c 69 6e 66 6f 64 61 74  61 25 2b 32 30 34 38 2c  |,infodata%+2048,|
00009830  2d 31 2c 73 74 72 69 6e  67 25 2c 30 0d 34 d0 31  |-1,string%,0.4.1|
00009840  c8 99 22 57 69 6d 70 5f  43 72 65 61 74 65 57 69  |.."Wimp_CreateWi|
00009850  6e 64 6f 77 22 2c 2c 62  6c 6f 63 6b 25 20 b8 20  |ndow",,block% . |
00009860  77 68 61 6e 64 6c 65 5f  69 6e 66 6f 25 0d 34 da  |whandle_info%.4.|
00009870  1a c8 99 22 57 69 6d 70  5f 43 6c 6f 73 65 54 65  |..."Wimp_CloseTe|
00009880  6d 70 6c 61 74 65 22 0d  34 e4 04 0d 34 ee 0a f7  |mplate".4...4...|
00009890  20 8d 44 70 75 0d 34 f8  1a f2 73 65 74 75 70 6d  | .Dpu.4...setupm|
000098a0  65 6e 75 28 6d 61 69 6e  5f 6d 65 6e 75 25 29 0d  |enu(main_menu%).|
000098b0  35 02 04 0d 35 0c 3d f4  20 49 6e 73 74 61 6c 6c  |5...5.=. Install|
000098c0  20 61 6e 20 69 63 6f 6e  20 6f 6e 20 74 68 65 20  | an icon on the |
000098d0  69 63 6f 6e 20 62 61 72  20 75 73 69 6e 67 20 74  |icon bar using t|
000098e0  68 65 20 73 68 6f 72 74  63 75 74 20 69 63 6f 6e  |he shortcut icon|
000098f0  0d 35 16 60 69 63 6f 6e  62 61 72 68 61 6e 64 6c  |.5.`iconbarhandl|
00009900  65 25 3d a4 63 72 65 61  74 65 5f 69 63 6f 6e 28  |e%=.create_icon(|
00009910  2d 32 2c 30 2c 2d 31 36  2c 38 34 2c 31 30 36 2c  |-2,0,-16,84,106,|
00009920  26 31 37 30 30 33 31 30  42 2c 22 21 78 75 65 6e  |&1700310B,"!xuen|
00009930  22 2c 69 63 6f 6e 62 61  72 6c 61 62 65 6c 25 2c  |",iconbarlabel%,|
00009940  69 63 6f 6e 62 61 72 64  61 74 61 25 2c 33 32 29  |iconbardata%,32)|
00009950  0d 35 20 04 0d 35 2a 05  e1 0d 35 34 04 0d 35 3e  |.5 ..5*...54..5>|
00009960  39 f4 20 2a 2a 2a 2a 2a  2a 2a 2a 2a 2a 2a 2a 2a  |9. *************|
00009970  2a 2a 2a 2a 2a 2a 2a 2a  2a 2a 2a 2a 2a 2a 2a 2a  |****************|
*
00009990  2a 2a 2a 2a 2a 2a 0d 35  48 39 f4 20 2a 2a 2a 2a  |******.5H9. ****|
000099a0  2a 2a 2a 2a 2a 2a 2a 2a  2a 2a 2a 2a 2a 2a 2a 2a  |****************|
*
000099c0  2a 2a 2a 2a 2a 2a 2a 2a  2a 2a 2a 2a 2a 2a 2a 0d  |***************.|
000099d0  35 52 39 f4 20 2a 2a 2a  2a 2a 2a 2a 2a 2a 2a 2a  |5R9. ***********|
000099e0  2a 2a 2a 2a 2a 2a 2a 2a  2a 2a 2a 2a 2a 2a 2a 2a  |****************|
*
00009a00  2a 2a 2a 2a 2a 2a 2a 2a  0d 35 5c 39 f4 20 2a 2a  |********.5\9. **|
00009a10  2a 2a 2a 2a 2a 2a 2a 2a  2a 2a 2a 2a 2a 2a 2a 2a  |****************|
*
00009a40  2a 0d 35 66 04 0d 35 70  0e dc 20 22 58 75 65 6e  |*.5f..5p.. "Xuen|
00009a50  22 2c 35 0d 35 7a 1c dc  20 30 2c 77 68 61 6e 64  |",5.5z.. 0,whand|
00009a60  6c 65 5f 69 6e 66 6f 25  2c 22 49 6e 66 6f 22 0d  |le_info%,"Info".|
00009a70  35 84 17 dc 20 30 2c 2d  31 2c 22 43 6c 65 61 6e  |5... 0,-1,"Clean|
00009a80  20 44 65 73 6b 22 0d 35  8e 18 dc 20 30 2c 2d 31  | Desk".5... 0,-1|
00009a90  2c 22 4e 6f 48 6f 75 72  67 6c 61 73 73 22 0d 35  |,"NoHourglass".5|
00009aa0  98 17 dc 20 30 2c 2d 31  2c 22 45 64 69 74 20 4c  |... 0,-1,"Edit L|
00009ab0  69 6e 6b 73 22 0d 35 a2  13 dc 20 26 38 30 2c 2d  |inks".5... &80,-|
00009ac0  31 2c 22 51 75 69 74 22  0d 35 ac 04 0d 35 b6 3f  |1,"Quit".5...5.?|
00009ad0  f4 20 2a 2a 2a 2a 2a 2a  2a 2a 2a 2a 2a 2a 2a 2a  |. **************|
00009ae0  2a 2a 2a 2a 2a 2a 2a 2a  2a 2a 2a 2a 2a 2a 2a 2a  |****************|
*
00009b00  2a 2a 2a 2a 2a 2a 2a 2a  2a 2a 2a 0d 35 c0 04 0d  |***********.5...|
00009b10  35 ca 3c f4 20 66 75 6e  63 74 69 6f 6e 20 74 6f  |5.<. function to|
00009b20  20 69 6e 66 6f 72 6d 20  74 68 65 20 77 69 6d 70  | inform the wimp|
00009b30  20 6f 66 20 74 68 65 20  70 72 65 73 65 6e 63 65  | of the presence|
00009b40  20 6f 66 20 61 6e 20 69  63 6f 6e 0d 35 d4 46 dd  | of an icon.5.F.|
00009b50  a4 63 72 65 61 74 65 5f  69 63 6f 6e 28 77 68 61  |.create_icon(wha|
00009b60  6e 25 2c 69 78 25 2c 69  79 25 2c 69 77 25 2c 69  |n%,ix%,iy%,iw%,i|
00009b70  68 25 2c 66 6c 61 67 25  2c 74 65 78 74 24 2c 70  |h%,flag%,text$,p|
00009b80  74 72 31 25 2c 70 74 72  32 25 2c 70 74 72 33 25  |tr1%,ptr2%,ptr3%|
00009b90  29 0d 35 de 11 21 62 6c  6f 63 6b 25 3d 77 68 61  |).5..!block%=wha|
00009ba0  6e 25 0d 35 e8 10 62 6c  6f 63 6b 25 21 34 3d 69  |n%.5..block%!4=i|
00009bb0  78 25 0d 35 f2 10 62 6c  6f 63 6b 25 21 38 3d 69  |x%.5..block%!8=i|
00009bc0  79 25 0d 35 fc 15 62 6c  6f 63 6b 25 21 31 32 3d  |y%.5..block%!12=|
00009bd0  69 78 25 2b 69 77 25 0d  36 06 15 62 6c 6f 63 6b  |ix%+iw%.6..block|
00009be0  25 21 31 36 3d 69 79 25  2b 69 68 25 0d 36 10 13  |%!16=iy%+ih%.6..|
00009bf0  62 6c 6f 63 6b 25 21 32  30 3d 66 6c 61 67 25 0d  |block%!20=flag%.|
00009c00  36 1a 0f e7 20 70 74 72  31 25 3d 30 20 8c 0d 36  |6... ptr1%=0 ..6|
00009c10  24 16 24 28 62 6c 6f 63  6b 25 2b 32 34 29 3d 74  |$.$(block%+24)=t|
00009c20  65 78 74 24 0d 36 2e 05  cc 0d 36 38 13 62 6c 6f  |ext$.6....68.blo|
00009c30  63 6b 25 21 32 34 3d 70  74 72 31 25 0d 36 42 13  |ck%!24=ptr1%.6B.|
00009c40  62 6c 6f 63 6b 25 21 32  38 3d 70 74 72 32 25 0d  |block%!28=ptr2%.|
00009c50  36 4c 13 62 6c 6f 63 6b  25 21 33 32 3d 70 74 72  |6L.block%!32=ptr|
00009c60  33 25 0d 36 56 05 cd 0d  36 60 2a c8 99 22 57 69  |3%.6V...6`*.."Wi|
00009c70  6d 70 5f 43 72 65 61 74  65 49 63 6f 6e 22 2c 2c  |mp_CreateIcon",,|
00009c80  62 6c 6f 63 6b 25 20 b8  20 69 68 61 6e 64 6c 65  |block% . ihandle|
00009c90  25 0d 36 6a 0d 3d 69 68  61 6e 64 6c 65 25 0d 36  |%.6j.=ihandle%.6|
00009ca0  74 04 0d 36 7e 3e f4 20  2a 2a 2a 2a 2a 2a 2a 2a  |t..6~>. ********|
00009cb0  2a 2a 2a 2a 2a 2a 2a 2a  2a 2a 2a 2a 2a 2a 2a 2a  |****************|
*
00009ce0  0d 36 88 04 0d 36 92 2b  f4 20 47 65 6e 65 72 61  |.6...6.+. Genera|
00009cf0  6c 20 6d 6f 75 73 65 20  63 6c 69 63 6b 20 68 61  |l mouse click ha|
00009d00  6e 64 6c 69 6e 67 20 72  6f 75 74 69 6e 65 2e 0d  |ndling routine..|
00009d10  36 9c 44 f4 20 4e 6f 74  65 20 74 6f 20 70 65 6f  |6.D. Note to peo|
00009d20  70 6c 65 20 77 68 6f 20  64 6f 6e 27 74 20 72 65  |ple who don't re|
00009d30  61 6c 6c 79 20 68 61 76  65 20 61 20 63 6c 75 65  |ally have a clue|
00009d40  20 61 62 6f 75 74 20 57  49 4d 50 20 73 79 73 74  | about WIMP syst|
00009d50  65 6d 3a 0d 36 a6 3d f4  20 41 6c 6c 20 63 6c 69  |em:.6.=. All cli|
00009d60  63 6b 69 6e 67 73 20 6f  6e 20 6d 65 6e 75 73 20  |ckings on menus |
00009d70  77 69 6c 6c 20 6e 65 76  65 72 20 72 65 61 63 68  |will never reach|
00009d80  20 74 68 69 73 20 70 72  6f 63 65 64 75 72 65 2c  | this procedure,|
00009d90  0d 36 b0 3a f4 20 69 74  20 64 65 61 6c 73 20 77  |.6.:. it deals w|
00009da0  69 74 68 20 61 6c 6c 20  63 6c 69 63 6b 73 20 6f  |ith all clicks o|
00009db0  6e 20 77 69 6e 64 6f 77  73 20 61 6e 64 20 74 68  |n windows and th|
00009dc0  65 20 69 63 6f 6e 62 61  72 2e 0d 36 ba 11 dd f2  |e iconbar..6....|
00009dd0  63 6c 69 63 6b 28 77 69  6e 25 29 0d 36 c4 0d c8  |click(win%).6...|
00009de0  8e 20 77 69 6e 25 20 ca  0d 36 ce 21 c9 20 2d 32  |. win% ..6.!. -2|
00009df0  3a f2 63 6c 69 63 6b 5f  69 63 6f 6e 62 61 72 28  |:.click_iconbar(|
00009e00  62 6c 6f 63 6b 25 21 38  29 0d 36 d8 29 c9 20 77  |block%!8).6.). w|
00009e10  68 61 6e 64 6c 65 5f 69  6e 66 6f 25 3a f2 63 6c  |handle_info%:.cl|
00009e20  69 63 6b 5f 69 6e 66 6f  28 62 6c 6f 63 6b 25 21  |ick_info(block%!|
00009e30  38 29 0d 36 e2 05 cb 0d  36 ec 05 e1 0d 36 f6 04  |8).6....6....6..|
00009e40  0d 37 00 1c dd f2 63 6c  69 63 6b 5f 69 63 6f 6e  |.7....click_icon|
00009e50  62 61 72 28 62 75 74 74  6f 6e 25 29 0d 37 0a 10  |bar(button%).7..|
00009e60  c8 8e 20 62 75 74 74 6f  6e 25 20 ca 0d 37 14 19  |.. button% ..7..|
00009e70  c9 20 30 3a f2 6d 6f 76  65 5f 6f 76 65 72 69 63  |. 0:.move_overic|
00009e80  6f 6e 62 61 72 0d 37 1e  1c c9 20 31 3a f2 63 6c  |onbar.7... 1:.cl|
00009e90  69 63 6b 5f 69 63 6f 6e  62 61 72 61 64 6a 75 73  |ick_iconbaradjus|
00009ea0  74 0d 37 28 1a c9 20 32  3a f2 63 6c 69 63 6b 5f  |t.7(.. 2:.click_|
00009eb0  69 63 6f 6e 62 61 72 6d  65 6e 75 0d 37 32 1c c9  |iconbarmenu.72..|
00009ec0  20 34 3a f2 63 6c 69 63  6b 5f 69 63 6f 6e 62 61  | 4:.click_iconba|
00009ed0  72 73 65 6c 65 63 74 0d  37 3c 05 cb 0d 37 46 05  |rselect.7<...7F.|
00009ee0  e1 0d 37 50 04 0d 37 5a  16 dd f2 6d 6f 76 65 5f  |..7P..7Z...move_|
00009ef0  6f 76 65 72 69 63 6f 6e  62 61 72 0d 37 64 2d e7  |overiconbar.7d-.|
00009f00  20 49 63 6f 6e 42 61 72  4d 65 6e 75 4f 70 65 6e  | IconBarMenuOpen|
00009f10  25 3d 31 20 69 63 6f 6e  62 61 72 5f 74 69 6d 65  |%=1 iconbar_time|
00009f20  72 66 6c 61 67 25 3d 30  0d 37 6e 3b f4 20 49 73  |rflag%=0.7n;. Is|
00009f30  20 70 6f 69 6e 74 65 72  20 6f 76 65 72 20 69 63  | pointer over ic|
00009f40  6f 6e 62 61 72 20 69 63  6f 6e 3f 20 49 66 20 73  |onbar icon? If s|
00009f50  6f 20 69 6e 63 20 69 63  6f 6e 62 61 72 5f 74 69  |o inc iconbar_ti|
00009f60  6d 65 72 0d 37 78 58 e7  20 28 69 63 6f 6e 62 61  |mer.7xX. (iconba|
00009f70  72 5f 74 69 6d 65 72 66  6c 61 67 25 3d 30 20 80  |r_timerflag%=0 .|
00009f80  20 49 63 6f 6e 42 61 72  4d 65 6e 75 4f 70 65 6e  | IconBarMenuOpen|
00009f90  25 3c 3e 31 29 20 69 63  6f 6e 62 61 72 5f 74 69  |%<>1) iconbar_ti|
00009fa0  6d 65 72 66 6c 61 67 25  3d 31 3a 69 63 6f 6e 62  |merflag%=1:iconb|
00009fb0  61 72 5f 74 69 6d 65 72  25 3d 91 0d 37 82 49 e7  |ar_timer%=..7.I.|
00009fc0  20 28 28 28 91 2d 69 63  6f 6e 62 61 72 5f 74 69  | (((.-iconbar_ti|
00009fd0  6d 65 72 25 29 3e 32 35  29 20 80 20 69 63 6f 6e  |mer%)>25) . icon|
00009fe0  62 61 72 5f 74 69 6d 65  72 66 6c 61 67 25 3d 31  |bar_timerflag%=1|
00009ff0  20 80 20 4f 6c 64 54 6f  6f 6c 54 69 70 25 3c 3e  | . OldToolTip%<>|
0000a000  31 29 20 8c 0d 37 8c 1d  20 f4 20 57 68 61 74 20  |1) ..7.. . What |
0000a010  73 6f 72 74 20 6f 66 20  74 6f 6f 6c 20 74 69 70  |sort of tool tip|
0000a020  3f 0d 37 96 11 20 52 53  65 65 64 25 3d b3 28 2d  |?.7.. RSeed%=.(-|
0000a030  91 29 0d 37 a0 11 20 e7  20 28 b3 28 34 29 3d 31  |.).7.. . (.(4)=1|
0000a040  29 20 8c 0d 37 be 2a 20  20 f2 4f 70 65 6e 54 6f  |) ..7.*  .OpenTo|
0000a050  6f 6c 54 69 70 28 32 29  3a 69 63 6f 6e 62 61 72  |olTip(2):iconbar|
0000a060  5f 74 69 6d 65 72 66 6c  61 67 25 3d 32 0d 37 bf  |_timerflag%=2.7.|
0000a070  06 20 cc 0d 37 c8 2a 20  20 f2 4f 70 65 6e 54 6f  |. ..7.*  .OpenTo|
0000a080  6f 6c 54 69 70 28 31 29  3a 69 63 6f 6e 62 61 72  |olTip(1):iconbar|
0000a090  5f 74 69 6d 65 72 66 6c  61 67 25 3d 32 0d 37 d2  |_timerflag%=2.7.|
0000a0a0  06 20 cd 0d 37 d3 05 cd  0d 37 dc 58 e7 20 28 28  |. ..7....7.X. ((|
0000a0b0  28 91 2d 69 63 6f 6e 62  61 72 5f 74 69 6d 65 72  |(.-iconbar_timer|
0000a0c0  25 29 3e 31 30 30 30 29  20 80 20 54 6f 6f 6c 54  |%)>1000) . ToolT|
0000a0d0  69 70 25 3e 30 29 20 f2  50 65 72 73 69 73 74 43  |ip%>0) .PersistC|
0000a0e0  6c 6f 73 65 54 6f 6f 6c  54 69 70 3a 69 63 6f 6e  |loseToolTip:icon|
0000a0f0  62 61 72 5f 74 69 6d 65  72 66 6c 61 67 25 3d 30  |bar_timerflag%=0|
0000a100  0d 37 e6 05 e1 0d 37 f0  04 0d 37 fa 1a dd f2 63  |.7....7...7....c|
0000a110  6c 69 63 6b 5f 69 63 6f  6e 62 61 72 67 65 6e 65  |lick_iconbargene|
0000a120  72 61 6c 0d 38 04 25 e7  20 54 6f 6f 6c 54 69 70  |ral.8.%. ToolTip|
0000a130  25 3d 31 20 f2 50 65 72  73 69 73 74 43 6c 6f 73  |%=1 .PersistClos|
0000a140  65 54 6f 6f 6c 54 69 70  0d 38 0e 23 c8 99 22 57  |eToolTip.8.#.."W|
0000a150  69 6d 70 5f 47 65 74 50  6f 69 6e 74 65 72 49 6e  |imp_GetPointerIn|
0000a160  66 6f 22 2c 2c 62 6c 6f  63 6b 25 0d 38 18 17 6f  |fo",,block%.8..o|
0000a170  76 65 72 72 69 64 65 5f  74 6f 6f 6c 74 69 70 25  |verride_tooltip%|
0000a180  3d 31 0d 38 22 3b 49 63  6f 6e 42 61 72 4d 65 6e  |=1.8";IconBarMen|
0000a190  75 4f 70 65 6e 25 3d 31  3a f4 20 49 6e 68 69 62  |uOpen%=1:. Inhib|
0000a1a0  69 74 20 74 6f 6f 6c 20  74 69 70 20 64 69 73 70  |it tool tip disp|
0000a1b0  6c 61 79 20 6f 76 65 72  20 6d 65 6e 75 0d 38 2c  |lay over menu.8,|
0000a1c0  0d e7 20 28 a6 2d 31 29  20 8c 0d 38 36 2f f2 73  |.. (.-1) ..86/.s|
0000a1d0  68 6f 77 6d 65 6e 75 28  6d 61 69 6e 5f 6d 65 6e  |howmenu(main_men|
0000a1e0  75 25 2c 21 62 6c 6f 63  6b 25 2d 36 34 2c 20 39  |u%,!block%-64, 9|
0000a1f0  36 2b 28 35 2a 34 34 29  29 0d 38 40 05 cc 0d 38  |6+(5*44)).8@...8|
0000a200  4a 18 f2 73 68 6f 77 73  68 6f 72 74 63 75 74 6d  |J..showshortcutm|
0000a210  65 6e 75 28 30 29 0d 38  54 05 cd 0d 38 5e 05 e1  |enu(0).8T...8^..|
0000a220  0d 38 68 04 0d 38 72 17  dd f2 63 6c 69 63 6b 5f  |.8h..8r...click_|
0000a230  69 63 6f 6e 62 61 72 6d  65 6e 75 0d 38 7c 19 f2  |iconbarmenu.8|..|
0000a240  63 6c 69 63 6b 5f 69 63  6f 6e 62 61 72 67 65 6e  |click_iconbargen|
0000a250  65 72 61 6c 0d 38 86 05  e1 0d 38 90 04 0d 38 9a  |eral.8....8...8.|
0000a260  19 dd f2 63 6c 69 63 6b  5f 69 63 6f 6e 62 61 72  |...click_iconbar|
0000a270  73 65 6c 65 63 74 0d 38  a4 15 e7 20 28 a6 2d 31  |select.8... (.-1|
0000a280  29 20 80 20 28 a6 2d 32  29 20 8c 0d 38 ae 18 f4  |) . (.-2) ..8...|
0000a290  20 4f 70 65 6e 20 63 61  63 68 65 20 77 69 6e 64  | Open cache wind|
0000a2a0  6f 77 73 0d 38 b8 10 f2  72 65 6f 70 65 6e 66 69  |ows.8...reopenfi|
0000a2b0  6c 65 72 0d 38 c2 05 e1  0d 38 cc 05 cd 0d 38 d6  |ler.8....8....8.|
0000a2c0  04 0d 38 e0 0d e7 20 28  a6 2d 32 29 20 8c 0d 38  |..8... (.-2) ..8|
0000a2d0  ea 20 f4 20 53 74 61 72  74 20 64 72 61 67 20 74  |. . Start drag t|
0000a2e0  6f 20 61 64 64 20 61 20  77 69 6e 64 6f 77 0d 38  |o add a window.8|
0000a2f0  f4 23 c8 99 22 57 69 6d  70 5f 47 65 74 50 6f 69  |.#.."Wimp_GetPoi|
0000a300  6e 74 65 72 49 6e 66 6f  22 2c 2c 62 6c 6f 63 6b  |nterInfo",,block|
0000a310  25 0d 38 fe 28 e7 20 28  62 6c 6f 63 6b 25 21 38  |%.8.(. (block%!8|
0000a320  29 20 f2 69 6e 69 74 5f  64 72 61 67 28 61 64 64  |) .init_drag(add|
0000a330  5f 77 69 6e 64 6f 77 25  29 0d 39 08 05 cc 0d 39  |_window%).9....9|
0000a340  12 10 f4 20 43 6c 69 63  6b 20 6d 65 6e 75 0d 39  |... Click menu.9|
0000a350  1c 19 f2 63 6c 69 63 6b  5f 69 63 6f 6e 62 61 72  |...click_iconbar|
0000a360  67 65 6e 65 72 61 6c 0d  39 26 05 cd 0d 39 30 05  |general.9&...90.|
0000a370  e1 0d 39 3a 04 0d 39 44  19 dd f2 63 6c 69 63 6b  |..9:..9D...click|
0000a380  5f 69 63 6f 6e 62 61 72  61 64 6a 75 73 74 0d 39  |_iconbaradjust.9|
0000a390  4e 15 e7 20 28 a6 2d 31  29 20 80 20 28 a6 2d 32  |N.. (.-1) . (.-2|
0000a3a0  29 20 8c 0d 39 58 19 f4  20 43 6c 6f 73 65 20 63  |) ..9X.. Close c|
0000a3b0  61 63 68 65 20 77 69 6e  64 6f 77 73 0d 39 62 1d  |ache windows.9b.|
0000a3c0  f2 63 6c 6f 73 65 66 69  6c 65 72 3a f2 43 6c 6f  |.closefiler:.Clo|
0000a3d0  73 65 49 6e 66 6f 42 6f  78 0d 39 6c 05 e1 0d 39  |seInfoBox.9l...9|
0000a3e0  76 05 cd 0d 39 80 0d e7  20 28 a6 2d 32 29 20 8c  |v...9... (.-2) .|
0000a3f0  0d 39 8a 23 c8 99 22 57  69 6d 70 5f 47 65 74 50  |.9.#.."Wimp_GetP|
0000a400  6f 69 6e 74 65 72 49 6e  66 6f 22 2c 2c 62 6c 6f  |ointerInfo",,blo|
0000a410  63 6b 25 0d 39 94 23 f4  20 53 74 61 72 74 20 64  |ck%.9.#. Start d|
0000a420  72 61 67 20 74 6f 20 72  65 6d 6f 76 65 20 61 20  |rag to remove a |
0000a430  77 69 6e 64 6f 77 0d 39  9e 2d e7 20 28 62 6c 6f  |window.9.-. (blo|
0000a440  63 6b 25 21 38 29 20 f2  69 6e 69 74 5f 64 72 61  |ck%!8) .init_dra|
0000a450  67 28 73 75 62 74 72 61  63 74 5f 77 69 6e 64 6f  |g(subtract_windo|
0000a460  77 25 29 0d 39 a8 05 cc  0d 39 b2 19 f2 63 6c 69  |w%).9....9...cli|
0000a470  63 6b 5f 69 63 6f 6e 62  61 72 67 65 6e 65 72 61  |ck_iconbargenera|
0000a480  6c 0d 39 bc 05 cd 0d 39  c6 05 e1 0d 39 d0 04 0d  |l.9....9....9...|
0000a490  39 da 19 dd a4 43 68 65  63 6b 4c 69 6e 6b 73 44  |9....CheckLinksD|
0000a4a0  69 72 45 78 69 73 74 73  0d 39 e4 12 ea 20 64 69  |irExists.9... di|
0000a4b0  72 24 2c 72 65 73 75 6c  74 25 0d 39 ee 2a 64 69  |r$,result%.9.*di|
0000a4c0  72 24 3d 41 70 70 50 61  74 68 24 2b 22 2e 55 73  |r$=AppPath$+".Us|
0000a4d0  65 72 73 2e 22 2b 55 73  65 72 24 2b 22 2e 4c 69  |ers."+User$+".Li|
0000a4e0  6e 6b 73 22 0d 39 f8 25  f4 20 44 6f 65 73 20 74  |nks".9.%. Does t|
0000a4f0  68 65 20 4c 69 6e 6b 73  20 64 69 72 65 63 74 6f  |he Links directo|
0000a500  72 79 20 65 78 69 73 74  3f 0d 3a 02 14 24 73 74  |ry exist?.:..$st|
0000a510  72 69 6e 67 25 3d 64 69  72 24 2b bd 30 0d 3a 0c  |ring%=dir$+.0.:.|
0000a520  24 c8 99 22 4f 53 5f 46  69 6c 65 22 2c 31 37 2c  |$.."OS_File",17,|
0000a530  73 74 72 69 6e 67 25 20  b8 20 72 65 73 75 6c 74  |string% . result|
0000a540  25 0d 3a 16 19 f4 20 49  66 20 6e 6f 74 2c 20 63  |%.:... If not, c|
0000a550  72 65 61 74 65 20 6f 6e  65 2e 0d 3a 20 26 e7 20  |reate one..: &. |
0000a560  28 72 65 73 75 6c 74 25  3d 30 29 20 8c 20 ff 28  |(result%=0) . .(|
0000a570  22 43 44 49 52 20 22 2b  64 69 72 24 2b bd 30 29  |"CDIR "+dir$+.0)|
0000a580  0d 3a 2a 24 c8 99 22 4f  53 5f 46 69 6c 65 22 2c  |.:*$.."OS_File",|
0000a590  31 37 2c 73 74 72 69 6e  67 25 20 b8 20 72 65 73  |17,string% . res|
0000a5a0  75 6c 74 25 0d 3a 34 27  f4 20 48 61 73 20 69 74  |ult%.:4'. Has it|
0000a5b0  20 63 72 65 61 74 65 64  20 69 74 3f 20 49 66 20  | created it? If |
0000a5c0  6e 6f 74 2c 20 65 72 72  6f 72 2e 0d 3a 3e 13 e7  |not, error..:>..|
0000a5d0  20 28 72 65 73 75 6c 74  25 3d 30 29 20 8c 0d 3a  | (result%=0) ..:|
0000a5e0  48 2e f2 65 72 72 6f 72  28 22 46 61 74 61 6c 20  |H..error("Fatal |
0000a5f0  3a 20 43 6f 75 6c 64 6e  27 74 20 63 72 65 61 74  |: Couldn't creat|
0000a600  65 20 22 2b 64 69 72 24  2b bd 30 29 0d 3a 52 06  |e "+dir$+.0).:R.|
0000a610  3d 30 0d 3a 5c 05 cd 0d  3a 66 06 3d 31 0d 3a 70  |=0.:\...:f.=1.:p|
0000a620  04 0d 3a 7a 16 dd f2 65  6e 73 75 72 65 64 69 72  |..:z...ensuredir|
0000a630  28 65 64 69 72 24 29 0d  3a 84 0d ea 20 72 65 73  |(edir$).:... res|
0000a640  75 6c 74 25 0d 3a 8e 1f  f4 20 44 6f 65 73 20 74  |ult%.:... Does t|
0000a650  68 65 20 64 69 72 65 63  74 6f 72 79 20 65 78 69  |he directory exi|
0000a660  73 74 3f 0d 3a 98 15 24  73 74 72 69 6e 67 25 3d  |st?.:..$string%=|
0000a670  65 64 69 72 24 2b bd 30  0d 3a a2 24 c8 99 22 4f  |edir$+.0.:.$.."O|
0000a680  53 5f 46 69 6c 65 22 2c  31 37 2c 73 74 72 69 6e  |S_File",17,strin|
0000a690  67 25 20 b8 20 72 65 73  75 6c 74 25 0d 3a ac 19  |g% . result%.:..|
0000a6a0  f4 20 49 66 20 6e 6f 74  2c 20 63 72 65 61 74 65  |. If not, create|
0000a6b0  20 6f 6e 65 2e 0d 3a b6  27 e7 20 28 72 65 73 75  | one..:.'. (resu|
0000a6c0  6c 74 25 3d 30 29 20 8c  20 ff 28 22 43 44 49 52  |lt%=0) . .("CDIR|
0000a6d0  20 22 2b 65 64 69 72 24  2b bd 30 29 0d 3a c0 24  | "+edir$+.0).:.$|
0000a6e0  c8 99 22 4f 53 5f 46 69  6c 65 22 2c 31 37 2c 73  |.."OS_File",17,s|
0000a6f0  74 72 69 6e 67 25 20 b8  20 72 65 73 75 6c 74 25  |tring% . result%|
0000a700  0d 3a ca 27 f4 20 48 61  73 20 69 74 20 63 72 65  |.:.'. Has it cre|
0000a710  61 74 65 64 20 69 74 3f  20 49 66 20 6e 6f 74 2c  |ated it? If not,|
0000a720  20 65 72 72 6f 72 2e 0d  3a d4 13 e7 20 28 72 65  | error..:... (re|
0000a730  73 75 6c 74 25 3d 30 29  20 8c 0d 3a de 2f f2 65  |sult%=0) ..:./.e|
0000a740  72 72 6f 72 28 22 46 61  74 61 6c 20 3a 20 43 6f  |rror("Fatal : Co|
0000a750  75 6c 64 6e 27 74 20 63  72 65 61 74 65 20 22 2b  |uldn't create "+|
0000a760  65 64 69 72 24 2b bd 30  29 0d 3a e8 08 f4 20 3d  |edir$+.0).:... =|
0000a770  30 0d 3a f2 05 cd 0d 3a  fc 07 f4 3d 31 0d 3b 06  |0.:....:...=1.;.|
0000a780  05 e1 0d 3b 10 04 0d 3b  1a 38 f4 20 2a 2a 2a 2a  |...;...;.8. ****|
0000a790  2a 2a 2a 2a 2a 2a 2a 2a  2a 2a 2a 2a 2a 2a 2a 2a  |****************|
*
0000a7b0  2a 2a 2a 2a 2a 2a 2a 2a  2a 2a 2a 2a 2a 2a 0d 3b  |**************.;|
0000a7c0  24 25 f4 20 53 74 61 72  74 20 62 75 69 6c 64 69  |$%. Start buildi|
0000a7d0  6e 67 20 74 68 65 20 73  68 6f 72 74 63 75 74 6d  |ng the shortcutm|
0000a7e0  65 6e 75 0d 3b 2e 38 f4  20 2a 2a 2a 2a 2a 2a 2a  |enu.;.8. *******|
0000a7f0  2a 2a 2a 2a 2a 2a 2a 2a  2a 2a 2a 2a 2a 2a 2a 2a  |****************|
*
0000a810  2a 2a 2a 2a 2a 2a 2a 2a  2a 2a 2a 0d 3b 38 1c dd  |***********.;8..|
0000a820  f2 73 68 6f 77 73 68 6f  72 74 63 75 74 6d 65 6e  |.showshortcutmen|
0000a830  75 28 61 72 67 25 29 0d  3b 42 27 e7 20 28 54 6f  |u(arg%).;B'. (To|
0000a840  6f 6c 54 69 70 25 3d 31  29 20 f2 50 65 72 73 69  |olTip%=1) .Persi|
0000a850  73 74 43 6c 6f 73 65 54  6f 6f 6c 54 69 70 0d 3b  |stCloseToolTip.;|
0000a860  4c 11 61 64 64 6c 69 6e  6b 25 3d 61 72 67 25 0d  |L.addlink%=arg%.|
0000a870  3b 56 20 e7 20 28 a4 43  68 65 63 6b 4c 69 6e 6b  |;V . (.CheckLink|
0000a880  73 44 69 72 45 78 69 73  74 73 3d 30 29 20 e1 0d  |sDirExists=0) ..|
0000a890  3b 60 1c 64 69 72 70 74  72 25 28 30 29 3d 73 68  |;`.dirptr%(0)=sh|
0000a8a0  6f 72 74 63 75 74 6d 65  6e 75 25 0d 3b 6a 27 f4  |ortcutmenu%.;j'.|
0000a8b0  20 6c 69 6e 6b 6d 65 6e  75 64 65 70 74 68 25 3d  | linkmenudepth%=|
0000a8c0  30 3a 52 45 4d 20 41 74  20 74 6f 70 20 6c 65 76  |0:REM At top lev|
0000a8d0  65 6c 0d 3b 74 04 0d 3b  7e 45 f2 53 69 6e 67 6c  |el.;t..;~E.Singl|
0000a8e0  65 44 69 72 65 63 74 6f  72 79 52 65 61 64 28 41  |eDirectoryRead(A|
0000a8f0  70 70 50 61 74 68 24 2b  22 2e 55 73 65 72 73 2e  |ppPath$+".Users.|
0000a900  22 2b 55 73 65 72 24 2b  22 2e 4c 69 6e 6b 73 22  |"+User$+".Links"|
0000a910  2c 20 55 73 65 72 24 2c  20 30 29 0d 3b 88 20 69  |, User$, 0).;. i|
0000a920  6e 69 74 69 61 6c 6d 65  6e 75 73 69 7a 65 25 3d  |nitialmenusize%=|
0000a930  64 69 72 6c 69 73 74 25  28 30 29 0d 3b 92 2b e7  |dirlist%(0).;.+.|
0000a940  20 69 6e 69 74 69 61 6c  6d 65 6e 75 73 69 7a 65  | initialmenusize|
0000a950  25 3d 30 20 69 6e 69 74  69 61 6c 6d 65 6e 75 73  |%=0 initialmenus|
0000a960  69 7a 65 25 3d 31 0d 3b  9c 23 c8 99 22 57 69 6d  |ize%=1.;.#.."Wim|
0000a970  70 5f 47 65 74 50 6f 69  6e 74 65 72 49 6e 66 6f  |p_GetPointerInfo|
0000a980  22 2c 2c 62 6c 6f 63 6b  25 0d 3b a6 43 f2 73 68  |",,block%.;.C.sh|
0000a990  6f 77 6d 65 6e 75 28 73  68 6f 72 74 63 75 74 6d  |owmenu(shortcutm|
0000a9a0  65 6e 75 25 2c 21 62 6c  6f 63 6b 25 2d 36 34 2c  |enu%,!block%-64,|
0000a9b0  20 39 36 2b 28 28 69 6e  69 74 69 61 6c 6d 65 6e  | 96+((initialmen|
0000a9c0  75 73 69 7a 65 25 29 2a  34 34 29 29 0d 3b b0 05  |usize%)*44)).;..|
0000a9d0  e1 0d 3b ba 04 0d 3b c4  04 0d 3b ce 04 0d 3b d8  |..;...;...;...;.|
0000a9e0  3b f4 20 2a 2a 2a 2a 2a  2a 2a 2a 2a 2a 2a 2a 2a  |;. *************|
0000a9f0  2a 2a 2a 2a 2a 2a 2a 2a  2a 2a 2a 2a 2a 2a 2a 2a  |****************|
*
0000aa10  2a 2a 2a 2a 2a 2a 2a 2a  0d 3b e2 3b f4 20 52 65  |********.;.;. Re|
0000aa20  61 64 20 63 6f 6e 74 65  6e 74 73 20 6f 66 20 61  |ad contents of a|
0000aa30  20 64 69 72 65 63 74 6f  72 79 20 69 6e 74 6f 20  | directory into |
0000aa40  74 68 65 20 6d 65 6e 75  20 64 61 74 61 20 61 72  |the menu data ar|
0000aa50  65 61 73 0d 3b ec 3b f4  20 2a 2a 2a 2a 2a 2a 2a  |eas.;.;. *******|
0000aa60  2a 2a 2a 2a 2a 2a 2a 2a  2a 2a 2a 2a 2a 2a 2a 2a  |****************|
*
0000aa80  2a 2a 2a 2a 2a 2a 2a 2a  2a 2a 2a 2a 2a 2a 0d 3b  |**************.;|
0000aa90  f6 3c dd f2 53 69 6e 67  6c 65 44 69 72 65 63 74  |.<..SingleDirect|
0000aaa0  6f 72 79 52 65 61 64 28  6c 6f 63 61 6c 64 69 72  |oryRead(localdir|
0000aab0  24 2c 64 69 72 66 69 6c  65 6e 61 6d 65 24 2c 6c  |$,dirfilename$,l|
0000aac0  69 6e 6b 64 65 70 74 68  25 29 0d 3c 00 3c ea 20  |inkdepth%).<.<. |
0000aad0  6f 6c 64 6c 6f 63 61 6c  64 69 72 24 2c 6f 6c 64  |oldlocaldir$,old|
0000aae0  64 69 72 66 69 6c 65 6e  61 6d 65 24 2c 6f 6c 64  |dirfilename$,old|
0000aaf0  6c 69 6e 6b 64 65 70 74  68 25 2c 20 6f 6c 64 64  |linkdepth%, oldd|
0000ab00  69 72 70 74 72 25 0d 3c  0a 18 ea 20 64 69 72 73  |irptr%.<... dirs|
0000ab10  69 7a 65 25 2c 20 44 69  72 53 63 61 6e 25 0d 3c  |ize%, DirScan%.<|
0000ab20  14 2d ea 20 64 69 72 24  2c 6e 65 78 74 25 2c 74  |.-. dir$,next%,t|
0000ab30  79 70 65 25 2c 69 74 65  6d 24 2c 63 75 72 72 65  |ype%,item$,curre|
0000ab40  6e 74 64 69 72 25 2c 70  74 72 25 0d 3c 1e 2d ea  |ntdir%,ptr%.<.-.|
0000ab50  20 63 75 72 72 65 6e 74  6d 65 6e 75 70 74 72 25  | currentmenuptr%|
0000ab60  2c 20 6c 6f 63 61 6c 69  25 2c 20 77 69 64 74 68  |, locali%, width|
0000ab70  25 2c 74 69 74 6c 65 24  0d 3c 28 1c ea 20 54 69  |%,title$.<(.. Ti|
0000ab80  74 6c 65 50 74 72 25 2c  20 4d 65 6e 75 45 78 74  |tlePtr%, MenuExt|
0000ab90  65 6e 74 25 0d 3c 32 42  ea 20 66 69 6c 65 74 79  |ent%.<2B. filety|
0000aba0  70 65 25 2c 20 66 69 6c  65 74 79 70 65 69 6e 66  |pe%, filetypeinf|
0000abb0  6f 25 2c 6c 69 6e 6b 74  79 70 65 25 2c 6f 62 6a  |o%,linktype%,obj|
0000abc0  65 63 74 74 79 70 65 25  2c 6c 69 6e 6b 74 79 70  |ecttype%,linktyp|
0000abd0  65 69 6e 66 6f 25 0d 3c  3c 14 ea 20 56 61 6c 69  |einfo%.<<.. Vali|
0000abe0  64 4c 6f 61 64 46 6c 61  67 25 0d 3c 46 17 ea 20  |dLoadFlag%.<F.. |
0000abf0  43 75 72 72 65 6e 74 4c  69 6e 6b 44 65 70 74 68  |CurrentLinkDepth|
0000ac00  25 0d 3c 50 14 ea 20 4e  75 6d 62 65 72 4f 66 4c  |%.<P.. NumberOfL|
0000ac10  69 6e 6b 73 25 0d 3c 5a  04 0d 3c 64 20 43 75 72  |inks%.<Z..<d Cur|
0000ac20  72 65 6e 74 4c 69 6e 6b  44 65 70 74 68 25 3d 6c  |rentLinkDepth%=l|
0000ac30  69 6e 6b 64 65 70 74 68  25 0d 3c 6e 1c 6f 6c 64  |inkdepth%.<n.old|
0000ac40  6c 6f 63 61 6c 64 69 72  24 20 3d 20 6c 6f 63 61  |localdir$ = loca|
0000ac50  6c 64 69 72 24 0d 3c 78  22 6f 6c 64 64 69 72 66  |ldir$.<x"olddirf|
0000ac60  69 6c 65 6e 61 6d 65 24  20 3d 20 64 69 72 66 69  |ilename$ = dirfi|
0000ac70  6c 65 6e 61 6d 65 24 0d  3c 82 1e 6f 6c 64 6c 69  |lename$.<..oldli|
0000ac80  6e 6b 64 65 70 74 68 25  20 3d 20 6c 69 6e 6b 64  |nkdepth% = linkd|
0000ac90  65 70 74 68 25 0d 3c 8c  25 6f 6c 64 64 69 72 70  |epth%.<.%olddirp|
0000aca0  74 72 25 3d 64 69 72 70  74 72 25 28 6f 6c 64 6c  |tr%=dirptr%(oldl|
0000acb0  69 6e 6b 64 65 70 74 68  25 29 0d 3c 96 0e 44 69  |inkdepth%).<..Di|
0000acc0  72 53 63 61 6e 25 3d a3  0d 3c a0 04 0d 3c aa 37  |rScan%=..<...<.7|
0000acd0  f5 3a f4 20 52 65 70 65  61 74 20 75 6e 74 69 6c  |.:. Repeat until|
0000ace0  20 6c 6f 61 64 65 64 20  69 6e 20 64 69 72 65 63  | loaded in direc|
0000acf0  74 6f 72 79 20 77 69 74  68 20 6e 6f 20 65 72 72  |tory with no err|
0000ad00  6f 72 73 0d 3c b4 1c 6c  6f 63 61 6c 64 69 72 24  |ors.<..localdir$|
0000ad10  20 3d 20 6f 6c 64 6c 6f  63 61 6c 64 69 72 24 0d  | = oldlocaldir$.|
0000ad20  3c be 22 64 69 72 66 69  6c 65 6e 61 6d 65 24 20  |<."dirfilename$ |
0000ad30  3d 20 6f 6c 64 64 69 72  66 69 6c 65 6e 61 6d 65  |= olddirfilename|
0000ad40  24 0d 3c c8 1e 6c 69 6e  6b 64 65 70 74 68 25 20  |$.<..linkdepth% |
0000ad50  3d 20 6f 6c 64 6c 69 6e  6b 64 65 70 74 68 25 0d  |= oldlinkdepth%.|
0000ad60  3c d2 25 64 69 72 70 74  72 25 28 6f 6c 64 6c 69  |<.%dirptr%(oldli|
0000ad70  6e 6b 64 65 70 74 68 25  29 3d 6f 6c 64 64 69 72  |nkdepth%)=olddir|
0000ad80  70 74 72 25 0d 3c dc 0e  44 69 72 53 63 61 6e 25  |ptr%.<..DirScan%|
0000ad90  3d b9 0d 3c e6 04 0d 3c  f0 35 f4 20 43 61 6c 63  |=..<...<.5. Calc|
0000ada0  75 6c 61 74 65 20 70 6f  69 6e 74 65 72 20 74 6f  |ulate pointer to|
0000adb0  20 73 68 6f 72 74 63 75  74 6d 65 6e 75 25 20 26  | shortcutmenu% &|
0000adc0  20 69 6e 64 65 78 20 69  6e 74 6f 0d 3c fa 17 f4  | index into.<...|
0000add0  20 73 68 6f 72 74 63 75  74 6d 65 6e 75 64 61 74  | shortcutmenudat|
0000ade0  61 25 0d 3d 04 12 64 69  72 24 3d 6c 6f 63 61 6c  |a%.=..dir$=local|
0000adf0  64 69 72 24 0d 3d 0e 08  61 25 3d 30 0d 3d 18 21  |dir$.=..a%=0.=.!|
0000ae00  63 75 72 72 65 6e 74 6d  65 6e 75 70 74 72 25 3d  |currentmenuptr%=|
0000ae10  73 68 6f 72 74 63 75 74  6d 65 6e 75 25 0d 3d 22  |shortcutmenu%.="|
0000ae20  08 69 25 3d 30 0d 3d 2c  14 c8 95 20 61 25 3c 6c  |.i%=0.=,... a%<l|
0000ae30  69 6e 6b 64 65 70 74 68  25 0d 3d 36 2b 63 75 72  |inkdepth%.=6+cur|
0000ae40  72 65 6e 74 6d 65 6e 75  70 74 72 25 2b 3d 28 32  |rentmenuptr%+=(2|
0000ae50  38 2b 28 64 69 72 6c 69  73 74 25 28 61 25 29 2a  |8+(dirlist%(a%)*|
0000ae60  32 34 29 29 0d 3d 40 14  69 25 2b 3d 64 69 72 6c  |24)).=@.i%+=dirl|
0000ae70  69 73 74 25 28 61 25 29  0d 3d 4a 09 61 25 2b 3d  |ist%(a%).=J.a%+=|
0000ae80  31 0d 3d 54 05 ce 0d 3d  5e 04 0d 3d 68 3c f4 20  |1.=T...=^..=h<. |
0000ae90  49 6e 69 74 69 61 6c 69  73 65 20 73 74 61 72 74  |Initialise start|
0000aea0  20 6d 65 6e 75 20 75 73  65 72 2f 73 79 73 74 65  | menu user/syste|
0000aeb0  6d 20 73 65 70 65 72 61  74 6f 72 20 74 6f 20 62  |m seperator to b|
0000aec0  65 20 6e 75 6c 6c 0d 3d  72 2b e7 20 28 6c 69 6e  |e null.=r+. (lin|
0000aed0  6b 64 65 70 74 68 25 3d  30 29 20 53 74 61 72 74  |kdepth%=0) Start|
0000aee0  4d 65 6e 75 53 65 70 65  72 61 74 6f 72 25 3d 2d  |MenuSeperator%=-|
0000aef0  31 0d 3d 7c 04 0d 3d 86  39 f4 50 52 4f 43 65 72  |1.=|..=.9.PROCer|
0000af00  72 6f 72 28 22 4d 65 6e  75 50 74 72 20 3d 20 22  |ror("MenuPtr = "|
0000af10  2b 53 54 52 24 7e 28 63  75 72 72 65 6e 74 6d 65  |+STR$~(currentme|
0000af20  6e 75 70 74 72 25 29 2b  43 48 52 24 30 29 0d 3d  |nuptr%)+CHR$0).=|
0000af30  90 0b 6e 65 78 74 25 3d  30 0d 3d 9a 14 6e 75 6d  |..next%=0.=..num|
0000af40  62 65 72 6f 66 69 74 65  6d 73 25 3d 30 0d 3d a4  |berofitems%=0.=.|
0000af50  04 0d 3d ae 38 f4 20 47  65 74 20 6e 75 6d 62 65  |..=.8. Get numbe|
0000af60  72 20 6f 66 20 69 74 65  6d 73 20 69 6e 20 63 75  |r of items in cu|
0000af70  72 72 65 6e 74 20 64 69  72 65 63 74 6f 72 79 20  |rrent directory |
0000af80  6c 6f 63 61 6c 64 69 72  24 0d 3d b8 12 c8 95 20  |localdir$.=.... |
0000af90  28 6e 65 78 74 25 3c 3e  2d 31 29 0d 3d c2 14 24  |(next%<>-1).=..$|
0000afa0  73 74 72 69 6e 67 25 3d  64 69 72 24 2b bd 30 0d  |string%=dir$+.0.|
0000afb0  3d cc 45 c8 99 20 22 4f  53 5f 47 42 50 42 22 2c  |=.E.. "OS_GBPB",|
0000afc0  31 30 2c 73 74 72 69 6e  67 25 2c 64 62 6c 6f 63  |10,string%,dbloc|
0000afd0  6b 25 2c 31 2c 6e 65 78  74 25 2c 36 33 2c 22 2a  |k%,1,next%,63,"*|
0000afe0  22 20 b8 20 2c 2c 2c 6e  75 6d 62 65 72 25 2c 6e  |" . ,,,number%,n|
0000aff0  65 78 74 25 0d 3d d6 21  e7 20 6e 65 78 74 25 3c  |ext%.=.!. next%<|
0000b000  3e 2d 31 20 6e 75 6d 62  65 72 6f 66 69 74 65 6d  |>-1 numberofitem|
0000b010  73 25 2b 3d 31 0d 3d e0  05 ce 0d 3d ea 04 0d 3d  |s%+=1.=....=...=|
0000b020  f4 04 0d 3d fe 3e f4 50  52 4f 43 65 72 72 6f 72  |...=.>.PROCerror|
0000b030  28 22 44 69 72 65 63 74  6f 72 79 20 73 69 7a 65  |("Directory size|
0000b040  20 3d 20 22 2b 53 54 52  24 28 6e 75 6d 62 65 72  | = "+STR$(number|
0000b050  6f 66 69 74 65 6d 73 25  29 2b 43 48 52 24 30 29  |ofitems%)+CHR$0)|
0000b060  0d 3e 08 04 0d 3e 12 27  64 69 72 6c 69 73 74 25  |.>...>.'dirlist%|
0000b070  28 6c 69 6e 6b 64 65 70  74 68 25 29 3d 6e 75 6d  |(linkdepth%)=num|
0000b080  62 65 72 6f 66 69 74 65  6d 73 25 0d 3e 1c 39 6e  |berofitems%.>.9n|
0000b090  65 78 74 6d 65 6e 75 70  74 72 25 3d 63 75 72 72  |extmenuptr%=curr|
0000b0a0  65 6e 74 6d 65 6e 75 70  74 72 25 2b 28 32 38 2b  |entmenuptr%+(28+|
0000b0b0  28 6e 75 6d 62 65 72 6f  66 69 74 65 6d 73 25 2a  |(numberofitems%*|
0000b0c0  32 34 29 29 0d 3e 26 26  64 69 72 70 74 72 25 28  |24)).>&&dirptr%(|
0000b0d0  6c 69 6e 6b 64 65 70 74  68 25 2b 31 29 3d 6e 65  |linkdepth%+1)=ne|
0000b0e0  78 74 6d 65 6e 75 70 74  72 25 0d 3e 30 04 0d 3e  |xtmenuptr%.>0..>|
0000b0f0  3a 0e 6c 6f 63 61 6c 69  25 3d 69 25 0d 3e 44 1a  |:.locali%=i%.>D.|
0000b100  f4 20 42 75 69 6c 64 20  74 69 74 6c 65 6c 65 73  |. Build titleles|
0000b110  73 20 6d 65 6e 75 0d 3e  4e 2c f4 20 74 69 74 6c  |s menu.>N,. titl|
0000b120  65 24 3d 22 4d 65 6e 75  20 22 2b 53 54 52 24 28  |e$="Menu "+STR$(|
0000b130  63 75 72 72 65 6e 74 64  69 72 25 29 2b 43 48 52  |currentdir%)+CHR|
0000b140  24 30 0d 3e 58 3b e7 20  28 6c 69 6e 6b 64 65 70  |$0.>X;. (linkdep|
0000b150  74 68 25 3d 31 20 80 20  c0 64 69 72 66 69 6c 65  |th%=1 . .dirfile|
0000b160  6e 61 6d 65 24 2c 31 29  3d bd 28 53 79 73 46 69  |name$,1)=.(SysFi|
0000b170  6c 65 50 72 65 66 69 78  25 29 29 20 8c 0d 3e 62  |lePrefix%)) ..>b|
0000b180  2f 20 74 69 74 6c 65 24  3d c2 64 69 72 66 69 6c  |/ title$=.dirfil|
0000b190  65 6e 61 6d 65 24 2c a9  28 64 69 72 66 69 6c 65  |ename$,.(dirfile|
0000b1a0  6e 61 6d 65 24 29 2d 31  29 2b bd 30 0d 3e 6c 06  |name$)-1)+.0.>l.|
0000b1b0  20 cc 0d 3e 76 1b 20 74  69 74 6c 65 24 3d 64 69  | ..>v. title$=di|
0000b1c0  72 66 69 6c 65 6e 61 6d  65 24 2b bd 30 0d 3e 80  |rfilename$+.0.>.|
0000b1d0  05 cd 0d 3e 8a 04 0d 3e  94 1d 54 69 74 6c 65 50  |...>...>..TitleP|
0000b1e0  74 72 25 3d 63 75 72 72  65 6e 74 6d 65 6e 75 70  |tr%=currentmenup|
0000b1f0  74 72 25 0d 3e 9e 15 24  54 69 74 6c 65 50 74 72  |tr%.>..$TitlePtr|
0000b200  25 3d 74 69 74 6c 65 24  0d 3e a8 1b 77 69 64 74  |%=title$.>..widt|
0000b210  68 25 3d 28 a9 28 74 69  74 6c 65 24 29 2d 32 29  |h%=(.(title$)-2)|
0000b220  2a 31 36 0d 3e b2 22 63  75 72 72 65 6e 74 6d 65  |*16.>."currentme|
0000b230  6e 75 70 74 72 25 21 31  32 20 3d 20 26 30 30 30  |nuptr%!12 = &000|
0000b240  37 30 32 30 37 0d 3e bc  19 63 75 72 72 65 6e 74  |70207.>..current|
0000b250  6d 65 6e 75 70 74 72 25  21 32 30 3d 34 34 0d 3e  |menuptr%!20=44.>|
0000b260  c6 18 63 75 72 72 65 6e  74 6d 65 6e 75 70 74 72  |..currentmenuptr|
0000b270  25 21 32 34 3d 30 0d 3e  d0 1b 70 74 72 25 3d 63  |%!24=0.>..ptr%=c|
0000b280  75 72 72 65 6e 74 6d 65  6e 75 70 74 72 25 2b 32  |urrentmenuptr%+2|
0000b290  38 0d 3e da 04 0d 3e e4  0b 6e 65 78 74 25 3d 30  |8.>...>..next%=0|
0000b2a0  0d 3e ee 04 0d 3e f8 21  4e 75 6d 62 65 72 4f 66  |.>...>.!NumberOf|
0000b2b0  4c 69 6e 6b 73 25 3d 6e  75 6d 62 65 72 6f 66 69  |Links%=numberofi|
0000b2c0  74 65 6d 73 25 0d 3f 02  04 0d 3f 0c 2a c8 95 20  |tems%.?...?.*.. |
0000b2d0  28 6e 65 78 74 25 3c 4e  75 6d 62 65 72 4f 66 4c  |(next%<NumberOfL|
0000b2e0  69 6e 6b 73 25 20 80 20  44 69 72 53 63 61 6e 25  |inks% . DirScan%|
0000b2f0  3d b9 29 0d 3f 16 14 56  61 6c 69 64 4c 6f 61 64  |=.).?..ValidLoad|
0000b300  46 6c 61 67 25 3d b9 0d  3f 20 2f c8 99 20 22 4f  |Flag%=..? /.. "O|
0000b310  53 5f 47 42 50 42 22 2c  31 30 2c 64 69 72 24 2c  |S_GBPB",10,dir$,|
0000b320  64 62 6c 6f 63 6b 25 2c  31 2c 6e 65 78 74 25 2c  |dblock%,1,next%,|
0000b330  36 33 2c 22 2a 22 0d 3f  2a 0c 6e 65 78 74 25 2b  |63,"*".?*.next%+|
0000b340  3d 31 0d 3f 34 0e 6c 6f  63 61 6c 69 25 3d 69 25  |=1.?4.locali%=i%|
0000b350  0d 3f 3e 2f f4 20 47 65  74 20 4f 62 6a 65 63 74  |.?>/. Get Object|
0000b360  20 74 79 70 65 20 28 32  20 3d 20 64 69 72 65 63  | type (2 = direc|
0000b370  74 6f 72 79 2c 20 31 20  3d 20 66 69 6c 65 29 0d  |tory, 1 = file).|
0000b380  3f 48 17 74 79 70 65 25  20 3d 20 64 62 6c 6f 63  |?H.type% = dbloc|
0000b390  6b 25 3f 26 31 30 0d 3f  52 1d f4 20 47 65 74 20  |k%?&10.?R.. Get |
0000b3a0  6e 61 6d 65 20 6f 66 20  74 68 69 73 20 6f 62 6a  |name of this obj|
0000b3b0  65 63 74 0d 3f 5c 1f 69  74 65 6d 24 3d a4 67 65  |ect.?\.item$=.ge|
0000b3c0  74 6e 61 6d 65 28 64 62  6c 6f 63 6b 25 2b 26 31  |tname(dblock%+&1|
0000b3d0  34 29 0d 3f 66 19 f4 20  47 65 74 20 66 69 6c 65  |4).?f.. Get file|
0000b3e0  20 61 74 74 72 69 62 75  74 65 73 0d 3f 70 22 66  | attributes.?p"f|
0000b3f0  69 6c 65 74 79 70 65 69  6e 66 6f 25 3d 20 21 64  |iletypeinfo%= !d|
0000b400  62 6c 6f 63 6b 25 20 3e  3e 3e 20 32 30 0d 3f 7a  |block% >>> 20.?z|
0000b410  23 66 69 6c 65 74 79 70  65 25 3d 28 21 64 62 6c  |#filetype%=(!dbl|
0000b420  6f 63 6b 25 20 3e 3e 20  38 29 80 20 26 46 46 46  |ock% >> 8). &FFF|
0000b430  0d 3f 84 04 0d 3f 8e 1c  f4 20 49 6e 69 74 69 61  |.?...?... Initia|
0000b440  6c 69 73 65 20 6d 65 6e  75 20 6f 62 6a 65 63 74  |lise menu object|
0000b450  0d 3f 98 2f 21 70 74 72  25 3d 38 3a f4 20 6d 66  |.?./!ptr%=8:. mf|
0000b460  6c 61 67 73 20 3d 20 26  38 30 20 6d 65 61 6e 73  |lags = &80 means|
0000b470  20 6c 61 73 74 20 6d 65  6e 75 20 69 74 65 6d 0d  | last menu item.|
0000b480  3f a2 23 70 74 72 25 21  34 3d 2d 31 3a f4 20 70  |?.#ptr%!4=-1:. p|
0000b490  6f 69 6e 74 65 72 20 74  6f 20 73 75 62 20 6d 65  |ointer to sub me|
0000b4a0  6e 75 0d 3f ac 2d f4 20  53 74 6f 72 65 20 74 68  |nu.?.-. Store th|
0000b4b0  69 73 20 66 69 6c 65 72  20 6f 62 6a 65 63 74 2c  |is filer object,|
0000b4c0  20 77 68 61 74 65 76 65  72 20 69 74 20 69 73 0d  | whatever it is.|
0000b4d0  3f b6 33 21 28 73 68 6f  72 74 63 75 74 6d 65 6e  |?.3!(shortcutmen|
0000b4e0  75 64 61 74 61 25 2b 28  6c 6f 63 61 6c 69 25 2a  |udata%+(locali%*|
0000b4f0  36 34 29 2b 33 32 2b 32  38 29 20 3d 20 74 79 70  |64)+32+28) = typ|
0000b500  65 25 0d 3f c0 21 f4 20  49 73 20 74 68 69 73 20  |e%.?.!. Is this |
0000b510  6f 62 6a 65 63 74 20 61  20 64 69 72 65 63 74 6f  |object a directo|
0000b520  72 79 3f 0d 3f ca 12 e7  20 28 74 79 70 65 25 20  |ry?.?... (type% |
0000b530  3d 32 29 20 8c 0d 3f d4  28 20 f4 20 49 66 20 73  |=2) ..?.( . If s|
0000b540  6f 2c 20 74 68 65 6e 20  61 64 64 20 74 6f 20 64  |o, then add to d|
0000b550  69 72 65 63 74 6f 72 79  20 6c 69 73 74 0d 3f de  |irectory list.?.|
0000b560  31 20 24 28 73 68 6f 72  74 63 75 74 6d 65 6e 75  |1 $(shortcutmenu|
0000b570  64 61 74 61 25 2b 28 6c  6f 63 61 6c 69 25 2a 36  |data%+(locali%*6|
0000b580  34 29 2b 33 32 29 20 3d  20 22 22 2b bd 30 0d 3f  |4)+32) = ""+.0.?|
0000b590  e8 2f 20 70 74 72 25 21  34 20 3d 20 6e 65 78 74  |./ ptr%!4 = next|
0000b5a0  6d 65 6e 75 70 74 72 25  3a f4 20 50 6f 69 6e 74  |menuptr%:. Point|
0000b5b0  65 72 20 74 6f 20 73 75  62 6d 65 6e 75 0d 3f f2  |er to submenu.?.|
0000b5c0  06 20 cc 0d 3f fc 29 20  f4 20 54 68 69 73 20 69  |. ..?.) . This i|
0000b5d0  73 20 61 20 6c 69 6e 6b  20 61 6e 64 20 6e 6f 74  |s a link and not|
0000b5e0  20 61 20 64 69 72 65 63  74 6f 72 79 0d 40 06 2c  | a directory.@.,|
0000b5f0  20 f4 20 20 50 52 4f 43  65 72 72 6f 72 28 22 50  | .  PROCerror("P|
0000b600  72 6f 63 65 73 73 69 6e  67 20 22 2b 69 74 65 6d  |rocessing "+item|
0000b610  24 2b 43 48 52 24 30 29  0d 40 10 22 20 f4 20 47  |$+CHR$0).@." . G|
0000b620  65 74 20 66 69 6c 65 74  79 70 65 20 6f 66 20 6c  |et filetype of l|
0000b630  69 6e 6b 20 6f 62 6a 65  63 74 0d 40 1a 31 20 24  |ink object.@.1 $|
0000b640  73 74 72 69 6e 67 25 3d  a4 47 65 74 4c 69 6e 6b  |string%=.GetLink|
0000b650  43 6f 6e 74 65 6e 74 73  28 64 69 72 24 2b 22 2e  |Contents(dir$+".|
0000b660  22 2b 69 74 65 6d 24 29  2b bd 30 0d 40 24 05 20  |"+item$)+.0.@$. |
0000b670  0d 40 2e 30 20 e7 20 28  a4 43 68 65 63 6b 56 61  |.@.0 . (.CheckVa|
0000b680  6c 69 64 44 72 69 76 65  28 a4 73 74 72 69 6e 67  |lidDrive(.string|
0000b690  28 73 74 72 69 6e 67 25  29 29 20 3d 31 29 20 8c  |(string%)) =1) .|
0000b6a0  0d 40 38 3a 20 20 c8 99  20 22 4f 53 5f 46 69 6c  |.@8:  .. "OS_Fil|
0000b6b0  65 22 2c 31 37 2c 73 74  72 69 6e 67 25 20 b8 20  |e",17,string% . |
0000b6c0  6f 62 6a 65 63 74 74 79  70 65 25 2c 2c 6c 69 6e  |objecttype%,,lin|
0000b6d0  6b 6c 6f 61 64 61 64 64  72 25 0d 40 42 29 20 20  |kloadaddr%.@B)  |
0000b6e0  6c 69 6e 6b 74 79 70 65  25 3d 28 6c 69 6e 6b 6c  |linktype%=(linkl|
0000b6f0  6f 61 64 61 64 64 72 25  3e 3e 38 29 20 80 20 26  |oadaddr%>>8) . &|
0000b700  46 46 46 0d 40 4c 29 20  20 6c 69 6e 6b 74 79 70  |FFF.@L)  linktyp|
0000b710  65 69 6e 66 6f 25 3d 20  6c 69 6e 6b 6c 6f 61 64  |einfo%= linkload|
0000b720  61 64 64 72 25 20 3e 3e  3e 20 32 30 0d 40 56 06  |addr% >>> 20.@V.|
0000b730  20 cc 0d 40 60 13 20 20  6f 62 6a 65 63 74 74 79  | ..@`.  objectty|
0000b740  70 65 25 3d 30 0d 40 6a  06 20 cd 0d 40 74 55 20  |pe%=0.@j. ..@tU |
0000b750  f4 50 52 4f 43 65 72 72  6f 72 28 46 4e 47 65 74  |.PROCerror(FNGet|
0000b760  4c 69 6e 6b 43 6f 6e 74  65 6e 74 73 28 64 69 72  |LinkContents(dir|
0000b770  24 2b 22 2e 22 2b 69 74  65 6d 24 29 2b 22 20 69  |$+"."+item$)+" i|
0000b780  73 20 61 20 22 2b 53 54  52 24 28 6c 69 6e 6b 74  |s a "+STR$(linkt|
0000b790  79 70 65 69 6e 66 6f 25  29 2b 43 48 52 24 30 29  |ypeinfo%)+CHR$0)|
0000b7a0  0d 40 7e 18 20 e7 20 28  6f 62 6a 65 63 74 74 79  |.@~. . (objectty|
0000b7b0  70 65 25 3d 30 29 20 8c  0d 40 88 59 20 20 f4 20  |pe%=0) ..@.Y  . |
0000b7c0  50 52 4f 43 65 72 72 6f  72 28 22 45 72 72 6f 72  |PROCerror("Error|
0000b7d0  20 3a 20 4c 69 6e 6b 28  22 2b 46 4e 47 65 74 4c  | : Link("+FNGetL|
0000b7e0  69 6e 6b 43 6f 6e 74 65  6e 74 73 28 64 69 72 24  |inkContents(dir$|
0000b7f0  2b 22 2e 22 2b 69 74 65  6d 24 29 2b 22 29 20 6e  |+"."+item$)+") n|
0000b800  6f 74 20 66 6f 75 6e 64  2e 22 2b 43 48 52 24 30  |ot found."+CHR$0|
0000b810  29 0d 40 92 31 20 20 f4  20 44 65 6c 65 74 65 20  |).@.1  . Delete |
0000b820  74 68 69 73 20 6c 69 6e  6b 20 61 6e 64 20 72 65  |this link and re|
0000b830  73 63 61 6e 20 74 68 65  20 64 69 72 65 63 74 6f  |scan the directo|
0000b840  72 79 0d 40 9c 3d 20 20  f4 20 53 61 66 65 74 79  |ry.@.=  . Safety|
0000b850  20 66 69 72 73 74 20 2d  20 65 6e 73 75 72 65 20  | first - ensure |
0000b860  74 68 69 73 20 66 69 6c  65 20 69 73 20 61 63 74  |this file is act|
0000b870  75 61 6c 6c 79 20 61 20  6c 69 6e 6b 20 69 6e 0d  |ually a link in.|
0000b880  40 a6 43 20 20 f4 20 63  61 73 65 20 74 68 65 20  |@.C  . case the |
0000b890  3c 53 74 61 72 74 24 44  69 72 3e 20 73 79 73 74  |<Start$Dir> syst|
0000b8a0  65 6d 20 76 61 72 69 61  62 6c 65 20 68 61 73 20  |em variable has |
0000b8b0  62 65 63 6f 6d 65 20 63  6f 72 72 75 70 74 20 28  |become corrupt (|
0000b8c0  21 29 0d 40 b0 1a 20 20  e7 20 28 66 69 6c 65 74  |!).@..  . (filet|
0000b8d0  79 70 65 25 3d 26 61 66  33 29 20 8c 0d 40 ba 71  |ype%=&af3) ..@.q|
0000b8e0  20 20 20 f4 20 50 52 4f  43 65 72 72 6f 72 28 22  |   . PROCerror("|
0000b8f0  49 6e 76 61 6c 69 64 20  6c 69 6e 6b 20 22 2b 64  |Invalid link "+d|
0000b900  69 72 24 2b 22 2e 22 2b  69 74 65 6d 24 2b 22 20  |ir$+"."+item$+" |
0000b910  68 61 73 20 62 65 65 6e  20 66 6f 75 6e 64 20 61  |has been found a|
0000b920  6e 64 20 77 69 6c 6c 20  62 65 20 64 65 6c 65 74  |nd will be delet|
0000b930  65 64 20 77 68 65 6e 20  79 6f 75 20 63 6c 69 63  |ed when you clic|
0000b940  6b 20 4f 4b 2e 22 2b 43  48 52 24 30 29 0d 40 c4  |k OK."+CHR$0).@.|
0000b950  25 20 20 20 ff 28 22 64  65 6c 65 74 65 20 22 2b  |%   .("delete "+|
0000b960  64 69 72 24 2b 22 2e 22  2b 69 74 65 6d 24 2b bd  |dir$+"."+item$+.|
0000b970  30 29 0d 40 ce 11 20 20  20 44 69 72 53 63 61 6e  |0).@..   DirScan|
0000b980  25 3d a3 0d 40 d8 17 20  20 20 56 61 6c 69 64 4c  |%=..@..   ValidL|
0000b990  6f 61 64 46 6c 61 67 25  3d a3 0d 40 e2 08 20 20  |oadFlag%=..@..  |
0000b9a0  20 cc 0d 40 ec fb 20 20  20 f2 65 72 72 6f 72 28  | ..@..   .error(|
0000b9b0  22 45 72 72 6f 72 3a 20  41 6e 6f 74 68 65 72 20  |"Error: Another |
0000b9c0  70 72 6f 67 20 68 61 73  20 61 6c 74 65 72 65 64  |prog has altered|
0000b9d0  20 74 68 65 20 3c 58 75  65 6e 62 73 24 44 69 72  | the <Xuenbs$Dir|
0000b9e0  3e 20 73 79 73 74 65 6d  20 76 61 72 69 61 62 6c  |> system variabl|
0000b9f0  65 20 6f 72 20 73 6f 6d  65 6f 6e 65 20 68 61 73  |e or someone has|
0000ba00  20 70 6c 61 63 65 64 20  61 20 6e 6f 6e 2d 6c 69  | placed a non-li|
0000ba10  6e 6b 20 22 2b 64 69 72  24 2b 22 2e 22 2b 69 74  |nk "+dir$+"."+it|
0000ba20  65 6d 24 2b 22 20 69 6e  74 6f 20 74 68 65 20 6c  |em$+" into the l|
0000ba30  69 6e 6b 73 20 64 69 72  65 63 74 6f 72 79 2e 20  |inks directory. |
0000ba40  52 65 72 75 6e 20 74 68  65 20 21 58 75 65 6e 20  |Rerun the !Xuen |
0000ba50  61 70 70 6c 69 63 61 74  69 6f 6e 20 6f 72 20 72  |application or r|
0000ba60  65 6d 6f 76 65 20 74 68  65 20 6f 66 66 65 6e 64  |emove the offend|
0000ba70  69 6e 67 20 66 69 6c 65  20 66 72 6f 6d 20 74 68  |ing file from th|
0000ba80  65 20 21 58 75 65 6e 2e  4c 69 6e 6b 73 20 64 69  |e !Xuen.Links di|
0000ba90  72 65 63 74 6f 72 79 2e  22 2b bd 30 29 0d 40 f6  |rectory."+.0).@.|
0000baa0  07 20 20 cd 0d 41 00 05  20 0d 41 0a 06 20 cd 0d  |.  ..A.. .A.. ..|
0000bab0  41 14 05 20 0d 41 1e 40  20 f4 20 24 28 73 68 6f  |A.. .A.@ . $(sho|
0000bac0  72 74 63 75 74 6d 65 6e  75 64 61 74 61 25 2b 28  |rtcutmenudata%+(|
0000bad0  6c 6f 63 61 6c 69 25 2a  36 34 29 2b 33 32 29 20  |locali%*64)+32) |
0000bae0  3d 20 22 53 73 6d 61 6c  6c 5f 64 69 72 22 2b 43  |= "Ssmall_dir"+C|
0000baf0  48 52 24 30 0d 41 28 05  20 0d 41 32 18 20 e7 20  |HR$0.A(. .A2. . |
0000bb00  28 6f 62 6a 65 63 74 74  79 70 65 25 3d 31 29 20  |(objecttype%=1) |
0000bb10  8c 0d 41 3c 28 20 20 f4  20 54 68 69 73 20 6c 69  |..A<(  . This li|
0000bb20  6e 6b 20 69 73 20 61 20  70 6f 69 6e 74 65 72 20  |nk is a pointer |
0000bb30  74 6f 20 61 20 66 69 6c  65 0d 41 46 37 20 20 f4  |to a file.AF7  .|
0000bb40  20 50 52 4f 43 65 72 72  6f 72 28 46 4e 73 74 72  | PROCerror(FNstr|
0000bb50  69 6e 67 28 73 74 72 69  6e 67 25 29 2b 22 20 69  |ing(string%)+" i|
0000bb60  73 20 61 20 66 69 6c 65  22 2b 43 48 52 24 30 29  |s a file"+CHR$0)|
0000bb70  0d 41 50 47 20 20 24 28  73 68 6f 72 74 63 75 74  |.APG  $(shortcut|
0000bb80  6d 65 6e 75 64 61 74 61  25 2b 28 6c 6f 63 61 6c  |menudata%+(local|
0000bb90  69 25 2a 36 34 29 2b 33  32 29 20 3d 20 22 53 73  |i%*64)+32) = "Ss|
0000bba0  6d 61 6c 6c 5f 22 2b c3  7e 28 6c 69 6e 6b 74 79  |mall_"+.~(linkty|
0000bbb0  70 65 25 29 2b bd 30 0d  41 5a 06 20 cd 0d 41 64  |pe%)+.0.AZ. ..Ad|
0000bbc0  04 0d 41 6e 3d 20 f4 20  46 6f 72 20 73 6f 6d 65  |..An= . For some|
0000bbd0  20 77 69 65 72 64 20 72  65 61 73 6f 6e 20 74 68  | wierd reason th|
0000bbe0  65 20 66 6f 6c 6c 6f 77  69 6e 67 20 74 77 6f 20  |e following two |
0000bbf0  76 61 72 69 61 62 6c 65  73 20 6d 75 73 74 0d 41  |variables must.A|
0000bc00  78 3b 20 f4 20 62 65 20  65 76 61 6c 75 61 74 65  |x; . be evaluate|
0000bc10  64 20 6f 75 74 73 69 64  65 20 6f 66 20 74 68 65  |d outside of the|
0000bc20  20 6f 62 6a 65 63 74 74  79 70 65 20 74 65 73 74  | objecttype test|
0000bc30  2e 20 49 20 74 68 69 6e  6b 0d 41 82 3c 20 f4 20  |. I think.A.< . |
0000bc40  69 74 20 6d 75 73 74 20  62 65 20 73 6f 6d 65 74  |it must be somet|
0000bc50  68 69 6e 67 20 74 6f 20  64 6f 20 77 69 74 68 20  |hing to do with |
0000bc60  74 68 65 20 70 69 70 65  6c 69 6e 65 20 61 6e 64  |the pipeline and|
0000bc70  2f 6f 72 20 61 0d 41 8c  1c 20 f4 20 62 75 67 20  |/or a.A.. . bug |
0000bc80  69 6e 20 74 68 65 20 42  41 53 49 43 20 72 6f 6d  |in the BASIC rom|
0000bc90  2e 0d 41 96 13 20 73 68  72 69 65 6b 25 3d 97 28  |..A.. shriek%=.(|
0000bca0  22 21 22 29 0d 41 a0 1c  20 6e 61 6d 65 73 74 61  |"!").A.. namesta|
0000bcb0  72 74 25 3d 97 28 c0 69  74 65 6d 24 2c 31 29 29  |rt%=.(.item$,1))|
0000bcc0  0d 41 aa 31 20 f4 20 50  52 4f 43 65 72 72 6f 72  |.A.1 . PROCerror|
0000bcd0  28 53 54 52 24 28 6e 61  6d 65 73 74 61 72 74 25  |(STR$(namestart%|
0000bce0  2d 73 68 72 69 65 6b 25  29 2b 43 48 52 24 30 29  |-shriek%)+CHR$0)|
0000bcf0  20 0d 41 b4 18 20 e7 20  28 6f 62 6a 65 63 74 74  | .A.. . (objectt|
0000bd00  79 70 65 25 3d 32 29 20  8c 0d 41 be 3d 20 20 f4  |ype%=2) ..A.=  .|
0000bd10  20 54 68 69 73 20 6c 69  6e 6b 20 69 73 20 61 20  | This link is a |
0000bd20  70 6f 69 6e 74 65 72 20  74 6f 20 61 6e 20 61 70  |pointer to an ap|
0000bd30  70 6c 69 63 61 74 69 6f  6e 20 6f 72 20 64 69 72  |plication or dir|
0000bd40  65 63 74 6f 72 79 0d 41  c8 23 20 20 f4 20 50 52  |ectory.A.#  . PR|
0000bd50  4f 43 65 72 72 6f 72 28  46 69 72 73 74 43 68 61  |OCerror(FirstCha|
0000bd60  72 24 2b 43 48 52 24 30  29 0d 41 d2 1f 20 20 e7  |r$+CHR$0).A..  .|
0000bd70  20 28 6e 61 6d 65 73 74  61 72 74 25 3c 3e 73 68  | (namestart%<>sh|
0000bd80  72 69 65 6b 25 29 20 8c  0d 41 dc 18 20 20 20 f4  |riek%) ..A..   .|
0000bd90  20 21 70 74 72 25 3d 28  21 70 74 72 25 29 2b 34  | !ptr%=(!ptr%)+4|
0000bda0  0d 41 e6 3d 20 20 20 24  28 73 68 6f 72 74 63 75  |.A.=   $(shortcu|
0000bdb0  74 6d 65 6e 75 64 61 74  61 25 2b 28 6c 6f 63 61  |tmenudata%+(loca|
0000bdc0  6c 69 25 2a 36 34 29 2b  33 32 29 20 3d 20 22 53  |li%*64)+32) = "S|
0000bdd0  73 6d 61 6c 6c 5f 64 69  72 22 2b bd 30 0d 41 f0  |small_dir"+.0.A.|
0000bde0  08 20 20 20 cc 0d 41 fa  3c 20 20 20 24 28 73 68  |.   ..A.<   $(sh|
0000bdf0  6f 72 74 63 75 74 6d 65  6e 75 64 61 74 61 25 2b  |ortcutmenudata%+|
0000be00  28 6c 6f 63 61 6c 69 25  2a 36 34 29 2b 33 32 29  |(locali%*64)+32)|
0000be10  20 3d 20 22 53 73 6d 22  2b 69 74 65 6d 24 2b bd  | = "Ssm"+item$+.|
0000be20  30 0d 42 04 07 20 20 cd  0d 42 0e 06 20 cd 0d 42  |0.B..  ..B.. ..B|
0000be30  18 04 0d 42 22 05 cd 0d  42 2c 04 0d 42 36 28 f4  |...B"...B,..B6(.|
0000be40  20 42 75 69 6c 64 20 72  65 73 74 20 6f 66 20 6d  | Build rest of m|
0000be50  65 6e 75 20 69 74 65 6d  20 61 74 74 72 69 62 75  |enu item attribu|
0000be60  74 65 73 0d 42 40 1f 70  74 72 25 21 38 3d 26 37  |tes.B@.ptr%!8=&7|
0000be70  30 30 30 33 31 33 3a f4  20 69 63 6f 6e 20 74 79  |000313:. icon ty|
0000be80  70 65 0d 42 4a 45 f4 20  49 46 20 28 74 79 70 65  |pe.BJE. IF (type|
0000be90  25 3d 32 20 41 4e 44 20  6f 62 6a 65 63 74 74 79  |%=2 AND objectty|
0000bea0  70 65 25 3d 30 29 20 70  74 72 25 21 38 3d 26 37  |pe%=0) ptr%!8=&7|
0000beb0  34 30 30 33 31 33 3a 52  45 4d 20 49 6e 76 61 6c  |400313:REM Inval|
0000bec0  69 64 20 6c 69 6e 65 0d  42 54 22 e7 20 28 61 64  |id line.BT". (ad|
0000bed0  64 6c 69 6e 6b 25 3d 31  29 20 70 74 72 25 21 38  |dlink%=1) ptr%!8|
0000bee0  3d 26 33 30 30 30 33 31  33 0d 42 5e 2e 24 28 73  |=&3000313.B^.$(s|
0000bef0  68 6f 72 74 63 75 74 6d  65 6e 75 64 61 74 61 25  |hortcutmenudata%|
0000bf00  2b 28 6c 6f 63 61 6c 69  25 2a 36 34 29 29 3d 69  |+(locali%*64))=i|
0000bf10  74 65 6d 24 2b bd 30 0d  42 68 2c 70 74 72 25 21  |tem$+.0.Bh,ptr%!|
0000bf20  31 32 20 3d 20 73 68 6f  72 74 63 75 74 6d 65 6e  |12 = shortcutmen|
0000bf30  75 64 61 74 61 25 2b 28  6c 6f 63 61 6c 69 25 2a  |udata%+(locali%*|
0000bf40  36 34 29 0d 42 72 2f 70  74 72 25 21 31 36 20 3d  |64).Br/ptr%!16 =|
0000bf50  20 73 68 6f 72 74 63 75  74 6d 65 6e 75 64 61 74  | shortcutmenudat|
0000bf60  61 25 2b 28 6c 6f 63 61  6c 69 25 2a 36 34 29 2b  |a%+(locali%*64)+|
0000bf70  33 32 0d 42 7c 35 70 74  72 25 21 32 30 20 3d 20  |32.B|5ptr%!20 = |
0000bf80  32 38 3a f4 20 6d 65 6e  75 20 69 74 65 6d 20 73  |28:. menu item s|
0000bf90  74 72 69 6e 67 20 62 75  66 66 65 72 20 3d 20 32  |tring buffer = 2|
0000bfa0  38 20 62 79 74 65 73 0d  42 86 04 0d 42 90 16 e7  |8 bytes.B...B...|
0000bfb0  20 28 6c 69 6e 6b 64 65  70 74 68 25 3d 30 29 20  | (linkdepth%=0) |
0000bfc0  8c 0d 42 9a 3f e7 20 28  c1 69 74 65 6d 24 2c 31  |..B.?. (.item$,1|
0000bfd0  2c 31 29 3d bd 28 53 79  73 46 69 6c 65 50 72 65  |,1)=.(SysFilePre|
0000bfe0  66 69 78 25 29 20 80 20  53 74 61 72 74 4d 65 6e  |fix%) . StartMen|
0000bff0  75 53 65 70 65 72 61 74  6f 72 25 3c 30 29 20 8c  |uSeperator%<0) .|
0000c000  0d 42 a4 49 f4 20 50 52  4f 43 65 72 72 6f 72 28  |.B.I. PROCerror(|
0000c010  22 4e 61 6d 65 20 3d 20  22 2b 46 4e 73 74 72 69  |"Name = "+FNstri|
0000c020  6e 67 28 73 68 6f 72 74  63 75 74 6d 65 6e 75 64  |ng(shortcutmenud|
0000c030  61 74 61 25 2b 28 6c 6f  63 61 6c 69 25 2a 36 34  |ata%+(locali%*64|
0000c040  29 29 2b 43 48 52 24 30  29 0d 42 ae 1f 53 74 61  |))+CHR$0).B..Sta|
0000c050  72 74 4d 65 6e 75 53 65  70 65 72 61 74 6f 72 25  |rtMenuSeperator%|
0000c060  3d 6c 6f 63 61 6c 69 25  0d 42 b8 31 f4 20 44 6f  |=locali%.B.1. Do|
0000c070  65 73 20 74 68 69 73 20  69 74 65 6d 20 6e 65 65  |es this item nee|
0000c080  64 20 61 20 64 6f 74 74  65 64 20 6c 69 6e 65 20  |d a dotted line |
0000c090  61 62 6f 76 65 20 69 74  3f 0d 42 c2 2d e7 20 28  |above it?.B.-. (|
0000c0a0  6c 6f 63 61 6c 69 25 3e  30 29 20 21 28 70 74 72  |locali%>0) !(ptr|
0000c0b0  25 2d 32 34 29 3d 28 21  28 70 74 72 25 2d 32 34  |%-24)=(!(ptr%-24|
0000c0c0  29 29 20 2b 20 32 0d 42  cc 05 cd 0d 42 d6 75 e7  |)) + 2.B....B.u.|
0000c0d0  20 28 6c 6f 63 61 6c 69  25 3e 3d 53 74 61 72 74  | (locali%>=Start|
0000c0e0  4d 65 6e 75 53 65 70 65  72 61 74 6f 72 25 20 80  |MenuSeperator% .|
0000c0f0  20 53 74 61 72 74 4d 65  6e 75 53 65 70 65 72 61  | StartMenuSepera|
0000c100  74 6f 72 25 3e 3d 30 29  20 24 28 73 68 6f 72 74  |tor%>=0) $(short|
0000c110  63 75 74 6d 65 6e 75 64  61 74 61 25 2b 28 6c 6f  |cutmenudata%+(lo|
0000c120  63 61 6c 69 25 2a 36 34  29 29 3d c2 69 74 65 6d  |cali%*64))=.item|
0000c130  24 2c a9 28 69 74 65 6d  24 29 2d 31 29 2b bd 30  |$,.(item$)-1)+.0|
0000c140  0d 42 e0 05 cd 0d 42 ea  04 0d 42 f4 04 0d 42 fe  |.B....B...B...B.|
0000c150  16 61 25 3d 28 a9 28 69  74 65 6d 24 29 2b 34 29  |.a%=(.(item$)+4)|
0000c160  2a 31 36 0d 43 08 19 e7  20 61 25 3e 77 69 64 74  |*16.C... a%>widt|
0000c170  68 25 20 77 69 64 74 68  25 3d 61 25 0d 43 12 0c  |h% width%=a%.C..|
0000c180  70 74 72 25 2b 3d 32 34  0d 43 1c 09 69 25 2b 3d  |ptr%+=24.C..i%+=|
0000c190  31 0d 43 26 05 ce 0d 43  30 04 0d 43 3a 27 f4 20  |1.C&...C0..C:'. |
0000c1a0  48 61 73 20 74 68 69 73  20 6c 69 73 74 20 67 6f  |Has this list go|
0000c1b0  74 20 61 6e 79 74 68 69  6e 67 20 69 6e 20 69 74  |t anything in it|
0000c1c0  3f 0d 43 44 20 e7 20 28  64 69 72 6c 69 73 74 25  |?.CD . (dirlist%|
0000c1d0  28 6c 69 6e 6b 64 65 70  74 68 25 29 3e 30 29 20  |(linkdepth%)>0) |
0000c1e0  8c 0d 43 4e 27 21 28 70  74 72 25 2d 32 34 29 3d  |..CN'!(ptr%-24)=|
0000c1f0  26 38 38 3a f4 20 53 65  74 20 6c 61 73 74 20 6d  |&88:. Set last m|
0000c200  65 6e 75 20 69 74 65 6d  0d 43 58 05 cc 0d 43 62  |enu item.CX...Cb|
0000c210  1b 77 69 64 74 68 25 3d  28 a9 28 74 69 74 6c 65  |.width%=(.(title|
0000c220  24 29 2d 32 29 2a 31 36  0d 43 6c 3a f4 20 4d 61  |$)-2)*16.Cl:. Ma|
0000c230  6b 65 20 64 65 66 61 75  6c 74 20 66 69 72 73 74  |ke default first|
0000c240  20 65 6e 74 72 79 20 62  65 20 67 72 65 79 65 64  | entry be greyed|
0000c250  20 6f 75 74 20 6c 61 62  65 6c 20 27 65 6d 70 74  | out label 'empt|
0000c260  79 27 0d 43 76 14 69 74  65 6d 24 3d 22 45 6d 70  |y'.Cv.item$="Emp|
0000c270  74 79 22 2b bd 30 0d 43  80 30 24 28 73 68 6f 72  |ty"+.0.C.0$(shor|
0000c280  74 63 75 74 6d 65 6e 75  64 61 74 61 25 2b 28 6c  |tcutmenudata%+(l|
0000c290  6f 63 61 6c 69 25 2a 36  34 29 2b 33 32 29 20 3d  |ocali%*64)+32) =|
0000c2a0  20 22 22 2b bd 30 0d 43  8a 3d 21 70 74 72 25 3d  | ""+.0.C.=!ptr%=|
0000c2b0  26 38 38 3a f4 20 6d 66  6c 61 67 73 20 3d 20 26  |&88:. mflags = &|
0000c2c0  38 30 20 6d 65 61 6e 73  20 6c 61 73 74 20 6d 65  |80 means last me|
0000c2d0  6e 75 20 69 74 65 6d 20  38 3d 49 73 73 75 65 57  |nu item 8=IssueW|
0000c2e0  61 72 6e 0d 43 94 23 70  74 72 25 21 34 3d 2d 31  |arn.C.#ptr%!4=-1|
0000c2f0  3a f4 20 70 6f 69 6e 74  65 72 20 74 6f 20 73 75  |:. pointer to su|
0000c300  62 20 6d 65 6e 75 0d 43  9e 14 e7 20 28 61 64 64  |b menu.C... (add|
0000c310  6c 69 6e 6b 25 3d 31 29  20 8c 0d 43 a8 40 70 74  |link%=1) ..C.@pt|
0000c320  72 25 21 38 3d 26 33 30  30 30 33 31 33 3a f4 20  |r%!8=&3000313:. |
0000c330  67 72 65 79 65 64 20 6f  75 74 20 53 45 4c 45 43  |greyed out SELEC|
0000c340  54 41 42 4c 45 20 69 63  6f 6e 20 74 79 70 65 20  |TABLE icon type |
0000c350  28 41 64 64 20 6c 69 6e  6b 29 0d 43 b2 05 cc 0d  |(Add link).C....|
0000c360  43 bc 37 70 74 72 25 21  38 3d 26 32 34 30 30 42  |C.7ptr%!8=&2400B|
0000c370  33 33 3a f4 20 67 72 65  79 65 64 20 6f 75 74 20  |33:. greyed out |
0000c380  55 4e 53 45 4c 45 43 54  41 42 4c 45 20 69 63 6f  |UNSELECTABLE ico|
0000c390  6e 20 74 79 70 65 0d 43  c6 05 cd 0d 43 d0 2b 24  |n type.C....C.+$|
0000c3a0  28 73 68 6f 72 74 63 75  74 6d 65 6e 75 64 61 74  |(shortcutmenudat|
0000c3b0  61 25 2b 28 6c 6f 63 61  6c 69 25 2a 36 34 29 29  |a%+(locali%*64))|
0000c3c0  3d 69 74 65 6d 24 0d 43  da 14 24 28 70 74 72 25  |=item$.C..$(ptr%|
0000c3d0  2b 31 32 29 3d 69 74 65  6d 24 0d 43 e4 2c 70 74  |+12)=item$.C.,pt|
0000c3e0  72 25 21 31 32 20 3d 20  73 68 6f 72 74 63 75 74  |r%!12 = shortcut|
0000c3f0  6d 65 6e 75 64 61 74 61  25 2b 28 6c 6f 63 61 6c  |menudata%+(local|
0000c400  69 25 2a 36 34 29 0d 43  ee 2f 70 74 72 25 21 31  |i%*64).C./ptr%!1|
0000c410  36 20 3d 20 73 68 6f 72  74 63 75 74 6d 65 6e 75  |6 = shortcutmenu|
0000c420  64 61 74 61 25 2b 28 6c  6f 63 61 6c 69 25 2a 36  |data%+(locali%*6|
0000c430  34 29 2b 33 32 0d 43 f8  35 70 74 72 25 21 32 30  |4)+32.C.5ptr%!20|
0000c440  20 3d 20 32 38 3a f4 20  6d 65 6e 75 20 69 74 65  | = 28:. menu ite|
0000c450  6d 20 73 74 72 69 6e 67  20 62 75 66 66 65 72 20  |m string buffer |
0000c460  3d 20 32 38 20 62 79 74  65 73 0d 44 02 16 61 25  |= 28 bytes.D..a%|
0000c470  3d 28 a9 28 69 74 65 6d  24 29 2b 34 29 2a 31 36  |=(.(item$)+4)*16|
0000c480  0d 44 0c 19 e7 20 61 25  3e 77 69 64 74 68 25 20  |.D... a%>width% |
0000c490  77 69 64 74 68 25 3d 61  25 0d 44 16 09 69 25 2b  |width%=a%.D..i%+|
0000c4a0  3d 31 0d 44 20 05 cd 0d  44 2a 28 f4 20 44 6f 65  |=1.D ...D*(. Doe|
0000c4b0  73 20 74 68 69 73 20 6d  65 6e 75 20 66 69 74 20  |s this menu fit |
0000c4c0  6f 6e 20 74 68 65 20 73  63 72 65 65 6e 20 3f 0d  |on the screen ?.|
0000c4d0  44 34 33 f4 4d 65 6e 75  45 78 74 65 6e 74 25 20  |D43.MenuExtent% |
0000c4e0  3d 20 4d 65 6e 75 58 25  2b 28 77 69 64 74 68 25  |= MenuX%+(width%|
0000c4f0  20 2a 20 4d 65 6e 75 44  69 72 65 63 74 69 6f 6e  | * MenuDirection|
0000c500  25 29 0d 44 3e 32 f4 49  46 20 28 4d 65 6e 75 45  |%).D>2.IF (MenuE|
0000c510  78 74 65 6e 74 25 3e 4f  53 5f 4d 58 25 20 4f 52  |xtent%>OS_MX% OR|
0000c520  20 4d 65 6e 75 45 78 74  65 6e 74 25 3c 30 29 20  | MenuExtent%<0) |
0000c530  54 48 45 4e 0d 44 48 17  f4 20 74 69 74 6c 65 24  |THEN.DH.. title$|
0000c540  3d 22 5c 22 2b 74 69 74  6c 65 24 0d 44 52 19 f4  |="\"+title$.DR..|
0000c550  20 24 54 69 74 6c 65 50  74 72 25 20 3d 20 74 69  | $TitlePtr% = ti|
0000c560  74 6c 65 24 0d 44 5c 26  f4 20 4d 65 6e 75 44 69  |tle$.D\&. MenuDi|
0000c570  72 65 63 74 69 6f 6e 25  3d 4d 65 6e 75 44 69 72  |rection%=MenuDir|
0000c580  65 63 74 69 6f 6e 25 2a  2d 31 0d 44 66 16 f4 20  |ection%*-1.Df.. |
0000c590  52 45 4d 20 41 64 6a 75  73 74 20 77 69 64 74 68  |REM Adjust width|
0000c5a0  0d 44 70 2c f4 20 49 46  20 28 28 4c 45 4e 28 74  |.Dp,. IF ((LEN(t|
0000c5b0  69 74 6c 65 24 29 2d 32  29 2a 31 36 29 20 3e 20  |itle$)-2)*16) > |
0000c5c0  77 69 64 74 68 25 29 20  54 48 45 4e 0d 44 7a 20  |width%) THEN.Dz |
0000c5d0  f4 20 20 77 69 64 74 68  25 3d 28 4c 45 4e 28 74  |.  width%=(LEN(t|
0000c5e0  69 74 6c 65 24 29 2d 32  29 2a 31 36 0d 44 84 0b  |itle$)-2)*16.D..|
0000c5f0  f4 20 45 4e 44 49 46 0d  44 8e 0a f4 45 4e 44 49  |. ENDIF.D...ENDI|
0000c600  46 0d 44 98 1d 63 75 72  72 65 6e 74 6d 65 6e 75  |F.D..currentmenu|
0000c610  70 74 72 25 21 31 36 3d  77 69 64 74 68 25 0d 44  |ptr%!16=width%.D|
0000c620  a2 04 0d 44 ac 0d f4 20  45 4e 44 50 52 4f 43 0d  |...D... ENDPROC.|
0000c630  44 b6 04 0d 44 c0 1f f4  20 45 6e 64 20 6f 66 20  |D...D... End of |
0000c640  64 69 72 65 63 74 6f 72  79 20 73 63 61 6e 6e 69  |directory scanni|
0000c650  6e 67 0d 44 ca 10 fd 20  44 69 72 53 63 61 6e 25  |ng.D... DirScan%|
0000c660  3d b9 0d 44 d4 27 64 69  72 6c 69 73 74 25 28 6c  |=..D.'dirlist%(l|
0000c670  69 6e 6b 64 65 70 74 68  25 29 3d 6e 75 6d 62 65  |inkdepth%)=numbe|
0000c680  72 6f 66 69 74 65 6d 73  25 0d 44 de 04 0d 44 e8  |rofitems%.D...D.|
0000c690  35 e7 20 28 64 69 72 6c  69 73 74 25 28 6c 69 6e  |5. (dirlist%(lin|
0000c6a0  6b 64 65 70 74 68 25 29  3d 30 29 20 64 69 72 6c  |kdepth%)=0) dirl|
0000c6b0  69 73 74 25 28 6c 69 6e  6b 64 65 70 74 68 25 29  |ist%(linkdepth%)|
0000c6c0  3d 31 0d 44 f2 05 e1 0d  44 fc 04 0d 45 06 37 f4  |=1.D....D...E.7.|
0000c6d0  20 2a 2a 2a 2a 2a 2a 2a  2a 2a 2a 2a 2a 2a 2a 2a  | ***************|
0000c6e0  2a 2a 2a 2a 2a 2a 2a 2a  2a 2a 2a 2a 2a 2a 2a 2a  |****************|
*
0000c700  2a 2a 0d 45 10 20 f4 20  41 20 53 75 62 6d 65 6e  |**.E. . A Submen|
0000c710  75 20 69 73 20 61 62 6f  75 74 20 74 6f 20 6f 70  |u is about to op|
0000c720  65 6e 0d 45 1a 37 f4 20  2a 2a 2a 2a 2a 2a 2a 2a  |en.E.7. ********|
0000c730  2a 2a 2a 2a 2a 2a 2a 2a  2a 2a 2a 2a 2a 2a 2a 2a  |****************|
*
0000c750  2a 2a 2a 2a 2a 2a 2a 2a  2a 0d 45 24 15 dd f2 73  |*********.E$...s|
0000c760  75 62 6d 65 6e 75 5f 77  61 72 6e 69 6e 67 0d 45  |ubmenu_warning.E|
0000c770  2e 36 ea 20 70 74 72 25  2c 6c 6f 63 61 6c 64 69  |.6. ptr%,localdi|
0000c780  72 24 2c 64 65 70 74 68  25 2c 69 6e 64 65 78 25  |r$,depth%,index%|
0000c790  2c 73 65 6c 65 63 74 69  6f 6e 25 2c 6c 65 61 66  |,selection%,leaf|
0000c7a0  24 2c 69 25 0d 45 38 2f  6c 6f 63 61 6c 64 69 72  |$,i%.E8/localdir|
0000c7b0  24 3d 41 70 70 50 61 74  68 24 2b 22 2e 55 73 65  |$=AppPath$+".Use|
0000c7c0  72 73 2e 22 2b 55 73 65  72 24 2b 22 2e 4c 69 6e  |rs."+User$+".Lin|
0000c7d0  6b 73 22 0d 45 42 38 f4  20 4e 61 76 69 67 61 74  |ks".EB8. Navigat|
0000c7e0  65 20 6d 65 6e 75 20 69  6e 64 65 78 20 64 61 74  |e menu index dat|
0000c7f0  61 20 74 6f 20 64 65 74  65 72 6d 69 6e 65 20 77  |a to determine w|
0000c800  68 65 72 65 20 77 65 20  61 72 65 0d 45 4c 0c 64  |here we are.EL.d|
0000c810  65 70 74 68 25 3d 30 0d  45 56 0c 69 6e 64 65 78  |epth%=0.EV.index|
0000c820  25 3d 30 0d 45 60 12 70  74 72 25 3d 62 6c 6f 63  |%=0.E`.ptr%=bloc|
0000c830  6b 25 2b 33 32 0d 45 6a  26 c8 95 20 21 28 28 62  |k%+32.Ej&.. !((b|
0000c840  6c 6f 63 6b 25 2b 33 32  29 2b 28 64 65 70 74 68  |lock%+32)+(depth|
0000c850  25 2a 34 29 29 20 3c 3e  20 2d 31 0d 45 74 28 73  |%*4)) <> -1.Et(s|
0000c860  65 6c 65 63 74 69 6f 6e  25 3d 21 28 28 62 6c 6f  |election%=!((blo|
0000c870  63 6b 25 2b 33 32 29 2b  28 64 65 70 74 68 25 2a  |ck%+32)+(depth%*|
0000c880  34 29 29 0d 45 7e 3d 6c  65 61 66 24 3d a4 73 74  |4)).E~=leaf$=.st|
0000c890  72 69 6e 67 28 73 68 6f  72 74 63 75 74 6d 65 6e  |ring(shortcutmen|
0000c8a0  75 64 61 74 61 25 2b 28  28 69 6e 64 65 78 25 2b  |udata%+((index%+|
0000c8b0  73 65 6c 65 63 74 69 6f  6e 25 29 2a 36 34 29 29  |selection%)*64))|
0000c8c0  0d 45 88 26 f4 20 49 73  20 74 68 69 73 20 61 20  |.E.&. Is this a |
0000c8d0  73 79 73 74 65 6d 20 64  69 72 65 63 74 6f 72 79  |system directory|
0000c8e0  20 6e 61 6d 65 3f 0d 45  92 11 69 25 3d 73 65 6c  | name?.E..i%=sel|
0000c8f0  65 63 74 69 6f 6e 25 0d  45 9c 45 e7 20 28 64 65  |ection%.E.E. (de|
0000c900  70 74 68 25 3d 30 20 80  20 69 25 3e 3d 53 74 61  |pth%=0 . i%>=Sta|
0000c910  72 74 4d 65 6e 75 53 65  70 65 72 61 74 6f 72 25  |rtMenuSeperator%|
0000c920  20 80 20 53 74 61 72 74  4d 65 6e 75 53 65 70 65  | . StartMenuSepe|
0000c930  72 61 74 6f 72 25 3e 3d  30 29 20 8c 0d 45 a6 21  |rator%>=0) ..E.!|
0000c940  6c 65 61 66 24 3d bd 28  53 79 73 46 69 6c 65 50  |leaf$=.(SysFileP|
0000c950  72 65 66 69 78 25 29 2b  6c 65 61 66 24 0d 45 b0  |refix%)+leaf$.E.|
0000c960  05 cd 0d 45 ba 21 6c 6f  63 61 6c 64 69 72 24 3d  |...E.!localdir$=|
0000c970  6c 6f 63 61 6c 64 69 72  24 2b 22 2e 22 2b 6c 65  |localdir$+"."+le|
0000c980  61 66 24 0d 45 c4 1c 69  6e 64 65 78 25 2b 3d 64  |af$.E..index%+=d|
0000c990  69 72 6c 69 73 74 25 28  64 65 70 74 68 25 29 0d  |irlist%(depth%).|
0000c9a0  45 ce 0d 64 65 70 74 68  25 2b 3d 31 0d 45 d8 05  |E..depth%+=1.E..|
0000c9b0  ce 0d 45 e2 30 f2 53 69  6e 67 6c 65 44 69 72 65  |..E.0.SingleDire|
0000c9c0  63 74 6f 72 79 52 65 61  64 28 6c 6f 63 61 6c 64  |ctoryRead(locald|
0000c9d0  69 72 24 2c 6c 65 61 66  24 2c 64 65 70 74 68 25  |ir$,leaf$,depth%|
0000c9e0  29 0d 45 ec 39 c8 99 22  57 69 6d 70 5f 43 72 65  |).E.9.."Wimp_Cre|
0000c9f0  61 74 65 53 75 62 4d 65  6e 75 22 2c 2c 62 6c 6f  |ateSubMenu",,blo|
0000ca00  63 6b 25 21 32 30 2c 62  6c 6f 63 6b 25 21 32 34  |ck%!20,block%!24|
0000ca10  2c 62 6c 6f 63 6b 25 21  32 38 0d 45 f6 05 e1 0d  |,block%!28.E....|
0000ca20  46 00 04 0d 46 0a 3b f4  20 2a 2a 2a 2a 2a 2a 2a  |F...F.;. *******|
0000ca30  2a 2a 2a 2a 2a 2a 2a 2a  2a 2a 2a 2a 2a 2a 2a 2a  |****************|
*
0000ca50  2a 2a 2a 2a 2a 2a 2a 2a  2a 2a 2a 2a 2a 2a 0d 46  |**************.F|
0000ca60  14 1e f4 20 52 65 63 75  72 73 69 76 65 20 44 69  |... Recursive Di|
0000ca70  72 65 63 74 6f 72 79 20  62 6f 6f 74 0d 46 1e 3b  |rectory boot.F.;|
0000ca80  f4 20 2a 2a 2a 2a 2a 2a  2a 2a 2a 2a 2a 2a 2a 2a  |. **************|
0000ca90  2a 2a 2a 2a 2a 2a 2a 2a  2a 2a 2a 2a 2a 2a 2a 2a  |****************|
*
0000cab0  2a 2a 2a 2a 2a 2a 2a 0d  46 28 1e dd f2 44 69 72  |*******.F(...Dir|
0000cac0  65 63 74 6f 72 79 42 6f  6f 74 28 6c 6f 63 61 6c  |ectoryBoot(local|
0000cad0  64 69 72 24 29 0d 46 32  39 ea 20 64 69 72 24 2c  |dir$).F29. dir$,|
0000cae0  20 6e 65 78 74 25 2c 74  79 70 65 25 2c 20 69 74  | next%,type%, it|
0000caf0  65 6d 24 2c 20 6f 62 6a  65 63 74 63 6f 75 6e 74  |em$, objectcount|
0000cb00  25 2c 20 63 75 72 72 65  6e 74 64 69 72 25 0d 46  |%, currentdir%.F|
0000cb10  3c 11 ea 20 6e 75 6d 62  65 72 25 2c 4c 44 25 0d  |<.. number%,LD%.|
0000cb20  46 46 18 ea 20 6c 69 6e  6b 74 79 70 65 25 2c 6c  |FF.. linktype%,l|
0000cb30  69 6e 6b 64 69 72 24 0d  46 50 12 64 69 72 24 3d  |inkdir$.FP.dir$=|
0000cb40  6c 6f 63 61 6c 64 69 72  24 0d 46 5a 0b 6e 65 78  |localdir$.FZ.nex|
0000cb50  74 25 3d 30 0d 46 64 16  f4 53 59 53 22 48 6f 75  |t%=0.Fd..SYS"Hou|
0000cb60  72 67 6c 61 73 73 5f 4f  6e 22 0d 46 6e 10 c8 95  |rglass_On".Fn...|
0000cb70  20 6e 65 78 74 25 3c 3e  2d 31 0d 46 78 04 0d 46  | next%<>-1.Fx..F|
0000cb80  82 09 f2 70 6f 6c 6c 0d  46 8c 09 f2 70 6f 6c 6c  |...poll.F...poll|
0000cb90  0d 46 96 04 0d 46 a0 45  c8 99 20 22 4f 53 5f 47  |.F...F.E.. "OS_G|
0000cba0  42 50 42 22 2c 31 30 2c  64 69 72 24 2c 62 6f 6f  |BPB",10,dir$,boo|
0000cbb0  74 62 6c 6f 63 6b 25 2c  31 2c 6e 65 78 74 25 2c  |tblock%,1,next%,|
0000cbc0  36 33 2c 22 2a 22 20 b8  20 2c 2c 2c 6e 75 6d 62  |63,"*" . ,,,numb|
0000cbd0  65 72 25 2c 6e 65 78 74  25 0d 46 aa 2f f4 20 47  |er%,next%.F./. G|
0000cbe0  65 74 20 4f 62 6a 65 63  74 20 74 79 70 65 20 28  |et Object type (|
0000cbf0  32 20 3d 20 64 69 72 65  63 74 6f 72 79 2c 20 31  |2 = directory, 1|
0000cc00  20 3d 20 66 69 6c 65 29  0d 46 b4 1a 74 79 70 65  | = file).F..type|
0000cc10  25 20 3d 20 62 6f 6f 74  62 6c 6f 63 6b 25 3f 26  |% = bootblock%?&|
0000cc20  31 30 0d 46 be 1d f4 20  47 65 74 20 6e 61 6d 65  |10.F... Get name|
0000cc30  20 6f 66 20 74 68 69 73  20 6f 62 6a 65 63 74 0d  | of this object.|
0000cc40  46 c8 22 69 74 65 6d 24  3d a4 67 65 74 6e 61 6d  |F."item$=.getnam|
0000cc50  65 28 62 6f 6f 74 62 6c  6f 63 6b 25 2b 26 31 34  |e(bootblock%+&14|
0000cc60  29 0d 46 d2 2c f4 20 48  61 73 20 74 68 69 73 20  |).F.,. Has this |
0000cc70  64 69 72 65 63 74 6f 72  79 20 67 6f 74 20 61 6e  |directory got an|
0000cc80  79 74 68 69 6e 67 20 69  6e 20 69 74 3f 0d 46 dc  |ything in it?.F.|
0000cc90  13 e7 20 28 6e 65 78 74  25 3c 3e 2d 31 29 20 8c  |.. (next%<>-1) .|
0000cca0  0d 46 e6 27 20 f4 20 49  73 20 74 68 69 73 20 61  |.F.' . Is this a|
0000ccb0  20 64 69 72 65 63 74 6f  72 79 20 28 69 65 20 74  | directory (ie t|
0000ccc0  79 70 65 3d 32 29 20 0d  46 f0 12 20 e7 20 28 74  |ype=2) .F.. . (t|
0000ccd0  79 70 65 25 3d 32 29 20  8c 0d 46 fa 25 20 20 20  |ype%=2) ..F.%   |
0000cce0  f2 44 69 72 65 63 74 6f  72 79 42 6f 6f 74 28 64  |.DirectoryBoot(d|
0000ccf0  69 72 24 2b 22 2e 22 2b  69 74 65 6d 24 29 0d 47  |ir$+"."+item$).G|
0000cd00  04 06 20 cc 0d 47 0e 30  20 20 20 f4 20 4d 75 73  |.. ..G.0   . Mus|
0000cd10  74 20 62 65 20 61 20 6c  69 6e 6b 20 74 6f 20 61  |t be a link to a|
0000cd20  20 66 69 6c 65 20 6f 72  20 61 70 70 6c 69 63 61  | file or applica|
0000cd30  74 69 6f 6e 0d 47 18 34  20 20 20 f4 20 57 68 61  |tion.G.4   . Wha|
0000cd40  74 20 74 79 70 65 20 6f  66 20 74 68 69 6e 67 20  |t type of thing |
0000cd50  64 6f 65 73 20 74 68 69  73 20 6c 69 6e 6b 20 70  |does this link p|
0000cd60  6f 69 6e 74 20 74 6f 3f  0d 47 22 29 20 20 20 f4  |oint to?.G")   .|
0000cd70  20 50 52 4f 43 65 72 72  6f 72 28 22 4f 70 65 6e  | PROCerror("Open|
0000cd80  69 6e 67 20 22 2b 64 69  72 24 2b 43 48 52 24 30  |ing "+dir$+CHR$0|
0000cd90  29 0d 47 2c 1f 20 20 20  4c 44 25 3d 8e 28 64 69  |).G,.   LD%=.(di|
0000cda0  72 24 2b 22 2e 22 2b 69  74 65 6d 24 2b bd 30 29  |r$+"."+item$+.0)|
0000cdb0  0d 47 36 12 20 20 20 6c  69 6e 6b 64 69 72 24 3d  |.G6.   linkdir$=|
0000cdc0  22 22 0d 47 40 08 20 20  20 f5 0d 47 4a 13 20 20  |"".G@.   ..GJ.  |
0000cdd0  20 4c 44 24 3d bd 28 9a  23 4c 44 25 29 0d 47 54  | LD$=.(.#LD%).GT|
0000cde0  22 20 20 20 e7 20 28 97  28 4c 44 24 29 3e 33 31  |"   . (.(LD$)>31|
0000cdf0  29 20 6c 69 6e 6b 64 69  72 24 2b 3d 4c 44 24 0d  |) linkdir$+=LD$.|
0000ce00  47 5e 1a 20 20 20 fd 20  97 28 4c 44 24 29 3c 33  |G^.   . .(LD$)<3|
0000ce10  32 20 84 20 c5 23 4c 44  25 0d 47 68 0d 20 20 20  |2 . .#LD%.Gh.   |
0000ce20  d9 23 4c 44 25 20 0d 47  72 22 20 20 20 f4 20 57  |.#LD% .Gr"   . W|
0000ce30  68 61 74 20 74 79 70 65  20 69 73 20 74 68 65 20  |hat type is the |
0000ce40  6c 69 6e 6b 64 69 72 3f  0d 47 7c 1f 20 20 20 24  |linkdir?.G|.   $|
0000ce50  62 6f 6f 74 73 74 72 69  6e 67 25 3d 6c 69 6e 6b  |bootstring%=link|
0000ce60  64 69 72 24 2b bd 30 0d  47 86 2a 20 20 20 e7 20  |dir$+.0.G.*   . |
0000ce70  28 a4 43 68 65 63 6b 56  61 6c 69 64 44 72 69 76  |(.CheckValidDriv|
0000ce80  65 28 6c 69 6e 6b 64 69  72 24 29 20 3d 31 29 20  |e(linkdir$) =1) |
0000ce90  8c 0d 47 90 2f 20 20 20  20 c8 99 20 22 58 4f 53  |..G./    .. "XOS|
0000cea0  5f 46 69 6c 65 22 2c 35  2c 62 6f 6f 74 73 74 72  |_File",5,bootstr|
0000ceb0  69 6e 67 25 20 b8 20 6c  69 6e 6b 74 79 70 65 25  |ing% . linktype%|
0000cec0  0d 47 9a 2a 20 20 20 20  e7 20 28 c0 69 74 65 6d  |.G.*    . (.item|
0000ced0  24 2c 31 29 3d 22 21 22  20 84 20 6c 69 6e 6b 74  |$,1)="!" . linkt|
0000cee0  79 70 65 25 3c 3e 32 29  20 8c 0d 47 a4 3f 20 20  |ype%<>2) ..G.?  |
0000cef0  20 20 20 f4 20 4d 75 73  74 20 62 65 20 65 69 74  |   . Must be eit|
0000cf00  68 65 72 20 61 20 66 69  6c 65 20 6f 72 20 61 70  |her a file or ap|
0000cf10  70 20 6f 72 20 64 69 72  20 73 6f 20 6c 65 74 27  |p or dir so let'|
0000cf20  73 20 62 6f 6f 74 20 69  74 0d 47 ae 40 20 20 20  |s boot it.G.@   |
0000cf30  20 20 f4 20 49 66 20 64  69 72 65 63 74 6f 72 79  |  . If directory|
0000cf40  2c 20 6f 6e 6c 79 20 62  6f 6f 74 20 69 66 20 62  |, only boot if b|
0000cf50  65 67 69 6e 20 77 69 74  68 20 61 20 21 20 28 53  |egin with a ! (S|
0000cf60  61 76 65 20 74 69 6d 65  29 0d 47 b8 2f 20 20 20  |ave time).G./   |
0000cf70  20 20 24 63 6c 69 73 74  72 69 6e 67 20 3d 20 22  |  $clistring = "|
0000cf80  46 69 6c 65 72 5f 42 6f  6f 74 20 22 2b 6c 69 6e  |Filer_Boot "+lin|
0000cf90  6b 64 69 72 24 2b bd 30  0d 47 c2 20 20 20 20 20  |kdir$+.0.G.     |
0000cfa0  20 c8 99 20 22 58 4f 53  5f 43 4c 49 22 2c 20 63  | .. "XOS_CLI", c|
0000cfb0  6c 69 73 74 72 69 6e 67  0d 47 cc 09 20 20 20 20  |listring.G..    |
0000cfc0  cd 0d 47 d6 08 20 20 20  cd 0d 47 e0 06 20 cd 0d  |..G..   ..G.. ..|
0000cfd0  47 ea 05 cd 0d 47 f4 05  ce 0d 47 fe 17 f4 53 59  |G....G....G...SY|
0000cfe0  53 22 48 6f 75 72 67 6c  61 73 73 5f 4f 66 66 22  |S"Hourglass_Off"|
0000cff0  0d 48 08 05 e1 0d 48 12  04 0d 48 1c 1f dd a4 43  |.H....H...H....C|
0000d000  68 65 63 6b 56 61 6c 69  64 44 72 69 76 65 28 69  |heckValidDrive(i|
0000d010  73 76 70 61 74 68 24 29  0d 48 26 21 ea 20 66 73  |svpath$).H&!. fs|
0000d020  5f 64 72 69 76 65 24 2c  20 70 70 74 72 25 2c 20  |_drive$, pptr%, |
0000d030  63 68 61 72 24 2c 20 61  25 0d 48 30 38 f4 20 43  |char$, a%.H08. C|
0000d040  68 65 63 6b 20 74 68 61  74 20 69 73 76 70 61 74  |heck that isvpat|
0000d050  68 24 20 72 65 73 69 64  65 73 20 6f 6e 20 61 20  |h$ resides on a |
0000d060  76 61 6c 69 64 20 66 69  6c 65 20 73 79 73 74 65  |valid file syste|
0000d070  6d 0d 48 3a 18 f4 20 61  6e 64 20 61 20 76 61 6c  |m.H:.. and a val|
0000d080  69 64 20 64 72 69 76 65  2e 0d 48 44 28 f4 20 49  |id drive..HD(. I|
0000d090  66 20 6e 6f 74 20 74 68  65 6e 20 72 65 74 75 72  |f not then retur|
0000d0a0  6e 20 30 20 65 6c 73 65  20 72 65 74 75 72 6e 20  |n 0 else return |
0000d0b0  31 0d 48 4e 0b 70 70 74  72 25 3d 31 0d 48 58 10  |1.HN.pptr%=1.HX.|
0000d0c0  66 73 5f 64 72 69 76 65  24 3d 22 22 0d 48 62 05  |fs_drive$="".Hb.|
0000d0d0  f5 0d 48 6c 1c 63 68 61  72 24 3d c1 69 73 76 70  |..Hl.char$=.isvp|
0000d0e0  61 74 68 24 2c 70 70 74  72 25 2c 31 29 0d 48 76  |ath$,pptr%,1).Hv|
0000d0f0  2c e7 20 28 63 68 61 72  24 3c 3e 22 2e 22 29 20  |,. (char$<>".") |
0000d100  66 73 5f 64 72 69 76 65  24 3d 66 73 5f 64 72 69  |fs_drive$=fs_dri|
0000d110  76 65 24 2b 63 68 61 72  24 0d 48 80 11 70 70 74  |ve$+char$.H..ppt|
0000d120  72 25 3d 70 70 74 72 25  2b 31 0d 48 8a 25 fd 20  |r%=pptr%+1.H.%. |
0000d130  28 70 70 74 72 25 3e a9  28 69 73 76 70 61 74 68  |(pptr%>.(isvpath|
0000d140  24 29 20 84 20 63 68 61  72 24 3d 22 2e 22 29 0d  |$) . char$=".").|
0000d150  48 94 38 f4 20 43 68 65  63 6b 20 66 73 5f 64 72  |H.8. Check fs_dr|
0000d160  69 76 65 24 20 77 69 74  68 20 61 6c 6c 20 63 75  |ive$ with all cu|
0000d170  72 72 65 6e 74 6c 79 20  69 6e 76 61 6c 69 64 20  |rrently invalid |
0000d180  64 65 76 69 63 65 73 0d  48 9e 08 61 25 3d 30 0d  |devices.H..a%=0.|
0000d190  48 a8 1d c8 95 28 61 25  3c 49 6e 76 61 6c 69 64  |H....(a%<Invalid|
0000d1a0  44 72 69 76 65 43 6f 75  6e 74 25 29 0d 48 b2 3b  |DriveCount%).H.;|
0000d1b0  e7 20 28 66 73 5f 64 72  69 76 65 24 3d 49 6e 76  |. (fs_drive$=Inv|
0000d1c0  61 6c 69 64 44 72 69 76  65 24 28 61 25 29 29 20  |alidDrive$(a%)) |
0000d1d0  61 25 3d 49 6e 76 61 6c  69 64 44 72 69 76 65 43  |a%=InvalidDriveC|
0000d1e0  6f 75 6e 74 25 2b 31 0d  48 bc 09 61 25 2b 3d 31  |ount%+1.H..a%+=1|
0000d1f0  0d 48 c6 05 ce 0d 48 d0  2b f4 20 72 65 74 75 72  |.H....H.+. retur|
0000d200  6e 20 69 66 20 69 74 20  6d 61 74 63 68 65 73 20  |n if it matches |
0000d210  61 6e 20 69 6e 76 61 6c  69 64 20 64 72 69 76 65  |an invalid drive|
0000d220  0d 48 da 22 e7 20 28 61  25 3e 49 6e 76 61 6c 69  |.H.". (a%>Invali|
0000d230  64 44 72 69 76 65 43 6f  75 6e 74 25 29 20 8c 20  |dDriveCount%) . |
0000d240  3d 30 0d 48 e4 1b f4 20  49 73 20 74 68 69 73 20  |=0.H... Is this |
0000d250  64 65 76 69 63 65 20 76  61 6c 69 64 3f 0d 48 ee  |device valid?.H.|
0000d260  1b 24 63 6c 69 73 74 72  69 6e 67 3d 66 73 5f 64  |.$clistring=fs_d|
0000d270  72 69 76 65 24 2b bd 30  0d 48 f8 26 c8 99 22 58  |rive$+.0.H.&.."X|
0000d280  4f 53 5f 46 69 6c 65 22  2c 35 2c 63 6c 69 73 74  |OS_File",5,clist|
0000d290  72 69 6e 67 20 b8 20 72  65 73 75 6c 74 25 0d 49  |ring . result%.I|
0000d2a0  02 17 e7 20 28 72 65 73  75 6c 74 25 3c 3d 38 31  |... (result%<=81|
0000d2b0  39 32 29 20 8c 0d 49 0c  1c 20 f4 20 54 68 69 73  |92) ..I.. . This|
0000d2c0  20 69 73 20 61 20 76 61  6c 69 64 20 64 72 69 76  | is a valid driv|
0000d2d0  65 0d 49 16 07 20 3d 31  0d 49 20 05 cd 0d 49 2a  |e.I.. =1.I ...I*|
0000d2e0  23 f4 20 55 70 64 61 74  65 20 6c 69 73 74 20 6f  |#. Update list o|
0000d2f0  66 20 69 6e 76 61 6c 69  64 20 64 72 69 76 65 73  |f invalid drives|
0000d300  0d 49 34 31 49 6e 76 61  6c 69 64 44 72 69 76 65  |.I41InvalidDrive|
0000d310  24 28 49 6e 76 61 6c 69  64 44 72 69 76 65 43 6f  |$(InvalidDriveCo|
0000d320  75 6e 74 25 29 20 3d 20  66 73 5f 64 72 69 76 65  |unt%) = fs_drive|
0000d330  24 0d 49 3e 19 49 6e 76  61 6c 69 64 44 72 69 76  |$.I>.InvalidDriv|
0000d340  65 43 6f 75 6e 74 25 2b  3d 31 0d 49 48 06 3d 30  |eCount%+=1.IH.=0|
0000d350  0d 49 52 04 0d 49 5c 25  dd a4 47 65 74 4c 69 6e  |.IR..I\%..GetLin|
0000d360  6b 43 6f 6e 74 65 6e 74  73 28 67 6c 69 6e 6b 66  |kContents(glinkf|
0000d370  69 6c 65 6e 61 6d 65 24  29 0d 49 66 12 ea 20 6c  |ilename$).If.. l|
0000d380  69 6e 6b 64 69 72 24 2c  4c 44 25 0d 49 70 1f 20  |inkdir$,LD%.Ip. |
0000d390  20 20 4c 44 25 3d 8e 28  67 6c 69 6e 6b 66 69 6c  |  LD%=.(glinkfil|
0000d3a0  65 6e 61 6d 65 24 2b bd  30 29 0d 49 7a 12 20 20  |ename$+.0).Iz.  |
0000d3b0  20 6c 69 6e 6b 64 69 72  24 3d 22 22 0d 49 84 08  | linkdir$="".I..|
0000d3c0  20 20 20 f5 0d 49 8e 13  20 20 20 4c 44 24 3d bd  |   ..I..   LD$=.|
0000d3d0  28 9a 23 4c 44 25 29 0d  49 98 22 20 20 20 e7 20  |(.#LD%).I."   . |
0000d3e0  28 97 28 4c 44 24 29 3e  33 31 29 20 6c 69 6e 6b  |(.(LD$)>31) link|
0000d3f0  64 69 72 24 2b 3d 4c 44  24 0d 49 a2 1a 20 20 20  |dir$+=LD$.I..   |
0000d400  fd 20 97 28 4c 44 24 29  3c 33 32 20 84 20 c5 23  |. .(LD$)<32 . .#|
0000d410  4c 44 25 0d 49 ac 0c 20  20 20 d9 23 4c 44 25 0d  |LD%.I..   .#LD%.|
0000d420  49 b6 10 20 20 20 3d 6c  69 6e 6b 64 69 72 24 0d  |I..   =linkdir$.|
0000d430  49 c0 04 0d 49 ca 04 0d  49 d4 2a f4 20 45 78 74  |I...I...I.*. Ext|
0000d440  72 61 63 74 20 74 68 65  20 77 73 74 72 69 6e 67  |ract the wstring|
0000d450  20 73 74 6f 72 65 64 20  61 74 20 61 64 64 72 25  | stored at addr%|
0000d460  2e 0d 49 de 15 dd 20 a4  67 65 74 6e 61 6d 65 28  |..I... .getname(|
0000d470  61 64 64 72 25 29 0d 49  e8 08 ea 20 62 24 0d 49  |addr%).I... b$.I|
0000d480  f2 10 c8 95 20 3f 61 64  64 72 25 3e 33 31 0d 49  |.... ?addr%>31.I|
0000d490  fc 11 62 24 2b 3d bd 28  3f 61 64 64 72 25 29 0d  |..b$+=.(?addr%).|
0000d4a0  4a 06 0c 61 64 64 72 25  2b 3d 31 0d 4a 10 05 ce  |J..addr%+=1.J...|
0000d4b0  0d 4a 1a 07 3d 62 24 0d  4a 24 04 0d 4a 2e 2c f4  |.J..=b$.J$..J.,.|
0000d4c0  20 2a 2a 2a 2a 2a 2a 2a  2a 2a 2a 2a 2a 2a 2a 2a  | ***************|
0000d4d0  2a 2a 2a 2a 2a 2a 2a 2a  2a 2a 2a 2a 2a 2a 2a 2a  |****************|
0000d4e0  2a 2a 2a 2a 2a 2a 2a 0d  4a 38 21 f4 20 43 6c 69  |*******.J8!. Cli|
0000d4f0  63 6b 20 6f 6e 20 73 68  6f 72 74 63 75 74 20 6d  |ck on shortcut m|
0000d500  65 6e 75 20 6c 69 73 74  0d 4a 42 2c f4 20 2a 2a  |enu list.JB,. **|
0000d510  2a 2a 2a 2a 2a 2a 2a 2a  2a 2a 2a 2a 2a 2a 2a 2a  |****************|
*
0000d530  2a 2a 2a 2a 0d 4a 4c 18  dd f2 73 68 6f 72 74 63  |****.JL...shortc|
0000d540  75 74 6d 65 6e 75 73 65  6c 65 63 74 0d 4a 56 42  |utmenuselect.JVB|
0000d550  ea 20 63 75 72 72 65 6e  74 6d 65 6e 75 70 74 72  |. currentmenuptr|
0000d560  25 2c 64 69 72 24 2c 6c  69 6e 6b 64 69 72 24 2c  |%,dir$,linkdir$,|
0000d570  64 72 6f 70 64 69 72 24  2c 63 75 72 72 65 6e 74  |dropdir$,current|
0000d580  64 72 6f 70 64 69 72 24  2c 6c 65 61 66 24 0d 4a  |dropdir$,leaf$.J|
0000d590  60 11 ea 20 52 65 4f 70  65 6e 46 6c 61 67 25 0d  |`.. ReOpenFlag%.|
0000d5a0  4a 6a 14 ea 20 49 63 6f  6e 46 6c 61 67 73 41 64  |Jj.. IconFlagsAd|
0000d5b0  64 72 25 0d 4a 74 04 0d  4a 7e 11 52 65 4f 70 65  |dr%.Jt..J~.ReOpe|
0000d5c0  6e 46 6c 61 67 25 3d a3  0d 4a 88 2a 64 69 72 24  |nFlag%=..J.*dir$|
0000d5d0  3d 41 70 70 50 61 74 68  24 2b 22 2e 55 73 65 72  |=AppPath$+".User|
0000d5e0  73 2e 22 2b 55 73 65 72  24 2b 22 2e 4c 69 6e 6b  |s."+User$+".Link|
0000d5f0  73 22 0d 4a 92 11 64 72  6f 70 64 69 72 24 3d 64  |s".J..dropdir$=d|
0000d600  69 72 24 0d 4a 9c 18 63  75 72 72 65 6e 74 64 72  |ir$.J..currentdr|
0000d610  6f 70 64 69 72 24 3d 64  69 72 24 0d 4a a6 21 63  |opdir$=dir$.J.!c|
0000d620  75 72 72 65 6e 74 6d 65  6e 75 70 74 72 25 3d 73  |urrentmenuptr%=s|
0000d630  68 6f 72 74 63 75 74 6d  65 6e 75 25 0d 4a b0 20  |hortcutmenu%.J. |
0000d640  67 6c 6f 62 61 6c 6d 65  6e 75 70 74 72 25 3d 73  |globalmenuptr%=s|
0000d650  68 6f 72 74 63 75 74 6d  65 6e 75 25 0d 4a ba 2c  |hortcutmenu%.J.,|
0000d660  f4 20 62 6c 6f 63 6b 25  2b 30 30 20 69 73 20 73  |. block%+00 is s|
0000d670  65 6c 65 63 74 69 6f 6e  20 6e 75 6d 62 65 72 20  |election number |
0000d680  6f 66 20 6d 65 6e 75 2c  0d 4a c4 10 6e 65 73 74  |of menu,.J..nest|
0000d690  6c 65 76 65 6c 25 3d 30  0d 4a ce 1b 73 65 6c 31  |level%=0.J..sel1|
0000d6a0  25 3d 62 6c 6f 63 6b 25  21 6e 65 73 74 6c 65 76  |%=block%!nestlev|
0000d6b0  65 6c 25 0d 4a d8 04 0d  4a e2 3b f4 20 52 65 63  |el%.J...J.;. Rec|
0000d6c0  75 72 73 65 20 6d 65 6e  75 20 64 69 72 65 63 74  |urse menu direct|
0000d6d0  6f 72 79 20 70 6f 69 6e  74 65 72 73 20 75 6e 74  |ory pointers unt|
0000d6e0  69 6c 20 6c 65 61 66 20  6e 6f 64 65 20 66 6f 75  |il leaf node fou|
0000d6f0  6e 64 0d 4a ec 05 f5 0d  4a f6 24 73 65 6c 65 63  |nd.J....J.$selec|
0000d700  74 69 6f 6e 25 3d 62 6c  6f 63 6b 25 21 28 6e 65  |tion%=block%!(ne|
0000d710  73 74 6c 65 76 65 6c 25  2a 34 29 0d 4b 00 2c 6e  |stlevel%*4).K.,n|
0000d720  65 78 74 73 65 6c 65 63  74 69 6f 6e 25 3d 62 6c  |extselection%=bl|
0000d730  6f 63 6b 25 21 28 28 6e  65 73 74 6c 65 76 65 6c  |ock%!((nestlevel|
0000d740  25 2b 31 29 2a 34 29 0d  4b 0a 3a f4 50 52 4f 43  |%+1)*4).K.:.PROC|
0000d750  65 72 72 6f 72 28 22 4d  65 6e 75 20 53 65 6c 65  |error("Menu Sele|
0000d760  63 74 69 6f 6e 20 3d 20  22 2b 53 54 52 24 28 73  |ction = "+STR$(s|
0000d770  65 6c 65 63 74 69 6f 6e  25 29 2b 43 48 52 24 30  |election%)+CHR$0|
0000d780  29 0d 4b 14 39 f4 20 47  65 74 20 70 6f 69 6e 74  |).K.9. Get point|
0000d790  65 72 20 74 6f 20 69 63  6f 6e 20 64 65 66 69 6e  |er to icon defin|
0000d7a0  69 74 69 6f 6e 20 66 72  6f 6d 20 6d 65 6e 75 20  |ition from menu |
0000d7b0  64 65 66 69 6e 69 74 69  6f 6e 0d 4b 1e 37 73 75  |definition.K.7su|
0000d7c0  62 6d 65 6e 75 70 74 72  25 3d 21 28 63 75 72 72  |bmenuptr%=!(curr|
0000d7d0  65 6e 74 6d 65 6e 75 70  74 72 25 2b 32 38 2b 28  |entmenuptr%+28+(|
0000d7e0  73 65 6c 65 63 74 69 6f  6e 25 2a 32 34 29 2b 34  |selection%*24)+4|
0000d7f0  29 0d 4b 28 35 64 61 74  61 70 74 72 25 3d 21 28  |).K(5dataptr%=!(|
0000d800  63 75 72 72 65 6e 74 6d  65 6e 75 70 74 72 25 2b  |currentmenuptr%+|
0000d810  32 38 2b 28 73 65 6c 65  63 74 69 6f 6e 25 2a 32  |28+(selection%*2|
0000d820  34 29 2b 31 32 29 0d 4b  32 1b 6c 65 61 66 24 3d  |4)+12).K2.leaf$=|
0000d830  a4 73 74 72 69 6e 67 28  64 61 74 61 70 74 72 25  |.string(dataptr%|
0000d840  29 0d 4b 3c 21 f4 20 49  73 20 74 68 69 73 20 61  |).K<!. Is this a|
0000d850  20 73 79 73 74 65 6d 20  66 69 6c 65 20 6e 61 6d  | system file nam|
0000d860  65 3f 0d 4b 46 04 0d 4b  50 6d e7 20 28 73 65 6c  |e?.KF..KPm. (sel|
0000d870  65 63 74 69 6f 6e 25 3e  3d 53 74 61 72 74 4d 65  |ection%>=StartMe|
0000d880  6e 75 53 65 70 65 72 61  74 6f 72 25 20 80 20 53  |nuSeperator% . S|
0000d890  74 61 72 74 4d 65 6e 75  53 65 70 65 72 61 74 6f  |tartMenuSeperato|
0000d8a0  72 25 3e 3d 30 20 80 20  6e 65 73 74 6c 65 76 65  |r%>=0 . nestleve|
0000d8b0  6c 25 3d 30 29 20 6c 65  61 66 24 3d bd 28 53 79  |l%=0) leaf$=.(Sy|
0000d8c0  73 46 69 6c 65 50 72 65  66 69 78 25 29 2b 6c 65  |sFilePrefix%)+le|
0000d8d0  61 66 24 0d 4b 5a 04 0d  4b 64 1c 63 75 72 72 65  |af$.KZ..Kd.curre|
0000d8e0  6e 74 64 72 6f 70 64 69  72 24 3d 64 72 6f 70 64  |ntdropdir$=dropd|
0000d8f0  69 72 24 0d 4b 6e 18 e7  20 28 73 65 6c 65 63 74  |ir$.Kn.. (select|
0000d900  69 6f 6e 25 3c 3e 2d 31  29 20 8c 0d 4b 78 18 20  |ion%<>-1) ..Kx. |
0000d910  64 69 72 24 3d 64 69 72  24 2b 22 2e 22 2b 6c 65  |dir$=dir$+"."+le|
0000d920  61 66 24 0d 4b 82 31 20  f4 20 49 73 20 74 68 69  |af$.K.1 . Is thi|
0000d930  73 20 6d 65 6e 75 20 65  6e 74 72 79 20 61 20 70  |s menu entry a p|
0000d940  6f 69 6e 74 65 72 20 74  6f 20 61 20 73 75 62 6d  |ointer to a subm|
0000d950  65 6e 75 3f 0d 4b 8c 1a  20 e7 20 28 73 75 62 6d  |enu?.K.. . (subm|
0000d960  65 6e 75 70 74 72 25 3c  3e 2d 31 29 20 8c 0d 4b  |enuptr%<>-1) ..K|
0000d970  96 20 20 64 72 6f 70 64  69 72 24 3d 64 72 6f 70  |.  dropdir$=drop|
0000d980  64 69 72 24 2b 22 2e 22  2b 6c 65 61 66 24 0d 4b  |dir$+"."+leaf$.K|
0000d990  a0 20 20 63 75 72 72 65  6e 74 6d 65 6e 75 70 74  |.  currentmenupt|
0000d9a0  72 25 3d 73 75 62 6d 65  6e 75 70 74 72 25 0d 4b  |r%=submenuptr%.K|
0000d9b0  aa 12 20 6e 65 73 74 6c  65 76 65 6c 25 2b 3d 31  |.. nestlevel%+=1|
0000d9c0  0d 4b b4 06 20 cd 0d 4b  be 05 cd 0d 4b c8 17 fd  |.K.. ..K....K...|
0000d9d0  20 6e 65 78 74 73 65 6c  65 63 74 69 6f 6e 25 3d  | nextselection%=|
0000d9e0  2d 31 0d 4b d2 04 0d 4b  dc 14 e7 20 28 61 64 64  |-1.K...K... (add|
0000d9f0  6c 69 6e 6b 25 3d 31 29  20 8c 0d 4b e6 49 f4 20  |link%=1) ..K.I. |
0000da00  50 52 4f 43 65 72 72 6f  72 28 22 41 64 64 69 6e  |PROCerror("Addin|
0000da10  67 20 73 68 6f 72 74 63  75 74 5b 22 2b 6e 65 77  |g shortcut["+new|
0000da20  6c 69 6e 6b 6c 65 61 66  24 2b 22 5d 20 69 6e 74  |linkleaf$+"] int|
0000da30  6f 20 22 2b 64 72 6f 70  64 69 72 24 2b 43 48 52  |o "+dropdir$+CHR|
0000da40  24 30 29 0d 4b f0 3e f2  61 64 64 6e 65 77 73 68  |$0).K.>.addnewsh|
0000da50  6f 72 74 63 75 74 28 63  75 72 72 65 6e 74 64 72  |ortcut(currentdr|
0000da60  6f 70 64 69 72 24 2c 6e  65 77 6c 69 6e 6b 66 69  |opdir$,newlinkfi|
0000da70  6c 65 24 2c 6e 65 77 6c  69 6e 6b 6c 65 61 66 24  |le$,newlinkleaf$|
0000da80  29 0d 4b fa 05 cc 0d 4c  04 1e 20 f4 20 49 73 20  |).K....L.. . Is |
0000da90  74 68 69 73 20 61 20 76  61 6c 69 64 20 6f 62 6a  |this a valid obj|
0000daa0  65 63 74 3f 0d 4c 0e 19  20 e7 20 28 73 75 62 6d  |ect?.L.. . (subm|
0000dab0  65 6e 75 70 74 72 25 3d  2d 31 29 20 8c 0d 4c 18  |enuptr%=-1) ..L.|
0000dac0  1f 20 20 f4 20 49 73 20  74 68 65 20 41 4c 54 20  |.  . Is the ALT |
0000dad0  6b 65 79 20 70 72 65 73  73 65 64 3f 0d 4c 22 1e  |key pressed?.L".|
0000dae0  20 20 f4 20 49 66 20 73  6f 20 64 65 6c 65 74 65  |  . If so delete|
0000daf0  20 74 68 69 73 20 6c 69  6e 6b 0d 4c 2c 0f 20 20  | this link.L,.  |
0000db00  e7 20 28 a6 2d 33 29 20  8c 0d 4c 36 1b 20 20 20  |. (.-3) ..L6.   |
0000db10  ff 28 22 64 65 6c 65 74  65 20 22 2b 64 69 72 24  |.("delete "+dir$|
0000db20  2b bd 30 29 0d 4c 40 1d  20 20 20 f4 20 41 6c 74  |+.0).L@.   . Alt|
0000db30  65 72 20 6d 65 6e 75 20  73 74 72 75 63 74 75 72  |er menu structur|
0000db40  65 0d 4c 4a 3a 20 20 20  49 63 6f 6e 46 6c 61 67  |e.LJ:   IconFlag|
0000db50  73 41 64 64 72 25 3d 63  75 72 72 65 6e 74 6d 65  |sAddr%=currentme|
0000db60  6e 75 70 74 72 25 2b 32  38 2b 38 2b 28 73 65 6c  |nuptr%+28+8+(sel|
0000db70  65 63 74 69 6f 6e 25 2a  32 34 29 0d 4c 54 43 20  |ection%*24).LTC |
0000db80  20 20 21 49 63 6f 6e 46  6c 61 67 73 41 64 64 72  |  !IconFlagsAddr|
0000db90  25 20 3d 20 28 21 49 63  6f 6e 46 6c 61 67 73 41  |% = (!IconFlagsA|
0000dba0  64 64 72 25 29 2b 28 32  5e 32 32 29 3a f4 20 47  |ddr%)+(2^22):. G|
0000dbb0  72 65 79 20 6f 75 74 20  73 70 72 69 74 65 0d 4c  |rey out sprite.L|
0000dbc0  5e 3d 20 20 20 21 49 63  6f 6e 46 6c 61 67 73 41  |^=   !IconFlagsA|
0000dbd0  64 64 72 25 20 3d 20 21  49 63 6f 6e 46 6c 61 67  |ddr% = !IconFlag|
0000dbe0  73 41 64 64 72 25 20 80  20 26 66 66 66 66 66 66  |sAddr% . &ffffff|
0000dbf0  3a f4 20 47 72 65 79 20  6f 75 74 0d 4c 68 38 20  |:. Grey out.Lh8 |
0000dc00  20 20 21 49 63 6f 6e 46  6c 61 67 73 41 64 64 72  |  !IconFlagsAddr|
0000dc10  25 20 3d 20 21 49 63 6f  6e 46 6c 61 67 73 41 64  |% = !IconFlagsAd|
0000dc20  64 72 25 2b 26 31 30 30  30 30 30 30 3a f4 20 74  |dr%+&1000000:. t|
0000dc30  65 78 74 0d 4c 72 07 20  20 cc 0d 4c 7c 2f 20 20  |ext.Lr.  ..L|/  |
0000dc40  20 f4 20 47 65 74 20 74  68 65 20 64 65 73 6b 74  | . Get the deskt|
0000dc50  6f 70 20 66 69 6c 65 72  20 74 6f 20 72 75 6e 20  |op filer to run |
0000dc60  74 68 69 73 20 6c 69 6e  6b 0d 4c 86 2f 20 20 20  |this link.L./   |
0000dc70  64 69 72 24 3d 22 46 69  6c 65 72 5f 52 75 6e 20  |dir$="Filer_Run |
0000dc80  22 2b a4 47 65 74 4c 69  6e 6b 43 6f 6e 74 65 6e  |"+.GetLinkConten|
0000dc90  74 73 28 64 69 72 24 29  0d 4c 90 27 20 20 20 f4  |ts(dir$).L.'   .|
0000dca0  20 50 52 4f 43 65 72 72  6f 72 28 22 4f 53 43 4c  | PROCerror("OSCL|
0000dcb0  49 20 22 2b 64 69 72 24  2b 43 48 52 24 30 29 0d  |I "+dir$+CHR$0).|
0000dcc0  4c 9a 11 20 20 20 ff 28  64 69 72 24 2b bd 30 29  |L..   .(dir$+.0)|
0000dcd0  0d 4c a4 07 20 20 cd 0d  4c ae 06 20 cd 0d 4c b8  |.L..  ..L.. ..L.|
0000dce0  3c 20 f4 20 43 68 65 63  6b 20 69 66 20 41 44 4a  |< . Check if ADJ|
0000dcf0  55 53 54 20 70 72 65 73  73 65 64 20 69 6e 20 77  |UST pressed in w|
0000dd00  68 69 63 68 20 63 61 73  65 2c 20 72 65 70 72 69  |hich case, repri|
0000dd10  6e 74 20 6d 65 6e 75 73  2e 0d 4c c2 25 20 c8 99  |nt menus..L.% ..|
0000dd20  22 57 69 6d 70 5f 47 65  74 50 6f 69 6e 74 65 72  |"Wimp_GetPointer|
0000dd30  49 6e 66 6f 22 2c 2c 62  6c 6f 63 6b 32 25 0d 4c  |Info",,block2%.L|
0000dd40  cc 16 20 62 75 74 74 6f  6e 25 3d 62 6c 6f 63 6b  |.. button%=block|
0000dd50  32 25 21 38 0d 4c d6 1d  e7 20 62 75 74 74 6f 6e  |2%!8.L... button|
0000dd60  25 3d 31 20 52 65 4f 70  65 6e 46 6c 61 67 25 3d  |%=1 ReOpenFlag%=|
0000dd70  b9 0d 4c e0 04 0d 4c ea  15 e7 20 28 52 65 4f 70  |..L...L... (ReOp|
0000dd80  65 6e 46 6c 61 67 25 29  20 8c 0d 4c f4 21 20 f2  |enFlag%) ..L.! .|
0000dd90  73 68 6f 77 6d 65 6e 75  28 73 68 6f 72 74 63 75  |showmenu(shortcu|
0000dda0  74 6d 65 6e 75 25 2c 30  2c 30 29 0d 4c fe 06 20  |tmenu%,0,0).L.. |
0000ddb0  cc 0d 4d 08 33 20 49 63  6f 6e 42 61 72 4d 65 6e  |..M.3 IconBarMen|
0000ddc0  75 4f 70 65 6e 25 3d 30  3a f4 20 52 65 65 6e 61  |uOpen%=0:. Reena|
0000ddd0  62 6c 65 20 69 63 6f 6e  20 62 61 72 20 74 6f 6f  |ble icon bar too|
0000dde0  6c 74 69 70 0d 4d 12 05  cd 0d 4d 1c 05 cd 0d 4d  |ltip.M....M....M|
0000ddf0  26 05 e1 0d 4d 30 04 0d  4d 3a 19 dd f2 63 6c 69  |&...M0..M:...cli|
0000de00  63 6b 5f 69 6e 66 6f 28  62 75 74 74 6f 6e 25 29  |ck_info(button%)|
0000de10  0d 4d 44 10 c8 8e 20 62  75 74 74 6f 6e 25 20 ca  |.MD... button% .|
0000de20  0d 4d 4e 37 c9 20 32 3a  f2 73 68 6f 77 6d 65 6e  |.MN7. 2:.showmen|
0000de30  75 28 6d 61 69 6e 5f 6d  65 6e 75 25 2c 21 62 6c  |u(main_menu%,!bl|
0000de40  6f 63 6b 25 2d 36 34 2c  20 28 62 6c 6f 63 6b 25  |ock%-64, (block%|
0000de50  21 34 29 2b 33 32 29 0d  4d 58 05 cb 0d 4d 62 05  |!4)+32).MX...Mb.|
0000de60  e1 0d 4d 6c 04 0d 4d 76  10 dd f2 6d 65 6e 75 73  |..Ml..Mv...menus|
0000de70  65 6c 65 63 74 0d 4d 80  0e ea 20 53 6b 72 6f 6e  |elect.M... Skron|
0000de80  6b 79 25 0d 4d 8a 19 53  6b 72 6f 6e 6b 79 25 3d  |ky%.M..Skronky%=|
0000de90  63 75 72 72 65 6e 74 6d  65 6e 75 25 0d 4d 94 11  |currentmenu%.M..|
0000dea0  c8 8e 20 53 6b 72 6f 6e  6b 79 25 20 ca 0d 4d 9e  |.. Skronky% ..M.|
0000deb0  20 c9 20 6d 61 69 6e 5f  6d 65 6e 75 25 3a f2 6d  | . main_menu%:.m|
0000dec0  61 69 6e 6d 65 6e 75 73  65 6c 65 63 74 0d 4d a8  |ainmenuselect.M.|
0000ded0  27 c9 20 73 68 6f 72 74  63 75 74 6d 65 6e 75 25  |'. shortcutmenu%|
0000dee0  3a f2 73 68 6f 72 74 63  75 74 6d 65 6e 75 73 65  |:.shortcutmenuse|
0000def0  6c 65 63 74 0d 4d b2 05  cb 0d 4d bc 05 e1 0d 4d  |lect.M....M....M|
0000df00  c6 04 0d 4d d0 14 dd f2  6d 61 69 6e 6d 65 6e 75  |...M....mainmenu|
0000df10  73 65 6c 65 63 74 0d 4d  da 32 f4 20 62 6c 6f 63  |select.M.2. bloc|
0000df20  6b 25 2b 30 30 20 69 73  20 73 65 6c 65 63 74 69  |k%+00 is selecti|
0000df30  6f 6e 20 6e 75 6d 62 65  72 20 6f 66 20 66 69 72  |on number of fir|
0000df40  73 74 20 6d 65 6e 75 2c  0d 4d e4 38 f4 20 62 6c  |st menu,.M.8. bl|
0000df50  6f 63 6b 25 2b 30 34 20  69 73 20 73 65 6c 65 63  |ock%+04 is selec|
0000df60  74 69 6f 6e 20 6e 75 6d  62 65 72 20 6f 66 20 73  |tion number of s|
0000df70  65 63 6f 6e 64 20 6c 65  76 65 6c 20 65 74 63 2e  |econd level etc.|
0000df80  0d 4d ee 20 73 65 6c 31  25 3d 21 62 6c 6f 63 6b  |.M. sel1%=!block|
0000df90  25 3a 73 65 6c 32 25 3d  62 6c 6f 63 6b 25 21 34  |%:sel2%=block%!4|
0000dfa0  0d 4d f8 23 c8 99 22 57  69 6d 70 5f 47 65 74 50  |.M.#.."Wimp_GetP|
0000dfb0  6f 69 6e 74 65 72 49 6e  66 6f 22 2c 2c 62 6c 6f  |ointerInfo",,blo|
0000dfc0  63 6b 25 0d 4e 02 14 62  75 74 74 6f 6e 25 3d 62  |ck%.N..button%=b|
0000dfd0  6c 6f 63 6b 25 21 38 0d  4e 0c 0e c8 8e 20 73 65  |lock%!8.N.... se|
0000dfe0  6c 31 25 20 ca 0d 4e 16  14 c9 20 30 3a f2 4f 70  |l1% ..N... 0:.Op|
0000dff0  65 6e 49 6e 66 6f 42 6f  78 0d 4e 20 0e c9 20 31  |enInfoBox.N .. 1|
0000e000  3a f2 63 6c 65 61 72 0d  4e 2a 0e c9 20 32 3a f2  |:.clear.N*.. 2:.|
0000e010  73 6d 61 73 68 0d 4e 34  12 c9 20 33 3a f2 4f 70  |smash.N4.. 3:.Op|
0000e020  65 6e 4c 69 6e 6b 73 0d  4e 3e 0f c9 20 34 3a 71  |enLinks.N>.. 4:q|
0000e030  75 69 74 25 3d b9 0d 4e  48 05 cb 0d 4e 52 3b f4  |uit%=..NH...NR;.|
0000e040  20 43 68 65 63 6b 20 69  66 20 41 44 4a 55 53 54  | Check if ADJUST|
0000e050  20 70 72 65 73 73 65 64  20 69 6e 20 77 68 69 63  | pressed in whic|
0000e060  68 20 63 61 73 65 2c 20  72 65 70 72 69 6e 74 20  |h case, reprint |
0000e070  6d 65 6e 75 73 2e 0d 4e  5c 11 e7 20 62 75 74 74  |menus..N\.. butt|
0000e080  6f 6e 25 3d 31 20 8c 0d  4e 66 1d f2 73 68 6f 77  |on%=1 ..Nf..show|
0000e090  6d 65 6e 75 28 6d 61 69  6e 5f 6d 65 6e 75 25 2c  |menu(main_menu%,|
0000e0a0  30 2c 30 29 0d 4e 70 05  cc 0d 4e 7a 32 49 63 6f  |0,0).Np...Nz2Ico|
0000e0b0  6e 42 61 72 4d 65 6e 75  4f 70 65 6e 25 3d 30 3a  |nBarMenuOpen%=0:|
0000e0c0  f4 20 52 65 65 6e 61 62  6c 65 20 69 63 6f 6e 20  |. Reenable icon |
0000e0d0  62 61 72 20 74 6f 6f 6c  74 69 70 0d 4e 84 05 cd  |bar tooltip.N...|
0000e0e0  0d 4e 8e 05 e1 0d 4e 98  04 0d 4e a2 0f dd f2 4f  |.N....N...N....O|
0000e0f0  70 65 6e 4c 69 6e 6b 73  0d 4e ac 3c ff 28 22 46  |penLinks.N.<.("F|
0000e100  69 6c 65 72 5f 4f 70 65  6e 64 69 72 20 22 2b 41  |iler_Opendir "+A|
0000e110  70 70 50 61 74 68 24 2b  22 2e 55 73 65 72 73 2e  |ppPath$+".Users.|
0000e120  22 2b 55 73 65 72 24 2b  22 2e 4c 69 6e 6b 73 22  |"+User$+".Links"|
0000e130  2b bd 30 29 0d 4e b6 05  e1 0d 4e c0 04 0d 4e ca  |+.0).N....N...N.|
0000e140  1d dd f2 73 68 6f 77 6d  65 6e 75 28 6d 65 6e 75  |...showmenu(menu|
0000e150  25 2c 6d 78 25 2c 6d 79  25 29 0d 4e d4 16 63 75  |%,mx%,my%).N..cu|
0000e160  72 72 65 6e 74 6d 65 6e  75 25 3d 6d 65 6e 75 25  |rrentmenu%=menu%|
0000e170  0d 4e de 3b c8 99 22 57  69 6d 70 5f 43 72 65 61  |.N.;.."Wimp_Crea|
0000e180  74 65 4d 65 6e 75 22 2c  2c 6d 65 6e 75 25 2c 6d  |teMenu",,menu%,m|
0000e190  78 25 2c 6d 79 25 20 b8  20 63 75 72 72 65 6e 74  |x%,my% . current|
0000e1a0  6d 65 6e 75 68 61 6e 64  6c 65 25 0d 4e e8 05 e1  |menuhandle%.N...|
0000e1b0  0d 4e f2 04 0d 4e fc 39  f4 20 2a 2a 2a 2a 2a 2a  |.N...N.9. ******|
0000e1c0  2a 2a 2a 2a 2a 2a 2a 2a  2a 2a 2a 2a 2a 2a 2a 2a  |****************|
*
0000e1e0  2a 2a 2a 2a 2a 2a 2a 2a  2a 2a 2a 2a 2a 0d 4f 06  |*************.O.|
0000e1f0  04 0d 4f 10 0b dd f2 63  6c 65 61 72 0d 4f 1a 31  |..O....clear.O.1|
0000e200  58 25 3d ae 28 41 70 70  50 61 74 68 24 2b 22 2e  |X%=.(AppPath$+".|
0000e210  55 73 65 72 73 2e 22 2b  55 73 65 72 24 2b 22 2e  |Users."+User$+".|
0000e220  7e 7e 4f 70 65 6e 22 29  3a d9 23 58 25 0d 4f 24  |~~Open"):.#X%.O$|
0000e230  32 58 25 3d ae 28 41 70  70 50 61 74 68 24 2b 22  |2X%=.(AppPath$+"|
0000e240  2e 55 73 65 72 73 2e 22  2b 55 73 65 72 24 2b 22  |.Users."+User$+"|
0000e250  2e 7e 7e 43 6c 6f 73 65  22 29 3a d9 23 58 25 0d  |.~~Close"):.#X%.|
0000e260  4f 2e 0e f2 6c 6f 61 64  63 61 63 68 65 0d 4f 38  |O...loadcache.O8|
0000e270  05 e1 0d 4f 42 04 0d 4f  4c 3d f4 20 2a 2a 2a 2a  |...OB..OL=. ****|
0000e280  2a 2a 2a 2a 2a 2a 2a 2a  2a 2a 2a 2a 2a 2a 2a 2a  |****************|
*
0000e2b0  2a 2a 2a 0d 4f 56 04 0d  4f 60 0b dd f2 73 6d 61  |***.OV..O`...sma|
0000e2c0  73 68 0d 4f 6a 0e ff 28  22 43 6c 6f 73 65 22 29  |sh.Oj..("Close")|
0000e2d0  0d 4f 74 17 c8 99 22 48  6f 75 72 67 6c 61 73 73  |.Ot..."Hourglass|
0000e2e0  5f 53 6d 61 73 68 22 0d  4f 7e 05 e1 0d 4f 88 04  |_Smash".O~...O..|
0000e2f0  0d 4f 92 3d f4 20 2a 2a  2a 2a 2a 2a 2a 2a 2a 2a  |.O.=. **********|
0000e300  2a 2a 2a 2a 2a 2a 2a 2a  2a 2a 2a 2a 2a 2a 2a 2a  |****************|
*
0000e320  2a 2a 2a 2a 2a 2a 2a 2a  2a 2a 2a 2a 2a 0d 4f 9c  |*************.O.|
0000e330  04 0d 4f a6 29 f4 20 54  65 6c 6c 20 57 49 4d 50  |..O.). Tell WIMP|
0000e340  20 74 6f 20 69 6e 69 74  69 61 6c 69 73 65 20 61  | to initialise a|
0000e350  20 6e 65 77 20 6d 65 6e  75 2e 0d 4f b0 3f f4 20  | new menu..O.?. |
0000e360  54 68 69 73 20 73 68 6f  75 6c 64 20 72 65 61 6c  |This should real|
0000e370  6c 79 20 62 65 20 64 6f  6e 65 20 62 79 20 6c 6f  |ly be done by lo|
0000e380  61 64 69 6e 67 20 69 6e  20 61 20 4d 45 4e 55 20  |ading in a MENU |
0000e390  74 65 6d 70 6c 61 74 65  2e 0d 4f ba 16 dd f2 73  |template..O....s|
0000e3a0  65 74 75 70 6d 65 6e 75  28 6d 65 6e 75 25 29 0d  |etupmenu(menu%).|
0000e3b0  4f c4 1f f3 20 74 69 74  6c 65 24 2c 6e 75 6d 25  |O... title$,num%|
0000e3c0  3a 24 6d 65 6e 75 25 3d  74 69 74 6c 65 24 0d 4f  |:$menu%=title$.O|
0000e3d0  ce 1b 77 69 64 74 68 25  3d 28 a9 28 74 69 74 6c  |..width%=(.(titl|
0000e3e0  65 24 29 2d 32 29 2a 31  36 0d 4f d8 2d 6d 65 6e  |e$)-2)*16.O.-men|
0000e3f0  75 25 21 31 32 3d 26 30  30 30 37 30 32 30 37 3a  |u%!12=&00070207:|
0000e400  6d 65 6e 75 25 21 32 30  3d 34 34 3a 6d 65 6e 75  |menu%!20=44:menu|
0000e410  25 21 32 34 3d 30 0d 4f  e2 1d 70 74 72 25 3d 6d  |%!24=0.O..ptr%=m|
0000e420  65 6e 75 25 2b 32 38 3a  e3 20 69 25 3d 31 b8 6e  |enu%+28:. i%=1.n|
0000e430  75 6d 25 0d 4f ec 1b f3  20 6d 66 6c 61 67 73 25  |um%.O... mflags%|
0000e440  2c 73 75 62 70 74 72 25  2c 69 74 65 6d 24 0d 4f  |,subptr%,item$.O|
0000e450  f6 20 21 70 74 72 25 3d  6d 66 6c 61 67 73 25 3a  |. !ptr%=mflags%:|
0000e460  70 74 72 25 21 34 3d 73  75 62 70 74 72 25 0d 50  |ptr%!4=subptr%.P|
0000e470  00 24 70 74 72 25 21 38  3d 26 37 30 30 30 30 32  |.$ptr%!8=&700002|
0000e480  31 3a 24 28 70 74 72 25  2b 31 32 29 3d 69 74 65  |1:$(ptr%+12)=ite|
0000e490  6d 24 0d 50 0a 16 61 25  3d 28 a9 28 69 74 65 6d  |m$.P..a%=(.(item|
0000e4a0  24 29 2b 31 29 2a 31 36  0d 50 14 19 e7 20 61 25  |$)+1)*16.P... a%|
0000e4b0  3e 77 69 64 74 68 25 20  77 69 64 74 68 25 3d 61  |>width% width%=a|
0000e4c0  25 0d 50 1e 0e 70 74 72  25 2b 3d 32 34 3a ed 0d  |%.P..ptr%+=24:..|
0000e4d0  50 28 13 6d 65 6e 75 25  21 31 36 3d 77 69 64 74  |P(.menu%!16=widt|
0000e4e0  68 25 0d 50 32 05 e1 0d  50 3c 04 0d 50 46 3b f4  |h%.P2...P<..PF;.|
0000e4f0  20 2a 2a 2a 2a 2a 2a 2a  2a 2a 2a 2a 2a 2a 2a 2a  | ***************|
0000e500  2a 2a 2a 2a 2a 2a 2a 2a  2a 2a 2a 2a 2a 2a 2a 2a  |****************|
*
0000e520  2a 2a 2a 2a 2a 2a 0d 50  50 04 0d 50 5a 22 f4 20  |******.PP..PZ". |
0000e530  66 75 6e 63 74 69 6f 6e  20 74 6f 20 64 65 61 6c  |function to deal|
0000e540  20 77 69 74 68 20 65 72  72 6f 72 73 0d 50 64 11  | with errors.Pd.|
0000e550  dd f2 65 72 72 6f 72 28  65 72 72 24 29 0d 50 6e  |..error(err$).Pn|
0000e560  14 21 65 72 72 6f 72 62  6c 6f 63 6b 25 3d 32 35  |.!errorblock%=25|
0000e570  35 0d 50 78 1c 24 28 65  72 72 6f 72 62 6c 6f 63  |5.Px.$(errorbloc|
0000e580  6b 25 2b 34 29 3d 65 72  72 24 2b bd 30 0d 50 82  |k%+4)=err$+.0.P.|
0000e590  2c c8 99 20 22 57 69 6d  70 5f 52 65 70 6f 72 74  |,.. "Wimp_Report|
0000e5a0  45 72 72 6f 72 22 2c 65  72 72 6f 72 62 6c 6f 63  |Error",errorbloc|
0000e5b0  6b 25 2c 31 2c 61 70 70  24 0d 50 8c 05 e1 0d 50  |k%,1,app$.P....P|
0000e5c0  96 04 0d 50 a0 3b f4 20  2a 2a 2a 2a 2a 2a 2a 2a  |...P.;. ********|
0000e5d0  2a 2a 2a 2a 2a 2a 2a 2a  2a 2a 2a 2a 2a 2a 2a 2a  |****************|
*
0000e5f0  2a 2a 2a 2a 2a 2a 2a 2a  2a 2a 2a 2a 2a 0d 50 aa  |*************.P.|
0000e600  10 dd f2 4f 70 65 6e 46  53 56 69 65 77 0d 50 b4  |...OpenFSView.P.|
0000e610  04 0d 50 be 05 e1 0d 50  c8 3b f4 20 2a 2a 2a 2a  |..P....P.;. ****|
0000e620  2a 2a 2a 2a 2a 2a 2a 2a  2a 2a 2a 2a 2a 2a 2a 2a  |****************|
*
0000e650  2a 0d 50 d2 11 dd f2 43  6c 6f 73 65 46 53 56 69  |*.P....CloseFSVi|
0000e660  65 77 0d 50 dc 04 0d 50  e6 05 e1 0d 50 f0 3b f4  |ew.P...P....P.;.|
0000e670  20 2a 2a 2a 2a 2a 2a 2a  2a 2a 2a 2a 2a 2a 2a 2a  | ***************|
0000e680  2a 2a 2a 2a 2a 2a 2a 2a  2a 2a 2a 2a 2a 2a 2a 2a  |****************|
*
0000e6a0  2a 2a 2a 2a 2a 2a 0d ff                           |******..|
0000e6a8