Home » Archimedes archive » Archimedes World » AW-1995-06_Disc2.adf » June95_2 » Apps/BigBook/!BigBook/!RunImage
Apps/BigBook/!BigBook/!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-1995-06_Disc2.adf » June95_2 |
Filename: | Apps/BigBook/!BigBook/!RunImage |
Read OK: | ✔ |
File size: | 1166C bytes |
Load address: | 0000 |
Exec address: | 0000 |
File contents
10REM > <BigBook$Dir>.!RunImage 20PROCinitiate 30ON ERROR PROCerror(REPORT$) 40 50next_time%=0 60WHILE NOTexit 70 null%=dragging%OR(insptr%<inslen%) 80 IF alarm_set% THEN 90 PROCpollidle(0,next_time%) 100 SYS"OS_ReadMonotonicTime" TO new_time% 110 IF new_time%>=next_time% THEN 120 IF FNthis_time>=c_time%(alarm_set%) THEN PROCalarm(alarm_set%,this_date%,1) 130 next_time%=new_time%+1000 140 ENDIF 150 ELSE 160 PROCpoll(1+null%) 170 ENDIF 180ENDWHILE 190PROCclosedown 200 210DEF PROCinitiate 220PROCwimpinit("Big Book","!bigbook","BigBook",19,6000) 230PROCinit_s 240PROCinit_n 250PROCinit_c 260PROCinit_a 270PROCinit_l 280PROCinit_m 290PROCc_alarms 300ENDPROC 310 320DEF PROCinit_m 330DIM mp$(5,20) 340ENDPROC 350 360DEF PROCinit_s 370s_file$=dir$+".Settings" 380IF FNfileexist(s_file$) THEN 390 in_file=OPENIN(s_file$) 400 INPUT#in_file,weekends 410 INPUT#in_file,today 420 INPUT#in_file,fonts 430 INPUT#in_file,beep 440 INPUT#in_file,birthday 450 INPUT#in_file,other$ 460 CLOSE#in_file 470ELSE 480 weekends=TRUE 490 today=TRUE 500 fonts=FALSE 510 beep=TRUE 520 birthday=7 530 other$="Other" 540ENDIF 550s_changed%=FALSE 560ENDPROC 570 580DEF PROCsave_s 590out_file=OPENOUT(s_file$) 600PRINT#out_file,weekends 610PRINT#out_file,today 620PRINT#out_file,fonts 630PRINT#out_file,beep 640PRINT#out_file,birthday 650PRINT#out_file,other$ 660CLOSE#out_file 670s_changed%=FALSE 680ENDPROC 690 700DEF PROCinit_n 710PROCiconinfo(w%(notepad%),9,q%) 720n_s0%=q%!8+4 730n_s1%=q%!16-q%!8-8 740n_si%=10 750PROCiconinfo(w%(notepad%),n_si%,q%) 760n_s2%=q%!12 770n_s3%=q%!20 780n_sf%=q%!24 790max_n%=64 800DIM note$(max_n%,5),n_num%(max_n%) 810n_file$=dir$+".Notes" 820IF FNfileexist(n_file$) THEN 830 in_file=OPENIN(n_file$) 840 INPUT#in_file,notes% 850 INPUT#in_file,last_n% 860 FOR note%=1 TO notes% 870 FOR i%=0 TO 5 880 INPUT#in_file,note$(note%,i%) 890 NEXT i% 900 INPUT#in_file,n_num%(note%) 910 NEXT note% 920 CLOSE#in_file 930ELSE 940 notes%=1 950 last_n%=1 960 n_num%(notes%)=last_n% 970ENDIF 980this_note%=-1 990n_changed%=FALSE 1000ENDPROC 1010 1020DEF PROCsave_n 1030out_file=OPENOUT(n_file$) 1040PRINT#out_file,notes% 1050PRINT#out_file,last_n% 1060FOR note%=1 TO notes% 1070 FOR i%=0 TO 5 1080 PRINT#out_file,note$(note%,i%) 1090 NEXT i% 1100 PRINT#out_file,n_num%(note%) 1110NEXT note% 1120CLOSE#out_file 1130n_changed%=FALSE 1140ENDPROC 1150 1160DEF PROCinit_c 1170!q%=1 1180SYS"OS_Word",14,q% 1190this_year%=VAL(STR$~(?q%)) 1200this_month%=VAL(STR$~(q%?1)) 1210this_date%=VAL(STR$~(q%?2)) 1220DIM month$(12),ml%(12),day$(6),sd%(12),mo%(12),mml%(12) 1230month$()="","January","February","March","April","May","June","July","August","September","October","November","December" 1240ml%()=0,31,28,31,30,31,30,31,31,30,31,30,31 1250FOR m%=2 TO 12 1260 mo%(m%)=(mo%(m%-1)+ml%(m%-1))MOD7 1270NEXT m% 1280day$()="Sun","Mon","Tue","Wed","Thu","Fri","Sat" 1290FOR m%=0 TO 12 1300 month%=m%+this_month%-1 1310 c_year%=this_year% 1320 IF month%<1 THEN 1330 c_year%-=1 1340 month%+=12 1350 ENDIF 1360 IF month%>12 THEN 1370 c_year%+=1 1380 month%-=12 1390 ENDIF 1400 sd%(m%)=FNday(1,month%,c_year%) 1410 mml%(m%)=ml%(month%) 1420 IF c_year%MOD4=0 AND month%=2 THEN mml%(m%)=29 1430NEXT m% 1440c_width%=350:c_height%=40:border%=32:m_height%=40:d_width%=80 1450p_x0%=-(border%+d_width%):p_y0%=-(c_height%*37+border%) 1460p_x1%=c_width%*13+border%:p_y1%=border%+m_height% 1470PROCsetwindowextent(w%(year%),p_x0%,p_y0%,p_x1%,p_y1%) 1480PROCsetwindowextent(w%(c_horz%),p_x0%,p_y1%-m_height%,p_x1%,p_y1%) 1490PROCsetwindowextent(w%(c_vert%),p_x0%,p_y0%,p_x0%+d_width%,p_y1%) 1500c_max%=300 1510DIM c_first%(12,31),c_colour%(12,31) 1520DIM c_entry$(c_max%),c_type%(c_max%),c_time%(c_max%),c_next%(c_max%),c_link%(1,c_max%) 1530c_first%()=-1 1540c_last%=0 1550DIM d_icon% 40 1560PROCiconinfo(w%(day%),0,d_icon%) 1570d_icon%+=8 1580PROCdeleteicon(w%(day%),0) 1590d_height%=d_icon%!12-d_icon%!4 1600d_date%=-1:d_month%=-1 1610DIM l_icon%(1) 1620FOR i%=0 TO 1 1630 DIM d% 40 1640 PROCiconinfo(w%(day%),i%+1,d%) 1650 l_icon%(i%)=d%+8 1660 PROCdeleteicon(w%(day%),i%+1) 1670NEXT i% 1680DIM e_icon%(7),e_icon$(7) 1690e_icon%()=4,1,2,3,10,11,12,15 1700e_icon$()="none","birthday","todo","alarm","red","blue","green","gold" 1710DIM b_col%(15) 1720FOR i%=0 TO 15 1730 b_col%(i%)=FNiconfc(w%(colours%),i%) 1740NEXT i% 1750in_file=OPENIN(dir$+".Colours") 1760FOR i%=0 TO 15 1770 PROCseticontext(w%(colours%),i%,LEFT$(GET$#in_file,12)) 1780NEXT i% 1790CLOSE#in_file 1800PROCload_c 1810a_date%=1:a_month%=0:a_next%=0 1820alarm_set%=0 1830DIM trans% 16,rect% 16,plotat% 8 1840ENDPROC 1850 1860DEF PROCinit_l 1870DIM l_list%(max_a%), l_icon% 40 1880PROCiconinfo(w%(letter%),1,l_icon%) 1890l_icon%+=8 1900l_y0%=l_icon%!4 1910l_y1%=l_icon%!12-l_icon%!4 1920PROCdeleteicon(w%(letter%),1) 1930letters%=-1 1940l_selected%=-1 1950PROCcalc_l 1960ENDPROC 1970 1980DEF PROCinit_a 1990PROCiconinfo(w%(address%),17,q%) 2000a_s0%=q%!8+4 2010a_s1%=q%!16-q%!8-8 2020a_si%=18 2030PROCiconinfo(w%(address%),a_si%,q%) 2040a_s2%=q%!12 2050a_s3%=q%!20 2060a_sf%=q%!24 2070max_a%=256 2080name=0:address=1:phone=6:other=7:dob=8:sent=9:rec=10:file=11 2090DIM a$(max_a%,11), flag%(max_a%), type%(max_a%), a_num%(max_a%), icon%(8), a%(26), g%(max_a%), temp$(max_a%), ind%(max_a%) 2100icon%()=0,2,3,4,5,6,12,13,14 2110PROCload_a 2120this_name%=1 2130DIM index_menu% 1024, sub_block% 2048, sub_index% 2048 2140PROCseticontext(w%(address%),10,other$+":") 2150DIM col_tone%(2),row_tone%(3) 2160col_tone%()=160,167,174 2170row_tone%()=122,130,136,142 2180inslen%=0:insptr%=0:DIM insdata% 400 2190ENDPROC 2200 2210DEF PROCinitwindows 2220info%=FNinfowindow("Big Book","Diary, Address book,...","Barry Wickett","1.20 (17-Dec-1994)") 2230entry%=FNwindow("day","entry",0,%10) 2240record%=FNwindow("record","record",FNmenu("File Link,Unlink"),0) 2250DIM other% 14 2260othermenu%=FNmenu(" Enter date ,14!,,other%") 2270recordmenu%=FNmenu("Date,Today,Yesterday,Other>,othermenu%") 2280insert%=FNwindow("insert","insert",0,0) 2290special%=FNmenu("Specials,Insert at Caret>,w%(insert%),Mark up birthday") 2300address%=FNwindow("addresses","address",FNmenu("Addresses,Add,Delete,Search,Sort-,Save-,Specials>,special%,Print..."),%110) 2310letter%=FNwindow("letters","letter",FNmenu("Letters,Print..."),%1) 2320colours%=FNwindow("colours","colours",0,0) 2330day%=FNwindow("days","day",FNmenu("Day,Colours>,w%(colours%),Add entry,Print..."),%100) 2340alarm%=FNwindow("alarm","alarm",0,%10) 2350print%=FNwindow("print","print",0,0) 2360year%=FNwindow("years","year",FNmenu("Book of Days,Print>-,w%(print%),Save"),%10011) 2370birthday%=FNwindow("birthday","birthday",0,%10) 2380savemenu%=FNmenu("Save,Days,Addresses,Letters,Notes,Settings-,All changes") 2390menu%=FNwindow("menu","menu",FNmenu("Big Book,Info>,w%(info%),Save>,savemenu%,Quit"),0) 2400c_horz%=FNwindow("blank","c_horz",0,0) 2410c_vert%=FNwindow("blank","c_vert",0,0) 2420settings%=FNwindow("system","settings",0,%1) 2430notepad%=FNwindow("notes","notepad",0,%10) 2440search%=FNwindow("search","search",0,0) 2450multi%=FNwindow("multi","multi",0,0) 2460PROCiconbarmenu("Big Book,Info>,w%(info%),Quit") 2470ENDPROC 2480 2490DEF PROCsave_changed 2500IF c_changed% THEN PROCsave_c 2510IF a_changed% THEN PROCsave_a 2520IF n_changed% THEN PROCsave_n 2530IF s_changed% THEN PROCsave_s 2540ENDPROC 2550 2560DEF FNmenu_iconbar 2570IF !blk%=1 THEN PROCquit 2580=0 2590 2600DEF FNclick_iconbar 2610PROCopenup(w%(menu%)) 2620=0 2630 2640DEF FNmenu_menu 2650CASE !blk% OF 2660 WHEN 1 2670 CASE blk%!4 OF 2680 WHEN 0 : PROCsave_c 2690 WHEN 1,2 : PROCsave_a 2700 WHEN 3 : PROCsave_n 2710 WHEN 4 : PROCsave_s 2720 WHEN 5 : PROCsave_changed 2730 ENDCASE 2740 WHEN 2 : PROCquit 2750ENDCASE 2760=0 2770 2780DEF FNclick_menu 2790CASE icon% OF 2800 WHEN 1 : PROCopenup(w%(settings%)) 2810 WHEN 3 : IF active%(notepad%) THEN PROCopenup(w%(notepad%)) ELSE PROCset_n(1) 2820 WHEN 4 : PROCopenup(w%(year%)) 2830 WHEN 5 : IF active%(address%) THEN PROCopenup(w%(address%)) ELSE PROCset_a(1) 2840 WHEN 6 : PROCopenup(w%(letter%)) 2850ENDCASE 2860=0 2870 2880DEF FNopen_settings 2890IF NOTactive%(settings%) THEN 2900 PROCselecticon(w%(settings%),14,weekends) 2910 PROCselecticon(w%(settings%),2,today) 2920 PROCselecticon(w%(settings%),3,fonts) 2930 PROCselecticon(w%(settings%),4,beep) 2940 PROCseticonval(w%(settings%),8,birthday) 2950 PROCseticontext(w%(settings%),12,other$) 2960ENDIF 2970=0 2980 2990DEF FNclick_settings 3000CASE icon% OF 3010 WHEN 16 3020 PROCnew_settings 3030 PROCclosewindow(w%(settings%)) 3040 WHEN 15 : PROCclosewindow(w%(settings%)) 3050 WHEN 17 3060 PROCnew_settings 3070 PROCsave_s 3080 PROCclosewindow(w%(settings%)) 3090 WHEN 5,6 : d%=FNincicon(8,5,6,1,9) 3100OTHERWISE 3110ENDCASE 3120=0 3130 3140DEF FNclose_birthday 3150PROCquickclosewindow(w%(birthday%)) 3160active%(birthday%)=FALSE 3170IF b_checking% THEN PROCc_birthdays 3180=0 3190 3200DEF FNclose_alarm 3210PROCquickclosewindow(w%(alarm%)) 3220active%(alarm%)=FALSE 3230IF a_checking% THEN PROCc_alarms 3240=0 3250 3260DEF FNclick_alarm 3270=0 3280 3290DEF FNclick_colours 3300CASE icon% OF 3310 WHEN 0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15 : c_chosen%=icon% 3320 WHEN 16 : PROCclosemenu 3330 WHEN 17 3340 c_colour%(d_month%,d_date%)=c_chosen% 3350 PROCredo_c(d_month%,d_date%) 3360 PROCclosemenu 3370ENDCASE 3380=0 3390 3400DEF FNmenu_record 3410IF !blk%=0 THEN 3420 a$(l_selected%,file)="" 3430 type%(l_selected%)=-1 3440 PROCset_l_data 3450ENDIF 3460=0 3470 3480DEF FNclick_record 3490CASE icon% OF 3500 WHEN 4 3510 file$=a$(l_selected%,file) 3520 PROCfileinfo(file$) 3530 IF exist% THEN 3540 PROCmouseinfo 3550 blk%!12=0 3560 blk%!16=5 3570 blk%!20=wind% 3580 blk%!24=icon% 3590 blk%!28=mx% 3600 blk%!32=my% 3610 blk%!36=filesize% 3620 blk%!40=type%(l_selected%) 3630 $(blk%+44)=file$+CHR$0 3640 !blk%=(LENfile$+48)ANDNOT3 3650 SYS"Wimp_SendMessage",18,blk%,0 3660 ELSE 3670 PROCreport("Letter file not found.") 3680 ENDIF 3690 WHEN 5,6 3700 r_which%=6-icon% 3710 $other%=FNicontext(wind%,r_which%+2) 3720 PROCopeniconmenu(wind%,icon%,recordmenu%) 3730 WHEN 10 3740 PROCset_a(l_selected%) 3750 PROCopenup(w%(address%)) 3760 WHEN 11 : PROCclosewindow(w%(record%)) 3770ENDCASE 3780=0 3790 3800DEF FNkey_search 3810IF key%=13 THEN PROCsearch(0,1) 3820=0 3830 3840DEF FNclick_search 3850IF search_type%=1 THEN this%=this_note% ELSE this%=this_name% 3860CASE icon% OF 3870 WHEN 2 : PROCsearch(0,1) 3880 WHEN 3 : PROCsearch(this%,1) 3890 WHEN 4 : PROCsearch(this%,-1) 3900 WHEN 5 : PROCclosewindow(w%(search%)) 3910ENDCASE 3920=0 3930 3940DEF FNdrop_notepad 3950=0 3960 3970DEF FNclose_notepad 3980PROCget_n_data 3990=TRUE 4000 4010DEF FNclick_notepad 4020CASE icon% OF 4030 WHEN 7 : PROCinc_n(-1) 4040 WHEN 8 : PROCinc_n(1) 4050 WHEN n_si% : PROCdrag_n 4060 WHEN 11 : PROCadd_n 4070 WHEN 12 : PROCdelete_n 4080 WHEN 13 : PROCopen_search(1) 4090 WHEN 14 : PROCstart_multi(notepad%) 4100ENDCASE 4110=0 4120 4130DEF FNkey_notepad 4140IF key%>=32 AND key%<=255 THEN 4150 st$=FNicontext(wind%,icon%) 4160 IF key%=127 THEN 4170 IF index%>0 THEN 4180 st$=LEFT$(st$,index%-1)+MID$(st$,index%+1) 4190 PROCseticontext(wind%,icon%,st$) 4200 ENDIF 4210 ELSE 4220 st$=LEFT$(st$,index%)+CHR$(key%)+MID$(st$,index%+1) 4230 index%+=1 4240 rem$="" 4250 first%=TRUE 4260 REPEAT 4270 IF rem$<>"" AND st$<>"" THEN rem$+=" " 4280 st$=rem$+st$ 4290 rem$="" 4300 IF LENst$>30 THEN 4310 p%=30 4320 REPEAT 4330 IF MID$(st$,p%,1)=" " THEN p%=-p% ELSE p%-=1 4340 UNTIL p%<=0 4350 IF p%=0 THEN 4360 rem$=MID$(st$,31) 4370 st$=LEFT$(st$,30) 4380 ELSE 4390 p%=-p% 4400 rem$=MID$(st$,p%+1) 4410 st$=LEFT$(st$,p%-1) 4420 ENDIF 4430 ENDIF 4440 PROCseticontext(wind%,icon%,st$) 4450 IF first% THEN 4460 IF index%<=LENst$ THEN 4470 cicon%=icon% 4480 cindex%=index% 4490 ELSE 4500 cicon%=icon%+1 4510 cindex%=index%-LENst$-1 4520 ENDIF 4530 first%=FALSE 4540 ENDIF 4550 icon%+=1 4560 IF icon%<=6 THEN st$=FNicontext(wind%,icon%) 4570 UNTIL rem$="" OR icon%>6 4580 IF cicon%=7 THEN 4590 PROCadd_n 4600 PROCseticontext(wind%,1,rem$) 4610 cicon%=1 4620 ENDIF 4630 PROCputcaret(wind%,cicon%,cindex%) 4640 ENDIF 4650ENDIF 4660IF key%=13 THEN PROCadd_n 4670=0 4680 4690DEF FNkey_address 4700IF key%=13 THEN PROCadd_a 4710=0 4720 4730DEF FNclick_address 4740CASE icon% OF 4750 WHEN 16 : PROCinc_a(-1) 4760 WHEN 19 : PROCinc_a(1) 4770 WHEN a_si% : PROCdrag_a 4780 WHEN 24 : PROCletter_a 4790 WHEN 20 : PROCa_index 4800 WHEN 25 : PROCl_select(this_name%) 4810 WHEN 26 : PROCdial(FNicontext(w%(address%),12)) 4820ENDCASE 4830=0 4840 4850DEF FNpremenu_address 4860PROCseticontext(w%(insert%),5,other$) 4870=0 4880 4890DEF FNmenu_address 4900CASE !blk% OF 4910 WHEN 0 : PROCadd_a 4920 WHEN 1 : PROCdelete_a 4930 WHEN 2 : PROCopen_search(2) 4940 WHEN 3 : IF names%>1 THEN PROCsort_a 4950 WHEN 4 : PROCsave_a 4960 WHEN 5 : IF blk%!4=1 THEN PROCmark_birthday 4970 WHEN 6 : PROCstart_multi(address%) 4980ENDCASE 4990=0 5000 5010DEF FNclose_address 5020PROCget_a_data 5030=TRUE 5040 5050DEF FNdrop_address 5060=0 5070 5080DEF FNkey_entry 5090IF key%=13 THEN 5100 PROCget_e 5110 PROCclosewindow(w%(entry%)) 5120ENDIF 5130=0 5140 5150DEF FNclose_entry 5160PROCget_e 5170=TRUE 5180 5190DEF FNclick_entry 5200CASE icon% OF 5210 WHEN 1,2,3,4,10,11,12,15 : PROCselecticon(wind%,icon%,TRUE) 5220 WHEN 13 5230 PROCget_e 5240 PROCclosewindow(w%(entry%)) 5250 WHEN 5,6,8,9 5260 h%=e_time%DIV60 5270 m%=e_time%MOD60 5280 CASE icon% OF 5290 WHEN 5 : h%-=1 5300 WHEN 6 : h%+=1 5310 WHEN 9 : m%-=1 5320 WHEN 8 : m%+=1 5330 ENDCASE 5340 IF h%>23 THEN h%=0 ELSE IF h%<0 THEN h%=23 5350 IF m%<0 THEN m%=59 ELSE IF m%>59 THEN m%=0 5360 PROCset_e_time(h%*60+m%) 5370 WHEN 16 : PROCstartdrag(entry%,icon%) 5380 WHEN 17 5390 temp_entry%=this_entry% 5400 PROCset_e(-1) 5410 PROCremove_e(d_month%,d_date%,temp_entry%) 5420 PROCcalc_d 5430 WHEN 18,19 5440 c_link%(icon%-18,this_entry%)=0 5450 PROCforceredraw(w%(day%)) 5460ENDCASE 5470=0 5480 5490DEF FNdrop_entry 5500CASE wind% OF 5510 WHEN w%(notepad%) 5520 c_link%(1,this_entry%)=n_num%(this_note%) 5530 c_changed%=TRUE 5540 PROCforceredraw(w%(day%)) 5550 WHEN w%(address%) 5560 c_link%(0,this_entry%)=a_num%(this_name%) 5570 c_changed%=TRUE 5580 PROCforceredraw(w%(day%)) 5590ENDCASE 5600=0 5610 5620DEF FNclick_insert 5630CASE icon% OF 5640 WHEN 7 : PROCinsert 5650 WHEN 8 : PROCclosemenu 5660ENDCASE 5670=0 5680 5690DEF PROCstart_multi(w0%) 5700mp$()="" 5710FOR i%=3 TO 8 5720 PROCseticonvalid(w%(multi%),i%,"Sp") 5730NEXT i% 5740PROCset_multi(w0%,3) 5750PROCopenup(w%(multi%)) 5760ENDPROC 5770 5780DEF FNclick_multi 5790CASE icon% OF 5800 WHEN 1 : PROCclosewindow(w%(multi%)) 5810 WHEN 2 : PROCprint_multi 5820ENDCASE 5830=0 5840 5850DEF PROCprint_multi 5860SYS "XPDriver_Info" TO ;flags% 5870IF flags% AND 1 THEN PROCreport("Printer manager not installed."):ENDPROC 5880SYS"Hourglass_On" 5890pf%=OPENOUT("printer:") 5900SYS"PDriver_SelectJob",pf%,"Planner" 5910LOCAL ERROR 5920ON ERROR LOCAL:RESTORE ERROR:SYS "PDriver_AbortJob",pf%:CLOSE#pf%:SYS"Hourglass_Off":PROCreport(REPORT$):ENDPROC 5930SYS"PDriver_PageSize" TO ,w%,h%,l%,b%,r%,t% 5940!rect%=0:rect%!4=0 5950rect%!8=1420:rect%!12=1820 5960!trans%=1<<16:trans%!4=0 5970trans%!8=0:trans%!12=1<<16 5980!plotat%=l%:plotat%!4=b% 5990SYS"PDriver_GiveRectangle",0,rect%,trans%,plotat%,&FFFFFF00 6000SYS"PDriver_DrawPage",1,blk%,0,0 TO more% 6010WHILE more% 6020 SYS"Font_FindFont",,"Trinity.Medium",12*16,12*16,0,0 TO handle% 6030 SYS"Font_FindFont",,"Trinity.Bold",12*16,12*16,0,0 TO bold% 6040 SYS"Font_SetFont",handle% 6050 SYS"ColourTrans_SetFontColours",0,&FFFFFF00,0,6 6060 FOR i%=0 TO 5 6070 x0%=(i%MOD2)*700+20 6080 y0%=1820-(i%DIV2)*600 6090 FOR l%=0 TO 20 6100 IF mp$(i%,l%)<>"" THEN 6110 IF LEFT$(mp$(i%,l%),1)="!" THEN 6120 SYS"Font_SetFont",bold% 6130 PROCfancy(MID$(mp$(i%,l%),2),x0%,y0%-(l%+1)*32) 6140 SYS"Font_SetFont",handle% 6150 ELSE 6160 PROCfancy(mp$(i%,l%),x0%,y0%-(l%+1)*32) 6170 ENDIF 6180 ENDIF 6190 NEXT l% 6200 NEXT i% 6210 SYS"PDriver_GetRectangle",,blk% TO more% 6220 SYS"Font_LoseFont",handle% 6230 SYS"Font_LoseFont",bold% 6240ENDWHILE 6250SYS"PDriver_EndJob",pf% 6260RESTORE ERROR 6270CLOSE#pf% 6280SYS"Hourglass_Off" 6290PROCclosewindow(w%(multi%)) 6300ENDPROC 6310 6320DEF PROCfancy(st$,x%,y%) 6330LOCAL tab% 6340tab%=INSTR(st$,CHR$9) 6350IF tab%=0 THEN 6360 SYS"Font_Paint",,st$,%10100,x%,y% 6370ELSE 6380 IF tab%>1 THEN PROCfancy(LEFT$(st$,tab%-1),x%,y%) 6390 PROCfancy(MID$(st$,tab%+1),x%+80,y%) 6400ENDPROC 6410 6420DEF FNdrop_multi 6430PROCset_multi(FNid(wind%),dragicon%) 6440=0 6450 6460DEF PROCset_multi(w%,i%) 6470icon$="" 6480FOR l%=0 TO 20 6490 mp$(i%-3,l%)="" 6500NEXT l% 6510CASE w% OF 6520 WHEN address% 6530 icon$="paddress" 6540 FOR type=name TO dob 6550 mp$(i%-3,type-name)=a$(this_name%,type) 6560 NEXT type 6570 mp$(i%-3,0)="!"+mp$(i%-3,0) 6580 WHEN day% 6590 icon$="pdays" 6600 p%=1 6610 mp$(i%-3,0)="!"+t_date$ 6620 next%=c_first%(d_month%,d_date%) 6630 WHILE next%<>-1 AND p%<=20 6640 IF c_type%(next%)AND256 THEN time$=FNtime(c_time%(next%))+CHR$9 ELSE time$="" 6650 mp$(i%-3,p%)=time$+c_entry$(next%) 6660 next%=c_next%(next%) 6670 p%+=1 6680 ENDWHILE 6690 WHEN notepad% 6700 icon$="pnotepad" 6710 FOR i2%=0 TO 5 6720 mp$(i%-3,i2%)=FNicontext(w%(notepad%),i2%+1) 6730 NEXT i2% 6740 WHEN letter% 6750 icon$="pletters" 6760 t$=CHR$9+CHR$9+CHR$9+CHR$9+CHR$9 6770 mp$(i%-3,0)="!Name"+t$+"Last Sent"+CHR$9+CHR$9+"Last Received" 6780 IF letters% THEN 6790 FOR l%=1 TO letters% 6800 name%=l_list%(l%) 6810 mp$(i%-3,l%)=a$(name%,name)+t$+a$(name%,sent)+CHR$9+CHR$9+a$(name%,rec) 6820 NEXT l% 6830 ENDIF 6840OTHERWISE 6850 icon$="p" 6860ENDCASE 6870PROCseticonvalid(w%(multi%),i%,"S"+icon$) 6880IF icon$="p" THEN PROCreport("Cannot print this.") 6890ENDPROC 6900 6910DEF FNclick_print 6920CASE icon% OF 6930 WHEN 4 : PROCclosemenu 6940 WHEN 5 : PROCprint_year 6950ENDCASE 6960=0 6970 6980DEF FNpreopen_year 6990IF active%(year%) THEN 7000 !q%=w%(c_horz%) 7010 SYS"Wimp_GetWindowState",,q% 7020 IF q%!28=blk%!28 THEN blk%!28=w%(c_vert%) 7030ENDIF 7040=0 7050 7060DEF FNopen_year 7070IF active%(year%)=FALSE AND today=TRUE THEN PROCnew_day(this_date%,1) 7080PROCwindow_state(w%(year%)) 7090!blk%=w%(c_horz%) 7100blk%!8=blk%!16-m_height% 7110blk%!24=0 7120PROCopenwindow 7130PROCwindow_state(w%(year%)) 7140!blk%=w%(c_vert%) 7150blk%!12=blk%!4+d_width% 7160blk%!16=blk%!16 7170blk%!20=0 7180blk%!28=w%(c_horz%) 7190PROCopenwindow 7200=0 7210 7220DEF FNclose_year 7230PROCclosewindow(w%(c_horz%)) 7240PROCclosewindow(w%(c_vert%)) 7250=TRUE 7260 7270DEF FNmenu_year 7280CASE !blk% OF 7290 WHEN 1 : PROCsave_c 7300ENDCASE 7310=0 7320 7330DEF FNclick_year 7340mx%-=wx%(year%) 7350my%-=wy%(year%) 7360m%=mx%DIVc_width% 7370IF m%>=0 AND m%<=12 THEN 7380 d%=((-my%)DIVc_height%)-sd%(m%)+1 7390 IF d%>=1 AND d%<=mml%(m%) THEN PROCnew_day(d%,m%) 7400ENDIF 7410=0 7420 7430DEF FNredraw_year 7440font_col%=-1 7450IF fonts THEN 7460 SYS"Font_FindFont",,"Trinity.Medium",12*16,12*16,0,0 TO handle% 7470 SYS"Font_SetFont",handle% 7480ENDIF 7490m0%=x0%DIVc_width% 7500m1%=x1%DIVc_width% 7510d1%=(-y0%)DIVc_height% 7520d0%=(-y1%)DIVc_height% 7530FOR m%=m0% TO m1% 7540 IF m%>=0 AND m%<=12 THEN 7550 month%=((m%+this_month%+10)MOD12)+1 7560 x_pos%=wx%+m%*c_width% 7570 FOR d%=d0% TO d1% 7580 IF d%>=sd%(m%) AND d%<sd%(m%)+mml%(m%) THEN 7590 y_pos%=wy%-d%*c_height% 7600 date%=d%-sd%(m%)+1 7610 IF opt1% THEN 7620 f_col%=0 7630 ELSE 7640 f_col%=c_colour%(m%,date%) 7650 IF f_col%=0 AND weekends=TRUE AND (d%MOD7=0 OR d%MOD7=6) THEN f_col%=1 7660 ENDIF 7670 IF font_col%<>f_col% AND fonts THEN 7680 SYS"ColourTrans_SetFontColours",0,!(deskpal%+f_col%*4),!(deskpal%+b_col%(f_col%)*4),6 7690 font_col%=f_col% 7700 ENDIF 7710 IF f_col% THEN 7720 SYS"ColourTrans_SetGCOL",!(deskpal%+(f_col%*4)) 7730 RECTANGLE FILL x_pos%,y_pos%,c_width%,-c_height% 7740 ENDIF 7750 SYS"ColourTrans_SetGCOL",deskpal%!28 7760 RECTANGLE x_pos%,y_pos%,c_width%,-c_height% 7770 IF b_col%(f_col%)=0 AND fonts=0 THEN SYS"ColourTrans_SetGCOL",!deskpal% 7780 PROCprint(STR$(date%),x_pos%+8,y_pos%-8) 7790 IF c_first%(m%,date%)>-1 AND opt0%=FALSE THEN PROCprint(FNsnip(c_entry$(c_first%(m%,date%)),c_width%-50),x_pos%+46,y_pos%-8) 7800 ENDIF 7810 NEXT d% 7820 ENDIF 7830NEXT m% 7840IF fonts THEN SYS"Font_LoseFont",handle% 7850=0 7860 7870DEF FNsnip(st$,max%) 7880WHILE FNstring_width(st$)>max% 7890 st$=LEFT$(st$,LENst$-1) 7900ENDWHILE 7910=st$ 7920 7930DEF PROCprint(st$,x%,y%) 7940IF fonts THEN 7950 SYS"Font_Paint",handle%,st$,%10100,x%,y%-20 7960ELSE 7970 MOVE x%,y% 7980 PRINTst$ 7990ENDIF 8000ENDPROC 8010 8020DEF FNstring_width(st$) 8030LOCAL width%,x0%,x1% 8040IF fonts THEN 8050 SYS"Font_StringBBox",handle%,st$ TO ,x0%,,x1% 8060 width%=x1%-x0% 8070 SYS"Font_ConverttoOS",,width% TO ,width% 8080ELSE 8090 width%=LENst$*16 8100ENDIF 8110=width% 8120 8130DEF FNclick_c_horz 8140=0 8150 8160DEF FNredraw_c_horz 8170IF fonts THEN 8180 SYS"Font_FindFont",,"Trinity.Medium",12*16,12*16,0,0 TO handle% 8190 SYS"Font_SetFont",handle% 8200 SYS"ColourTrans_SetFontColours",0,!deskpal%,deskpal%!28,6 8210ELSE 8220 SYS"ColourTrans_SetGCOL",deskpal%!28 8230ENDIF 8240m0%=x0%DIVc_width% 8250m1%=x1%DIVc_width% 8260y_pos%=wy%-8+p_y1% 8270FOR m%=m0% TO m1% 8280 IF m%>=0 AND m%<=12 THEN 8290 month%=((m%+this_month%+10)MOD12)+1 8300 PROCprint(month$(month%),wx%+m%*c_width%+(c_width%-FNstring_width(month$(month%)))/2,y_pos%) 8310 ENDIF 8320NEXT m% 8330IF fonts THEN SYS"Font_LoseFont",handle% 8340=0 8350 8360DEF FNclick_c_vert 8370=0 8380 8390DEF FNredraw_c_vert 8400IF fonts THEN 8410 SYS"Font_FindFont",,"Trinity.Medium",12*16,12*16,0,0 TO handle% 8420 SYS"Font_SetFont",handle% 8430 SYS"ColourTrans_SetFontColours",0,!deskpal%,deskpal%!28,6 8440ELSE 8450 SYS"ColourTrans_SetGCOL",deskpal%!28 8460ENDIF 8470d1%=(-y0%)DIVc_height% 8480d0%=(-y1%)DIVc_height% 8490x_pos%=wx%+8+p_x0% 8500FOR d%=d0% TO d1% 8510 IF d%>=0 AND d%<=36 THEN PROCprint(day$(d%MOD7),x_pos%,wy%-(d%*c_height%+8)) 8520NEXT d% 8530IF fonts THEN SYS"Font_LoseFont",handle% 8540=0 8550 8560DEF FNpremenu_day 8570FOR i%=0 TO 15 8580 PROCselecticon(w%(colours%),i%,(c_colour%(d_month%,d_date%)=i%)) 8590NEXT i% 8600c_chosen%=c_colour%(d_month%,d_date%) 8610=0 8620 8630DEF FNmenu_day 8640CASE !blk% OF 8650 WHEN 1 : PROCadd_e 8660 WHEN 2 : PROCstart_multi(day%) 8670ENDCASE 8680=0 8690 8700DEF FNclick_day 8710mx%-=wx%(day%) 8720my%-=wy%(day%) 8730next%=c_first%(d_month%,d_date%) 8740e%=0 8750WHILE next%<>-1 8760 PROCcalc_d_ords(e%) 8770 IF mx%>!d_icon% AND my%>d_icon%!4 AND mx%<d_icon%!8 AND my%<d_icon%!12 THEN 8780 link%=-1 8790 FOR i%=0 TO 1 8800 IF mx%>!l_icon%(i%) AND mx%<l_icon%(i%)!8 AND c_link%(i%,next%)>0 THEN link%=i% 8810 NEXT i% 8820 CASE link% OF 8830 WHEN 0 8840 l_name%=-1 8850 FOR n%=1 TO names% 8860 IF a_num%(n%)=c_link%(0,next%) THEN l_name%=n% 8870 NEXT n% 8880 IF l_name%>0 THEN 8890 PROCset_a(l_name%) 8900 PROCopenup(w%(address%)) 8910 ELSE 8920 PROCreport("Linked address has been deleted.") 8930 ENDIF 8940 WHEN 1 8950 l_note%=-1 8960 FOR n%=1 TO notes% 8970 IF n_num%(n%)=c_link%(1,next%) THEN l_note%=n% 8980 NEXT n% 8990 IF l_note%>0 THEN 9000 PROCset_n(l_note%) 9010 PROCopenup(w%(notepad%)) 9020 ELSE 9030 PROCreport("Linked note has been deleted.") 9040 ENDIF 9050 WHEN -1 9060 PROCset_e(next%) 9070 ENDCASE 9080 ENDIF 9090 next%=c_next%(next%) 9100 e%+=1 9110ENDWHILE 9120=0 9130 9140DEF FNredraw_day 9150next%=c_first%(d_month%,d_date%) 9160e%=0 9170WHILE next%<>-1 9180 PROCcalc_d_ords(e%) 9190 IF c_type%(next%)AND256 THEN time$=FNtime(c_time%(next%))+" " ELSE time$="" 9200 $(d_icon%!20)=time$+c_entry$(next%) 9210 $(d_icon%!24)="S"+e_icon$(c_type%(next%)AND255) 9220 SYS"Wimp_PlotIcon",,d_icon% 9230 FOR i%=0 TO 1 9240 IF c_link%(i%,next%) THEN 9250 l_icon%(i%)!4=d_icon%!4 9260 l_icon%(i%)!12=d_icon%!12 9270 SYS"Wimp_PlotIcon",,l_icon%(i%) 9280 ENDIF 9290 NEXT i% 9300 next%=c_next%(next%) 9310 e%+=1 9320ENDWHILE 9330=0 9340 9350DEF FNopen_letter 9360IF NOTactive%(letter%) THEN 9370 PROCcalc_l 9380 l_selected%=0 9390ENDIF 9400=0 9410 9420DEF FNredraw_letter 9430IF letters% THEN 9440 FOR l%=1 TO letters% 9450 PROCcalc_l_ords(l%) 9460 IF l_icon%!4<=y1% AND l_icon%!12>=y0% THEN 9470 name%=l_list%(l%) 9480 $(l_icon%!20)=" "+a$(name%,name)+STRING$(32-LENa$(name%,name)," ")+a$(name%,sent)+STRING$(15-LENa$(name%,sent)," ")+a$(name%,rec) 9490 SYS"Wimp_PlotIcon",,l_icon% 9500 ENDIF 9510 NEXT l% 9520ENDIF 9530=0 9540 9550DEF FNmenu_letter 9560IF !blk%=0 THEN PROCstart_multi(letter%) 9570=0 9580 9590DEF FNclick_letter 9600mx%-=wx%(letter%) 9610my%-=wy%(letter%) 9620IF letters% THEN 9630 new%=0 9640 FOR l%=1 TO letters% 9650 PROCcalc_l_ords(l%) 9660 IF !l_icon%<=mx% AND l_icon%!4<=my% AND l_icon%!8>=mx% AND l_icon%!12>=my% THEN new%=l_list%(l%) 9670 NEXT l% 9680 PROCl_select(new%) 9690ENDIF 9700=0 9710 9720DEF FNmenu_unknown 9730CASE openmenu% OF 9740 WHEN index_menu% 9750 IF !blk%>=0 AND blk%!4>=0 THEN PROCset_a(?(!(sub_index%+40+blk%!4*24)-1)+1) 9760 WHEN recordmenu% 9770 CASE !blk% OF 9780 WHEN 0 : PROCnew_l_sr(FNdate(this_date%,this_month%,this_year%)) 9790 WHEN 1 : PROCnew_l_sr(FNdate(this_date%-1,this_month%,this_year%)) 9800 WHEN 2 : PROCnew_l_sr($other%) 9810 ENDCASE 9820ENDCASE 9830=0 9840 9850DEF PROCnew_l_sr(new$) 9860IF new$<>a$(l_selected%,sent+r_which%) THEN 9870 a$(l_selected%,sent+r_which%)=new$ 9880 FOR l%=1 TO letters% 9890 IF l_list%(l%)=l_selected% THEN 9900 PROCcalc_l_ords(l%) 9910 SYS"Wimp_ForceRedraw",w%(letter%),!l_icon%,l_icon%!4,l_icon%!8,l_icon%!12 9920 ENDIF 9930 NEXT l% 9940 PROCset_l_data 9950 a_changed%=TRUE 9960ENDIF 9970ENDPROC 9980 9990DEF PROCmenu_warning(sub_menu%,sub_x%,sub_y%,menu%) 10000CASE openmenu% OF 10010 WHEN index_menu% 10020 c%=ASC($(index_menu%+40+menu%*24))-64 10030 ptr%=sub_index% 10040 PROCmenutitle("Select",ptr%) 10050 sub%=sub_block% 10060 FOR name%=1 TO names% 10070 IF g%(name%)=c% THEN 10080 ?sub%=name%-1 10090 len%=LEN(a$(name%,name)) 10100 $(sub%+1)=a$(name%,name) 10110 ptr%+=24 10120 !ptr%=0 10130 ptr%!4=0 10140 ptr%!8=(7<<24) OR (%100010001) 10150 ptr%!12=sub%+1 10160 ptr%!16=-1 10170 ptr%!20=len%+1 10180 IF len%>max% THEN max%=len% 10190 sub%+=len%+2 10200 ENDIF 10210 NEXT name% 10220 PROCendmenu(ptr%) 10230 SYS"Wimp_CreateSubMenu",,sub_menu%,sub_x%,sub_y% 10240ENDCASE 10250ENDPROC 10260 10270REM ----Non Wimp routines---- 10280 10290DEF PROCprint_year 10300SYS "XPDriver_Info" TO ;flags% 10310IF flags% AND 1 THEN PROCreport("Printer manager not installed."):ENDPROC 10320SYS"Hourglass_On" 10330pf%=OPENOUT("printer:") 10340SYS"PDriver_SelectJob",pf%,"Planner" 10350LOCAL ERROR 10360ON ERROR LOCAL:RESTORE ERROR:SYS "PDriver_AbortJob",pf%:CLOSE#pf%:SYS"Hourglass_Off":PROCreport(REPORT$):ENDPROC 10370SYS"PDriver_PageSize" TO ,w%,h%,l%,b%,r%,t% 10380opt0%=FNselected(w%(print%),2) 10390opt1%=NOT(FNselected(w%(print%),3)) 10400times%=-FNselected(w%(print%),6) 10410wx%=-p_x0%:wy%=-p_y0% 10420!rect%=0:rect%!4=0 10430rect%!8=p_x1%-p_x0%:rect%!12=p_y1%-p_y0% 10440!trans%=0:trans%!4=-(1<<15)*(1+times%)*0.8 10450trans%!8=(1<<15)*(1+times%)*0.8:trans%!12=0 10460FOR time%=0 TO times% 10470 !plotat%=b%:plotat%!4=t%+(t%-(b%+8000))*time% 10480 SYS"PDriver_GiveRectangle",0,rect%,trans%,plotat%,&FFFFFF00 10490 SYS"PDriver_DrawPage",1,blk%,0,0 TO more% 10500 WHILE more% 10510 x0%=!blk%-wx% 10520 y0%=blk%!4-wy% 10530 x1%=blk%!8-wx% 10540 y1%=blk%!12-wy% 10550 d%=FNredraw_year 10560 d%=FNredraw_c_horz 10570 d%=FNredraw_c_vert 10580 SYS"PDriver_GetRectangle",,blk% TO more% 10590 ENDWHILE 10600NEXT time% 10610SYS"PDriver_EndJob",pf% 10620RESTORE ERROR 10630CLOSE#pf% 10640SYS"Hourglass_Off" 10650PROCclosemenu 10660ENDPROC 10670 10680DEF PROCinsert 10690insptr%=insdata% 10700IF FNselected(w%(insert%),2) THEN PROCadd_ins(a$(this_name%,name)) 10710IF FNselected(w%(insert%),3) THEN 10720 FOR i%=address TO phone-1 10730 PROCadd_ins(a$(this_name%,i%)) 10740 NEXT i% 10750ENDIF 10760IF FNselected(w%(insert%),4) THEN PROCadd_ins(a$(this_name%,phone)) 10770IF FNselected(w%(insert%),5) THEN PROCadd_ins(a$(this_name%,other)) 10780IF FNselected(w%(insert%),6) THEN PROCadd_ins(a$(this_name%,dob)) 10790inslen%=insptr% 10800insptr%=insdata% 10810PROCclosemenu 10820a_changed%=TRUE 10830ENDPROC 10840 10850DEF PROCadd_ins(st$) 10860IF LENst$ THEN 10870 $insptr%=st$ 10880 insptr%+=LENst$+1 10890ENDIF 10900ENDPROC 10910 10920DEF PROCnew_settings 10930old%=s_changed% 10940PROCsetting_change(14,weekends) 10950PROCsetting_change(2,today) 10960PROCsetting_change(3,fonts) 10970PROCsetting_change(4,beep) 10980new%=FNiconval(w%(settings%),8) 10990IF new%<>birthday THEN 11000 birthday=new% 11010 s_changed%=TRUE 11020ENDIF 11030new$=FNicontext(w%(settings%),12) 11040IF new$<>other$ THEN 11050 other$=new$ 11060 s_changed%=TRUE 11070 PROCseticontext(w%(address%),10,other$+":") 11080ENDIF 11090IF s_changed%<>old% AND active%(year%) THEN PROCforceredraw(w%(year%)) 11100ENDPROC 11110 11120DEF PROCsetting_change(icon%,RETURN val) 11130new=FNselected(w%(settings%),icon%) 11140IF new<>val THEN 11150 val=new 11160 s_changed%=TRUE 11170ENDIF 11180ENDPROC 11190 11200DEF PROCc_birthdays 11210REPEAT 11220 b_person%+=1 11230 IF b_person%>names% THEN 11240 b_person%=0 11250 b_days%+=1 11260 a_date%+=1 11270 IF a_date%>mml%(a_month%) THEN 11280 a_date%=1 11290 a_month%+=1 11300 ENDIF 11310 ELSE 11320 IF flag%(b_person%)AND2 THEN 11330 st$=a$(b_person%,dob)+"." 11340 d%=FNnext_number(st$) 11350 m%=FNnext_number(st$) 11360 IF d%=a_date% AND m%=((a_month%+this_month%-2)MOD12)+1 THEN PROCbirthday(b_person%,a_date%,a_month%,b_days%) 11370 ENDIF 11380 ENDIF 11390UNTIL active%(birthday%) OR b_days%>birthday 11400b_checking%=active%(birthday%) 11410ENDPROC 11420 11430DEF PROCbirthday(person%,date%,month%,days%) 11440PROCseticontext(w%(birthday%),2,FNdate(date%,month%+this_month%-1,this_year%)) 11450PROCseticontext(w%(birthday%),3,a$(person%,name)) 11460PROCopenincentre(w%(birthday%)) 11470ENDPROC 11480 11490DEF FNnext_number(RETURN st$) 11500LOCAL num% 11510num%=0 11520WHILE LEFT$(st$,1)>="0" AND LEFT$(st$,1)<="9" 11530 num%=VAL(LEFT$(st$,1))+num%*10 11540 st$=MID$(st$,2) 11550ENDWHILE 11560st$=MID$(st$,2) 11570=num% 11580 11590DEF PROCc_alarms2 11600a_next%=c_first%(1,this_date%) 11610alarm_set%=0 11620WHILE a_next%<>-1 11630 IF (c_type%(a_next%)AND255)=3 AND (alarm_set%=0 OR c_time%(a_next%)<c_time%(alarm_set%)) THEN alarm_set%=a_next% 11640 a_next%=c_next%(a_next%) 11650ENDWHILE 11660ENDPROC 11670 11680DEF PROCc_alarms 11690a_checking%=TRUE 11700REPEAT 11710 IF a_next%=0 THEN a_next%=c_first%(a_month%,a_date%) ELSE a_next%=c_next%(a_next%) 11720 IF a_next%=-1 THEN 11730 a_date%+=1 11740 IF a_date%>mml%(a_month%) THEN 11750 a_date%=1 11760 a_month%+=1 11770 ENDIF 11780 a_next%=0 11790 ELSE 11800 IF (c_type%(a_next%)AND255)=3 THEN PROCalarm(a_next%,a_date%,a_month%) 11810 ENDIF 11820UNTIL active%(alarm%) OR (a_date%=this_date% AND a_month%=1) 11830a_checking%=active%(alarm%) 11840IF a_checking%=FALSE THEN 11850 PROCc_alarms2 11860 b_person%=0 11870 b_days%=0 11880 PROCc_birthdays 11890ENDIF 11900ENDPROC 11910 11920DEF PROCalarm(pos%,date%,month%) 11930PROCdial("999999") 11940c_type%(pos%)=c_type%(pos%)AND256 11950time$=FNdate(date%,month%+this_month%-1,this_year%) 11960time$=LEFT$(time$,LENtime$-3) 11970IF c_type%(pos%)AND256 THEN time$=FNtime(c_time%(pos%))+", "+time$ 11980PROCseticontext(w%(alarm%),2,time$) 11990PROCseticontext(w%(alarm%),3,c_entry$(pos%)) 12000PROCopenincentre(w%(alarm%)) 12010IF a_checking%=FALSE THEN PROCc_alarms2 12020ENDPROC 12030 12040DEF PROCopen_search(type%) 12050search_type%=type% 12060PROCseticontext(w%(search%),0,"") 12070PROCopenwindowasmenu(w%(search%)) 12080ENDPROC 12090 12100DEF PROCsearch(rec%,inc%) 12110st$=FNicontext(w%(search%),0) 12120CASE search_type% OF 12130 WHEN 1 12140 PROCget_n_data 12150 max%=notes% 12160 WHEN 2 12170 PROCget_a_data 12180 max%=names% 12190ENDCASE 12200match%=FALSE 12210rec%+=inc% 12220WHILE match%=FALSE AND rec%>=1 AND rec%<=max% 12230 CASE search_type% OF 12240 WHEN 1 12250 FOR n%=0 TO 5 12260 IF FNmatch(note$(rec%,n%),st$) THEN match%=TRUE 12270 NEXT n% 12280 WHEN 2 12290 FOR type=name TO dob 12300 IF FNmatch(a$(rec%,type),st$) THEN match%=TRUE 12310 NEXT type 12320 ENDCASE 12330 IF match%=FALSE THEN rec%+=inc% 12340ENDWHILE 12350IF match% THEN 12360 CASE search_type% OF 12370 WHEN 1 : PROCset_n(rec%) 12380 WHEN 2 : PROCset_a(rec%) 12390 ENDCASE 12400ELSE 12410 PROCclosewindow(w%(search%)) 12420ENDIF 12430ENDPROC 12440 12450DEF FNmatch(st$,search$) 12460LOCAL match%,i%,i2% 12470match%=FALSE 12480i%=INSTR(search$,"*") 12490IF i%>0 THEN 12500 i2%=INSTR(st$,LEFT$(search$,i%-1)) 12510 IF i2%>0 THEN match%=FNmatch(MID$(st$,i2%+i%),MID$(search$,i%+1)) 12520ELSE 12530 IF INSTR(st$,search$) THEN match%=TRUE 12540ENDIF 12550=match% 12560 12570DEF PROCset_n(new%) 12580IF active%(notepad%) AND this_note%>-1 THEN PROCget_n_data 12590IF (new%<>this_note% OR active%(notepad%)=FALSE) AND new%<>-1 THEN 12600 this_note%=new% 12610 FOR i%=0 TO 5 12620 PROCseticontext(w%(notepad%),i%+1,note$(this_note%,i%)) 12630 NEXT i% 12640 PROCresetcaret(w%(notepad%),-1) 12650 IF active%(notepad%)=FALSE THEN PROCopenup(w%(notepad%)) 12660 PROCset_n_scroll 12670ENDIF 12680IF new%=-1 THEN PROCclosewindow(w%(notepad%)) 12690ENDPROC 12700 12710DEF PROCget_n_data 12720FOR i%=0 TO 5 12730 new$=FNicontext(w%(notepad%),i%+1) 12740 IF new$<>note$(this_note%,i%) THEN 12750 note$(this_note%,i%)=new$ 12760 n_changed%=TRUE 12770 ENDIF 12780NEXT i% 12790ENDPROC 12800 12810DEF PROCblank_n 12820FOR i%=0 TO 5 12830 note$(this_note%,i%)="" 12840NEXT i% 12850ENDPROC 12860 12870DEF PROCinc_n(inc%) 12880IF this_note%+inc%>=1 AND this_note%+inc%<=notes% THEN PROCset_n(this_note%+inc%) 12890ENDPROC 12900 12910DEF PROCdrag_n 12920n_off%=mx%-n_s5% 12930PROCstartuserdrag(notepad%,0,n_s0%+n_off%,my%,n_s4*(notes%-1)+n_s0%+n_off%,my%) 12940ENDPROC 12950 12960DEF PROCset_n_scroll 12970PROCdeleteicon(w%(notepad%),n_si%) 12980n_s4=(n_s1%/notes%) 12990n_s5%=n_s0%+n_s4*(this_note%-1) 13000!q%=w%(notepad%) 13010q%!4=n_s5% 13020q%!8=n_s2% 13030q%!12=q%!4+n_s4 13040q%!16=n_s3% 13050q%!20=n_sf% 13060SYS"Wimp_CreateIcon",,q% TO n_si% 13070PROCredoicon(w%(notepad%),9) 13080ENDPROC 13090 13100DEF PROCadd_n 13110IF notes%<max_n% THEN 13120 notes%+=1 13130 PROCset_n(notes%) 13140 last_n%+=1 13150 n_num%(notes%)=last_n% 13160 PROCputcaret(w%(notepad%),1,0) 13170ELSE 13180 PROCreport("Too many notes.") 13190ENDIF 13200ENDPROC 13210 13220DEF PROCdelete_n 13230PROCblank_n 13240temp%=this_note% 13250WHILE temp%<notes% 13260 FOR i%=0 TO 5 13270 note$(temp%,i%)=note$(temp%+1,i%) 13280 NEXT i% 13290 n_num%(temp%)=n_num%(temp%+1) 13300 temp%+=1 13310ENDWHILE 13320temp%=this_note%-1 13330IF temp%=0 THEN temp%=1 13340this_note%=-1 13350IF notes%>1 THEN notes%-=1 13360PROCset_n(temp%) 13370ENDPROC 13380 13390DEF PROCremove_e(m%,d%,e%) 13400next%=c_first%(m%,d%) 13410IF next%=e% THEN 13420 c_first%(m%,d%)=c_next%(e%) 13430ELSE 13440 WHILE c_next%(next%)<>e% 13450 next%=c_next%(next%) 13460 ENDWHILE 13470 c_next%(next%)=c_next%(e%) 13480ENDIF 13490ENDPROC 13500 13510DEF PROCinsert_e(m%,d%,e%) 13520after%=-1 13530next%=c_first%(m%,d%) 13540c_next%(e%)=e% 13550IF c_type%(e%)AND256 THEN 13560 WHILE next%>-1 13570 IF c_time%(e%)>c_time%(next%) AND c_type%(next%)>=256 THEN after%=next% 13580 next%=c_next%(next%) 13590 ENDWHILE 13600ELSE 13610 WHILE next%>-1 13620 IF c_type%(next%)>c_type%(e%) THEN after%=next% 13630 next%=c_next%(next%) 13640 ENDWHILE 13650ENDIF 13660IF after%=-1 THEN 13670 SWAP c_first%(m%,d%),c_next%(e%) 13680ELSE 13690 SWAP c_next%(e%),c_next%(after%) 13700ENDIF 13710e_changed%=TRUE 13720ENDPROC 13730 13740DEF PROCmark_birthday 13750st$=a$(this_name%,dob)+"." 13760d%=FNnext_number(st$) 13770m%=FNnext_number(st$) 13780IF d%>=1 AND d%<=31 AND m%>=1 AND m%<=12 13790m%=((12+m%-this_month%)MOD12)+1 13800IF c_last%<c_max% THEN 13810 c_last%+=1 13820 c_entry$(c_last%)=LEFT$(a$(this_name%,name),INSTR(a$(this_name%,name)," ")-1)+"'s birthday" 13830 c_type%(c_last%)=1 13840 c_time%(c_last%)=0 13850 c_link%(0,c_last%)=a_num%(this_name%) 13860 c_link%(1,c_last%)=0 13870 PROCinsert_e(m%,d%,c_last%) 13880 IF d_month%=m% AND d_date%=d% AND active%(day%) THEN PROCforceredraw(w%(day%)) 13890 c_changed%=TRUE 13900 PROCredo_c(m%,d%) 13910ELSE 13920 PROCreport("Book of days is full.") 13930ENDIF 13940ENDPROC 13950 13960DEF PROCadd_e 13970IF c_last%<c_max% THEN 13980 c_last%+=1 13990 IF d_items%=0 THEN 14000 c_first%(d_month%,d_date%)=c_last% 14010 ELSE 14020 last%=c_first%(d_month%,d_date%) 14030 WHILE c_next%(last%)<>-1 14040 last%=c_next%(last%) 14050 ENDWHILE 14060 c_next%(last%)=c_last% 14070 ENDIF 14080 c_entry$(c_last%)="" 14090 c_type%(c_last%)=0 14100 c_time%(c_last%)=0 14110 c_next%(c_last%)=-1 14120 c_link%(0,c_last%)=0 14130 c_link%(1,c_last%)=0 14140 PROCset_e(c_last%) 14150 PROCcalc_d 14160ELSE 14170 PROCreport("Book of days is full.") 14180ENDIF 14190ENDPROC 14200 14210DEF PROCget_e 14220e_changed%=FALSE 14230o_entry$=c_entry$(this_entry%) 14240o_time%=c_time%(this_entry%) 14250o_type%=c_type%(this_entry%) 14260c_entry$(this_entry%)=FNicontext(w%(entry%),0) 14270FOR i%=0 TO 7 14280 IF FNselected(w%(entry%),e_icon%(i%)) THEN c_type%(this_entry%)=i% 14290NEXT i% 14300IF FNselected(w%(entry%),14) THEN c_type%(this_entry%)=c_type%(this_entry%)OR256 ELSE e_time%=0 14310c_time%(this_entry%)=e_time% 14320IF o_time%<>c_time%(this_entry%) OR o_type%<>c_type%(this_entry%) THEN 14330 PROCremove_e(d_month%,d_date%,this_entry%) 14340 PROCinsert_e(d_month%,d_date%,this_entry%) 14350ELSE 14360 IF o_entry$<>c_entry$(this_entry%) THEN e_changed%=TRUE 14370ENDIF 14380IF e_changed% THEN 14390 PROCforceredraw(w%(day%)) 14400 PROCredo_c(d_month%,d_date%) 14410 c_changed%=TRUE 14420ENDIF 14430IF d_month%=1 AND d_date%=this_date% THEN PROCc_alarms2 14440ENDPROC 14450 14460DEF PROCset_e(new%) 14470IF new%<>-1 THEN 14480 IF active%(entry%)=FALSE THEN PROCopenup(w%(entry%)) 14490 PROCseticontext(w%(entry%),0,c_entry$(new%)) 14500 PROCputcaret(w%(entry%),0,LENc_entry$(new%)) 14510 PROCset_e_time(c_time%(new%)) 14520 FOR i%=0 TO 7 14530 PROCselecticon(w%(entry%),e_icon%(i%),(i%=(c_type%(new%)AND255))) 14540 NEXT i% 14550 PROCselecticon(w%(entry%),14,c_type%(new%)AND256) 14560ELSE 14570 PROCclosewindow(w%(entry%)) 14580ENDIF 14590this_entry%=new% 14600ENDPROC 14610 14620DEF PROCset_e_time(e%) 14630PROCseticontext(w%(entry%),7,FNtime(e%)) 14640e_time%=e% 14650ENDPROC 14660 14670DEF FNtime(time%) 14680=RIGHT$("0"+STR$(time%DIV60),2)+":"+RIGHT$("0"+STR$(time%MOD60),2) 14690 14700DEF FNday(date%,month%,year%) 14710=(date%+year%+(year%DIV4)+mo%(month%)+(year%MOD4=0 AND month%<=2))MOD7 14720 14730DEF FNdate(date%,month%,year%) 14740IF year%MOD4=0 THEN ml%(2)=29 14750IF date%<1 THEN month%-=1 14760IF month%>12 THEN 14770 month%-=12 14780 year%+=1 14790ENDIF 14800IF month%<1 THEN 14810 month%+=12 14820 year%-=1 14830ENDIF 14840IF date%<1 THEN date%=ml%(month%) 14850=day$(FNday(date%,month%,year%))+" "+STR$(date%)+" "+LEFT$(month$(month%),3)+" "+STR$(year%) 14860 14870DEF PROCnew_day(d%,m%) 14880IF d%<>d_date% OR m%<>d_month% THEN 14890 d_month%=m% 14900 d_date%=d% 14910 PROCcalc_d 14920 t_date$=FNdate(d_date%,d_month%+this_month%-1,this_year%) 14930 PROCnewtitle(w%(day%),t_date$) 14940 IF active%(entry%) THEN PROCclosewindow(w%(entry%)) 14950 PROCnewtitle(w%(entry%),t_date$) 14960ENDIF 14970PROCopenup(w%(day%)) 14980ENDPROC 14990 15000DEF PROCredo_c(m%,d%) 15010d%=d%-1+sd%(m%) 15020PROCredobox(w%(year%),m%*c_width%,-(d%*c_height%+c_height%),m%*c_width%+c_width%,-d%*c_height%) 15030ENDPROC 15040 15050DEF PROCcalc_d 15060d_items%=0 15070next%=c_first%(d_month%,d_date%) 15080WHILE next%<>-1 15090 d_items%+=1 15100 next%=c_next%(next%) 15110ENDWHILE 15120PROCsetwindowextent(w%(day%),!d_icon%-8,-d_height%*d_items%,d_icon%!8+8,0) 15130PROCreopen(w%(day%)) 15140ENDPROC 15150 15160DEF PROCcalc_d_ords(e%) 15170d_icon%!4=-(e%+1)*d_height% 15180d_icon%!12=d_icon%!4+d_height% 15190ENDPROC 15200 15210DEF PROCload_c 15220c_file$=dir$+".Days" 15230IF FNfileexist(c_file$) THEN 15240 in_file=OPENIN(c_file$) 15250 mf%=this_month%+this_year%*12-1 15260 WHILE NOTEOF#in_file 15270 INPUT#in_file,m% 15280 INPUT#in_file,d% 15290 INPUT#in_file,colour% 15300 INPUT#in_file,end% 15310 m%-=mf% 15320 IF m%>=0 AND m%<=12 THEN 15330 c_colour%(m%,d%)=colour% 15340 prev%=-1 15350 WHILE PTR#in_file<>end% 15360 c_last%+=1 15370 INPUT#in_file,c_entry$(c_last%) 15380 INPUT#in_file,c_type%(c_last%) 15390 INPUT#in_file,c_time%(c_last%) 15400 INPUT#in_file,c_link%(0,c_last%) 15410 INPUT#in_file,c_link%(1,c_last%) 15420 c_next%(c_last%)=-1 15430 IF prev%=-1 THEN c_first%(m%,d%)=c_last% ELSE c_next%(prev%)=c_last% 15440 prev%=c_last% 15450 ENDWHILE 15460 ELSE 15470 PTR#in_file=end% 15480 ENDIF 15490 ENDWHILE 15500 CLOSE#in_file 15510ENDIF 15520c_changed%=FALSE 15530ENDPROC 15540 15550DEF PROCsave_c 15560out_file=OPENOUT(c_file$) 15570mf%=this_month%+this_year%*12-1 15580FOR m%=0 TO 12 15590 FOR d%=1 TO mml%(m%) 15600 IF c_colour%(m%,d%)>0 OR c_first%(m%,d%)>-1 THEN 15610 PRINT#out_file,m%+mf% 15620 PRINT#out_file,d% 15630 PRINT#out_file,c_colour%(m%,d%) 15640 start%=PTR#out_file 15650 PRINT#out_file,0 15660 next%=c_first%(m%,d%) 15670 WHILE next%>-1 15680 PRINT#out_file,c_entry$(next%) 15690 PRINT#out_file,c_type%(next%) 15700 PRINT#out_file,c_time%(next%) 15710 PRINT#out_file,c_link%(0,next%) 15720 PRINT#out_file,c_link%(1,next%) 15730 next%=c_next%(next%) 15740 ENDWHILE 15750 end%=PTR#out_file 15760 PTR#out_file=start% 15770 PRINT#out_file,end% 15780 PTR#out_file=end% 15790 ENDIF 15800 NEXT d% 15810NEXT m% 15820CLOSE#out_file 15830c_changed%=FALSE 15840ENDPROC 15850 15860DEF PROCl_select(new%) 15870l_selected%=new% 15880IF l_selected%=0 AND active%(record%) THEN PROCclosewindow(w%(record%)) 15890IF l_selected% THEN 15900 PROCopenup(w%(record%)) 15910 PROCset_l_data 15920ENDIF 15930ENDPROC 15940 15950DEF PROCset_l_data 15960PROCseticontext(w%(record%),2,a$(l_selected%,sent)) 15970PROCseticontext(w%(record%),3,a$(l_selected%,rec)) 15980IF type%(l_selected%)>-1 THEN 15990 PROCshadeicon(w%(record%),4,FALSE) 16000 PROCseticontext(w%(record%),4,FNlastbit(a$(l_selected%,file))) 16010 PROCsetfileicon(w%(record%),4,type%(l_selected%)) 16020ELSE 16030 PROCseticontext(w%(record%),4,"<no link>") 16040 PROCseticonvalid(w%(record%),4,"Sfile_xxx") 16050 PROCshadeicon(w%(record%),4,TRUE) 16060ENDIF 16070PROCnewtitle(w%(record%),a$(l_selected%,name)) 16080ENDPROC 16090 16100DEF PROCcalc_l_ords(l%) 16110l_icon%!4=l_y0%-(l%-1)*l_y1% 16120l_icon%!12=l_icon%!4+l_y1% 16130ENDPROC 16140 16150DEF PROCcalc_l 16160old%=letters% 16170l_change%=FALSE 16180letters%=0 16190FOR name%=1 TO names% 16200 IF flag%(name%)AND1 THEN 16210 letters%+=1 16220 IF l_list%(letters%)<>name% THEN l_list%(letters%)=name% 16230 ENDIF 16240NEXT name% 16250IF letters%<>old% THEN l_change%=TRUE 16260IF l_change% THEN PROCsetwindowextent(w%(letter%),!l_icon%,l_y0%-(letters%-1)*l_y1%,l_icon%!8,0) 16270IF active%(letter%) THEN PROCreopen(w%(letter%)) 16280ENDPROC 16290 16300DEF PROCdial(num$) 16310SYS"Sound_Configure" TO i% 16320IF i%<2 THEN VOICES 2 16330*channelvoice 1 1 16340*channelvoice 2 1 16350SYS"Sound_QBeat",-2 16360WHILE num$<>"" 16370digit%=INSTR(" 123456789*0#",LEFT$(num$,1))-2 16380IF digit%>-1 THEN 16390col%=digit%MOD3 16400row%=digit%DIV3 16410SYS"Sound_QSchedule",i%*30+5,,&FFF80001,&40000 OR col_tone%(col%) 16420SYS"Sound_QSchedule",-1,,&FFF80002,&40000 OR row_tone%(row%) 16430i%+=1 16440ENDIF 16450num$=MID$(num$,2) 16460ENDWHILE 16470ENDPROC 16480 16490DEF PROCsave_a 16500PROCget_a_data 16510out_file=OPENOUT(a_file$) 16520PRINT#out_file,last_a% 16530PRINT#out_file,names% 16540FOR name%=1 TO names% 16550 FOR type=name TO file 16560 PRINT#out_file,a$(name%,type) 16570 NEXT type 16580 PRINT#out_file,flag%(name%) 16590 PRINT#out_file,type%(name%) 16600 PRINT#out_file,a_num%(name%) 16610NEXT name% 16620CLOSE#out_file 16630a_changed%=FALSE 16640ENDPROC 16650 16660DEF PROCload_a 16670a_file$=dir$+".Address" 16680IF FNfileexist(a_file$) THEN 16690 in_file=OPENIN(a_file$) 16700 INPUT#in_file,last_a% 16710 INPUT#in_file,names% 16720 FOR name%=1 TO names% 16730 FOR type=name TO file 16740 INPUT#in_file,a$(name%,type) 16750 NEXT type 16760 INPUT#in_file,flag%(name%) 16770 INPUT#in_file,type%(name%) 16780 INPUT#in_file,a_num%(name%) 16790 NEXT name% 16800 CLOSE#in_file 16810ELSE 16820 last_a%=1 16830 names%=1 16840 this_name%=1 16850 a_num%(this_name%)=last_a% 16860 PROCget_a_data 16870ENDIF 16880a_changed%=FALSE 16890ENDPROC 16900 16910DEF PROCsort_a 16920PROCget_a_data 16930SYS"Hourglass_On" 16940FOR n%=1 TO names% 16950 ind%(n%)=n% 16960 temp$(n%)=FNlast_name(n%) 16970 temp$(n%)+=LEFT$(a$(n%,name),LENa$(n%,name)-LENtemp$(n%)) 16980NEXT n% 16990REPEAT 17000 swap%=FALSE 17010 FOR n%=1 TO names%-1 17020 IF temp$(ind%(n%))>temp$(ind%(n%+1)) AND temp$(ind%(n%+1))<>"" THEN 17030 SWAP ind%(n%),ind%(n%+1) 17040 swap%=TRUE 17050 ENDIF 17060 NEXT n% 17070UNTIL swap%=FALSE 17080FOR i%=name TO file 17090 FOR n%=1 TO names% 17100 temp$(n%)=a$(n%,i%) 17110 NEXT n% 17120 FOR n%=1 TO names% 17130 a$(n%,i%)=temp$(ind%(n%)) 17140 NEXT n% 17150NEXT i% 17160FOR n%=1 TO names% 17170 g%(n%)=flag%(n%) 17180NEXT n% 17190FOR n%=1 TO names% 17200 flag%(n%)=g%(ind%(n%)) 17210NEXT n% 17220FOR n%=1 TO names% 17230 g%(n%)=type%(n%) 17240NEXT n% 17250FOR n%=1 TO names% 17260 type%(n%)=g%(ind%(n%)) 17270NEXT n% 17280FOR n%=1 TO names% 17290 g%(n%)=a_num%(n%) 17300NEXT n% 17310FOR n%=1 TO names% 17320 a_num%(n%)=g%(ind%(n%)) 17330NEXT n% 17340SYS"Hourglass_Off" 17350new%=this_name% 17360this_name%=-1 17370PROCset_a(new%) 17380IF active%(record%) THEN PROCclosewindow(w%(record%)) 17390IF active%(letter%) THEN 17400 PROCcalc_l 17410 PROCforceredraw(w%(letter%)) 17420ENDIF 17430ENDPROC 17440 17450DEF PROCletter_a 17460PROCshadeicon(w%(address%),25,NOT FNselected(w%(address%),24)) 17470PROCget_a_data 17480IF l_selected%=this_name% AND active%(record%) THEN PROCclosewindow(w%(record%)) 17490IF active%(letter%) THEN PROCcalc_l 17500ENDPROC 17510 17520DEF PROCa_index 17530a%()=0 17540ptr%=index_menu% 17550FOR name%=1 TO names% 17560 c%=ASC(FNlast_name(name%))-64 17570 IF c%>=33 AND c%<=58 THEN c%-=32 17580 IF c%>=1 AND c%<=26 THEN 17590 a%(c%)+=1 17600 g%(name%)=c% 17610 ENDIF 17620NEXT name% 17630PROCmenutitle("Index",ptr%) 17640FOR a%=1 TO 26 17650 st$=CHR$(a%+64)+">+,sub_index%," 17660 IF a%(a%) THEN PROCmenuitem(st$,ptr%) 17670NEXT a% 17680PROCendmenu(ptr%) 17690PROCopeniconmenu(w%(address%),20,index_menu%) 17700ENDPROC 17710 17720DEF PROCdrag_a 17730a_off%=mx%-a_s5% 17740PROCstartuserdrag(address%,0,a_off%+a_s0%,my%,a_s4*(names%-1)+a_off%+a_s0%,my%) 17750ENDPROC 17760 17770DEF PROCnull 17780PROCmouseinfo 17790CASE dragid% OF 17800 WHEN address% 17810 new%=((mx%-(a_off%+a_s0%))/a_s4)+1.5 17820 IF new%<1 THEN new%=1 ELSE IF new%>names% THEN new%=names% 17830 PROCset_a(new%) 17840 WHEN notepad% 17850 new%=((mx%-(n_off%+n_s0%))/n_s4)+1.5 17860 IF new%<1 THEN new%=1 ELSE IF new%>notes% THEN new%=notes% 17870 PROCset_n(new%) 17880ENDCASE 17890IF but%=0 AND dragid%>0 THEN PROCenddrag 17900IF insptr%<inslen% THEN 17910 PROCgetcaret 17920 IF cwind%<>w%(address%) THEN 17930 SYS"Wimp_ProcessKey",?insptr% 17940 insptr%+=1 17950 ENDIF 17960ENDIF 17970ENDPROC 17980 17990DEF FNthis_time 18000!q%=1 18010SYS"OS_Word",14,q% 18020=VAL(STR$~(q%?4))*60+VAL(STR$~(q%?5)) 18030 18040DEF PROCinc_a(inc%) 18050IF this_name%+inc%>=1 AND this_name%+inc%<=names% THEN PROCset_a(this_name%+inc%) 18060ENDPROC 18070 18080DEF PROCset_a(new%) 18090IF active%(address%) AND this_name%>-1 THEN PROCget_a_data 18100IF (this_name%<>new% OR active%(address%)=FALSE) AND new%<>-1 THEN 18110 this_name%=new% 18120 FOR type=name TO dob 18130 PROCseticontext(w%(address%),icon%(type),a$(this_name%,type)) 18140 NEXT type 18150 PROCselecticon(w%(address%),24,flag%(this_name%)AND1) 18160 PROCselecticon(w%(address%),15,flag%(this_name%)AND2) 18170 PROCshadeicon(w%(address%),25,(NOTflag%(this_name%))AND1) 18180 PROCresetcaret(w%(address%),-1) 18190 PROCset_a_scroll 18200 IF active%(address%)=FALSE THEN PROCopenup(w%(address%)) 18210ENDIF 18220IF new%=-1 THEN PROCclosewindow(w%(address%)) 18230ENDPROC 18240 18250DEF PROCget_a_data 18260LOCAL new% 18270FOR type=name TO dob 18280 new$=FNicontext(w%(address%),icon%(type)) 18290 IF new$<>a$(this_name%,type) THEN 18300 a_changed%=TRUE 18310 a$(this_name%,type)=new$ 18320 ENDIF 18330NEXT type 18340new%=0 18350IF FNselected(w%(address%),24) THEN new%=new%OR1 18360IF FNselected(w%(address%),15) THEN new%=new%OR2 18370IF new%<>flag%(this_name%) THEN 18380 a_changed%=TRUE 18390 flag%(this_name%)=new% 18400ENDIF 18410ENDPROC 18420 18430DEF PROCset_a_scroll 18440PROCseticonval(w%(address%),21,this_name%) 18450PROCseticonval(w%(address%),23,names%) 18460PROCdeleteicon(w%(address%),a_si%) 18470a_s4=(a_s1%/names%) 18480a_s5%=a_s0%+a_s4*(this_name%-1) 18490!q%=w%(address%) 18500q%!4=a_s5% 18510q%!8=a_s2% 18520q%!12=q%!4+a_s4 18530q%!16=a_s3% 18540q%!20=a_sf% 18550SYS"Wimp_CreateIcon",,q% TO a_si% 18560PROCredoicon(w%(address%),17) 18570ENDPROC 18580 18590DEF PROCblank_a 18600FOR type=name TO file 18610 a$(this_name%,type)="" 18620NEXT type 18630flag%(this_name%)=0 18640type%(this_name%)=-1 18650ENDPROC 18660 18670DEF PROCadd_a 18680IF names%=max_a% THEN 18690 PROCreport("256 names is the maximum.") 18700ELSE 18710 names%+=1 18720 type%(names%)=-1 18730 last_a%+=1 18740 a_num%(names%)=last_a% 18750 PROCset_a(names%) 18760 PROCputcaret(w%(address%),icon%(0),0) 18770ENDIF 18780ENDPROC 18790 18800DEF PROCdelete_a 18810PROCblank_a 18820IF this_name%<names% THEN 18830 FOR a%=this_name% TO names%-1 18840 FOR type=name TO file 18850 a$(a%,type)=a$(a%+1,type) 18860 NEXT type 18870 flag%(a%)=flag%(a%+1) 18880 type%(a%)=type%(a%+1) 18890 a_num%(a%)=a_num%(a%+1) 18900 NEXT a% 18910ENDIF 18920IF names%>1 THEN names%-=1 18930IF this_name%>names% THEN this_name%=names% 18940new%=this_name% 18950this_name%=-1 18960PROCset_a(new%) 18970a_changed%=TRUE 18980ENDPROC 18990 19000DEF FNlast_name(name%) 19010LOCAL st$ 19020st$=a$(name%,name) 19030WHILE INSTR(st$," ") 19040 st$=MID$(st$,INSTR(st$," ")+1) 19050ENDWHILE 19060=st$ 19070 19080DEF FNfileokay(filetype%) 19090ok%=FALSE 19100PROCmouseinfo 19110CASE wind% OF 19120 WHEN w%(record%) : ok%=TRUE 19130ENDCASE 19140=ok% 19150 19160DEF PROCdo_load 19170CASE wind% OF 19180 WHEN w%(record%) 19190 type%(l_selected%)=filetype% 19200 a$(l_selected%,file)=file$ 19210 PROCset_l_data 19220ENDCASE 19230ENDPROC 19240 19250REM ----WIMP Library routines---- 19260 19270DEF PROCnewspritearea(RETURN sprite%,size%) 19280IF sprite%>-1 THEN PROCloseblock(sprite%) 19290sprite%=FNgetblock(size%+16) 19300IF sprite%>-1 THEN 19310!sprite%=size%+16 19320sprite%!4=0 19330sprite%!8=16 19340sprite%!12=16 19350ENDIF 19360ENDPROC 19370 19380REM ==== message routines ==== 19390 19400DEF PROCpoll(poll_flags%) 19410SYS"Wimp_Poll",poll_flags%,blk% TO reason% 19420PROCsort_reason 19430ENDPROC 19440 19450DEF PROCpollidle(poll_flags%,time%) 19460SYS"Wimp_PollIdle",poll_flags%,blk%,time% TO reason% 19470PROCsort_reason 19480ENDPROC 19490 19500DEF PROCsort_reason 19510CASE reason% OF 19520 WHEN 0:IF null% THEN PROCnull 19530 WHEN 1:PROCredraw 19540 WHEN 2:PROCopenwindow 19550 WHEN 3:PROCclosewindow(!blk%) 19560 WHEN 4:IF sysflags%(FNid(!blk%))AND8 THEN d%=EVAL("FNleave_"+id$(FNid(!blk%))) 19570 WHEN 5:IF sysflags%(FNid(!blk%))AND8 THEN d%=EVAL("FNenter_"+id$(FNid(!blk%))) 19580 WHEN 6:PROCclick(!blk%,blk%!4,blk%!8,blk%!12,blk%!16) 19590 WHEN 7:PROCenddrag 19600 WHEN 8:PROCkey(!blk%,blk%!4,blk%!20,blk%!24) 19610 WHEN 9:PROCmenuselect 19620 WHEN 10:REM scroll request 19630 WHEN 11:mycaret%=FALSE 19640 WHEN 12:mycaret%=TRUE 19650 WHEN 17,18:PROCmessage(blk%!4,blk%!8,blk%!16) 19660 WHEN 19:PROCmessage_returned(blk%!16) 19670ENDCASE 19680ENDPROC 19690 19700DEF PROCmessage_returned(message%) 19710CASE message% OF 19720 WHEN 5 : SYS"Wimp_StartTask","Run "+FNstring(blk%+44) 19730ENDCASE 19740ENDPROC 19750 19760DEF PROCmessage(task%,ref%,message%) 19770IF (status%>0 AND message%>=1 AND message%<=7) OR task%=mytask% THEN message%=-1 19780CASE message% OF 19790 WHEN 0 : exit=TRUE 19800 WHEN 1 19810 wind%=blk%!20 19820 icon%=blk%!24 19830 filetype%=blk%!40 19840 IF FNfileokay(filetype%) THEN 19850 itrans%=0 19860 filesize%=blk%!36 19870 file$=FNstring(blk%+44) 19880 heapfile%=-1 19890 file%=EVAL("FNtransblock(filetype%)") 19900 IF heapfile%=-1 THEN heapfile%=file% 19910 blk%!20=file% 19920 blk%!24=filesize% 19930 IF blk%!20>-1 THEN PROCreply(18,6) 19940 ENDIF 19950 WHEN 2 19960 PROCsave(dragid%,FNstring(blk%+44),prepared%) 19970 IF saved% THEN PROCtelltoload ELSE PROCreport("Could not save file") 19980 WHEN 3 : PROCload(FNstring(blk%+44),blk%!40) 19990 WHEN 5 : PROCload(FNstring(blk%+44),blk%!40) 20000 WHEN 6 20010 togo%=filesize%-otrans% 20020 IF togo%>blk%!24 THEN togo%=blk%!24 20030 IF togo%+otrans%>filesize% THEN togo%=filesize%-otrans% 20040 SYS"Wimp_TransferBlock",mytask%,savebuff%+otrans%,task%,blk%!20,togo% 20050 blk%!24=togo% 20060 PROCreply(18,7) 20070 otrans%+=togo% 20080 IF otrans%=filesize% THEN d%=EVAL("FNfinishedtrans"+STR$~(misc%(dragid%))) 20090 WHEN 7 20100 itrans%+=blk%!24 20110 IF itrans%<filesize% THEN 20120 filesize%=itrans% 20130 d%=EVAL("FNloaded"+STR$~(filetype%)) 20140 ELSE 20150 IF FNextendblock(heapfile%,1024) THEN 20160 filesize%+=1024 20170 blk%!20=file%+itrans% 20180 blk%!24=filesize%-itrans% 20190 PROCreply(18,6) 20200 ELSE 20210 PROCloseblock(file%) 20220 PROCreport("Out of room.") 20230 ENDIF 20240 ENDIF 20250 WHEN 8 : PROCprequit 20260 WHEN 10: PROCaddtobootfile(blk%!20) 20270 WHEN 9,&400C1 : PROCnewmode 20280 WHEN &400C9 : 20290 id%=FNid(blk%!20) 20300 IF id%>-1 THEN 20310 IF sysflags%(id%)AND2 THEN d%=EVAL("FNclose_"+id$(id%)) 20320 ENDIF 20330 WHEN &400C0 : PROCmenu_warning(blk%!20,blk%!24,blk%!28,blk%!32) 20340ENDCASE 20350ENDPROC 20360 20370DEF PROCreply(type%,blk%!16) 20380blk%!12=ref% 20390SYS"Wimp_SendMessage",type%,blk%,task% 20400ENDPROC 20410 20420DEF PROCnewmode 20430!q%=11:q%!4=12:q%!8=4:q%!12=5:q%!16=3:q%!20=-1 20440SYS"OS_ReadVduVariables",q%,q% 20450scx%=(!q%+1)<<(q%!8) 20460scy%=(q%!4+1)<<(q%!12) 20470pixelw%=1<<q%!8:pixelh%=1<<q%!12 20480dcols%=q%!16 20490SYS"Wimp_ReadPalette",,deskpal% 20500ENDPROC 20510 20520DEF PROCprequit 20530IF a_changed% OR s_changed% OR n_changed% OR c_changed% THEN 20540 IF FNcheck("There is unsaved data, click Cancel to abort exit.")=FALSE THEN PROCreply(17,8) 20550ENDIF 20560ENDPROC 20570 20580DEF PROCaddtobootfile(handle%) 20590BPUT#file,"Run "+dir$ 20600ENDPROC 20610 20620DEF PROCtelltoload 20630PROCmouseinfo 20640blk%!20=wind% 20650blk%!24=icon% 20660blk%!28=mx% 20670blk%!32=my% 20680blk%!36=filesize% 20690blk%!40=filetype% 20700PROCreply(17,3) 20710ENDPROC 20720 20730DEF PROCdropfile(filename$,filetype%,filesize%) 20740PROCmouseinfo 20750blk%!12=0 20760blk%!16=1 20770blk%!20=wind% 20780blk%!24=icon% 20790blk%!28=mx% 20800blk%!32=my% 20810blk%!36=filesize% 20820blk%!40=filetype% 20830$(blk%+44)=FNlastbit(filename$)+CHR$0 20840!blk%=(LEN$(blk%+44)+48)ANDNOT3 20850SYS"Wimp_SendMessage",17,blk%,blk%!20,blk%!24 20860otrans%=0 20870ENDPROC 20880 20890REM - Sprite routines - 20900 20910DEF PROCloadsprites 20920spritefile$=dir$+".Sprites" 20930PROCfileinfo(spritefile$) 20940IF exist%=1 THEN 20950ssize%=filesize%+16 20960DIM sprites% ssize% 20970!sprites%=ssize% 20980sprites%!4=0 20990sprites%!8=16 21000sprites%!12=16 21010SYS"OS_SpriteOp",10+256,sprites%,spritefile$ 21020ELSE 21030sprites%=-1 21040ENDIF 21050ENDPROC 21060 21070DEF PROCputsprite(sprite%,sprite$,x%,y%,z1%,z2%) 21080SYS"OS_SpriteOp",24+256,sprite%,sprite$ TO ,,addr% 21090SYS"OS_SpriteOp",40+256,sprite%,sprite$ TO ,,,,,,mode% 21100s%=FNtables(addr%,mode%,spmode%,spal%,1,1,dgcol%,dscale%) 21110SYS"OS_SpriteOp",52+512,sprite%,addr%,x%,y%,8,dscale%,dgcol% 21120ENDPROC 21130 21140DEF FNtables(saddr%,spmode%,dmode%,pal%,z1%,z2%,gcol%,scale%) 21150LOCAL spal%,palblock% 21160palblock%=palblock2% 21170!scale%=(1<<FNmodevar(spmode%,4))*z1% 21180scale%!4=(1<<FNmodevar(spmode%,5))*z1% 21190scale%!8=(1<<FNmodevar(dmode%,4))*z2% 21200scale%!12=(1<<FNmodevar(dmode%,5))*z2% 21210spritepal%=(saddr%!32<>44) 21220scols%=FNmodevar(spmode%,3) 21230IF saddr%!32<>44 THEN spal%=FNspritepalette(saddr%) ELSE spal%=FNwpal(spmode%) 21240s%=FALSE 21250SYS"ColourTrans_SelectTable",spmode%,spal%,dmode%,pal%,gcol% 21260IF !scale%=scale%!8 AND scale%!4=scale%!12 AND FNmodevar(spmode%,3)=FNmodevar(dmode%,3) THEN 21270 cols%=FNmodevar(dmode%,3) 21280 IF cols%=63 THEN cols%=255 21290 s%=TRUE 21300 FOR c%=0 TO cols% 21310 IF gcol%?c%<>c% THEN s%=FALSE 21320 NEXT c% 21330ENDIF 21340=s% 21350 21360DEF FNspritepalette(saddr%) 21370cols%=FNmodevar(spmode%,3) 21380IF cols%>15 THEN cols%=15 21390FOR c%=0 TO cols% 21400palblock%!(c%<<2)=saddr%!(44+(c%<<3)) 21410NEXT c% 21420=palblock% 21430 21440DEF PROCcopypalette(faddr%,taddr%) 21450FOR a%=44 TO faddr%!32-4 STEP 4 21460 taddr%!a%=faddr%!a% 21470NEXT a% 21480ENDPROC 21490 21500REM - file handling - 21510 21520DEF PROCfileinfo(file$) 21530SYS"OS_File",5,file$ TO exist%,,,,filesize% 21540ENDPROC 21550 21560DEF FNfilesize(file$) 21570LOCAL exist%,filesize% 21580PROCfileinfo(file$) 21590=filesize% 21600 21610DEF FNfileexist(file$) 21620LOCAL exist%,filesize% 21630PROCfileinfo(file$) 21640=exist% 21650 21660DEF FNloadtemplate(title$) 21670SYS"Wimp_LoadTemplate",,blk%,ind%,indend%,fonttable%,title$ TO ,,ind%,,,,found% 21680IF found%=0 THEN 21690 PROCreport("Window "+title$+" not found.") 21700 wind%=0 21710ELSE 21720 IF sprites%<>-1 THEN blk%!64=sprites% 21730 SYS"Wimp_CreateWindow",,blk% TO wind% 21740ENDIF 21750=wind% 21760 21770DEF FNnameok(file$) 21780result%=TRUE 21790IF INSTR(file$,":")+INSTR(file$,".")=0 AND file$<>"<Wimp$Scrap>" THEN 21800PROCreport("To save, drag icon to a directory viewer.") 21810result%=FALSE 21820ENDIF 21830=result% 21840 21850REM - menus - 21860 21870DEF FNchange_menu_option(menu%,item%,RETURN olditem%,wind%,icon%) 21880d%=FALSE 21890IF item%>-1 AND item%<>olditem% THEN 21900 d%=TRUE 21910 PROCtickmenu(menu%,olditem%,FALSE) 21920 PROCtickmenu(menu%,item%,TRUE) 21930 olditem%=item% 21940 IF wind%<>0 THEN 21950 p%=menu%+28+item%*24 21960 IF p%!8 AND 1<<8 THEN a$=$(p%!12) ELSE a$=$(p%+12) 21970 PROCseticontext(wind%,icon%,a$) 21980 ENDIF 21990ENDIF 22000=d% 22010 22020DEF PROCtickmenu(menu%,item%,tick%) 22030p%=menu%+28+item%*24 22040IF tick% THEN !p%=!p% OR1 ELSE !p%=!p% ANDNOT1 22050ENDPROC 22060 22070DEF PROCmenutitle(title$,RETURN menuptr%) 22080oldptr%=menuptr% 22090$menuptr%=title$ 22100max%=LENtitle$ 22110menuptr%!12=&70207 22120menuptr%!20=44 22130menuptr%!24=0 22140menuptr%+=4 22150ENDPROC 22160 22170DEF PROCmenuitem(RETURN text$,RETURN menuptr%) 22180menuptr%+=24 22190!menuptr%=0 22200menuptr%!4=0 22210word$=FNnextword(text$) 22220token$=FNtoken(word$) 22230i1%=-1 22240WHILE token$<>"" 22250CASE token$ OF 22260WHEN ">" : menuptr%!4=EVAL(FNnextword(text$)) 22270WHEN "/" : !menuptr%=!menuptr% OR 1 22280WHEN "-" : !menuptr%=!menuptr% OR 2 22290WHEN "+" : !menuptr%=!menuptr% OR 8 22300WHEN "!" 22310 !menuptr%=!menuptr% OR 4 22320 valid$=FNnextword(text$) 22330 IF LENvalid$ THEN 22340 DIM i1% LENvalid$+1 22350 $i1%=valid$ 22360 ENDIF 22370ENDCASE 22380token$=FNtoken(word$) 22390ENDWHILE 22400menuptr%!8=(7<<24) OR %10001 22410IF !menuptr% AND 4 OR token$="#" THEN 22420PROCinditem(EVAL(FNnextword(text$)),i1%,EVAL(word$)) 22430ELSE 22440IF LENword$<=12 THEN 22450$(menuptr%+12)=word$ 22460ELSE 22470DIM i0% LENword$+1 22480$i0%=word$ 22490PROCinditem(i0%,-1,LENword$+1) 22500ENDIF 22510IF LENword$>max% THEN max%=LENword$ 22520ENDIF 22530ENDPROC 22540 22550DEF PROCendmenu(RETURN menuptr%) 22560!menuptr%=!menuptr% OR &80 22570menuptr%+=24 22580oldptr%!16=max%*16+12 22590ENDPROC 22600 22610DEF FNmenu(text$) 22620stext$=text$ 22630items%=0 22640text$+="," 22650title$=FNnextword(text$) 22660PROCmenutitle(title$,menuptr%) 22670WHILE text$<>"" 22680items%+=1 22690PROCmenuitem(text$,menuptr%) 22700ENDWHILE 22710PROCendmenu(menuptr%) 22720=oldptr% 22730 22740DEF PROCinditem(i0%,i1%,i2%) 22750menuptr%!8=menuptr%!8 OR 1<<8 22760menuptr%!12=i0% 22770menuptr%!16=i1% 22780menuptr%!20=i2% 22790IF i2%-1>max% AND (!menuptr% AND 4)=0 THEN max%=i2%-1 22800ENDPROC 22810 22820DEF FNtoken(RETURN word$) 22830token$="" 22840IF INSTR(">/!#-+",RIGHT$(word$)) THEN 22850token$=RIGHT$(word$,1) 22860word$=LEFT$(word$,LENword$-1) 22870ENDIF 22880=token$ 22890 22900DEF FNnextword(RETURN text$) 22910LOCAL word$,pos% 22920pos%=INSTR(text$,",") 22930word$=LEFT$(text$,pos%-1) 22940text$=MID$(text$,pos%+1) 22950=word$ 22960 22970DEF PROCclosemenu 22980SYS"Wimp_CreateMenu",,-1 22990ENDPROC 23000 23010REM - icons - 23020 23030DEF PROCshadeicon(!q%,q%!4,shade%) 23040SYS"Wimp_GetIconState",,q% 23050IF shade% THEN q%!8=1<<22 ELSE q%!8=0 23060q%!12=1<<22 23070IF (q%!24 AND q%!12)<>q%!8 THEN SYS"Wimp_SetIconState",,q% 23080ENDPROC 23090 23100DEF FNicontext(!q%,q%!4) 23110SYS"Wimp_GetIconState",,q% 23120IF q%!24AND(1<<8) THEN text$=$(q%!28) ELSE text$=$(q%+28) 23130=text$ 23140 23150DEF FNiconval(!q%,q%!4) 23160=VAL(FNicontext(!q%,q%!4)) 23170 23180DEF PROCredoicon(!q%,q%!4) 23190SYS"Wimp_GetIconState",,q% 23200SYS"Wimp_ForceRedraw",!q%,q%!8,q%!12,q%!16,q%!20 23210ENDPROC 23220 23230DEF PROCdeleteicon(!q%,q%!4) 23240SYS"Wimp_DeleteIcon",,q% 23250ENDPROC 23260 23270DEF PROCiconinfo(wind%,icon%,data%) 23280!data%=wind% 23290data%!4=icon% 23300SYS"Wimp_GetIconState",,data% 23310ENDPROC 23320 23330DEF FNselected(!q%,q%!4) 23340SYS"Wimp_GetIconState",,q% 23350=(((q%!24)AND(1<<21))>0) 23360 23370DEF FNcricon(!q%,q%!4,q%!8,q%!12,q%!16,q%!20,$(q%+24)) 23380SYS"Wimp_CreateIcon",,q% TO icon% 23390=icon% 23400 23410DEF FNbuttype(!q%,q%!4) 23420IF q%!4>=0 THEN SYS"Wimp_GetIconState",,q% ELSE q%!24=0 23430=((q%!24)>>12)AND15 23440 23450DEF PROCselecticon(!q%,q%!4,select%) 23460SYS"Wimp_GetIconState",,q% 23470IF select% THEN q%!8=1<<21 ELSE q%!8=0 23480q%!12=1<<21 23490IF (q%!24 AND q%!12)<>q%!8 THEN SYS"Wimp_SetIconState",,q% 23500ENDPROC 23510 23520DEF FNiconfc(!q%,q%!4) 23530SYS"Wimp_GetIconState",,q% 23540=((q%!24)>>24)AND15 23550 23560DEF PROCseticonfc(!q%,q%!4,col%) 23570SYS"Wimp_GetIconState",,q% 23580q%!8=col%<<24 23590q%!12=15<<24 23600IF (q%!24 AND q%!12)<>q%!8 THEN SYS"Wimp_SetIconState",,q% 23610ENDPROC 23620 23630DEF PROCseticonval(!q%,q%!4,val%) 23640PROCseticontext(!q%,q%!4,STR$(val%)) 23650ENDPROC 23660 23670DEF PROCseticontext(!q%,q%!4,text$) 23680SYS"Wimp_GetIconState",,q% 23690text$=LEFT$(text$,q%!36-1) 23700IF $(q%!28)<>text$ THEN 23710$(q%!28)=text$ 23720q%!8=0 23730q%!12=0 23740SYS"Wimp_SetIconState",,q% 23750ENDIF 23760ENDPROC 23770 23780DEF PROCseticonvalid(!q%,q%!4,text$) 23790SYS"Wimp_GetIconState",,q% 23800IF $(q%!32)<>text$ THEN 23810$(q%!32)=text$ 23820q%!8=0 23830q%!12=0 23840SYS"Wimp_SetIconState",,q% 23850ENDIF 23860ENDPROC 23870 23880DEF PROCsetfileicon(wind%,icon%,filetype%) 23890LOCAL rom%,ram%,sprite$,not% 23900IF filetype%<&1000 THEN 23910sprite$="file_"+RIGHT$("00"+STR$~(filetype%),3) 23920SYS"Wimp_BaseOfSprites" TO rom%,ram% 23930SYS"XOS_SpriteOp",24+256,rom%,sprite$ TO ;not% 23940not%=not%AND1 23950IF not% THEN SYS"XOS_SpriteOp",24+256,ram%,sprite$ TO ;not% 23960not%=not%AND1 23970ELSE 23980CASE filetype% OF 23990 WHEN &1000 : sprite$="directory" 24000 WHEN &2000 : sprite$="application" 24010OTHERWISE 24020 not%=TRUE 24030ENDCASE 24040ENDIF 24050IF not% THEN sprite$="file_xxx" 24060PROCseticonvalid(wind%,icon%,"S"+sprite$) 24070ENDPROC 24080 24090DEF FNicontp(!q%,q%!4) 24100SYS"Wimp_GetIconState",,q% 24110=q%!28 24120 24130DEF PROCstartuserdrag(id%,type%,blk%!24,blk%!28,blk%!32,blk%!36) 24140IF type%>256 THEN 24150 PROCwindowinfo(w%(id%)) 24160 blk%!24=blk%!4 24170 blk%!28=blk%!8 24180 blk%!32=blk%!12 24190 blk%!36=blk%!16 24200 type%-=256 24210ENDIF 24220!blk%=0 24230blk%!4=7 24240dragging%=TRUE 24250dragid%=id% 24260drag_type%=type% 24270SYS"Wimp_DragBox",,blk% 24280ENDPROC 24290 24300DEF PROCstartdrag(id%,icon%) 24310dragid%=id% 24320dragicon%=icon% 24330wind%=w%(dragid%) 24340PROCwindowinfo(wind%) 24350PROCiconinfo(wind%,icon%,blk%) 24360!blk%=0 24370blk%!4=5 24380blk%!8+=wx% 24390blk%!12+=wy% 24400blk%!16+=wx% 24410blk%!20+=wy% 24420blk%!24=0 24430blk%!28=0 24440blk%!32=scx% 24450blk%!36=scy% 24460IF drag% THEN 24470PROCiconinfo(wind%,icon%,q%) 24471sprite%=1 24472sprite$=FNicontext(wind%,icon%) 24480IF (q%!24)AND3=3 THEN sprite$=$((q%!32)+1):sprite%=sprites% 24490SYS"DragASprite_Start",197,sprite%,sprite$,blk%+8,blk%+24 24500ELSE 24510SYS"Wimp_DragBox",,blk% 24520ENDIF 24530ENDPROC 24540 24550REM - user interogation - 24560 24570DEF FNcheck(message$) 24580SYS"Wimp_DragBox",,-1 24590!q%=0 24600$(q%+4)=message$ 24610SYS"Wimp_ReportError",q%,19,"Message from "+program$ TO ,answer% 24620IF answer%=1 THEN =TRUE ELSE =FALSE 24630 24640DEF PROCreport(message$) 24650d%=FNquestion(message$,"OK","","") 24660ENDPROC 24670 24680DEF FNquestion(ans$(0),ans$(1),ans$(2),ans$(3)) 24690LOCAL status% 24700status%=2 24710PROCclosemenu 24720FOR i%=0 TO 3 24730 IF ans$(i%)="" THEN 24740 PROCremoveicon(w%(report%),i%) 24750 ELSE 24760 PROCreiniticon(w%(report%),i%) 24770 PROCseticontext(w%(report%),i%,ans$(i%)) 24780 ENDIF 24790NEXT i% 24800PROClosecaret 24810PROCopenincentre(w%(report%)) 24820IF beep% THEN VDU 7 24830answer%=0 24840REPEAT 24850 PROCpoll(1) 24860UNTIL answer% 24870PROCclosewindow(w%(report%)) 24880=answer% 24890 24900DEF FNclick_report 24910IF icon%>0 THEN answer%=icon% 24920=0 24930 24940REM - misc - 24950 24960DEF PROCquit 24970PROCclose_if_active(address%) 24980PROCclose_if_active(entry%) 24990PROCclose_if_active(letter%) 25000PROCclose_if_active(day%) 25010PROCclose_if_active(year%) 25020PROCclose_if_active(notepad%) 25030IF a_changed% OR s_changed% OR n_changed% OR c_changed% THEN 25040 CASE FNquestion("There is unsaved data.","Save","Quit","Cancel") OF 25050 WHEN 1 25060 PROCsave_changed 25070 exit=TRUE 25080 WHEN 2 : exit=TRUE 25090 ENDCASE 25100ELSE 25110 exit=TRUE 25120ENDIF 25130IF exit=TRUE THEN PROCpoll(0) 25140ENDPROC 25150 25160DEF PROCclosedown 25170PROCresetslot 25180FOR i%=1 TO 255 25190WHILE fonttable%?i% 25200SYS"Font_LoseFont",i% 25210fonttable%?i%-=1 25220ENDWHILE 25230NEXT i% 25240SYS"Wimp_CloseDown",mytask% 25250END 25260ENDPROC 25270 25280DEF FNmodevar(mode%,var%) 25290SYS"OS_ReadModeVariable",mode%,var% TO ,,val% 25300=val% 25310 25320DEF FNstring(b%) 25330LOCAL s$ 25340s$="" 25350WHILE ?b%>31 25360s$+=CHR$(?b%) 25370b%+=1 25380ENDWHILE 25390=s$ 25400 25410REM - windows - 25420 25430DEF PROCsetwindowextent(wind%,!q%,q%!4,q%!8,q%!12) 25440SYS"Wimp_SetExtent",wind%,q% 25450ENDPROC 25460 25470DEF PROCopenincentre(!blk%) 25480SYS"Wimp_GetWindowState",,blk% 25490m1%=blk%!12-blk%!4 25500m2%=blk%!16-blk%!8 25510blk%!4=(scx%-m1%)>>1 25520blk%!8=(scy%-m2%)>>1 25530blk%!12=(scx%+m1%)>>1 25540blk%!16=(scy%+m2%)>>1 25550blk%!28=-1 25560PROCopenwindow 25570ENDPROC 25580 25590DEF PROCnewtitle(!blk%,title$) 25600SYS"Wimp_GetWindowInfo",,blk% 25610IF $(blk%!76)<>title$ THEN 25620$(blk%!76)=title$ 25630IF active%(FNid(!blk%)) THEN 25640 SYS"Wimp_GetWindowOutline",,blk% 25650 SYS"Wimp_ForceRedraw",-1,blk%!4,blk%!16-44,blk%!12,blk%!16 25660ENDIF 25670ENDIF 25680ENDPROC 25690 25700DEF PROCforceredraw(!blk%) 25710SYS"Wimp_GetWindowInfo",,blk% 25720SYS"Wimp_ForceRedraw",!blk%,blk%!44,blk%!48,blk%!52,blk%!56 25730ENDPROC 25740 25750DEF PROCupdatewindow(!blk%) 25760SYS"Wimp_GetWindowInfo",,blk% 25770blk%!4=blk%!44 25780blk%!8=blk%!48 25790blk%!12=blk%!52 25800blk%!16=blk%!56 25810SYS"Wimp_UpdateWindow",,blk% TO more% 25820ENDPROC 25830 25840DEF PROCopenfully(!blk%,top%) 25850SYS"Wimp_GetWindowInfo",,blk% 25860blk%!12=blk%!4+(blk%!52-blk%!44) 25870blk%!8=blk%!16-(blk%!56-blk%!48) 25880IF top% THEN blk%!28=-1 25890PROCopenwindow 25900ENDPROC 25910 25920DEF PROCclosewindow(wind%) 25930LOCAL cid%,close% 25940cid%=FNid(wind%) 25950IF sysflags%(cid%)AND2 THEN close%=EVAL("FNclose_"+id$(cid%)) ELSE close%=TRUE 25960IF close% THEN 25970 active%(cid%)=FALSE 25980 PROCquickclosewindow(w%(cid%)) 25990ENDIF 26000ENDPROC 26010 26020DEF PROCclose_if_active(id%) 26030IF active%(id%) THEN PROCclosewindow(w%(id%)) 26040ENDPROC 26050 26060DEF PROCquickclosewindow(!q%) 26070SYS"Wimp_CloseWindow",,q% 26080ENDPROC 26090 26100DEF PROCreopen(wind%) 26110id%=FNid(wind%) 26120IF active%(id%) THEN 26130 !blk%=wind% 26140 SYS"Wimp_GetWindowState",,blk% 26150 PROCopenwindow 26160 PROCforceredraw(wind%) 26170ELSE 26180 PROCopenup(wind%) 26190ENDIF 26200ENDPROC 26210 26220DEF PROCwindowinfo(wind%) 26230!blk%=wind% 26240SYS"Wimp_GetWindowInfo",,blk% 26250wx%=blk%!4-blk%!20 26260wy%=blk%!16-blk%!24 26270ww%=blk%!12-blk%!4 26280wh%=blk%!16-blk%!8 26290ENDPROC 26300 26310DEF PROCinitwindords(id%) 26320PROCwindowinfo(w%(id%)) 26330wx%(id%)=wx% 26340wy%(id%)=wy% 26350ww%(id%)=ww% 26360wh%(id%)=wh% 26370ENDPROC 26380 26390DEF FNsavebox(filetype%,standard$,flags%) 26400wind%=FNwindow("save","save",0,0) 26410PROCseticontext(w%(wind%),3,"file_"+RIGHT$("00"+STR$~(filetype%),3)) 26420PROCseticontext(w%(wind%),1,standard$) 26430PROCseticontext(w%(wind%),2,standard$) 26440misc%(wind%)=filetype% 26450sysflags%(wind%)=flags% 26460=wind% 26470 26480DEF FNlastbit(file$) 26490WHILE INSTR(file$,".") 26500file$=MID$(file$,INSTR(file$,".")+1) 26510ENDWHILE 26520=file$ 26530 26540DEF PROCmouseinfo 26550SYS"Wimp_GetPointerInfo",,q% 26560mx%=!q% 26570my%=q%!4 26580but%=q%!8 26590wind%=q%!12 26600icon%=q%!16 26610ENDPROC 26620 26630DEF PROCsetfiletype(file$,filetype%) 26640SYS"OS_File",&12,file$,filetype% 26650ENDPROC 26660 26670DEF PROCshademenu(menu%,item%,shade%) 26680p%=menu%+36+item%*24 26690!p%=!p% ANDNOT(1<<22) 26700IF shade% THEN !p%=!p% OR(1<<22) 26710ENDPROC 26720 26730DEF PROCgetcaret 26740SYS"Wimp_GetCaretPosition",,q% 26750cwind%=!q% 26760cicon%=q%!4 26770cxoff%=q%!8 26780cyoff%=q%!12 26790cheight%=q%!16 26800cindex%=q%!20 26810ENDPROC 26820 26830DEF PROCputcaret(wind%,icon%,index%) 26840len%=LENFNicontext(wind%,icon%) 26850IF index%>len% THEN index%=len% 26860SYS"Wimp_SetCaretPosition",wind%,icon%,,,-1,index% 26870ENDPROC 26880 26890DEF PROCresetcaret(wind%,icon%) 26900SYS"Wimp_GetCaretPosition",,q% 26910IF (!q%=wind% AND (q%!4=icon% OR icon%=-1)) THEN 26920 icon%=q%!4 26930 index%=q%!20 26940 len%=LENFNicontext(wind%,icon%) 26950 IF index%>len% THEN index%=len% 26960 SYS"Wimp_SetCaretPosition",wind%,icon%,,,-1,index% 26970ENDIF 26980IF wind%=0 THEN SYS"Wimp_SetCaretPosition",!q%,q%!4,q%!8,q%!12,q%!16,q%!20 26990ENDPROC 27000 27010DEF PROClosecaret 27020IF mycaret% THEN SYS"Wimp_SetCaretPosition",-1 27030ENDPROC 27040 27050DEF PROCflashicon(!q%,q%!4) 27060FOR f%=1 TO 3 27070WAIT:WAIT 27080PROCselecticon(!q%,q%!4,FALSE) 27090WAIT:WAIT 27100PROCselecticon(!q%,q%!4,TRUE) 27110NEXT f% 27120ENDPROC 27130 27140DEF PROCopeniconmenu(!q%,q%!4,wind%) 27150openmenu%=wind% 27160SYS"Wimp_GetIconState",,q% 27170menux%=q%!16 27180menuy%=q%!20 27190PROCwindowinfo(!q%) 27200menux%+=wx% 27210menuy%+=wy% 27220SYS"Wimp_CreateMenu",,openmenu%,menux%,menuy% 27230menuid%=windows%+1 27240ENDPROC 27250 27260DEF FNinfowindow(i1$,i2$,i3$,i4$) 27270wind%=FNwindow("info","",0,0) 27280PROCseticontext(w%(wind%),1,i1$) 27290PROCseticontext(w%(wind%),2,i2$) 27300PROCseticontext(w%(wind%),3,i3$) 27310PROCseticontext(w%(wind%),4,i4$) 27320=wind% 27330 27340DEF PROCwimpinit(name$,sprite$,work$,no%,isize%) 27350pointermine%=FALSE 27360SYS"OS_GetEnv" TO autoload$ 27370autoload$=MID$(autoload$,INSTR(autoload$,CHR$34,INSTR(autoload$,CHR$34)+1)+2) 27380dragging%=0:drag_type%=0:dragid%=0 27390status%=0:mycaret%=FALSE 27400windows%=no%+1 27410program$=name$ 27420DIM blk% 10000,q% 256,ind% isize%,deskpal% 256,dgcol% 256,dscale% 16,palblock% 256,palblock2% 256 27430indend%=ind%+isize% 27440DIM messagelist% 100 27450p%=0 27460REPEAT 27470 READ message% 27480 messagelist%!p%=message% 27490 p%+=4 27500UNTIL message%=0 27510DATA 1,2,3,5,6,7,8,9,10,&400C0,&400C1,&400C9,0 27520$blk%="TASK" 27530SYS"Wimp_Initialise",310,!blk%,program$,messagelist% TO ,mytask% 27540iconbar%=FNcricon(-1,0,0,68,68,&2002,sprite$) 27550dir$=FNreadvar(work$+"$Dir") 27560SYS"XOS_SWINumberFromString",,"DragASprite_Start" TO ;drag% 27570drag%=(drag% AND 1)=0 27580SYS"OS_Byte",161,28 TO ,,bit% 27590IF (bit% AND 2)=0 THEN drag%=FALSE 27600SYS"Wimp_SlotSize",-1,-1 TO appsize% 27610PROCloadsprites 27620tft%=&FFF 27630dft%=&AFF 27640sft%=&FF9 27650exit=FALSE 27660DIM gcol% 256,pal2% 80,pal4% 80,scale% 16 27670FOR i%=0 TO 1 27680 pal2%!(4*(1-i%))=(&FFFFFF*i%)<<8 27690NEXT i% 27700FOR i%=0 TO 3 27710 pal4%!(4*(3-i%))=(&555555*i%)<<8 27720NEXT i% 27730PROCnewmode 27740DIM menubuffer% 4000,fonttable% 256 27750twind%=0 27760DIM w%(windows%),menu%(windows%),id$(windows%+1),misc%(windows%),active%(windows%),default%(5,windows%),sysflags%(windows%),wx%(windows%),wy%(windows%),ww%(windows%),wh%(windows%) 27770id$(windows%+1)="unknown" 27780DIM ans$(3) 27790menuptr%=menubuffer% 27800FOR i%=1 TO 255 27810fonttable%?i%=0 27820NEXT i% 27830w%(0)=-2:id$(0)="iconbar" 27840SYS"Wimp_OpenTemplate",,dir$+".Templates" 27850PROCinitwindows 27860report%=FNwindow("report","report",0,0) 27870SYS"Wimp_CloseTemplate" 27880beep%=TRUE 27890instant%=FALSE 27900ENDPROC 27910 27920REM ==== memory management ==== 27930 27940DEF FNspace(size%) 27950LOCAL room%,noroom%,new% 27960SYS"XWimp_SlotSize",appsize%+size%,-1 TO new%;noroom% 27970room%=((noroom%AND1)=0) 27980IF new%<appsize%+size% THEN room%=FALSE 27990IF room% THEN appinc%=new%-appsize% 28000=room% 28010 28020DEF PROCinitheap 28030heap%=HIMEM 28040heapsize%=8*1024 28050IF FNspace(heapsize%) THEN 28060 SYS"OS_Heap",0,heap%,,heapsize% 28070ELSE 28080 PROCerror("Out of room.") 28090ENDIF 28100ENDPROC 28110 28120DEF FNlargestblock 28130SYS"OS_Heap",1,heap% TO ,,largest% 28140=largest% 28150 28160DEF FNgetblock(size%) 28170LOCAL ok% 28180ok%=TRUE 28190WHILE ok% AND FNlargestblock<size% 28200 ok%=FNextendheap(8*1024) 28210ENDWHILE 28220IF ok% THEN 28230 SYS"OS_Heap",2,heap%,,size% TO ,,block% 28240ELSE 28250 block%=-1 28260 PROCreport("No room for operation.") 28270ENDIF 28280=block% 28290 28300DEF PROCloseblock(RETURN block%) 28310IF block%>-1 THEN SYS"OS_Heap",3,heap%,block% 28320block%=-1 28330PROCshrinkheap 28340ENDPROC 28350 28360DEF PROCshrinkheap 28370LOCAL ok%,size% 28380ok%=TRUE 28390size%=-1024*8 28400WHILE ok% 28410 SYS"XOS_Heap",5,heap%,,size% TO ;ok% 28420 ok%=((ok%AND1)=0) 28430 IF ok% THEN 28440 heapsize%=heap%!12 28450 ok%=FNspace(heapsize%) 28460 ENDIF 28470ENDWHILE 28480ENDPROC 28490 28500DEF FNextendheap(size%) 28510LOCAL ok% 28520ok%=FNspace(heapsize%+size%) 28530IF ok% THEN 28540 SYS"OS_Heap",5,heap%,,size% 28550 heapsize%=heap%!12 28560ELSE 28570 PROCreport("No room for this operation.") 28580ENDIF 28590=ok% 28600 28610DEF FNextendblock(RETURN block%,inc%) 28620LOCAL ok%, heapfull% 28630heapfull%=FALSE 28640REPEAT 28650 SYS"XOS_Heap",4,heap%,block%,inc% TO ,,block%;ok% 28660 ok%=((ok%AND1)=0) 28670 IF NOTok% THEN heapfull%=NOTFNextendheap(8*1024) 28680UNTIL ok% OR heapfull% 28690=ok% 28700 28710DEF PROCresetslot 28720SYS"Wimp_SlotSize",appsize%,-1 28730appinc%=0 28740ENDPROC 28750 28760REM ==== filing system routines ==== 28770 28780DEF FNstandardfilename(wind%) 28790=FNicontext(wind%,1) 28800 28810DEF PROCresetfilename(wind%) 28820PROCseticontext(wind%,2,FNstandardfilename(wind%)) 28830ENDPROC 28840 28850DEF PROCsave(id%,file$,prepared%) 28860saved%=FALSE 28870IF FNnameok(file$) THEN 28880IF prepared%=FALSE THEN prepared%=EVAL("FNprepare"+STR$~(misc%(id%))) 28890CASE prepared% OF 28900 WHEN -1 28910 SYS"OS_File",10,file$,misc%(id%),,savebuff%,savebuff%+filesize% 28920 d%=EVAL("FNsaved"+STR$~(misc%(id%))) 28930 WHEN -2 28940 d%=EVAL("FNsave"+STR$~(misc%(id%))) 28950ENDCASE 28960PROCclosemenu 28970PROCseticontext(w%(id%),2,filename$) 28980saved%=TRUE 28990ENDIF 29000ENDIF 29010ENDPROC 29020 29030REM ==== menu routines ==== 29040 29050DEF PROCopenwindowasmenu(window%) 29060PROCwindowinfo(window%) 29070PROCmouseinfo 29080IF my%-wh%/2<96 THEN my%=96+wh%/2 29090menux%=mx%-ww%/2 29100menuy%=my%+wh%/2 29110openmenu%=window% 29120id%=FNid(window%) 29130PROCreopenmenu 29140IF sysflags%(id%)AND1 THEN d%=EVAL("FNopen_"+id$(id%)) 29150ENDPROC 29160 29170DEF PROCiconbarmenu(text$) 29180menu%(0)=FNmenu(text$) 29190barheight%=items%*44+96 29200ENDPROC 29210 29220DEF PROCmenuselect 29230d%=EVAL("FNmenu_"+id$(menuid%)) 29240PROCmouseinfo 29250IF but%=1 THEN PROCreopenmenu 29260ENDPROC 29270 29280DEF PROCreopenmenu 29290IF sysflags%(id%)AND4 THEN d%=EVAL("FNpremenu_"+id$(id%)) 29300SYS"Wimp_CreateMenu",,openmenu%,menux%,menuy% 29310ENDPROC 29320 29330DEF PROCopenmenu(id%) 29340IF menu%(id%) THEN 29350menuid%=id% 29360openmenu%=menu%(id%) 29370IF id%=0 THEN menuy%=barheight% ELSE menuy%=my% 29380menux%=mx%-(openmenu%!16)/2-16 29390PROCreopenmenu 29400ENDIF 29410ENDPROC 29420 29430REM ==== window routines ==== 29440 29450DEF FNwindow(wind$,name$,menu%,flags%) 29460twind%+=1 29470IF twind%>windows% THEN ERROR 255,"More windows than declared." 29480w%(twind%)=FNloadtemplate(wind$) 29490PROCwindowinfo(w%(twind%)) 29500FOR d%=0 TO 5 29510default%(d%,twind%)=!(blk%+(d%<<2)+4) 29520NEXT d% 29530id$(twind%)=name$ 29540menu%(twind%)=menu% 29550sysflags%(twind%)=flags% 29560=twind% 29570 29580DEF PROCredraw 29590id%=FNid(!blk%) 29600SYS"Wimp_RedrawWindow",,blk% TO more% 29610PROCrectangleloop 29620ENDPROC 29630 29640DEF PROCrectangleloop 29650wx%=wx%(id%):wy%=wy%(id%):opt0%=FALSE:opt1%=FALSE 29660WHILE more% 29670x0%=blk%!28-wx% 29680y0%=blk%!32-wy% 29690x1%=blk%!36-wx% 29700y1%=blk%!40-wy% 29710d%=EVAL("FNredraw_"+id$(id%)) 29720SYS"Wimp_GetRectangle",,blk% TO more% 29730ENDWHILE 29740ENDPROC 29750 29760DEF FNid(find%) 29770found%=0 29780FOR i%=1 TO windows% 29790IF w%(i%)=find% THEN found%=i% 29800NEXT i% 29810=found% 29820 29830DEF PROCopenup(wind%) 29840!blk%=wind% 29850id%=FNid(wind%) 29860IF NOTactive%(id%) THEN 29870FOR d%=0 TO 5 29880!(blk%+(d%<<2)+4)=default%(d%,id%) 29890NEXT d% 29900ELSE 29910SYS"Wimp_GetWindowState",,blk% 29920ENDIF 29930blk%!28=-1 29940PROCopenwindow 29950ENDPROC 29960 29970DEF PROCopenwindow 29980LOCAL open_id% 29990open_id%=FNid(!blk%) 30000IF sysflags%(open_id%)AND16 THEN d%=EVAL("FNpreopen_"+id$(open_id%)) 30010SYS"Wimp_OpenWindow",,blk% 30020wx%(open_id%)=blk%!4-blk%!20 30030wy%(open_id%)=blk%!16-blk%!24 30040ww%(open_id%)=blk%!12-blk%!4 30050wh%(open_id%)=blk%!16-blk%!8 30060IF sysflags%(open_id%)AND1 THEN d%=EVAL("FNopen_"+id$(open_id%)) 30070active%(open_id%)=TRUE 30080ENDPROC 30090 30100DEF FNopen(!q%) 30110LOCAL open% 30120open%=FALSE 30130SYS"Wimp_GetWindowState",,q% 30140IF q%!32AND(1<<16) THEN open%=TRUE 30150=open% 30160 30170DEF PROCwindow_state(!blk%) 30180SYS"Wimp_GetWindowState",,blk% 30190ENDPROC 30200 30210DEF PROCredobox(wind%,x0%,y0%,x1%,y1%) 30220IF x1%<x0% THEN SWAP x0%,x1% 30230IF y1%<y0% THEN SWAP y0%,y1% 30240SYS"Wimp_ForceRedraw",wind%,x0%,y0%,x1%,y1% 30250ENDPROC 30260 30270DEF PROCinstantredobox(wind%,x0%,y0%,x1%,y1%) 30280IF x1%<x0% THEN SWAP x0%,x1% 30290IF y1%<y0% THEN SWAP y0%,y1% 30300id%=FNid(wind%) 30310!blk%=w%(id%) 30320blk%!4=x0% 30330blk%!8=y0% 30340blk%!12=x1% 30350blk%!16=y1% 30360SYS"Wimp_UpdateWindow",,blk% TO more% 30370instant%=TRUE 30380PROCrectangleloop 30390instant%=FALSE 30400ENDPROC 30410 30420DEF PROCstartupdatewindow(wind%,x0%,y0%,x1%,y1%) 30430!blk%=wind% 30440blk%!4=x0% 30450blk%!8=y0% 30460blk%!12=x1% 30470blk%!16=y1% 30480SYS"Wimp_UpdateWindow",,blk% TO more% 30490ENDPROC 30500 30510DEF PROCstartupdatewindowblock(wind%,x0%,y0%,x1%,y1%) 30520!blk%=wind% 30530IF x0%>x1% THEN SWAP x0%,x1% 30540IF y0%>y1% THEN SWAP y0%,y1% 30550blk%!4=x0%-4 30560blk%!8=y0%-4 30570blk%!12=x1%+4 30580blk%!16=y1%+4 30590SYS"Wimp_UpdateWindow",,blk% TO more% 30600ENDPROC 30610 30620DEF PROCdeletewindow(RETURN !q%) 30630SYS"Wimp_DeleteWindow",,q% 30640!q%=0 30650ENDPROC 30660 30670REM ==== icon routines ==== 30680 30690DEF PROCclick(mx%,my%,but%,wind%,icon%) 30700IF FNbuttype(wind%,icon%)=9 THEN PROCflashicon(wind%,icon%) 30710id%=FNid(wind%) 30720CASE but% OF 30730WHEN 64 30740 CASE FNbuttype(w%(id%),icon%) OF 30750 WHEN 6,7,8,10,14 : PROCstartdrag(id%,icon%) 30760 ENDCASE 30770WHEN 2 : PROCopenmenu(id%) 30780OTHERWISE 30790d%=EVAL("FNclick_"+id$(id%)) 30800ENDCASE 30810ENDPROC 30820 30830DEF PROCenddrag 30840dragging%=FALSE 30850drag_type%=0 30860SYS"Wimp_DragBox",,-1 30870PROCmouseinfo 30880IF drag% THEN SYS"DragASprite_Stop" 30890d%=EVAL("FNdrop_"+id$(dragid%)) 30900dragid%=0 30910ENDPROC 30920 30930DEF PROCstartdragbox(!q%,q%!4,q%!8,q%!12,q%!16,q%!20,q%!24,q%!28,q%!32,q%!36) 30940SYS"Wimp_DragBox",,q% 30950ENDPROC 30960 30970DEF PROCsetpointer(ptr$,ox%,oy%) 30980SYS"Wimp_SpriteOp",36,1,ptr$,2,ox%,oy%,0,0 30990IF ptr$<>"ptr_default" THEN pointermine%=TRUE ELSE pointermine%=FALSE 31000ENDPROC 31010 31020DEF PROCkey(wind%,icon%,index%,key%) 31030taken=EVAL("FNkey_"+id$(FNid(wind%))) 31040IF taken=FALSE THEN SYS"Wimp_ProcessKey",key% 31050ENDPROC 31060 31070DEF FNincicon(iicon%,dec%,inc%,lb%,ub%) 31080change%=FALSE 31090IF icon%=dec% OR icon%=inc% THEN 31100val%=VALFNicontext(wind%,iicon%) 31110val%+=(icon%=dec%)*2+1 31120IF val%>ub% THEN val%=ub% ELSE IF val%<lb% THEN val%=lb% 31130PROCseticontext(wind%,iicon%,STR$(val%)) 31140PROCresetcaret(wind%,iicon%) 31150change%=TRUE 31160ENDIF 31170ENDIF 31180=change% 31190 31200DEF PROCremoveicon(!q%,q%!4) 31210q%!8=(1<<24) 31220q%!12=(1<<2)OR(1<<5)OR(15<<24)OR(15<<12) 31230SYS"Wimp_SetIconState",,q% 31240ENDPROC 31250 31260DEF PROCreiniticon(!q%,q%!4) 31270q%!8=(1<<2)OR(1<<5)OR(7<<24)OR(3<<12) 31280q%!12=(1<<2)OR(1<<5)OR(15<<12)OR(15<<24) 31290SYS"Wimp_SetIconState",,q% 31300ENDPROC 31310 31320DEF FNiconkeys(data%) 31330taken=TRUE 31340icons%=0 31350WHILE data%?icons%<255 31360 icons%+=1 31370ENDWHILE 31380icons%-=1 31390found%=-1 31400FOR p%=0 TO icons% 31410 IF data%?p%=icon% THEN found%=p% 31420NEXT p% 31430newicon%=-1 31440IF found%>=0 THEN 31450 CASE key% OF 31460 WHEN 13 : newicon%=found%+1 31470 WHEN &18E : IF found%<icons% THEN newicon%=found%+1 31480 WHEN &18F : IF found%>0 THEN newicon%=found%-1 31490 WHEN &19E,&1AE,&1BE : newicon%=icons% 31500 WHEN &19F,&1AF,&1BF : newicon%=0 31510 OTHERWISE 31520 taken=FALSE 31530 ENDCASE 31540ENDIF 31550IF newicon%>icons% THEN taken=-2:newicon%=-1 31560IF newicon%>=0 THEN 31570 PROCgetcaret 31580 PROCputcaret(wind%,data%?newicon%,cindex%) 31590ENDIF 31600=taken 31610 31620REM ==== and the rest ==== 31630 31640DEF FNclick_=0 31650 31660DEF FNredraw_=0 31670 31680DEF FNkey_=0 31690 31700DEF FNdrop_=0 31710 31720DEF PROCerror(error$) 31730SYS"Hourglass_Smash" 31740CASE status% OF 31750 WHEN 1 31760 IF print THEN CLOSE#print 31770 report$="Print error, print cancelled" 31780OTHERWISE 31790 report$="An uncontrolable error has occured ("+error$+STR$(ERL)+"), shall I exit?" 31800ENDCASE 31810exit=FNcheck(report$) 31820status%=0 31830ENDPROC 31840 31850DEF FNwpal(mode%) 31860CASE FNmodevar(mode%,3) OF 31870 WHEN 63:p%=0 31880 WHEN 15:p%=deskpal% 31890 WHEN 3:p%=pal4% 31900 WHEN 1:p%=pal2% 31910ENDCASE 31920=p% 31930 31940DEF FNdrop_save 31950filetype%=misc%(dragid%) 31960id%=dragid% 31970prepared%=EVAL("FNprepare"+STR$~(filetype%)) 31980IF prepared% THEN PROCdropfile(FNicontext(w%(dragid%),2),filetype%,filesize%) 31990=0 32000 32010DEF FNclick_save 32020IF icon%=0 THEN PROCsave(id%,FNicontext(wind%,2),FALSE) 32030=0 32040 32050DEF FNkey_save 32060IF key%=13 THEN PROCsave(id%,FNicontext(wind%,2),FALSE):=TRUE 32070=0 32080 32090DEF FNspritename(sprite%,number%) 32100SYS"OS_SpriteOp",13+256,sprite%,q%,256,number% TO ,,,len% 32110q%?len%=13 32120=$q% 32130 32140DEF PROCload(file$,filetype%) 32150ok%=FNfileokay(filetype%) 32160IF ok% THEN ok%=FNfileexist(file$) 32170IF ok% THEN 32180 PROCreply(18,4) 32190 PROCdo_load 32200ENDIF 32210ENDPROC 32220 32230DEF FNreadvar($q%) 32240SYS"OS_ReadVarVal",q%,blk%,256,0,3 TO ,,len% 32250blk%?len%=13 32260=$blk%
� > <BigBook$Dir>.!RunImage �initiate � � �error(�$) ( 2next_time%=0 <ȕ �exit F' null%=dragging%�(insptr%<inslen%) P � alarm_set% � Z �pollidle(0,next_time%) d, ș"OS_ReadMonotonicTime" � new_time% n! � new_time%>=next_time% � xM � �this_time>=c_time%(alarm_set%) � �alarm(alarm_set%,this_date%,1) �# next_time%=new_time%+1000 � � � � � �poll(1+null%) � � �� ��closedown � �� �initiate �6�wimpinit("Big Book","!bigbook","BigBook",19,6000) ��init_s ��init_n ��init_c �init_a �init_l �init_m " �c_alarms ,� 6 @ � �init_m J� mp$(5,20) T� ^ h � �init_s rs_file$=dir$+".Settings" |� �fileexist(s_file$) � � in_file=�(s_file$) � �#in_file,weekends � �#in_file,today � �#in_file,fonts � �#in_file,beep � �#in_file,birthday � �#in_file,other$ � �#in_file �� � weekends=� � today=� � fonts=� � beep=� birthday=7 other$="Other" � &s_changed%=� 0� : D � �save_s Nout_file=�(s_file$) X�#out_file,weekends b�#out_file,today l�#out_file,fonts v�#out_file,beep ��#out_file,birthday ��#out_file,other$ ��#out_file �s_changed%=� �� � � � �init_n � �iconinfo(w%(notepad%),9,q%) �n_s0%=q%!8+4 �n_s1%=q%!16-q%!8-8 �n_si%=10 �$�iconinfo(w%(notepad%),n_si%,q%) �n_s2%=q%!12 n_s3%=q%!20 n_sf%=q%!24 max_n%=64 $� note$(max_n%,5),n_num%(max_n%) *n_file$=dir$+".Notes" 4� �fileexist(n_file$) � > in_file=�(n_file$) H �#in_file,notes% R �#in_file,last_n% \ � note%=1 � notes% f � i%=0 � 5 p# �#in_file,note$(note%,i%) z � i% � �#in_file,n_num%(note%) � � note% � �#in_file �� � notes%=1 � last_n%=1 � n_num%(notes%)=last_n% �� �this_note%=-1 �n_changed%=� �� � � � �save_n out_file=�(n_file$) �#out_file,notes% �#out_file,last_n% $� note%=1 � notes% . � i%=0 � 5 8" �#out_file,note$(note%,i%) B � i% L �#out_file,n_num%(note%) V� note% `�#out_file jn_changed%=� t� ~ � � �init_c � !q%=1 �ș"OS_Word",14,q% �this_year%=�(�~(?q%)) �this_month%=�(�~(q%?1)) �this_date%=�(�~(q%?2)) �9� month$(12),ml%(12),day$(6),sd%(12),mo%(12),mml%(12) �}month$()="","January","February","March","April","May","June","July","August","September","October","November","December" �/ml%()=0,31,28,31,30,31,30,31,31,30,31,30,31 �� m%=2 � 12 �% mo%(m%)=(mo%(m%-1)+ml%(m%-1))�7 �� m% 4day$()="Sun","Mon","Tue","Wed","Thu","Fri","Sat" � m%=0 � 12 month%=m%+this_month%-1 c_year%=this_year% ( � month%<1 � 2 c_year%-=1 < month%+=12 F � P � month%>12 � Z c_year%+=1 d month%-=12 n � x$ sd%(m%)=�day(1,month%,c_year%) � mml%(m%)=ml%(month%) �, � c_year%�4=0 � month%=2 � mml%(m%)=29 �� m% �Ac_width%=350:c_height%=40:border%=32:m_height%=40:d_width%=80 �;p_x0%=-(border%+d_width%):p_y0%=-(c_height%*37+border%) �5p_x1%=c_width%*13+border%:p_y1%=border%+m_height% �7�setwindowextent(w%(year%),p_x0%,p_y0%,p_x1%,p_y1%) �C�setwindowextent(w%(c_horz%),p_x0%,p_y1%-m_height%,p_x1%,p_y1%) �B�setwindowextent(w%(c_vert%),p_x0%,p_y0%,p_x0%+d_width%,p_y1%) �c_max%=300 �&� c_first%(12,31),c_colour%(12,31) �X� c_entry$(c_max%),c_type%(c_max%),c_time%(c_max%),c_next%(c_max%),c_link%(1,c_max%) �c_first%()=-1 c_last%=0 � d_icon% 40 !�iconinfo(w%(day%),0,d_icon%) "d_icon%+=8 ,�deleteicon(w%(day%),0) 6"d_height%=d_icon%!12-d_icon%!4 @d_date%=-1:d_month%=-1 J� l_icon%(1) T� i%=0 � 1 ^ � d% 40 h! �iconinfo(w%(day%),i%+1,d%) r l_icon%(i%)=d%+8 | �deleteicon(w%(day%),i%+1) �� i% �� e_icon%(7),e_icon$(7) �!e_icon%()=4,1,2,3,10,11,12,15 �Je_icon$()="none","birthday","todo","alarm","red","blue","green","gold" �� b_col%(15) �� i%=0 � 15 �) b_col%(i%)=�iconfc(w%(colours%),i%) �� i% �in_file=�(dir$+".Colours") �� i%=0 � 15 �2 �seticontext(w%(colours%),i%,��#in_file,12)) �� i% � �#in_file �load_c "a_date%=1:a_month%=0:a_next%=0 alarm_set%=0 &"� trans% 16,rect% 16,plotat% 8 0� : D � �init_l N!� l_list%(max_a%), l_icon% 40 X$�iconinfo(w%(letter%),1,l_icon%) bl_icon%+=8 ll_y0%=l_icon%!4 vl_y1%=l_icon%!12-l_icon%!4 ��deleteicon(w%(letter%),1) �letters%=-1 �l_selected%=-1 ��calc_l �� � � � �init_a �!�iconinfo(w%(address%),17,q%) �a_s0%=q%!8+4 �a_s1%=q%!16-q%!8-8 �a_si%=18 �$�iconinfo(w%(address%),a_si%,q%) �a_s2%=q%!12 a_s3%=q%!20 a_sf%=q%!24 max_a%=256 @name=0:address=1:phone=6:other=7:dob=8:sent=9:rec=10:file=11 *|� a$(max_a%,11), flag%(max_a%), type%(max_a%), a_num%(max_a%), icon%(8), a%(26), g%(max_a%), temp$(max_a%), ind%(max_a%) 4 icon%()=0,2,3,4,5,6,12,13,14 >�load_a Hthis_name%=1 R8� index_menu% 1024, sub_block% 2048, sub_index% 2048 \,�seticontext(w%(address%),10,other$+":") f� col_tone%(2),row_tone%(3) pcol_tone%()=160,167,174 zrow_tone%()=122,130,136,142 �&inslen%=0:insptr%=0:� insdata% 400 �� � �� �initwindows �`info%=�infowindow("Big Book","Diary, Address book,...","Barry Wickett","1.20 (17-Dec-1994)") �'entry%=�window("day","entry",0,%10) �Brecord%=�window("record","record",�menu("File Link,Unlink"),0) �� other% 14 �2othermenu%=�menu(" Enter date ,14!,,other%") �?recordmenu%=�menu("Date,Today,Yesterday,Other>,othermenu%") �*insert%=�window("insert","insert",0,0) �Lspecial%=�menu("Specials,Insert at Caret>,w%(insert%),Mark up birthday") �}address%=�window("addresses","address",�menu("Addresses,Add,Delete,Search,Sort-,Save-,Specials>,special%,Print..."),%110) Dletter%=�window("letters","letter",�menu("Letters,Print..."),%1) -colours%=�window("colours","colours",0,0) Yday%=�window("days","day",�menu("Day,Colours>,w%(colours%),Add entry,Print..."),%100) $)alarm%=�window("alarm","alarm",0,%10) .'print%=�window("print","print",0,0) 8Vyear%=�window("years","year",�menu("Book of Days,Print>-,w%(print%),Save"),%10011) B2birthday%=�window("birthday","birthday",0,%10) LNsavemenu%=�menu("Save,Days,Addresses,Letters,Notes,Settings-,All changes") VYmenu%=�window("menu","menu",�menu("Big Book,Info>,w%(info%),Save>,savemenu%,Quit"),0) `)c_horz%=�window("blank","c_horz",0,0) j)c_vert%=�window("blank","c_vert",0,0) t/settings%=�window("system","settings",0,%1) ~-notepad%=�window("notes","notepad",0,%10) �*search%=�window("search","search",0,0) �'multi%=�window("multi","multi",0,0) �1�iconbarmenu("Big Book,Info>,w%(info%),Quit") �� � �� �save_changed �� c_changed% � �save_c �� a_changed% � �save_a �� n_changed% � �save_n �� s_changed% � �save_s �� � � �menu_iconbar � !blk%=1 � �quit =0 (� �click_iconbar 2�openup(w%(menu%)) <=0 F P� �menu_menu ZȎ !blk% � d � 1 n Ȏ blk%!4 � x � 0 : �save_c � � 1,2 : �save_a � � 3 : �save_n � � 4 : �save_s � � 5 : �save_changed � � � � 2 : �quit �� �=0 � �� �click_menu �Ȏ icon% � �" � 1 : �openup(w%(settings%)) �C � 3 : � active%(notepad%) � �openup(w%(notepad%)) � �set_n(1) � 4 : �openup(w%(year%)) C � 5 : � active%(address%) � �openup(w%(address%)) � �set_a(1) � 6 : �openup(w%(letter%)) "� ,=0 6 @� �open_settings J� �active%(settings%) � T, �selecticon(w%(settings%),14,weekends) ^( �selecticon(w%(settings%),2,today) h( �selecticon(w%(settings%),3,fonts) r' �selecticon(w%(settings%),4,beep) |+ �seticonval(w%(settings%),8,birthday) �+ �seticontext(w%(settings%),12,other$) �� �=0 � �� �click_settings �Ȏ icon% � � � 16 � �new_settings �# �closewindow(w%(settings%)) �( � 15 : �closewindow(w%(settings%)) � � 17 � �new_settings � �save_s # �closewindow(w%(settings%)) $ � 5,6 : d%=�incicon(8,5,6,1,9) &� 0=0 : D� �close_birthday N$�quickclosewindow(w%(birthday%)) Xactive%(birthday%)=� b � b_checking% � �c_birthdays l=0 v �� �close_alarm �!�quickclosewindow(w%(alarm%)) �active%(alarm%)=� �� a_checking% � �c_alarms �=0 � �� �click_alarm �=0 � �� �click_colours �Ȏ icon% � �? � 0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15 : c_chosen%=icon% � � 16 : �closemenu � 17 - c_colour%(d_month%,d_date%)=c_chosen% ! �redo_c(d_month%,d_date%) �closemenu *� 4=0 > H� �menu_record R� !blk%=0 � \ a$(l_selected%,file)="" f type%(l_selected%)=-1 p �set_l_data z� �=0 � �� �click_record �Ȏ icon% � � � 4 �" file$=a$(l_selected%,file) � �fileinfo(file$) � � exist% � � �mouseinfo � blk%!12=0 � blk%!16=5 � blk%!20=wind% � blk%!24=icon% blk%!28=mx% blk%!32=my% blk%!36=filesize% $$ blk%!40=type%(l_selected%) . $(blk%+44)=file$+�0 8 !blk%=(�file$+48)��3 B( ș"Wimp_SendMessage",18,blk%,0 L � V+ �report("Letter file not found.") ` � j � 5,6 t r_which%=6-icon% ~+ $other%=�icontext(wind%,r_which%+2) �. �openiconmenu(wind%,icon%,recordmenu%) � � 10 � �set_a(l_selected%) � �openup(w%(address%)) �& � 11 : �closewindow(w%(record%)) �� �=0 � �� �key_search �� key%=13 � �search(0,1) �=0 � � �click_search :� search_type%=1 � this%=this_note% � this%=this_name% Ȏ icon% � � 2 : �search(0,1) ( � 3 : �search(this%,1) 2 � 4 : �search(this%,-1) <% � 5 : �closewindow(w%(search%)) F� P=0 Z d� �drop_notepad n=0 x �� �close_notepad ��get_n_data �=� � �� �click_notepad �Ȏ icon% � � � 7 : �inc_n(-1) � � 8 : �inc_n(1) � � n_si% : �drag_n � � 11 : �add_n � � 12 : �delete_n � � 13 : �open_search(1) �# � 14 : �start_multi(notepad%) � =0 "� �key_notepad ,� key%>=32 � key%<=255 � 6 st$=�icontext(wind%,icon%) @ � key%=127 � J � index%>0 � T+ st$=�st$,index%-1)+�st$,index%+1) ^' �seticontext(wind%,icon%,st$) h � r � |/ st$=�st$,index%)+�(key%)+�st$,index%+1) � index%+=1 � rem$="" � first%=� � � �* � rem$<>"" � st$<>"" � rem$+=" " � st$=rem$+st$ � rem$="" � � �st$>30 � � p%=30 � � �/ � �st$,p%,1)=" " � p%=-p% � p%-=1 � � p%<=0 � � p%=0 � rem$=�st$,31) st$=�st$,30) � & p%=-p% 0 rem$=�st$,p%+1) : st$=�st$,p%-1) D � N � X' �seticontext(wind%,icon%,st$) b � first% � l � index%<=�st$ � v cicon%=icon% � cindex%=index% � � � cicon%=icon%+1 �# cindex%=index%-�st$-1 � � � first%=� � � � icon%+=1 �1 � icon%<=6 � st$=�icontext(wind%,icon%) � � rem$="" � icon%>6 � � cicon%=7 � � �add_n �$ �seticontext(wind%,1,rem$) cicon%=1 � ' �putcaret(wind%,cicon%,cindex%) � *� 4� key%=13 � �add_n >=0 H R� �key_address \� key%=13 � �add_a f=0 p z� �click_address �Ȏ icon% � � � 16 : �inc_a(-1) � � 19 : �inc_a(1) � � a_si% : �drag_a � � 24 : �letter_a � � 20 : �a_index �" � 25 : �l_select(this_name%) �. � 26 : �dial(�icontext(w%(address%),12)) �� �=0 � �� �premenu_address �&�seticontext(w%(insert%),5,other$) =0 � �menu_address $Ȏ !blk% � . � 0 : �add_a 8 � 1 : �delete_a B � 2 : �open_search(2) L � 3 : � names%>1 � �sort_a V � 4 : �save_a `' � 5 : � blk%!4=1 � �mark_birthday j" � 6 : �start_multi(address%) t� ~=0 � �� �close_address ��get_a_data �=� � �� �drop_address �=0 � �� �key_entry �� key%=13 � � �get_e � �closewindow(w%(entry%)) � =0 � �close_entry ( �get_e 2=� < F� �click_entry PȎ icon% � Z8 � 1,2,3,4,10,11,12,15 : �selecticon(wind%,icon%,�) d � 13 n �get_e x �closewindow(w%(entry%)) � � 5,6,8,9 � h%=e_time%�60 � m%=e_time%�60 � Ȏ icon% � � � 5 : h%-=1 � � 6 : h%+=1 � � 9 : m%-=1 � � 8 : m%+=1 � � �' � h%>23 � h%=0 � � h%<0 � h%=23 �' � m%<0 � m%=59 � � m%>59 � m%=0 � �set_e_time(h%*60+m%) �% � 16 : �startdrag(entry%,icon%) � 17 temp_entry%=this_entry% �set_e(-1) "/ �remove_e(d_month%,d_date%,temp_entry%) , �calc_d 6 � 18,19 @' c_link%(icon%-18,this_entry%)=0 J �forceredraw(w%(day%)) T� ^=0 h r� �drop_entry |Ȏ wind% � � � w%(notepad%) �1 c_link%(1,this_entry%)=n_num%(this_note%) � c_changed%=� � �forceredraw(w%(day%)) � � w%(address%) �1 c_link%(0,this_entry%)=a_num%(this_name%) � c_changed%=� � �forceredraw(w%(day%)) �� �=0 � �� �click_insert �Ȏ icon% � � 7 : �insert � 8 : �closemenu � &=0 0 :� �start_multi(w0%) Dmp$()="" N� i%=3 � 8 X' �seticonvalid(w%(multi%),i%,"Sp") b� i% l�set_multi(w0%,3) v�openup(w%(multi%)) �� � �� �click_multi �Ȏ icon% � �$ � 1 : �closewindow(w%(multi%)) � � 2 : �print_multi �� �=0 � �� �print_multi � ș "XPDriver_Info" � ;flags% �>� flags% � 1 � �report("Printer manager not installed."):� �ș"Hourglass_On" pf%=�("printer:") 'ș"PDriver_SelectJob",pf%,"Planner" � � M� � �:� �:ș "PDriver_AbortJob",pf%:�#pf%:ș"Hourglass_Off":�report(�$):� *-ș"PDriver_PageSize" � ,w%,h%,l%,b%,r%,t% 4!rect%=0:rect%!4=0 >rect%!8=1420:rect%!12=1820 H!trans%=1<<16:trans%!4=0 Rtrans%!8=0:trans%!12=1<<16 \!plotat%=l%:plotat%!4=b% f>ș"PDriver_GiveRectangle",0,rect%,trans%,plotat%,&FFFFFF00 p+ș"PDriver_DrawPage",1,blk%,0,0 � more% zȕ more% �C ș"Font_FindFont",,"Trinity.Medium",12*16,12*16,0,0 � handle% �? ș"Font_FindFont",,"Trinity.Bold",12*16,12*16,0,0 � bold% � ș"Font_SetFont",handle% �4 ș"ColourTrans_SetFontColours",0,&FFFFFF00,0,6 � � i%=0 � 5 � x0%=(i%�2)*700+20 � y0%=1820-(i%�2)*600 � � l%=0 � 20 � � mp$(i%,l%)<>"" � �" � �mp$(i%,l%),1)="!" � �$ ș"Font_SetFont",bold% �6 �fancy(�mp$(i%,l%),2),x0%,y0%-(l%+1)*32) �& ș"Font_SetFont",handle% � 2 �fancy(mp$(i%,l%),x0%,y0%-(l%+1)*32) � $ � . � l% 8 � i% B, ș"PDriver_GetRectangle",,blk% � more% L ș"Font_LoseFont",handle% V ș"Font_LoseFont",bold% `� jș"PDriver_EndJob",pf% t� � ~ �#pf% �ș"Hourglass_Off" ��closewindow(w%(multi%)) �� � �� �fancy(st$,x%,y%) � � tab% �tab%=�st$,�9) �� tab%=0 � �& ș"Font_Paint",,st$,%10100,x%,y% �� �+ � tab%>1 � �fancy(�st$,tab%-1),x%,y%) �# �fancy(�st$,tab%+1),x%+80,y%) � � �drop_multi $�set_multi(�id(wind%),dragicon%) (=0 2 <� �set_multi(w%,i%) Ficon$="" P� l%=0 � 20 Z mp$(i%-3,l%)="" d� l% nȎ w% � x � address% � icon$="paddress" � � type=name � dob �1 mp$(i%-3,type-name)=a$(this_name%,type) � � type �# mp$(i%-3,0)="!"+mp$(i%-3,0) � � day% � icon$="pdays" � p%=1 � mp$(i%-3,0)="!"+t_date$ �( next%=c_first%(d_month%,d_date%) � ȕ next%<>-1 � p%<=20 �J � c_type%(next%)�256 � time$=�time(c_time%(next%))+�9 � time$="" �, mp$(i%-3,p%)=time$+c_entry$(next%) next%=c_next%(next%) p%+=1 � " � notepad% , icon$="pnotepad" 6 � i2%=0 � 5 @5 mp$(i%-3,i2%)=�icontext(w%(notepad%),i2%+1) J � i2% T � letter% ^ icon$="pletters" h t$=�9+�9+�9+�9+�9 r@ mp$(i%-3,0)="!Name"+t$+"Last Sent"+�9+�9+"Last Received" | � letters% � � � l%=1 � letters% � name%=l_list%(l%) �M mp$(i%-3,l%)=a$(name%,name)+t$+a$(name%,sent)+�9+�9+a$(name%,rec) � � l% � � � � icon$="p" �� �*�seticonvalid(w%(multi%),i%,"S"+icon$) �/� icon$="p" � �report("Cannot print this.") �� � �� �click_print Ȏ icon% � � 4 : �closemenu � 5 : �print_year &� 0=0 : D� �preopen_year N� active%(year%) � X !q%=w%(c_horz%) b! ș"Wimp_GetWindowState",,q% l+ � q%!28=blk%!28 � blk%!28=w%(c_vert%) v� �=0 � �� �open_year �9� active%(year%)=� � today=� � �new_day(this_date%,1) ��window_state(w%(year%)) �!blk%=w%(c_horz%) �blk%!8=blk%!16-m_height% � blk%!24=0 ��openwindow ��window_state(w%(year%)) �!blk%=w%(c_vert%) �blk%!12=blk%!4+d_width% �blk%!16=blk%!16 blk%!20=0 blk%!28=w%(c_horz%) �openwindow =0 * 4� �close_year >�closewindow(w%(c_horz%)) H�closewindow(w%(c_vert%)) R=� \ f� �menu_year pȎ !blk% � z � 1 : �save_c �� �=0 � �� �click_year �mx%-=wx%(year%) �my%-=wy%(year%) �m%=mx%�c_width% �� m%>=0 � m%<=12 � �% d%=((-my%)�c_height%)-sd%(m%)+1 �. � d%>=1 � d%<=mml%(m%) � �new_day(d%,m%) �� �=0 � � �redraw_year font_col%=-1 � fonts � $C ș"Font_FindFont",,"Trinity.Medium",12*16,12*16,0,0 � handle% . ș"Font_SetFont",handle% 8� Bm0%=x0%�c_width% Lm1%=x1%�c_width% Vd1%=(-y0%)�c_height% `d0%=(-y1%)�c_height% j� m%=m0% � m1% t � m%>=0 � m%<=12 � ~) month%=((m%+this_month%+10)�12)+1 � x_pos%=wx%+m%*c_width% � � d%=d0% � d1% �/ � d%>=sd%(m%) � d%<sd%(m%)+mml%(m%) � �# y_pos%=wy%-d%*c_height% � date%=d%-sd%(m%)+1 � � opt1% � � f_col%=0 � � �( f_col%=c_colour%(m%,date%) �D � f_col%=0 � weekends=� � (d%�7=0 � d%�7=6) � f_col%=1 � � �) � font_col%<>f_col% � fonts � b ș"ColourTrans_SetFontColours",0,!(deskpal%+f_col%*4),!(deskpal%+b_col%(f_col%)*4),6 font_col%=f_col% � � f_col% � (< ș"ColourTrans_SetGCOL",!(deskpal%+(f_col%*4)) 25 ȓ Ȑ x_pos%,y_pos%,c_width%,-c_height% < � F/ ș"ColourTrans_SetGCOL",deskpal%!28 P0 ȓ x_pos%,y_pos%,c_width%,-c_height% ZL � b_col%(f_col%)=0 � fonts=0 � ș"ColourTrans_SetGCOL",!deskpal% d. �print(�(date%),x_pos%+8,y_pos%-8) nz � c_first%(m%,date%)>-1 � opt0%=� � �print(�snip(c_entry$(c_first%(m%,date%)),c_width%-50),x_pos%+46,y_pos%-8) x � � � d% � � �� m% �'� fonts � ș"Font_LoseFont",handle% �=0 � �� �snip(st$,max%) �ȕ �string_width(st$)>max% � st$=�st$,�st$-1) �� �=st$ � �� �print(st$,x%,y%) � fonts � 0 ș"Font_Paint",handle%,st$,%10100,x%,y%-20 � " � x%,y% , �st$ 6� @� J T� �string_width(st$) ^� width%,x0%,x1% h � fonts � r1 ș"Font_StringBBox",handle%,st$ � ,x0%,,x1% | width%=x1%-x0% �, ș"Font_ConverttoOS",,width% � ,width% �� � width%=�st$*16 �� �=width% � �� �click_c_horz �=0 � �� �redraw_c_horz � � fonts � �C ș"Font_FindFont",,"Trinity.Medium",12*16,12*16,0,0 � handle% � ș"Font_SetFont",handle% > ș"ColourTrans_SetFontColours",0,!deskpal%,deskpal%!28,6 � ) ș"ColourTrans_SetGCOL",deskpal%!28 &� 0m0%=x0%�c_width% :m1%=x1%�c_width% Dy_pos%=wy%-8+p_y1% N� m%=m0% � m1% X � m%>=0 � m%<=12 � b) month%=((m%+this_month%+10)�12)+1 l` �print(month$(month%),wx%+m%*c_width%+(c_width%-�string_width(month$(month%)))/2,y_pos%) v � �� m% �'� fonts � ș"Font_LoseFont",handle% �=0 � �� �click_c_vert �=0 � �� �redraw_c_vert � � fonts � �C ș"Font_FindFont",,"Trinity.Medium",12*16,12*16,0,0 � handle% � ș"Font_SetFont",handle% �> ș"ColourTrans_SetFontColours",0,!deskpal%,deskpal%!28,6 �� !) ș"ColourTrans_SetGCOL",deskpal%!28 !� !d1%=(-y0%)�c_height% ! d0%=(-y1%)�c_height% !*x_pos%=wx%+8+p_x0% !4� d%=d0% � d1% !>G � d%>=0 � d%<=36 � �print(day$(d%�7),x_pos%,wy%-(d%*c_height%+8)) !H� d% !R'� fonts � ș"Font_LoseFont",handle% !\=0 !f !p� �premenu_day !z� i%=0 � 15 !�C �selecticon(w%(colours%),i%,(c_colour%(d_month%,d_date%)=i%)) !�� i% !�)c_chosen%=c_colour%(d_month%,d_date%) !�=0 !� !�� �menu_day !�Ȏ !blk% � !� � 1 : �add_e !� � 2 : �start_multi(day%) !�� !�=0 !� !�� �click_day "mx%-=wx%(day%) "my%-=wy%(day%) "$next%=c_first%(d_month%,d_date%) "$e%=0 ".ȕ next%<>-1 "8 �calc_d_ords(e%) "BG � mx%>!d_icon% � my%>d_icon%!4 � mx%<d_icon%!8 � my%<d_icon%!12 � "L link%=-1 "V � i%=0 � 1 "`Q � mx%>!l_icon%(i%) � mx%<l_icon%(i%)!8 � c_link%(i%,next%)>0 � link%=i% "j � i% "t Ȏ link% � "~ � 0 "� l_name%=-1 "� � n%=1 � names% "�8 � a_num%(n%)=c_link%(0,next%) � l_name%=n% "� � n% "� � l_name%>0 � "� �set_a(l_name%) "�# �openup(w%(address%)) "� � "�9 �report("Linked address has been deleted.") "� � "� � 1 "� l_note%=-1 # � n%=1 � notes% # 8 � n_num%(n%)=c_link%(1,next%) � l_note%=n% # � n% # � l_note%>0 � #( �set_n(l_note%) #2# �openup(w%(notepad%)) #< � #F6 �report("Linked note has been deleted.") #P � #Z � -1 #d �set_e(next%) #n � #x � #� next%=c_next%(next%) #� e%+=1 #�� #�=0 #� #�� �redraw_day #�$next%=c_first%(d_month%,d_date%) #�e%=0 #�ȕ next%<>-1 #� �calc_d_ords(e%) #�G � c_type%(next%)�256 � time$=�time(c_time%(next%))+" " � time$="" #�) $(d_icon%!20)=time$+c_entry$(next%) #�3 $(d_icon%!24)="S"+e_icon$(c_type%(next%)�255) $ ș"Wimp_PlotIcon",,d_icon% $ � i%=0 � 1 $ � c_link%(i%,next%) � $"! l_icon%(i%)!4=d_icon%!4 $,# l_icon%(i%)!12=d_icon%!12 $6( ș"Wimp_PlotIcon",,l_icon%(i%) $@ � $J � i% $T next%=c_next%(next%) $^ e%+=1 $h� $r=0 $| $�� �open_letter $�� �active%(letter%) � $� �calc_l $� l_selected%=0 $�� $�=0 $� $�� �redraw_letter $�� letters% � $� � l%=1 � letters% $� �calc_l_ords(l%) $�, � l_icon%!4<=y1% � l_icon%!12>=y0% � $� name%=l_list%(l%) %y $(l_icon%!20)=" "+a$(name%,name)+�32-�a$(name%,name)," ")+a$(name%,sent)+�15-�a$(name%,sent)," ")+a$(name%,rec) %$ ș"Wimp_PlotIcon",,l_icon% % � %& � l% %0� %:=0 %D %N� �menu_letter %X%� !blk%=0 � �start_multi(letter%) %b=0 %l %v� �click_letter %�mx%-=wx%(letter%) %�my%-=wy%(letter%) %�� letters% � %� new%=0 %� � l%=1 � letters% %� �calc_l_ords(l%) %�^ � !l_icon%<=mx% � l_icon%!4<=my% � l_icon%!8>=mx% � l_icon%!12>=my% � new%=l_list%(l%) %� � l% %� �l_select(new%) %�� %�=0 %� %�� �menu_unknown &Ȏ openmenu% � & � index_menu% &J � !blk%>=0 � blk%!4>=0 � �set_a(?(!(sub_index%+40+blk%!4*24)-1)+1) & � recordmenu% &* Ȏ !blk% � &4C � 0 : �new_l_sr(�date(this_date%,this_month%,this_year%)) &>E � 1 : �new_l_sr(�date(this_date%-1,this_month%,this_year%)) &H" � 2 : �new_l_sr($other%) &R � &\� &f=0 &p &z� �new_l_sr(new$) &�+� new$<>a$(l_selected%,sent+r_which%) � &�( a$(l_selected%,sent+r_which%)=new$ &� � l%=1 � letters% &�# � l_list%(l%)=l_selected% � &� �calc_l_ords(l%) &�R ș"Wimp_ForceRedraw",w%(letter%),!l_icon%,l_icon%!4,l_icon%!8,l_icon%!12 &� � &� � l% &� �set_l_data &� a_changed%=� &�� &�� &� '2� �menu_warning(sub_menu%,sub_x%,sub_y%,menu%) 'Ȏ openmenu% � ' � index_menu% '$+ c%=�($(index_menu%+40+menu%*24))-64 '. ptr%=sub_index% '8! �menutitle("Select",ptr%) 'B sub%=sub_block% 'L � name%=1 � names% 'V � g%(name%)=c% � '` ?sub%=name%-1 'j" len%=�(a$(name%,name)) 't$ $(sub%+1)=a$(name%,name) '~ ptr%+=24 '� !ptr%=0 '� ptr%!4=0 '�) ptr%!8=(7<<24) � (%100010001) '� ptr%!12=sub%+1 '� ptr%!16=-1 '� ptr%!20=len%+1 '�# � len%>max% � max%=len% '� sub%+=len%+2 '� � '� � name% '� �endmenu(ptr%) '�7 ș"Wimp_CreateSubMenu",,sub_menu%,sub_x%,sub_y% ( � ( � ( (� ----Non Wimp routines---- (( (2� �print_year (< ș "XPDriver_Info" � ;flags% (F>� flags% � 1 � �report("Printer manager not installed."):� (Pș"Hourglass_On" (Zpf%=�("printer:") (d'ș"PDriver_SelectJob",pf%,"Planner" (n� � (xM� � �:� �:ș "PDriver_AbortJob",pf%:�#pf%:ș"Hourglass_Off":�report(�$):� (�-ș"PDriver_PageSize" � ,w%,h%,l%,b%,r%,t% (�!opt0%=�selected(w%(print%),2) (�$opt1%=�(�selected(w%(print%),3)) (�#times%=-�selected(w%(print%),6) (�wx%=-p_x0%:wy%=-p_y0% (�!rect%=0:rect%!4=0 (�,rect%!8=p_x1%-p_x0%:rect%!12=p_y1%-p_y0% (�.!trans%=0:trans%!4=-(1<<15)*(1+times%)*0.8 (�/trans%!8=(1<<15)*(1+times%)*0.8:trans%!12=0 (�� time%=0 � times% (�3 !plotat%=b%:plotat%!4=t%+(t%-(b%+8000))*time% (�@ ș"PDriver_GiveRectangle",0,rect%,trans%,plotat%,&FFFFFF00 (�- ș"PDriver_DrawPage",1,blk%,0,0 � more% ) ȕ more% ) x0%=!blk%-wx% ) y0%=blk%!4-wy% )" x1%=blk%!8-wx% ), y1%=blk%!12-wy% )6 d%=�redraw_year )@ d%=�redraw_c_horz )J d%=�redraw_c_vert )T. ș"PDriver_GetRectangle",,blk% � more% )^ � )h� time% )rș"PDriver_EndJob",pf% )|� � )� �#pf% )�ș"Hourglass_Off" )��closemenu )�� )� )� � �insert )�insptr%=insdata% )�>� �selected(w%(insert%),2) � �add_ins(a$(this_name%,name)) )� � �selected(w%(insert%),3) � )� � i%=address � phone-1 )�# �add_ins(a$(this_name%,i%)) )� � i% )�� *?� �selected(w%(insert%),4) � �add_ins(a$(this_name%,phone)) *?� �selected(w%(insert%),5) � �add_ins(a$(this_name%,other)) *=� �selected(w%(insert%),6) � �add_ins(a$(this_name%,dob)) *&inslen%=insptr% *0insptr%=insdata% *:�closemenu *Da_changed%=� *N� *X *b� �add_ins(st$) *l� �st$ � *v $insptr%=st$ *� insptr%+=�st$+1 *�� *�� *� *�� �new_settings *�old%=s_changed% *� �setting_change(14,weekends) *��setting_change(2,today) *��setting_change(3,fonts) *��setting_change(4,beep) *�"new%=�iconval(w%(settings%),8) *�� new%<>birthday � *� birthday=new% + s_changed%=� +� +$new$=�icontext(w%(settings%),12) + � new$<>other$ � +* other$=new$ +4 s_changed%=� +>. �seticontext(w%(address%),10,other$+":") +H� +RA� s_changed%<>old% � active%(year%) � �forceredraw(w%(year%)) +\� +f +p"� �setting_change(icon%,� val) +z&new=�selected(w%(settings%),icon%) +�� new<>val � +� val=new +� s_changed%=� +�� +�� +� +�� �c_birthdays +�� +� b_person%+=1 +� � b_person%>names% � +� b_person%=0 +� b_days%+=1 +� a_date%+=1 ," � a_date%>mml%(a_month%) � , a_date%=1 , a_month%+=1 ,$ � ,. � ,8 � flag%(b_person%)�2 � ,B# st$=a$(b_person%,dob)+"." ,L d%=�next_number(st$) ,V m%=�next_number(st$) ,`k � d%=a_date% � m%=((a_month%+this_month%-2)�12)+1 � �birthday(b_person%,a_date%,a_month%,b_days%) ,j � ,t � ,~+� active%(birthday%) � b_days%>birthday ,�"b_checking%=active%(birthday%) ,�� ,� ,�+� �birthday(person%,date%,month%,days%) ,�N�seticontext(w%(birthday%),2,�date(date%,month%+this_month%-1,this_year%)) ,�2�seticontext(w%(birthday%),3,a$(person%,name)) ,� �openincentre(w%(birthday%)) ,�� ,� ,�� �next_number(� st$) ,� � num% ,� num%=0 - "ȕ �st$,1)>="0" � �st$,1)<="9" - num%=�(�st$,1))+num%*10 - st$=�st$,2) -� -(st$=�st$,2) -2 =num% -< -F� �c_alarms2 -P"a_next%=c_first%(1,this_date%) -Zalarm_set%=0 -dȕ a_next%<>-1 -nm � (c_type%(a_next%)�255)=3 � (alarm_set%=0 � c_time%(a_next%)<c_time%(alarm_set%)) � alarm_set%=a_next% -x a_next%=c_next%(a_next%) -�� -�� -� -�� �c_alarms -�a_checking%=� -�� -�Q � a_next%=0 � a_next%=c_first%(a_month%,a_date%) � a_next%=c_next%(a_next%) -� � a_next%=-1 � -� a_date%+=1 -�" � a_date%>mml%(a_month%) � -� a_date%=1 -� a_month%+=1 -� � . a_next%=0 . � .E � (c_type%(a_next%)�255)=3 � �alarm(a_next%,a_date%,a_month%) ." � .,9� active%(alarm%) � (a_date%=this_date% � a_month%=1) .6a_checking%=active%(alarm%) .@� a_checking%=� � .J �c_alarms2 .T b_person%=0 .^ b_days%=0 .h �c_birthdays .r� .|� .� .�� �alarm(pos%,date%,month%) .��dial("999999") .�#c_type%(pos%)=c_type%(pos%)�256 .�6time$=�date(date%,month%+this_month%-1,this_year%) .�time$=�time$,�time$-3) .�?� c_type%(pos%)�256 � time$=�time(c_time%(pos%))+", "+time$ .�$�seticontext(w%(alarm%),2,time$) .�-�seticontext(w%(alarm%),3,c_entry$(pos%)) .��openincentre(w%(alarm%)) .� � a_checking%=� � �c_alarms2 .�� .� /� �open_search(type%) /search_type%=type% /"�seticontext(w%(search%),0,"") /&"�openwindowasmenu(w%(search%)) /0� /: /D� �search(rec%,inc%) /N st$=�icontext(w%(search%),0) /XȎ search_type% � /b � 1 /l �get_n_data /v max%=notes% /� � 2 /� �get_a_data /� max%=names% /�� /�match%=� /�rec%+=inc% /�&ȕ match%=� � rec%>=1 � rec%<=max% /� Ȏ search_type% � /� � 1 /� � n%=0 � 5 /�3 � �match(note$(rec%,n%),st$) � match%=� /� � n% /� � 2 0 � type=name � dob 02 � �match(a$(rec%,type),st$) � match%=� 0 � type 0 � 0* � match%=� � rec%+=inc% 04� 0>� match% � 0H Ȏ search_type% � 0R � 1 : �set_n(rec%) 0\ � 2 : �set_a(rec%) 0f � 0p� 0z �closewindow(w%(search%)) 0�� 0�� 0� 0�� �match(st$,search$) 0�� match%,i%,i2% 0�match%=� 0�i%=�search$,"*") 0�� i%>0 � 0� i2%=�st$,�search$,i%-1)) 0�: � i2%>0 � match%=�match(�st$,i2%+i%),�search$,i%+1)) 0�� 0� � �st$,search$) � match%=� 0�� 1=match% 1 1� �set_n(new%) 1$5� active%(notepad%) � this_note%>-1 � �get_n_data 1.;� (new%<>this_note% � active%(notepad%)=�) � new%<>-1 � 18 this_note%=new% 1B � i%=0 � 5 1L< �seticontext(w%(notepad%),i%+1,note$(this_note%,i%)) 1V � i% 1`" �resetcaret(w%(notepad%),-1) 1j3 � active%(notepad%)=� � �openup(w%(notepad%)) 1t �set_n_scroll 1~� 1�*� new%=-1 � �closewindow(w%(notepad%)) 1�� 1� 1�� �get_n_data 1�� i%=0 � 5 1�' new$=�icontext(w%(notepad%),i%+1) 1�$ � new$<>note$(this_note%,i%) � 1�! note$(this_note%,i%)=new$ 1� n_changed%=� 1� � 1�� i% 1�� 2 2 � �blank_n 2� i%=0 � 5 2 note$(this_note%,i%)="" 2(� i% 22� 2< 2F� �inc_n(inc%) 2PL� this_note%+inc%>=1 � this_note%+inc%<=notes% � �set_n(this_note%+inc%) 2Z� 2d 2n � �drag_n 2xn_off%=mx%-n_s5% 2�P�startuserdrag(notepad%,0,n_s0%+n_off%,my%,n_s4*(notes%-1)+n_s0%+n_off%,my%) 2�� 2� 2�� �set_n_scroll 2�#�deleteicon(w%(notepad%),n_si%) 2�n_s4=(n_s1%/notes%) 2�#n_s5%=n_s0%+n_s4*(this_note%-1) 2�!q%=w%(notepad%) 2�q%!4=n_s5% 2�q%!8=n_s2% 2�q%!12=q%!4+n_s4 2�q%!16=n_s3% 2�q%!20=n_sf% 3#ș"Wimp_CreateIcon",,q% � n_si% 3�redoicon(w%(notepad%),9) 3� 3" 3,� �add_n 36� notes%<max_n% � 3@ notes%+=1 3J �set_n(notes%) 3T last_n%+=1 3^ n_num%(notes%)=last_n% 3h! �putcaret(w%(notepad%),1,0) 3r� 3| �report("Too many notes.") 3�� 3�� 3� 3�� �delete_n 3��blank_n 3�temp%=this_note% 3�ȕ temp%<notes% 3� � i%=0 � 5 3�) note$(temp%,i%)=note$(temp%+1,i%) 3� � i% 3�# n_num%(temp%)=n_num%(temp%+1) 3� temp%+=1 3�� 4temp%=this_note%-1 4� temp%=0 � temp%=1 4this_note%=-1 4&� notes%>1 � notes%-=1 40�set_n(temp%) 4:� 4D 4N� �remove_e(m%,d%,e%) 4Xnext%=c_first%(m%,d%) 4b� next%=e% � 4l! c_first%(m%,d%)=c_next%(e%) 4v� 4� ȕ c_next%(next%)<>e% 4� next%=c_next%(next%) 4� � 4� c_next%(next%)=c_next%(e%) 4�� 4�� 4� 4�� �insert_e(m%,d%,e%) 4� after%=-1 4�next%=c_first%(m%,d%) 4�c_next%(e%)=e% 4�� c_type%(e%)�256 � 4� ȕ next%>-1 5I � c_time%(e%)>c_time%(next%) � c_type%(next%)>=256 � after%=next% 5 next%=c_next%(next%) 5 � 5 � 5* ȕ next%>-1 543 � c_type%(next%)>c_type%(e%) � after%=next% 5> next%=c_next%(next%) 5H � 5R� 5\� after%=-1 � 5f$ Ȕ c_first%(m%,d%),c_next%(e%) 5p� 5z$ Ȕ c_next%(e%),c_next%(after%) 5�� 5�e_changed%=� 5�� 5� 5�� �mark_birthday 5�st$=a$(this_name%,dob)+"." 5�d%=�next_number(st$) 5�m%=�next_number(st$) 5�%� d%>=1 � d%<=31 � m%>=1 � m%<=12 5�!m%=((12+m%-this_month%)�12)+1 5�� c_last%<c_max% � 5� c_last%+=1 5�W c_entry$(c_last%)=�a$(this_name%,name),�a$(this_name%,name)," ")-1)+"'s birthday" 6 c_type%(c_last%)=1 6 c_time%(c_last%)=0 6+ c_link%(0,c_last%)=a_num%(this_name%) 6$ c_link%(1,c_last%)=0 6. �insert_e(m%,d%,c_last%) 68I � d_month%=m% � d_date%=d% � active%(day%) � �forceredraw(w%(day%)) 6B c_changed%=� 6L �redo_c(m%,d%) 6V� 6`& �report("Book of days is full.") 6j� 6t� 6~ 6�� �add_e 6�� c_last%<c_max% � 6� c_last%+=1 6� � d_items%=0 � 6�* c_first%(d_month%,d_date%)=c_last% 6� � 6�( last%=c_first%(d_month%,d_date%) 6� ȕ c_next%(last%)<>-1 6� last%=c_next%(last%) 6� � 6� c_next%(last%)=c_last% 6� � 7 c_entry$(c_last%)="" 7 c_type%(c_last%)=0 7 c_time%(c_last%)=0 7 c_next%(c_last%)=-1 7( c_link%(0,c_last%)=0 72 c_link%(1,c_last%)=0 7< �set_e(c_last%) 7F �calc_d 7P� 7Z& �report("Book of days is full.") 7d� 7n� 7x 7�� �get_e 7�e_changed%=� 7�"o_entry$=c_entry$(this_entry%) 7� o_time%=c_time%(this_entry%) 7� o_type%=c_type%(this_entry%) 7�1c_entry$(this_entry%)=�icontext(w%(entry%),0) 7�� i%=0 � 7 7�C � �selected(w%(entry%),e_icon%(i%)) � c_type%(this_entry%)=i% 7�� i% 7�Z� �selected(w%(entry%),14) � c_type%(this_entry%)=c_type%(this_entry%)�256 � e_time%=0 7� c_time%(this_entry%)=e_time% 7�E� o_time%<>c_time%(this_entry%) � o_type%<>c_type%(this_entry%) � 7�- �remove_e(d_month%,d_date%,this_entry%) 8- �insert_e(d_month%,d_date%,this_entry%) 8� 86 � o_entry$<>c_entry$(this_entry%) � e_changed%=� 8"� 8,� e_changed% � 86 �forceredraw(w%(day%)) 8@ �redo_c(d_month%,d_date%) 8J c_changed%=� 8T� 8^2� d_month%=1 � d_date%=this_date% � �c_alarms2 8h� 8r 8|� �set_e(new%) 8�� new%<>-1 � 8�/ � active%(entry%)=� � �openup(w%(entry%)) 8�/ �seticontext(w%(entry%),0,c_entry$(new%)) 8�- �putcaret(w%(entry%),0,�c_entry$(new%)) 8� �set_e_time(c_time%(new%)) 8� � i%=0 � 7 8�D �selecticon(w%(entry%),e_icon%(i%),(i%=(c_type%(new%)�255))) 8� � i% 8�2 �selecticon(w%(entry%),14,c_type%(new%)�256) 8�� 8� �closewindow(w%(entry%)) 8�� 8�this_entry%=new% 9� 9 9� �set_e_time(e%) 9&(�seticontext(w%(entry%),7,�time(e%)) 90e_time%=e% 9:� 9D 9N� �time(time%) 9X0=�"0"+�(time%�60),2)+":"+�"0"+�(time%�60),2) 9b 9l� �day(date%,month%,year%) 9vB=(date%+year%+(year%�4)+mo%(month%)+(year%�4=0 � month%<=2))�7 9� 9�� �date(date%,month%,year%) 9�� year%�4=0 � ml%(2)=29 9�� date%<1 � month%-=1 9�� month%>12 � 9� month%-=12 9� year%+=1 9�� 9�� month%<1 � 9� month%+=12 9� year%-=1 9�� 9�!� date%<1 � date%=ml%(month%) :T=day$(�day(date%,month%,year%))+" "+�(date%)+" "+�month$(month%),3)+" "+�(year%) : :� �new_day(d%,m%) : "� d%<>d_date% � m%<>d_month% � :* d_month%=m% :4 d_date%=d% :> �calc_d :H> t_date$=�date(d_date%,d_month%+this_month%-1,this_year%) :R! �newtitle(w%(day%),t_date$) :\2 � active%(entry%) � �closewindow(w%(entry%)) :f# �newtitle(w%(entry%),t_date$) :p� :z�openup(w%(day%)) :�� :� :�� �redo_c(m%,d%) :�d%=d%-1+sd%(m%) :�`�redobox(w%(year%),m%*c_width%,-(d%*c_height%+c_height%),m%*c_width%+c_width%,-d%*c_height%) :�� :� :� � �calc_d :�d_items%=0 :�$next%=c_first%(d_month%,d_date%) :�ȕ next%<>-1 :� d_items%+=1 :� next%=c_next%(next%) ;� ;K�setwindowextent(w%(day%),!d_icon%-8,-d_height%*d_items%,d_icon%!8+8,0) ;�reopen(w%(day%)) ;$� ;. ;8� �calc_d_ords(e%) ;Bd_icon%!4=-(e%+1)*d_height% ;L"d_icon%!12=d_icon%!4+d_height% ;V� ;` ;j � �load_c ;tc_file$=dir$+".Days" ;~� �fileexist(c_file$) � ;� in_file=�(c_file$) ;�% mf%=this_month%+this_year%*12-1 ;� ȕ ��#in_file ;� �#in_file,m% ;� �#in_file,d% ;� �#in_file,colour% ;� �#in_file,end% ;� m%-=mf% ;� � m%>=0 � m%<=12 � ;�" c_colour%(m%,d%)=colour% ;� prev%=-1 ;� ȕ �#in_file<>end% <