Home » Archimedes archive » Archimedes World » AW-1991-05.adf » May91 » !AWMay91/Goodies/PD/!VKiller/!RunImage
!AWMay91/Goodies/PD/!VKiller/!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 » Archimedes World » AW-1991-05.adf » May91 |
Filename: | !AWMay91/Goodies/PD/!VKiller/!RunImage |
Read OK: | ✔ |
File size: | 40B2 bytes |
Load address: | 0000 |
Exec address: | 0000 |
File contents
10REM >$.!VKiller.!RunImage 20REM Virus Killer V1.10 (C) Richard K. Lloyd 1990 30REM Currently kills the "Extend Virus" (see documentation) 40REM 50REM Recommended CD: 60REM B-52's "Cosmic Thing". Weird at first, but it grows on you ! 70 80REM General error trapper 90ON ERROR PROCsystemerror 100 110quit%=FALSE:REM Nothing happened yet 120PROCinit 130REPEAT 140 PROCwimp_poll 150UNTIL quit% 160 170SYS "XWimp_CloseDown",task%,!taskconst% 180SYS "OS_Exit" 190 200DEFPROCinit 210size%=77*32:REM Max of 77 files per dir and 32 bytes per file info 220maxboot%=&1400:REM 5K is largest allowed size for !Boot 230maxlevel%=8:REM Allow for 8 levels of directory 240DIM info% size%*maxlevel%,buff% maxboot%,fbuff% 12 250icon$="IconSprites <Obey$Dir>.!Sprites"+CHR$(&A) 260iconlen%=LEN(icon$) 270protect$="| This file has been innoculated against the Extend Virus"+CHR$(&A)+"||"+CHR$(&FF) 280protlen%=LEN(protect$) 290extendhelp$="Extend"+CHR$(9)+CHR$(9)+"1.56 (08 Jul 1989)" 300deffs$="adfs":REM Default filing system 310infect%=FALSE:still%=FALSE:REM No virus checks yet 320nummem%=0:numdisk%=0:numinnoc%=0:numscans%=0:REM Reset counters 330fsysnum%=0:fsys$="":REM Not checked filing system yet 340innoc%=FALSE:REM Not innoculating by default 350 360REM Application Constants 370prog$="VKiller":REM English text name of program 380REM Change next line to date$=MID$(TIME$,5,11) to get the current date 390date$="05 Dec 1990":REM Current date as a fixed string 400vkillvar$="<VKiller$Dir>":REM VKiller environmental variable 410iconbartype%=-1:REM -1 = Utility (RHS of bar), -2 = Service (LHS of bar) 420windman%=200:REM Expect at LEAST V2.00 of the Window Manager 430bl$=CHR$(0):REM NULL char used to terminate strings 440dirscan%=16:REM Directory spec goes in this icon 450status%=17:REM Status messages go in this icon 460 470REM Workspace for application 480DIM vkillwind% &E00,infowind% &E00:REM Template workspace 490DIM poll% 256:REM Wimp_Poll workspace 500DIM icon% 48:REM Icon bar icon workspace 510DIM menu% &100:REM Menu structure workspace 520DIM taskconst% 8:$taskconst%="TASK":REM Store Task constant here 530DIM icondata% 256:REM Temp workspace to get/put icon data 540 550REM Initialise WIMP 560SYS "XWimp_Initialise",windman%,!taskconst%,prog$+bl$ TO windvers%,task% 570IF windvers%<windman% THEN PROCfatal(prog$+" requires Window Manager V"+FNfraction(windman%)+" or later") 580 590PROCmakemenu:REM Construct menu (should be BEFORE template loading) 600PROCgettemplates:REM Get window templates from file 610PROCmakeicon:REM Create icon bar icon 620PROCnextfs 630PROCfinishscan 640PROCputdata(status%,"Idle") 650PROCscanmodules(FNgettaskhand("")) 660ENDPROC 670 680DEFFNgettaskhand(taskname$) 690REM This routine is unintentionally blank :-( 700REM Although it is possible to get the name of a task given its handle, 710REM there appears to be no way to get the reverse (Task Manager cheats - 720REM it runs first of all and picks up Wimp_Initialise handles/names). 730REM Can anyone out there complete this routine to return a task handle 740REM given its name ? Pretty please ? 750=0 760 770DEFPROCcheck(dir$,leafdir$,level%) 780LOCAL off%,base%,num%,loop%,addr%,name$,fullname$,len%,gotboot%,type% 790PROCwimp_poll 800IF quit%=TRUE OR scanning%=FALSE:ENDPROC 810IF level%=maxlevel% THEN 820 PROCputdata(status%,"Dir level "+STR$(maxlevel%)+" - skipping deeper") 830 ENDPROC 840ENDIF 850dir$=dir$+"."+leafdir$ 860PROCputdata(dirscan%,dir$) 870off%=0:gotboot%=FALSE:base%=info%+level%*size% 880REPEAT 890 addr%=base% 900 SYS "XOS_GBPB",10,dir$+CHR$(0),addr%,77,off%,size%,"*"+CHR$(0) TO ,,,num%,off% 910 IF num% THEN 920 FOR loop%=0 TO num%-1 930 obj%=addr%!16 940 len%=addr%!8:type%=(!addr%>>>8) AND &FFF 950 addr%+=20:name$=FNgetstring(addr%) 960 addr%=(addr%+4) DIV 4*4:REM Align to next word 970 IF obj%=2 THEN 980 PROCcheck(dir$,name$,level%+1) 990 ELSE 1000 fullname$=dir$+"."+name$ 1010 CASE FNlower(name$) OF 1020 WHEN "!boot":gotboot%=TRUE 1030 IF type%=&FEB THEN 1040 PROCcheckboot(fullname$,len%) 1050 ENDIF 1060 WHEN "monitorrm","checkmod","extendrm","osextend","colourrm","fastmod","coderm","memrm": 1070 IF len%=940 AND type%=&FFA THEN 1080 IF FNoscli("Load",fullname$,STR$~buff%)=FALSE THEN 1090 buff%!&34=0:REM Zero count due to bad load 1100 ENDIF 1110 PROCextendvirus("module",buff%) 1120 PROCdelmodule(fullname$) 1130 ENDIF 1140 ENDCASE 1150 ENDIF 1160 NEXT 1170 ENDIF 1180UNTIL off%=-1 OR quit%=TRUE OR scanning%=FALSE 1190IF gotboot%=FALSE AND ASC(leafdir$)=33 AND innoc%=TRUE AND quit%=FALSE AND scanning%=TRUE THEN 1200 IF FNinnocboot(dir$+".!Boot",base%,0,FNexists(dir$+".!Sprites",&FF9)) THEN 1210 PROCputdata(status%,"New innoculated !Boot created") 1220 ENDIF 1230ENDIF 1240ENDPROC 1250 1260DEFPROCcheckboot(name$,l%) 1270LOCAL doinnoc% 1280IF l%>=maxboot% THEN 1290 still%=TRUE:infect%=TRUE 1300 PROCputdata(status%,"!Boot too big - not scanned") 1310 ENDPROC 1320ENDIF 1330doinnoc%=innoc% 1340SYS "XOS_CLI","Load "+name$+" "+STR$~buff% 1350CASE buff%?(l%-1) OF 1360WHEN &FF:CASE buff%?(l%-4) OF 1370 WHEN 13:PROCextendvirus("in !Boot",0) 1380 PROCdiskinfect 1390 l%=l%-4:doinnoc%=TRUE 1400 WHILE l%>0 AND buff%?(l%-1)<>&D 1410 l%=l%-1 1420 ENDWHILE 1430 buff%?(l%-1)=&A 1440 WHEN 10:doinnoc%=FALSE 1450 PROCputdata(status%,"!Boot already innoculated") 1460 OTHERWISE doinnoc%=FALSE 1470 ENDCASE 1480WHEN &0A:REM Normal terminator 1490OTHERWISE buff%?l%=&A:l%+=1:REM Add LF on end 1500ENDCASE 1510IF doinnoc% THEN 1520 IF l%+protlen%+1>maxboot% THEN 1530 still%=TRUE:infect%=TRUE 1540 PROCputdata(status%,"!Boot too big - not innoculated") 1550 ENDPROC 1560 ENDIF 1570 IF FNinnocboot(name$,buff%,l%,FALSE) THEN 1580 PROCputdata(status%,"!Boot has now been innoculated") 1590 ENDIF 1600ENDIF 1610ENDPROC 1620 1630DEFFNinnocboot(n$,a%,len%,addicon%) 1640LOCAL good%:good%=FALSE 1650IF addicon% THEN 1660 $(a%+len%)=icon$ 1670 len%+=iconlen% 1680ENDIF 1690$(a%+len%)=protect$ 1700IF FNoscli("Save",n$,STR$~a%+" "+STR$~(a%+len%+protlen%)) THEN 1710 IF FNoscli("SetType",n$,"Obey") THEN 1720 numinnoc%+=1:good%=TRUE:PROCputdata(21,STR$(numinnoc%)) 1730 ENDIF 1740ENDIF 1750=good% 1760 1770DEFPROCextendvirus(mess$,addr%) 1780LOCAL t% 1790IF addr%:PROCputdata(dirscan%,"Execution Count: "+STR$(addr%!&34)) 1800PROCputdata(status%,"Extend Virus "+mess$+" found !") 1810infect%=TRUE:PROCopenwindow 1820t%=TIME+200:REM Delay to see message 1830REPEAT 1840 PROCwimp_poll 1850UNTIL TIME>t% OR quit% 1860ENDPROC 1870 1880DEFPROCdelmodule(m$) 1890PROCdiskinfect 1900IF FNoscli("Delete",m$,"") THEN 1910 PROCputdata(status%,"Extend Virus module deleted") 1920ENDIF 1930ENDPROC 1940 1950DEFPROCdiskinfect 1960numdisk%+=1:PROCputdata(20,STR$(numdisk%)) 1970ENDPROC 1980 1990DEFFNoscli(l$,m$,r$) 2000LOCAL flags%,again%,errblk% 2010REPEAT 2020 IF l$="RMKill" THEN 2030 SYS "XWimp_StartTask",l$+" "+m$+" "+r$+" { > null: }" TO errblk%;flags% 2040 ELSE 2050 SYS "XOS_CLI",l$+" "+m$+" "+r$+" { > null: }" TO errblk%;flags% 2060 ENDIF 2070 again%=FALSE 2080 IF flags% AND 1 THEN 2090 CASE !errblk% OF 2100 WHEN &108C9: 2110 again%=FNyesno(" Write-protected disk ! Retry disk write ?") 2120 WHEN &108C3:again%=FNoscli("Access",m$,"WR") 2130 OTHERWISE 2140 IF !errblk%>&10000 THEN 2150 PROCputdata(status%,"Couldn't perform disk write") 2160 ELSE 2170 PROCputdata(status%,"Couldn't delete Extend module") 2180 ENDIF 2190 ENDCASE 2200 IF again%=FALSE:still%=TRUE 2210 ENDIF 2220UNTIL again%=FALSE 2230=((flags% AND 1)=0) 2240 2250DEFFNwimperror(mess$,mask%) 2260LOCAL click% 2270SYS "XWimp_ReportError",STRING$(4,bl$)+mess$+bl$,mask%,"VKiller Warning"+bl$ TO ,click% 2280=click% 2290 2300DEFFNyesno(mess$)=(FNwimperror(mess$,%10011)=1) 2310 2320DEFPROCwarn(mess$) 2330LOCAL click% 2340click%=FNwimperror(mess$,%10001) 2350ENDPROC 2360 2370DEFPROCscanmodules(hand%) 2380LOCAL module%,sub%,start%,flags%,help% 2390REPEAT 2400 SYS "XOS_Module",12,module%,sub% TO ,module%,sub%,start%;flags% 2410 IF (flags% AND 1)=0 THEN 2420 help%=start%+start%!&14 2430 IF FNgetstring(help%)=extendhelp$ THEN 2440 nummem%+=1:infect%=TRUE 2450 PROCputdata(19,STR$(nummem%)) 2460 IF hand% THEN 2470 REM This is a bug-fix :-) It allows the virus task 2480 REM to shutdown properly without crashing the Task Manager 2490 start%!&40=hand%:REM Save task handle 2500 P%=start%+&70 2510 [OPT 0 2520 LDR R2,start%+&64:CMP R2,#1:SWIGT "XOS_Module" 2530 LDR R0,start%+&40:LDR R1,start%+&54 2540 ] 2550 ELSE 2560 PROCwarn("Task Manager is unstable ! Do not use it") 2570 ENDIF 2580 PROCextendvirus("in RMA",start%) 2590 IF FNoscli("RMKill","Extend","") THEN 2600 PROCputdata(status%,"Extend Virus killed from RMA") 2610 ELSE 2620 still%=TRUE 2630 ENDIF 2640 ENDIF 2650 ENDIF 2660UNTIL flags% AND 1 2670ENDPROC 2680 2690DEFFNexists(file$,type%) 2700LOCAL found%,ftype% 2710SYS "XOS_File",5,file$ TO found%,,ftype% 2720ftype%=(ftype%>>>8) AND &FFF 2730=(found%=1 AND type%=ftype%) 2740 2750DEFFNlower(s$) 2760LOCAL loop%,n$,c$:n$="" 2770FOR loop%=1 TO LEN(s$) 2780 c$=MID$(s$,loop%,1) 2790 IF c$>="A" AND c$<="Z" THEN 2800 n$=n$+CHR$(ASC(c$)+32) 2810 ELSE 2820 n$=n$+c$ 2830 ENDIF 2840NEXT 2850=n$ 2860 2870DEFFNgetstring(RETURN addr%) 2880LOCAL s$:s$="" 2890WHILE ?addr%<>0:s$=s$+CHR$(?addr%):addr%+=1:ENDWHILE 2900=s$ 2910 2920DEFPROCwimp_poll 2930LOCAL reason% 2940SYS "XWimp_Poll",0,poll% TO reason% 2950CASE reason% OF 2960WHEN 2:SYS "XWimp_OpenWindow",,poll%:REM Info window drag 2970WHEN 3:PROCclosewindow 2980WHEN 6:PROCmouseclick 2990WHEN 9:PROCmenuselect 3000WHEN 17,18:PROCwimpmessage 3010ENDCASE 3020ENDPROC 3030 3040DEFPROCclosewindow 3050SYS "XWimp_CloseWindow",,vkillwind%:REM Eval close box 3060ENDPROC 3070 3080DEFPROCmouseclick 3090CASE poll%!8 OF 3100 WHEN 1,4:PROCstartup 3110 WHEN 2:PROCshownewmenu 3120ENDCASE 3130ENDPROC 3140 3150DEFPROCshownewmenu 3160LOCAL y% 3170IF poll%!12=-2:y%=96+!spacing*numitems% ELSE y%=poll%!4+16 3180oldx%=!poll%-64:oldy%=y% 3190PROCshowoldmenu 3200ENDPROC 3210 3220DEFPROCshowoldmenu 3230SYS "XWimp_CreateMenu",,menu%,oldx%,oldy% 3240ENDPROC 3250 3260DEFPROCopenwindow 3270vkillwind%!28=-1:REM Open on top of everyone else 3280SYS "XWimp_OpenWindow",,vkillwind% 3290ENDPROC 3300 3310DEFPROCstartup 3320CASE poll%!12 OF 3330 WHEN -2:PROCopenwindow 3340 WHEN vkillhand%: 3350 CASE poll%!16 OF 3360 WHEN 7:IF scanning%=FALSE:PROCnextfs:REM Filing system change 3370 WHEN 8,9,10,11,12,13,14,15:IF scanning%=FALSE:drive%=poll%!16-8:REM Drive change 3380 WHEN 23:IF scanning%:PROCfinishscan ELSE PROCstartscan 3390 WHEN 24:innoc%=NOT innoc% 3400 ENDCASE 3410ENDCASE 3420ENDPROC 3430 3450DEFPROCmenuselect 3460LOCAL mouse%,item%:item%=!poll%+1 3470SYS "XWimp_GetPointerInfo",,poll%:mouse%=poll%!8 3480CASE item% OF 3490 WHEN numitems%:quit%=TRUE:REM Last Item = Quit 3500ENDCASE 3510IF mouse%=1:PROCshowoldmenu 3520ENDPROC 3580 3590DEFPROCwimpmessage 3600CASE poll%!16 OF 3610 WHEN 0:quit%=TRUE:REM Shut down (Desktop Exit, Task Manager Quit) 3620 WHEN &400C2:PROCappstart 3630ENDCASE 3640ENDPROC 3650 3660DEFPROCappstart 3670REM Unlike, ahem, certain Acorn applications we could mention, it really 3680REM is nice to make sure only one invocation of the program has been 3690REM activated - this is done by checking a new task's name/handle 3700LOCAL A%,B%,same% 3710IF poll%!4<>task% THEN 3720 A%=poll%+28:B%=-1 3730 IF ?A% THEN 3740 REPEAT 3750 B%+=1:same%=(A%?B%=ASC(MID$(prog$+bl$,B%+1))) 3760 UNTIL A%?B%=0 OR NOT same% 3770 IF same%:quit%=TRUE 3780 ELSE 3790 PROCscanmodules(poll%!4) 3800 ENDIF 3810ENDIF 3820ENDPROC 3830 3840DEFPROCputdata(icon%,mess$) 3850REM Change icon 'icon%' to the string mess$ 3860REM Note that this assumes an indirected icon of course ! 3870!icondata%=vkillhand%:icondata%!4=icon% 3880SYS "XWimp_GetIconState",,icondata% 3890$(icondata%!28)=mess$ 3900SYS "XWimp_ForceRedraw",vkillhand%,icondata%!8,icondata%!12,icondata%!16,icondata%!20 3910ENDPROC 3920 3930DEFFNgetdata(wind%,icon%) 3940REM Read the value of icon 'icon%' in window 'wind%' 3950REM Note that this assumes an indirected icon of course ! 3960!icondata%=wind%:icondata%!4=icon% 3970SYS "XWimp_GetIconState",,icondata% 3980=$(icondata%!28) 3990 4000DEFPROCmakeicon 4010P%=icon%:REM Use built in assembler - easier to see structure 4020[OPT 0 4030 EQUD iconbartype% ; Icon bar 'utility' flag 4040 EQUD 0 ; Bottom left X 4050 EQUD 0 ; Bottom left Y 4060 EQUD 69 ; Top right X 4070 EQUD 68 ; Top right Y 4080 EQUB %00000010 ; Icon is a sprite 4090 EQUB %00110001 ; Click notifies/Indirected 4100 EQUB %00000000 ; Nothing special about icon 4110 EQUB %00000001 ; Forecol = 1, Backcol = 0 4120.pokespname EQUD pokespname+12 ; Pointer to sprite name 4130 EQUD 1 ; Pointer to WIMP sprites 4140 EQUD 12 ; Length of sprite name 4150.spritename EQUS "!vkiller"+STRING$(4,bl$) ; Sprite name 4160] 4170SYS "XWimp_CreateIcon",,icon% TO iconhand% 4180ENDPROC 4190 4200DEFPROCmakemenu 4210numitems%=2:REM Change if you add more 4220P%=menu%:REM Use assembler 4230[OPT 0 4240 EQUS prog$+STRING$(12-LEN(prog$),bl$) ; Menu title 4250 EQUB 7 ; Foreground colour 4260 EQUB 2 ; Background colour 4270 EQUB 7 ; Work foregrd colour 4280 EQUB 0 ; Work backgrd colour 4290 EQUD 148 ; Total width 4300.spacing EQUD 44 ; Total height 4310 EQUD 0 ; Line spacing 4320; Item #1 4330 EQUD 0 ; Nothing special 4340.submenupoke EQUD 0 ; Sub-menu addr poked in here 4350 EQUD (7<<24) OR 1 ; Item is text & black 4360 EQUS "Info "+bl$ 4370; Item #2 4380 EQUD &80 ; Last menu item 4390 EQUD -1 ; No sub-menu 4400 EQUD (7<<24) OR 1 ; Item is text & black 4410 EQUS "Quit "+bl$ 4420] 4430ENDPROC 4440 4450DEFPROCgettemplates 4460LOCAL flags%,dummy% 4470SYS "XWimp_OpenTemplate",,vkillvar$+".Templates" TO ;flags% 4480IF flags% AND 1:PROCfatal("Missing Templates file for "+prog$) 4490vkillhand%=FNloadtemplate(vkillwind%,"VKillWindow") 4500!submenupoke=FNloadtemplate(infowind%,"Info") 4510SYS "XWimp_CloseTemplate" 4520ENDPROC 4530 4540DEFFNloadtemplate(addr%,wind$) 4550REM Note the +4 on the address - this allows the poking of the handle 4560LOCAL windhand%,windptr% 4570SYS "XWimp_LoadTemplate",,addr%+4,addr%+&700,addr%+&E00,-1,wind$,0 TO ,,,,,,windptr% 4580IF windptr%=0:PROCfatal("Missing "+wind$+" window from "+prog$+"'s Templates file") 4590SYS "XWimp_CreateWindow",,addr%+4 TO windhand% 4600!addr%=windhand%:REM Store window handle because needed by later calls 4610=windhand% 4620 4630DEFPROCsystemerror 4640REM Why do I need this proc ? Well, the Wimp doesn't report the 4650REM offending line number of an error ! 4660LOCAL err$ 4670IF ERR:err$=" at line "+STR$(ERL) ELSE err$="" 4680ON ERROR OFF 4690PROCfatal(REPORT$+err$) 4700ENDPROC 4710 4720DEFPROCfatal(error$) 4730OSCLI"Error 0 "+error$ 4740ENDPROC 4750 4760DEFPROCnextfs 4770LOCAL fsname%,oldfsys$,swi$,swiname$,numflop%,numhard%,loop% 4780oldfsys$=fsys$:fsys$="" 4790REPEAT 4800 fsysnum%+=1:IF fsysnum%>255:fsysnum%=1 4810 SYS "XOS_FSControl",33,fsysnum%,fbuff%,12 TO ,,fsname% 4820 IF ?fsname% THEN 4830 fsys$=FNgetstring(fsname%) 4840 CASE fsys$ OF 4850 WHEN "null","printer","serial","vdu","rawvdu","kbd","rawkbd","deskfs","msdos":fsys$="":REM Not infectable 4860 ENDCASE 4870 ENDIF 4880UNTIL fsys$<>"" 4890IF oldfsys$<>fsys$ THEN 4900 CASE fsys$ OF 4910 WHEN "adfs":swiname$="ADFS" 4920 WHEN "net":swiname$="NetFS":REM Is this right ? 4930 OTHERWISE swiname$=fsys$ 4940 ENDCASE 4950 swi$="X"+swiname$+"_Drives" 4960 IF FNcheckswi(swi$) THEN 4970 SYS swi$ TO drive%,numflop%,numhard% 4980 IF drive%>=numflop% AND numhard%=0 OR drive%>=numhard%+4:drive%=0 4990 ELSE 5000 numflop%=1:numhard%=0:drive%=0 5010 ENDIF 5020 PROCputdata(7,fsys$) 5030 FOR loop%=0 TO 7 5040 PROCallowdrive(loop%,(loop%<4 AND numflop%>loop%) OR (loop%>3 AND numhard%+4>loop%),(loop%=drive%)) 5050 NEXT 5060ENDIF 5070ENDPROC 5080 5090DEFFNcheckswi(swi$) 5100LOCAL swi%,flags% 5110SYS "XOS_SWINumberFromString",,swi$ TO swi%;flags% 5120=((flags% AND 1)=0) 5130 5140DEFPROChackflags(icon%,eor%,clear%) 5150!icondata%=vkillhand% 5160icondata%!4=icon% 5170icondata%!8=eor% 5180icondata%!12=clear% 5190SYS "XWimp_SetIconState",,icondata% 5200ENDPROC 5210 5220DEFPROChilite(icon%,bool%) 5230PROChackflags(icon%,((-bool%)<<21),&00200000) 5240ENDPROC 5250 5260DEFPROCallowdrive(drv%,bool%,hilite%) 5270bool%=-bool% 5280PROChackflags(drv%+8,(bool%<<16)+11*(bool%<<12)+((15-bool%*6)<<28),&F01FF000) 5290PROChilite(drv%+8,hilite%) 5300ENDPROC 5310 5320DEFPROCfinishscan 5330PROCputdata(23,"Start Drive Scan") 5340PROCputdata(dirscan%,"Idle") 5350scanning%=FALSE 5360ENDPROC 5370 5380DEFPROCstartscan 5390LOCAL prefix$ 5400PROCputdata(23,"Stop Drive Scan") 5410scanning%=TRUE:infect%=FALSE:still%=FALSE 5420prefix$=fsys$+"::"+STR$(drive%) 5430PROCputdata(status%,"Drive Scan started") 5440PROCcheck(prefix$,"$",0) 5450IF scanning% THEN 5460 numscans%+=1:PROCputdata(22,STR$(numscans%)) 5470 PROChilite(23,FALSE) 5480 IF infect% THEN 5490 IF still% THEN 5500 PROCputdata(status%,prefix$+" may still be infected !") 5510 ELSE 5520 PROCputdata(status%,prefix$+" was infected, but now clean") 5530 ENDIF 5540 ELSE 5550 PROCputdata(status%,prefix$+" is clean - no infections") 5560 ENDIF 5570 PROCopenwindow 5580ELSE 5590 PROCputdata(status%,"Drive Scan manually aborted") 5600ENDIF 5610PROCfinishscan 5620ENDPROC
� >$.!VKiller.!RunImage 2� Virus Killer V1.10 (C) Richard K. Lloyd 1990 <� Currently kills the "Extend Virus" (see documentation) (� 2� Recommended CD: <B� B-52's "Cosmic Thing". Weird at first, but it grows on you ! F P� General error trapper Z� � �systemerror d n"quit%=�:� Nothing happened yet x �init �� � �wimp_poll �� quit% � �*ș "XWimp_CloseDown",task%,!taskconst% �ș "OS_Exit" � � ��init �Dsize%=77*32:� Max of 77 files per dir and 32 bytes per file info �9maxboot%=&1400:� 5K is largest allowed size for !Boot �1maxlevel%=8:� Allow for 8 levels of directory �4� info% size%*maxlevel%,buff% maxboot%,fbuff% 12 �1icon$="IconSprites <Obey$Dir>.!Sprites"+�(&A) iconlen%=�(icon$) Zprotect$="| This file has been innoculated against the Extend Virus"+�(&A)+"||"+�(&FF) protlen%=�(protect$) "7extendhelp$="Extend"+�(9)+�(9)+"1.56 (08 Jul 1989)" ,)deffs$="adfs":� Default filing system 6,infect%=�:still%=�:� No virus checks yet @Anummem%=0:numdisk%=0:numinnoc%=0:numscans%=0:� Reset counters J7fsysnum%=0:fsys$="":� Not checked filing system yet T*innoc%=�:� Not innoculating by default ^ h� Application Constants r2prog$="VKiller":� English text name of program |H� Change next line to date$=MID$(TIME$,5,11) to get the current date �8date$="05 Dec 1990":� Current date as a fixed string �>vkillvar$="<VKiller$Dir>":� VKiller environmental variable �Jiconbartype%=-1:� -1 = Utility (RHS of bar), -2 = Service (LHS of bar) �>windman%=200:� Expect at LEAST V2.00 of the Window Manager �2bl$=�(0):� NULL char used to terminate strings �2dirscan%=16:� Directory spec goes in this icon �0status%=17:� Status messages go in this icon � �� Workspace for application �9� vkillwind% &E00,infowind% &E00:� Template workspace �%� poll% 256:� Wimp_Poll workspace �(� icon% 48:� Icon bar icon workspace �+� menu% &100:� Menu structure workspace @� taskconst% 8:$taskconst%="TASK":� Store Task constant here 9� icondata% 256:� Temp workspace to get/put icon data &� Initialise WIMP 0Jș "XWimp_Initialise",windman%,!taskconst%,prog$+bl$ � windvers%,task% :e� windvers%<windman% � �fatal(prog$+" requires Window Manager V"+�fraction(windman%)+" or later") D NB�makemenu:� Construct menu (should be BEFORE template loading) X2�gettemplates:� Get window templates from file b$�makeicon:� Create icon bar icon l�nextfs v�finishscan ��putdata(status%,"Idle") �"�scanmodules(�gettaskhand("")) �� � �ݤgettaskhand(taskname$) �/� This routine is unintentionally blank :-( �I� Although it is possible to get the name of a task given its handle, �J� there appears to be no way to get the reverse (Task Manager cheats - �G� it runs first of all and picks up Wimp_Initialise handles/names). �H� Can anyone out there complete this routine to return a task handle �&� given its name ? Pretty please ? �=0 � !��check(dir$,leafdir$,level%) E� off%,base%,num%,loop%,addr%,name$,fullname$,len%,gotboot%,type% �wimp_poll � quit%=� � scanning%=�:� *� level%=maxlevel% � 4G �putdata(status%,"Dir level "+�(maxlevel%)+" - skipping deeper") > � H� Rdir$=dir$+"."+leafdir$ \�putdata(dirscan%,dir$) f.off%=0:gotboot%=�:base%=info%+level%*size% p� z addr%=base% �M ș "XOS_GBPB",10,dir$+�(0),addr%,77,off%,size%,"*"+�(0) � ,,,num%,off% � � num% � � � loop%=0 � num%-1 � obj%=addr%!16 �3 len%=addr%!8:type%=(!addr%>>>8) � &FFF �. addr%+=20:name$=�getstring(addr%) �7 addr%=(addr%+4) � 4*4:� Align to next word � � obj%=2 � �+ �check(dir$,name$,level%+1) � � �( fullname$=dir$+"."+name$ �" Ȏ �lower(name$) � �$ � "!boot":gotboot%=� + � type%=&FEB � : �checkboot(fullname$,len%) � $e � "monitorrm","checkmod","extendrm","osextend","colourrm","fastmod","coderm","memrm": .. � len%=940 � type%=&FFA � 8> � �oscli("Load",fullname$,�~buff%)=� � BC buff%!&34=0:� Zero count due to bad load L � V4 �extendvirus("module",buff%) `- �delmodule(fullname$) j � t � ~ � � � � � �%� off%=-1 � quit%=� � scanning%=� �F� gotboot%=� � �(leafdir$)=33 � innoc%=� � quit%=� � scanning%=� � �K � �innocboot(dir$+".!Boot",base%,0,�exists(dir$+".!Sprites",&FF9)) � �; �putdata(status%,"New innoculated !Boot created") � � �� �� � ���checkboot(name$,l%) �� doinnoc% � l%>=maxboot% � still%=�:infect%=� 6 �putdata(status%,"!Boot too big - not scanned") � (� 2doinnoc%=innoc% <*ș "XOS_CLI","Load "+name$+" "+�~buff% FȎ buff%?(l%-1) � P� &FF:Ȏ buff%?(l%-4) � Z, � 13:�extendvirus("in !Boot",0) d �diskinfect n' l%=l%-4:doinnoc%=� x/ ȕ l%>0 � buff%?(l%-1)<>&D � l%=l%-1 � � �$ buff%?(l%-1)=&A � � 10:doinnoc%=� �B �putdata(status%,"!Boot already innoculated") � doinnoc%=� � � �� &0A:� Normal terminator �' buff%?l%=&A:l%+=1:� Add LF on end �� �� doinnoc% � �! � l%+protlen%+1>maxboot% � � still%=�:infect%=� = �putdata(status%,"!Boot too big - not innoculated") � � "' � �innocboot(name$,buff%,l%,�) � ,< �putdata(status%,"!Boot has now been innoculated") 6 � @� J� T ^$ݤinnocboot(n$,a%,len%,addicon%) h� good%:good%=� r� addicon% � | $(a%+len%)=icon$ � len%+=iconlen% �� �$(a%+len%)=protect$ �7� �oscli("Save",n$,�~a%+" "+�~(a%+len%+protlen%)) � �& � �oscli("SetType",n$,"Obey") � �8 numinnoc%+=1:good%=�:�putdata(21,�(numinnoc%)) � � �� � =good% � ���extendvirus(mess$,addr%) �� t% �?� addr%:�putdata(dirscan%,"Execution Count: "+�(addr%!&34)) 6�putdata(status%,"Extend Virus "+mess$+" found !") infect%=�:�openwindow #t%=�+200:� Delay to see message &� 0 �wimp_poll :� �>t% � quit% D� N X��delmodule(m$) b�diskinfect l� �oscli("Delete",m$,"") � v6 �putdata(status%,"Extend Virus module deleted") �� �� � ���diskinfect �(numdisk%+=1:�putdata(20,�(numdisk%)) �� � �ݤoscli(l$,m$,r$) �� flags%,again%,errblk% �� � � l$="RMKill" � �O ș "XWimp_StartTask",l$+" "+m$+" "+r$+" { > null: }" � errblk%;flags% � � G ș "XOS_CLI",l$+" "+m$+" "+r$+" { > null: }" � errblk%;flags% � again%=� � flags% � 1 � * Ȏ !errblk% � 4 � &108C9: >O again%=�yesno(" Write-protected disk ! Retry disk write ?") H2 � &108C3:again%=�oscli("Access",m$,"WR") R \ � !errblk%>&10000 � f? �putdata(status%,"Couldn't perform disk write") p � zA �putdata(status%,"Couldn't delete Extend module") � � � � � � again%=�:still%=� � � �� again%=� �=((flags% � 1)=0) � �ݤwimperror(mess$,mask%) �� click% �Rș "XWimp_ReportError",�4,bl$)+mess$+bl$,mask%,"VKiller Warning"+bl$ � ,click% �=click% � �/ݤyesno(mess$)=(�wimperror(mess$,%10011)=1) ��warn(mess$) � click% $#click%=�wimperror(mess$,%10001) .� 8 B��scanmodules(hand%) L&� module%,sub%,start%,flags%,help% V� `D ș "XOS_Module",12,module%,sub% � ,module%,sub%,start%;flags% j � (flags% � 1)=0 � t! help%=start%+start%!&14 ~+ � �getstring(help%)=extendhelp$ � �! nummem%+=1:infect%=� �$ �putdata(19,�(nummem%)) � � hand% � �@ � This is a bug-fix :-) It allows the virus task �H � to shutdown properly without crashing the Task Manager �3 start%!&40=hand%:� Save task handle � P%=start%+&70 � [OPT 0 �> LDR R2,start%+&64:CMP R2,#1:SWIGT "XOS_Module" �3 LDR R0,start%+&40:LDR R1,start%+&54 � ] � � E �warn("Task Manager is unstable ! Do not use it") � * �extendvirus("in RMA",start%) - � �oscli("RMKill","Extend","") � (A �putdata(status%,"Extend Virus killed from RMA") 2 � < still%=� F � P � Z � d� flags% � 1 n� x �ݤexists(file$,type%) �� found%,ftype% �*ș "XOS_File",5,file$ � found%,,ftype% �ftype%=(ftype%>>>8) � &FFF �=(found%=1 � type%=ftype%) � �ݤlower(s$) �� loop%,n$,c$:n$="" �� loop%=1 � �(s$) � c$=�s$,loop%,1) � � c$>="A" � c$<="Z" � � n$=n$+�(�(c$)+32) � � n$=n$+c$ � � "=n$ , 6ݤgetstring(� addr%) @� s$:s$="" J+ȕ ?addr%<>0:s$=s$+�(?addr%):addr%+=1:� T=s$ ^ h��wimp_poll r � reason% |%ș "XWimp_Poll",0,poll% � reason% �Ȏ reason% � �7� 2:ș "XWimp_OpenWindow",,poll%:� Info window drag �� 3:�closewindow �� 6:�mouseclick �� 9:�menuselect �� 17,18:�wimpmessage �� �� � ���closewindow �7ș "XWimp_CloseWindow",,vkillwind%:� Eval close box �� � ��mouseclick Ȏ poll%!8 � � 1,4:�startup & � 2:�shownewmenu 0� :� D N��shownewmenu X� y% b:� poll%!12=-2:y%=96+!spacing*numitems% � y%=poll%!4+16 loldx%=!poll%-64:oldy%=y% v�showoldmenu �� � ���showoldmenu �,ș "XWimp_CreateMenu",,menu%,oldx%,oldy% �� � ���openwindow �3vkillwind%!28=-1:� Open on top of everyone else �%ș "XWimp_OpenWindow",,vkillwind% �� � � ��startup �Ȏ poll%!12 � � -2:�openwindow � vkillhand%: Ȏ poll%!16 � : � 7:� scanning%=�:�nextfs:� Filing system change *P � 8,9,10,11,12,13,14,15:� scanning%=�:drive%=poll%!16-8:� Drive change 43 � 23:� scanning%:�finishscan � �startscan > � 24:innoc%=� innoc% H � R� \� f z��menuselect �!� mouse%,item%:item%=!poll%+1 �3ș "XWimp_GetPointerInfo",,poll%:mouse%=poll%!8 �Ȏ item% � �- � numitems%:quit%=�:� Last Item = Quit �� �� mouse%=1:�showoldmenu �� � ��wimpmessage Ȏ poll%!16 � E � 0:quit%=�:� Shut down (Desktop Exit, Task Manager Quit) $ � &400C2:�appstart .� 8� B L��appstart VJ� Unlike, ahem, certain Acorn applications we could mention, it really `F� is nice to make sure only one invocation of the program has been jC� activated - this is done by checking a new task's name/handle t� A%,B%,same% ~� poll%!4<>task% � � A%=poll%+28:B%=-1 � � ?A% � � � �4 B%+=1:same%=(A%?B%=�(�prog$+bl$,B%+1))) � � A%?B%=0 � � same% � � same%:quit%=� � � � �scanmodules(poll%!4) � � �� �� � ��putdata(icon%,mess$) -� Change icon 'icon%' to the string mess$ ;� Note that this assumes an indirected icon of course ! +!icondata%=vkillhand%:icondata%!4=icon% (&ș "XWimp_GetIconState",,icondata% 2$(icondata%!28)=mess$ <Xș "XWimp_ForceRedraw",vkillhand%,icondata%!8,icondata%!12,icondata%!16,icondata%!20 F� P Zݤgetdata(wind%,icon%) d6� Read the value of icon 'icon%' in window 'wind%' n;� Note that this assumes an indirected icon of course ! x&!icondata%=wind%:icondata%!4=icon% �&ș "XWimp_GetIconState",,icondata% �=$(icondata%!28) � ���makeicon �?P%=icon%:� Use built in assembler - easier to see structure � [OPT 0 �E EQUD iconbartype% ; Icon bar 'utility' flag �; EQUD 0 ; Bottom left X �; EQUD 0 ; Bottom left Y �9 EQUD 69 ; Top right X �9 EQUD 68 ; Top right Y �> EQUB %00000010 ; Icon is a sprite �G EQUB %00110001 ; Click notifies/Indirected H EQUB %00000000 ; Nothing special about icon F EQUB %00000001 ; Forecol = 1, Backcol = 0 D.pokespname EQUD pokespname+12 ; Pointer to sprite name "E EQUD 1 ; Pointer to WIMP sprites ,C EQUD 12 ; Length of sprite name 6<.spritename EQUS "!vkiller"+�4,bl$) ; Sprite name @] J,ș "XWimp_CreateIcon",,icon% � iconhand% T� ^ h��makemenu r(numitems%=2:� Change if you add more |P%=menu%:� Use assembler � [OPT 0 �@ EQUS prog$+�12-�(prog$),bl$) ; Menu title �7 EQUB 7 ; Foreground colour �7 EQUB 2 ; Background colour �9 EQUB 7 ; Work foregrd colour �9 EQUB 0 ; Work backgrd colour �1 EQUD 148 ; Total width �2.spacing EQUD 44 ; Total height �2 EQUD 0 ; Line spacing � ; Item #1 �5 EQUD 0 ; Nothing special �A.submenupoke EQUD 0 ; Sub-menu addr poked in here �> EQUD (7<<24) � 1 ; Item is text & black - EQUS "Info "+bl$ ; Item #2 4 EQUD &80 ; Last menu item &1 EQUD -1 ; No sub-menu 0> EQUD (7<<24) � 1 ; Item is text & black :- EQUS "Quit "+bl$ D] N� X b��gettemplates l� flags%,dummy% v=ș "XWimp_OpenTemplate",,vkillvar$+".Templates" � ;flags% �<� flags% � 1:�fatal("Missing Templates file for "+prog$) �6vkillhand%=�loadtemplate(vkillwind%,"VKillWindow") �0!submenupoke=�loadtemplate(infowind%,"Info") �ș "XWimp_CloseTemplate" �� � �ݤloadtemplate(addr%,wind$) �G� Note the +4 on the address - this allows the poking of the handle �� windhand%,windptr% �Vș "XWimp_LoadTemplate",,addr%+4,addr%+&700,addr%+&E00,-1,wind$,0 � ,,,,,,windptr% �S� windptr%=0:�fatal("Missing "+wind$+" window from "+prog$+"'s Templates file") �0ș "XWimp_CreateWindow",,addr%+4 � windhand% �H!addr%=windhand%:� Store window handle because needed by later calls =windhand% ��systemerror A� Why do I need this proc ? Well, the Wimp doesn't report the *)� offending line number of an error ! 4 � err$ >'� �:err$=" at line "+�(�) � err$="" H � � � R�fatal(�$+err$) \� f p��fatal(error$) z�"Error 0 "+error$ �� � ���nextfs �<� fsname%,oldfsys$,swi$,swiname$,numflop%,numhard%,loop% �oldfsys$=fsys$:fsys$="" �� �, fsysnum%+=1:� fsysnum%>255:fsysnum%=1 �; ș "XOS_FSControl",33,fsysnum%,fbuff%,12 � ,,fsname% � � ?fsname% � �# fsys$=�getstring(fsname%) � Ȏ fsys$ � �n � "null","printer","serial","vdu","rawvdu","kbd","rawkbd","deskfs","msdos":fsys$="":� Not infectable � � � � fsys$<>"" � oldfsys$<>fsys$ � $ Ȏ fsys$ � . � "adfs":swiname$="ADFS" 81 � "net":swiname$="NetFS":� Is this right ? B swiname$=fsys$ L � V" swi$="X"+swiname$+"_Drives" ` � �checkswi(swi$) � j, ș swi$ � drive%,numflop%,numhard% tG � drive%>=numflop% � numhard%=0 � drive%>=numhard%+4:drive%=0 ~ � �( numflop%=1:numhard%=0:drive%=0 � � � �putdata(7,fsys$) � � loop%=0 � 7 �e �allowdrive(loop%,(loop%<4 � numflop%>loop%) � (loop%>3 � numhard%+4>loop%),(loop%=drive%)) � � �� �� � �ݤcheckswi(swi$) �� swi%,flags% �4ș "XOS_SWINumberFromString",,swi$ � swi%;flags% =((flags% � 1)=0) "��hackflags(icon%,eor%,clear%) !icondata%=vkillhand% (icondata%!4=icon% 2icondata%!8=eor% <icondata%!12=clear% F&ș "XWimp_SetIconState",,icondata% P� Z d��hilite(icon%,bool%) n.�hackflags(icon%,((-bool%)<<21),&00200000) x� � �$��allowdrive(drv%,bool%,hilite%) �bool%=-bool% �N�hackflags(drv%+8,(bool%<<16)+11*(bool%<<12)+((15-bool%*6)<<28),&F01FF000) ��hilite(drv%+8,hilite%) �� � ���finishscan �#�putdata(23,"Start Drive Scan") ��putdata(dirscan%,"Idle") �scanning%=� �� � ��startscan � prefix$ "�putdata(23,"Stop Drive Scan") ""scanning%=�:infect%=�:still%=� , prefix$=fsys$+"::"+�(drive%) 6*�putdata(status%,"Drive Scan started") @�check(prefix$,"$",0) J� scanning% � T- numscans%+=1:�putdata(22,�(numscans%)) ^ �hilite(23,�) h � infect% � r � still% � |A �putdata(status%,prefix$+" may still be infected !") � � �E �putdata(status%,prefix$+" was infected, but now clean") � � � � �? �putdata(status%,prefix$+" is clean - no infections") � � � �openwindow �� �6 �putdata(status%,"Drive Scan manually aborted") �� ��finishscan �� �
00000000 0d 00 0a 1b f4 20 3e 24 2e 21 56 4b 69 6c 6c 65 |..... >$.!VKille| 00000010 72 2e 21 52 75 6e 49 6d 61 67 65 0d 00 14 32 f4 |r.!RunImage...2.| 00000020 20 56 69 72 75 73 20 4b 69 6c 6c 65 72 20 56 31 | Virus Killer V1| 00000030 2e 31 30 20 28 43 29 20 52 69 63 68 61 72 64 20 |.10 (C) Richard | 00000040 4b 2e 20 4c 6c 6f 79 64 20 31 39 39 30 0d 00 1e |K. Lloyd 1990...| 00000050 3c f4 20 43 75 72 72 65 6e 74 6c 79 20 6b 69 6c |<. Currently kil| 00000060 6c 73 20 74 68 65 20 22 45 78 74 65 6e 64 20 56 |ls the "Extend V| 00000070 69 72 75 73 22 20 28 73 65 65 20 64 6f 63 75 6d |irus" (see docum| 00000080 65 6e 74 61 74 69 6f 6e 29 0d 00 28 05 f4 0d 00 |entation)..(....| 00000090 32 15 f4 20 52 65 63 6f 6d 6d 65 6e 64 65 64 20 |2.. Recommended | 000000a0 43 44 3a 0d 00 3c 42 f4 20 42 2d 35 32 27 73 20 |CD:..<B. B-52's | 000000b0 22 43 6f 73 6d 69 63 20 54 68 69 6e 67 22 2e 20 |"Cosmic Thing". | 000000c0 57 65 69 72 64 20 61 74 20 66 69 72 73 74 2c 20 |Weird at first, | 000000d0 62 75 74 20 69 74 20 67 72 6f 77 73 20 6f 6e 20 |but it grows on | 000000e0 79 6f 75 20 21 0d 00 46 04 0d 00 50 1b f4 20 47 |you !..F...P.. G| 000000f0 65 6e 65 72 61 6c 20 65 72 72 6f 72 20 74 72 61 |eneral error tra| 00000100 70 70 65 72 0d 00 5a 14 ee 20 85 20 f2 73 79 73 |pper..Z.. . .sys| 00000110 74 65 6d 65 72 72 6f 72 0d 00 64 04 0d 00 6e 22 |temerror..d...n"| 00000120 71 75 69 74 25 3d a3 3a f4 20 4e 6f 74 68 69 6e |quit%=.:. Nothin| 00000130 67 20 68 61 70 70 65 6e 65 64 20 79 65 74 0d 00 |g happened yet..| 00000140 78 09 f2 69 6e 69 74 0d 00 82 05 f5 0d 00 8c 11 |x..init.........| 00000150 20 20 20 f2 77 69 6d 70 5f 70 6f 6c 6c 0d 00 96 | .wimp_poll...| 00000160 0b fd 20 71 75 69 74 25 0d 00 a0 04 0d 00 aa 2a |.. quit%.......*| 00000170 c8 99 20 22 58 57 69 6d 70 5f 43 6c 6f 73 65 44 |.. "XWimp_CloseD| 00000180 6f 77 6e 22 2c 74 61 73 6b 25 2c 21 74 61 73 6b |own",task%,!task| 00000190 63 6f 6e 73 74 25 0d 00 b4 10 c8 99 20 22 4f 53 |const%...... "OS| 000001a0 5f 45 78 69 74 22 0d 00 be 04 0d 00 c8 0a dd f2 |_Exit"..........| 000001b0 69 6e 69 74 0d 00 d2 44 73 69 7a 65 25 3d 37 37 |init...Dsize%=77| 000001c0 2a 33 32 3a f4 20 4d 61 78 20 6f 66 20 37 37 20 |*32:. Max of 77 | 000001d0 66 69 6c 65 73 20 70 65 72 20 64 69 72 20 61 6e |files per dir an| 000001e0 64 20 33 32 20 62 79 74 65 73 20 70 65 72 20 66 |d 32 bytes per f| 000001f0 69 6c 65 20 69 6e 66 6f 0d 00 dc 39 6d 61 78 62 |ile info...9maxb| 00000200 6f 6f 74 25 3d 26 31 34 30 30 3a f4 20 35 4b 20 |oot%=&1400:. 5K | 00000210 69 73 20 6c 61 72 67 65 73 74 20 61 6c 6c 6f 77 |is largest allow| 00000220 65 64 20 73 69 7a 65 20 66 6f 72 20 21 42 6f 6f |ed size for !Boo| 00000230 74 0d 00 e6 31 6d 61 78 6c 65 76 65 6c 25 3d 38 |t...1maxlevel%=8| 00000240 3a f4 20 41 6c 6c 6f 77 20 66 6f 72 20 38 20 6c |:. Allow for 8 l| 00000250 65 76 65 6c 73 20 6f 66 20 64 69 72 65 63 74 6f |evels of directo| 00000260 72 79 0d 00 f0 34 de 20 69 6e 66 6f 25 20 73 69 |ry...4. info% si| 00000270 7a 65 25 2a 6d 61 78 6c 65 76 65 6c 25 2c 62 75 |ze%*maxlevel%,bu| 00000280 66 66 25 20 6d 61 78 62 6f 6f 74 25 2c 66 62 75 |ff% maxboot%,fbu| 00000290 66 66 25 20 31 32 0d 00 fa 31 69 63 6f 6e 24 3d |ff% 12...1icon$=| 000002a0 22 49 63 6f 6e 53 70 72 69 74 65 73 20 3c 4f 62 |"IconSprites <Ob| 000002b0 65 79 24 44 69 72 3e 2e 21 53 70 72 69 74 65 73 |ey$Dir>.!Sprites| 000002c0 22 2b bd 28 26 41 29 0d 01 04 15 69 63 6f 6e 6c |"+.(&A)....iconl| 000002d0 65 6e 25 3d a9 28 69 63 6f 6e 24 29 0d 01 0e 5a |en%=.(icon$)...Z| 000002e0 70 72 6f 74 65 63 74 24 3d 22 7c 20 54 68 69 73 |protect$="| This| 000002f0 20 66 69 6c 65 20 68 61 73 20 62 65 65 6e 20 69 | file has been i| 00000300 6e 6e 6f 63 75 6c 61 74 65 64 20 61 67 61 69 6e |nnoculated again| 00000310 73 74 20 74 68 65 20 45 78 74 65 6e 64 20 56 69 |st the Extend Vi| 00000320 72 75 73 22 2b bd 28 26 41 29 2b 22 7c 7c 22 2b |rus"+.(&A)+"||"+| 00000330 bd 28 26 46 46 29 0d 01 18 18 70 72 6f 74 6c 65 |.(&FF)....protle| 00000340 6e 25 3d a9 28 70 72 6f 74 65 63 74 24 29 0d 01 |n%=.(protect$)..| 00000350 22 37 65 78 74 65 6e 64 68 65 6c 70 24 3d 22 45 |"7extendhelp$="E| 00000360 78 74 65 6e 64 22 2b bd 28 39 29 2b bd 28 39 29 |xtend"+.(9)+.(9)| 00000370 2b 22 31 2e 35 36 20 28 30 38 20 4a 75 6c 20 31 |+"1.56 (08 Jul 1| 00000380 39 38 39 29 22 0d 01 2c 29 64 65 66 66 73 24 3d |989)"..,)deffs$=| 00000390 22 61 64 66 73 22 3a f4 20 44 65 66 61 75 6c 74 |"adfs":. Default| 000003a0 20 66 69 6c 69 6e 67 20 73 79 73 74 65 6d 0d 01 | filing system..| 000003b0 36 2c 69 6e 66 65 63 74 25 3d a3 3a 73 74 69 6c |6,infect%=.:stil| 000003c0 6c 25 3d a3 3a f4 20 4e 6f 20 76 69 72 75 73 20 |l%=.:. No virus | 000003d0 63 68 65 63 6b 73 20 79 65 74 0d 01 40 41 6e 75 |checks yet..@Anu| 000003e0 6d 6d 65 6d 25 3d 30 3a 6e 75 6d 64 69 73 6b 25 |mmem%=0:numdisk%| 000003f0 3d 30 3a 6e 75 6d 69 6e 6e 6f 63 25 3d 30 3a 6e |=0:numinnoc%=0:n| 00000400 75 6d 73 63 61 6e 73 25 3d 30 3a f4 20 52 65 73 |umscans%=0:. Res| 00000410 65 74 20 63 6f 75 6e 74 65 72 73 0d 01 4a 37 66 |et counters..J7f| 00000420 73 79 73 6e 75 6d 25 3d 30 3a 66 73 79 73 24 3d |sysnum%=0:fsys$=| 00000430 22 22 3a f4 20 4e 6f 74 20 63 68 65 63 6b 65 64 |"":. Not checked| 00000440 20 66 69 6c 69 6e 67 20 73 79 73 74 65 6d 20 79 | filing system y| 00000450 65 74 0d 01 54 2a 69 6e 6e 6f 63 25 3d a3 3a f4 |et..T*innoc%=.:.| 00000460 20 4e 6f 74 20 69 6e 6e 6f 63 75 6c 61 74 69 6e | Not innoculatin| 00000470 67 20 62 79 20 64 65 66 61 75 6c 74 0d 01 5e 04 |g by default..^.| 00000480 0d 01 68 1b f4 20 41 70 70 6c 69 63 61 74 69 6f |..h.. Applicatio| 00000490 6e 20 43 6f 6e 73 74 61 6e 74 73 0d 01 72 32 70 |n Constants..r2p| 000004a0 72 6f 67 24 3d 22 56 4b 69 6c 6c 65 72 22 3a f4 |rog$="VKiller":.| 000004b0 20 45 6e 67 6c 69 73 68 20 74 65 78 74 20 6e 61 | English text na| 000004c0 6d 65 20 6f 66 20 70 72 6f 67 72 61 6d 0d 01 7c |me of program..|| 000004d0 48 f4 20 43 68 61 6e 67 65 20 6e 65 78 74 20 6c |H. Change next l| 000004e0 69 6e 65 20 74 6f 20 64 61 74 65 24 3d 4d 49 44 |ine to date$=MID| 000004f0 24 28 54 49 4d 45 24 2c 35 2c 31 31 29 20 74 6f |$(TIME$,5,11) to| 00000500 20 67 65 74 20 74 68 65 20 63 75 72 72 65 6e 74 | get the current| 00000510 20 64 61 74 65 0d 01 86 38 64 61 74 65 24 3d 22 | date...8date$="| 00000520 30 35 20 44 65 63 20 31 39 39 30 22 3a f4 20 43 |05 Dec 1990":. C| 00000530 75 72 72 65 6e 74 20 64 61 74 65 20 61 73 20 61 |urrent date as a| 00000540 20 66 69 78 65 64 20 73 74 72 69 6e 67 0d 01 90 | fixed string...| 00000550 3e 76 6b 69 6c 6c 76 61 72 24 3d 22 3c 56 4b 69 |>vkillvar$="<VKi| 00000560 6c 6c 65 72 24 44 69 72 3e 22 3a f4 20 56 4b 69 |ller$Dir>":. VKi| 00000570 6c 6c 65 72 20 65 6e 76 69 72 6f 6e 6d 65 6e 74 |ller environment| 00000580 61 6c 20 76 61 72 69 61 62 6c 65 0d 01 9a 4a 69 |al variable...Ji| 00000590 63 6f 6e 62 61 72 74 79 70 65 25 3d 2d 31 3a f4 |conbartype%=-1:.| 000005a0 20 2d 31 20 3d 20 55 74 69 6c 69 74 79 20 28 52 | -1 = Utility (R| 000005b0 48 53 20 6f 66 20 62 61 72 29 2c 20 2d 32 20 3d |HS of bar), -2 =| 000005c0 20 53 65 72 76 69 63 65 20 28 4c 48 53 20 6f 66 | Service (LHS of| 000005d0 20 62 61 72 29 0d 01 a4 3e 77 69 6e 64 6d 61 6e | bar)...>windman| 000005e0 25 3d 32 30 30 3a f4 20 45 78 70 65 63 74 20 61 |%=200:. Expect a| 000005f0 74 20 4c 45 41 53 54 20 56 32 2e 30 30 20 6f 66 |t LEAST V2.00 of| 00000600 20 74 68 65 20 57 69 6e 64 6f 77 20 4d 61 6e 61 | the Window Mana| 00000610 67 65 72 0d 01 ae 32 62 6c 24 3d bd 28 30 29 3a |ger...2bl$=.(0):| 00000620 f4 20 4e 55 4c 4c 20 63 68 61 72 20 75 73 65 64 |. NULL char used| 00000630 20 74 6f 20 74 65 72 6d 69 6e 61 74 65 20 73 74 | to terminate st| 00000640 72 69 6e 67 73 0d 01 b8 32 64 69 72 73 63 61 6e |rings...2dirscan| 00000650 25 3d 31 36 3a f4 20 44 69 72 65 63 74 6f 72 79 |%=16:. Directory| 00000660 20 73 70 65 63 20 67 6f 65 73 20 69 6e 20 74 68 | spec goes in th| 00000670 69 73 20 69 63 6f 6e 0d 01 c2 30 73 74 61 74 75 |is icon...0statu| 00000680 73 25 3d 31 37 3a f4 20 53 74 61 74 75 73 20 6d |s%=17:. Status m| 00000690 65 73 73 61 67 65 73 20 67 6f 20 69 6e 20 74 68 |essages go in th| 000006a0 69 73 20 69 63 6f 6e 0d 01 cc 04 0d 01 d6 1f f4 |is icon.........| 000006b0 20 57 6f 72 6b 73 70 61 63 65 20 66 6f 72 20 61 | Workspace for a| 000006c0 70 70 6c 69 63 61 74 69 6f 6e 0d 01 e0 39 de 20 |pplication...9. | 000006d0 76 6b 69 6c 6c 77 69 6e 64 25 20 26 45 30 30 2c |vkillwind% &E00,| 000006e0 69 6e 66 6f 77 69 6e 64 25 20 26 45 30 30 3a f4 |infowind% &E00:.| 000006f0 20 54 65 6d 70 6c 61 74 65 20 77 6f 72 6b 73 70 | Template worksp| 00000700 61 63 65 0d 01 ea 25 de 20 70 6f 6c 6c 25 20 32 |ace...%. poll% 2| 00000710 35 36 3a f4 20 57 69 6d 70 5f 50 6f 6c 6c 20 77 |56:. Wimp_Poll w| 00000720 6f 72 6b 73 70 61 63 65 0d 01 f4 28 de 20 69 63 |orkspace...(. ic| 00000730 6f 6e 25 20 34 38 3a f4 20 49 63 6f 6e 20 62 61 |on% 48:. Icon ba| 00000740 72 20 69 63 6f 6e 20 77 6f 72 6b 73 70 61 63 65 |r icon workspace| 00000750 0d 01 fe 2b de 20 6d 65 6e 75 25 20 26 31 30 30 |...+. menu% &100| 00000760 3a f4 20 4d 65 6e 75 20 73 74 72 75 63 74 75 72 |:. Menu structur| 00000770 65 20 77 6f 72 6b 73 70 61 63 65 0d 02 08 40 de |e workspace...@.| 00000780 20 74 61 73 6b 63 6f 6e 73 74 25 20 38 3a 24 74 | taskconst% 8:$t| 00000790 61 73 6b 63 6f 6e 73 74 25 3d 22 54 41 53 4b 22 |askconst%="TASK"| 000007a0 3a f4 20 53 74 6f 72 65 20 54 61 73 6b 20 63 6f |:. Store Task co| 000007b0 6e 73 74 61 6e 74 20 68 65 72 65 0d 02 12 39 de |nstant here...9.| 000007c0 20 69 63 6f 6e 64 61 74 61 25 20 32 35 36 3a f4 | icondata% 256:.| 000007d0 20 54 65 6d 70 20 77 6f 72 6b 73 70 61 63 65 20 | Temp workspace | 000007e0 74 6f 20 67 65 74 2f 70 75 74 20 69 63 6f 6e 20 |to get/put icon | 000007f0 64 61 74 61 0d 02 1c 04 0d 02 26 15 f4 20 49 6e |data......&.. In| 00000800 69 74 69 61 6c 69 73 65 20 57 49 4d 50 0d 02 30 |itialise WIMP..0| 00000810 4a c8 99 20 22 58 57 69 6d 70 5f 49 6e 69 74 69 |J.. "XWimp_Initi| 00000820 61 6c 69 73 65 22 2c 77 69 6e 64 6d 61 6e 25 2c |alise",windman%,| 00000830 21 74 61 73 6b 63 6f 6e 73 74 25 2c 70 72 6f 67 |!taskconst%,prog| 00000840 24 2b 62 6c 24 20 b8 20 77 69 6e 64 76 65 72 73 |$+bl$ . windvers| 00000850 25 2c 74 61 73 6b 25 0d 02 3a 65 e7 20 77 69 6e |%,task%..:e. win| 00000860 64 76 65 72 73 25 3c 77 69 6e 64 6d 61 6e 25 20 |dvers%<windman% | 00000870 8c 20 f2 66 61 74 61 6c 28 70 72 6f 67 24 2b 22 |. .fatal(prog$+"| 00000880 20 72 65 71 75 69 72 65 73 20 57 69 6e 64 6f 77 | requires Window| 00000890 20 4d 61 6e 61 67 65 72 20 56 22 2b a4 66 72 61 | Manager V"+.fra| 000008a0 63 74 69 6f 6e 28 77 69 6e 64 6d 61 6e 25 29 2b |ction(windman%)+| 000008b0 22 20 6f 72 20 6c 61 74 65 72 22 29 0d 02 44 04 |" or later")..D.| 000008c0 0d 02 4e 42 f2 6d 61 6b 65 6d 65 6e 75 3a f4 20 |..NB.makemenu:. | 000008d0 43 6f 6e 73 74 72 75 63 74 20 6d 65 6e 75 20 28 |Construct menu (| 000008e0 73 68 6f 75 6c 64 20 62 65 20 42 45 46 4f 52 45 |should be BEFORE| 000008f0 20 74 65 6d 70 6c 61 74 65 20 6c 6f 61 64 69 6e | template loadin| 00000900 67 29 0d 02 58 32 f2 67 65 74 74 65 6d 70 6c 61 |g)..X2.gettempla| 00000910 74 65 73 3a f4 20 47 65 74 20 77 69 6e 64 6f 77 |tes:. Get window| 00000920 20 74 65 6d 70 6c 61 74 65 73 20 66 72 6f 6d 20 | templates from | 00000930 66 69 6c 65 0d 02 62 24 f2 6d 61 6b 65 69 63 6f |file..b$.makeico| 00000940 6e 3a f4 20 43 72 65 61 74 65 20 69 63 6f 6e 20 |n:. Create icon | 00000950 62 61 72 20 69 63 6f 6e 0d 02 6c 0b f2 6e 65 78 |bar icon..l..nex| 00000960 74 66 73 0d 02 76 0f f2 66 69 6e 69 73 68 73 63 |tfs..v..finishsc| 00000970 61 6e 0d 02 80 1c f2 70 75 74 64 61 74 61 28 73 |an.....putdata(s| 00000980 74 61 74 75 73 25 2c 22 49 64 6c 65 22 29 0d 02 |tatus%,"Idle")..| 00000990 8a 22 f2 73 63 61 6e 6d 6f 64 75 6c 65 73 28 a4 |.".scanmodules(.| 000009a0 67 65 74 74 61 73 6b 68 61 6e 64 28 22 22 29 29 |gettaskhand(""))| 000009b0 0d 02 94 05 e1 0d 02 9e 04 0d 02 a8 1c dd a4 67 |...............g| 000009c0 65 74 74 61 73 6b 68 61 6e 64 28 74 61 73 6b 6e |ettaskhand(taskn| 000009d0 61 6d 65 24 29 0d 02 b2 2f f4 20 54 68 69 73 20 |ame$).../. This | 000009e0 72 6f 75 74 69 6e 65 20 69 73 20 75 6e 69 6e 74 |routine is unint| 000009f0 65 6e 74 69 6f 6e 61 6c 6c 79 20 62 6c 61 6e 6b |entionally blank| 00000a00 20 3a 2d 28 0d 02 bc 49 f4 20 41 6c 74 68 6f 75 | :-(...I. Althou| 00000a10 67 68 20 69 74 20 69 73 20 70 6f 73 73 69 62 6c |gh it is possibl| 00000a20 65 20 74 6f 20 67 65 74 20 74 68 65 20 6e 61 6d |e to get the nam| 00000a30 65 20 6f 66 20 61 20 74 61 73 6b 20 67 69 76 65 |e of a task give| 00000a40 6e 20 69 74 73 20 68 61 6e 64 6c 65 2c 0d 02 c6 |n its handle,...| 00000a50 4a f4 20 74 68 65 72 65 20 61 70 70 65 61 72 73 |J. there appears| 00000a60 20 74 6f 20 62 65 20 6e 6f 20 77 61 79 20 74 6f | to be no way to| 00000a70 20 67 65 74 20 74 68 65 20 72 65 76 65 72 73 65 | get the reverse| 00000a80 20 28 54 61 73 6b 20 4d 61 6e 61 67 65 72 20 63 | (Task Manager c| 00000a90 68 65 61 74 73 20 2d 0d 02 d0 47 f4 20 69 74 20 |heats -...G. it | 00000aa0 72 75 6e 73 20 66 69 72 73 74 20 6f 66 20 61 6c |runs first of al| 00000ab0 6c 20 61 6e 64 20 70 69 63 6b 73 20 75 70 20 57 |l and picks up W| 00000ac0 69 6d 70 5f 49 6e 69 74 69 61 6c 69 73 65 20 68 |imp_Initialise h| 00000ad0 61 6e 64 6c 65 73 2f 6e 61 6d 65 73 29 2e 0d 02 |andles/names)...| 00000ae0 da 48 f4 20 43 61 6e 20 61 6e 79 6f 6e 65 20 6f |.H. Can anyone o| 00000af0 75 74 20 74 68 65 72 65 20 63 6f 6d 70 6c 65 74 |ut there complet| 00000b00 65 20 74 68 69 73 20 72 6f 75 74 69 6e 65 20 74 |e this routine t| 00000b10 6f 20 72 65 74 75 72 6e 20 61 20 74 61 73 6b 20 |o return a task | 00000b20 68 61 6e 64 6c 65 0d 02 e4 26 f4 20 67 69 76 65 |handle...&. give| 00000b30 6e 20 69 74 73 20 6e 61 6d 65 20 3f 20 50 72 65 |n its name ? Pre| 00000b40 74 74 79 20 70 6c 65 61 73 65 20 3f 0d 02 ee 06 |tty please ?....| 00000b50 3d 30 0d 02 f8 04 0d 03 02 21 dd f2 63 68 65 63 |=0.......!..chec| 00000b60 6b 28 64 69 72 24 2c 6c 65 61 66 64 69 72 24 2c |k(dir$,leafdir$,| 00000b70 6c 65 76 65 6c 25 29 0d 03 0c 45 ea 20 6f 66 66 |level%)...E. off| 00000b80 25 2c 62 61 73 65 25 2c 6e 75 6d 25 2c 6c 6f 6f |%,base%,num%,loo| 00000b90 70 25 2c 61 64 64 72 25 2c 6e 61 6d 65 24 2c 66 |p%,addr%,name$,f| 00000ba0 75 6c 6c 6e 61 6d 65 24 2c 6c 65 6e 25 2c 67 6f |ullname$,len%,go| 00000bb0 74 62 6f 6f 74 25 2c 74 79 70 65 25 0d 03 16 0e |tboot%,type%....| 00000bc0 f2 77 69 6d 70 5f 70 6f 6c 6c 0d 03 20 1d e7 20 |.wimp_poll.. .. | 00000bd0 71 75 69 74 25 3d b9 20 84 20 73 63 61 6e 6e 69 |quit%=. . scanni| 00000be0 6e 67 25 3d a3 3a e1 0d 03 2a 18 e7 20 6c 65 76 |ng%=.:...*.. lev| 00000bf0 65 6c 25 3d 6d 61 78 6c 65 76 65 6c 25 20 8c 0d |el%=maxlevel% ..| 00000c00 03 34 47 20 20 20 f2 70 75 74 64 61 74 61 28 73 |.4G .putdata(s| 00000c10 74 61 74 75 73 25 2c 22 44 69 72 20 6c 65 76 65 |tatus%,"Dir leve| 00000c20 6c 20 22 2b c3 28 6d 61 78 6c 65 76 65 6c 25 29 |l "+.(maxlevel%)| 00000c30 2b 22 20 2d 20 73 6b 69 70 70 69 6e 67 20 64 65 |+" - skipping de| 00000c40 65 70 65 72 22 29 0d 03 3e 08 20 20 20 e1 0d 03 |eper")..>. ...| 00000c50 48 05 cd 0d 03 52 1a 64 69 72 24 3d 64 69 72 24 |H....R.dir$=dir$| 00000c60 2b 22 2e 22 2b 6c 65 61 66 64 69 72 24 0d 03 5c |+"."+leafdir$..\| 00000c70 1b f2 70 75 74 64 61 74 61 28 64 69 72 73 63 61 |..putdata(dirsca| 00000c80 6e 25 2c 64 69 72 24 29 0d 03 66 2e 6f 66 66 25 |n%,dir$)..f.off%| 00000c90 3d 30 3a 67 6f 74 62 6f 6f 74 25 3d a3 3a 62 61 |=0:gotboot%=.:ba| 00000ca0 73 65 25 3d 69 6e 66 6f 25 2b 6c 65 76 65 6c 25 |se%=info%+level%| 00000cb0 2a 73 69 7a 65 25 0d 03 70 05 f5 0d 03 7a 12 20 |*size%..p....z. | 00000cc0 20 20 61 64 64 72 25 3d 62 61 73 65 25 0d 03 84 | addr%=base%...| 00000cd0 4d 20 20 20 c8 99 20 22 58 4f 53 5f 47 42 50 42 |M .. "XOS_GBPB| 00000ce0 22 2c 31 30 2c 64 69 72 24 2b bd 28 30 29 2c 61 |",10,dir$+.(0),a| 00000cf0 64 64 72 25 2c 37 37 2c 6f 66 66 25 2c 73 69 7a |ddr%,77,off%,siz| 00000d00 65 25 2c 22 2a 22 2b bd 28 30 29 20 b8 20 2c 2c |e%,"*"+.(0) . ,,| 00000d10 2c 6e 75 6d 25 2c 6f 66 66 25 0d 03 8e 0f 20 20 |,num%,off%.... | 00000d20 20 e7 20 6e 75 6d 25 20 8c 0d 03 98 1c 20 20 20 | . num% ..... | 00000d30 20 20 20 e3 20 6c 6f 6f 70 25 3d 30 20 b8 20 6e | . loop%=0 . n| 00000d40 75 6d 25 2d 31 0d 03 a2 1a 20 20 20 20 20 20 20 |um%-1.... | 00000d50 20 20 6f 62 6a 25 3d 61 64 64 72 25 21 31 36 0d | obj%=addr%!16.| 00000d60 03 ac 33 20 20 20 20 20 20 20 20 20 6c 65 6e 25 |..3 len%| 00000d70 3d 61 64 64 72 25 21 38 3a 74 79 70 65 25 3d 28 |=addr%!8:type%=(| 00000d80 21 61 64 64 72 25 3e 3e 3e 38 29 20 80 20 26 46 |!addr%>>>8) . &F| 00000d90 46 46 0d 03 b6 2e 20 20 20 20 20 20 20 20 20 61 |FF.... a| 00000da0 64 64 72 25 2b 3d 32 30 3a 6e 61 6d 65 24 3d a4 |ddr%+=20:name$=.| 00000db0 67 65 74 73 74 72 69 6e 67 28 61 64 64 72 25 29 |getstring(addr%)| 00000dc0 0d 03 c0 37 20 20 20 20 20 20 20 20 20 61 64 64 |...7 add| 00000dd0 72 25 3d 28 61 64 64 72 25 2b 34 29 20 81 20 34 |r%=(addr%+4) . 4| 00000de0 2a 34 3a f4 20 41 6c 69 67 6e 20 74 6f 20 6e 65 |*4:. Align to ne| 00000df0 78 74 20 77 6f 72 64 0d 03 ca 17 20 20 20 20 20 |xt word.... | 00000e00 20 20 20 20 e7 20 6f 62 6a 25 3d 32 20 8c 0d 03 | . obj%=2 ...| 00000e10 d4 2b 20 20 20 20 20 20 20 20 20 20 20 20 f2 63 |.+ .c| 00000e20 68 65 63 6b 28 64 69 72 24 2c 6e 61 6d 65 24 2c |heck(dir$,name$,| 00000e30 6c 65 76 65 6c 25 2b 31 29 0d 03 de 0e 20 20 20 |level%+1).... | 00000e40 20 20 20 20 20 20 cc 0d 03 e8 28 20 20 20 20 20 | ....( | 00000e50 20 20 20 20 20 20 20 66 75 6c 6c 6e 61 6d 65 24 | fullname$| 00000e60 3d 64 69 72 24 2b 22 2e 22 2b 6e 61 6d 65 24 0d |=dir$+"."+name$.| 00000e70 03 f2 22 20 20 20 20 20 20 20 20 20 20 20 20 c8 |.." .| 00000e80 8e 20 a4 6c 6f 77 65 72 28 6e 61 6d 65 24 29 20 |. .lower(name$) | 00000e90 ca 0d 03 fc 24 20 20 20 20 20 20 20 20 20 20 20 |....$ | 00000ea0 20 c9 20 22 21 62 6f 6f 74 22 3a 67 6f 74 62 6f | . "!boot":gotbo| 00000eb0 6f 74 25 3d b9 0d 04 06 2b 20 20 20 20 20 20 20 |ot%=....+ | 00000ec0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | | 00000ed0 20 20 e7 20 74 79 70 65 25 3d 26 46 45 42 20 8c | . type%=&FEB .| 00000ee0 0d 04 10 3a 20 20 20 20 20 20 20 20 20 20 20 20 |...: | 00000ef0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | | 00000f00 f2 63 68 65 63 6b 62 6f 6f 74 28 66 75 6c 6c 6e |.checkboot(fulln| 00000f10 61 6d 65 24 2c 6c 65 6e 25 29 0d 04 1a 1e 20 20 |ame$,len%).... | 00000f20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | | 00000f30 20 20 20 20 20 20 20 cd 0d 04 24 65 20 20 20 20 | ...$e | 00000f40 20 20 20 20 20 20 20 20 c9 20 22 6d 6f 6e 69 74 | . "monit| 00000f50 6f 72 72 6d 22 2c 22 63 68 65 63 6b 6d 6f 64 22 |orrm","checkmod"| 00000f60 2c 22 65 78 74 65 6e 64 72 6d 22 2c 22 6f 73 65 |,"extendrm","ose| 00000f70 78 74 65 6e 64 22 2c 22 63 6f 6c 6f 75 72 72 6d |xtend","colourrm| 00000f80 22 2c 22 66 61 73 74 6d 6f 64 22 2c 22 63 6f 64 |","fastmod","cod| 00000f90 65 72 6d 22 2c 22 6d 65 6d 72 6d 22 3a 0d 04 2e |erm","memrm":...| 00000fa0 2e 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 |. | 00000fb0 20 20 e7 20 6c 65 6e 25 3d 39 34 30 20 80 20 74 | . len%=940 . t| 00000fc0 79 70 65 25 3d 26 46 46 41 20 8c 0d 04 38 3e 20 |ype%=&FFA ...8> | 00000fd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | | 00000fe0 20 20 20 e7 20 a4 6f 73 63 6c 69 28 22 4c 6f 61 | . .oscli("Loa| 00000ff0 64 22 2c 66 75 6c 6c 6e 61 6d 65 24 2c c3 7e 62 |d",fullname$,.~b| 00001000 75 66 66 25 29 3d a3 20 8c 0d 04 42 43 20 20 20 |uff%)=. ...BC | 00001010 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | | 00001020 20 20 20 20 62 75 66 66 25 21 26 33 34 3d 30 3a | buff%!&34=0:| 00001030 f4 20 5a 65 72 6f 20 63 6f 75 6e 74 20 64 75 65 |. Zero count due| 00001040 20 74 6f 20 62 61 64 20 6c 6f 61 64 0d 04 4c 19 | to bad load..L.| 00001050 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | | 00001060 20 20 20 20 cd 0d 04 56 34 20 20 20 20 20 20 20 | ...V4 | 00001070 20 20 20 20 20 20 20 20 20 20 20 20 20 f2 65 78 | .ex| 00001080 74 65 6e 64 76 69 72 75 73 28 22 6d 6f 64 75 6c |tendvirus("modul| 00001090 65 22 2c 62 75 66 66 25 29 0d 04 60 2d 20 20 20 |e",buff%)..`- | 000010a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | | 000010b0 20 f2 64 65 6c 6d 6f 64 75 6c 65 28 66 75 6c 6c | .delmodule(full| 000010c0 6e 61 6d 65 24 29 0d 04 6a 16 20 20 20 20 20 20 |name$)..j. | 000010d0 20 20 20 20 20 20 20 20 20 20 20 cd 0d 04 74 11 | ...t.| 000010e0 20 20 20 20 20 20 20 20 20 20 20 20 cb 0d 04 7e | ...~| 000010f0 0e 20 20 20 20 20 20 20 20 20 cd 0d 04 88 0b 20 |. ..... | 00001100 20 20 20 20 20 ed 0d 04 92 08 20 20 20 cd 0d 04 | ..... ...| 00001110 9c 25 fd 20 6f 66 66 25 3d 2d 31 20 84 20 71 75 |.%. off%=-1 . qu| 00001120 69 74 25 3d b9 20 84 20 73 63 61 6e 6e 69 6e 67 |it%=. . scanning| 00001130 25 3d a3 0d 04 a6 46 e7 20 67 6f 74 62 6f 6f 74 |%=....F. gotboot| 00001140 25 3d a3 20 80 20 97 28 6c 65 61 66 64 69 72 24 |%=. . .(leafdir$| 00001150 29 3d 33 33 20 80 20 69 6e 6e 6f 63 25 3d b9 20 |)=33 . innoc%=. | 00001160 80 20 71 75 69 74 25 3d a3 20 80 20 73 63 61 6e |. quit%=. . scan| 00001170 6e 69 6e 67 25 3d b9 20 8c 0d 04 b0 4b 20 20 20 |ning%=. ....K | 00001180 e7 20 a4 69 6e 6e 6f 63 62 6f 6f 74 28 64 69 72 |. .innocboot(dir| 00001190 24 2b 22 2e 21 42 6f 6f 74 22 2c 62 61 73 65 25 |$+".!Boot",base%| 000011a0 2c 30 2c a4 65 78 69 73 74 73 28 64 69 72 24 2b |,0,.exists(dir$+| 000011b0 22 2e 21 53 70 72 69 74 65 73 22 2c 26 46 46 39 |".!Sprites",&FF9| 000011c0 29 29 20 8c 0d 04 ba 3b 20 20 20 20 20 20 f2 70 |)) ....; .p| 000011d0 75 74 64 61 74 61 28 73 74 61 74 75 73 25 2c 22 |utdata(status%,"| 000011e0 4e 65 77 20 69 6e 6e 6f 63 75 6c 61 74 65 64 20 |New innoculated | 000011f0 21 42 6f 6f 74 20 63 72 65 61 74 65 64 22 29 0d |!Boot created").| 00001200 04 c4 08 20 20 20 cd 0d 04 ce 05 cd 0d 04 d8 05 |... ..........| 00001210 e1 0d 04 e2 04 0d 04 ec 19 dd f2 63 68 65 63 6b |...........check| 00001220 62 6f 6f 74 28 6e 61 6d 65 24 2c 6c 25 29 0d 04 |boot(name$,l%)..| 00001230 f6 0e ea 20 64 6f 69 6e 6e 6f 63 25 0d 05 00 14 |... doinnoc%....| 00001240 e7 20 6c 25 3e 3d 6d 61 78 62 6f 6f 74 25 20 8c |. l%>=maxboot% .| 00001250 0d 05 0a 19 20 20 20 73 74 69 6c 6c 25 3d b9 3a |.... still%=.:| 00001260 69 6e 66 65 63 74 25 3d b9 0d 05 14 36 20 20 20 |infect%=....6 | 00001270 f2 70 75 74 64 61 74 61 28 73 74 61 74 75 73 25 |.putdata(status%| 00001280 2c 22 21 42 6f 6f 74 20 74 6f 6f 20 62 69 67 20 |,"!Boot too big | 00001290 2d 20 6e 6f 74 20 73 63 61 6e 6e 65 64 22 29 0d |- not scanned").| 000012a0 05 1e 08 20 20 20 e1 0d 05 28 05 cd 0d 05 32 13 |... ...(....2.| 000012b0 64 6f 69 6e 6e 6f 63 25 3d 69 6e 6e 6f 63 25 0d |doinnoc%=innoc%.| 000012c0 05 3c 2a c8 99 20 22 58 4f 53 5f 43 4c 49 22 2c |.<*.. "XOS_CLI",| 000012d0 22 4c 6f 61 64 20 22 2b 6e 61 6d 65 24 2b 22 20 |"Load "+name$+" | 000012e0 22 2b c3 7e 62 75 66 66 25 0d 05 46 15 c8 8e 20 |"+.~buff%..F... | 000012f0 62 75 66 66 25 3f 28 6c 25 2d 31 29 20 ca 0d 05 |buff%?(l%-1) ...| 00001300 50 1b c9 20 26 46 46 3a c8 8e 20 62 75 66 66 25 |P.. &FF:.. buff%| 00001310 3f 28 6c 25 2d 34 29 20 ca 0d 05 5a 2c 20 20 20 |?(l%-4) ...Z, | 00001320 20 20 20 20 20 20 c9 20 31 33 3a f2 65 78 74 65 | . 13:.exte| 00001330 6e 64 76 69 72 75 73 28 22 69 6e 20 21 42 6f 6f |ndvirus("in !Boo| 00001340 74 22 2c 30 29 0d 05 64 20 20 20 20 20 20 20 20 |t",0)..d | 00001350 20 20 20 20 20 20 20 20 20 20 f2 64 69 73 6b 69 | .diski| 00001360 6e 66 65 63 74 0d 05 6e 27 20 20 20 20 20 20 20 |nfect..n' | 00001370 20 20 20 20 20 20 20 20 20 20 6c 25 3d 6c 25 2d | l%=l%-| 00001380 34 3a 64 6f 69 6e 6e 6f 63 25 3d b9 0d 05 78 2f |4:doinnoc%=...x/| 00001390 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | | 000013a0 20 c8 95 20 6c 25 3e 30 20 80 20 62 75 66 66 25 | .. l%>0 . buff%| 000013b0 3f 28 6c 25 2d 31 29 3c 3e 26 44 0d 05 82 1f 20 |?(l%-1)<>&D.... | 000013c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | | 000013d0 20 20 20 6c 25 3d 6c 25 2d 31 0d 05 8c 16 20 20 | l%=l%-1.... | 000013e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ce | .| 000013f0 0d 05 96 24 20 20 20 20 20 20 20 20 20 20 20 20 |...$ | 00001400 20 20 20 20 20 62 75 66 66 25 3f 28 6c 25 2d 31 | buff%?(l%-1| 00001410 29 3d 26 41 0d 05 a0 1c 20 20 20 20 20 20 20 20 |)=&A.... | 00001420 20 c9 20 31 30 3a 64 6f 69 6e 6e 6f 63 25 3d a3 | . 10:doinnoc%=.| 00001430 0d 05 aa 42 20 20 20 20 20 20 20 20 20 20 20 20 |...B | 00001440 20 20 20 20 20 f2 70 75 74 64 61 74 61 28 73 74 | .putdata(st| 00001450 61 74 75 73 25 2c 22 21 42 6f 6f 74 20 61 6c 72 |atus%,"!Boot alr| 00001460 65 61 64 79 20 69 6e 6e 6f 63 75 6c 61 74 65 64 |eady innoculated| 00001470 22 29 0d 05 b4 19 20 20 20 20 20 20 20 20 20 7f |").... .| 00001480 20 64 6f 69 6e 6e 6f 63 25 3d a3 0d 05 be 0e 20 | doinnoc%=..... | 00001490 20 20 20 20 20 20 20 20 cb 0d 05 c8 1d c9 20 26 | ...... &| 000014a0 30 41 3a f4 20 4e 6f 72 6d 61 6c 20 74 65 72 6d |0A:. Normal term| 000014b0 69 6e 61 74 6f 72 0d 05 d2 27 7f 20 62 75 66 66 |inator...'. buff| 000014c0 25 3f 6c 25 3d 26 41 3a 6c 25 2b 3d 31 3a f4 20 |%?l%=&A:l%+=1:. | 000014d0 41 64 64 20 4c 46 20 6f 6e 20 65 6e 64 0d 05 dc |Add LF on end...| 000014e0 05 cb 0d 05 e6 10 e7 20 64 6f 69 6e 6e 6f 63 25 |....... doinnoc%| 000014f0 20 8c 0d 05 f0 21 20 20 20 e7 20 6c 25 2b 70 72 | ....! . l%+pr| 00001500 6f 74 6c 65 6e 25 2b 31 3e 6d 61 78 62 6f 6f 74 |otlen%+1>maxboot| 00001510 25 20 8c 0d 05 fa 1c 20 20 20 20 20 20 73 74 69 |% ..... sti| 00001520 6c 6c 25 3d b9 3a 69 6e 66 65 63 74 25 3d b9 0d |ll%=.:infect%=..| 00001530 06 04 3d 20 20 20 20 20 20 f2 70 75 74 64 61 74 |..= .putdat| 00001540 61 28 73 74 61 74 75 73 25 2c 22 21 42 6f 6f 74 |a(status%,"!Boot| 00001550 20 74 6f 6f 20 62 69 67 20 2d 20 6e 6f 74 20 69 | too big - not i| 00001560 6e 6e 6f 63 75 6c 61 74 65 64 22 29 0d 06 0e 0b |nnoculated")....| 00001570 20 20 20 20 20 20 e1 0d 06 18 08 20 20 20 cd 0d | ..... ..| 00001580 06 22 27 20 20 20 e7 20 a4 69 6e 6e 6f 63 62 6f |."' . .innocbo| 00001590 6f 74 28 6e 61 6d 65 24 2c 62 75 66 66 25 2c 6c |ot(name$,buff%,l| 000015a0 25 2c a3 29 20 8c 0d 06 2c 3c 20 20 20 20 20 20 |%,.) ...,< | 000015b0 f2 70 75 74 64 61 74 61 28 73 74 61 74 75 73 25 |.putdata(status%| 000015c0 2c 22 21 42 6f 6f 74 20 68 61 73 20 6e 6f 77 20 |,"!Boot has now | 000015d0 62 65 65 6e 20 69 6e 6e 6f 63 75 6c 61 74 65 64 |been innoculated| 000015e0 22 29 0d 06 36 08 20 20 20 cd 0d 06 40 05 cd 0d |")..6. ...@...| 000015f0 06 4a 05 e1 0d 06 54 04 0d 06 5e 24 dd a4 69 6e |.J....T...^$..in| 00001600 6e 6f 63 62 6f 6f 74 28 6e 24 2c 61 25 2c 6c 65 |nocboot(n$,a%,le| 00001610 6e 25 2c 61 64 64 69 63 6f 6e 25 29 0d 06 68 13 |n%,addicon%)..h.| 00001620 ea 20 67 6f 6f 64 25 3a 67 6f 6f 64 25 3d a3 0d |. good%:good%=..| 00001630 06 72 10 e7 20 61 64 64 69 63 6f 6e 25 20 8c 0d |.r.. addicon% ..| 00001640 06 7c 16 20 20 24 28 61 25 2b 6c 65 6e 25 29 3d |.|. $(a%+len%)=| 00001650 69 63 6f 6e 24 0d 06 86 14 20 20 6c 65 6e 25 2b |icon$.... len%+| 00001660 3d 69 63 6f 6e 6c 65 6e 25 0d 06 90 05 cd 0d 06 |=iconlen%.......| 00001670 9a 17 24 28 61 25 2b 6c 65 6e 25 29 3d 70 72 6f |..$(a%+len%)=pro| 00001680 74 65 63 74 24 0d 06 a4 37 e7 20 a4 6f 73 63 6c |tect$...7. .oscl| 00001690 69 28 22 53 61 76 65 22 2c 6e 24 2c c3 7e 61 25 |i("Save",n$,.~a%| 000016a0 2b 22 20 22 2b c3 7e 28 61 25 2b 6c 65 6e 25 2b |+" "+.~(a%+len%+| 000016b0 70 72 6f 74 6c 65 6e 25 29 29 20 8c 0d 06 ae 26 |protlen%)) ....&| 000016c0 20 20 20 e7 20 a4 6f 73 63 6c 69 28 22 53 65 74 | . .oscli("Set| 000016d0 54 79 70 65 22 2c 6e 24 2c 22 4f 62 65 79 22 29 |Type",n$,"Obey")| 000016e0 20 8c 0d 06 b8 38 20 20 20 20 20 20 6e 75 6d 69 | ....8 numi| 000016f0 6e 6e 6f 63 25 2b 3d 31 3a 67 6f 6f 64 25 3d b9 |nnoc%+=1:good%=.| 00001700 3a f2 70 75 74 64 61 74 61 28 32 31 2c c3 28 6e |:.putdata(21,.(n| 00001710 75 6d 69 6e 6e 6f 63 25 29 29 0d 06 c2 08 20 20 |uminnoc%)).... | 00001720 20 cd 0d 06 cc 05 cd 0d 06 d6 0a 3d 67 6f 6f 64 | ..........=good| 00001730 25 0d 06 e0 04 0d 06 ea 1e dd f2 65 78 74 65 6e |%..........exten| 00001740 64 76 69 72 75 73 28 6d 65 73 73 24 2c 61 64 64 |dvirus(mess$,add| 00001750 72 25 29 0d 06 f4 08 ea 20 74 25 0d 06 fe 3f e7 |r%)..... t%...?.| 00001760 20 61 64 64 72 25 3a f2 70 75 74 64 61 74 61 28 | addr%:.putdata(| 00001770 64 69 72 73 63 61 6e 25 2c 22 45 78 65 63 75 74 |dirscan%,"Execut| 00001780 69 6f 6e 20 43 6f 75 6e 74 3a 20 22 2b c3 28 61 |ion Count: "+.(a| 00001790 64 64 72 25 21 26 33 34 29 29 0d 07 08 36 f2 70 |ddr%!&34))...6.p| 000017a0 75 74 64 61 74 61 28 73 74 61 74 75 73 25 2c 22 |utdata(status%,"| 000017b0 45 78 74 65 6e 64 20 56 69 72 75 73 20 22 2b 6d |Extend Virus "+m| 000017c0 65 73 73 24 2b 22 20 66 6f 75 6e 64 20 21 22 29 |ess$+" found !")| 000017d0 0d 07 12 19 69 6e 66 65 63 74 25 3d b9 3a f2 6f |....infect%=.:.o| 000017e0 70 65 6e 77 69 6e 64 6f 77 0d 07 1c 23 74 25 3d |penwindow...#t%=| 000017f0 91 2b 32 30 30 3a f4 20 44 65 6c 61 79 20 74 6f |.+200:. Delay to| 00001800 20 73 65 65 20 6d 65 73 73 61 67 65 0d 07 26 05 | see message..&.| 00001810 f5 0d 07 30 11 20 20 20 f2 77 69 6d 70 5f 70 6f |...0. .wimp_po| 00001820 6c 6c 0d 07 3a 12 fd 20 91 3e 74 25 20 84 20 71 |ll..:.. .>t% . q| 00001830 75 69 74 25 0d 07 44 05 e1 0d 07 4e 04 0d 07 58 |uit%..D....N...X| 00001840 13 dd f2 64 65 6c 6d 6f 64 75 6c 65 28 6d 24 29 |...delmodule(m$)| 00001850 0d 07 62 0f f2 64 69 73 6b 69 6e 66 65 63 74 0d |..b..diskinfect.| 00001860 07 6c 1e e7 20 a4 6f 73 63 6c 69 28 22 44 65 6c |.l.. .oscli("Del| 00001870 65 74 65 22 2c 6d 24 2c 22 22 29 20 8c 0d 07 76 |ete",m$,"") ...v| 00001880 36 20 20 20 f2 70 75 74 64 61 74 61 28 73 74 61 |6 .putdata(sta| 00001890 74 75 73 25 2c 22 45 78 74 65 6e 64 20 56 69 72 |tus%,"Extend Vir| 000018a0 75 73 20 6d 6f 64 75 6c 65 20 64 65 6c 65 74 65 |us module delete| 000018b0 64 22 29 0d 07 80 05 cd 0d 07 8a 05 e1 0d 07 94 |d").............| 000018c0 04 0d 07 9e 10 dd f2 64 69 73 6b 69 6e 66 65 63 |.......diskinfec| 000018d0 74 0d 07 a8 28 6e 75 6d 64 69 73 6b 25 2b 3d 31 |t...(numdisk%+=1| 000018e0 3a f2 70 75 74 64 61 74 61 28 32 30 2c c3 28 6e |:.putdata(20,.(n| 000018f0 75 6d 64 69 73 6b 25 29 29 0d 07 b2 05 e1 0d 07 |umdisk%)).......| 00001900 bc 04 0d 07 c6 15 dd a4 6f 73 63 6c 69 28 6c 24 |........oscli(l$| 00001910 2c 6d 24 2c 72 24 29 0d 07 d0 1b ea 20 66 6c 61 |,m$,r$)..... fla| 00001920 67 73 25 2c 61 67 61 69 6e 25 2c 65 72 72 62 6c |gs%,again%,errbl| 00001930 6b 25 0d 07 da 05 f5 0d 07 e4 16 20 20 20 e7 20 |k%......... . | 00001940 6c 24 3d 22 52 4d 4b 69 6c 6c 22 20 8c 0d 07 ee |l$="RMKill" ....| 00001950 4f 20 20 20 20 20 20 c8 99 20 22 58 57 69 6d 70 |O .. "XWimp| 00001960 5f 53 74 61 72 74 54 61 73 6b 22 2c 6c 24 2b 22 |_StartTask",l$+"| 00001970 20 22 2b 6d 24 2b 22 20 22 2b 72 24 2b 22 20 7b | "+m$+" "+r$+" {| 00001980 20 3e 20 6e 75 6c 6c 3a 20 7d 22 20 b8 20 65 72 | > null: }" . er| 00001990 72 62 6c 6b 25 3b 66 6c 61 67 73 25 0d 07 f8 08 |rblk%;flags%....| 000019a0 20 20 20 cc 0d 08 02 47 20 20 20 20 20 20 c8 99 | ....G ..| 000019b0 20 22 58 4f 53 5f 43 4c 49 22 2c 6c 24 2b 22 20 | "XOS_CLI",l$+" | 000019c0 22 2b 6d 24 2b 22 20 22 2b 72 24 2b 22 20 7b 20 |"+m$+" "+r$+" { | 000019d0 3e 20 6e 75 6c 6c 3a 20 7d 22 20 b8 20 65 72 72 |> null: }" . err| 000019e0 62 6c 6b 25 3b 66 6c 61 67 73 25 0d 08 0c 08 20 |blk%;flags%.... | 000019f0 20 20 cd 0d 08 16 0f 20 20 20 61 67 61 69 6e 25 | ..... again%| 00001a00 3d a3 0d 08 20 15 20 20 20 e7 20 66 6c 61 67 73 |=... . . flags| 00001a10 25 20 80 20 31 20 8c 0d 08 2a 17 20 20 20 20 20 |% . 1 ...*. | 00001a20 20 c8 8e 20 21 65 72 72 62 6c 6b 25 20 ca 0d 08 | .. !errblk% ...| 00001a30 34 13 20 20 20 20 20 20 c9 20 26 31 30 38 43 39 |4. . &108C9| 00001a40 3a 0d 08 3e 4f 20 20 20 20 20 20 20 20 20 61 67 |:..>O ag| 00001a50 61 69 6e 25 3d a4 79 65 73 6e 6f 28 22 20 20 20 |ain%=.yesno(" | 00001a60 20 57 72 69 74 65 2d 70 72 6f 74 65 63 74 65 64 | Write-protected| 00001a70 20 64 69 73 6b 20 21 20 20 20 20 20 52 65 74 72 | disk ! Retr| 00001a80 79 20 64 69 73 6b 20 77 72 69 74 65 20 3f 22 29 |y disk write ?")| 00001a90 0d 08 48 32 20 20 20 20 20 20 c9 20 26 31 30 38 |..H2 . &108| 00001aa0 43 33 3a 61 67 61 69 6e 25 3d a4 6f 73 63 6c 69 |C3:again%=.oscli| 00001ab0 28 22 41 63 63 65 73 73 22 2c 6d 24 2c 22 57 52 |("Access",m$,"WR| 00001ac0 22 29 0d 08 52 0b 20 20 20 20 20 20 7f 0d 08 5c |")..R. ...\| 00001ad0 20 20 20 20 20 20 20 20 20 20 e7 20 21 65 72 72 | . !err| 00001ae0 62 6c 6b 25 3e 26 31 30 30 30 30 20 8c 0d 08 66 |blk%>&10000 ...f| 00001af0 3f 20 20 20 20 20 20 20 20 20 20 20 20 f2 70 75 |? .pu| 00001b00 74 64 61 74 61 28 73 74 61 74 75 73 25 2c 22 43 |tdata(status%,"C| 00001b10 6f 75 6c 64 6e 27 74 20 70 65 72 66 6f 72 6d 20 |ouldn't perform | 00001b20 64 69 73 6b 20 77 72 69 74 65 22 29 0d 08 70 0e |disk write")..p.| 00001b30 20 20 20 20 20 20 20 20 20 cc 0d 08 7a 41 20 20 | ...zA | 00001b40 20 20 20 20 20 20 20 20 20 20 f2 70 75 74 64 61 | .putda| 00001b50 74 61 28 73 74 61 74 75 73 25 2c 22 43 6f 75 6c |ta(status%,"Coul| 00001b60 64 6e 27 74 20 64 65 6c 65 74 65 20 45 78 74 65 |dn't delete Exte| 00001b70 6e 64 20 6d 6f 64 75 6c 65 22 29 0d 08 84 0e 20 |nd module").... | 00001b80 20 20 20 20 20 20 20 20 cd 0d 08 8e 0b 20 20 20 | ..... | 00001b90 20 20 20 cb 0d 08 98 1d 20 20 20 20 20 20 e7 20 | ..... . | 00001ba0 61 67 61 69 6e 25 3d a3 3a 73 74 69 6c 6c 25 3d |again%=.:still%=| 00001bb0 b9 0d 08 a2 08 20 20 20 cd 0d 08 ac 0e fd 20 61 |..... ...... a| 00001bc0 67 61 69 6e 25 3d a3 0d 08 b6 15 3d 28 28 66 6c |gain%=.....=((fl| 00001bd0 61 67 73 25 20 80 20 31 29 3d 30 29 0d 08 c0 04 |ags% . 1)=0)....| 00001be0 0d 08 ca 1c dd a4 77 69 6d 70 65 72 72 6f 72 28 |......wimperror(| 00001bf0 6d 65 73 73 24 2c 6d 61 73 6b 25 29 0d 08 d4 0c |mess$,mask%)....| 00001c00 ea 20 63 6c 69 63 6b 25 0d 08 de 52 c8 99 20 22 |. click%...R.. "| 00001c10 58 57 69 6d 70 5f 52 65 70 6f 72 74 45 72 72 6f |XWimp_ReportErro| 00001c20 72 22 2c c4 34 2c 62 6c 24 29 2b 6d 65 73 73 24 |r",.4,bl$)+mess$| 00001c30 2b 62 6c 24 2c 6d 61 73 6b 25 2c 22 56 4b 69 6c |+bl$,mask%,"VKil| 00001c40 6c 65 72 20 57 61 72 6e 69 6e 67 22 2b 62 6c 24 |ler Warning"+bl$| 00001c50 20 b8 20 2c 63 6c 69 63 6b 25 0d 08 e8 0b 3d 63 | . ,click%....=c| 00001c60 6c 69 63 6b 25 0d 08 f2 04 0d 08 fc 2f dd a4 79 |lick%......./..y| 00001c70 65 73 6e 6f 28 6d 65 73 73 24 29 3d 28 a4 77 69 |esno(mess$)=(.wi| 00001c80 6d 70 65 72 72 6f 72 28 6d 65 73 73 24 2c 25 31 |mperror(mess$,%1| 00001c90 30 30 31 31 29 3d 31 29 0d 09 06 04 0d 09 10 11 |0011)=1)........| 00001ca0 dd f2 77 61 72 6e 28 6d 65 73 73 24 29 0d 09 1a |..warn(mess$)...| 00001cb0 0c ea 20 63 6c 69 63 6b 25 0d 09 24 23 63 6c 69 |.. click%..$#cli| 00001cc0 63 6b 25 3d a4 77 69 6d 70 65 72 72 6f 72 28 6d |ck%=.wimperror(m| 00001cd0 65 73 73 24 2c 25 31 30 30 30 31 29 0d 09 2e 05 |ess$,%10001)....| 00001ce0 e1 0d 09 38 04 0d 09 42 18 dd f2 73 63 61 6e 6d |...8...B...scanm| 00001cf0 6f 64 75 6c 65 73 28 68 61 6e 64 25 29 0d 09 4c |odules(hand%)..L| 00001d00 26 ea 20 6d 6f 64 75 6c 65 25 2c 73 75 62 25 2c |&. module%,sub%,| 00001d10 73 74 61 72 74 25 2c 66 6c 61 67 73 25 2c 68 65 |start%,flags%,he| 00001d20 6c 70 25 0d 09 56 05 f5 0d 09 60 44 20 20 20 c8 |lp%..V....`D .| 00001d30 99 20 22 58 4f 53 5f 4d 6f 64 75 6c 65 22 2c 31 |. "XOS_Module",1| 00001d40 32 2c 6d 6f 64 75 6c 65 25 2c 73 75 62 25 20 b8 |2,module%,sub% .| 00001d50 20 2c 6d 6f 64 75 6c 65 25 2c 73 75 62 25 2c 73 | ,module%,sub%,s| 00001d60 74 61 72 74 25 3b 66 6c 61 67 73 25 0d 09 6a 19 |tart%;flags%..j.| 00001d70 20 20 20 e7 20 28 66 6c 61 67 73 25 20 80 20 31 | . (flags% . 1| 00001d80 29 3d 30 20 8c 0d 09 74 21 20 20 20 20 20 20 68 |)=0 ...t! h| 00001d90 65 6c 70 25 3d 73 74 61 72 74 25 2b 73 74 61 72 |elp%=start%+star| 00001da0 74 25 21 26 31 34 0d 09 7e 2b 20 20 20 20 20 20 |t%!&14..~+ | 00001db0 e7 20 a4 67 65 74 73 74 72 69 6e 67 28 68 65 6c |. .getstring(hel| 00001dc0 70 25 29 3d 65 78 74 65 6e 64 68 65 6c 70 24 20 |p%)=extendhelp$ | 00001dd0 8c 0d 09 88 21 20 20 20 20 20 20 20 20 20 6e 75 |....! nu| 00001de0 6d 6d 65 6d 25 2b 3d 31 3a 69 6e 66 65 63 74 25 |mmem%+=1:infect%| 00001df0 3d b9 0d 09 92 24 20 20 20 20 20 20 20 20 20 f2 |=....$ .| 00001e00 70 75 74 64 61 74 61 28 31 39 2c c3 28 6e 75 6d |putdata(19,.(num| 00001e10 6d 65 6d 25 29 29 0d 09 9c 16 20 20 20 20 20 20 |mem%)).... | 00001e20 20 20 20 e7 20 68 61 6e 64 25 20 8c 0d 09 a6 40 | . hand% ....@| 00001e30 20 20 20 20 20 20 20 20 20 20 20 20 f4 20 54 68 | . Th| 00001e40 69 73 20 69 73 20 61 20 62 75 67 2d 66 69 78 20 |is is a bug-fix | 00001e50 3a 2d 29 20 49 74 20 61 6c 6c 6f 77 73 20 74 68 |:-) It allows th| 00001e60 65 20 76 69 72 75 73 20 74 61 73 6b 0d 09 b0 48 |e virus task...H| 00001e70 20 20 20 20 20 20 20 20 20 20 20 20 f4 20 74 6f | . to| 00001e80 20 73 68 75 74 64 6f 77 6e 20 70 72 6f 70 65 72 | shutdown proper| 00001e90 6c 79 20 77 69 74 68 6f 75 74 20 63 72 61 73 68 |ly without crash| 00001ea0 69 6e 67 20 74 68 65 20 54 61 73 6b 20 4d 61 6e |ing the Task Man| 00001eb0 61 67 65 72 0d 09 ba 33 20 20 20 20 20 20 20 20 |ager...3 | 00001ec0 20 20 20 20 73 74 61 72 74 25 21 26 34 30 3d 68 | start%!&40=h| 00001ed0 61 6e 64 25 3a f4 20 53 61 76 65 20 74 61 73 6b |and%:. Save task| 00001ee0 20 68 61 6e 64 6c 65 0d 09 c4 1d 20 20 20 20 20 | handle.... | 00001ef0 20 20 20 20 20 20 20 50 25 3d 73 74 61 72 74 25 | P%=start%| 00001f00 2b 26 37 30 0d 09 ce 16 20 20 20 20 20 20 20 20 |+&70.... | 00001f10 20 20 20 20 5b 4f 50 54 20 30 0d 09 d8 3e 20 20 | [OPT 0...> | 00001f20 20 20 20 20 20 20 20 20 20 20 4c 44 52 20 52 32 | LDR R2| 00001f30 2c 73 74 61 72 74 25 2b 26 36 34 3a 43 4d 50 20 |,start%+&64:CMP | 00001f40 52 32 2c 23 31 3a 53 57 49 47 54 20 22 58 4f 53 |R2,#1:SWIGT "XOS| 00001f50 5f 4d 6f 64 75 6c 65 22 0d 09 e2 33 20 20 20 20 |_Module"...3 | 00001f60 20 20 20 20 20 20 20 20 4c 44 52 20 52 30 2c 73 | LDR R0,s| 00001f70 74 61 72 74 25 2b 26 34 30 3a 4c 44 52 20 52 31 |tart%+&40:LDR R1| 00001f80 2c 73 74 61 72 74 25 2b 26 35 34 0d 09 ec 11 20 |,start%+&54.... | 00001f90 20 20 20 20 20 20 20 20 20 20 20 5d 0d 09 f6 0e | ]....| 00001fa0 20 20 20 20 20 20 20 20 20 cc 0d 0a 00 45 20 20 | ....E | 00001fb0 20 20 20 20 20 20 20 20 20 20 f2 77 61 72 6e 28 | .warn(| 00001fc0 22 54 61 73 6b 20 4d 61 6e 61 67 65 72 20 69 73 |"Task Manager is| 00001fd0 20 75 6e 73 74 61 62 6c 65 20 21 20 20 20 20 20 | unstable ! | 00001fe0 44 6f 20 6e 6f 74 20 75 73 65 20 69 74 22 29 0d |Do not use it").| 00001ff0 0a 0a 0e 20 20 20 20 20 20 20 20 20 cd 0d 0a 14 |... ....| 00002000 2a 20 20 20 20 20 20 20 20 20 f2 65 78 74 65 6e |* .exten| 00002010 64 76 69 72 75 73 28 22 69 6e 20 52 4d 41 22 2c |dvirus("in RMA",| 00002020 73 74 61 72 74 25 29 0d 0a 1e 2d 20 20 20 20 20 |start%)...- | 00002030 20 20 20 20 e7 20 a4 6f 73 63 6c 69 28 22 52 4d | . .oscli("RM| 00002040 4b 69 6c 6c 22 2c 22 45 78 74 65 6e 64 22 2c 22 |Kill","Extend","| 00002050 22 29 20 8c 0d 0a 28 41 20 20 20 20 20 20 20 20 |") ...(A | 00002060 20 20 20 20 20 f2 70 75 74 64 61 74 61 28 73 74 | .putdata(st| 00002070 61 74 75 73 25 2c 22 45 78 74 65 6e 64 20 56 69 |atus%,"Extend Vi| 00002080 72 75 73 20 6b 69 6c 6c 65 64 20 66 72 6f 6d 20 |rus killed from | 00002090 52 4d 41 22 29 0d 0a 32 0e 20 20 20 20 20 20 20 |RMA")..2. | 000020a0 20 20 cc 0d 0a 3c 19 20 20 20 20 20 20 20 20 20 | ...<. | 000020b0 20 20 20 20 73 74 69 6c 6c 25 3d b9 0d 0a 46 0e | still%=...F.| 000020c0 20 20 20 20 20 20 20 20 20 cd 0d 0a 50 0b 20 20 | ...P. | 000020d0 20 20 20 20 cd 0d 0a 5a 08 20 20 20 cd 0d 0a 64 | ...Z. ...d| 000020e0 10 fd 20 66 6c 61 67 73 25 20 80 20 31 0d 0a 6e |.. flags% . 1..n| 000020f0 05 e1 0d 0a 78 04 0d 0a 82 19 dd a4 65 78 69 73 |....x.......exis| 00002100 74 73 28 66 69 6c 65 24 2c 74 79 70 65 25 29 0d |ts(file$,type%).| 00002110 0a 8c 13 ea 20 66 6f 75 6e 64 25 2c 66 74 79 70 |.... found%,ftyp| 00002120 65 25 0d 0a 96 2a c8 99 20 22 58 4f 53 5f 46 69 |e%...*.. "XOS_Fi| 00002130 6c 65 22 2c 35 2c 66 69 6c 65 24 20 b8 20 66 6f |le",5,file$ . fo| 00002140 75 6e 64 25 2c 2c 66 74 79 70 65 25 0d 0a a0 1e |und%,,ftype%....| 00002150 66 74 79 70 65 25 3d 28 66 74 79 70 65 25 3e 3e |ftype%=(ftype%>>| 00002160 3e 38 29 20 80 20 26 46 46 46 0d 0a aa 1e 3d 28 |>8) . &FFF....=(| 00002170 66 6f 75 6e 64 25 3d 31 20 80 20 74 79 70 65 25 |found%=1 . type%| 00002180 3d 66 74 79 70 65 25 29 0d 0a b4 04 0d 0a be 0f |=ftype%)........| 00002190 dd a4 6c 6f 77 65 72 28 73 24 29 0d 0a c8 17 ea |..lower(s$).....| 000021a0 20 6c 6f 6f 70 25 2c 6e 24 2c 63 24 3a 6e 24 3d | loop%,n$,c$:n$=| 000021b0 22 22 0d 0a d2 15 e3 20 6c 6f 6f 70 25 3d 31 20 |""..... loop%=1 | 000021c0 b8 20 a9 28 73 24 29 0d 0a dc 16 20 20 20 63 24 |. .(s$).... c$| 000021d0 3d c1 73 24 2c 6c 6f 6f 70 25 2c 31 29 0d 0a e6 |=.s$,loop%,1)...| 000021e0 1c 20 20 20 e7 20 63 24 3e 3d 22 41 22 20 80 20 |. . c$>="A" . | 000021f0 63 24 3c 3d 22 5a 22 20 8c 0d 0a f0 1b 20 20 20 |c$<="Z" ..... | 00002200 20 20 20 6e 24 3d 6e 24 2b bd 28 97 28 63 24 29 | n$=n$+.(.(c$)| 00002210 2b 33 32 29 0d 0a fa 08 20 20 20 cc 0d 0b 04 12 |+32).... .....| 00002220 20 20 20 20 20 20 6e 24 3d 6e 24 2b 63 24 0d 0b | n$=n$+c$..| 00002230 0e 08 20 20 20 cd 0d 0b 18 05 ed 0d 0b 22 07 3d |.. ........".=| 00002240 6e 24 0d 0b 2c 04 0d 0b 36 18 dd a4 67 65 74 73 |n$..,...6...gets| 00002250 74 72 69 6e 67 28 f8 20 61 64 64 72 25 29 0d 0b |tring(. addr%)..| 00002260 40 0e ea 20 73 24 3a 73 24 3d 22 22 0d 0b 4a 2b |@.. s$:s$=""..J+| 00002270 c8 95 20 3f 61 64 64 72 25 3c 3e 30 3a 73 24 3d |.. ?addr%<>0:s$=| 00002280 73 24 2b bd 28 3f 61 64 64 72 25 29 3a 61 64 64 |s$+.(?addr%):add| 00002290 72 25 2b 3d 31 3a ce 0d 0b 54 07 3d 73 24 0d 0b |r%+=1:...T.=s$..| 000022a0 5e 04 0d 0b 68 0f dd f2 77 69 6d 70 5f 70 6f 6c |^...h...wimp_pol| 000022b0 6c 0d 0b 72 0d ea 20 72 65 61 73 6f 6e 25 0d 0b |l..r.. reason%..| 000022c0 7c 25 c8 99 20 22 58 57 69 6d 70 5f 50 6f 6c 6c ||%.. "XWimp_Poll| 000022d0 22 2c 30 2c 70 6f 6c 6c 25 20 b8 20 72 65 61 73 |",0,poll% . reas| 000022e0 6f 6e 25 0d 0b 86 10 c8 8e 20 72 65 61 73 6f 6e |on%...... reason| 000022f0 25 20 ca 0d 0b 90 37 c9 20 32 3a c8 99 20 22 58 |% ....7. 2:.. "X| 00002300 57 69 6d 70 5f 4f 70 65 6e 57 69 6e 64 6f 77 22 |Wimp_OpenWindow"| 00002310 2c 2c 70 6f 6c 6c 25 3a f4 20 49 6e 66 6f 20 77 |,,poll%:. Info w| 00002320 69 6e 64 6f 77 20 64 72 61 67 0d 0b 9a 14 c9 20 |indow drag..... | 00002330 33 3a f2 63 6c 6f 73 65 77 69 6e 64 6f 77 0d 0b |3:.closewindow..| 00002340 a4 13 c9 20 36 3a f2 6d 6f 75 73 65 63 6c 69 63 |... 6:.mouseclic| 00002350 6b 0d 0b ae 13 c9 20 39 3a f2 6d 65 6e 75 73 65 |k..... 9:.menuse| 00002360 6c 65 63 74 0d 0b b8 18 c9 20 31 37 2c 31 38 3a |lect..... 17,18:| 00002370 f2 77 69 6d 70 6d 65 73 73 61 67 65 0d 0b c2 05 |.wimpmessage....| 00002380 cb 0d 0b cc 05 e1 0d 0b d6 04 0d 0b e0 11 dd f2 |................| 00002390 63 6c 6f 73 65 77 69 6e 64 6f 77 0d 0b ea 37 c8 |closewindow...7.| 000023a0 99 20 22 58 57 69 6d 70 5f 43 6c 6f 73 65 57 69 |. "XWimp_CloseWi| 000023b0 6e 64 6f 77 22 2c 2c 76 6b 69 6c 6c 77 69 6e 64 |ndow",,vkillwind| 000023c0 25 3a f4 20 45 76 61 6c 20 63 6c 6f 73 65 20 62 |%:. Eval close b| 000023d0 6f 78 0d 0b f4 05 e1 0d 0b fe 04 0d 0c 08 10 dd |ox..............| 000023e0 f2 6d 6f 75 73 65 63 6c 69 63 6b 0d 0c 12 10 c8 |.mouseclick.....| 000023f0 8e 20 70 6f 6c 6c 25 21 38 20 ca 0d 0c 1c 15 20 |. poll%!8 ..... | 00002400 20 20 c9 20 31 2c 34 3a f2 73 74 61 72 74 75 70 | . 1,4:.startup| 00002410 0d 0c 26 19 20 20 20 c9 20 20 20 32 3a f2 73 68 |..&. . 2:.sh| 00002420 6f 77 6e 65 77 6d 65 6e 75 0d 0c 30 05 cb 0d 0c |ownewmenu..0....| 00002430 3a 05 e1 0d 0c 44 04 0d 0c 4e 11 dd f2 73 68 6f |:....D...N...sho| 00002440 77 6e 65 77 6d 65 6e 75 0d 0c 58 08 ea 20 79 25 |wnewmenu..X.. y%| 00002450 0d 0c 62 3a e7 20 70 6f 6c 6c 25 21 31 32 3d 2d |..b:. poll%!12=-| 00002460 32 3a 79 25 3d 39 36 2b 21 73 70 61 63 69 6e 67 |2:y%=96+!spacing| 00002470 2a 6e 75 6d 69 74 65 6d 73 25 20 8b 20 79 25 3d |*numitems% . y%=| 00002480 70 6f 6c 6c 25 21 34 2b 31 36 0d 0c 6c 1c 6f 6c |poll%!4+16..l.ol| 00002490 64 78 25 3d 21 70 6f 6c 6c 25 2d 36 34 3a 6f 6c |dx%=!poll%-64:ol| 000024a0 64 79 25 3d 79 25 0d 0c 76 10 f2 73 68 6f 77 6f |dy%=y%..v..showo| 000024b0 6c 64 6d 65 6e 75 0d 0c 80 05 e1 0d 0c 8a 04 0d |ldmenu..........| 000024c0 0c 94 11 dd f2 73 68 6f 77 6f 6c 64 6d 65 6e 75 |.....showoldmenu| 000024d0 0d 0c 9e 2c c8 99 20 22 58 57 69 6d 70 5f 43 72 |...,.. "XWimp_Cr| 000024e0 65 61 74 65 4d 65 6e 75 22 2c 2c 6d 65 6e 75 25 |eateMenu",,menu%| 000024f0 2c 6f 6c 64 78 25 2c 6f 6c 64 79 25 0d 0c a8 05 |,oldx%,oldy%....| 00002500 e1 0d 0c b2 04 0d 0c bc 10 dd f2 6f 70 65 6e 77 |...........openw| 00002510 69 6e 64 6f 77 0d 0c c6 33 76 6b 69 6c 6c 77 69 |indow...3vkillwi| 00002520 6e 64 25 21 32 38 3d 2d 31 3a f4 20 4f 70 65 6e |nd%!28=-1:. Open| 00002530 20 6f 6e 20 74 6f 70 20 6f 66 20 65 76 65 72 79 | on top of every| 00002540 6f 6e 65 20 65 6c 73 65 0d 0c d0 25 c8 99 20 22 |one else...%.. "| 00002550 58 57 69 6d 70 5f 4f 70 65 6e 57 69 6e 64 6f 77 |XWimp_OpenWindow| 00002560 22 2c 2c 76 6b 69 6c 6c 77 69 6e 64 25 0d 0c da |",,vkillwind%...| 00002570 05 e1 0d 0c e4 04 0d 0c ee 0d dd f2 73 74 61 72 |............star| 00002580 74 75 70 0d 0c f8 11 c8 8e 20 70 6f 6c 6c 25 21 |tup...... poll%!| 00002590 31 32 20 ca 0d 0d 02 17 20 20 20 c9 20 2d 32 3a |12 ..... . -2:| 000025a0 f2 6f 70 65 6e 77 69 6e 64 6f 77 0d 0d 0c 14 20 |.openwindow.... | 000025b0 20 20 c9 20 76 6b 69 6c 6c 68 61 6e 64 25 3a 0d | . vkillhand%:.| 000025c0 0d 16 17 20 20 20 20 20 20 c8 8e 20 70 6f 6c 6c |... .. poll| 000025d0 25 21 31 36 20 ca 0d 0d 20 3a 20 20 20 20 20 20 |%!16 ... : | 000025e0 c9 20 37 3a e7 20 73 63 61 6e 6e 69 6e 67 25 3d |. 7:. scanning%=| 000025f0 a3 3a f2 6e 65 78 74 66 73 3a f4 20 46 69 6c 69 |.:.nextfs:. Fili| 00002600 6e 67 20 73 79 73 74 65 6d 20 63 68 61 6e 67 65 |ng system change| 00002610 0d 0d 2a 50 20 20 20 20 20 20 c9 20 38 2c 39 2c |..*P . 8,9,| 00002620 31 30 2c 31 31 2c 31 32 2c 31 33 2c 31 34 2c 31 |10,11,12,13,14,1| 00002630 35 3a e7 20 73 63 61 6e 6e 69 6e 67 25 3d a3 3a |5:. scanning%=.:| 00002640 64 72 69 76 65 25 3d 70 6f 6c 6c 25 21 31 36 2d |drive%=poll%!16-| 00002650 38 3a f4 20 44 72 69 76 65 20 63 68 61 6e 67 65 |8:. Drive change| 00002660 0d 0d 34 33 20 20 20 20 20 20 c9 20 32 33 3a e7 |..43 . 23:.| 00002670 20 73 63 61 6e 6e 69 6e 67 25 3a f2 66 69 6e 69 | scanning%:.fini| 00002680 73 68 73 63 61 6e 20 8b 20 f2 73 74 61 72 74 73 |shscan . .starts| 00002690 63 61 6e 0d 0d 3e 1e 20 20 20 20 20 20 c9 20 32 |can..>. . 2| 000026a0 34 3a 69 6e 6e 6f 63 25 3d ac 20 69 6e 6e 6f 63 |4:innoc%=. innoc| 000026b0 25 0d 0d 48 0b 20 20 20 20 20 20 cb 0d 0d 52 05 |%..H. ...R.| 000026c0 cb 0d 0d 5c 05 e1 0d 0d 66 04 0d 0d 7a 10 dd f2 |...\....f...z...| 000026d0 6d 65 6e 75 73 65 6c 65 63 74 0d 0d 84 21 ea 20 |menuselect...!. | 000026e0 6d 6f 75 73 65 25 2c 69 74 65 6d 25 3a 69 74 65 |mouse%,item%:ite| 000026f0 6d 25 3d 21 70 6f 6c 6c 25 2b 31 0d 0d 8e 33 c8 |m%=!poll%+1...3.| 00002700 99 20 22 58 57 69 6d 70 5f 47 65 74 50 6f 69 6e |. "XWimp_GetPoin| 00002710 74 65 72 49 6e 66 6f 22 2c 2c 70 6f 6c 6c 25 3a |terInfo",,poll%:| 00002720 6d 6f 75 73 65 25 3d 70 6f 6c 6c 25 21 38 0d 0d |mouse%=poll%!8..| 00002730 98 0e c8 8e 20 69 74 65 6d 25 20 ca 0d 0d a2 2d |.... item% ....-| 00002740 20 20 20 c9 20 6e 75 6d 69 74 65 6d 73 25 3a 71 | . numitems%:q| 00002750 75 69 74 25 3d b9 3a f4 20 4c 61 73 74 20 49 74 |uit%=.:. Last It| 00002760 65 6d 20 3d 20 51 75 69 74 0d 0d ac 05 cb 0d 0d |em = Quit.......| 00002770 b6 1b e7 20 6d 6f 75 73 65 25 3d 31 3a f2 73 68 |... mouse%=1:.sh| 00002780 6f 77 6f 6c 64 6d 65 6e 75 0d 0d c0 05 e1 0d 0d |owoldmenu.......| 00002790 fc 04 0d 0e 06 11 dd f2 77 69 6d 70 6d 65 73 73 |........wimpmess| 000027a0 61 67 65 0d 0e 10 11 c8 8e 20 70 6f 6c 6c 25 21 |age...... poll%!| 000027b0 31 36 20 ca 0d 0e 1a 45 20 20 20 c9 20 20 20 20 |16 ....E . | 000027c0 20 20 30 3a 71 75 69 74 25 3d b9 3a f4 20 53 68 | 0:quit%=.:. Sh| 000027d0 75 74 20 64 6f 77 6e 20 28 44 65 73 6b 74 6f 70 |ut down (Desktop| 000027e0 20 45 78 69 74 2c 20 54 61 73 6b 20 4d 61 6e 61 | Exit, Task Mana| 000027f0 67 65 72 20 51 75 69 74 29 0d 0e 24 19 20 20 20 |ger Quit)..$. | 00002800 c9 20 26 34 30 30 43 32 3a f2 61 70 70 73 74 61 |. &400C2:.appsta| 00002810 72 74 0d 0e 2e 05 cb 0d 0e 38 05 e1 0d 0e 42 04 |rt.......8....B.| 00002820 0d 0e 4c 0e dd f2 61 70 70 73 74 61 72 74 0d 0e |..L...appstart..| 00002830 56 4a f4 20 55 6e 6c 69 6b 65 2c 20 61 68 65 6d |VJ. Unlike, ahem| 00002840 2c 20 63 65 72 74 61 69 6e 20 41 63 6f 72 6e 20 |, certain Acorn | 00002850 61 70 70 6c 69 63 61 74 69 6f 6e 73 20 77 65 20 |applications we | 00002860 63 6f 75 6c 64 20 6d 65 6e 74 69 6f 6e 2c 20 69 |could mention, i| 00002870 74 20 72 65 61 6c 6c 79 0d 0e 60 46 f4 20 69 73 |t really..`F. is| 00002880 20 6e 69 63 65 20 74 6f 20 6d 61 6b 65 20 73 75 | nice to make su| 00002890 72 65 20 6f 6e 6c 79 20 6f 6e 65 20 69 6e 76 6f |re only one invo| 000028a0 63 61 74 69 6f 6e 20 6f 66 20 74 68 65 20 70 72 |cation of the pr| 000028b0 6f 67 72 61 6d 20 68 61 73 20 62 65 65 6e 0d 0e |ogram has been..| 000028c0 6a 43 f4 20 61 63 74 69 76 61 74 65 64 20 2d 20 |jC. activated - | 000028d0 74 68 69 73 20 69 73 20 64 6f 6e 65 20 62 79 20 |this is done by | 000028e0 63 68 65 63 6b 69 6e 67 20 61 20 6e 65 77 20 74 |checking a new t| 000028f0 61 73 6b 27 73 20 6e 61 6d 65 2f 68 61 6e 64 6c |ask's name/handl| 00002900 65 0d 0e 74 11 ea 20 41 25 2c 42 25 2c 73 61 6d |e..t.. A%,B%,sam| 00002910 65 25 0d 0e 7e 16 e7 20 70 6f 6c 6c 25 21 34 3c |e%..~.. poll%!4<| 00002920 3e 74 61 73 6b 25 20 8c 0d 0e 88 18 20 20 20 41 |>task% ..... A| 00002930 25 3d 70 6f 6c 6c 25 2b 32 38 3a 42 25 3d 2d 31 |%=poll%+28:B%=-1| 00002940 0d 0e 92 0e 20 20 20 e7 20 3f 41 25 20 8c 0d 0e |.... . ?A% ...| 00002950 9c 0b 20 20 20 20 20 20 f5 0d 0e a6 34 20 20 20 |.. ....4 | 00002960 20 20 20 20 20 20 42 25 2b 3d 31 3a 73 61 6d 65 | B%+=1:same| 00002970 25 3d 28 41 25 3f 42 25 3d 97 28 c1 70 72 6f 67 |%=(A%?B%=.(.prog| 00002980 24 2b 62 6c 24 2c 42 25 2b 31 29 29 29 0d 0e b0 |$+bl$,B%+1)))...| 00002990 1d 20 20 20 20 20 20 fd 20 41 25 3f 42 25 3d 30 |. . A%?B%=0| 000029a0 20 84 20 ac 20 73 61 6d 65 25 0d 0e ba 19 20 20 | . . same%.... | 000029b0 20 20 20 20 e7 20 73 61 6d 65 25 3a 71 75 69 74 | . same%:quit| 000029c0 25 3d b9 0d 0e c4 08 20 20 20 cc 0d 0e ce 1f 20 |%=..... ..... | 000029d0 20 20 20 20 20 f2 73 63 61 6e 6d 6f 64 75 6c 65 | .scanmodule| 000029e0 73 28 70 6f 6c 6c 25 21 34 29 0d 0e d8 08 20 20 |s(poll%!4).... | 000029f0 20 cd 0d 0e e2 05 cd 0d 0e ec 05 e1 0d 0e f6 04 | ...............| 00002a00 0d 0f 00 1a dd f2 70 75 74 64 61 74 61 28 69 63 |......putdata(ic| 00002a10 6f 6e 25 2c 6d 65 73 73 24 29 0d 0f 0a 2d f4 20 |on%,mess$)...-. | 00002a20 43 68 61 6e 67 65 20 69 63 6f 6e 20 27 69 63 6f |Change icon 'ico| 00002a30 6e 25 27 20 74 6f 20 74 68 65 20 73 74 72 69 6e |n%' to the strin| 00002a40 67 20 6d 65 73 73 24 0d 0f 14 3b f4 20 4e 6f 74 |g mess$...;. Not| 00002a50 65 20 74 68 61 74 20 74 68 69 73 20 61 73 73 75 |e that this assu| 00002a60 6d 65 73 20 61 6e 20 69 6e 64 69 72 65 63 74 65 |mes an indirecte| 00002a70 64 20 69 63 6f 6e 20 6f 66 20 63 6f 75 72 73 65 |d icon of course| 00002a80 20 21 0d 0f 1e 2b 21 69 63 6f 6e 64 61 74 61 25 | !...+!icondata%| 00002a90 3d 76 6b 69 6c 6c 68 61 6e 64 25 3a 69 63 6f 6e |=vkillhand%:icon| 00002aa0 64 61 74 61 25 21 34 3d 69 63 6f 6e 25 0d 0f 28 |data%!4=icon%..(| 00002ab0 26 c8 99 20 22 58 57 69 6d 70 5f 47 65 74 49 63 |&.. "XWimp_GetIc| 00002ac0 6f 6e 53 74 61 74 65 22 2c 2c 69 63 6f 6e 64 61 |onState",,iconda| 00002ad0 74 61 25 0d 0f 32 19 24 28 69 63 6f 6e 64 61 74 |ta%..2.$(icondat| 00002ae0 61 25 21 32 38 29 3d 6d 65 73 73 24 0d 0f 3c 58 |a%!28)=mess$..<X| 00002af0 c8 99 20 22 58 57 69 6d 70 5f 46 6f 72 63 65 52 |.. "XWimp_ForceR| 00002b00 65 64 72 61 77 22 2c 76 6b 69 6c 6c 68 61 6e 64 |edraw",vkillhand| 00002b10 25 2c 69 63 6f 6e 64 61 74 61 25 21 38 2c 69 63 |%,icondata%!8,ic| 00002b20 6f 6e 64 61 74 61 25 21 31 32 2c 69 63 6f 6e 64 |ondata%!12,icond| 00002b30 61 74 61 25 21 31 36 2c 69 63 6f 6e 64 61 74 61 |ata%!16,icondata| 00002b40 25 21 32 30 0d 0f 46 05 e1 0d 0f 50 04 0d 0f 5a |%!20..F....P...Z| 00002b50 1a dd a4 67 65 74 64 61 74 61 28 77 69 6e 64 25 |...getdata(wind%| 00002b60 2c 69 63 6f 6e 25 29 0d 0f 64 36 f4 20 52 65 61 |,icon%)..d6. Rea| 00002b70 64 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20 69 |d the value of i| 00002b80 63 6f 6e 20 27 69 63 6f 6e 25 27 20 69 6e 20 77 |con 'icon%' in w| 00002b90 69 6e 64 6f 77 20 27 77 69 6e 64 25 27 0d 0f 6e |indow 'wind%'..n| 00002ba0 3b f4 20 4e 6f 74 65 20 74 68 61 74 20 74 68 69 |;. Note that thi| 00002bb0 73 20 61 73 73 75 6d 65 73 20 61 6e 20 69 6e 64 |s assumes an ind| 00002bc0 69 72 65 63 74 65 64 20 69 63 6f 6e 20 6f 66 20 |irected icon of | 00002bd0 63 6f 75 72 73 65 20 21 0d 0f 78 26 21 69 63 6f |course !..x&!ico| 00002be0 6e 64 61 74 61 25 3d 77 69 6e 64 25 3a 69 63 6f |ndata%=wind%:ico| 00002bf0 6e 64 61 74 61 25 21 34 3d 69 63 6f 6e 25 0d 0f |ndata%!4=icon%..| 00002c00 82 26 c8 99 20 22 58 57 69 6d 70 5f 47 65 74 49 |.&.. "XWimp_GetI| 00002c10 63 6f 6e 53 74 61 74 65 22 2c 2c 69 63 6f 6e 64 |conState",,icond| 00002c20 61 74 61 25 0d 0f 8c 14 3d 24 28 69 63 6f 6e 64 |ata%....=$(icond| 00002c30 61 74 61 25 21 32 38 29 0d 0f 96 04 0d 0f a0 0e |ata%!28)........| 00002c40 dd f2 6d 61 6b 65 69 63 6f 6e 0d 0f aa 3f 50 25 |..makeicon...?P%| 00002c50 3d 69 63 6f 6e 25 3a f4 20 55 73 65 20 62 75 69 |=icon%:. Use bui| 00002c60 6c 74 20 69 6e 20 61 73 73 65 6d 62 6c 65 72 20 |lt in assembler | 00002c70 2d 20 65 61 73 69 65 72 20 74 6f 20 73 65 65 20 |- easier to see | 00002c80 73 74 72 75 63 74 75 72 65 0d 0f b4 0a 5b 4f 50 |structure....[OP| 00002c90 54 20 30 0d 0f be 45 20 20 20 20 20 20 20 20 20 |T 0...E | 00002ca0 20 20 20 20 20 20 20 45 51 55 44 20 20 20 20 69 | EQUD i| 00002cb0 63 6f 6e 62 61 72 74 79 70 65 25 20 20 20 20 3b |conbartype% ;| 00002cc0 20 49 63 6f 6e 20 62 61 72 20 27 75 74 69 6c 69 | Icon bar 'utili| 00002cd0 74 79 27 20 66 6c 61 67 0d 0f c8 3b 20 20 20 20 |ty' flag...; | 00002ce0 20 20 20 20 20 20 20 20 20 20 20 20 45 51 55 44 | EQUD| 00002cf0 20 20 20 20 30 20 20 20 20 20 20 20 20 20 20 20 | 0 | 00002d00 20 20 20 20 3b 20 42 6f 74 74 6f 6d 20 6c 65 66 | ; Bottom lef| 00002d10 74 20 58 0d 0f d2 3b 20 20 20 20 20 20 20 20 20 |t X...; | 00002d20 20 20 20 20 20 20 20 45 51 55 44 20 20 20 20 30 | EQUD 0| 00002d30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 3b | ;| 00002d40 20 42 6f 74 74 6f 6d 20 6c 65 66 74 20 59 0d 0f | Bottom left Y..| 00002d50 dc 39 20 20 20 20 20 20 20 20 20 20 20 20 20 20 |.9 | 00002d60 20 20 45 51 55 44 20 20 20 20 36 39 20 20 20 20 | EQUD 69 | 00002d70 20 20 20 20 20 20 20 20 20 20 3b 20 54 6f 70 20 | ; Top | 00002d80 72 69 67 68 74 20 58 0d 0f e6 39 20 20 20 20 20 |right X...9 | 00002d90 20 20 20 20 20 20 20 20 20 20 20 45 51 55 44 20 | EQUD | 00002da0 20 20 20 36 38 20 20 20 20 20 20 20 20 20 20 20 | 68 | 00002db0 20 20 20 3b 20 54 6f 70 20 72 69 67 68 74 20 59 | ; Top right Y| 00002dc0 0d 0f f0 3e 20 20 20 20 20 20 20 20 20 20 20 20 |...> | 00002dd0 20 20 20 20 45 51 55 42 20 20 20 20 25 30 30 30 | EQUB %000| 00002de0 30 30 30 31 30 20 20 20 20 20 20 20 3b 20 49 63 |00010 ; Ic| 00002df0 6f 6e 20 69 73 20 61 20 73 70 72 69 74 65 0d 0f |on is a sprite..| 00002e00 fa 47 20 20 20 20 20 20 20 20 20 20 20 20 20 20 |.G | 00002e10 20 20 45 51 55 42 20 20 20 20 25 30 30 31 31 30 | EQUB %00110| 00002e20 30 30 31 20 20 20 20 20 20 20 3b 20 43 6c 69 63 |001 ; Clic| 00002e30 6b 20 6e 6f 74 69 66 69 65 73 2f 49 6e 64 69 72 |k notifies/Indir| 00002e40 65 63 74 65 64 0d 10 04 48 20 20 20 20 20 20 20 |ected...H | 00002e50 20 20 20 20 20 20 20 20 20 45 51 55 42 20 20 20 | EQUB | 00002e60 20 25 30 30 30 30 30 30 30 30 20 20 20 20 20 20 | %00000000 | 00002e70 20 3b 20 4e 6f 74 68 69 6e 67 20 73 70 65 63 69 | ; Nothing speci| 00002e80 61 6c 20 61 62 6f 75 74 20 69 63 6f 6e 0d 10 0e |al about icon...| 00002e90 46 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 |F | 00002ea0 20 45 51 55 42 20 20 20 20 25 30 30 30 30 30 30 | EQUB %000000| 00002eb0 30 31 20 20 20 20 20 20 20 3b 20 46 6f 72 65 63 |01 ; Forec| 00002ec0 6f 6c 20 3d 20 31 2c 20 42 61 63 6b 63 6f 6c 20 |ol = 1, Backcol | 00002ed0 3d 20 30 0d 10 18 44 2e 70 6f 6b 65 73 70 6e 61 |= 0...D.pokespna| 00002ee0 6d 65 20 20 20 20 20 45 51 55 44 20 20 20 20 70 |me EQUD p| 00002ef0 6f 6b 65 73 70 6e 61 6d 65 2b 31 32 20 20 20 3b |okespname+12 ;| 00002f00 20 50 6f 69 6e 74 65 72 20 74 6f 20 73 70 72 69 | Pointer to spri| 00002f10 74 65 20 6e 61 6d 65 0d 10 22 45 20 20 20 20 20 |te name.."E | 00002f20 20 20 20 20 20 20 20 20 20 20 20 45 51 55 44 20 | EQUD | 00002f30 20 20 20 31 20 20 20 20 20 20 20 20 20 20 20 20 | 1 | 00002f40 20 20 20 3b 20 50 6f 69 6e 74 65 72 20 74 6f 20 | ; Pointer to | 00002f50 57 49 4d 50 20 73 70 72 69 74 65 73 0d 10 2c 43 |WIMP sprites..,C| 00002f60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | | 00002f70 45 51 55 44 20 20 20 20 31 32 20 20 20 20 20 20 |EQUD 12 | 00002f80 20 20 20 20 20 20 20 20 3b 20 4c 65 6e 67 74 68 | ; Length| 00002f90 20 6f 66 20 73 70 72 69 74 65 20 6e 61 6d 65 0d | of sprite name.| 00002fa0 10 36 3c 2e 73 70 72 69 74 65 6e 61 6d 65 20 20 |.6<.spritename | 00002fb0 20 20 20 45 51 55 53 20 20 20 20 22 21 76 6b 69 | EQUS "!vki| 00002fc0 6c 6c 65 72 22 2b c4 34 2c 62 6c 24 29 20 3b 20 |ller"+.4,bl$) ; | 00002fd0 53 70 72 69 74 65 20 6e 61 6d 65 0d 10 40 05 5d |Sprite name..@.]| 00002fe0 0d 10 4a 2c c8 99 20 22 58 57 69 6d 70 5f 43 72 |..J,.. "XWimp_Cr| 00002ff0 65 61 74 65 49 63 6f 6e 22 2c 2c 69 63 6f 6e 25 |eateIcon",,icon%| 00003000 20 b8 20 69 63 6f 6e 68 61 6e 64 25 0d 10 54 05 | . iconhand%..T.| 00003010 e1 0d 10 5e 04 0d 10 68 0e dd f2 6d 61 6b 65 6d |...^...h...makem| 00003020 65 6e 75 0d 10 72 28 6e 75 6d 69 74 65 6d 73 25 |enu..r(numitems%| 00003030 3d 32 3a f4 20 43 68 61 6e 67 65 20 69 66 20 79 |=2:. Change if y| 00003040 6f 75 20 61 64 64 20 6d 6f 72 65 0d 10 7c 1c 50 |ou add more..|.P| 00003050 25 3d 6d 65 6e 75 25 3a f4 20 55 73 65 20 61 73 |%=menu%:. Use as| 00003060 73 65 6d 62 6c 65 72 0d 10 86 0a 5b 4f 50 54 20 |sembler....[OPT | 00003070 30 0d 10 90 40 20 20 20 20 20 20 20 20 20 20 20 |0...@ | 00003080 20 20 20 20 20 45 51 55 53 20 20 20 20 70 72 6f | EQUS pro| 00003090 67 24 2b c4 31 32 2d a9 28 70 72 6f 67 24 29 2c |g$+.12-.(prog$),| 000030a0 62 6c 24 29 20 3b 20 4d 65 6e 75 20 74 69 74 6c |bl$) ; Menu titl| 000030b0 65 0d 10 9a 37 20 20 20 20 20 20 20 20 20 20 20 |e...7 | 000030c0 20 20 20 20 20 45 51 55 42 20 20 20 20 37 20 20 | EQUB 7 | 000030d0 20 20 20 20 20 3b 20 46 6f 72 65 67 72 6f 75 6e | ; Foregroun| 000030e0 64 20 63 6f 6c 6f 75 72 0d 10 a4 37 20 20 20 20 |d colour...7 | 000030f0 20 20 20 20 20 20 20 20 20 20 20 20 45 51 55 42 | EQUB| 00003100 20 20 20 20 32 20 20 20 20 20 20 20 3b 20 42 61 | 2 ; Ba| 00003110 63 6b 67 72 6f 75 6e 64 20 63 6f 6c 6f 75 72 0d |ckground colour.| 00003120 10 ae 39 20 20 20 20 20 20 20 20 20 20 20 20 20 |..9 | 00003130 20 20 20 45 51 55 42 20 20 20 20 37 20 20 20 20 | EQUB 7 | 00003140 20 20 20 3b 20 57 6f 72 6b 20 66 6f 72 65 67 72 | ; Work foregr| 00003150 64 20 63 6f 6c 6f 75 72 0d 10 b8 39 20 20 20 20 |d colour...9 | 00003160 20 20 20 20 20 20 20 20 20 20 20 20 45 51 55 42 | EQUB| 00003170 20 20 20 20 30 20 20 20 20 20 20 20 3b 20 57 6f | 0 ; Wo| 00003180 72 6b 20 62 61 63 6b 67 72 64 20 63 6f 6c 6f 75 |rk backgrd colou| 00003190 72 0d 10 c2 31 20 20 20 20 20 20 20 20 20 20 20 |r...1 | 000031a0 20 20 20 20 20 45 51 55 44 20 20 20 20 31 34 38 | EQUD 148| 000031b0 20 20 20 20 20 3b 20 54 6f 74 61 6c 20 77 69 64 | ; Total wid| 000031c0 74 68 0d 10 cc 32 2e 73 70 61 63 69 6e 67 20 20 |th...2.spacing | 000031d0 20 20 20 20 20 20 45 51 55 44 20 20 20 20 34 34 | EQUD 44| 000031e0 20 20 20 20 20 20 3b 20 54 6f 74 61 6c 20 68 65 | ; Total he| 000031f0 69 67 68 74 0d 10 d6 32 20 20 20 20 20 20 20 20 |ight...2 | 00003200 20 20 20 20 20 20 20 20 45 51 55 44 20 20 20 20 | EQUD | 00003210 30 20 20 20 20 20 20 20 3b 20 4c 69 6e 65 20 73 |0 ; Line s| 00003220 70 61 63 69 6e 67 0d 10 e0 0d 3b 20 49 74 65 6d |pacing....; Item| 00003230 20 23 31 0d 10 ea 35 20 20 20 20 20 20 20 20 20 | #1...5 | 00003240 20 20 20 20 20 20 20 45 51 55 44 20 20 20 20 30 | EQUD 0| 00003250 20 20 20 20 20 20 20 3b 20 4e 6f 74 68 69 6e 67 | ; Nothing| 00003260 20 73 70 65 63 69 61 6c 0d 10 f4 41 2e 73 75 62 | special...A.sub| 00003270 6d 65 6e 75 70 6f 6b 65 20 20 20 20 45 51 55 44 |menupoke EQUD| 00003280 20 20 20 20 30 20 20 20 20 20 20 20 3b 20 53 75 | 0 ; Su| 00003290 62 2d 6d 65 6e 75 20 61 64 64 72 20 70 6f 6b 65 |b-menu addr poke| 000032a0 64 20 69 6e 20 68 65 72 65 0d 10 fe 3e 20 20 20 |d in here...> | 000032b0 20 20 20 20 20 20 20 20 20 20 20 20 20 45 51 55 | EQU| 000032c0 44 20 20 20 20 28 37 3c 3c 32 34 29 20 84 20 31 |D (7<<24) . 1| 000032d0 20 3b 20 49 74 65 6d 20 69 73 20 74 65 78 74 20 | ; Item is text | 000032e0 26 20 62 6c 61 63 6b 0d 11 08 2d 20 20 20 20 20 |& black...- | 000032f0 20 20 20 20 20 20 20 20 20 20 20 45 51 55 53 20 | EQUS | 00003300 20 20 20 22 49 6e 66 6f 20 20 20 20 20 20 20 22 | "Info "| 00003310 2b 62 6c 24 0d 11 12 0d 3b 20 49 74 65 6d 20 23 |+bl$....; Item #| 00003320 32 0d 11 1c 34 20 20 20 20 20 20 20 20 20 20 20 |2...4 | 00003330 20 20 20 20 20 45 51 55 44 20 20 20 20 26 38 30 | EQUD &80| 00003340 20 20 20 20 20 3b 20 4c 61 73 74 20 6d 65 6e 75 | ; Last menu| 00003350 20 69 74 65 6d 0d 11 26 31 20 20 20 20 20 20 20 | item..&1 | 00003360 20 20 20 20 20 20 20 20 20 45 51 55 44 20 20 20 | EQUD | 00003370 20 2d 31 20 20 20 20 20 20 3b 20 4e 6f 20 73 75 | -1 ; No su| 00003380 62 2d 6d 65 6e 75 0d 11 30 3e 20 20 20 20 20 20 |b-menu..0> | 00003390 20 20 20 20 20 20 20 20 20 20 45 51 55 44 20 20 | EQUD | 000033a0 20 20 28 37 3c 3c 32 34 29 20 84 20 31 20 3b 20 | (7<<24) . 1 ; | 000033b0 49 74 65 6d 20 69 73 20 74 65 78 74 20 26 20 62 |Item is text & b| 000033c0 6c 61 63 6b 0d 11 3a 2d 20 20 20 20 20 20 20 20 |lack..:- | 000033d0 20 20 20 20 20 20 20 20 45 51 55 53 20 20 20 20 | EQUS | 000033e0 22 51 75 69 74 20 20 20 20 20 20 20 22 2b 62 6c |"Quit "+bl| 000033f0 24 0d 11 44 05 5d 0d 11 4e 05 e1 0d 11 58 04 0d |$..D.]..N....X..| 00003400 11 62 12 dd f2 67 65 74 74 65 6d 70 6c 61 74 65 |.b...gettemplate| 00003410 73 0d 11 6c 13 ea 20 66 6c 61 67 73 25 2c 64 75 |s..l.. flags%,du| 00003420 6d 6d 79 25 0d 11 76 3d c8 99 20 22 58 57 69 6d |mmy%..v=.. "XWim| 00003430 70 5f 4f 70 65 6e 54 65 6d 70 6c 61 74 65 22 2c |p_OpenTemplate",| 00003440 2c 76 6b 69 6c 6c 76 61 72 24 2b 22 2e 54 65 6d |,vkillvar$+".Tem| 00003450 70 6c 61 74 65 73 22 20 b8 20 3b 66 6c 61 67 73 |plates" . ;flags| 00003460 25 0d 11 80 3c e7 20 66 6c 61 67 73 25 20 80 20 |%...<. flags% . | 00003470 31 3a f2 66 61 74 61 6c 28 22 4d 69 73 73 69 6e |1:.fatal("Missin| 00003480 67 20 54 65 6d 70 6c 61 74 65 73 20 66 69 6c 65 |g Templates file| 00003490 20 66 6f 72 20 22 2b 70 72 6f 67 24 29 0d 11 8a | for "+prog$)...| 000034a0 36 76 6b 69 6c 6c 68 61 6e 64 25 3d a4 6c 6f 61 |6vkillhand%=.loa| 000034b0 64 74 65 6d 70 6c 61 74 65 28 76 6b 69 6c 6c 77 |dtemplate(vkillw| 000034c0 69 6e 64 25 2c 22 56 4b 69 6c 6c 57 69 6e 64 6f |ind%,"VKillWindo| 000034d0 77 22 29 0d 11 94 30 21 73 75 62 6d 65 6e 75 70 |w")...0!submenup| 000034e0 6f 6b 65 3d a4 6c 6f 61 64 74 65 6d 70 6c 61 74 |oke=.loadtemplat| 000034f0 65 28 69 6e 66 6f 77 69 6e 64 25 2c 22 49 6e 66 |e(infowind%,"Inf| 00003500 6f 22 29 0d 11 9e 1c c8 99 20 22 58 57 69 6d 70 |o")...... "XWimp| 00003510 5f 43 6c 6f 73 65 54 65 6d 70 6c 61 74 65 22 0d |_CloseTemplate".| 00003520 11 a8 05 e1 0d 11 b2 04 0d 11 bc 1f dd a4 6c 6f |..............lo| 00003530 61 64 74 65 6d 70 6c 61 74 65 28 61 64 64 72 25 |adtemplate(addr%| 00003540 2c 77 69 6e 64 24 29 0d 11 c6 47 f4 20 4e 6f 74 |,wind$)...G. Not| 00003550 65 20 74 68 65 20 2b 34 20 6f 6e 20 74 68 65 20 |e the +4 on the | 00003560 61 64 64 72 65 73 73 20 2d 20 74 68 69 73 20 61 |address - this a| 00003570 6c 6c 6f 77 73 20 74 68 65 20 70 6f 6b 69 6e 67 |llows the poking| 00003580 20 6f 66 20 74 68 65 20 68 61 6e 64 6c 65 0d 11 | of the handle..| 00003590 d0 18 ea 20 77 69 6e 64 68 61 6e 64 25 2c 77 69 |... windhand%,wi| 000035a0 6e 64 70 74 72 25 0d 11 da 56 c8 99 20 22 58 57 |ndptr%...V.. "XW| 000035b0 69 6d 70 5f 4c 6f 61 64 54 65 6d 70 6c 61 74 65 |imp_LoadTemplate| 000035c0 22 2c 2c 61 64 64 72 25 2b 34 2c 61 64 64 72 25 |",,addr%+4,addr%| 000035d0 2b 26 37 30 30 2c 61 64 64 72 25 2b 26 45 30 30 |+&700,addr%+&E00| 000035e0 2c 2d 31 2c 77 69 6e 64 24 2c 30 20 b8 20 2c 2c |,-1,wind$,0 . ,,| 000035f0 2c 2c 2c 2c 77 69 6e 64 70 74 72 25 0d 11 e4 53 |,,,,windptr%...S| 00003600 e7 20 77 69 6e 64 70 74 72 25 3d 30 3a f2 66 61 |. windptr%=0:.fa| 00003610 74 61 6c 28 22 4d 69 73 73 69 6e 67 20 22 2b 77 |tal("Missing "+w| 00003620 69 6e 64 24 2b 22 20 77 69 6e 64 6f 77 20 66 72 |ind$+" window fr| 00003630 6f 6d 20 22 2b 70 72 6f 67 24 2b 22 27 73 20 54 |om "+prog$+"'s T| 00003640 65 6d 70 6c 61 74 65 73 20 66 69 6c 65 22 29 0d |emplates file").| 00003650 11 ee 30 c8 99 20 22 58 57 69 6d 70 5f 43 72 65 |..0.. "XWimp_Cre| 00003660 61 74 65 57 69 6e 64 6f 77 22 2c 2c 61 64 64 72 |ateWindow",,addr| 00003670 25 2b 34 20 b8 20 77 69 6e 64 68 61 6e 64 25 0d |%+4 . windhand%.| 00003680 11 f8 48 21 61 64 64 72 25 3d 77 69 6e 64 68 61 |..H!addr%=windha| 00003690 6e 64 25 3a f4 20 53 74 6f 72 65 20 77 69 6e 64 |nd%:. Store wind| 000036a0 6f 77 20 68 61 6e 64 6c 65 20 62 65 63 61 75 73 |ow handle becaus| 000036b0 65 20 6e 65 65 64 65 64 20 62 79 20 6c 61 74 65 |e needed by late| 000036c0 72 20 63 61 6c 6c 73 0d 12 02 0e 3d 77 69 6e 64 |r calls....=wind| 000036d0 68 61 6e 64 25 0d 12 0c 04 0d 12 16 11 dd f2 73 |hand%..........s| 000036e0 79 73 74 65 6d 65 72 72 6f 72 0d 12 20 41 f4 20 |ystemerror.. A. | 000036f0 57 68 79 20 64 6f 20 49 20 6e 65 65 64 20 74 68 |Why do I need th| 00003700 69 73 20 70 72 6f 63 20 3f 20 57 65 6c 6c 2c 20 |is proc ? Well, | 00003710 74 68 65 20 57 69 6d 70 20 64 6f 65 73 6e 27 74 |the Wimp doesn't| 00003720 20 72 65 70 6f 72 74 20 74 68 65 0d 12 2a 29 f4 | report the..*).| 00003730 20 6f 66 66 65 6e 64 69 6e 67 20 6c 69 6e 65 20 | offending line | 00003740 6e 75 6d 62 65 72 20 6f 66 20 61 6e 20 65 72 72 |number of an err| 00003750 6f 72 20 21 0d 12 34 0a ea 20 65 72 72 24 0d 12 |or !..4.. err$..| 00003760 3e 27 e7 20 9f 3a 65 72 72 24 3d 22 20 61 74 20 |>'. .:err$=" at | 00003770 6c 69 6e 65 20 22 2b c3 28 9e 29 20 8b 20 65 72 |line "+.(.) . er| 00003780 72 24 3d 22 22 0d 12 48 09 ee 20 85 20 87 0d 12 |r$=""..H.. . ...| 00003790 52 13 f2 66 61 74 61 6c 28 f6 24 2b 65 72 72 24 |R..fatal(.$+err$| 000037a0 29 0d 12 5c 05 e1 0d 12 66 04 0d 12 70 13 dd f2 |)..\....f...p...| 000037b0 66 61 74 61 6c 28 65 72 72 6f 72 24 29 0d 12 7a |fatal(error$)..z| 000037c0 16 ff 22 45 72 72 6f 72 20 30 20 22 2b 65 72 72 |.."Error 0 "+err| 000037d0 6f 72 24 0d 12 84 05 e1 0d 12 8e 04 0d 12 98 0c |or$.............| 000037e0 dd f2 6e 65 78 74 66 73 0d 12 a2 3c ea 20 66 73 |..nextfs...<. fs| 000037f0 6e 61 6d 65 25 2c 6f 6c 64 66 73 79 73 24 2c 73 |name%,oldfsys$,s| 00003800 77 69 24 2c 73 77 69 6e 61 6d 65 24 2c 6e 75 6d |wi$,swiname$,num| 00003810 66 6c 6f 70 25 2c 6e 75 6d 68 61 72 64 25 2c 6c |flop%,numhard%,l| 00003820 6f 6f 70 25 0d 12 ac 1b 6f 6c 64 66 73 79 73 24 |oop%....oldfsys$| 00003830 3d 66 73 79 73 24 3a 66 73 79 73 24 3d 22 22 0d |=fsys$:fsys$="".| 00003840 12 b6 05 f5 0d 12 c0 2c 20 20 20 66 73 79 73 6e |......., fsysn| 00003850 75 6d 25 2b 3d 31 3a e7 20 66 73 79 73 6e 75 6d |um%+=1:. fsysnum| 00003860 25 3e 32 35 35 3a 66 73 79 73 6e 75 6d 25 3d 31 |%>255:fsysnum%=1| 00003870 0d 12 ca 3b 20 20 20 c8 99 20 22 58 4f 53 5f 46 |...; .. "XOS_F| 00003880 53 43 6f 6e 74 72 6f 6c 22 2c 33 33 2c 66 73 79 |SControl",33,fsy| 00003890 73 6e 75 6d 25 2c 66 62 75 66 66 25 2c 31 32 20 |snum%,fbuff%,12 | 000038a0 b8 20 2c 2c 66 73 6e 61 6d 65 25 0d 12 d4 13 20 |. ,,fsname%.... | 000038b0 20 20 e7 20 3f 66 73 6e 61 6d 65 25 20 8c 0d 12 | . ?fsname% ...| 000038c0 de 23 20 20 20 20 20 20 66 73 79 73 24 3d a4 67 |.# fsys$=.g| 000038d0 65 74 73 74 72 69 6e 67 28 66 73 6e 61 6d 65 25 |etstring(fsname%| 000038e0 29 0d 12 e8 14 20 20 20 20 20 20 c8 8e 20 66 73 |).... .. fs| 000038f0 79 73 24 20 ca 0d 12 f2 6e 20 20 20 20 20 20 c9 |ys$ ....n .| 00003900 20 22 6e 75 6c 6c 22 2c 22 70 72 69 6e 74 65 72 | "null","printer| 00003910 22 2c 22 73 65 72 69 61 6c 22 2c 22 76 64 75 22 |","serial","vdu"| 00003920 2c 22 72 61 77 76 64 75 22 2c 22 6b 62 64 22 2c |,"rawvdu","kbd",| 00003930 22 72 61 77 6b 62 64 22 2c 22 64 65 73 6b 66 73 |"rawkbd","deskfs| 00003940 22 2c 22 6d 73 64 6f 73 22 3a 66 73 79 73 24 3d |","msdos":fsys$=| 00003950 22 22 3a f4 20 4e 6f 74 20 69 6e 66 65 63 74 61 |"":. Not infecta| 00003960 62 6c 65 0d 12 fc 0b 20 20 20 20 20 20 cb 0d 13 |ble.... ...| 00003970 06 08 20 20 20 cd 0d 13 10 0f fd 20 66 73 79 73 |.. ...... fsys| 00003980 24 3c 3e 22 22 0d 13 1a 17 e7 20 6f 6c 64 66 73 |$<>""..... oldfs| 00003990 79 73 24 3c 3e 66 73 79 73 24 20 8c 0d 13 24 11 |ys$<>fsys$ ...$.| 000039a0 20 20 20 c8 8e 20 66 73 79 73 24 20 ca 0d 13 2e | .. fsys$ ....| 000039b0 1f 20 20 20 c9 20 22 61 64 66 73 22 3a 73 77 69 |. . "adfs":swi| 000039c0 6e 61 6d 65 24 3d 22 41 44 46 53 22 0d 13 38 31 |name$="ADFS"..81| 000039d0 20 20 20 c9 20 22 6e 65 74 22 3a 73 77 69 6e 61 | . "net":swina| 000039e0 6d 65 24 3d 22 4e 65 74 46 53 22 3a f4 20 49 73 |me$="NetFS":. Is| 000039f0 20 74 68 69 73 20 72 69 67 68 74 20 3f 0d 13 42 | this right ?..B| 00003a00 17 20 20 20 7f 20 73 77 69 6e 61 6d 65 24 3d 66 |. . swiname$=f| 00003a10 73 79 73 24 0d 13 4c 08 20 20 20 cb 0d 13 56 22 |sys$..L. ...V"| 00003a20 20 20 20 73 77 69 24 3d 22 58 22 2b 73 77 69 6e | swi$="X"+swin| 00003a30 61 6d 65 24 2b 22 5f 44 72 69 76 65 73 22 0d 13 |ame$+"_Drives"..| 00003a40 60 1a 20 20 20 e7 20 a4 63 68 65 63 6b 73 77 69 |`. . .checkswi| 00003a50 28 73 77 69 24 29 20 8c 0d 13 6a 2c 20 20 20 20 |(swi$) ...j, | 00003a60 20 20 c8 99 20 73 77 69 24 20 b8 20 64 72 69 76 | .. swi$ . driv| 00003a70 65 25 2c 6e 75 6d 66 6c 6f 70 25 2c 6e 75 6d 68 |e%,numflop%,numh| 00003a80 61 72 64 25 0d 13 74 47 20 20 20 20 20 20 e7 20 |ard%..tG . | 00003a90 64 72 69 76 65 25 3e 3d 6e 75 6d 66 6c 6f 70 25 |drive%>=numflop%| 00003aa0 20 80 20 6e 75 6d 68 61 72 64 25 3d 30 20 84 20 | . numhard%=0 . | 00003ab0 64 72 69 76 65 25 3e 3d 6e 75 6d 68 61 72 64 25 |drive%>=numhard%| 00003ac0 2b 34 3a 64 72 69 76 65 25 3d 30 0d 13 7e 08 20 |+4:drive%=0..~. | 00003ad0 20 20 cc 0d 13 88 28 20 20 20 20 20 20 6e 75 6d | ....( num| 00003ae0 66 6c 6f 70 25 3d 31 3a 6e 75 6d 68 61 72 64 25 |flop%=1:numhard%| 00003af0 3d 30 3a 64 72 69 76 65 25 3d 30 0d 13 92 08 20 |=0:drive%=0.... | 00003b00 20 20 cd 0d 13 9c 18 20 20 20 f2 70 75 74 64 61 | ..... .putda| 00003b10 74 61 28 37 2c 66 73 79 73 24 29 0d 13 a6 14 20 |ta(7,fsys$).... | 00003b20 20 20 e3 20 6c 6f 6f 70 25 3d 30 20 b8 20 37 0d | . loop%=0 . 7.| 00003b30 13 b0 65 20 20 20 20 20 20 f2 61 6c 6c 6f 77 64 |..e .allowd| 00003b40 72 69 76 65 28 6c 6f 6f 70 25 2c 28 6c 6f 6f 70 |rive(loop%,(loop| 00003b50 25 3c 34 20 80 20 6e 75 6d 66 6c 6f 70 25 3e 6c |%<4 . numflop%>l| 00003b60 6f 6f 70 25 29 20 84 20 28 6c 6f 6f 70 25 3e 33 |oop%) . (loop%>3| 00003b70 20 80 20 6e 75 6d 68 61 72 64 25 2b 34 3e 6c 6f | . numhard%+4>lo| 00003b80 6f 70 25 29 2c 28 6c 6f 6f 70 25 3d 64 72 69 76 |op%),(loop%=driv| 00003b90 65 25 29 29 0d 13 ba 08 20 20 20 ed 0d 13 c4 05 |e%)).... .....| 00003ba0 cd 0d 13 ce 05 e1 0d 13 d8 04 0d 13 e2 14 dd a4 |................| 00003bb0 63 68 65 63 6b 73 77 69 28 73 77 69 24 29 0d 13 |checkswi(swi$)..| 00003bc0 ec 11 ea 20 73 77 69 25 2c 66 6c 61 67 73 25 0d |... swi%,flags%.| 00003bd0 13 f6 34 c8 99 20 22 58 4f 53 5f 53 57 49 4e 75 |..4.. "XOS_SWINu| 00003be0 6d 62 65 72 46 72 6f 6d 53 74 72 69 6e 67 22 2c |mberFromString",| 00003bf0 2c 73 77 69 24 20 b8 20 73 77 69 25 3b 66 6c 61 |,swi$ . swi%;fla| 00003c00 67 73 25 0d 14 00 15 3d 28 28 66 6c 61 67 73 25 |gs%....=((flags%| 00003c10 20 80 20 31 29 3d 30 29 0d 14 0a 04 0d 14 14 22 | . 1)=0)......."| 00003c20 dd f2 68 61 63 6b 66 6c 61 67 73 28 69 63 6f 6e |..hackflags(icon| 00003c30 25 2c 65 6f 72 25 2c 63 6c 65 61 72 25 29 0d 14 |%,eor%,clear%)..| 00003c40 1e 19 21 69 63 6f 6e 64 61 74 61 25 3d 76 6b 69 |..!icondata%=vki| 00003c50 6c 6c 68 61 6e 64 25 0d 14 28 15 69 63 6f 6e 64 |llhand%..(.icond| 00003c60 61 74 61 25 21 34 3d 69 63 6f 6e 25 0d 14 32 14 |ata%!4=icon%..2.| 00003c70 69 63 6f 6e 64 61 74 61 25 21 38 3d 65 6f 72 25 |icondata%!8=eor%| 00003c80 0d 14 3c 17 69 63 6f 6e 64 61 74 61 25 21 31 32 |..<.icondata%!12| 00003c90 3d 63 6c 65 61 72 25 0d 14 46 26 c8 99 20 22 58 |=clear%..F&.. "X| 00003ca0 57 69 6d 70 5f 53 65 74 49 63 6f 6e 53 74 61 74 |Wimp_SetIconStat| 00003cb0 65 22 2c 2c 69 63 6f 6e 64 61 74 61 25 0d 14 50 |e",,icondata%..P| 00003cc0 05 e1 0d 14 5a 04 0d 14 64 19 dd f2 68 69 6c 69 |....Z...d...hili| 00003cd0 74 65 28 69 63 6f 6e 25 2c 62 6f 6f 6c 25 29 0d |te(icon%,bool%).| 00003ce0 14 6e 2e f2 68 61 63 6b 66 6c 61 67 73 28 69 63 |.n..hackflags(ic| 00003cf0 6f 6e 25 2c 28 28 2d 62 6f 6f 6c 25 29 3c 3c 32 |on%,((-bool%)<<2| 00003d00 31 29 2c 26 30 30 32 30 30 30 30 30 29 0d 14 78 |1),&00200000)..x| 00003d10 05 e1 0d 14 82 04 0d 14 8c 24 dd f2 61 6c 6c 6f |.........$..allo| 00003d20 77 64 72 69 76 65 28 64 72 76 25 2c 62 6f 6f 6c |wdrive(drv%,bool| 00003d30 25 2c 68 69 6c 69 74 65 25 29 0d 14 96 10 62 6f |%,hilite%)....bo| 00003d40 6f 6c 25 3d 2d 62 6f 6f 6c 25 0d 14 a0 4e f2 68 |ol%=-bool%...N.h| 00003d50 61 63 6b 66 6c 61 67 73 28 64 72 76 25 2b 38 2c |ackflags(drv%+8,| 00003d60 28 62 6f 6f 6c 25 3c 3c 31 36 29 2b 31 31 2a 28 |(bool%<<16)+11*(| 00003d70 62 6f 6f 6c 25 3c 3c 31 32 29 2b 28 28 31 35 2d |bool%<<12)+((15-| 00003d80 62 6f 6f 6c 25 2a 36 29 3c 3c 32 38 29 2c 26 46 |bool%*6)<<28),&F| 00003d90 30 31 46 46 30 30 30 29 0d 14 aa 1b f2 68 69 6c |01FF000).....hil| 00003da0 69 74 65 28 64 72 76 25 2b 38 2c 68 69 6c 69 74 |ite(drv%+8,hilit| 00003db0 65 25 29 0d 14 b4 05 e1 0d 14 be 04 0d 14 c8 10 |e%).............| 00003dc0 dd f2 66 69 6e 69 73 68 73 63 61 6e 0d 14 d2 23 |..finishscan...#| 00003dd0 f2 70 75 74 64 61 74 61 28 32 33 2c 22 53 74 61 |.putdata(23,"Sta| 00003de0 72 74 20 44 72 69 76 65 20 53 63 61 6e 22 29 0d |rt Drive Scan").| 00003df0 14 dc 1d f2 70 75 74 64 61 74 61 28 64 69 72 73 |....putdata(dirs| 00003e00 63 61 6e 25 2c 22 49 64 6c 65 22 29 0d 14 e6 0f |can%,"Idle")....| 00003e10 73 63 61 6e 6e 69 6e 67 25 3d a3 0d 14 f0 05 e1 |scanning%=......| 00003e20 0d 14 fa 04 0d 15 04 0f dd f2 73 74 61 72 74 73 |..........starts| 00003e30 63 61 6e 0d 15 0e 0d ea 20 70 72 65 66 69 78 24 |can..... prefix$| 00003e40 0d 15 18 22 f2 70 75 74 64 61 74 61 28 32 33 2c |...".putdata(23,| 00003e50 22 53 74 6f 70 20 44 72 69 76 65 20 53 63 61 6e |"Stop Drive Scan| 00003e60 22 29 0d 15 22 22 73 63 61 6e 6e 69 6e 67 25 3d |")..""scanning%=| 00003e70 b9 3a 69 6e 66 65 63 74 25 3d a3 3a 73 74 69 6c |.:infect%=.:stil| 00003e80 6c 25 3d a3 0d 15 2c 20 70 72 65 66 69 78 24 3d |l%=..., prefix$=| 00003e90 66 73 79 73 24 2b 22 3a 3a 22 2b c3 28 64 72 69 |fsys$+"::"+.(dri| 00003ea0 76 65 25 29 0d 15 36 2a f2 70 75 74 64 61 74 61 |ve%)..6*.putdata| 00003eb0 28 73 74 61 74 75 73 25 2c 22 44 72 69 76 65 20 |(status%,"Drive | 00003ec0 53 63 61 6e 20 73 74 61 72 74 65 64 22 29 0d 15 |Scan started")..| 00003ed0 40 19 f2 63 68 65 63 6b 28 70 72 65 66 69 78 24 |@..check(prefix$| 00003ee0 2c 22 24 22 2c 30 29 0d 15 4a 11 e7 20 73 63 61 |,"$",0)..J.. sca| 00003ef0 6e 6e 69 6e 67 25 20 8c 0d 15 54 2d 20 20 20 6e |nning% ...T- n| 00003f00 75 6d 73 63 61 6e 73 25 2b 3d 31 3a f2 70 75 74 |umscans%+=1:.put| 00003f10 64 61 74 61 28 32 32 2c c3 28 6e 75 6d 73 63 61 |data(22,.(numsca| 00003f20 6e 73 25 29 29 0d 15 5e 14 20 20 20 f2 68 69 6c |ns%))..^. .hil| 00003f30 69 74 65 28 32 33 2c a3 29 0d 15 68 12 20 20 20 |ite(23,.)..h. | 00003f40 e7 20 69 6e 66 65 63 74 25 20 8c 0d 15 72 14 20 |. infect% ...r. | 00003f50 20 20 20 20 20 e7 20 73 74 69 6c 6c 25 20 8c 0d | . still% ..| 00003f60 15 7c 41 20 20 20 20 20 20 20 20 20 f2 70 75 74 |.|A .put| 00003f70 64 61 74 61 28 73 74 61 74 75 73 25 2c 70 72 65 |data(status%,pre| 00003f80 66 69 78 24 2b 22 20 6d 61 79 20 73 74 69 6c 6c |fix$+" may still| 00003f90 20 62 65 20 69 6e 66 65 63 74 65 64 20 21 22 29 | be infected !")| 00003fa0 0d 15 86 0b 20 20 20 20 20 20 cc 0d 15 90 45 20 |.... ....E | 00003fb0 20 20 20 20 20 20 20 20 f2 70 75 74 64 61 74 61 | .putdata| 00003fc0 28 73 74 61 74 75 73 25 2c 70 72 65 66 69 78 24 |(status%,prefix$| 00003fd0 2b 22 20 77 61 73 20 69 6e 66 65 63 74 65 64 2c |+" was infected,| 00003fe0 20 62 75 74 20 6e 6f 77 20 63 6c 65 61 6e 22 29 | but now clean")| 00003ff0 0d 15 9a 0b 20 20 20 20 20 20 cd 0d 15 a4 08 20 |.... ..... | 00004000 20 20 cc 0d 15 ae 3f 20 20 20 20 20 20 f2 70 75 | ....? .pu| 00004010 74 64 61 74 61 28 73 74 61 74 75 73 25 2c 70 72 |tdata(status%,pr| 00004020 65 66 69 78 24 2b 22 20 69 73 20 63 6c 65 61 6e |efix$+" is clean| 00004030 20 2d 20 6e 6f 20 69 6e 66 65 63 74 69 6f 6e 73 | - no infections| 00004040 22 29 0d 15 b8 08 20 20 20 cd 0d 15 c2 12 20 20 |").... ..... | 00004050 20 f2 6f 70 65 6e 77 69 6e 64 6f 77 0d 15 cc 05 | .openwindow....| 00004060 cc 0d 15 d6 36 20 20 20 f2 70 75 74 64 61 74 61 |....6 .putdata| 00004070 28 73 74 61 74 75 73 25 2c 22 44 72 69 76 65 20 |(status%,"Drive | 00004080 53 63 61 6e 20 6d 61 6e 75 61 6c 6c 79 20 61 62 |Scan manually ab| 00004090 6f 72 74 65 64 22 29 0d 15 e0 05 cd 0d 15 ea 0f |orted").........| 000040a0 f2 66 69 6e 69 73 68 73 63 61 6e 0d 15 f4 05 e1 |.finishscan.....| 000040b0 0d ff |..| 000040b2