Home » Archimedes archive » Acorn User » AU 1994-08.adf » !Tiger_Tiger » !Tiger/!RunImage
!Tiger/!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 1994-08.adf » !Tiger_Tiger |
Filename: | !Tiger/!RunImage |
Read OK: | ✔ |
File size: | 11AE5 bytes |
Load address: | 0000 |
Exec address: | 0000 |
File contents
10REM > <Tiger$Dir>.!RunImage 20: 30task$="Tiger" 40purpose$="Editable object descriptions" 50author$="(c) Graham Crow 1992,'93,'94" 60version$="4.00 (31 May 1994)" 70: 80ON ERROR PROCerror:END 90PROCinit:PROCwimpinit 100PROCloadtemplates:PROCloadchoices 110PROCbaricon:PROCiniticons:PROCcreateicons 120PROCinstall 130: 140ON ERROR PROCwimperror 150quit%=FALSE 160REPEAT:PROCpoll:UNTIL quit% 170PROCclosewimp 180END 190: 200REM----------- 210REM. WIMP POLL 220REM----------- 230: 240DEFPROCpoll 250SYS "Wimp_Poll",,q% TO reason% 260REM prevent dragging on a selection 270IF reason%<17 OR reason%>19 z%=0 280CASE reason% OF 290 WHEN 0 300 IF textflag% PROCgettext 310 c%=FNchanged 320 IF c% undo%=TRUE:redo%=FALSE ELSE undo%=FALSE 330 IF c%:IF NOT star% PROCstar:ELSE IF NOT c%:IF star% PROCnostar 340 IF refresh% THEN 350 PROCshowTiger(1):refresh%=FALSE 360 ENDIF 370 IF NOT pristine%:IF FNobjs(dir$)<>items%:IF FNopen(main%) refresh%=TRUE 380 PROCiconscroll 390 WHEN 2:PROCow2(q%!0) 400 WHEN 3 410 wh%=q%!0:SYS "Wimp_GetPointerInfo",,q% 420 IF q%!12=main% AND q%!8=1 PROCviewer(dir$) 430 PROCcw(wh%) 440 WHEN 6:PROCmouse(q%) 450 WHEN 7:PROCenddrag(q%,swh%,remb%,solid%) 460 WHEN 8:PROCkeypress(q%) 470 WHEN 9:PROCmenuselect(q%) 480 WHEN 17,18:PROCreceive(q%) 490 WHEN 19: 500 CASE q%!16 OF 510 WHEN 5:SYS "Wimp_StartTask","Run "+job$ 520 OTHERWISE:PROCbuzz 530 ENDCASE 540ENDCASE 550ENDPROC 560: 570REM---------- 580REM. MESSAGES 590REM---------- 600: 610DEFPROCreceive(q%) 620sender%=q%!4 630CASE q%!16 OF 640 WHEN 0:quit%=FNquit 650 WHEN 1:PROCloadsel(q%) :REM DataSave 660 WHEN 2:PROCdatasave(q%):REM DataSaveAck 670 WHEN 3:PROCdataload(q%):REM DataLoad 680 WHEN 4:REM DataLoadAck 690 WHEN 5:IF q%!40=&4FF PROCdataload(q%) :REM DataOpen 700 WHEN 6:REM RAMFetch 710 WHEN 7:REM RAMTransmit 720 WHEN 8:PROCprequit(q%) :REM PreQuit 730 WHEN &400C0:PROCsubmenu(q%):REM pointer over SaveText/Copy submenu 740 WHEN &400C1:windowstate%=0:IF FNopen(main%) windowstate%=1 750 PROCmodechange(q%,windowstate%) 760 WHEN &400C7:tsk$=FNtaskname(q%) 770ENDCASE 780ENDPROC 790: 800DEFPROCprequit(q%) 810REM PreQuit message received from Task Manager 820sender%=q%!4:quit%=TRUE 830REM acknowledge message 840q%!12=q%!8 850SYS "Wimp_SendMessage",19,q%,sender% 860IF FNquit THEN 870 SYS "Wimp_GetCaretPosition",,q% 880 q%!24=&1FC:REM Ctrl+Shift+F12 890 SYS "Wimp_SendMessage",8,q%,sender% 900ENDIF 910ENDPROC 920: 930DEFPROCmodechange(q%,windowstate%) 940REM adjusts window width and icon width to suit mode 950IF pristine% OR (NOT FNcheckobj(dir$,FALSE)) THEN ENDPROC 960IF FNpromptsave THEN 970 SYS "OS_ReadModeVariable",-1,1 TO ,,columns% 980 width%=(columns%-2)*16 990 PROCdi(main%,0,155):PROCcreateicons 1000 PROCshowTiger(windowstate%) 1010ENDIF 1020ENDPROC 1030: 1040DEFFNtaskhandle(wh%,ih%) 1050LOCAL task% 1060q%!0=256:q%!12=0 1070SYS "Wimp_SendMessage",19,q%,wh%,ih% TO ,,task% 1080=task% 1090: 1100DEFFNtaskname(q%) 1110LOCAL s$,o%:s$="":o%=28 1120taskhandle%=q%!20:tasksize%=q%!24 1130WHILE q%?o%<>0:s$+=CHR$(q%?o%):o%+=1:ENDWHILE 1140=s$ 1150: 1160REM------ 1170REM. INIT 1180REM------ 1190: 1200DEFPROCinit 1210SYS "Hourglass_On" 1220blocksize%=&4000 1230buffersize%=&1000 1240DIM q% blocksize% 1250DIM buffer% buffersize% 1260DIM C% &100:REM w/s 1270DIM mb1%&200,mb2%&200,mb3%&100,mb4%&100,mb5%&200,mb6%&100 1280s%=18 1290DIM mi0%s%,mi1%s%,mi2%s%,mi3%s%,mi4%s%,mi5%s%,mi6%s% 1300DIM mi7%s%,mi8%s%,mi9%s%,mi10%s%,mi11%s% 1310DIM tick%(15),grey%(15) 1320: 1330REM for msg window 1340DIM icm$(3),ict$(4) 1350DIM icm%(3):FOR J%=1 TO 3:DIM a% 50:icm%(J%)=a%:NEXT 1360DIM icn%(4):FOR J%=1 TO 4:DIM a% 15:icn%(J%)=a%:NEXT 1370DIM icv%(4):FOR J%=1 TO 4:DIM a% 10:icv%(J%)=a%:NEXT 1380DIM icx%(4),icy%(4),icw%(4),ich%(4) 1390reply%=0:esc%=FALSE:ret%=FALSE 1400: 1410DIM spritad% 20:$spritad%="stigbar" 1420DIM barbuf% 8:$barbuf%=task$ 1430: 1440REM text indirection 1450DIM newname% 13:$newname%="" 1460DIM valname% 20:$valname%="A~.:*#$&@^%\"+CHR$34 1470DIM valid% 5:$valid%="A":REM validation string for icon 78 1480: 1490maxo%=77 1500DIM undo$(maxo%):REM copy of descriptions for undo 1510DIM redo$(maxo%):REM copy of descriptions for redo 1520DIM leaf$(maxo%):REM unformatted leafname 1530DIM name$(maxo%):REM leafnames from TigerData 1540DIM desc$(maxo%):REM descriptions from TigerData 1550DIM len%(maxo%) :REM length of object (bytes) 1560DIM sel%(maxo%) :REM list of selected objs 1570: 1580maxdesclen%=110 1590REM data blocks and addresses for icon text indirection 1600DIM name%(maxo%):FOR J%=0 TO maxo%:DIM a% 13:name%(J%)=a%:NEXT 1610DIM val%(maxo%):FOR J%=0 TO maxo%:DIM a% 20:val%(J%)=a%:NEXT 1620DIM desc%(maxo%):FOR J%=0 TO maxo%:DIM a% maxdesclen%+1:desc%(J%)=a%:NEXT 1630: 1640sprsize%=&1000:DIM spr% sprsize%:!spr%=sprsize%:spr%!8=16 1650SYS "OS_SpriteOp",&100+9,spr% 1660: 1670REM get initial slot size (set in !Run) 1680remslotsize%=FNgetslotsize 1690A%=&8000+remslotsize%:REM load address for TigerData file 1700: 1710SYS "OS_ReadModeVariable",-1,1 TO ,,columns%:width%=(columns%-2)*16 1720: 1730solid%=FNsoliddrag:remb%=4 1740dragicon%=1:fnicon%=2:okicon%=3:clicon%=4:REM Save window 1750: 1760taskdir$=FNosvar("Tiger$Dir") 1770tigstr$="Tiger description files" 1780items%=0:find$="":cdir$="" 1790z%=0:REM flag to prevent dragging a selection 1800pristine%=TRUE:REM no files dragged onto Tiger yet 1810star%=FALSE:REM asterisk in window title for changed data 1820display%=1 :REM 1=descs, 2=obj info, 3=nested size 1830oldi%=0:oldp%=0:REM icon, position in icon (for horiz scroll) 1840recursing%=FALSE:counting%=FALSE:refresh%=FALSE:textflag%=FALSE 1850pos%=0:insert%=FALSE:undo%=FALSE:redo%=FALSE 1860F%=0:X%=0:REM file handles 1870user$="Demonstration":demo%=TRUE 1880ENDPROC 1890: 1900DEFPROCwimpinit 1910$q%="TASK":SYS "Wimp_Initialise",200,!q%,task$ TO version%,task% 1920ENDPROC 1930: 1940DEFPROCclosewimp 1950$q%="TASK":SYS "Wimp_CloseDown",task%,!q% 1960ENDPROC 1970: 1980DEFPROCiniticons 1990LOCAL J%,wh%:wh%=info% 2000PROCit(wh%,1,purpose$):PROCit(wh%,2,author$) 2010PROCit(wh%,3,version$):PROCit(wh%,4,user$) 2020wh%=buffwind% 2030FOR J%=1 TO 3:PROCui(wh%,J%):NEXT 2040ENDPROC 2050: 2060DEFPROCinstall 2070REM install Tiger complete with data? 2080path$=FNenv:dir$=FNparent(path$) 2090IF dir$="" AND startdir$<>"" dir$=startdir$ 2100IF dir$<>"" THEN 2110 windowstate%=0:IF openTiger% windowstate%=2:REM centre 2120 pristine%=FALSE 2130 PROCshowTiger(windowstate%) 2140ENDIF 2150SYS "Hourglass_Smash" 2160IF openbuff% PROCow(buffwind%) 2170ENDPROC 2180: 2190REM--------------- 2200REM. DATA TRANSFER 2210REM--------------- 2220: 2230DEFPROCdrop(swh%,sih%,smb%) 2240REM drag ends on Filer/App/Pinboard/Iconbar/Tiger 2250REM find out where drop occurred 2260SYS "Wimp_GetPointerInfo",,q% 2270mx%=q%!0:my%=q%!4:dwh%=q%!12:dih%=q%!16 2280: 2290REM invalid drops 2300IF swh%=dwh% AND dwh%<>main% ENDPROC 2310IF swh%=buffwind% AND dwh%<>main% ENDPROC 2320IF swh%=main% THEN 2330 IF sih%<79 AND dwh%=main% ENDPROC 2340 IF sih%>78 AND dwh%<>main% AND dwh%<>buffwind% ENDPROC 2350ENDIF 2360: 2370IF swh%=main% AND sih%<79 AND dwh%=buffwind% THEN 2380 path$=dir$+"."+leaf$(chosen%) 2390 PROCdragfiletobuff(path$,FNfiletype(path$)):ENDPROC 2400ENDIF 2410: 2420IF (swh%=main% OR swh%=buffwind%) AND (dwh%=main% OR dwh%=buffwind%) THEN 2430 PROCshiftdesc(swh%,sih%,dwh%,dih%,smb%):ENDPROC 2440ENDIF 2450: 2460IF dwh%=-2 AND dih%=-1 THEN 2470 dtsk$="IconBar" 2480ELSE 2490 q%!0=20:q%!12=0:q%!16=0 2500 SYS "Wimp_SendMessage",19,q%,dwh%,dih% TO ,,dtsk% 2510 IF dtsk%=0 PROCclosemenu:ENDPROC 2520 SYS "TaskManager_TaskNameFromHandle",dtsk% TO dtsk$ 2530ENDIF 2540IF swh%=savebox% THEN 2550 PROCsavetextfile(swh%,dwh%,dih%,mx%,my%,dtsk$) 2560ELSE 2570 filersave%=FALSE 2580 CASE dtsk$ OF 2590 WHEN "IconBar" :PROCiconbar(smb%,sih%) 2600 WHEN "Filer" :PROCfiler(swh%,dwh%,dih%,mx%,my%) 2610 WHEN "Pinboard":PROCpinboard(mx%,my%) 2620 OTHERWISE :PROCapp(swh%,dwh%,dih%,mx%,my%) 2630 ENDCASE 2640ENDIF 2650ENDPROC 2660: 2670DEFPROCdatasave(q%) 2680REM response by Wimp (No.2 - DataSaveAck) 2690REM to drag of file(s) onto Filer/App 2700IF filersave% PROCfilersave(q%,swh%) 2710ENDPROC 2720: 2730REM------------------------------ 2740REM. DRAG TEXT FILE TO FILER, APP 2750REM------------------------------ 2760: 2770DEFPROCsavetextfile(swh%,dwh%,dih%,mx%,my%,dtsk$) 2780REM send DataSave 2790LOCAL fsp$,leaf$,filelen%,type% 2800IF dtsk$="IconBar" OR dtsk$="Pinboard" THEN 2810 PROCclosemenu:PROCbuzz:ENDPROC 2820ENDIF 2830fsp$=FNit(swh%,fnicon%):leaf$=FNleaf(fsp$) 2840IF NOT FNoktosave(swh%,fnicon%) ENDPROC 2850filelen%=100:type%=&FFF:filersave%=TRUE 2860q%!0=(48+LENfsp$) AND NOT 3:REM block length 2870q%!4=0:q%!8=0:q%!12=0:q%!16=1:REM DataSave 2880q%!20=dwh%:q%!24=dih%:q%!28=mx%:q%!32=my% 2890q%!36=filelen%:q%!40=type%:$(q%+44)=leaf$+CHR$0 2900SYS "Wimp_SendMessage",18,q%,q%!20,q%!24 2910ENDPROC 2920: 2930DEFPROCtextsave(q%,newpath$) 2940REM DataSaveAck received - send DataLoad 2950IF FNdemo("Text save") ENDPROC 2960IF NOT FNcheckobj(dir$,TRUE) ENDPROC 2970PROCstartsave(newpath$) 2980PROCsavedir(dir$) 2990IF FNis(savebox%,12) PROCrecursivesave 3000PROCendsave(newpath$) 3010REM only update filename if secure 3020IF q%!36>-1 THEN PROCit(savebox%,fnicon%,newpath$) 3030q%!0=64:q%!12=q%!8:q%!16=3:REM DataLoad 3040q%!40=&FFF:$(q%+44)=newpath$+CHR$0 3050SYS "Wimp_SendMessage",18,q%,q%!20,q%!24 3060ENDPROC 3070: 3080REM------------- 3090REM. DRAG TO APP 3100REM------------- 3110: 3120DEFPROCapp(swh%,dwh%,dih%,mx%,my%) 3130q%!12=0:q%!20=dwh%:q%!24=dih%:q%!28=mx%:q%!32=my% 3140sel%=FNsel:IF swh%=copybox% sel%=1:sel%(1)=chosen% 3150FOR J%=1 TO sel% 3160 sfsp$=dir$+"."+$name%(sel%(J%)) 3170 type%=FNfiletype(sfsp$):q%!40=type% 3180 q%!0=((48+LENsfsp$)DIV 4)*4 3190 $(q%+44)=sfsp$+CHR$0:q%!16=3:REM DataLoad 3200 SYS "Wimp_SendMessage",17,q%,dwh%,dih% 3210NEXT 3220PROCclearall 3230ENDPROC 3240: 3250REM--------------- 3260REM. DRAG TO FILER 3270REM--------------- 3280: 3290DEFPROCfiler(swh%,dwh%,dih%,mx%,my%) 3300REM drag ends on Filer - send DataSave 3310LOCAL fsp$,leaf$,filelen%,type% 3320filersave%=TRUE 3330CASE swh% OF 3340 WHEN copybox%: 3350 fsp$=FNit(swh%,fnicon%) 3360 leaf$=FNleaf(fsp$) 3370 filelen%=FNfilelen(fsp$) 3380 type%=FNfiletype(fsp$) 3390 WHEN savebox%: 3400 fsp$=FNit(swh%,fnicon%) 3410 leaf$=FNleaf(fsp$) 3420 filelen%=100:type%=&FFF 3430 OTHERWISE: 3440 leaf$=leaf$(chosen%) 3450 fsp$=dir$+"."+leaf$ 3460 filelen%=FNfilelen(fsp$) 3470 type%=FNfiletype(fsp$) 3480ENDCASE 3490q%!0=(48+LENfsp$) AND NOT 3:REM block length 3500q%!4=0:q%!8=0:q%!12=0:q%!16=1:REM DataSave 3510q%!20=dwh%:q%!24=dih%:q%!28=mx%:q%!32=my% 3520q%!36=filelen%:q%!40=type%:$(q%+44)=leaf$+CHR$0 3530SYS "Wimp_SendMessage",18,q%,q%!20,q%!24 3540ENDPROC 3550: 3560DEFPROCfilersave(q%,swh%) 3570REM response to DataSaveAck 3580LOCAL J%,K%,sel%,dpath$,ddir$,leaf$,sfsp$,dfsp$ 3590FilerAction%=FNfileraction:opts%=FNreadopts 3600sel%=FNsel 3610dpath$=FNname(q%+44) 3620ddir$=FNparent(dpath$) 3630CASE swh% OF 3640 WHEN copybox%:PROCcopy(ddir$,remb%) 3650 WHEN savebox%:PROCtextsave(q%,dpath$) 3660 OTHERWISE: 3670 PROCclearall 3680 : 3690 REM does ddir$ have a TigerData file? 3700 fsp$=ddir$+".TigerData":present%=FNcheckobj(fsp$,FALSE) 3710 IF NOT present% THEN 3720 descs%=0 3730 ELSE 3740 descs%=FNloadTigerData(fsp$) 3750 ENDIF 3760 : 3770 IF FilerAction% SYS &400DE,"Filer_Action" TO taskh% 3780 : 3790 FOR J%=1 TO sel% 3800 leaf$=leaf$(sel%(J%)) 3810 sfsp$=dir$+"."+leaf$ 3820 dfsp$=ddir$+"."+leaf$ 3830 IF FNcheckobj(sfsp$,TRUE) AND NOT (present% AND leaf$="TigerData") THEN 3840 IF FilerAction% THEN 3850 SYS &40F80,taskh%,dir$ 3860 SYS &40F81,taskh%,leaf$ 3870 ELSE 3880 IF INKEY-1 delete%=TRUE ELSE delete%=FALSE 3890 opt$=FNcopyopts(delete%) 3900 IF INKEY-1 t$="Move" ELSE t$="Copy" 3910 PROCcommand(t$+" files","Copy "+sfsp$+" "+dfsp$+" "+opt$) 3920 ENDIF 3930 ENDIF 3940 NEXT 3950 : 3960 IF FilerAction% THEN 3970 IF INKEY-1 n%=6 ELSE n%=0 3980 SYS &40F82,taskh%,n%,opts%,ddir$,LENddir$+1 3990 ENDIF 4000 q%!0=64:q%!12=q%!8:q%!16=3:REM DataLoad 4010 SYS "Wimp_SendMessage",18,q%,q%!20,q%!24 4020 IF remb%=1 PROCcw(swh%) 4030 : 4040 REM transfer incoming descriptions to arrays 4050 FOR J%=1 TO sel% 4060 name$=leaf$(sel%(J%)) 4070 desc$=$desc%(sel%(J%)):IF desc$=tigstr$ desc$="" 4080 : 4090 IF desc$<>"" THEN 4100 found%=FALSE 4110 FOR K%=1 TO descs% 4120 IF name$(K%)=name$ desc$(K%)=desc$:found%=TRUE:K%=descs% 4130 NEXT 4140 IF NOT found% THEN 4150 descs%+=1:name$(descs%)=name$:desc$(descs%)=desc$ 4160 ENDIF 4170 ENDIF 4180 : 4190 NEXT 4200 PROCwriteTigerData(descs%) 4210ENDCASE 4220ENDPROC 4230: 4240REM--------------------------- 4250REM. DRAG TO PINBOARD, ICONBAR 4260REM--------------------------- 4270: 4280DEFPROCpinboard(mx%,my%) 4290LOCAL J%,n$,fsp$,x%,y% 4300x%=mx%:y%=my% 4310sel%=FNsel:IF swh%=copybox% sel%=1:sel%(1)=chosen% 4320FOR J%=1 TO sel% 4330 n$=leaf$(sel%(J%)) 4340 x$=STR$x%:IF x%<0 x$="0"+x$ 4350 y$=STR$y%:IF y%<0 y$="0"+y$ 4360 OSCLI("Pin "+dir$+"."+n$+" "+x$+" "+y$) 4370 IF J% MOD 4=0 y%-=116:x%=mx% ELSE x%+=188 4380NEXT 4390PROCclosemenu 4400IF remb%=1 PROCcw(main%):REM Adj 4410ENDPROC 4420: 4430DEFPROCiconbar(smb%,sih%) 4440LOCAL J% 4450sel%=FNsel:IF swh%=copybox% sel%=1:sel%(1)=chosen% 4460FOR J%=1 TO sel% 4470 PROCdoubleclick(smb%,sel%(J%)) 4480NEXT 4490ENDPROC 4500: 4510REM------------- 4520REM. COPY OBJECT 4530REM------------- 4540: 4550DEFPROCprepcopybox 4560LOCAL wh%:wh%=copybox% 4570leaf$=leaf$(chosen%) 4580PROCit(wh%,2,leaf$) 4590q%!0=wh%:q%!4=1:SYS "Wimp_GetIconState",,q% 4600$(q%!28)=FNspr(wh%,dragicon%) 4610ENDPROC 4620: 4630DEFPROCcopy(ddir$,remb%) 4640REM copybox 4650FilerAction%=FNfileraction:opts%=FNreadopts 4660leaf$=leaf$(chosen%) 4670sfsp$=dir$+"."+leaf$ 4680IF FNcheckobj(sfsp$,TRUE) THEN 4690 fsp$=FNit(copybox%,fnicon%) 4700 IF ddir$="" THEN 4710 REM OK/Ret 4720 ddir$=FNparent(fsp$):IF ddir$="" ddir$=dir$ 4730 ENDIF 4740 newleaf$=LEFT$(FNleaf(fsp$),10) 4750 dfsp$=ddir$+"."+newleaf$ 4760 IF FilerAction% THEN 4770 PROCfileraction(0) 4780 ELSE 4790 opt$=FNcopyopts(FALSE) 4800 PROCcommand("Copy files","Copy "+sfsp$+" "+dfsp$+" "+opt$) 4810 ENDIF 4820 : 4830 REM copy description. if any 4840 REM does ddir$ have a TigerData file? 4850 fsp$=ddir$+".TigerData":present%=FNcheckobj(fsp$,FALSE) 4860 : 4870 IF NOT present% THEN 4880 descs%=0 4890 ELSE 4900 descs%=FNloadTigerData(fsp$) 4910 ENDIF 4920 : 4930 REM transfer incoming descriptions to arrays 4940 name$=leaf$(chosen%) 4950 desc$=$desc%(chosen%) 4960 IF desc$=tigstr$ desc$="" 4970 IF desc$<>"" THEN 4980 found%=FALSE 4990 FOR K%=1 TO descs% 5000 IF name$(K%)=name$ desc$(K%)=desc$:found%=TRUE:K%=descs% 5010 NEXT 5020 IF NOT found% THEN 5030 descs%+=1:name$(descs%)=name$:desc$(descs%)=desc$ 5040 ENDIF 5050 ENDIF 5060 PROCwriteTigerData(descs%) 5070 IF ddir$=dir$ AND newleaf$<>leaf$ PROCshowTiger(1) 5080 IF remb%<>1 PROCclosemenu 5090ENDIF 5100ENDPROC 5110: 5120DEFPROCcommand(title$,command$) 5130REM perform task with output in command window 5140$C%=title$ 5150SYS "Wimp_CommandWindow",C% 5160OSCLI command$ 5170SYS "Wimp_CommandWindow",0 5180ENDPROC 5190: 5200REM--------------- 5210REM. FILER ACTIONS 5220REM--------------- 5230: 5240DEFPROCaccess(n%) 5250LOCAL access%,recurse%,wh%:wh%=accesswind% 5260CASE n% OF 5270WHEN 1:REM menu choice 5280 CASE level2% OF 5290 WHEN 0:access%=10 5300 WHEN 1:access%=2 5310 WHEN 2:access%=16 5320 WHEN 3:access%=3 5330 ENDCASE 5340 IF stay% PROCredomenu(n%) 5350WHEN 2:REM window click 5360 access%=0 5370 IF FNis(wh%,1) access%+=8 5380 IF FNis(wh%,2) access%+=1 5390 IF FNis(wh%,3) access%+=2 5400 IF FNis(wh%,4) access%+=16 5410 IF FNis(wh%,5) access%+=8 5420 IF stay% PROCredomenu(n%):PROCmainmenu(remx%,remy%,chosen%) 5430ENDCASE 5440recurse%=FNis(wh%,11) 5450PROCfileraction(3) 5460ENDPROC 5470: 5480DEFPROCredomenu(n%) 5490REM re-do ticks in mb5% and icons in accesswind% 5500PROCaccessmenu(TRUE,n%) 5510SYS "Wimp_GetPointerInfo",,q%:wh%=q%!12 5520q%!0=wh%:SYS "Wimp_GetWindowState",,q% 5530SYS "Wimp_CreateSubMenu",,mb5%,q%!4,q%!16 5540ENDPROC 5550: 5560DEFPROCaccessmenu(more%,n%) 5570SYS "Wimp_GetPointerInfo",,q%:wh%=q%!12 5580LOCAL J%,leaf$,obj%,wh%:wh%=accesswind% 5590b%=&7000021:g%=&7400021:REM flags=black,grey 5600a%=mb5%:p%=a%+28:$a%="Access":f%=b%:wid%=15*16 5610a%!12=&70207:a%!16=wid%:a%!20=44:a%!24=0 5620: 5630IF n%=1 FOR J%=1 TO 10:PROCui(wh%,J%):NEXT 5640tick%()=0 5650sel%=FNsel:IF sel%=0 sel%=1:sel%(1)=chosen% 5660leaf$=$name%(chosen%) 5670obj%=FNobjtype(dir$+"."+leaf$) 5680PROCcleariconbit(wh%,11,22) 5690: 5700IF sel%=1 AND obj%=1 THEN 5710 REM one file chosen 5720 PROCseticonbit(wh%,11,22) 5730 SYS "OS_File",5,dir$+"."+leaf$ TO ,,,,,attr% 5740 IF more% attr%=access% 5750 locked%=(attr% AND 8)=8 5760 oread% =(attr% AND 1)=1 5770 owrite%=(attr% AND 2)=2 5780 pread% =(attr% AND 16)=16 5790 pwrite%=(attr% AND 32)=32 5800 IF n%=1 THEN 5810 IF locked% PROCsi(wh%,1) ELSE PROCsi(wh%,6) 5820 IF oread% PROCsi(wh%,2) ELSE PROCsi(wh%,7) 5830 IF owrite% PROCsi(wh%,3) ELSE PROCsi(wh%,8) 5840 IF pread% PROCsi(wh%,4) ELSE PROCsi(wh%,9) 5850 IF pwrite% PROCsi(wh%,5) ELSE PROCsi(wh%,10) 5860 ENDIF 5870 protected%=locked% 5880 public%=pread% 5890 IF protected% tick%(0)=TRUE ELSE tick%(1)=TRUE 5900 IF public% tick%(2)=TRUE ELSE tick%(3)=TRUE 5910ENDIF 5920: 5930IF tick%(0) t%=1 ELSE t%=0 5940s$="Protected":p%!0=t%:p%!4=0:p%!8=b%:$(p%+12)=s$:p%+=24 5950IF tick%(1) t%=1 ELSE t%=0 5960s$="Unprotected":p%!0=t%+2:p%!4=0:p%!8=b%:$(p%+12)=s$:p%+=24 5970IF tick%(2) t%=1 ELSE t%=0 5980s$="Public":p%!0=t%:p%!4=0:p%!8=b%:$(p%+12)=s$:p%+=24 5990IF tick%(3) t%=1 ELSE t%=0 6000s$="Private":p%!0=t%+2:p%!4=0:p%!8=b%:$(p%+12)=s$:p%+=24 6010b%=&7000121:g%=&7400121:REM flags=black,grey (indirected) 6020$mi11%="Access details" 6030p%!0=&80:p%!4=wh%:p%!8=b%:p%!12=mi11%:p%!16=-1:p%!20=16 6040ENDPROC 6050: 6060DEFPROCsettype 6070LOCAL J%,settype%,str$,str2$,num%,len%,more% 6080str$=FNlc(FNstrip($newname%)) 6090IF str$="":PROCbadtype:ENDPROC 6100IF LEFT$(str$,1)="&" str$=MID$(str$,2) 6110settype%=-1:num%=TRUE 6120FOR J%=1 TO LEN str$ 6130 IF INSTR("0123456789ABCDEFabcdef",MID$(str$,J%,1))<1 num%=FALSE 6140NEXT 6150IF num% THEN 6160 settype%=EVAL("&"+str$) 6170ELSE 6180 more%=0 6190 REPEAT 6200 SYS "XOS_ReadVarVal","File$Type_*",C%,18,more%,3 TO ,,len%,more% 6210 C%?len%=&D:str2$=FNlc(FNstrip($C%)) 6220 UNTIL more%<=0 OR str$=str2$ 6230 IF more%>0 THEN 6240 settype%=EVAL("&"+MID$(FNname(more%),11,3)) 6250 ENDIF 6260ENDIF 6270IF settype%>-1 THEN 6280 PROCfileraction(4) 6290 refresh%=TRUE 6300ELSE 6310 PROCbadtype 6320ENDIF 6330ENDPROC 6340: 6350DEFPROCbadtype 6360ans%=FNmsg("Bad file type","Cancel") 6370ENDPROC 6380: 6390DEFPROChelp 6400LOCAL app$ 6410sel%=FNsel:IF sel%=0 sel%(1)=chosen%:sel%=1 6420IF sel%=1 THEN 6430 app$=leaf$(sel%(1)) 6440 OSCLI("WimpTask Filer_Run "+dir$+"."+app$+".!Help") 6450ENDIF 6460ENDPROC 6470: 6480DEFPROCcount 6490PROCfileraction(5) 6500ENDPROC 6510: 6520DEFPROCfind($newname%) 6530find$=$newname%:PROCfileraction(9) 6540ENDPROC 6550: 6560DEFPROCstamp 6570PROCfileraction(8):refresh%=TRUE 6580ENDPROC 6590: 6600DEFPROCfileraction(n%) 6610LOCAL J%,taskh%,leaf$ 6620FilerAction%=FNfileraction:opts%=FNreadopts 6630sel%=FNsel:IF sel%=0 sel%(1)=chosen%:sel%=1 6640SYS &400DE,"Filer_Action" TO taskh% 6650FOR J%=1 TO sel% 6660 leaf$=leaf$(sel%(J%)) 6670 SYS &40F80,taskh%,dir$ 6680 SYS &40F81,taskh%,leaf$ 6690NEXT 6700CASE n% OF 6710 WHEN 0:REM Copy 6720 SYS &40F82,taskh%,0,opts%,ddir$,LENddir$+1 6730 WHEN 1:REM move/rename 6740 WHEN 2:REM Delete 6750 WHEN 3:REM Set access 6760 !q%=access% :SYS &40F82,taskh%,3,opts%+(recurse%<<4),q%,4 6770 WHEN 4:REM Set type 6780 !q%=settype%:SYS &40F82,taskh%,4,opts%,q%,4 6790 WHEN 5:REM Count 6800 SYS &40F82,taskh%,5,opts%,1 6810 WHEN 6:REM Move 6820 SYS &40F82,taskh%,6,opts%,ddir$,LENddir$+1 6830 WHEN 7:REM Copy local (within dir) 6840 WHEN 8:REM Stamp files 6850 SYS &40F82,taskh%,8,opts%,0 6860 WHEN 9:REM Find file 6870 SYS &40F82,taskh%,9,opts%,find$,LENfind$+1 6880ENDCASE 6890ENDPROC 6900: 6910REM--------------- 6920REM. FILER OPTIONS 6930REM--------------- 6940: 6950DEFFNreadopts 6960force%=(FNreadcmos(198)AND&10)DIV &10 6970confirm%=(FNreadcmos(198)AND&20)DIV&20 6980verbose%=(FNreadcmos(198)AND&40)DIV&40 6990newer%=(FNreadcmos(198)AND&80)DIV&80 7000o%=verbose%+(confirm%<<1)+(force%<<2)+(newer%<<3) 7010=o% 7020: 7030DEFPROCsetopts 7040LOCAL newer%,force%,verbose%,confirm% 7050verbose%=opts% AND 1 7060confirm%=(opts% AND 2)DIV2 7070force%=(opts% AND 4)DIV4 7080newer%=(opts% AND 8)DIV8 7090PROCsetcmos(198,force%<<4,&10) 7100PROCsetcmos(198,confirm%<<5,&20) 7110PROCsetcmos(198,verbose%<<6,&40) 7120PROCsetcmos(198,newer%<<7,&80) 7130ENDPROC 7140: 7150DEFFNreadcmos(ad%) 7160LOCAL byte% 7170SYS "OS_Byte",161,ad% TO ,,byte% 7180=byte% 7190: 7200DEFPROCsetcmos(ad%,byte%,mask%) 7210LOCAL byte2% 7220SYS "OS_Byte",161,ad% TO ,,byte2% 7230byte2%=(byte2% AND NOT mask%) OR byte% 7240SYS "OS_Byte",162,ad%,byte2% 7250ENDPROC 7260: 7270DEFFNcopyopts(delete%) 7280LOCAL o$,o%:o%=FNreadopts 7290o$="A" 7300IF confirm% o$+="C" ELSE o$+="~C" 7310IF delete% o$+="D" ELSE o$+="~D" 7320IF force% o$+="F" ELSE o$+="~F" 7330o$+="~L" 7340IF newer% o$+="N" ELSE o$+="~N" 7350o$+="~P~QR~S~T" 7360IF verbose% o$+="V" ELSE o$+="~V" 7370=o$ 7380: 7390DEFFNwipeopts 7400LOCAL o$,o%:o%=FNreadopts:o$="" 7410IF confirm% o$+="C" ELSE o$+="~C" 7420IF force% o$+="F" ELSE o$+="~F" 7430o$+="R" 7440IF verbose% o$+="V" ELSE o$+="~V" 7450=o$ 7460: 7470REM------------- 7480REM. TEXT BUFFER 7490REM------------- 7500: 7510DEFPROCgettext 7520REM get text from any text icon and place in buffer 7530REM continuously called from Poll if textflag%=TRUE 7540IF NOT textflag% ENDPROC 7550LOCAL dwh%,dih%,flag%,data%,text%,ind%,tsk%,text$ 7560dwh%=buffwind%:dih%=0 7570SYS "Wimp_GetCaretPosition",,C%:IF C%!0=dwh% dpos%=C%!20 7580SYS "Wimp_GetPointerInfo",,q% 7590smb%=q%!8:swh%=q%!12:sih%=q%!16 7600IF swh%=-2 OR swh%=dwh% OR smb%<>1 ENDPROC 7610IF FNdemo("Text buffer operations") THEN 7620 textflag%=FALSE:PROCui(buffwind%,1):ENDPROC 7630ENDIF 7640IF sih%=-4 THEN 7650 REM title bar 7660 !q%=swh%:SYS "Wimp_GetWindowInfo",,q% 7670 flag%=q%!60:data%=76 7680ELSE 7690 !q%=swh%:q%!4=sih% 7700 SYS "Wimp_GetIconState",,q% 7710 flag%=q%!24:data%=28 7720ENDIF 7730text%=FNbitset(flag%,0):ind%=FNbitset(flag%,8) 7740IF text% THEN 7750 text$="" 7760 tsk%=FNtaskhandle(swh%,sih%) 7770 IF ind% THEN 7780 SYS "Wimp_TransferBlock",tsk%,q%!data%,task%,C%,255 7790 text$=FNname(C%) 7800 ELSE 7810 text$=FNname(q%+data%) 7820 ENDIF 7830 PROCmovetext(text$,dwh%,dih%,dpos%) 7840ENDIF 7850textflag%=FALSE:PROCui(buffwind%,1) 7860ENDPROC 7870: 7880DEFPROCdragfiletobuff(path$,type%) 7890LOCAL n%,c%,s$ 7900IF FNdemo("Text buffer operations") ENDPROC 7910IF type%<>&FFF AND type%<>&FEB PROCbuzz:ENDPROC 7920F%=OPENUP(path$) 7930s$="":n%=0 7940WHILE (NOT EOF#F%) AND (n%<maxdesclen%-10) 7950 c%=BGET#F%:IF c%>31 s$+=CHR$c%:n%+=1 7960ENDWHILE 7970CLOSE#F%:F%=0 7980PROCmovetext(s$,buffwind%,0,0) 7990ENDPROC 8000: 8010DEFPROCloadsel(q%) 8020REM DataSave received from another task 8030IF FNdemo("Text buffer operations") ENDPROC 8040dwh%=q%!20:dih%=q%!24:type%=q%!40 8050IF dwh%<>buffwind% OR dih%<>0 ENDPROC 8060IF type%<>&FFF AND type%<>&FEB PROCbuzz:ENDPROC 8070REM send DataSaveAck 8080q%!36=-1:$(q%+44)="<Wimp$Scrap>"+CHR$0 8090q%!0=64:q%!12=q%!8:q%!16=2:REM DataSaveAck 8100SYS "Wimp_SendMessage",18,q%,q%!4 8110ENDPROC 8120: 8130DEFPROCputtext 8140REM transfer text from buffer to caret 8150IF FNdemo("Text buffer operations") ENDPROC 8160text$=FNit(buffwind%,0) 8170SYS "Wimp_GetCaretPosition",,C% 8180dwh%=C%!0:dih%=C%!4:dpos%=C%!20 8190IF dwh%=main% AND dih%>78 AND dih%<79+items% THEN 8200 PROCmovetext(text$,dwh%,dih%,dpos%) 8210ENDIF 8220ENDPROC 8230: 8240DEFPROCshiftdesc(swh%,sih%,dwh%,dih%,smb%) 8250REM dragged desc to buffer or other desc 8260IF dwh%=buffwind% AND dih%<>0 ENDPROC 8270IF (dwh%=buffwind% OR swh%=buffwind%) AND demo% THEN 8280 IF FNdemo("Text buffer operations") ENDPROC 8290ENDIF 8300IF dwh%=main% AND (dih%<79 OR dih%>157 OR dih%=sih%) ENDPROC 8310insert%=FNis(buffwind%,3) 8320IF insert% dpos%=FNdpos(dwh%,dih%) ELSE dpos%=0 8330text$=FNit(swh%,sih%) 8340PROCmovetext(text$,dwh%,dih%,dpos%) 8350IF INKEY-1 OR smb%=16 PROCit(swh%,sih%,""):PROCcaret(swh%,sih%) 8360ENDPROC 8370: 8380DEFFNdpos(dwh%,dih%) 8390REM chr pos of pointer in icon after drag 8400LOCAL mx% 8410SYS "Wimp_GetPointerInfo",,q%:mx%=q%!0 8420q%!0=dwh%:q%!4=dih%:SYS "Wimp_GetIconState",,q% 8430=(mx%-FNvax(dwh%,q%!8)) DIV 16 8440: 8450DEFPROCmovetext(ss$,dwh%,dih%,dpos%) 8460insert%=FNis(buffwind%,3) 8470ds$=FNit(dwh%,dih%) 8480e$="" 8490IF insert% THEN 8500 IF LENds$+LENss$>maxdesclen% e$="Too long to insert" 8510 IF LENds$=maxdesclen% e$="Destination buffer full" 8520 IF e$<>"" THEN 8530 ans%=FNmsg(e$,"Cancel") 8540 ELSE 8550 ss$=FNinsert(ss$,ds$,dpos%) 8560 ENDIF 8570ENDIF 8580IF e$="" THEN 8590 PROCit(dwh%,dih%,ss$):PROCcaret(dwh%,dih%):PROCbeep 8600 REPEAT:MOUSE x%,y%,b%:UNTIL b%=0 8610ENDIF 8620ENDPROC 8630: 8640DEFFNinsert(s$,d$,p%) 8650REM places s$ in d$ at pos p% 8660LOCAL l$,r$,maxl%:maxl%=255 8670IF p%<0 p%=0 ELSE IF p%>LENd$ p%=LENd$ 8680IF LENd$+LENs$>maxl% THEN=d$ 8690l$=LEFT$(d$,p%):r$=RIGHT$(d$,LENd$-p%) 8700=l$+s$+r$ 8710: 8720REM--------- 8730REM. CHOICES 8740REM--------- 8750: 8760DEFPROCloadchoices 8770LOCAL J%,fsp$,d$,s$,n%,wh%:wh%=choicewind% 8780fsp$=taskdir$+".Choices" 8790IF FNcheckobj(fsp$,TRUE) THEN 8800 H%=OPENUP(fsp$) 8810 s$=GET$#H%:REM taskdir$+".Choices" 8820 user$=GET$#H% 8830 n%=BGET#H% 8840 IF n%=0 demo%=TRUE ELSE demo%=FALSE 8850 FOR J%=6 TO 16 8860 n%=BGET#H% 8870 IF n%=1 PROCsi(wh%,J%) ELSE PROCui(wh%,J%) 8880 NEXT 8890 startdir$=GET$#H% 8900 CLOSE#H%:H%=0 8910 PROCsetchoices 8920ELSE 8930 PROCsetdefaults 8940ENDIF 8950ENDPROC 8960: 8970DEFPROCsetchoices 8980LOCAL J%,s%,wh%:wh%=choicewind% 8990openTiger%=FALSE:openbuff%=FALSE 9000promptsave%=FALSE:IconSprites%=FALSE:dragdesc%=FALSE 9010s%=FALSE 9020FOR J%=6 TO 8 9030 IF FNis(wh%,J%) s%=TRUE 9040NEXT 9050IF s%=FALSE PROCsi(wh%,6):REM default 9060IF FNis(wh%,6) startdir$=FNstrip(FNosvar("Root$Dir")) 9070IF FNis(wh%,7) THEN 9080 IF NOT FNcheckobj(startdir$,FALSE) PROCsi(wh%,6):PROCui(wh%,7) 9090 REM default to root if can't find user's startdir 9100ENDIF 9110IF FNis(wh%,8) startdir$="" 9120IF FNis(wh%,9) display%=1 9130IF FNis(wh%,10) display%=2 9140IF FNis(wh%,11) display%=3 9150IF FNis(wh%,12) openTiger%=TRUE 9160IF FNis(wh%,13) openbuff%=TRUE 9170IF FNis(wh%,14) promptsave%=TRUE 9180IF FNis(wh%,15) IconSprites%=TRUE 9190IF FNis(wh%,16) dragdesc%=TRUE 9200ENDPROC 9210: 9220DEFPROCprepchoicewind 9230LOCAL J%,wh%:wh%=choicewind% 9240FOR J%=6 TO 8:PROCui(wh%,J%):NEXT 9250CASE startdir$ OF 9260 WHEN FNstrip(FNosvar("Root$Dir")):PROCsi(wh%,6) 9270 WHEN dir$:PROCsi(wh%,7) 9280 WHEN "":PROCsi(wh%,8) 9290 OTHERWISE:PROCsi(wh%,6) 9300ENDCASE 9310CASE display% OF 9320 WHEN 1:PROCsi(wh%,9) 9330 WHEN 2:PROCsi(wh%,10) 9340 WHEN 3:PROCsi(wh%,11) 9350ENDCASE 9360IF openTiger% PROCsi(wh%,12) 9370IF openbuff% PROCsi(wh%,13) 9380IF promptsave% PROCsi(wh%,14) 9390IF IconSprites% PROCsi(wh%,15) 9400IF dragdesc% PROCsi(wh%,16) 9410ENDPROC 9420: 9430DEFPROCsetdefaults 9440LOCAL J%,wh%:wh%=choicewind% 9450FOR J%=6 TO 16:PROCui(wh%,J%):NEXT 9460PROCsi(wh%,6):PROCsi(wh%,9):PROCsi(wh%,12) 9470PROCsi(wh%,14):PROCsi(wh%,15):PROCsi(wh%,16) 9480PROCsetchoices 9490ENDPROC 9500: 9510DEFPROCsavechoices 9520LOCAL J%,fsp$,d$,n%,wh%:wh%=choicewind% 9530fsp$=taskdir$+".Choices" 9540H%=OPENOUT(fsp$) 9550BPUT#H%,task$+" choices" 9560BPUT#H%,user$ 9570IF demo% n%=0 ELSE n%=1 9580BPUT#H%,n% 9590FOR J%=6 TO 16 9600 IF FNis(wh%,J%) n%=1 ELSE n%=0 9610 BPUT#H%,n% 9620NEXT 9630IF FNis(wh%,7) d$=dir$ ELSE d$="" 9640BPUT#H%,d$ 9650OSCLI("SetType "+fsp$+" &FFF") 9660CLOSE#H%:H%=0 9670ENDPROC 9680: 9690REM---------- 9700REM. DRAGGING 9710REM---------- 9720: 9730DEFFNsoliddrag 9740REM modules present? (RISC OSEVAL3) 9750IF FNswi("DragASprite_Start")=-1 THEN=FALSE 9760IF FNswi("DragASprite_Stop") =-1 THEN=FALSE 9770REM bit 1 of byte 28 set? 9780SYS "OS_Byte",161,28 TO ,,cmos% 9790IF (cmos% AND 2)=0 THEN=FALSE 9800=TRUE 9810: 9820DEFFNfileraction 9830REM bit 2 of byte 28 set? 9840SYS "OS_Byte",161,28 TO ,,cmos% 9850IF (cmos% AND 4)=0 THEN=TRUE 9860=FALSE 9870: 9880DEFFNswi(swi$) 9890LOCAL swi%,flags% 9900SYS "XOS_SWINumberFromString",,swi$ TO swi%;flags% 9910IF (flags% AND 1) swi%=-1 9920=swi% 9930: 9940DEFPROCstartdrag(wh%,ih%,mb%,sol%) 9950swh%=wh%:sih%=ih%:smb%=mb%:REM source 9960REM get coords 9970q%!0=wh%:SYS "Wimp_GetWindowState",,q% 9980wminx%=q%!4:wminy%=q%!8:wmaxx%=q%!12:wmaxy%=q%!16:scrolly%=q%!24 9990ox%=q%!4-q%!20:oy%=q%!16-q%!24 10000SYS "Wimp_GetPointerInfo",,q%:mx%=q%!0:my%=q%!4:remb%=q%!8 10010q%!0=wh%:q%!4=ih%:SYS "Wimp_GetIconState",,q% 10020REM initial position of drag box 10030CASE swh% OF 10040 : 10050 WHEN messwind% 10060 sol%=FALSE 10070 q%!4=wh%:SYS "Wimp_GetWindowOutline",,q%+4 10080 q%!0=wh%:q%!4=5:REM drag type 10090 xos%=FNosxmax:yos%=FNosymax 10100 q%!24=0:q%!28=0:q%!32=xos%:q%!36=yos% 10110 : 10120 WHEN savebox%,copybox% 10130 q%!0=wh%:q%!4=5:sprad%=1 10140 q%!8=q%!8+ox%:q%!12=q%!12+oy%:q%!16=q%!16+ox%:q%!20=q%!20+oy% 10150 q%!24=0:q%!28=0:q%!32=&7FFFFFFF:q%!36=&7FFFFFFF 10160 : 10170 WHEN main% 10180 IF ih%=-1 THEN 10190 REM background - rubber band 10200 IF mx%-wminx%<244 THEN 10210 q%!0=wh%:SYS "Wimp_GetWindowState",,q% 10220 minx%=q%!4:miny%=q%!8:maxx%=q%!12:maxy%=q%!16 10230 IF maxx%>minx%+228 maxx%=minx%+228 10240 q%!0=wh%:q%!4=6:REM drag type 10250 q%!8=mx%:q%!12=my%:q%!16=mx%+4:q%!20=my%+4 10260 REM restrict parent box to visible area 10270 q%!24=minx%:q%!28=miny%:q%!32=maxx%:q%!36=maxy% 10280 ENDIF 10290 ENDIF 10300 : 10310 IF ih%>-1 AND ih%<79 THEN 10320 PROCsi(main%,ih%) 10330 sel%=FNsel 10340 q%!0=wh%:q%!4=5:sprad%=1:sol%=solid% 10350 q%!8=mx%:q%!12=my%:q%!16=mx%:q%!20=my% 10360 q%!24=0:q%!28=0:q%!32=&7FFFFFFF:q%!36=&7FFFFFFF 10370 ENDIF 10380 : 10390 IF ih%>78 AND display%=1 THEN 10400 REM descr 10410 IF NOT dragdesc% ENDPROC 10420 iminx%=FNvax(wh%,q%!8):iminy%=FNvay(wh%,q%!12) 10430 imaxx%=FNvax(wh%,q%!16):imaxy%=FNvay(wh%,q%!20) 10440 IF iminx%<wminx% iminx%=wminx% 10450 IF imaxx%>wmaxx% imaxx%=wmaxx% 10460 w%=(imaxx%-iminx%) DIV 2:h%=10:mode%=12 10470 PROCspritecreate("grab",w%,h%,mode%) 10480 REM write to sprite 10490 SYS "OS_SpriteOp",&100+60,spr%,"grab",0 TO r0%,r1%,r2%,r3% 10500 MOVE 6,32:VDU 5:PRINT FNit(wh%,ih%) 10510 SYS "OS_SpriteOp",r0%,r1%,r2%,r3% 10520 q%!0=wh%:q%!4=5:sprad%=spr%:sol%=solid% 10530 q%!8=iminx%:q%!12=iminy%+4:q%!16=imaxx%:q%!20=imaxy% 10540 q%!24=0:q%!28=0:q%!32=&7FFFFFFF:q%!36=&7FFFFFFF 10550 ENDIF 10560 : 10570 WHEN buffwind% 10580 iminx%=FNvax(wh%,q%!8):iminy%=FNvay(wh%,q%!12) 10590 imaxx%=FNvax(wh%,q%!16):imaxy%=FNvay(wh%,q%!20) 10600 w%=(imaxx%-iminx%) DIV 2:h%=10:mode%=12 10610 w%-=12 10620 PROCspritecreate("grab",w%,h%,mode%) 10630 REM write to sprite 10640 SYS "OS_SpriteOp",&100+60,spr%,"grab",0 TO r0%,r1%,r2%,r3% 10650 MOVE 4,32:VDU 5:PRINT FNit(wh%,0) 10660 SYS "OS_SpriteOp",r0%,r1%,r2%,r3% 10670 q%!0=wh%:q%!4=5:sprad%=spr%:sol%=solid% 10680 q%!8=iminx%:q%!12=iminy%+4:q%!16=imaxx%:q%!20=imaxy% 10690 q%!24=0:q%!28=0:q%!32=&7FFFFFFF:q%!36=&7FFFFFFF 10700 : 10710ENDCASE 10720: 10730IF sol% THEN 10740 spr$=FNspr(swh%,sih%):flags%=FNflags(spr$) 10750 SYS "DragASprite_Start",flags%,sprad%,spr$,q%+8 10760ELSE 10770 SYS "Wimp_DragBox",,q% 10780ENDIF 10790ENDPROC 10800: 10810DEFPROCspritecreate(spr$,w%,h%,mode%) 10820SYS "OS_SpriteOp",&100+15,spr%,spr$,0,w%,h%,mode% 10830ENDPROC 10840: 10850DEFFNspr(swh%,sih%) 10860LOCAL leaf$,type%,obj%,spr$:spr$="" 10870IF swh%=savebox% THEN="file_FFF" 10880IF swh%=main% AND sih%>78 AND sih%<79+items% THEN="grab" 10890IF swh%=buffwind% AND sih%=0 THEN="grab" 10900leaf$=leaf$(chosen%) 10910type%=FNfiletype(dir$+"."+leaf$) 10920obj%=FNobjtype(dir$+"."+leaf$) 10930IF sel%>1 obj%=4 10940CASE obj% OF 10950 WHEN 0:spr$="tigx" 10960 WHEN 1:spr$=FNfile(type%,1) 10970 WHEN 2:spr$=FNdir(leaf$,1) 10980 WHEN 3:spr$="file_"+STR$~type%:REM 'image' file 10990 WHEN 4:spr$="selection" 11000 OTHERWISE:spr$="file_xxx" 11010ENDCASE 11020=spr$ 11030: 11040DEFFNflags(spr$) 11050LOCAL f% 11060CASE spr$ OF 11070 WHEN "selection":f%=%01000101:REM no drop shadow 11080 OTHERWISE:f%=%11000101 11090ENDCASE 11100=f% 11110: 11120DEFPROCenddrag(q%,swh%,remb%,solid%) 11130REM reason code 7 from polling loop 11140REM q% contains final pos of drag box 11150bminx%=q%!0:bminy%=q%!4:bmaxx%=q%!8:bmaxy%=q%!12 11160CASE swh% OF 11170 WHEN main% 11180 CASE sih% OF 11190 WHEN -1 :PROCselect(bminy%,bmaxy%,remb%):REM rubber band 11200 OTHERWISE:PROCdrop(swh%,sih%,smb%):REM Filer/App/Pinboard/Iconbar/Tiger 11210 ENDCASE 11220 WHEN copybox%,savebox%,buffwind%:PROCdrop(swh%,sih%,smb%) 11230 WHEN messwind% 11240 q%!0=swh%:q%!4=bminx%:q%!8=bminy%-40:q%!12=bmaxx%:q%!16=bmaxy%-40 11250 q%!28=-1:SYS "Wimp_OpenWindow",,q%:SYS "Wimp_GetWindowState",,q% 11260 MOUSE RECTANGLE q%!4+8,q%!8+8,q%!12-q%!4-16,q%!16-q%!8-16 11270ENDCASE 11280ENDPROC 11290: 11300REM----------- 11310REM. SELECTION 11320REM----------- 11330: 11340DEFFNsel 11350REM how many items selected? 11360REM put items into array 11370LOCAL J%,n%:n%=0 11380FOR J%=1 TO items% 11390 IF FNis(main%,J%) n%+=1:sel%(n%)=J% 11400NEXT 11410=n% 11420: 11430DEFPROCselect(bminy%,bmaxy%,remb%) 11440IF bminy%>bmaxy% THEN SWAP bminy%,bmaxy% 11450REM rubber band dragged 11460REM which icons are in box? - get lo and hi 11470LOCAL J% 11480ih%=1 11490REPEAT 11500 !q%=main%:q%!4=ih%:SYS"Wimp_GetIconState",,q% 11510 iminy%=q%!12:iminy%=FNvay(main%,iminy%):ih%+=1 11520UNTIL iminy%<bmaxy% 11530lo%=ih%-1:ih%-=1 11540IF lo%>items% lo%=items% 11550REPEAT 11560 !q%=main%:q%!4=ih%:SYS"Wimp_GetIconState",,q% 11570 iminy%=q%!12:iminy%=FNvay(main%,iminy%):ih%+=1 11580UNTIL iminy%<bminy% 11590hi%=ih%-1 11600IF hi%>items% hi%=items% 11610REM treat according to remb% 11620IF lo%>0 THEN 11630 FOR J%=lo% TO hi% 11640 CASE remb% OF 11650 WHEN 4:PROCsi(main%,J%) 11660 WHEN 1:PROCti(main%,J%) 11670 ENDCASE 11680 NEXT 11690ENDIF 11700ENDPROC 11710: 11720DEFPROCselectall 11730sel%=FNsel 11740IF sel%<items% THEN 11750 FOR J%=1 TO items%:PROCsi(main%,J%):NEXT 11760ENDIF 11770ENDPROC 11780: 11790DEFPROCclearall 11800FOR J%=1 TO items% 11810 IF FNis(main%,J%) PROCui(main%,J%) 11820NEXT 11830ENDPROC 11840: 11850REM------ 11860REM. KEYS 11870REM------ 11880: 11890DEFPROCkeypress(q%) 11900wh%=q%!0:ih%=q%!4:xo%=q%!8:chr%=q%!24 11910CASE chr% OF 11920 WHEN 30:IF display%=1 PROChome 11930 WHEN 13:PROCreturn 11940 WHEN 27:PROCescape(wh%) 11950 WHEN 398:IF display%=1 PROCdown 11960 WHEN 399:IF display%=1 PROCup 11970 WHEN 385:PROCviewer(dir$):REM F1 11980 WHEN 386:PROCparent(dir$):REM F2 11990 WHEN 387:IF display%=1 PROCsavedata:REM F3 12000 WHEN 403:PROCow(savebox%):REM Shift F3 12010 WHEN 388:PROCtest:REM F4 12020 WHEN 389:PROCow(buffwind%):REM F5 12030 WHEN 392:PROCundo:REM F8 12040 WHEN 393:PROCredo:REM F9 12050 WHEN 394:PROCsize:REM Tab adjusts size 12060 OTHERWISE SYS "Wimp_ProcessKey",chr% 12070ENDCASE 12080ENDPROC 12090: 12100DEFPROCescape(wh%) 12110esc%=TRUE:IF wh%=messwind% PROCcw(wh%) 12120ENDPROC 12130: 12140DEFPROCtest 12150REM F4 12160ENDPROC 12170: 12180REM------- 12190REM. CARET 12200REM------- 12210: 12220DEFPROChome 12230IF wh%=main% THEN 12240 !C%=main%:SYS "Wimp_GetWindowState",,C% 12250 C%!20=0:C%!24=0:SYS "Wimp_OpenWindow",,C% 12260 PROCcaretx(wh%,79,0) 12270ENDIF 12280ENDPROC 12290: 12300DEFPROCreturn 12310ret%=TRUE 12320CASE wh% OF 12330 WHEN main% 12340 IF display%=1 THEN 12350 IF ih%=156 PROChome:ENDPROC 12360 IF ih%=79+items%-1 ENDPROC 12370 PROCscrolldown(wh%,ih%) 12380 PROCcaretx(wh%,ih%+1,0) 12390 ENDIF 12400 WHEN savebox% 12410 IF ih%=fnicon% PROCquicksave(wh%,ih%,&FFF) 12420 WHEN copybox%:PROCcopy("",remb%) 12430ENDCASE 12440ENDPROC 12450: 12460DEFPROCdown 12470IF wh%=main% THEN 12480 IF ih%=156 PROChome:ENDPROC 12490 IF ih%=79+items%-1 ENDPROC 12500 PROCscrolldown(wh%,ih%) 12510 PROCcaretx(wh%,ih%+1,xo%) 12520ENDIF 12530ENDPROC 12540: 12550DEFPROCup 12560IF wh%=main% THEN 12570 IF ih%=78 ENDPROC 12580 IF ih%=79 OR ih%=156 PROChome:ENDPROC 12590 PROCscrollup(wh%,ih%) 12600 PROCcaretx(wh%,ih%-1,xo%) 12610ENDIF 12620ENDPROC 12630: 12640DEFPROCscrolldown(wh%,ih%) 12650REM scroll va up? 12660LOCAL w%,i%,n% 12670REM get extreme window edge relative to wao 12680C%!0=wh%:SYS "Wimp_GetWindowState",,C%:w%=C%!24-(C%!16-C%!8) 12690REM get extreme edge of next icon relative to wao 12700C%!0=wh%:C%!4=ih%+1:SYS "Wimp_GetIconState",,C%:i%=C%!12 12710IF i%<w% THEN 12720 n%=ABS(i%)-ABS(w%):IF n%>44 n%=44:REM align with edge of window 12730 !C%=wh%:SYS "Wimp_GetWindowState",,C%:C%!24-=n% 12740 SYS "Wimp_OpenWindow",,C%:OSCLI("FX15") 12750ENDIF 12760ENDPROC 12770: 12780DEFPROCscrollup(wh%,ih%) 12790REM scroll va down? 12800LOCAL w%,i%,n% 12810REM get extreme window edge relative to wao 12820C%!0=wh%:SYS "Wimp_GetWindowState",,C%:w%=C%!24 12830REM get extreme edge of prev icon relative to wao 12840C%!0=wh%:C%!4=ih%-1:SYS "Wimp_GetIconState",,C%:i%=C%!20 12850IF i%>w% THEN 12860 n%=ABS(w%)-ABS(i%):IF n%>44 n%=44:REM align with edge of window 12870 !C%=main%:SYS "Wimp_GetWindowState",,C%:C%!24+=n% 12880 SYS "Wimp_OpenWindow",,C%:OSCLI("FX15") 12890ENDIF 12900ENDPROC 12910: 12920DEFPROCiconscroll 12930REM horizontal scroll of writable icons 12940SYS "Wimp_GetCaretPosition",,C%:IF C%!0<>main% ENDPROC 12950newi%=C%!4:newp%=C%!20 12960REM get window edges as chrs into icon 12970C%!0=main%:SYS "Wimp_GetWindowState",,C% 12980wl%=(C%!20-228)DIV16 12990wr%=(C%!20+(C%!12-C%!4)-228)DIV16 13000IF newp%>oldp% AND newp%>(wr%-1) THEN 13010 SYS "Wimp_GetCaretPosition",,C%:ix%=C%!20 13020 !C%=main%:SYS "Wimp_GetWindowState",,C% 13030 C%!20+=(ix%-oldp%)*16:SYS "Wimp_OpenWindow",,C% 13040ENDIF 13050IF newp%<oldp% AND (newp%<(wl%+1) OR newp%=0) THEN 13060 SYS "Wimp_GetCaretPosition",,C%:ix%=C%!20 13070 !C%=main%:SYS "Wimp_GetWindowState",,C% 13080 IF ix%=0 C%!20=0 ELSE C%!20-=(oldp%-ix%)*16 13090 SYS "Wimp_OpenWindow",,C% 13100ENDIF 13110oldi%=newi%:oldp%=newp% 13120ENDPROC 13130: 13140DEFPROCcaret(wh%,ih%) 13150LOCAL s$:s$=FNit(wh%,ih%) 13160SYS "Wimp_SetCaretPosition",wh%,ih%,,,-1,LENs$ 13170ENDPROC 13180: 13190DEFPROCcaretx(wh%,ih%,xo%) 13200SYS "Wimp_SetCaretPosition",wh%,ih%,xo%,,-1,-1 13210ENDPROC 13220: 13230REM------- 13240REM. MOUSE 13250REM------- 13260: 13270DEFPROCmouse(q%) 13280LOCAL m$,mx%,my%,mb%,wh%,ih% 13290mx%=q%!0:my%=q%!4:mb%=q%!8:wh%=q%!12:ih%=q%!16:icon%=ih% 13300remb%=mb% 13310IF mb% AND 2 PROCmenu(wh%,ih%,mx%,my%):ENDPROC 13320CASE wh% OF 13330 WHEN-2:REM icon bar 13340 IF ih%=baricon% THEN 13350 CASE mb% OF 13360 WHEN 1:SYS "Wimp_SetCaretPosition",-1 13370 REM Adj removes input focus 13380 WHEN 4: 13390 IF pristine% THEN 13400 ans%=FNmsg("Drag object from Filer window to Tiger icon","OK") 13410 ELSE 13420 PROCow(main%) 13430 IF NOT FNfocus(main%) THEN 13440 PROCcaretx(main%,156,0) 13450 IF display%=1 AND items%>0 PROCcaretx(main%,79,0) 13460 ENDIF 13470 ENDIF 13480 ENDCASE 13490 ENDIF 13500 : 13510 WHEN main% 13520 IF ih%=-1 THEN 13530 CASE mb% OF 13540 WHEN 4:PROCclearall:REM click with Sel 13550 WHEN 16,64:PROCstartdrag(wh%,ih%,mb%,FALSE) 13560 ENDCASE 13570 ENDIF 13580 IF ih%=0 THEN 13590 IF INKEY-1 PROCroot(dir$) ELSE PROCparent(dir$) 13600 ENDIF 13610 IF ih%>0 AND ih%<=items% THEN 13620 chosen%=ih% 13630 CASE mb% OF 13640 WHEN 1,4:PROCdoubleclick(mb%,ih%) 13650 WHEN 16,64:PROCstartdrag(wh%,ih%,mb%,solid%) 13660 WHEN 256,1024:PROCclick(mb%,ih%) 13670 ENDCASE 13680 ENDIF 13690 IF ih%>78 AND ih%<79+items% THEN 13700 CASE mb% OF 13710 WHEN 1,4 13720 PROCscrolldown(wh%,ih%-1):PROCscrollup(wh%,ih%+1) 13730 WHEN 16,64:PROCstartdrag(wh%,ih%,mb%,FALSE) 13740 ENDCASE 13750 ENDIF 13760 : 13770 WHEN savebox% 13780 CASE ih% OF 13790 WHEN dragicon% 13800 CASE mb% OF 13810 WHEN 16,64:PROCstartdrag(wh%,ih%,mb%,solid%) 13820 ENDCASE 13830 WHEN okicon%:PROCquicksave(wh%,ih%,&FFF) 13840 IF mb%<>1 PROCcw(wh%):PROCclosemenu 13850 WHEN clicon%:PROCcw(wh%):PROCclosemenu 13860 WHEN 13:IF mb%=1 AND NOT FNis(wh%,13):PROCsi(wh%,13) 13870 WHEN 14:IF mb%=1 AND NOT FNis(wh%,14):PROCsi(wh%,14) 13880 WHEN 15:IF mb%=1 AND NOT FNis(wh%,15):PROCsi(wh%,15) 13890 ENDCASE 13900 : 13910 WHEN copybox% 13920 CASE ih% OF 13930 WHEN dragicon% 13940 CASE mb% OF 13950 WHEN 16,64:PROCstartdrag(wh%,ih%,mb%,solid%) 13960 ENDCASE 13970 WHEN okicon%:PROCcopy("",remb%) 13980 WHEN clicon%:PROCclosemenu 13990 ENDCASE 14000 : 14010 WHEN choicewind% 14020 CASE ih% OF 14030 WHEN 2:PROCsetdefaults:IF mb%<>1 PROCcw(wh%):PROCclosemenu 14040 WHEN 3:PROCcw(wh%):PROCclosemenu 14050 WHEN 4:PROCsavechoices:IF mb%<>1 PROCcw(wh%):PROCclosemenu 14060 WHEN 5:PROCsetchoices:IF mb%<>1 PROCcw(wh%):PROCclosemenu 14070 WHEN12:IF NOT FNis(wh%,12) AND FNis(wh%,13) PROCui(wh%,13) 14080 WHEN13:IF FNis(wh%,13) AND NOT FNis(wh%,12) PROCui(wh%,13) 14090 ENDCASE 14100 : 14110 WHEN accesswind% 14120 IF ih%=0 THEN 14130 IF mb%=1 stay%=TRUE ELSE stay%=FALSE 14140 PROCaccess(2):IF mb%<>1 PROCclosemenu 14150 ENDIF 14160 : 14170 WHEN messwind%:reply%=ih% 14180 CASE mb% OF 14190 WHEN 16,64:PROCstartdrag(wh%,ih%,mb%,FALSE) 14200 ENDCASE 14210 : 14220 WHEN buffwind% 14230 CASE ih% OF 14240 WHEN 0:IF mb%=16 OR mb%=64 PROCstartdrag(wh%,ih%,mb%,FALSE) 14250 SYS "Wimp_GetCaretPosition",,C%:pos%=C%!20 14260 WHEN 1:IF FNis(wh%,1) textflag%=TRUE ELSE textflag%=FALSE 14270 WHEN 2:PROCputtext 14280 WHEN 3:IF mb%=1 AND NOT FNis(wh%,3):PROCsi(wh%,3) 14290 WHEN 4:IF mb%=1 AND NOT FNis(wh%,4):PROCsi(wh%,4) 14300 WHEN 5:PROCit(wh%,0,""):PROCcaret(wh%,0) 14310 ENDCASE 14320ENDCASE 14330ENDPROC 14340: 14350DEFPROCclick(mb%,ih%) 14360CASE mb% OF 14370 WHEN 1024:REM Sel 14380 IF NOT FNis(main%,ih%) PROCclearall:PROCsi(main%,ih%) 14390 WHEN 256:PROCti(main%,ih%):REM Adj 14400ENDCASE 14410ENDPROC 14420: 14430REM------ 14440REM. MENU 14450REM------ 14460: 14470DEFPROCmenu(wh%,ih%,mx%,my%) 14480REM middle button clicked 14490CASE wh% OF 14500 WHEN main% 14510 SYS "Wimp_GetPointerInfo",,q%:ih%=q%!16 14520 chosen%=0:IF ih%>0 AND ih%<=items% chosen%=ih% 14530 sel%=FNsel:IF sel%=1 chosen%=sel%(1) 14540 PROCmainmenu(mx%,my%,chosen%) 14550 WHEN -2:PROCbarmenu(mx%,my%) 14560ENDCASE 14570ENDPROC 14580: 14590DEFPROCmainmenu(mx%,my%,chosen%) 14600LOCAL J%,f%,b%,g%,n$,n2$,n3$,wid%,wh%,ih%,name$ 14610remx%=mx%:remy%=my%:present%=TRUE:n3$="" 14620name$="":n$="File ''":obj%=1:$newname%="" 14630IF chosen% THEN 14640 name$=leaf$(chosen%) 14650 REM is obj in Filer? 14660 present%=FNcheckobj(dir$+"."+name$,FALSE)=TRUE 14670 obj%=FNobjtype(dir$+"."+name$) 14680ENDIF 14690: 14700sel%=FNsel 14710IF sel%=1 OR chosen% THEN 14720 n2$="File ":n3$="File" 14730 IF obj%=2 n2$="Dir. ":n3$="Directory" 14740 IF obj%=2 AND LEFT$(name$,1)="!" n2$="App. ":n3$="Application" 14750 n$=n2$+"'"+name$+"'" 14760ENDIF 14770IF sel%>1 n$="Selection":n3$=n$:name$=n$ 14780: 14790$mi0%="Display":$mi1%=n$:$mi2%="Select all":$mi3%="Clear selection" 14800$mi4%="Options":$mi5%="New directory":$mi6%="Open filer F1" 14810$mi7%="Goto parent F2":$mi8%="Save data F3" 14820$mi9%="Save text "+CHR$139+"F3":$mi10%="Open buffer F5" 14830$mi11%="Undo changes F8":IF redo% $mi11%="Redo changes F9" 14840: 14850wid%=(LENn$+1)*16:IF wid%<256 wid%=256 14860a%=mb1%:!a%=main%:p%=a%+32:$(a%+4)=task$ 14870a%!16=&70207:a%!20=wid%:a%!24=44:a%!28=0 14880b%=&7000121:g%=&7400121:REM flags=black,grey (indirected) 14890: 14900p%!0=0:p%!4=mb4%:p%!8=b%:p%!12=mi0%:p%!16=-1:p%!20=16:p%+=24 14910IF name$="" OR NOT present% f%=g% ELSE f%=b% 14920p%!0=0:p%!4=mb2%:p%!8=f%:p%!12=mi1%:p%!16=-1:p%!20=16:p%+=24 14930IF items%=0 f%=g% ELSE f%=b% 14940p%!0=0:p%!4=0:p%!8=f%:p%!12=mi2%:p%!16=-1:p%!20=16:p%+=24 14950IF sel%=0 f%=g% ELSE f%=b% 14960p%!0=0:p%!4=0:p%!8=f%:p%!12=mi3%:p%!16=-1:p%!20=16:p%+=24 14970p%!0=0:p%!4=mb6%:p%!8=b%:p%!12=mi4%:p%!16=-1:p%!20=16:p%+=24 14980p%!0=10:p%!4=mb3%:p%!8=b%:p%!12=mi5%:p%!16=-1:p%!20=16:p%+=24 14990p%!0=0:p%!4=0:p%!8=b%:p%!12=mi6%:p%!16=-1:p%!20=16:p%+=24 15000IF FNisroot(dir$) f%=g% ELSE f%=b% 15010p%!0=0:p%!4=0:p%!8=f%:p%!12=mi7%:p%!16=-1:p%!20=16:p%+=24 15020IF display%=1 AND items%>0 f%=b% ELSE f%=g% 15030p%!0=0:p%!4=0:p%!8=f%:p%!12=mi8%:p%!16=-1:p%!20=16:p%+=24 15040IF items%>0 f%=b% ELSE f%=g% 15050p%!0=8:p%!4=savebox%:p%!8=f%:p%!12=mi9%:p%!16=-1:p%!20=16:p%+=24 15060p%!0=8:p%!4=0:p%!8=f%:p%!12=mi10%:p%!16=-1:p%!20=16:p%+=24 15070IF undo% OR redo% f%=b% ELSE f%=g% 15080p%!0=&80:p%!4=0:p%!8=f%:p%!12=mi11%:p%!16=-1:p%!20=16 15090: 15100b%=&7000021:g%=&7400021:REM flags=black,grey 15110a%=mb2%:p%=a%+28:$a%=n3$:f%=b% 15120a%!12=&70207:a%!16=168:a%!20=44:a%!24=0 15130IF sel%>1 OR name$="TigerData" f%=g% ELSE f%=b% 15140s$="Copy":p%!0=8:p%!4=copybox%:p%!8=f%:$(p%+12)=s$:p%+=24 15150IF name$="TigerData" OR sel%>1 f%=g% ELSE f%=b% 15160s$="Rename":p%!0=8:p%!4=mb3%:p%!8=f%:$(p%+12)=s$:p%+=24 15170IF name$="TigerData" f%=g% ELSE f%=b% 15180s$="Delete":p%!0=0:p%!4=0:p%!8=f%:$(p%+12)=s$:p%+=24 15190s$="Access":p%!0=8:p%!4=mb5%:p%!8=b%:$(p%+12)=s$:p%+=24 15200s$="Count":p%!0=0:p%!4=0:p%!8=b%:$(p%+12)=s$:p%+=24 15210IF FNhelp(name$,obj%) f%=b% ELSE f%=g% 15220s$="Help":p%!0=0:p%!4=0:p%!8=f%:$(p%+12)=s$:p%+=24 15230IF sel%>1 f%=g% ELSE f%=b% 15240s$="Info":p%!0=8:p%!4=objinfo%:p%!8=f%:$(p%+12)=s$:p%+=24 15250s$="Find":p%!0=8:p%!4=mb3%:p%!8=b%:$(p%+12)=s$:p%+=24 15260IF name$="TigerData" f%=g% ELSE f%=b% 15270s$="Set type":p%!0=8:p%!4=mb3%:p%!8=f%:$(p%+12)=s$:p%+=24 15280s$="Stamp":p%!0=0:p%!4=0:p%!8=f%:$(p%+12)=s$:p%+=24 15290IF name$="!TigerData" AND obj%=2 v%=0 ELSE v%=&80 15300IF obj%=1 f%=g% ELSE f%=b% 15310s$="Open filer":p%!0=v%:p%!4=0:p%!8=f%:$(p%+12)=s$:p%+=24 15320IF v%=0 s$="Convert":p%!0=&80:p%!4=0:p%!8=b%:$(p%+12)=s$ 15330: 15340a%=mb4%:p%=a%+28:$a%="Display":f%=b%:wid%=12*16+12 15350a%!12=&70207:a%!16=wid%:a%!20=44:a%!24=0 15360IF display%=1 t%=1 ELSE t%=0 15370s$="Descriptions":p%!0=t%:p%!4=0:p%!8=f%:$(p%+12)=s$:p%+=24 15380IF display%=2 t%=1 ELSE t%=0 15390s$="Object info":p%!0=t%:p%!4=0:p%!8=f%:$(p%+12)=s$:p%+=24 15400IF display%=3 t%=1 ELSE t%=0 15410s$="Nested size":p%!0=&80+t%:p%!4=0:p%!8=f%:$(p%+12)=s$ 15420: 15430a%=mb6%:p%=a%+28:$a%="Options":f%=b%:wid%=7*16+12 15440a%!12=&70207:a%!16=wid%:a%!20=44:a%!24=0 15450opts%=FNreadopts 15460t%=(opts% AND 2) DIV 2 15470s$="Confirm":p%!0=t%:p%!4=0:p%!8=f%:$(p%+12)=s$:p%+=24 15480t%=(opts% AND 1) 15490s$="Verbose":p%!0=t%:p%!4=0:p%!8=f%:$(p%+12)=s$:p%+=24 15500t%=(opts% AND 4) DIV 4 15510s$="Force":p%!0=t%:p%!4=0:p%!8=f%:$(p%+12)=s$:p%+=24 15520t%=(opts% AND 8) DIV 8 15530s$="Newer":p%!0=&80+t%:p%!4=0:p%!8=f%:$(p%+12)=s$ 15540SYS "Wimp_CreateMenu",,mb1%+4,mx%-64,my%+4 15550ENDPROC 15560: 15570DEFFNhelp(name$,obj%) 15580IF obj%=2 AND LEFT$(name$,1)="!" THEN 15590 IF FNcheckobj(dir$+"."+name$+"."+"!Help",FALSE) THEN=TRUE 15600ENDIF 15610=FALSE 15620: 15630DEFPROCsubmenu(q%) 15640LOCAL sub%,x%,y%:sub%=q%!20:x%=q%!24:y%=q%!28 15650CASE sub% OF 15660 WHEN mb3%:PROCnamemenu 15670 WHEN mb5%:PROCaccessmenu(FALSE,1) 15680 WHEN savebox%:PROCprepsavebox 15690 WHEN objinfo%:PROCprepobjinfo 15700 WHEN copybox%:PROCprepcopybox 15710 WHEN choicewind%:PROCprepchoicewind 15720ENDCASE 15730SYS "Wimp_CreateSubMenu",,sub%,x%,y% 15740ENDPROC 15750: 15760DEFPROCnamemenu 15770LOCAL J%,x%,y%,item%,name$,type%,type$ 15780item0%=q%!32:item1%=q%!36 15790a%=mb3%:p%=a%+28:wid%=12*16+16 15800name$=leaf$(chosen%) 15810oldname$=name$ 15820CASE item1% OF 15830 WHEN-1:IF item0%=5 $a%="Name:" 15840 WHEN 1:$a%="Name:":$newname%=name$ 15850 WHEN 7:$a%="Find file:" 15860 WHEN 8 15870 sel%=FNsel 15880 IF sel%>1 name$=$name%(sel%(1)) 15890 obj%=FNobjtype(dir$+"."+name$) 15900 IF obj%=1 THEN 15910 type%=FNfiletype(dir$+"."+name$) 15920 type$=FNstrip(FNfiletypename(type%)) 15930 ELSE 15940 type$="" 15950 ENDIF 15960 $a%="Set type":$newname%=type$ 15970ENDCASE 15980a%!12=&70207:a%!16=176:a%!20=44:a%!24=0:f%=&7000121 15990p%!0=&84:p%!4=0:p%!8=f%:p%!12=newname%:p%!16=valname%:p%!20=11 16000ENDPROC 16010: 16020DEFPROCbarmenu(mx%,my%) 16030LOCAL f%,b%,g%:b%=&7000021:g%=&7400021:REM flags=black,grey 16040remx%=mx%:remy%=my%:i%=0 16050a%=mb1%:!a%=baricon%:p%=a%+32:$(a%+4)=task$ 16060a%!16=&70207:a%!20=128:a%!24=44:a%!28=0 16070s$="Info":p%!0=0:p%!4=info%:p%!8=b%:$(p%+12)=s$:p%+=24:i%+=1 16080IF pristine% f%=g% ELSE f%=b% 16090s$="Choices":p%!0=8:p%!4=choicewind%:p%!8=f%:$(p%+12)=s$:p%+=24:i%+=1 16100s$="Quit":p%!0=&80:p%!4=0:p%!8=b%:$(p%+12)=s$:i%+=1 16110SYS "Wimp_CreateMenu",,mb1%+4,mx%-64,96+i%*44 16120ENDPROC 16130: 16140DEFPROCclosemenu 16150SYS "Wimp_CreateMenu",,-1 16160ENDPROC 16170: 16180DEFPROCmenuselect(q%) 16190REM click on menu from polling loop 16200level0%=q%!0:level1%=q%!4:level2%=q%!8:wh%=!mb1% 16210SYS "Wimp_GetPointerInfo",,q%:stay%=q%!8=1 16220CASE wh% OF 16230 WHEN main%:PROCmainchoice 16240 OTHERWISE :PROCbarchoice 16250ENDCASE 16260ENDPROC 16270: 16280DEFPROCmainchoice 16290REM click on main menu 16300CASE level0% OF 16310 WHEN 0: 16320 CASE level1% OF 16330 WHEN -1:PROCrefresh 16340 WHEN 0:display%=1:PROCrefresh 16350 WHEN 1:display%=2:PROCrefresh 16360 WHEN 2:display%=3:PROCrefresh 16370 ENDCASE 16380 WHEN 1: 16390 CASE level1% OF 16400 WHEN 0:REM Copy (drag/click) 16410 WHEN 1 16420 IF level2%>=0 PROCrename(oldname$,$newname%) 16430 WHEN 2:PROCdelete 16440 WHEN 3:IF level2%>=0 PROCaccess(1) 16450 WHEN 4:PROCcount 16460 WHEN 5:PROChelp 16470 WHEN 6:REM Info 16480 WHEN 7:IF level2%>=0 PROCfind($newname%) 16490 WHEN 8:IF level2%>=0 PROCsettype 16500 WHEN 9:PROCstamp 16510 WHEN10:OSCLI("Filer_OpenDir "+dir$+"."+$name%(chosen%)) 16520 WHEN11:PROCconvert 16530 ENDCASE 16540 WHEN 2:PROCselectall 16550 WHEN 3:PROCclearall 16560 WHEN 4 16570 CASE level1% OF 16580 WHEN 0:opts%=opts% EOR 2 16590 WHEN 1:opts%=opts% EOR 1 16600 WHEN 2:opts%=opts% EOR 4 16610 WHEN 3:opts%=opts% EOR 8 16620 ENDCASE 16630 PROCsetopts 16640 WHEN 5:IF level1%=0 PROCnewdir($newname%) 16650 WHEN 6:PROCviewer(dir$) 16660 WHEN 7:PROCparent(dir$) 16670 WHEN 8:PROCsavedata 16680 WHEN 9:PROCprepsavebox:PROCow(savebox%):PROCclosemenu 16690 PROCcaret(savebox%,fnicon%) 16700 WHEN10:PROCow(buffwind%) 16710 WHEN11:IF undo% PROCundo ELSE IF redo% PROCredo 16720ENDCASE 16730IF stay% PROCmainmenu(remx%,remy%,chosen%) 16740ENDPROC 16750: 16760DEFPROCnewdir(d$) 16770OSCLI("CDir "+dir$+"."+d$) 16780ENDPROC 16790: 16800DEFPROCbarchoice 16810CASE level0% OF 16820 WHEN 1:PROCprepchoicewind:PROCow(choicewind%) 16830 WHEN 2:quit%=FNquit 16840ENDCASE 16850IF stay% PROCbarmenu(remx%,remy%) 16860ENDPROC 16870: 16880REM------ 16890REM. LOAD 16900REM------ 16910: 16920DEFPROCdataload(q%) 16930LOCAL wh%:wh%=q%!20 16940REM send DataLoadAck 16950q%!12=q%!8:q%!16=4:q%!0=64:SYS "Wimp_SendMessage",17,q%,q%!4 16960z%+=1:IF z%>1 ENDPROC:REM don't want selection 16970path$=FNname(q%+44):type%=q%!40:dir%=type%=&1000 OR type%=&2000 16980IF wh%=buffwind% PROCdragfiletobuff(path$,type%):ENDPROC 16990IF FNpromptsave THEN 17000 IF sender%=task% AND wh%=main% THEN 17010 PROCcopy(FNparent(path$),remb%) 17020 ENDIF 17030 IF (sender%=task% AND wh%=-2) OR (sender%<>task%) THEN 17040 IF INKEY-1 AND dir% THEN dir$=path$ ELSE dir$=FNparent(path$) 17050 windowstate%=1:IF pristine% windowstate%=2:REM centre 17060 pristine%=FALSE 17070 PROCshowTiger(windowstate%) 17080 ENDIF 17090ENDIF 17100ENDPROC 17110: 17120DEFPROCshowTiger(windowstate%) 17130LOCAL ERROR 17140ON ERROR LOCAL ans%=FNlocalerror(dir$,REPORT$,ERR):ENDPROC 17150PROCcw(main%) 17160SYS "Hourglass_On" 17170PROCreadfiles(dir$,display%,1) 17180PROCnostar 17190PROCit(savebox%,fnicon%,dir$+"."+"TigerText") 17200IF display%=2 extent%=1120 ELSE extent%=width% 17210PROCsetextent(main%,-((items%+1)*44)-8,extent%) 17220PROCsetbuttontypes(items%) 17230CASE windowstate% OF 17240 WHEN 0:ENDPROC 17250 WHEN 1:PROCow(main%) 17260 WHEN 2:PROCowc(main%):REM in centre 17270ENDCASE 17280PROCcaretx(main%,156,0) 17290IF display%=1 AND items%>0 PROCcaretx(main%,79,0) 17300SYS "Hourglass_Smash" 17310ENDPROC 17320: 17330DEFFNloadTigerData(fsp$) 17340REM loads TigerData file into memory at A% 17350REM places name and desc in arrays 17360REM returns number of items in TigerData 17370: 17380LOCAL J%,s$,filelen%,ok%,s%,descs%,p% 17390REM get length of file and increase slot size 17400SYS "OS_File",5,fsp$ TO ,,,,filelen% 17410ok%=FNsetslotsize(remslotsize%+filelen%) 17420IF NOT ok% ans%=FNmsg("No memory to load TigerData","Cancel") 17430IF filelen%=0 OR NOT ok% THEN 17440 descs%=0 17450ELSE 17460 REM load file into memory at A% 17470 SYS "OS_File",&FF,fsp$,A%,0 17480 REM get data into arrays 17490 name$()="":desc$()="" 17500 J%=1:p%=A% 17510 REPEAT 17520 s$=FNname(p%):s%=INSTR(s$," ") 17530 name$(J%)=LEFT$(s$,s%-1) 17540 desc$(J%)=RIGHT$(s$,LENs$-s%) 17550 J%+=1:p%+=LENs$+1 17560 UNTIL p%>=A%+filelen% 17570 descs%=J%-1 17580 REM restore slot size 17590 slotsize%=FNsetslotsize(remslotsize%) 17600ENDIF 17610=descs% 17620: 17630DEFPROCwriteTigerData(descs%) 17640REM takes data from arrays and creates TigerData file 17650LOCAL J% 17660F%=OPENOUT(fsp$):OSCLI("SetType "+fsp$+" &4FF") 17670FOR J%=1 TO descs% 17680 IF name$(J%)<>"" BPUT#F%,name$(J%)+" "+desc$(J%) 17690NEXT 17700CLOSE #F%:F%=0 17710ENDPROC 17720: 17730DEFFNdirdesc(dir$) 17740REM look for description of this dir in its parent 17750REM is there a TigerData file? 17760LOCAL leaf$,fsp$,desc$ 17770leaf$=FNleaf(dir$) 17780IF leaf$="$" THEN=" (root directory)" 17790IF leaf$="&" THEN=" (user root directory)" 17800fsp$=FNparent(dir$)+".TigerData" 17810desc$="" 17820SYS "OS_File",5,fsp$ TO o% 17830IF o%=1 THEN 17840 descs%=FNloadTigerData(fsp$) 17850 desc$=FNdesc(leaf$,descs%) 17860ENDIF 17870IF desc$<>"" desc$=" - "+desc$ 17880=desc$ 17890: 17900DEFFNdesc(leaf$,descs%) 17910REM search arrays for description for leaf$ 17920LOCAL J%,desc$:desc$="" 17930FOR J%=1 TO descs% 17940 IF name$(J%)=leaf$ desc$=desc$(J%):J%=descs% 17950NEXT 17960=desc$ 17970: 17980DEFPROCreadfiles(d$,display%,n%) 17990LOCAL J%,more%,next%,max%,tot%,s$,f$,fl%,f%,name$,type%,obj% 18000: 18010IF n%=1 THEN 18020 PROCsis(main%,0,&1B003135) 18030 name$=FNstrip(FNleaf(FNparent(d$))) 18040 name$=CHR$139+STRING$(11-LENname$," ")+name$ 18050 IF FNisroot(d$) name$="" 18060 $name%(0)=name$:$val%(0)="R5,2" 18070 fl%=&07000131:REM make descr icons non-writable 18080 PROCsis(main%,156,&BB00E134):REM can gain input focus 18090ENDIF 18100: 18110s$=FNleaf(d$) 18120CASE display% OF 18130 WHEN 1:s$+=FNdirdesc(d$):fl%=&0700E131:REM writable 18140 WHEN 2:s$+=" - object information" 18150 WHEN 3:s$+=" - nested size: total bytes=" 18160ENDCASE 18170$desc%(0)=s$ 18180: 18190REM is there a TigerData file? 18200fsp$=dir$+".TigerData" 18210SYS "OS_File",5,fsp$ TO o%:descs%=0 18220IF o%=1 descs%=FNloadTigerData(fsp$) 18230: 18240J%=1:next%=0:max%=0:tot%=0:undo$()="" 18250REPEAT 18260 SYS "OS_GBPB",10,d$,q%,1,next%,100,"*" TO ,,,more%,next% 18270 IF more% THEN 18280 name$=FNname(q%+20) 18290 type%=FNfiletype(d$+"."+name$) 18300 obj%=q%!16 18310 leaf$(J%)=name$ 18320 $name%(J%)=LEFT$(name$,10)+STRING$(10-LENname$," ") 18330 : 18340 IF n%=1 THEN 18350 IF IconSprites% THEN 18360 IF obj%=2 AND LEFT$(name$,1)="!" THEN 18370 REM is there a !Sprites file? 18380 f$=d$+"."+name$+".!Sprites" 18390 SYS "OS_File",5,f$ TO o% 18400 IF o%=1 OSCLI("IconSprites "+f$) 18410 ENDIF 18420 ENDIF 18430 hs%=FALSE 18440 CASE obj% OF 18450 WHEN 1,3:ft$=FNfile(type%,0) 18460 WHEN 2:ft$=FNdir(name$,0) 18470 OTHERWISE:ft$="small_xxx" 18480 ENDCASE 18490 IF hs% f%=&1700AB3B ELSE f%=&1700A33B 18500 PROCsis(main%,J%,f%):PROCsis(main%,J%+78,fl%) 18510 $val%(J%)="S"+ft$ 18520 ENDIF 18530 : 18540 CASE display% OF 18550 WHEN 1: 18560 s$=FNdesc(name$,descs%) 18570 IF name$="TigerData" s$=tigstr$ 18580 $desc%(J%)=s$:undo$(J%)=s$ 18590 WHEN 2: 18600 o%=FNgetobjinfo(d$+"."+name$) 18610 s$="" 18620 s$+=type$+STRING$(13-LENtype$," ") 18630 s$+=STRING$(9-LENfilelen$," ")+filelen$ 18640 s$+=" "+access$+STRING$(6-LENaccess$," ") 18650 s$+=" "+date$+" "+time$ 18660 $desc%(J%)=s$:undo$(J%)=s$ 18670 WHEN 3: 18680 recursing%=TRUE:counting%=TRUE 18690 SYS "OS_Byte",229,0,0 :REM enable Esc 18700 SYS "OS_FSControl",28,d$+"."+name$,0,1 TO ,,bytes% 18710 len%(J%)=bytes%:tot%+=bytes%:IF bytes%>max% max%=bytes% 18720 SYS "OS_Byte",229,1,0 :REM disable Esc 18730 recursing%=FALSE:counting%=FALSE 18740 ENDCASE 18750 J%+=1 18760 ENDIF 18770UNTIL next%=-1 18780items%=J%-1 18790: 18800IF display%=3 THEN 18810 $desc%(0)+=STR$tot% 18820 IF max%>0 THEN 18830 FOR J%=1 TO items% 18840 c%=len%(J%)/max%*84 18850 sp%=LEN(STR$max%) 18860 s$=RIGHT$(STRING$(sp%," ")+STR$len%(J%),sp%) 18870 s$+=" "+STRING$(c%,"+") 18880 $desc%(J%)=s$:undo$(J%)=s$ 18890 NEXT 18900 ENDIF 18910ENDIF 18920: 18930IF n%=1 THEN 18940 IF items%>0 PROCsis(main%,156,&BB006134):REM can't gain input focus 18950 REM set flags for top line - only writable if too long to see 18960 IF LEN($desc%(0))>columns%-17 f%=&1B00E131 ELSE f%=&1B000131 18970 PROCsis(main%,78,f%) 18980ENDIF 18990ENDPROC 19000: 19010DEFFNfile(type%,size%) 19020REM sprite name for file type 19030REM size%=0 is small, 1 is full size 19040REM hs% is TRUE if needs to be displayed half size 19050LOCAL f$,f% 19060hs%=FALSE 19070CASE size% OF 19080 WHEN 0:f$="small_"+STR$~type% 19090 WHEN 1:f$="file_"+STR$~type% 19100ENDCASE 19110SYS "XWimp_SpriteOp",24,,f$ TO ;f% 19120IF (f% AND 1)=0 THEN=f$ 19130IF size%=1 THEN="file_xxx" 19140f$="file_"+STR$~type% 19150SYS "XWimp_SpriteOp",24,,f$ TO ;f% 19160IF (f% AND 1)=0 hs%=TRUE:=f$ 19170="small_xxx" 19180: 19190DEFFNdir(name$,size%) 19200REM sprite name for dir 19210REM size%=0 is small, 1 is full size 19220REM hs% is TRUE if needs to be displayed half size 19230LOCAL f$,f% 19240hs%=FALSE 19250IF LEFT$(name$,1)<>"!" THEN 19260 CASE size% OF 19270 WHEN 0:="small_dir" 19280 WHEN 1:="directory" 19290 ENDCASE 19300ENDIF 19310REM it's an App 19320CASE size% OF 19330 WHEN 0:f$="sm"+name$ 19340 WHEN 1:f$=name$ 19350ENDCASE 19360SYS "XWimp_SpriteOp",24,,f$ TO ;f% 19370IF (f% AND 1)=0 THEN=f$ 19380f$=name$ 19390IF size%=0 THEN 19400 SYS "XWimp_SpriteOp",24,,f$ TO ;f% 19410 IF (f% AND 1)=0 hs%=TRUE:=f$ 19420ENDIF 19430CASE size% OF 19440 WHEN 0:="small_app" 19450 WHEN 1:="application" 19460ENDIF 19470="" 19480: 19490DEFPROCsetbuttontypes(items%) 19500LOCAL f1%,f2%,f3% 19510f1%=&11000000:REM background,non-writable 19520IF display%=1 f2%=&0700E131:REM writable 19530IF display%<>1 f2%=&07000131:REM non-writable 19540CASE items% OF 19550 WHEN 0 :PROCsis(main%,01,f1%):PROCsis(main%,02,f1%) 19560 PROCsis(main%,79,f1%):PROCsis(main%,80,f1%) 19570 WHEN 1 :PROCsis(main%,02,f1%):PROCsis(main%,79,f2%) 19580 PROCsis(main%,80,f1%) 19590 OTHERWISE:PROCsis(main%,79,f2%):PROCsis(main%,80,f2%) 19600ENDCASE 19610ENDPROC 19620: 19630REM--------- 19640REM. EXECUTE 19650REM--------- 19660: 19670DEFPROCdoubleclick(mb%,ih%) 19680LOCAL name$,obj%:REM job$ is global 19690IF ih%<0 ENDPROC 19700PROCui(main%,ih%) 19710name$=leaf$(chosen%) 19720REM is obj in Filer? 19730IF NOT FNcheckobj(dir$+"."+name$,TRUE) ENDPROC 19740IF mb%=1 OR mb%=16 PROCcw(main%):REM Adj 19750job$=dir$+"."+name$ 19760obj%=FNobjtype(job$) 19770CASE obj% OF 19780 WHEN 1,3:REM File,Image 19790 filetype%=FNfiletype(job$) 19800 PROCrun(job$,obj%) 19810 WHEN 2:REM Dir 19820 IF LEFT$(name$,1)="!" THEN 19830 IF INKEY-1 THEN 19840 PROCsubdir(dir$,name$) 19850 ELSE 19860 PROCrun(job$,obj%) 19870 ENDIF 19880 ELSE 19890 PROCsubdir(dir$,name$) 19900 ENDIF 19910ENDCASE 19920ENDPROC 19930: 19940DEFPROCrun(job$,obj%) 19950LOCAL filetype% 19960IF obj%=0 ENDPROC 19970CASE obj% OF 19980 WHEN 1,3:REM File,Image 19990 filetype%=FNfiletype(job$) 20000 q%!0=(48+LENjob$) AND NOT 3 20010 q%!12=0:q%!16=5:REM DataOpen 20020 q%!20=0:q%!28=0:q%!32=0:q%!36=0 20030 q%!40=filetype%:$(q%+44)=job$+CHR$0 20040 REM broadcast message - sent to all tasks 20050 SYS"Wimp_SendMessage",18,q%,0 20060 WHEN 2:REM App 20070 SYS "Wimp_StartTask","Run "+job$ 20080 ENDCASE 20090ENDIF 20100ENDPROC 20110: 20120DEFPROCsubdir(RETURN dir$,name$) 20130IF name$="!TigerData" ENDPROC 20140rem$=dir$+"."+name$ 20150IF FNpromptsave THEN 20160 dir$=rem$:PROCshowTiger(1) 20170ENDIF 20180ENDPROC 20190: 20200DEFPROCrefresh 20210LOCAL J% 20220REM refresh Tiger display 20230IF FNcheckobj(dir$,TRUE) THEN 20240 IF FNpromptsave PROCshowTiger(1) 20250ELSE 20260 IF star% FOR J%=1 TO items%:$desc%(J%)=undo$(J%):NEXT 20270 PROCnostar:PROCcw(main%):ENDPROC 20280ENDIF 20290PROCcw(savebox%) 20300ENDPROC 20310: 20320DEFPROCundo:REM F8 20330LOCAL J%,wh%,ih%:IF NOT undo% ENDPROC 20340FOR J%=1 TO items% 20350 redo$(J%)=$desc%(J%) 20360 $desc%(J%)=undo$(J%) 20370NEXT 20380C%!0=main%:SYS "Wimp_GetWindowOutline",,C% 20390SYS "Wimp_ForceRedraw",-1,C%!4,C%!8,C%!12,C%!16 20400SYS "Wimp_GetCaretPosition",,C% 20410wh%=C%!0:ih%=C%!4 20420IF wh%=main% AND ih%>78 PROCcaretx(wh%,ih%,0) 20430PROCnostar:redo%=TRUE:undo%=FALSE 20440ENDPROC 20450: 20460DEFPROCredo:REM F9 20470LOCAL J%,wh%,ih%:IF NOT redo% ENDPROC 20480FOR J%=1 TO items% 20490 undo$(J%)=$desc%(J%) 20500 $desc%(J%)=redo$(J%) 20510NEXT 20520C%!0=main%:SYS "Wimp_GetWindowOutline",,C% 20530SYS "Wimp_ForceRedraw",-1,C%!4,C%!8,C%!12,C%!16 20540SYS "Wimp_GetCaretPosition",,C% 20550wh%=C%!0:ih%=C%!4 20560IF wh%=main% AND ih%>78 PROCcaretx(wh%,ih%,0) 20570PROCstar:undo%=TRUE:redo%=FALSE 20580ENDPROC 20590: 20600DEFPROCparent(RETURN dir$) 20610LOCAL J%,parent$ 20620parent$=FNparent(dir$) 20630IF FNisroot(dir$) ENDPROC 20640IF FNcheckobj(parent$,TRUE) THEN 20650 IF FNpromptsave dir$=parent$:PROCshowTiger(1) 20660ELSE 20670 IF star% FOR J%=1 TO items%:$desc%(J%)=undo$(J%):NEXT 20680 PROCnostar:PROCcw(main%):ENDPROC 20690ENDIF 20700ENDPROC 20710: 20720DEFPROCroot(fsp$) 20730IF FNisroot(fsp$) ENDPROC 20740dir$=FNroot(fsp$):PROCshowTiger(1) 20750ENDPROC 20760: 20770DEFFNisroot(path$) 20780LOCAL leaf$ 20790leaf$=FNleaf(path$) 20800=leaf$="$" OR leaf$="&" 20810: 20820DEFFNroot(fsp$) 20830LOCAL i% 20840i%=INSTR(fsp$,"$") 20850IF i%>0 THEN=LEFT$(fsp$,i%) 20860="" 20870: 20880DEFPROCviewer(dir$) 20890IF FNcheckobj(dir$,TRUE) THEN OSCLI("Filer_OpenDir "+dir$) 20900ENDPROC 20910: 20920REM------------ 20930REM. CHECK-SAVE 20940REM------------ 20950: 20960DEFFNquit 20970esc%=TRUE 20980IF FNpromptsave THEN OSCLI("Unset Tiger$Running"):=TRUE 20990=FALSE 21000: 21010DEFFNchanged 21020LOCAL J%,ch%:J%=1:ch%=FALSE 21030REPEAT 21040 IF $desc%(J%)<>undo$(J%) ch%=TRUE 21050 J%+=1 21060UNTIL J%>items% OR ch% 21070=ch% 21080: 21090DEFFNpromptsave 21100IF NOT star% THEN=TRUE 21110IF NOT promptsave% PROCsavedata:=TRUE 21120ans%=FNmsg("Save edited descriptions?","Discard,Cancel,Save") 21130IF ans%=1 THEN=TRUE 21140IF ans%=3 PROCsavedata:=TRUE 21150=FALSE:REM Cancel operation 21160: 21170REM----------- 21180REM. SAVE DATA 21190REM----------- 21200: 21210DEFPROCsavedata 21220LOCAL J%,fsp$ 21230IF NOT FNcheckobj(dir$,TRUE) THEN ENDPROC 21240SYS "Hourglass_On" 21250fsp$=dir$+".TigerData" 21260F%=OPENOUT(fsp$) 21270OSCLI("SetType "+fsp$+" &4FF") 21280FOR J%=1 TO items% 21290 name$=leaf$(J%) 21300 desc$=FNit(main%,J%+78):olddesc$=undo$(J%):undo$(J%)=desc$ 21310 IF desc$<>"" AND name$<>"TigerData" BPUT#F%,name$+" "+desc$ 21320NEXT 21330CLOSE #F%:F%=0 21340PROCnostar 21350SYS "Hourglass_Smash":PROCbeep 21360ENDPROC 21370: 21380REM-------------- 21390REM. CONVERT DATA 21400REM-------------- 21410: 21420DEFPROCconvert 21430REM transfer descriptions from !TigerData 21440REM and merge with any in TigerData 21450REM optionally delete !TigerData afterwards 21460LOCAL J%,d$,name$ 21470 : 21480REM does dir$ have a TigerData file? 21490REM If so place in memory and load arrays 21500descs%=0 21510d$=dir$+".TigerData":present%=FNcheckobj(d$,FALSE) 21520IF present% descs%=FNloadTigerData(d$) 21530: 21540REM read files in Data dir 21550d$=dir$+".!TigerData.Data" 21560present%=FNcheckobj(d$,TRUE):IF NOT present% ENDPROC 21570SYS "Hourglass_On" 21580next%=0 21590REPEAT 21600 SYS "OS_GBPB",10,d$,q%,1,next%,100,"*" TO ,,,more%,next% 21610 IF more% THEN 21620 name$=FNname(q%+20) 21630 type%=FNfiletype(d$+"."+name$) 21640 IF type%=&2FF THEN 21650 REM extract name,desc and add to arrays 21660 F%=OPENUP(d$+"."+name$) 21670 found%=FALSE 21680 FOR J%=1 TO descs% 21690 IF name$(J%)=name$ found%=TRUE:J%=descs% 21700 NEXT 21710 IF NOT found% THEN 21720 descs%+=1 21730 name$(descs%)=name$:desc$(descs%)=GET$#F% 21740 ENDIF 21750 CLOSE #F%:F%=0 21760 ENDIF 21770 ENDIF 21780UNTIL next%=-1 21790PROCwriteTigerData(descs%) 21800: 21810ans%=FNmsg("!TigerData is now redundant,OK to delete it?","Retain,Delete") 21820IF ans%=2 THEN 21830 REM delete !TigerData 21840 SYS "Hourglass_On" 21850 FilerAction%=FNfileraction:opts%=FNreadopts 21860 IF FilerAction% THEN 21870 SYS &400DE,"Filer_Action" TO taskh% 21880 ELSE 21890 $C%="Delete files":SYS "Wimp_CommandWindow",C% 21900 ENDIF 21910 s$=dir$+".!TigerData" 21920 PROCwipe(s$,FilerAction%) 21930 IF FilerAction% THEN 21940 SYS &40F82,taskh%,2,opts% 21950 ELSE 21960 SYS "Wimp_CommandWindow",0 21970 ENDIF 21980ENDIF 21990: 22000PROCshowTiger(1) 22010PROCsavedata 22020SYS "Hourglass_Smash" 22030ENDPROC 22040: 22050REM----------- 22060REM. SAVE TEXT 22070REM----------- 22080: 22090DEFPROCprepsavebox 22100LOCAL J%,wh%:wh%=savebox% 22110FOR J%=5 TO 10:PROCsis(wh%,J%,&1720B133):NEXT 22120CASE display% OF 22130 WHEN 1:PROCit(wh%,10,"Description") 22140 WHEN 2:PROCit(wh%,10,"Object info") 22150 FOR J%=5 TO 10:PROCsis(wh%,J%,&1760B133):NEXT 22160 WHEN 3:PROCit(wh%,10,"Nested size") 22170ENDCASE 22180ENDPROC 22190: 22200DEFPROCquicksave(swh%,sih%,savetype%) 22210REM OK or Ret in save panel 22220IF FNdemo("Text save") ENDPROC 22230IF NOT FNcheckobj(dir$,TRUE) ENDPROC 22240IF NOT FNoktosave(swh%,fnicon%) ENDPROC 22250CASE sih% OF 22260 WHEN dragicon%,fnicon%,okicon%:fsp$=FNit(swh%,fnicon%) 22270ENDCASE 22280IF INSTR(fsp$,".") THEN 22290 PROCstartsave(fsp$) 22300 PROCsavedir(FNparent(fsp$)) 22310 IF FNis(savebox%,12) PROCrecursivesave 22320 PROCendsave(fsp$) 22330ELSE 22340 ans%=FNmsg("To save - drag icon to Filer","OK") 22350ENDIF 22360ENDPROC 22370: 22380DEFFNoktosave(wh%,ih%) 22390LOCAL path$:path$=FNit(wh%,ih%) 22400IF path$="" ans%=FNmsg("Enter filename before saving","OK"):=FALSE 22410=TRUE 22420: 22430DEFFNdemo(s$) 22440IF demo% ans%=FNmsg(s$+",not available in demo version","OK"):=TRUE 22450=FALSE 22460: 22470DEFPROCstartsave(fsp$) 22480LOCAL next%,number% 22490PROCclosemenu 22500SYS "Hourglass_On" 22510sep$=CHR$&A:REM LF 22520F%=OPENOUT(fsp$) 22530OSCLI("SetType "+fsp$+" &FFF") 22540s$=FNtoday+sep$:BPUT#F%,s$ 22550ENDPROC 22560: 22570DEFPROCendsave(fsp$) 22580CLOSE #F%:F%=0 22590SYS "Hourglass_Smash" 22600ENDPROC 22610: 22620DEFPROCsavedir(d$) 22630LOCAL more%,next% 22640LOCAL wh%:wh%=savebox% 22650sp%=2:line$=STRING$(FNmaxlen(d$,sp%),"=") 22660BPUT#F%,d$ 22670IF FNis(wh%,10) THEN 22680 s%=INSTR($desc%(0),"- ") 22690 IF s%>0 s$=RIGHT$(s$,LENs$-s%-1):BPUT#F%,s$ 22700ENDIF 22710BPUT#F%,line$ 22720REM dirs then files 22730next%=0 22740WHILE next%<>-1 22750 SYS "OS_GBPB",10,d$,C%,1,next%,100,"*" TO ,,,more%,next% 22760 IF more%>0 AND C%?16=2 PROCdoline(d$,C%) 22770ENDWHILE 22780next%=0 22790WHILE next%<>-1 22800 SYS "OS_GBPB",10,d$,C%,1,next%,100,"*" TO ,,,more%,next% 22810 IF more%>0 AND C%?16=1 PROCdoline(d$,C%) 22820ENDWHILE 22830BPUT#F%,line$+sep$ 22840ENDPROC 22850: 22860DEFPROCdoline(d$,C%) 22870IF FNgetobjinfo(d$+"."+FNname(C%+20)) THEN 22880 desc$=$desc%(next%) 22890 BPUT#F%,FNmakeline(name$) 22900ENDIF 22910ENDPROC 22920: 22930DEFFNmakeline(name$) 22940LOCAL s$,sp$,wh%:wh%=savebox% 22950sp$=STRING$(sp%," ") 22960s$=name$+STRING$(10-LENname$," ") 22970IF FNis(wh%,6) s$+=sp$+type$+STRING$(13-LENtype$," ") 22980IF FNis(wh%,7) s$+=sp$+STRING$(7-LENfilelen$," ")+filelen$ 22990IF FNis(wh%,8) s$+=sp$+access$+STRING$(6-LENaccess$," ") 23000IF FNis(wh%,9) s$+=sp$+date$+sp$+time$ 23010IF FNis(wh%,10) s$+=sp$+LEFT$(desc$,253-LENs$) 23020REM avoid string too long 23030=s$ 23040: 23050DEFFNmaxlen(d$,sp%) 23060LOCAL J%,L1%,L2%,L3%,L4%,wh%,maxlen%,s% 23070wh%=savebox%:maxlen%=0 23080s$=$desc%(0):s%=INSTR(s$,"-")-1 23090L1%=LENd$:L2%=s%:L3%=10 23100IF FNis(wh%,6) L3%+=(sp%+14) 23110IF FNis(wh%,7) L3%+=(sp%+7) 23120IF FNis(wh%,8) L3%+=(sp%+6) 23130IF FNis(wh%,9) L3%+=(sp%+sp%+19) 23140IF FNis(wh%,10) THEN 23150 L4%=0 23160 FOR J%=1 TO items% 23170 desc$=$desc%(J%) 23180 IF LENdesc$>L4% THEN L4%=LENdesc$ 23190 NEXT 23200 IF L4%>0 L3%+=(sp%+L4%) 23210ENDIF 23220IF L1%>maxlen% maxlen%=L1% 23230IF L2%>maxlen% AND FNis(wh%,10) maxlen%=L2% 23240IF L3%>maxlen% AND items%>0 maxlen%=L3% 23250=maxlen% 23260: 23270REM--------------------- 23280REM. RECURSIVE TEXT SAVE 23290REM--------------------- 23300: 23310DEFPROCrecursivesave 23320recursing%=TRUE:abort%=FALSE 23330SYS "OS_Byte",229,0,0 :REM enable Esc 23340d$=dir$:deepest%=1:dirs%=1 23350prompt%=0 23360IF FNis(savebox%,14) prompt%=1 23370IF FNis(savebox%,15) prompt%=2 23380PROCsavelevels(d$,1) 23390s$="dirs: "+STR$dirs%+" levels: "+STR$deepest%+sep$ 23400BPUT#F%,s$ 23410SYS "OS_Byte",229,1,0 :REM disable Esc 23420recursing%=FALSE 23430PROCrefresh 23440ENDPROC 23450: 23460DEFPROCsavelevels(d$,level%) 23470LOCAL more%,next%,dy$:next%=0 23480SYS "Hourglass_On" 23490WHILE next%<>-1 23500 SYS "OS_GBPB",10,d$,C%,1,next%,blocksize%,"*" TO ,,,more%,next% 23510 IF more%>0 THEN 23520 IF C%?16=2 THEN 23530 REM a dir 23540 dy$=d$+"."+FNname(C%+20) 23550 IF FNleaf(dy$)<>"!TigerData" THEN 23560 save%=FNsave:IF abort% ENDPROC 23570 IF save% THEN 23580 PROCreadfiles(dy$,display%,0) 23590 PROCsavedir(dy$) 23600 dirs%+=1:IF level%>deepest% deepest%=level% 23610 REM repeat recursively 23620 PROCsavelevels(dy$,level%+1) 23630 ENDIF 23640 ENDIF 23650 ENDIF 23660 ENDIF 23670ENDWHILE 23680ENDPROC 23690: 23700DEFFNsave 23710IF prompt%=0 THEN=TRUE 23720IF prompt%=1 AND level%>1 THEN=TRUE 23730LOCAL x%,y%,b%,wh%:wh%=savebox% 23740ans%=FNmsg(dy$,"Don't save,No prompt,Abort,Save") 23750CASE ans% OF 23760 WHEN 2:PROCcw(messwind%) 23770 PROCui(wh%,14):PROCui(wh%,15):PROCsi(wh%,13):prompt%=0 23780 WHEN 3:abort%=TRUE 23790 WHEN 4:=TRUE 23800ENDCASE 23810=FALSE 23820: 23830REM--------------- 23840REM. RENAME/DELETE 23850REM--------------- 23860: 23870DEFPROCrename(oldleaf$,newleaf$) 23880REM menu choice 23890LOCAL J%,s$,d$ 23900IF oldleaf$="!TigerData" ENDPROC 23910IF newleaf$=oldleaf$ ENDPROC 23920IF newleaf$="" PROCbuzz:ENDPROC 23930IF FNpromptsave THEN 23940 s$=dir$+"."+oldleaf$:d$=dir$+"."+newleaf$ 23950 OSCLI("Rename "+s$+" "+d$) 23960ENDIF 23970IF $desc%(chosen%)<>"" THEN 23980 REM change TigerData 23990 descs%=FNloadTigerData(dir$+".TigerData") 24000 found%=FALSE 24010 FOR J%=1 TO descs% 24020 IF name$(J%)=oldleaf$ name$(J%)=newleaf$:found%=TRUE:J%=descs% 24030 NEXT 24040ENDIF 24050PROCwriteTigerData(descs%) 24060PROCshowTiger(1) 24070ENDPROC 24080: 24090DEFPROCdelete 24100REM menu choice 24110LOCAL J%,K%,leaf$,s$ 24120FilerAction%=FNfileraction:opts%=FNreadopts 24130sel%=FNsel 24140IF FNpromptsave THEN 24150 IF sel%=0 sel%(1)=chosen%:sel%=1 24160 IF FilerAction% THEN 24170 SYS &400DE,"Filer_Action" TO taskh% 24180 ELSE 24190 $C%="Delete files":SYS "Wimp_CommandWindow",C% 24200 ENDIF 24210 FOR J%=1 TO sel% 24220 leaf$=leaf$(sel%(J%)) 24230 s$=dir$+"."+leaf$ 24240 IF FNcheckobj(s$,TRUE) AND leaf$<>"TigerData" THEN 24250 PROCwipe(s$,FilerAction%) 24260 ENDIF 24270 NEXT 24280 IF FilerAction% THEN 24290 SYS &40F82,taskh%,2,opts% 24300 ELSE 24310 SYS "Wimp_CommandWindow",0 24320 ENDIF 24330ENDIF 24340ENDPROC 24350: 24360DEFPROCwipe(fsp$,FilerAction%) 24370LOCAL path$,leaf$ 24380IF FilerAction% THEN 24390 path$=FNparent(fsp$):leaf$=FNleaf(fsp$) 24400 SYS &40F80,taskh%,path$ 24410 SYS &40F81,taskh%,leaf$ 24420ELSE 24430 OSCLI("Wipe "+fsp$+" "+FNwipeopts) 24440ENDIF 24450ENDPROC 24460: 24470REM---------- 24480REM. OBJ INFO 24490REM---------- 24500: 24510DEFPROCprepobjinfo 24520LOCAL name$,obj%,o%,wh%:wh%=objinfo% 24530name$=leaf$(chosen%) 24540o%=FNgetobjinfo(dir$+"."+name$) 24550SYS "OS_File",5,dir$+"."+name$ TO ,,,,,access% 24560PROCit(wh%,1,name$):PROCit(wh%,2,FNstrip(type$)) 24570PROCit(wh%,3,filelen$):PROCit(wh%,4,access$) 24580PROCit(wh%,5,time$+" "+date$) 24590C%!0=wh%:C%!4=0:SYS "Wimp_GetIconState",,C% 24600$(C%!28)=FNspr(wh%,0) 24610ENDPROC 24620: 24630DEFFNgetobjinfo(fsp$) 24640SYS "OS_File",5,fsp$ TO o%:IF o%=0 THEN=FALSE:REM not found 24650LOCAL obj%,load%,exec%,filelen%,access% 24660SYS "OS_File",5,fsp$ TO obj%,,load%,exec%,filelen%,access% 24670filetype%=(load% AND &FFF00) DIV &100 24680name$=FNleaf(fsp$) 24690type$=FNtype(filetype%,obj%,name$) 24700access$=FNaccess(access%) 24710filelen$=STR$filelen% 24720date$=RIGHT$(FNdatestamp(load%,exec%),11) 24730time$=LEFT$(FNdatestamp(load%,exec%),8) 24740=TRUE 24750: 24760DEFFNtype(type%,obj%,name$) 24770LOCAL type$, 24780IF obj%=2 AND LEFT$(name$,1)="!" THEN="Application " 24790IF obj%=2 THEN="Directory " 24800type$=LEFT$(FNosvar("File$Type_"+STR$~type%),8) 24810IF type$="" type$="&"+STR$~type% 24820=type$+STRING$(9-LENtype$," ")+"("+FNlc(STR$~type%)+")" 24830: 24840DEFFNfiletype(path$) 24850LOCAL load% 24860SYS "OS_File",5,path$ TO ,,load% 24870=(load% AND &FFF00) DIV &100 24880: 24890DEFFNfiletypename(type%) 24900LOCAL r2%,r3% 24910SYS "OS_FSControl",18,,type% TO,,r2%,r3% 24920C%!0=r2%:C%!4=r3%:C%?8=&D 24930=$C% 24940: 24950DEFFNaccess(b%) 24960REM file attributes 24970LOCAL s$:s$="" 24980IF (b% AND 8)=8 s$+="L" 24990IF (b% AND 2)=2 s$+="W" 25000IF (b% AND 1)=1 s$+="R" 25010s$+="/" 25020IF (b% AND 16)=16 s$+="r" 25030IF (b% AND 32)=32 s$+="w" 25040=s$ 25050: 25060DEFFNdatestamp(load%,exec%) 25070REM read 5 byte number of centiseconds 25080REM since 00:00:00 on 1 Jan 1900 as a time/date string 25090IF LEFT$(STR$~(load%),3)<>"FFF" THEN="":REM machine code 25100C%!0=exec%:C%!4=load% 25110SYS "OS_ConvertStandardDateAndTime",C%,C%+8,21 25120?(C%+28)=&D 25130=$(C%+8) 25140: 25150REM------ 25160REM. MISC 25170REM------ 25180: 25190DEFPROCsetextent(wh%,miny%,maxx%) 25200C%!0=0:C%!4=miny%:C%!8=maxx%:C%!12=0 25210SYS "Wimp_SetExtent",wh%,C% 25220ENDPROC 25230: 25240DEFFNobjtype(path$) 25250LOCAL objtype% 25260REM 0=not found, 1=file, 2=dir, 3=combination 25270SYS "OS_File",13,path$ TO objtype% 25280=objtype% 25290: 25300DEFFNfilelen(path$) 25310LOCAL len% 25320SYS "OS_File",5,path$ TO ,,,,len% 25330=len% 25340: 25350DEFFNobjs(dir$) 25360LOCAL objs%:objs%=items% 25370IF FNcheckobj(dir$,FALSE) THEN 25380 IF FNobjtype(dir$)<>2 THEN=items% 25390 SYS "OS_GBPB",9,dir$,q%,maxo%,0,blocksize%,0 TO ,,,objs% 25400ENDIF 25410=objs% 25420: 25430DEFFNname(ptr%) 25440LOCAL s$:s$="" 25450WHILE ?ptr%>31:s$+=CHR$?ptr%:ptr%+=1:ENDWHILE 25460=s$ 25470: 25480DEFFNleaf(f$) 25490LOCAL c$,s$,c%:s$="":c%=LENf$:c$=MID$(f$,c%,1) 25500WHILE c$<>"." AND c$<>":" AND c%<>0 25510 s$=c$+s$:c%-=1 25520 c$=MID$(f$,c%,1) 25530ENDWHILE 25540=s$ 25550: 25560DEFFNparent(f$) 25570IF INSTR(f$,".")=0 THEN="" 25580l$=FNleaf(f$) 25590=LEFT$(f$,LENf$-LENl$-1) 25600: 25610DEFFNtoday:REM system date. Eg "22 Aug 1988" 25620=MID$(TIME$,5,2)+" "+MID$(TIME$,8,3)+" "+MID$(TIME$,14,2) 25630: 25640DEFFNosvar(osvar$) 25650LOCAL len% 25660REM If not found don't report error 25670SYS "XOS_ReadVarVal",osvar$,C%,200,0,3 TO,,len% 25680?(C%+len%)=&D 25690=$C% 25700: 25710DEFFNenv 25720REM get command string 25730SYS "OS_GetEnv" TO env$ 25740p=INSTR(env$,"""",INSTR(env$,"""")+1):env$=MID$(env$,p+1) 25750WHILE LEFT$(env$,1)=" ":env$=MID$(env$,2):ENDWHILE 25760=env$ 25770: 25780DEFFNstrip(s$) 25790REM strip leading/trailing spaces 25800LOCAL J%,o$,c$,c%,n%:o$=s$ 25810IF LEFT$(s$,1)=" "THEN 25820 c%=1:REPEAT:c%+=1:UNTIL MID$(o$,c%,1)<>" ":o$=RIGHT$(o$,LENo$-c%+1) 25830ENDIF 25840IF RIGHT$(s$,1)=" "THEN 25850 c%=LENo$:n%=1:REPEAT:c%-=1:n%+=1:UNTIL MID$(o$,c%,1)<>" " 25860 o$=LEFT$(o$,LENo$-n%+1) 25870ENDIF 25880=o$ 25890: 25900DEFFNlc(str$) 25910LOCAL J%,c$,c%,s$:s$="" 25920FOR J%=1 TO LENstr$ 25930 c$=MID$(str$,J%,1):c%=ASCc$ 25940 IF c%>64 AND c%<91 c%+=32 25950 c$=CHR$c%:s$+=c$ 25960NEXT 25970=s$ 25980: 25990DEFFNosxmax 26000REM screen x OS units for current mode 26010SYS "OS_ReadModeVariable",-1,11 TO ,,xlimit% 26020SYS "OS_ReadModeVariable",-1,4 TO ,,xeig% 26030=(xlimit%+1)<<xeig% 26040: 26050DEFFNosymax 26060REM screen y OS units for current mode 26070SYS "OS_ReadModeVariable",-1,12 TO ,,ylimit% 26080SYS "OS_ReadModeVariable",-1,5 TO ,,yeig% 26090=(ylimit%+1)<<yeig% 26100: 26110DEFPROCbeep:SOUND 1,-10,200,1:ENDPROC 26120DEFPROCbuzz:SOUND 1,-15,50,4:ENDPROC 26130: 26140REM-------- 26150REM. MEMORY 26160REM-------- 26170: 26180DEFFNgetslotsize 26190LOCAL slotsize% 26200SYS "Wimp_SlotSize",-1,-1 TO slotsize% 26210=slotsize% 26220: 26230DEFFNsetslotsize(bytes%) 26240LOCAL size%,ok%:ok%=TRUE 26250SYS "Wimp_SlotSize",bytes%,-1 TO size% 26260IF size%<bytes% THEN ok%=FALSE 26270=ok% 26280: 26290REM--------- 26300REM. WINDOWS 26310REM--------- 26320: 26330DEFPROCloadtemplates 26340SYS "Wimp_OpenTemplate",,taskdir$+".Templates" 26350main%=FNtw("Main"):maintit%=q%!72 26360info%=FNtw("Info") 26370objinfo%=FNtw("ObjInfo") 26380savebox%=FNtw("Save") 26390copybox%=FNtw("Copy") 26400messwind%=FNtw("Message") 26410choicewind%=FNtw("Choices") 26420accesswind%=FNtw("Access") 26430buffwind%=FNtw("Buffer") 26440SYS "Wimp_CloseTemplate" 26450ENDPROC 26460: 26470DEFFNtw(a$) 26480LOCAL c%,end%:end%=buffer%+buffersize% 26490SYS "Wimp_LoadTemplate",,q%,buffer%,end%,-1,a$ TO ,,buffer% 26500SYS "Wimp_CreateWindow",,q% TO c% 26510=c% 26520: 26530DEFPROCow(wh%) 26540REM at my behest - on top 26550C%!0=wh%:SYS "Wimp_GetWindowState",,C% 26560C%!28=-1:SYS "Wimp_OpenWindow",,C% 26570ENDPROC 26580: 26590DEFPROCow2(wh%) 26600REM from Wimp Poll 26610SYS "Wimp_OpenWindow",,q% 26620ENDPROC 26630: 26640DEFPROCowc(wh%) 26650REM at my behest - on top and in centre 26660C%!0=wh%:SYS "Wimp_GetWindowState",,C% 26670SYS "OS_ReadModeVariable",-1,11 TO ,,xwindlimit% 26680SYS "OS_ReadModeVariable",-1,4 TO ,,xeigfactor% 26690SYS "OS_ReadModeVariable",-1,12 TO ,,ywindlimit% 26700SYS "OS_ReadModeVariable",-1,5 TO ,,yeigfactor% 26710xwindlimit%=xwindlimit%<<xeigfactor% 26720ywindlimit%=ywindlimit%<<yeigfactor% 26730xeigfactor%=C%!12-C%!4 26740yeigfactor%=C%!16-C%!8 26750C%!4 = (xwindlimit%-xeigfactor%)>>1 26760C%!8 = (ywindlimit%-yeigfactor%)>>1 26770C%!12= C%!4+xeigfactor% 26780C%!16= C%!8+yeigfactor% 26790C%!28=-1:SYS "Wimp_OpenWindow",,C% 26800ENDPROC 26810: 26820DEFPROCcw(wh%) 26830C%!0=wh%:SYS "Wimp_CloseWindow",,C% 26840IF wh%=main% open%=FALSE:PROCcw(buffwind%) 26850ENDPROC 26860: 26870DEFPROCstar 26880PROCtit(main%,maintit%,"Tiger:"+dir$+" *"):star%=TRUE 26890ENDPROC 26900: 26910DEFPROCnostar 26920PROCtit(main%,maintit%,"Tiger:"+dir$):star%=FALSE 26930ENDPROC 26940: 26950DEFPROCtit(wh%,ad%,str$) 26960REM force change of window title 26970$ad%=str$:!C%=wh%:SYS "Wimp_GetWindowOutline",,C% 26980minx%=C%!4:miny%=C%!8:maxx%=C%!12:maxy%=C%!16 26990SYS "Wimp_ForceRedraw",-1,minx%+84,maxy%-40,maxx%-44,maxy%-4 27000ENDPROC 27010: 27020DEFPROCsize 27030REM Tab adjusts size to obj names only 27040C%!0=main%:SYS "Wimp_GetWindowState",,C% 27050IF C%!12<>C%!4+244 OR C%!8>-1500 THEN 27060 C%!12=C%!4+244:C%!8=C%!16-1500 27070ENDIF 27080C%!28=-1:SYS "Wimp_OpenWindow",,C% 27090ENDPROC 27100: 27110DEFFNopen(wh%) 27120!C%=wh%:SYS "Wimp_GetWindowState",,C% 27130=FNbitset(C%!32,16) 27140: 27150DEFFNfocus(wh%) 27160!C%=wh%:SYS "Wimp_GetWindowState",,C% 27170=FNbitset(C%!32,20) 27180: 27190DEFFNbitset(i%,b%) 27200REM is bit b% in integer i% set? 27210LOCAL n%,d%:d%=1<<b% 27220n%=(i% AND d%) DIV d% 27230IF n%=0 THEN=FALSE 27240=TRUE 27250: 27260REM------- 27270REM. ICONS 27280REM------- 27290: 27300DEFPROCbaricon 27310C%!0=-2:C%!4=0:C%!8=-16:C%!12=112:C%!16=68 27320C%!20=&1700310B:C%!24=barbuf%:C%!28=spritad%:C%!32=8 27330SYS "Wimp_CreateIcon",,C% TO baricon% 27340ENDPROC 27350: 27360DEFPROCcreateicons 27370REM icons for names 27380minx%=12:miny%=-54:maxx%=230:maxy%=-4 27390FOR J%=0 TO maxo% 27400 $name%(J%)="":$val%(J%)="":d1%=name%(J%):d2%=val%(J%):d3%=13 27410 i%=FNicon(main%,minx%,maxy%-44,maxx%,maxy%,&1B00E131,"",d1%,d2%,d3%) 27420 miny%-=44:maxy%-=44 27430NEXT 27440: 27450REM icons for descriptions 27460miny%=-58:maxy%=-8:maxx%=width%:REM varies with mode 27470buflen%=maxdesclen%+1:REM fits on 132 chr screen; fits on listing paper in cond. 27480FOR J%=0 TO maxo% 27490 IF J%=0 THEN 27500 f%=&1B00E131:v%=valid%:minx%=240 27510 ELSE 27520 f%=&0700E131:v%=-1:minx%=244 27530 ENDIF 27540 $desc%(J%)="" 27550 i%=FNicon(main%,minx%,maxy%-40,maxx%,maxy%,f%,"",desc%(J%),v%,buflen%) 27560 miny%-=44:maxy%-=44 27570NEXT 27580: 27590REM icon for gaining input focus (#156) 27600i%=FNicon(main%,240,-40,228+8,-40+8,&BB00E134,"",0,0,0) 27610ENDPROC 27620: 27630DEFFNicon(wh%,minx%,miny%,maxx%,maxy%,flags%,text$,d1%,d2%,d3%) 27640C%!0=wh%:C%!4=minx%:C%!8=miny%:C%!12=maxx%:C%!16=maxy%:C%!20=flags% 27650IF d1%=0 THEN 27660 $(C%+24)=text$ 27670ELSE 27680 C%!24=d1%:C%!28=d2%:C%!32=d3% 27690ENDIF 27700SYS "Wimp_CreateIcon",,C% TO ih% 27710=ih% 27720: 27730DEFPROCsi(wh%,ih%) 27740C%!0=wh%:C%!4=ih%:C%!8=1<<21:C%!12=1<<21 27750SYS"Wimp_SetIconState",,C% 27760ENDPROC 27770: 27780DEFPROCui(wh%,ih%) 27790C%!0=wh%:C%!4=ih%:C%!8=0:C%!12=1<<21 27800SYS"Wimp_SetIconState",,C% 27810ENDPROC 27820: 27830DEFPROCti(wh%,ih%) 27840IF FNis(main%,ih%) PROCui(main%,ih%) ELSE PROCsi(main%,ih%) 27850ENDPROC 27860: 27870DEFFNis(wh%,ih%) 27880LOCAL n% 27890!C%=wh%:C%!4=ih%:SYS"Wimp_GetIconState",,C% 27900n%=((C%!24)>>21) AND 1 27910IF n%=0 THEN=FALSE 27920=TRUE 27930: 27940DEFPROCit(wh%,ih%,s$) 27950C%!0=wh%:C%!4=ih%:SYS "Wimp_GetIconState",,C% 27960$(C%!28)=s$ 27970C%!8=0:C%!12=0:SYS "Wimp_SetIconState",,C% 27980ENDPROC 27990: 28000DEFFNit(wh%,ih%) 28010C%!0=wh%:C%!4=ih%:SYS "Wimp_GetIconState",,C% 28020=$(C%!28) 28030: 28040DEFPROCsis(wh%,ih%,newflags%) 28050REM set icon state 28060LOCAL clear%,eor% 28070clear%=&FFFFFFFF:eor%=newflags% 28080C%!0=wh%:C%!4=ih%:C%!8=eor%:C%!12=clear% 28090SYS "Wimp_SetIconState",,C% 28100ENDPROC 28110: 28120DEFPROCseticonbit(wh%,ih%,b%) 28130C%!0=wh%:C%!4=ih% 28140C%!8=1<<b%:C%!12=1<<b% 28150SYS"Wimp_SetIconState",,C% 28160ENDPROC 28170: 28180DEFPROCcleariconbit(wh%,ih%,b%) 28190C%!0=wh%:C%!4=ih% 28200C%!8=0:C%!12=1<<b% 28210SYS"Wimp_SetIconState",,C% 28220ENDPROC 28230: 28240DEFPROCdi(wh%,from%,to%) 28250LOCAL J%:C%!0=wh% 28260FOR J%=from% TO to%:C%!4=J%:SYS "Wimp_DeleteIcon",,C%:NEXT 28270C%!0=wh%:SYS "Wimp_GetWindowOutline",,C% 28280minx%=C%!4:miny%=C%!8:maxx%=C%!12:maxy%=C%!16 28290SYS "Wimp_ForceRedraw",-1,minx%,miny%,maxx%,maxy% 28300ENDPROC 28310: 28320DEFFNvax(wh%,wax%) 28330!C%=wh%:SYS "Wimp_GetWindowState",,C% 28340=wax%-(C%!20-C%!4) 28350: 28360DEFFNvay(wh%,way%) 28370!C%=wh%:SYS "Wimp_GetWindowState",,C% 28380=way%-(C%!24-C%!16) 28390: 28400REM-------- 28410REM. ERRORS 28420REM-------- 28430: 28440DEFFNcheckobj(obj$,error%) 28450REM is object present? 28460LOCAL n%,type% 28470LOCAL ERROR 28480ON ERROR LOCAL ans%=FNlocalerror(obj$,REPORT$,ERR):=FALSE 28490SYS "OS_File",13,obj$ TO type% 28500obj$=FNstrip(FNleaf(obj$)) 28510IF type%=0 n%=FALSE ELSE n%=TRUE 28520IF n%=FALSE AND error% THEN 28530 ans%=FNmsg("Can't find '"+obj$+"' in Filer","OK") 28540ENDIF 28550=n% 28560: 28570DEFFNlocalerror(obj$,err$,err%) 28580LOCAL s$,i%:s$=err$ 28590CASE err% OF 28600 WHEN 248 28610 i%=INSTR(obj$,":") 28620 s$="Filing system or path "+LEFT$(obj$,i%)+" not present," 28630 s$+="Closing Tiger window" 28640 ans%=FNmsg(s$,"OK") 28650 pristine%=TRUE:items%=0:PROCcw(main%) 28660 WHEN 67797 28670 s$="Disc not present,Closing Tiger window" 28680 ans%=FNmsg(s$,"OK") 28690 pristine%=TRUE:items%=0:PROCcw(main%) 28700 WHEN 204 28710 s$="Bad file name,"+obj$ 28720 ans%=FNmsg(s$,"OK") 28730 OTHERWISE 28740 PROCwimperror 28750ENDCASE 28760=ans% 28770: 28780DEFPROCwimperror 28790SYS "Wimp_DragBox",,-1:SYS "Hourglass_Smash" 28800IF F%>0 CLOSE#F%:F%=0 28810IF X%>0 CLOSE#X%:X%=0 28820IF recursing% THEN 28830 recursing%=FALSE:PROCcw(main%) 28840 SYS "OS_Byte",229,1,0:REM disable Esc 28850 s$="Escape pressed - operation aborted" 28860 ans%=FNmsg(s$,"OK"):IF counting% display%=1:counting%=FALSE 28870 PROCshowTiger(1) 28880 ENDPROC 28890ENDIF 28900s$=REPORT$+",(Error "+STR$ERR+": line "+STR$ERL+")" 28910ans%=FNmsg(s$,"OK,Kill Tiger") 28920IF ans%=2 quit%=TRUE:OSCLI("Unset Tiger$Running"):PROCclosewimp:END 28930ENDPROC 28940: 28950DEFPROCerror 28960SYS "Hourglass_Smash" 28970IF H%>0 CLOSE#H%:H%=0 28980VDU4:PRINT REPORT$+" at line "+STR$ERL:VDU5 28990ENDPROC 29000: 29010DEFFNmsg(s1$,s2$) 29020LOCAL J%,c%,p%,g%,f%,r%,x%,y%,w%,h%,n%,s$,wh% 29030wh%=messwind%:PROCbuzz 29040SYS "Wimp_DragBox",,-1:SYS "Hourglass_Smash" 29050PROCdi(wh%,1,7) 29060: 29070REM do choices... 29080c%=0:s$=s2$ 29090REPEAT 29100 c%+=1:p%=INSTR(s$,",") 29110 IF p%=0 ict$(c%)=s$ 29120 IF p%>0 ict$(c%)=LEFT$(s$,p%-1):s$=RIGHT$(s$,LENs$-p%) 29130UNTIL p%=0:IF c%>4 c%=4 29140maxi%=c% 29150CASE c% OF 29160 WHEN 1:x%=312 29170 WHEN 2:x%=222 29180 WHEN 3:x%=128 29190 WHEN 4:x%=28 29200ENDCASE 29210y%=-228:w%=178:h%=52:v$="R5,2":f%=&1701313D 29220FOR J%=1 TO c% 29230 IF J%=c% y%-=6:w%+=32:h%+=12:v$="R6,2" 29240 $icn%(J%)=ict$(J%):$icv%(J%)=v$:n%=icn%(J%):v%=icv%(J%) 29250 i%=FNicon(wh%,x%,y%,x%+w%,y%+h%,f%,"",n%,v%,20) 29260 x%+=w%+12 29270NEXT 29280: 29290REM do messages... 29300c%=0:s$=s1$ 29310REPEAT 29320 c%+=1:p%=INSTR(s$,",") 29330 IF p%=0 ict$(c%)=s$ 29340 IF p%>0 ict$(c%)=LEFT$(s$,p%-1):s$=RIGHT$(s$,LENs$-p%) 29350UNTIL p%=0:IF c%>3 c%=3 29360CASE c% OF 29370 WHEN 1:g%=48:y%=-120 29380 WHEN 2:g%=54:y%=-84 29390 WHEN 3:g%=48:y%=-68 29400ENDCASE 29410x%=30:w%=774:h%=40:f%=&17006139:REM draggable 29420FOR J%=1 TO c% 29430 $icm%(J%)=RIGHT$(ict$(J%),48):n%=icm%(J%) 29440 i%=FNicon(wh%,x%,y%,x%+w%,y%+h%,f%,"",n%,-1,50) 29450 y%-=g% 29460NEXT 29470: 29480PROCow(wh%):PROCcaretx(wh%,8,0) 29490SYS "Wimp_GetPointerInfo",,C%:w%=C%!12 29500C%!0=wh%:SYS "Wimp_GetWindowState",,C% 29510MOUSE RECTANGLE C%!4+8,C%!8+8,C%!12-C%!4-16,C%!16-C%!8-16 29520IF w%<>wh% MOUSE TO C%!12-48,C%!8+48 29530REM wait for click on reply icon, or Esc pressed 29540reply%=0:esc%=FALSE:ret%=FALSE 29550REPEAT 29560 SYS "Wimp_Poll",,C% TO r% 29570 CASE r% OF 29580 WHEN 6:PROCmouse(C%) 29590 WHEN 7:PROCenddrag(C%,swh%,remb%,solid%) 29600 WHEN 8:PROCkeypress(C%) 29610 ENDCASE 29620UNTIL (reply%>0 AND reply%<maxi%+1) OR esc% OR ret% 29630IF ret% reply%=maxi%:REM default 29640PROCcw(wh%):OSCLI("Pointer") 29650=reply% 29660: 29670REM---------- 29680REM. DEBUGGER 29690REM---------- 29700: 29710DEFPROCdl(list$) 29720REM debug list 29730LOCAL ccc%,ttt%,mmm%,sss$,ccc$,var$():DIM var$(20) 29740LOCAL ERROR 29750ON ERROR LOCAL VDU4:PRINTTAB(0,ttt%+2)"ERROR!":VDU5:ENDPROC 29760FOR ttt%=1 TO LEN(list$) 29770 ccc$=MID$(list$,ttt%,1) 29780 IF ccc$<>"," sss$+=ccc$ 29790 IF ccc$="," OR ttt%=LEN(list$) THEN 29800 IF LENsss$>mmm% mmm%=LENsss$ 29810 var$(ccc%)=sss$:sss$="":ccc%+=1 29820 ENDIF 29830NEXT:VDU4 29840FOR ttt%=0 TO ccc%-1 29850 sss$=var$(ttt%) 29860 PRINTTAB(0,ttt%)STRING$(50," ") 29870 IF LEFT$(sss$,1)="~" THEN 29880 sss$=RIGHT$(sss$,LENsss$-1) 29890 ccc$=STRING$(mmm%-LENsss$," ") 29900 PRINTTAB(0,ttt%) sss$+ccc$+" =&";STR$~(EVALsss$) 29910 ELSE 29920 ccc$=STRING$(mmm%-LENsss$," ") 29930 PRINTTAB(0,ttt%) sss$+ccc$+" = ";EVAL(sss$) 29940 ENDIF 29950NEXT:VDU5 29960ENDPROC 29970: 29980DEFPROCda(a$,f%,t%) 29990REM debug array 30000LOCAL ccc%,nnn$,xxx%,ttt% 30010LOCAL ERROR 30020ON ERROR LOCAL VDU4:PRINTTAB(0,ttt%+2)"ERROR!":VDU5:ENDPROC 30030IF LEFT$(a$,1)="~" a$=RIGHT$(a$,LENa$-1):xxx%=TRUE 30040COLOUR 0:COLOUR 132:VDU4:PRINTTAB(0,0)a$+"()" 30050FOR ccc%=f% TO t% 30060 nnn$=RIGHT$(" "+STR$ccc%,2)+" ":ttt%+=1 30070 IF xxx% THEN 30080 PRINTTAB(0,ttt%)nnn$+"&";STR$~+EVAL(a$+"("+STR$ccc%+")") 30090 ELSE 30100 PRINTTAB(0,ttt%)nnn$;EVAL(a$+"("+STR$ccc%+")") 30110 ENDIF 30120NEXT:VDU5 30130ENDPROC
� > <Tiger$Dir>.!RunImage : task$="Tiger" (+purpose$="Editable object descriptions" 2*author$="(c) Graham Crow 1992,'93,'94" <!version$="4.00 (31 May 1994)" F: P� � �error:� Z�init:�wimpinit d�loadtemplates:�loadchoices n$�baricon:�initicons:�createicons x�install �: �� � �wimperror �quit%=� ��:�poll:� quit% ��closewimp �� �: ��----------- ��. WIMP POLL ��----------- �: � ��poll � ș "Wimp_Poll",,q% � reason% %� prevent dragging on a selection "� reason%<17 � reason%>19 z%=0 Ȏ reason% � " � 0 , � textflag% �gettext 6 c%=�changed @$ � c% undo%=�:redo%=� � undo%=� J3 � c%:� � star% �star:� � � c%:� star% �nostar T � refresh% � ^ �showTiger(1):refresh%=� h � rC � � pristine%:� �objs(dir$)<>items%:� �open(main%) refresh%=� | �iconscroll � � 2:�ow2(q%!0) � � 3 �+ wh%=q%!0:ș "Wimp_GetPointerInfo",,q% �* � q%!12=main% � q%!8=1 �viewer(dir$) � �cw(wh%) � � 6:�mouse(q%) �' � 7:�enddrag(q%,swh%,remb%,solid%) � � 8:�keypress(q%) � � 9:�menuselect(q%) � � 17,18:�receive(q%) � � 19: � Ȏ q%!16 � �* � 5:ș "Wimp_StartTask","Run "+job$ :�buzz � � &� 0: :�---------- D�. MESSAGES N�---------- X: b��receive(q%) lsender%=q%!4 vȎ q%!16 � � � 0:quit%=�quit �! � 1:�loadsel(q%) :� DataSave �$ � 2:�datasave(q%):� DataSaveAck �! � 3:�dataload(q%):� DataLoad � � 4:� DataLoadAck �/ � 5:� q%!40=&4FF �dataload(q%) :� DataOpen � � 6:� RAMFetch � � 7:� RAMTransmit � � 8:�prequit(q%) :� PreQuit �? � &400C0:�submenu(q%):� pointer over SaveText/Copy submenu �: � &400C1:windowstate%=0:� �open(main%) windowstate%=1 �! �modechange(q%,windowstate%) � � &400C7:tsk$=�taskname(q%) � � : ��prequit(q%) *0� PreQuit message received from Task Manager 4sender%=q%!4:quit%=� >� acknowledge message Hq%!12=q%!8 R'ș "Wimp_SendMessage",19,q%,sender% \ � �quit � f# ș "Wimp_GetCaretPosition",,q% p q%!24=&1FC:� Ctrl+Shift+F12 z' ș "Wimp_SendMessage",8,q%,sender% �� �� �: �!��modechange(q%,windowstate%) �6� adjusts window width and icon width to suit mode �+� pristine% � (� �checkobj(dir$,�)) � � �� �promptsave � �/ ș "OS_ReadModeVariable",-1,1 � ,,columns% � width%=(columns%-2)*16 �" �di(main%,0,155):�createicons � �showTiger(windowstate%) �� �� : ݤtaskhandle(wh%,ih%) � task% $q%!0=256:q%!12=0 .1ș "Wimp_SendMessage",19,q%,wh%,ih% � ,,task% 8 =task% B: Lݤtaskname(q%) V� s$,o%:s$="":o%=28 `%taskhandle%=q%!20:tasksize%=q%!24 j$ȕ q%?o%<>0:s$+=�(q%?o%):o%+=1:� t=s$ ~: ��------ ��. INIT ��------ �: � ��init �ș "Hourglass_On" �blocksize%=&4000 �buffersize%=&1000 �� q% blocksize% �� buffer% buffersize% �� C% &100:� w/s �;� mb1%&200,mb2%&200,mb3%&100,mb4%&100,mb5%&200,mb6%&100 s%=18 6� mi0%s%,mi1%s%,mi2%s%,mi3%s%,mi4%s%,mi5%s%,mi6%s% *� mi7%s%,mi8%s%,mi9%s%,mi10%s%,mi11%s% � tick%(15),grey%(15) (: 2� for msg window <� icm$(3),ict$(4) F.� icm%(3):� J%=1 � 3:� a% 50:icm%(J%)=a%:� P.� icn%(4):� J%=1 � 4:� a% 15:icn%(J%)=a%:� Z.� icv%(4):� J%=1 � 4:� a% 10:icv%(J%)=a%:� d%� icx%(4),icy%(4),icw%(4),ich%(4) nreply%=0:esc%=�:ret%=� x: �%� spritad% 20:$spritad%="stigbar" �� barbuf% 8:$barbuf%=task$ �: �� text indirection �� newname% 13:$newname%="" �.� valname% 20:$valname%="A~.:*#$&@^%\"+�34 �:� valid% 5:$valid%="A":� validation string for icon 78 �: �maxo%=77 �2� undo$(maxo%):� copy of descriptions for undo �2� redo$(maxo%):� copy of descriptions for redo �)� leaf$(maxo%):� unformatted leafname �-� name$(maxo%):� leafnames from TigerData 0� desc$(maxo%):� descriptions from TigerData -� len%(maxo%) :� length of object (bytes) *� sel%(maxo%) :� list of selected objs ": ,maxdesclen%=110 69� data blocks and addresses for icon text indirection @8� name%(maxo%):� J%=0 � maxo%:� a% 13:name%(J%)=a%:� J6� val%(maxo%):� J%=0 � maxo%:� a% 20:val%(J%)=a%:� TC� desc%(maxo%):� J%=0 � maxo%:� a% maxdesclen%+1:desc%(J%)=a%:� ^: h;sprsize%=&1000:� spr% sprsize%:!spr%=sprsize%:spr%!8=16 r ș "OS_SpriteOp",&100+9,spr% |: �)� get initial slot size (set in !Run) �remslotsize%=�getslotsize �;A%=&8000+remslotsize%:� load address for TigerData file �: �Eș "OS_ReadModeVariable",-1,1 � ,,columns%:width%=(columns%-2)*16 �: �solid%=�soliddrag:remb%=4 �;dragicon%=1:fnicon%=2:okicon%=3:clicon%=4:� Save window �: � taskdir$=�osvar("Tiger$Dir") �%tigstr$="Tiger description files" �items%=0:find$="":cdir$="" �/z%=0:� flag to prevent dragging a selection 1pristine%=�:� no files dragged onto Tiger yet 7star%=�:� asterisk in window title for changed data 4display%=1 :� 1=descs, 2=obj info, 3=nested size &?oldi%=0:oldp%=0:� icon, position in icon (for horiz scroll) 03recursing%=�:counting%=�:refresh%=�:textflag%=� :$pos%=0:insert%=�:undo%=�:redo%=� DF%=0:X%=0:� file handles N!user$="Demonstration":demo%=� X� b: l��wimpinit vB$q%="TASK":ș "Wimp_Initialise",200,!q%,task$ � version%,task% �� �: ���closewimp �,$q%="TASK":ș "Wimp_CloseDown",task%,!q% �� �: ���initicons �� J%,wh%:wh%=info% �*�it(wh%,1,purpose$):�it(wh%,2,author$) �(�it(wh%,3,version$):�it(wh%,4,user$) �wh%=buffwind% �� J%=1 � 3:�ui(wh%,J%):� �� : ��install '� install Tiger complete with data? "path$=�env:dir$=�parent(path$) *,� dir$="" � startdir$<>"" dir$=startdir$ 4� dir$<>"" � >8 windowstate%=0:� openTiger% windowstate%=2:� centre H pristine%=� R �showTiger(windowstate%) \� fș "Hourglass_Smash" p� openbuff% �ow(buffwind%) z� �: ��--------------- ��. DATA TRANSFER ��--------------- �: ���drop(swh%,sih%,smb%) �3� drag ends on Filer/App/Pinboard/Iconbar/Tiger �"� find out where drop occurred � ș "Wimp_GetPointerInfo",,q% �+mx%=q%!0:my%=q%!4:dwh%=q%!12:dih%=q%!16 �: �� invalid drops �� swh%=dwh% � dwh%<>main% � $� swh%=buffwind% � dwh%<>main% � � swh%=main% � � sih%<79 � dwh%=main% � $0 � sih%>78 � dwh%<>main% � dwh%<>buffwind% � .� 8: B-� swh%=main% � sih%<79 � dwh%=buffwind% � L" path$=dir$+"."+leaf$(chosen%) V. �dragfiletobuff(path$,�filetype(path$)):� `� j: tE� (swh%=main% � swh%=buffwind%) � (dwh%=main% � dwh%=buffwind%) � ~+ �shiftdesc(swh%,sih%,dwh%,dih%,smb%):� �� �: �� dwh%=-2 � dih%=-1 � � dtsk$="IconBar" �� � q%!0=20:q%!12=0:q%!16=0 �4 ș "Wimp_SendMessage",19,q%,dwh%,dih% � ,,dtsk% � � dtsk%=0 �closemenu:� �6 ș "TaskManager_TaskNameFromHandle",dtsk% � dtsk$ �� �� swh%=savebox% � �0 �savetextfile(swh%,dwh%,dih%,mx%,my%,dtsk$) � filersave%=� Ȏ dtsk$ � & � "IconBar" :�iconbar(smb%,sih%) (1 � "Filer" :�filer(swh%,dwh%,dih%,mx%,my%) 2% � "Pinboard":�pinboard(mx%,my%) <* :�app(swh%,dwh%,dih%,mx%,my%) F � P� Z� d: n��datasave(q%) x+� response by Wimp (No.2 - DataSaveAck) �'� to drag of file(s) onto Filer/App �$� filersave% �filersave(q%,swh%) �� �: �#�------------------------------ �#�. DRAG TEXT FILE TO FILER, APP �#�------------------------------ �: �0��savetextfile(swh%,dwh%,dih%,mx%,my%,dtsk$) �� send DataSave �� fsp$,leaf$,filelen%,type% �*� dtsk$="IconBar" � dtsk$="Pinboard" � � �closemenu:�buzz:� � ,fsp$=�it(swh%,fnicon%):leaf$=�leaf(fsp$) !� � �oktosave(swh%,fnicon%) � "(filelen%=100:type%=&FFF:filersave%=� ,(q%!0=(48+�fsp$) � � 3:� block length 6,q%!4=0:q%!8=0:q%!12=0:q%!16=1:� DataSave @-q%!20=dwh%:q%!24=dih%:q%!28=mx%:q%!32=my% J0q%!36=filelen%:q%!40=type%:$(q%+44)=leaf$+�0 T+ș "Wimp_SendMessage",18,q%,q%!20,q%!24 ^� h: r��textsave(q%,newpath$) |*� DataSaveAck received - send DataLoad �� �demo("Text save") � �� � �checkobj(dir$,�) � ��startsave(newpath$) ��savedir(dir$) �%� �is(savebox%,12) �recursivesave ��endsave(newpath$) �$� only update filename if secure �/� q%!36>-1 � �it(savebox%,fnicon%,newpath$) �)q%!0=64:q%!12=q%!8:q%!16=3:� DataLoad �#q%!40=&FFF:$(q%+44)=newpath$+�0 �+ș "Wimp_SendMessage",18,q%,q%!20,q%!24 �� �: �------------- �. DRAG TO APP �------------- &: 0!��app(swh%,dwh%,dih%,mx%,my%) :5q%!12=0:q%!20=dwh%:q%!24=dih%:q%!28=mx%:q%!32=my% D4sel%=�sel:� swh%=copybox% sel%=1:sel%(1)=chosen% N� J%=1 � sel% X$ sfsp$=dir$+"."+$name%(sel%(J%)) b' type%=�filetype(sfsp$):q%!40=type% l q%!0=((48+�sfsp$)� 4)*4 v) $(q%+44)=sfsp$+�0:q%!16=3:� DataLoad �* ș "Wimp_SendMessage",17,q%,dwh%,dih% �� � �clearall �� �: ��--------------- ��. DRAG TO FILER ��--------------- �: �#��filer(swh%,dwh%,dih%,mx%,my%) �(� drag ends on Filer - send DataSave �� fsp$,leaf$,filelen%,type% �filersave%=� Ȏ swh% � � copybox%: fsp$=�it(swh%,fnicon%) leaf$=�leaf(fsp$) * filelen%=�filelen(fsp$) 4 type%=�filetype(fsp$) > � savebox%: H fsp$=�it(swh%,fnicon%) R leaf$=�leaf(fsp$) \ filelen%=100:type%=&FFF f : p leaf$=leaf$(chosen%) z fsp$=dir$+"."+leaf$ � filelen%=�filelen(fsp$) � type%=�filetype(fsp$) �� �(q%!0=(48+�fsp$) � � 3:� block length �,q%!4=0:q%!8=0:q%!12=0:q%!16=1:� DataSave �-q%!20=dwh%:q%!24=dih%:q%!28=mx%:q%!32=my% �0q%!36=filelen%:q%!40=type%:$(q%+44)=leaf$+�0 �+ș "Wimp_SendMessage",18,q%,q%!20,q%!24 �� �: ���filersave(q%,swh%) �� response to DataSaveAck �/� J%,K%,sel%,dpath$,ddir$,leaf$,sfsp$,dfsp$ -FilerAction%=�fileraction:opts%=�readopts sel%=�sel dpath$=�name(q%+44) $ddir$=�parent(dpath$) . Ȏ swh% � 8" � copybox%:�copy(ddir$,remb%) B$ � savebox%:�textsave(q%,dpath$) L : V �clearall ` : j( � does ddir$ have a TigerData file? t7 fsp$=ddir$+".TigerData":present%=�checkobj(fsp$,�) ~ � � present% � � descs%=0 � � �! descs%=�loadTigerData(fsp$) � � � : �5 � FilerAction% ș &400DE,"Filer_Action" � taskh% � : � � J%=1 � sel% � leaf$=leaf$(sel%(J%)) � sfsp$=dir$+"."+leaf$ � dfsp$=ddir$+"."+leaf$ �? � �checkobj(sfsp$,�) � � (present% � leaf$="TigerData") � � FilerAction% � ș &40F80,taskh%,dir$ ș &40F81,taskh%,leaf$ � (# � �-1 delete%=� � delete%=� 2 opt$=�copyopts(delete%) <# � �-1 t$="Move" � t$="Copy" F> �command(t$+" files","Copy "+sfsp$+" "+dfsp$+" "+opt$) P � Z � d � n : x � FilerAction% � � � �-1 n%=6 � n%=0 �. ș &40F82,taskh%,n%,opts%,ddir$,�ddir$+1 � � �* q%!0=64:q%!12=q%!8:q%!16=3:� DataLoad �, ș "Wimp_SendMessage",18,q%,q%!20,q%!24 � � remb%=1 �cw(swh%) � : �/ � transfer incoming descriptions to arrays � � J%=1 � sel% � name$=leaf$(sel%(J%)) �5 desc$=$desc%(sel%(J%)):� desc$=tigstr$ desc$="" � : � � desc$<>"" � found%=� � K%=1 � descs% < � name$(K%)=name$ desc$(K%)=desc$:found%=�:K%=descs% " � , � � found% � 69 descs%+=1:name$(descs%)=name$:desc$(descs%)=desc$ @ � J � T : ^ � h �writeTigerData(descs%) r� |� �: � �--------------------------- � �. DRAG TO PINBOARD, ICONBAR � �--------------------------- �: ���pinboard(mx%,my%) �� J%,n$,fsp$,x%,y% �x%=mx%:y%=my% �4sel%=�sel:� swh%=copybox% sel%=1:sel%(1)=chosen% �� J%=1 � sel% � n$=leaf$(sel%(J%)) � x$=�x%:� x%<0 x$="0"+x$ � y$=�y%:� y%<0 y$="0"+y$ ( �("Pin "+dir$+"."+n$+" "+x$+" "+y$) ( � J% � 4=0 y%-=116:x%=mx% � x%+=188 � &�closemenu 0� remb%=1 �cw(main%):� Adj :� D: N��iconbar(smb%,sih%) X� J% b4sel%=�sel:� swh%=copybox% sel%=1:sel%(1)=chosen% l� J%=1 � sel% v �doubleclick(smb%,sel%(J%)) �� �� �: ��------------- ��. COPY OBJECT ��------------- �: ���prepcopybox �� wh%:wh%=copybox% �leaf$=leaf$(chosen%) ��it(wh%,2,leaf$) �.q%!0=wh%:q%!4=1:ș "Wimp_GetIconState",,q% � $(q%!28)=�spr(wh%,dragicon%) � : ��copy(ddir$,remb%) � copybox *-FilerAction%=�fileraction:opts%=�readopts 4leaf$=leaf$(chosen%) >sfsp$=dir$+"."+leaf$ H� �checkobj(sfsp$,�) � R fsp$=�it(copybox%,fnicon%) \ � ddir$="" � f � OK/Ret p/ ddir$=�parent(fsp$):� ddir$="" ddir$=dir$ z � � newleaf$=��leaf(fsp$),10) � dfsp$=ddir$+"."+newleaf$ � � FilerAction% � � �fileraction(0) � � � opt$=�copyopts(�) �= �command("Copy files","Copy "+sfsp$+" "+dfsp$+" "+opt$) � � � : � � copy description. if any �( � does ddir$ have a TigerData file? �7 fsp$=ddir$+".TigerData":present%=�checkobj(fsp$,�) � : � � present% � descs%=0 � $! descs%=�loadTigerData(fsp$) . � 8 : B/ � transfer incoming descriptions to arrays L name$=leaf$(chosen%) V desc$=$desc%(chosen%) ` � desc$=tigstr$ desc$="" j � desc$<>"" � t found%=� ~ � K%=1 � descs% �; � name$(K%)=name$ desc$(K%)=desc$:found%=�:K%=descs% � � � � � found% � �8 descs%+=1:name$(descs%)=name$:desc$(descs%)=desc$ � � � � � �writeTigerData(descs%) �1 � ddir$=dir$ � newleaf$<>leaf$ �showTiger(1) � � remb%<>1 �closemenu �� �� �: ��command(title$,command$) 0� perform task with output in command window $C%=title$ ș "Wimp_CommandWindow",C% (� command$ 2ș "Wimp_CommandWindow",0 <� F: P�--------------- Z�. FILER ACTIONS d�--------------- n: x��access(n%) �*� access%,recurse%,wh%:wh%=accesswind% �Ȏ n% � �� 1:� menu choice � Ȏ level2% � � � 0:access%=10 � � 1:access%=2 � � 2:access%=16 � � 3:access%=3 � � � � stay% �redomenu(n%) �� 2:� window click � access%=0 � � �is(wh%,1) access%+=8 � �is(wh%,2) access%+=1 � �is(wh%,3) access%+=2 � �is(wh%,4) access%+=16 " � �is(wh%,5) access%+=8 ,9 � stay% �redomenu(n%):�mainmenu(remx%,remy%,chosen%) 6� @recurse%=�is(wh%,11) J�fileraction(3) T� ^: h��redomenu(n%) r2� re-do ticks in mb5% and icons in accesswind% |�accessmenu(�,n%) �*ș "Wimp_GetPointerInfo",,q%:wh%=q%!12 �)q%!0=wh%:ș "Wimp_GetWindowState",,q% �,ș "Wimp_CreateSubMenu",,mb5%,q%!4,q%!16 �� �: ���accessmenu(more%,n%) �*ș "Wimp_GetPointerInfo",,q%:wh%=q%!12 �'� J%,leaf$,obj%,wh%:wh%=accesswind% �.b%=&7000021:g%=&7400021:� flags=black,grey �2a%=mb5%:p%=a%+28:$a%="Access":f%=b%:wid%=15*16 �,a%!12=&70207:a%!16=wid%:a%!20=44:a%!24=0 �: �$� n%=1 � J%=1 � 10:�ui(wh%,J%):� tick%()=0 -sel%=�sel:� sel%=0 sel%=1:sel%(1)=chosen% leaf$=$name%(chosen%) &!obj%=�objtype(dir$+"."+leaf$) 0�cleariconbit(wh%,11,22) :: D� sel%=1 � obj%=1 � N � one file chosen X �seticonbit(wh%,11,22) b/ ș "OS_File",5,dir$+"."+leaf$ � ,,,,,attr% l � more% attr%=access% v locked%=(attr% � 8)=8 � oread% =(attr% � 1)=1 � owrite%=(attr% � 2)=2 � pread% =(attr% � 16)=16 � pwrite%=(attr% � 32)=32 � � n%=1 � �' � locked% �si(wh%,1) � �si(wh%,6) �' � oread% �si(wh%,2) � �si(wh%,7) �' � owrite% �si(wh%,3) � �si(wh%,8) �' � pread% �si(wh%,4) � �si(wh%,9) �( � pwrite% �si(wh%,5) � �si(wh%,10) � � � protected%=locked% � public%=pread% ) � protected% tick%(0)=� � tick%(1)=� & � public% tick%(2)=� � tick%(3)=� � : *� tick%(0) t%=1 � t%=0 4<s$="Protected":p%!0=t%:p%!4=0:p%!8=b%:$(p%+12)=s$:p%+=24 >� tick%(1) t%=1 � t%=0 H@s$="Unprotected":p%!0=t%+2:p%!4=0:p%!8=b%:$(p%+12)=s$:p%+=24 R� tick%(2) t%=1 � t%=0 \9s$="Public":p%!0=t%:p%!4=0:p%!8=b%:$(p%+12)=s$:p%+=24 f� tick%(3) t%=1 � t%=0 p<s$="Private":p%!0=t%+2:p%!4=0:p%!8=b%:$(p%+12)=s$:p%+=24 z;b%=&7000121:g%=&7400121:� flags=black,grey (indirected) �$mi11%="Access details" �;p%!0=&80:p%!4=wh%:p%!8=b%:p%!12=mi11%:p%!16=-1:p%!20=16 �� �: � ��settype �,� J%,settype%,str$,str2$,num%,len%,more% �str$=�lc(�strip($newname%)) �� str$="":�badtype:� � � �str$,1)="&" str$=�str$,2) �settype%=-1:num%=� �� J%=1 � � str$ �6 � �"0123456789ABCDEFabcdef",�str$,J%,1))<1 num%=� �� � num% � settype%=�("&"+str$) � $ more%=0 . � 8D ș "XOS_ReadVarVal","File$Type_*",C%,18,more%,3 � ,,len%,more% B' C%?len%=&D:str2$=�lc(�strip($C%)) L � more%<=0 � str$=str2$ V � more%>0 � `) settype%=�("&"+��name(more%),11,3)) j � t� ~� settype%>-1 � � �fileraction(4) � refresh%=� �� � �badtype �� �� �: � ��badtype �'ans%=�msg("Bad file type","Cancel") �� �: � ��help � app$ -sel%=�sel:� sel%=0 sel%(1)=chosen%:sel%=1 � sel%=1 � app$=leaf$(sel%(1)) (4 �("WimpTask Filer_Run "+dir$+"."+app$+".!Help") 2� <� F: P��count Z�fileraction(5) d� n: x��find($newname%) �#find$=$newname%:�fileraction(9) �� �: ���stamp ��fileraction(8):refresh%=� �� �: ���fileraction(n%) �� J%,taskh%,leaf$ �-FilerAction%=�fileraction:opts%=�readopts �-sel%=�sel:� sel%=0 sel%(1)=chosen%:sel%=1 �%ș &400DE,"Filer_Action" � taskh% �� J%=1 � sel% leaf$=leaf$(sel%(J%)) ș &40F80,taskh%,dir$ ș &40F81,taskh%,leaf$ "� ,Ȏ n% � 6 � 0:� Copy @, ș &40F82,taskh%,0,opts%,ddir$,�ddir$+1 J � 1:� move/rename T � 2:� Delete ^ � 3:� Set access h= !q%=access% :ș &40F82,taskh%,3,opts%+(recurse%<<4),q%,4 r � 4:� Set type |/ !q%=settype%:ș &40F82,taskh%,4,opts%,q%,4 � � 5:� Count � ș &40F82,taskh%,5,opts%,1 � � 6:� Move �, ș &40F82,taskh%,6,opts%,ddir$,�ddir$+1 �" � 7:� Copy local (within dir) � � 8:� Stamp files � ș &40F82,taskh%,8,opts%,0 � � 9:� Find file �, ș &40F82,taskh%,9,opts%,find$,�find$+1 �� �� �: ��--------------- �. FILER OPTIONS �--------------- : &ݤreadopts 0$force%=(�readcmos(198)�&10)� &10 :%confirm%=(�readcmos(198)�&20)�&20 D%verbose%=(�readcmos(198)�&40)�&40 N#newer%=(�readcmos(198)�&80)�&80 X5o%=verbose%+(confirm%<<1)+(force%<<2)+(newer%<<3) b=o% l: v ��setopts �%� newer%,force%,verbose%,confirm% �verbose%=opts% � 1 �confirm%=(opts% � 2)�2 �force%=(opts% � 4)�4 �newer%=(opts% � 8)�8 ��setcmos(198,force%<<4,&10) �!�setcmos(198,confirm%<<5,&20) �!�setcmos(198,verbose%<<6,&40) ��setcmos(198,newer%<<7,&80) �� �: �ݤreadcmos(ad%) �� byte% "ș "OS_Byte",161,ad% � ,,byte% =byte% : ��setcmos(ad%,byte%,mask%) *� byte2% 4#ș "OS_Byte",161,ad% � ,,byte2% >%byte2%=(byte2% � � mask%) � byte% Hș "OS_Byte",162,ad%,byte2% R� \: fݤcopyopts(delete%) p� o$,o%:o%=�readopts z o$="A" �!� confirm% o$+="C" � o$+="~C" � � delete% o$+="D" � o$+="~D" �� force% o$+="F" � o$+="~F" �o$+="~L" �� newer% o$+="N" � o$+="~N" �o$+="~P~QR~S~T" �!� verbose% o$+="V" � o$+="~V" �=o$ �: �ݤwipeopts �� o$,o%:o%=�readopts:o$="" �!� confirm% o$+="C" � o$+="~C" �� force% o$+="F" � o$+="~F" o$+="R" !� verbose% o$+="V" � o$+="~V" =o$ $: .�------------- 8�. TEXT BUFFER B�------------- L: V ��gettext `5� get text from any text icon and place in buffer j5� continuously called from Poll if textflag%=TRUE t� � textflag% � ~1� dwh%,dih%,flag%,data%,text%,ind%,tsk%,text$ �dwh%=buffwind%:dih%=0 �:ș "Wimp_GetCaretPosition",,C%:� C%!0=dwh% dpos%=C%!20 � ș "Wimp_GetPointerInfo",,q% �#smb%=q%!8:swh%=q%!12:sih%=q%!16 �%� swh%=-2 � swh%=dwh% � smb%<>1 � �'� �demo("Text buffer operations") � �# textflag%=�:�ui(buffwind%,1):� �� �� sih%=-4 � � � title bar �) !q%=swh%:ș "Wimp_GetWindowInfo",,q% � flag%=q%!60:data%=76 � !q%=swh%:q%!4=sih% ș "Wimp_GetIconState",,q% flag%=q%!24:data%=28 (� 20text%=�bitset(flag%,0):ind%=�bitset(flag%,8) < � text% � F text$="" P tsk%=�taskhandle(swh%,sih%) Z � ind% � d8 ș "Wimp_TransferBlock",tsk%,q%!data%,task%,C%,255 n text$=�name(C%) x � � text$=�name(q%+data%) � � �% �movetext(text$,dwh%,dih%,dpos%) �� � textflag%=�:�ui(buffwind%,1) �� �: �!��dragfiletobuff(path$,type%) �� n%,c%,s$ �'� �demo("Text buffer operations") � �'� type%<>&FFF � type%<>&FEB �buzz:� �F%=�(path$) �s$="":n%=0 %ȕ (� �#F%) � (n%<maxdesclen%-10) " c%=�#F%:� c%>31 s$+=�c%:n%+=1 � " �#F%:F%=0 ,�movetext(s$,buffwind%,0,0) 6� @: J��loadsel(q%) T)� DataSave received from another task ^'� �demo("Text buffer operations") � h%dwh%=q%!20:dih%=q%!24:type%=q%!40 r!� dwh%<>buffwind% � dih%<>0 � |'� type%<>&FFF � type%<>&FEB �buzz:� �� send DataSaveAck �'q%!36=-1:$(q%+44)="<Wimp$Scrap>"+�0 �,q%!0=64:q%!12=q%!8:q%!16=2:� DataSaveAck �$ș "Wimp_SendMessage",18,q%,q%!4 �� �: � ��puttext �(� transfer text from buffer to caret �'� �demo("Text buffer operations") � �text$=�it(buffwind%,0) �"ș "Wimp_GetCaretPosition",,C% �#dwh%=C%!0:dih%=C%!4:dpos%=C%!20 �-� dwh%=main% � dih%>78 � dih%<79+items% � % �movetext(text$,dwh%,dih%,dpos%) � � &: 0)��shiftdesc(swh%,sih%,dwh%,dih%,smb%) :*� dragged desc to buffer or other desc D � dwh%=buffwind% � dih%<>0 � N1� (dwh%=buffwind% � swh%=buffwind%) � demo% � X( � �demo("Text buffer operations") � b� l5� dwh%=main% � (dih%<79 � dih%>157 � dih%=sih%) � vinsert%=�is(buffwind%,3) �.� insert% dpos%=�dpos(dwh%,dih%) � dpos%=0 �text$=�it(swh%,sih%) �$�movetext(text$,dwh%,dih%,dpos%) �7� �-1 � smb%=16 �it(swh%,sih%,""):�caret(swh%,sih%) �� �: �ݤdpos(dwh%,dih%) �+� chr pos of pointer in icon after drag � � mx% �)ș "Wimp_GetPointerInfo",,q%:mx%=q%!0 �2q%!0=dwh%:q%!4=dih%:ș "Wimp_GetIconState",,q% �=(mx%-�vax(dwh%,q%!8)) � 16 �: !#��movetext(ss$,dwh%,dih%,dpos%) !insert%=�is(buffwind%,3) !ds$=�it(dwh%,dih%) ! e$="" !*� insert% � !44 � �ds$+�ss$>maxdesclen% e$="Too long to insert" !>4 � �ds$=maxdesclen% e$="Destination buffer full" !H � e$<>"" � !R ans%=�msg(e$,"Cancel") !\ � !f ss$=�insert(ss$,ds$,dpos%) !p � !z� !� � e$="" � !�/ �it(dwh%,dih%,ss$):�caret(dwh%,dih%):�beep !� �:ȗ x%,y%,b%:� b%=0 !�� !�� !�: !�ݤinsert(s$,d$,p%) !�� places s$ in d$ at pos p% !�� l$,r$,maxl%:maxl%=255 !�!� p%<0 p%=0 � � p%>�d$ p%=�d$ !�� �d$+�s$>maxl% �=d$ !�l$=�d$,p%):r$=�d$,�d$-p%) !� =l$+s$+r$ ": "�--------- "�. CHOICES "$�--------- ".: "8��loadchoices "B*� J%,fsp$,d$,s$,n%,wh%:wh%=choicewind% "Lfsp$=taskdir$+".Choices" "V� �checkobj(fsp$,�) � "` H%=�(fsp$) "j" s$=�#H%:� taskdir$+".Choices" "t user$=�#H% "~ n%=�#H% "� � n%=0 demo%=� � demo%=� "� � J%=6 � 16 "� n%=�#H% "�& � n%=1 �si(wh%,J%) � �ui(wh%,J%) "� � "� startdir$=�#H% "� �#H%:H%=0 "� �setchoices "�� "� �setdefaults "�� "�� # : # ��setchoices #� J%,s%,wh%:wh%=choicewind% #openTiger%=�:openbuff%=� #(,promptsave%=�:IconSprites%=�:dragdesc%=� #2s%=� #<� J%=6 � 8 #F � �is(wh%,J%) s%=� #P� #Z� s%=� �si(wh%,6):� default #d5� �is(wh%,6) startdir$=�strip(�osvar("Root$Dir")) #n� �is(wh%,7) � #x5 � � �checkobj(startdir$,�) �si(wh%,6):�ui(wh%,7) #�4 � default to root if can't find user's startdir #�� #�� �is(wh%,8) startdir$="" #�� �is(wh%,9) display%=1 #�� �is(wh%,10) display%=2 #�� �is(wh%,11) display%=3 #�� �is(wh%,12) openTiger%=� #�� �is(wh%,13) openbuff%=� #�� �is(wh%,14) promptsave%=� #� � �is(wh%,15) IconSprites%=� #�� �is(wh%,16) dragdesc%=� #�� #�: $��prepchoicewind $� J%,wh%:wh%=choicewind% $� J%=6 � 8:�ui(wh%,J%):� $"Ȏ startdir$ � $,, � �strip(�osvar("Root$Dir")):�si(wh%,6) $6 � dir$:�si(wh%,7) $@ � "":�si(wh%,8) $J :�si(wh%,6) $T� $^Ȏ display% � $h � 1:�si(wh%,9) $r � 2:�si(wh%,10) $| � 3:�si(wh%,11) $�� $�� openTiger% �si(wh%,12) $�� openbuff% �si(wh%,13) $�� promptsave% �si(wh%,14) $�� IconSprites% �si(wh%,15) $�� dragdesc% �si(wh%,16) $�� $�: $���setdefaults $�� J%,wh%:wh%=choicewind% $�� J%=6 � 16:�ui(wh%,J%):� $�%�si(wh%,6):�si(wh%,9):�si(wh%,12) $�'�si(wh%,14):�si(wh%,15):�si(wh%,16) %�setchoices %� %: %&��savechoices %0'� J%,fsp$,d$,n%,wh%:wh%=choicewind% %:fsp$=taskdir$+".Choices" %DH%=�(fsp$) %N�#H%,task$+" choices" %X�#H%,user$ %b� demo% n%=0 � n%=1 %l�#H%,n% %v� J%=6 � 16 %� � �is(wh%,J%) n%=1 � n%=0 %� �#H%,n% %�� %� � �is(wh%,7) d$=dir$ � d$="" %��#H%,d$ %��("SetType "+fsp$+" &FFF") %� �#H%:H%=0 %�� %�: %��---------- %��. DRAGGING %��---------- %�: &ݤsoliddrag &"� modules present? (RISC OS�3) &&� �swi("DragASprite_Start")=-1 �=� & &� �swi("DragASprite_Stop") =-1 �=� &*� bit 1 of byte 28 set? &4!ș "OS_Byte",161,28 � ,,cmos% &>� (cmos% � 2)=0 �=� &H=� &R: &\ݤfileraction &f� bit 2 of byte 28 set? &p!ș "OS_Byte",161,28 � ,,cmos% &z� (cmos% � 4)=0 �=� &�=� &�: &�ݤswi(swi$) &�� swi%,flags% &�4ș "XOS_SWINumberFromString",,swi$ � swi%;flags% &�� (flags% � 1) swi%=-1 &� =swi% &�: &�!��startdrag(wh%,ih%,mb%,sol%) &�'swh%=wh%:sih%=ih%:smb%=mb%:� source &�� get coords &�)q%!0=wh%:ș "Wimp_GetWindowState",,q% &�Dwminx%=q%!4:wminy%=q%!8:wmaxx%=q%!12:wmaxy%=q%!16:scrolly%=q%!24 '"ox%=q%!4-q%!20:oy%=q%!16-q%!24 '=ș "Wimp_GetPointerInfo",,q%:mx%=q%!0:my%=q%!4:remb%=q%!8 '0q%!0=wh%:q%!4=ih%:ș "Wimp_GetIconState",,q% '$"� initial position of drag box '. Ȏ swh% � '8 : 'B � messwind% 'L sol%=� 'V. q%!4=wh%:ș "Wimp_GetWindowOutline",,q%+4 '` q%!0=wh%:q%!4=5:� drag type 'j xos%=�osxmax:yos%=�osymax 't* q%!24=0:q%!28=0:q%!32=xos%:q%!36=yos% '~ : '� � savebox%,copybox% '� q%!0=wh%:q%!4=5:sprad%=1 '�B q%!8=q%!8+ox%:q%!12=q%!12+oy%:q%!16=q%!16+ox%:q%!20=q%!20+oy% '�4 q%!24=0:q%!28=0:q%!32=&7FFFFFFF:q%!36=&7FFFFFFF '� : '� � main% '� � ih%=-1 � '� � background - rubber band '� � mx%-wminx%<244 � '�, q%!0=wh%:ș "Wimp_GetWindowState",,q% '�4 minx%=q%!4:miny%=q%!8:maxx%=q%!12:maxy%=q%!16 '�( � maxx%>minx%+228 maxx%=minx%+228 ( " q%!0=wh%:q%!4=6:� drag type ( 1 q%!8=mx%:q%!12=my%:q%!16=mx%+4:q%!20=my%+4 (, � restrict parent box to visible area (6 q%!24=minx%:q%!28=miny%:q%!32=maxx%:q%!36=maxy% (( � (2 � (< : (F � ih%>-1 � ih%<79 � (P �si(main%,ih%) (Z sel%=�sel (d* q%!0=wh%:q%!4=5:sprad%=1:sol%=solid% (n, q%!8=mx%:q%!12=my%:q%!16=mx%:q%!20=my% (x5 q%!24=0:q%!28=0:q%!32=&7FFFFFFF:q%!36=&7FFFFFFF (� � (� : (� � ih%>78 � display%=1 � (� � descr (� � � dragdesc% � (�2 iminx%=�vax(wh%,q%!8):iminy%=�vay(wh%,q%!12) (�3 imaxx%=�vax(wh%,q%!16):imaxy%=�vay(wh%,q%!20) (�# � iminx%<wminx% iminx%=wminx% (�# � imaxx%>wmaxx% imaxx%=wmaxx% (�+ w%=(imaxx%-iminx%) � 2:h%=10:mode%=12 (�' �spritecreate("grab",w%,h%,mode%) (� � write to sprite (�> ș "OS_SpriteOp",&100+60,spr%,"grab",0 � r0%,r1%,r2%,r3% ) � 6,32:� 5:� �it(wh%,ih%) )& ș "OS_SpriteOp",r0%,r1%,r2%,r3% )- q%!0=wh%:q%!4=5:sprad%=spr%:sol%=solid% )": q%!8=iminx%:q%!12=iminy%+4:q%!16=imaxx%:q%!20=imaxy% ),5 q%!24=0:q%!28=0:q%!32=&7FFFFFFF:q%!36=&7FFFFFFF )6 � )@ : )J � buffwind% )T1 iminx%=�vax(wh%,q%!8):iminy%=�vay(wh%,q%!12) )^2 imaxx%=�vax(wh%,q%!16):imaxy%=�vay(wh%,q%!20) )h* w%=(imaxx%-iminx%) � 2:h%=10:mode%=12 )r w%-=12 )|& �spritecreate("grab",w%,h%,mode%) )� � write to sprite )�= ș "OS_SpriteOp",&100+60,spr%,"grab",0 � r0%,r1%,r2%,r3% )� � 4,32:� 5:� �it(wh%,0) )�% ș "OS_SpriteOp",r0%,r1%,r2%,r3% )�, q%!0=wh%:q%!4=5:sprad%=spr%:sol%=solid% )�9 q%!8=iminx%:q%!12=iminy%+4:q%!16=imaxx%:q%!20=imaxy% )�4 q%!24=0:q%!28=0:q%!32=&7FFFFFFF:q%!36=&7FFFFFFF )� : )�� )�: )�� sol% � )�- spr$=�spr(swh%,sih%):flags%=�flags(spr$) )�3 ș "DragASprite_Start",flags%,sprad%,spr$,q%+8 *� * ș "Wimp_DragBox",,q% *� *&� *0: *:$��spritecreate(spr$,w%,h%,mode%) *D4ș "OS_SpriteOp",&100+15,spr%,spr$,0,w%,h%,mode% *N� *X: *bݤspr(swh%,sih%) *l#� leaf$,type%,obj%,spr$:spr$="" *v � swh%=savebox% �="file_FFF" *�4� swh%=main% � sih%>78 � sih%<79+items% �="grab" *�&� swh%=buffwind% � sih%=0 �="grab" *�leaf$=leaf$(chosen%) *�#type%=�filetype(dir$+"."+leaf$) *�!obj%=�objtype(dir$+"."+leaf$) *�� sel%>1 obj%=4 *� Ȏ obj% � *� � 0:spr$="tigx" *� � 1:spr$=�file(type%,1) *� � 2:spr$=�dir(leaf$,1) *�, � 3:spr$="file_"+�~type%:� 'image' file *� � 4:spr$="selection" *� :spr$="file_xxx" +� + =spr$ +: + ݤflags(spr$) +*� f% +4 Ȏ spr$ � +>0 � "selection":f%=%01000101:� no drop shadow +H :f%=%11000101 +R� +\=f% +f: +p#��enddrag(q%,swh%,remb%,solid%) +z%� reason code 7 from polling loop +�'� q% contains final pos of drag box +�4bminx%=q%!0:bminy%=q%!4:bmaxx%=q%!8:bmaxy%=q%!12 +� Ȏ swh% � +� � main% +� Ȏ sih% � +�7 � -1 :�select(bminy%,bmaxy%,remb%):� rubber band +�@ :�drop(swh%,sih%,smb%):� Filer/App/Pinboard/Iconbar/Tiger +� � +�8 � copybox%,savebox%,buffwind%:�drop(swh%,sih%,smb%) +� � messwind% +�G q%!0=swh%:q%!4=bminx%:q%!8=bminy%-40:q%!12=bmaxx%:q%!16=bmaxy%-40 +�D q%!28=-1:ș "Wimp_OpenWindow",,q%:ș "Wimp_GetWindowState",,q% +�5 ȗ ȓ q%!4+8,q%!8+8,q%!12-q%!4-16,q%!16-q%!8-16 ,� ,� ,: ,$�----------- ,.�. SELECTION ,8�----------- ,B: ,L ݤsel ,V� how many items selected? ,`� put items into array ,j� J%,n%:n%=0 ,t� J%=1 � items% ,~& � �is(main%,J%) n%+=1:sel%(n%)=J% ,�� ,�=n% ,�: ,�!��select(bminy%,bmaxy%,remb%) ,�&� bminy%>bmaxy% � Ȕ bminy%,bmaxy% ,�� rubber band dragged ,�-� which icons are in box? - get lo and hi ,�� J% ,� ih%=1 ,�� ,�1 !q%=main%:q%!4=ih%:ș"Wimp_GetIconState",,q% ,�2 iminy%=q%!12:iminy%=�vay(main%,iminy%):ih%+=1 - � iminy%<bmaxy% - lo%=ih%-1:ih%-=1 -� lo%>items% lo%=items% -� -(1 !q%=main%:q%!4=ih%:ș"Wimp_GetIconState",,q% -22 iminy%=q%!12:iminy%=�vay(main%,iminy%):ih%+=1 -<� iminy%<bminy% -F hi%=ih%-1 -P� hi%>items% hi%=items% -Z� treat according to remb% -d � lo%>0 � -n � J%=lo% � hi% -x Ȏ remb% � -� � 4:�si(main%,J%) -� � 1:�ti(main%,J%) -� � -� � -�� -�� -�: -���selectall -� sel%=�sel -�� sel%<items% � -�$ � J%=1 � items%:�si(main%,J%):� -�� -�� .: .��clearall .� J%=1 � items% ."" � �is(main%,J%) �ui(main%,J%) .,� .6� .@: .J�------ .T�. KEYS .^�------ .h: .r��keypress(q%) .|)wh%=q%!0:ih%=q%!4:xo%=q%!8:chr%=q%!24 .� Ȏ chr% � .� � 30:� display%=1 �home .� � 13:�return .� � 27:�escape(wh%) .� � 398:� display%=1 �down .� � 399:� display%=1 �up .� � 385:�viewer(dir$):� F1 .� � 386:�parent(dir$):� F2 .�& � 387:� display%=1 �savedata:� F3 .�# � 403:�ow(savebox%):� Shift F3 .� � 388:�test:� F4 .� � 389:�ow(buffwind%):� F5 .� � 392:�undo:� F8 / � 393:�redo:� F9 /# � 394:�size:� Tab adjusts size / ș "Wimp_ProcessKey",chr% /&� /0� /:: /D��escape(wh%) /N#esc%=�:� wh%=messwind% �cw(wh%) /X� /b: /l ��test /v� F4 /�� /�: /��------- /��. CARET /��------- /�: /� ��home /�� wh%=main% � /�+ !C%=main%:ș "Wimp_GetWindowState",,C% /�- C%!20=0:C%!24=0:ș "Wimp_OpenWindow",,C% /� �caretx(wh%,79,0) /�� /�� 0: 0��return 0 ret%=� 0 Ȏ wh% � 0* � main% 04 � display%=1 � 0> � ih%=156 �home:� 0H � ih%=79+items%-1 � 0R �scrolldown(wh%,ih%) 0\ �caretx(wh%,ih%+1,0) 0f � 0p � savebox% 0z+ � ih%=fnicon% �quicksave(wh%,ih%,&FFF) 0� � copybox%:�copy("",remb%) 0�� 0�� 0�: 0� ��down 0�� wh%=main% � 0� � ih%=156 �home:� 0� � ih%=79+items%-1 � 0� �scrolldown(wh%,ih%) 0� �caretx(wh%,ih%+1,xo%) 0�� 0�� 0�: 1��up 1� wh%=main% � 1 � ih%=78 � 1$ � ih%=79 � ih%=156 �home:� 1. �scrollup(wh%,ih%) 18 �caretx(wh%,ih%-1,xo%) 1B� 1L� 1V: 1`��scrolldown(wh%,ih%) 1j� scroll va up? 1t� w%,i%,n% 1~-� get extreme window edge relative to wao 1�?C%!0=wh%:ș "Wimp_GetWindowState",,C%:w%=C%!24-(C%!16-C%!8) 1�3� get extreme edge of next icon relative to wao 1�;C%!0=wh%:C%!4=ih%+1:ș "Wimp_GetIconState",,C%:i%=C%!12 1� � i%<w% � 1�= n%=�(i%)-�(w%):� n%>44 n%=44:� align with edge of window 1�3 !C%=wh%:ș "Wimp_GetWindowState",,C%:C%!24-=n% 1�' ș "Wimp_OpenWindow",,C%:�("FX15") 1�� 1�� 1�: 1���scrollup(wh%,ih%) 1�� scroll va down? 2 � w%,i%,n% 2 -� get extreme window edge relative to wao 22C%!0=wh%:ș "Wimp_GetWindowState",,C%:w%=C%!24 23� get extreme edge of prev icon relative to wao 2(;C%!0=wh%:C%!4=ih%-1:ș "Wimp_GetIconState",,C%:i%=C%!20 22 � i%>w% � 2<= n%=�(w%)-�(i%):� n%>44 n%=44:� align with edge of window 2F5 !C%=main%:ș "Wimp_GetWindowState",,C%:C%!24+=n% 2P' ș "Wimp_OpenWindow",,C%:�("FX15") 2Z� 2d� 2n: 2x��iconscroll 2�)� horizontal scroll of writable icons 2�2ș "Wimp_GetCaretPosition",,C%:� C%!0<>main% � 2�newi%=C%!4:newp%=C%!20 2�(� get window edges as chrs into icon 2�+C%!0=main%:ș "Wimp_GetWindowState",,C% 2�wl%=(C%!20-228)�16 2�#wr%=(C%!20+(C%!12-C%!4)-228)�16 2�#� newp%>oldp% � newp%>(wr%-1) � 2�- ș "Wimp_GetCaretPosition",,C%:ix%=C%!20 2�+ !C%=main%:ș "Wimp_GetWindowState",,C% 2�3 C%!20+=(ix%-oldp%)*16:ș "Wimp_OpenWindow",,C% 2�� 2�/� newp%<oldp% � (newp%<(wl%+1) � newp%=0) � 3- ș "Wimp_GetCaretPosition",,C%:ix%=C%!20 3+ !C%=main%:ș "Wimp_GetWindowState",,C% 3, � ix%=0 C%!20=0 � C%!20-=(oldp%-ix%)*16 3" ș "Wimp_OpenWindow",,C% 3,� 36oldi%=newi%:oldp%=newp% 3@� 3J: 3T��caret(wh%,ih%) 3^� s$:s$=�it(wh%,ih%) 3h/ș "Wimp_SetCaretPosition",wh%,ih%,,,-1,�s$ 3r� 3|: 3���caretx(wh%,ih%,xo%) 3�1ș "Wimp_SetCaretPosition",wh%,ih%,xo%,,-1,-1 3�� 3�: 3��------- 3��. MOUSE 3��------- 3�: 3���mouse(q%) 3�� m$,mx%,my%,mb%,wh%,ih% 3�<mx%=q%!0:my%=q%!4:mb%=q%!8:wh%=q%!12:ih%=q%!16:icon%=ih% 3� remb%=mb% 3�&� mb% � 2 �menu(wh%,ih%,mx%,my%):� 4Ȏ wh% � 4 �-2:� icon bar 4 � ih%=baricon% � 4& Ȏ mb% � 40( � 1:ș "Wimp_SetCaretPosition",-1 4: � Adj removes input focus 4D � 4: 4N � pristine% � 4XE ans%=�msg("Drag object from Filer window to Tiger icon","OK") 4b � 4l �ow(main%) 4v � � �focus(main%) � 4� �caretx(main%,156,0) 4�4 � display%=1 � items%>0 �caretx(main%,79,0) 4� � 4� � 4� � 4� � 4� : 4� � main% 4� � ih%=-1 � 4� Ȏ mb% � 4�% � 4:�clearall:� click with Sel 4�( � 16,64:�startdrag(wh%,ih%,mb%,�) 4� � 5 � 5 � ih%=0 � 5' � �-1 �root(dir$) � �parent(dir$) 5 � 5* � ih%>0 � ih%<=items% � 54 chosen%=ih% 5> Ȏ mb% � 5H" � 1,4:�doubleclick(mb%,ih%) 5R- � 16,64:�startdrag(wh%,ih%,mb%,solid%) 5\! � 256,1024:�click(mb%,ih%) 5f � 5p � 5z � ih%>78 � ih%<79+items% � 5� Ȏ mb% � 5� � 1,4 5�3 �scrolldown(wh%,ih%-1):�scrollup(wh%,ih%+1) 5�( � 16,64:�startdrag(wh%,ih%,mb%,�) 5� � 5� � 5� : 5� � savebox% 5� Ȏ ih% � 5� � dragicon% 5� Ȏ mb% � 5�. � 16,64:�startdrag(wh%,ih%,mb%,solid%) 5� � 6( � okicon%:�quicksave(wh%,ih%,&FFF) 6" � mb%<>1 �cw(wh%):�closemenu 6# � clicon%:�cw(wh%):�closemenu 6$. � 13:� mb%=1 � � �is(wh%,13):�si(wh%,13) 6.. � 14:� mb%=1 � � �is(wh%,14):�si(wh%,14) 68. � 15:� mb%=1 � � �is(wh%,15):�si(wh%,15) 6B � 6L : 6V � copybox% 6` Ȏ ih% � 6j � dragicon% 6t Ȏ mb% � 6~. � 16,64:�startdrag(wh%,ih%,mb%,solid%) 6� � 6� � okicon%:�copy("",remb%) 6� � clicon%:�closemenu 6� � 6� : 6� � choicewind% 6� Ȏ ih% � 6�3 � 2:�setdefaults:� mb%<>1 �cw(wh%):�closemenu 6� � 3:�cw(wh%):�closemenu 6�3 � 4:�savechoices:� mb%<>1 �cw(wh%):�closemenu 6�2 � 5:�setchoices:� mb%<>1 �cw(wh%):�closemenu 6�3 �12:� � �is(wh%,12) � �is(wh%,13) �ui(wh%,13) 7 3 �13:� �is(wh%,13) � � �is(wh%,12) �ui(wh%,13) 7 � 7 : 7 � accesswind% 7( � ih%=0 � 72 � mb%=1 stay%=� � stay%=� 7<$ �access(2):� mb%<>1 �closemenu 7F � 7P : 7Z � messwind%:reply%=ih% 7d Ȏ mb% � 7n' � 16,64:�startdrag(wh%,ih%,mb%,�) 7x � 7� : 7� � buffwind% 7� Ȏ ih% � 7�5 � 0:� mb%=16 � mb%=64 �startdrag(wh%,ih%,mb%,�) 7�/ ș "Wimp_GetCaretPosition",,C%:pos%=C%!20 7�0 � 1:� �is(wh%,1) textflag%=� � textflag%=� 7� � 2:�puttext 7�+ � 3:� mb%=1 � � �is(wh%,3):�si(wh%,3) 7�+ � 4:� mb%=1 � � �is(wh%,4):�si(wh%,4) 7�% � 5:�it(wh%,0,""):�caret(wh%,0) 7� � 7�� 7�� 8: 8��click(mb%,ih%) 8Ȏ mb% � 8" � 1024:� Sel 8,0 � � �is(main%,ih%) �clearall:�si(main%,ih%) 86 � 256:�ti(main%,ih%):� Adj 8@� 8J� 8T: 8^�------ 8h�. MENU 8r�------ 8|: 8���menu(wh%,ih%,mx%,my%) 8�� middle button clicked 8�Ȏ wh% � 8� � main% 8�+ ș "Wimp_GetPointerInfo",,q%:ih%=q%!16 8�0 chosen%=0:� ih%>0 � ih%<=items% chosen%=ih% 8�' sel%=�sel:� sel%=1 chosen%=sel%(1) 8� �mainmenu(mx%,my%,chosen%) 8� � -2:�barmenu(mx%,my%) 8�� 8�� 8�: 8���mainmenu(mx%,my%,chosen%) 9/� J%,f%,b%,g%,n$,n2$,n3$,wid%,wh%,ih%,name$ 9)remx%=mx%:remy%=my%:present%=�:n3$="" 9-name$="":n$="File ''":obj%=1:$newname%="" 9&� chosen% � 90 name$=leaf$(chosen%) 9: � is obj in Filer? 9D+ present%=�checkobj(dir$+"."+name$,�)=� 9N" obj%=�objtype(dir$+"."+name$) 9X� 9b: 9l sel%=�sel 9v� sel%=1 � chosen% � 9� n2$="File ":n3$="File" 9�) � obj%=2 n2$="Dir. ":n3$="Directory" 9�; � obj%=2 � �name$,1)="!" n2$="App. ":n3$="Application" 9� n$=n2$+"'"+name$+"'" 9�� 9�+� sel%>1 n$="Selection":n3$=n$:name$=n$ 9�: 9�G$mi0%="Display":$mi1%=n$:$mi2%="Select all":$mi3%="Clear selection" 9�A$mi4%="Options":$mi5%="New directory":$mi6%="Open filer F1" 9�3$mi7%="Goto parent F2":$mi8%="Save data F3" 9�;$mi9%="Save text "+�139+"F3":$mi10%="Open buffer F5" 9�=$mi11%="Undo changes F8":� redo% $mi11%="Redo changes F9" 9�: :'wid%=(�n$+1)*16:� wid%<256 wid%=256 :,a%=mb1%:!a%=main%:p%=a%+32:$(a%+4)=task$ :,a%!16=&70207:a%!20=wid%:a%!24=44:a%!28=0 : ;b%=&7000121:g%=&7400121:� flags=black,grey (indirected) :*: :4@p%!0=0:p%!4=mb4%:p%!8=b%:p%!12=mi0%:p%!16=-1:p%!20=16:p%+=24 :>)� name$="" � � present% f%=g% � f%=b% :H@p%!0=0:p%!4=mb2%:p%!8=f%:p%!12=mi1%:p%!16=-1:p%!20=16:p%+=24 :R� items%=0 f%=g% � f%=b% :\=p%!0=0:p%!4=0:p%!8=f%:p%!12=mi2%:p%!16=-1:p%!20=16:p%+=24 :f� sel%=0 f%=g% � f%=b% :p=p%!0=0:p%!4=0:p%!8=f%:p%!12=mi3%:p%!16=-1:p%!20=16:p%+=24 :z@p%!0=0:p%!4=mb6%:p%!8=b%:p%!12=mi4%:p%!16=-1:p%!20=16:p%+=24 :�Ap%!0=10:p%!4=mb3%:p%!8=b%:p%!12=mi5%:p%!16=-1:p%!20=16:p%+=24 :�=p%!0=0:p%!4=0:p%!8=b%:p%!12=mi6%:p%!16=-1:p%!20=16:p%+=24 :�!� �isroot(dir$) f%=g% � f%=b% :�=p%!0=0:p%!4=0:p%!8=f%:p%!12=mi7%:p%!16=-1:p%!20=16:p%+=24 :�)� display%=1 � items%>0 f%=b% � f%=g% :�=p%!0=0:p%!4=0:p%!8=f%:p%!12=mi8%:p%!16=-1:p%!20=16:p%+=24 :�� items%>0 f%=b% � f%=g% :�Dp%!0=8:p%!4=savebox%:p%!8=f%:p%!12=mi9%:p%!16=-1:p%!20=16:p%+=24 :�>p%!0=8:p%!4=0:p%!8=f%:p%!12=mi10%:p%!16=-1:p%!20=16:p%+=24 :�!� undo% � redo% f%=b% � f%=g% :�9p%!0=&80:p%!4=0:p%!8=f%:p%!12=mi11%:p%!16=-1:p%!20=16 :�: :�.b%=&7000021:g%=&7400021:� flags=black,grey ;"a%=mb2%:p%=a%+28:$a%=n3$:f%=b% ;+a%!12=&70207:a%!16=168:a%!20=44:a%!24=0 ;.� sel%>1 � name$="TigerData" f%=g% � f%=b% ;$=s$="Copy":p%!0=8:p%!4=copybox%:p%!8=f%:$(p%+12)=s$:p%+=24 ;..� name$="TigerData" � sel%>1 f%=g% � f%=b% ;8;s$="Rename":p%!0=8:p%!4=mb3%:p%!8=f%:$(p%+12)=s$:p%+=24 ;B%� name$="TigerData" f%=g% � f%=b% ;L8s$="Delete":p%!0=0:p%!4=0:p%!8=f%:$(p%+12)=s$:p%+=24 ;V;s$="Access":p%!0=8:p%!4=mb5%:p%!8=b%:$(p%+12)=s$:p%+=24 ;`7s$="Count":p%!0=0:p%!4=0:p%!8=b%:$(p%+12)=s$:p%+=24 ;j%� �help(name$,obj%) f%=b% � f%=g% ;t6s$="Help":p%!0=0:p%!4=0:p%!8=f%:$(p%+12)=s$:p%+=24 ;~� sel%>1 f%=g% � f%=b% ;�=s$="Info":p%!0=8:p%!4=objinfo%:p%!8=f%:$(p%+12)=s$:p%+=24 ;�9s$="Find":p%!0=8:p%!4=mb3%:p%!8=b%:$(p%+12)=s$:p%+=24 ;�%� name$="TigerData" f%=g% � f%=b% ;�=s$="Set type":p%!0=8:p%!4=mb3%:p%!8=f%:$(p%+12)=s$:p%+=24 ;�7s$="Stamp":p%!0=0:p%!4=0:p%!8=f%:$(p%+12)=s$:p%+=24 ;�/� name$="!TigerData" � obj%=2 v%=0 � v%=&80 ;�� obj%=1 f%=g% � f%=b% ;�=s$="Open filer":p%!0=v%:p%!4=0:p%!8=f%:$(p%+12)=s$:p%+=24 ;�;� v%=0 s$="Convert":p%!0=&80:p%!4=0:p%!8=b%:$(p%+12)=s$ ;�: ;�6a%=mb4%:p%=a%+28:$a%="Display":f%=b%:wid%=12*16+12 ;�,a%!12=&70207:a%!16=wid%:a%!20=44:a%!24=0 <