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
<