Home » Archimedes archive » Acorn User » AU 1995-04.adf » !Internet_StarterPak » !SLIPdial/!RunimageS
!SLIPdial/!RunimageS
This website contains an archive of files for the Acorn Electron, BBC Micro, Acorn Archimedes, Commodore 16 and Commodore 64 computers, which Dominic Ford has rescued from his private collection of floppy disks and cassettes.
Some of these files were originally commercial releases in the 1980s and 1990s, but they are now widely available online. I assume that copyright over them is no longer being asserted. If you own the copyright and would like files to be removed, please contact me.
Tape/disk: | Home » Archimedes archive » Acorn User » AU 1995-04.adf » !Internet_StarterPak |
Filename: | !SLIPdial/!RunimageS |
Read OK: | ✔ |
File size: | 11531 bytes |
Load address: | 0000 |
Exec address: | 0000 |
File contents
10REM >!Runimage 20ONERROR REPORT:PRINT" at ";ERL:END 30END=HIMEM+&2000 40PROCinit 50PROCloadcode 60PROCstartmsgtrans 70PROCgetenv 80PROCinitwimp 90ONERRORPROCerrorbox:END 100PROCloadconfig 110WHILEFNlomem(txtx%DIV2*txty%):END=HIMEM+&2000:ENDWHILE 120PROCinit_txt 130SYS"XOS_File",17,file$TOA%,,,,S% 140WHILEFNlomem(S%):END=HIMEM+&2000:ENDWHILE 150PROCinitscript(file$) 160A%=FNmodemdrv("") 170REPEAT 180 stage%=0 190 REPEAT 200 IFFNlomem(0)THENPROCwarn_txt(FNmsg0("MoreMem")):END=HIMEM+&2000 210 IFFNtestevent THENA$=FNgetevent ELSEA$=FNline(stage%):stage%+=1 220 return%=FNcommand(A$) 230 UNTILstage%>=count% ORrun%=FALSE 240 run%=FALSE:IFstage%>=count%THENPROCprint("",FNmsg0("Idle"),"") 250 PROCpaused 260UNTIL0 270END 280 290REM set up universal variables 300DEFPROCinit 310DIM tmp% 256,driver 4096 320SYS"OS_Byte",129,0,&FF TO,osver% 330sprsz%=&1B00 340redial%=FALSE 350fileno%=1:total%=0:pause%=FALSE:stop%=FALSE:run%=FALSE:taskstart%=0:highest%=-1 360device%=FALSE:oldline%=0:debug%=FALSE:errC%=0:fh1%=0:fh2%=0:online$="":stage%=0 370submax%=20:DIMcall_ret%(submax%),call_lock%(submax%) 380casmax%=10:DIMcase$(casmax%),casmatch% casmax%,aline$(3),aline%(3) 390menumax%=30:DIMumenu$(menumax%,1),usermenu$(1),logmenu$(1) 400jtmax%=50:DIMjt%(jtmax%),jt$(jtmax%):jtl%=0:return$="" 410vmax%=150:DIMvar$(vmax%,1),s4$(3),tget$(3),ihist$(10):ihist%=0 420almax%=10:DIMalarm$(almax%,1),alarmtime%(almax%),alarmid$(almax%) 430imax%=8:DIMifile$(imax%),ibar$(imax%),imenu$(imax%,1) 440DIMibarid$(imax%),ibar%(imax%) 450taskmax%=8:DIMtaskex$(taskmax%),taskn$(taskmax%),taskh%(taskmax%) 460twmax%=8:DIMtwexit$(twmax%),twname$(twmax%),twcom$(twmax%) 470DIMtwh%(twmax%),twf%(twmax%),tdata$(twmax%),tww%(twmax%) 480DIMtwy%(twmax%),two%(twmax%),twk%(twmax%),twt%(twmax%) 490tget%=-1:tww%()=0:two%()=0:twwmax%=29:txtx%=80:txty%=24 500maxev%=10:DIMevent$(maxev%),event%(maxev%),evtype%(maxev%):event%()=TRUE 510fmax%=10:DIMfileh%(fmax%),fileid$(fmax%),filewr%(fmax%),filen$(fmax%) 520msgmax%=25:msg_cs$="":msg_ce$="":msg_cm%=0:msg_cs%=0:msgc%=TRUE:msgt%=0 530sddir$=FNvarval("Slipdial$dir") 540sdres$=FNvarval("Slipdial$resources") 550sdlang$=sdres$+".UK":ch$="":autowinpos%=1:num$="none" 560ENDPROC 570 580REM set up wimp and related variables 590DEFPROCinitwimp 600DIM sprites% sprsz%:!sprites%=sprsz%:sprites%!8=0 610SYS "OS_SpriteOp",&109,sprites% 620IFFNmergesprites(sdres$+".Sprites")=0THENERROR0,"Couldn't load sprites" 630DIM taskid%4:$taskid%="TASK":Task$="SLIPdial" 640DIM msglist%4:!msglist%=0 650SYS "Wimp_Initialise",310,!taskid%,Task$,msglist% TO version%,task% 660IFversion%<310 THENERROR1,"Window Manager too old" 670stwx%=0:stwy%=0 680fh1%=FNopenin(sdres$+".!windows") 690IFfh1%>0THEN 700 stwx%=VALGET$#fh1%:stwy%=VALGET$#fh1% 710ENDIF 720PROCcf(fh1%) 730DIM q% &400,menudata% &200,icons% &100,buffer% &100 740SYS "Wimp_OpenTemplate",,sdlang$+".Templates" 750info%=FNloadtemp("Info") 760status%=FNloadtemp("Status") 770txt%=FNloadtemp("txtwin") 780config%=FNloadtemp("config") 790mess%=FNloadtemp("message") 800input%=FNloadtemp("input") 810yesno%=FNloadtemp("yesno") 820SYS "Wimp_CloseTemplate" 830PROCseticonstring(info%,4,"0.33 (17-Feb-1995)"):PROCsetv("$ver","33") 840sdic$="nodev":icon0%=FNic(sdic$,-1) 850IFicon0%=0THENERROR0,"Couldn't create icon" 860M%=%10000001100000110000:slice%=-20 870SYS"OS_ReadMonotonicTime"TOlastpoll%:time%=lastpoll% 880checkalarm%=time%:checkline%=time%:PROCcheckicon:PROCusericon("") 890ENDPROC 900 910DEFFNloadtemp(A$) 920LOCALb%,i%,s%,scr%,icon%,h% 930SYS"Wimp_LoadTemplate",,-1,0,0,-1,A$,0TO,b%,i% 940s%=FNclaimmem(scr%,b%,"TBUF"):DIMicon% i% 950SYS"Wimp_LoadTemplate",,scr%,icon%,icon%+i%,-1,A$,0 960IFA$="message"THENmsgttl%=scr%!72 970IFA$="Status"THENPROCsetwpos(scr%,stwx%,stwy%) 980scr%!64=sprites%:SYS"Wimp_CreateWindow",,scr% TOh%:PROCreleasemem(s%) 990=h% 1000 1010DEFPROCsetwpos(q%,x%,y%) 1020LOCALw%,h% 1030IFx%>0THEN 1040w%=q%!8-!q%:h%=q%!12-q%!4 1050!q%=x%:q%!8=x%+w% 1060q%!4=y%:q%!12=y%+h% 1070ENDIF 1080ENDPROC 1090 1100REM merge sprite file into slipdial sprite area 1110DEFFNmergesprites(A$) 1120LOCALs%,f%,n%,r%:r%=0 1130SYS"XOS_File",17,A$TOA%,,,,S% 1140SYS"XOS_SpriteOp",&108,sprites%TO,,s%,n%,,f% 1150IFA%=1ANDS%<=(s%-f%) THEN 1160SYS"XOS_SpriteOp",&10B+(n%=0),sprites%,A$TO;F% 1170IF(F%AND1)=0 THENr%=s%-f%-S% 1180ENDIF 1190=r% 1200 1210DEFFNsfree 1220LOCALs%,f%:SYS"XOS_SpriteOp",&108,sprites%TO,,s%,,,f% 1230=s%-f% 1240 1250REM places an icon on the iconbar, n%<0 is main icon, others are user icons 1260DEFFNic(A$,n%) 1270LOCALZ%,next%,w%,h% 1280SYS"OS_SpriteOp",&100+40,sprites%,A$TO,,,w%,h%:IFw%>200ORh%>70THEN=0 1290IFn%<0THEN 1300 !icons%=-1:next%=0 1310 REM dimension memory in known location & store name 1320 DIMibarname%12:$ibarname%=A$:icons%!24=ibarname% 1330ELSE 1340 next%=icon0% 1350 FORZ%=0TOn%:IFibar%(Z%)>0 THENnext%=ibar%(Z%) 1360 NEXT:!icons%=-3 1370 REM dimension some memory & store name 1380 DIMicons%!24 12:$(icons%!24)=A$ 1390ENDIF 1400icons%!4=0:icons%!8=0:icons%!12=w%*2:icons%!16=100:icons%!20=&3102 1410icons%!28=sprites%:icons%!32=11 1420SYS "Wimp_CreateIcon",next%,icons%TOic% 1430=ic% 1440 1450REM update the main icon 1460DEFPROCcheckicon 1470LOCALname$ 1480IFdevice%=FALSE THEN 1490 name$="nodev" 1500 ELSE 1510 IF (FNd(9,port%,0,0)AND8)=0 THEN 1520 name$="dev" 1530 ELSE 1540 IFsdic$="online1" THENname$="online2"ELSEname$="online1" 1550 ENDIF 1560ENDIF 1570checkline%=time% 1580IFibarname%>0ANDname$<>sdic$ THEN 1590 PROCcall_log(sdic$,name$) 1600 sdic$=name$ 1610 SYS "XOS_SpriteOp",&118,sprites%,name$TO,,src%;F% 1620 IF(F%AND1)=0THEN 1630 $ibarname%=name$:!q%=-1:q%!4=icon0%:q%!8=0:q%!12=0 1640 SYS"Wimp_SetIconState",,q% 1650 ENDIF 1660ENDIF 1670ENDPROC 1680 1690REM update call log on online-offline transitions 1700DEFPROCcall_log(A$,B$) 1710CASEB$ OF 1720 WHEN"nodev":IFA$="online1"ORA$="online2"ORA$="dev"THENPROCwclog(TIME$+": offline after "+online$) 1730 WHEN"online1":IFA$<>"online2"THENPROCwclog(TIME$+": online to "+num$):ontime%=time%:ELSEPROCupd_time 1740 WHEN"online2":PROCupd_time 1750ENDCASE 1760ENDPROC 1770 1780REM update timer icon in status window 1790DEFPROCupd_time 1800LOCALT% 1810T%=ABS(time%-ontime%)DIV100 1820online$=RIGHT$("0"+STR$(T%DIV3600),2)+":" 1830online$+=RIGHT$("0"+STR$((T%DIV60)MOD60),2)+":" 1840online$+=RIGHT$("0"+STR$(T%MOD60),2) 1850PROCupd_icon(status%,8,online$) 1860ENDPROC 1870 1880REM write a line to the logfile 1890DEFPROCwclog(A$) 1900fh1%=FNopenup(sddir$+".logfile") 1910IFfh1%<>0THENPTR#fh1%=EXT#fh1%:BPUT#fh1%,A$:PROCcf(fh1%) 1920ENDPROC 1930 1940DEFPROCpoll(idle%) 1950REM idle%=pollidle time (+) or time before polling (-) 1960SYS"OS_ReadMonotonicTime" TOtime% 1970IFidle%>=0 OR lastpoll%-time%<idle% THEN 1980 lastpoll%=time% 1990 REPEAT 2000 SYS "Wimp_PollIdle",M%,q%,time%+idle% TO R% 2010 IFdevice% THEN J%=FNd(19,port%,0,0):REM line to fix II dual serial card 2020 CASE R% OF 2030 WHEN 1 :PROCredraww(!q%) 2040 WHEN 2 :PROCopenw(!q%,q%!4,q%!8,q%!12,q%!16,q%!20,q%!24,q%!28) 2050 WHEN 3 :PROCclosew(!q%) 2060 WHEN 6 :PROCclick(!q%,q%!4,q%!8,q%!12,q%!16) 2070 WHEN 8 :PROCkeypress(!q%,q%!4,q%!24) 2080 WHEN 9 :PROCgetpointer:PROCmenuselect(q%) 2090 WHEN 17,18:PROCreceive(q%) 2100 ENDCASE 2110 UNTILR%=0 2120 IFtime%>checkline%+100 THENPROCcheckicon:PROClinealarm:PROCsettime 2130 IFtime%>checkalarm%+500 THENPROCtimealarm:PROCsetdate 2140 IFmsg_cs%>0ANDtime%>msgt%+500 THENPROCaddmessage("") 2150ENDIF 2160ENDPROC 2170 2180DEFPROCkeypress(w%,i%,k%) 2190LOCALl% 2200IFw%=txt%ANDi%=inic%THEN 2210 CASEk%OF 2220 WHEN13:FORl%=10TO1STEP-1:ihist$(l%)=ihist$(l%-1):NEXT 2230 ihist$(0)=FNic_str(w%,i%):PROCaddevent(ihist$(0),0):ihist%=-1 2240 PROCupd_icon(w%,i%,""):SYS"Wimp_SetCaretPosition",w%,i%,,,-1,0 2250 WHEN&18F:IFihist%<10ANDihist$(ihist%+1)>""THEN 2260 ihist%+=1:PROCupd_icon(w%,i%,ihist$(ihist%)) 2270 SYS"Wimp_SetCaretPosition",w%,i%,,,-1,LENihist$(ihist%) 2280 ENDIF 2290 WHEN&18E:IFihist%>0THEN 2300 ihist%-=1:PROCupd_icon(w%,i%,ihist$(ihist%)) 2310 SYS"Wimp_SetCaretPosition",w%,i%,,,-1,LENihist$(ihist%) 2320 ELSE 2330 ihist%=-1:PROCupd_icon(w%,i%,""):SYS"Wimp_SetCaretPosition",w%,i%,,,-1,0 2340 ENDIF 2350 OTHERWISE:SYS"Wimp_ProcessKey",q%!24 2360 ENDCASE 2370ELSE 2380IFw%=input%ANDi%=1ANDk%=13THEN 2390input$=FNic_str(w%,i%):IFinput$=""THENinput$=" " 2400ELSE 2410SYS"Wimp_ProcessKey",q%!24 2420ENDIF 2430ENDIF 2440ENDPROC 2450 2460DEFPROCreceive(q%) 2470LOCALZ%,h%,i%,t%,f$,tw%,a%,A$ 2480CASE q%!16 OF 2490WHEN 0:PROCfinish:END 2500WHEN 1:q%!16=2:q%!36=-1:$(q%+44)="<Wimp$Scrap>"+CHR$0 2510 q%!12=q%!8:SYS"Wimp_SendMessage",17,q%,q%!4 2520WHEN 3:i%=q%!24:h%=q%!20:t%=q%!40:f$=FNstr(q%+44) 2530 q%!16=4:SYS"Wimp_SendMessage",17,q%,q%!4 2540 CASEh%OF 2550 WHENconfig%:IFt%=&FFF THEN 2560 IFi%=4PROCupd_icon(config%,4,f$) 2570 ELSE 2580 PROCinitscript(f$) 2590 ENDIF 2600 WHENstatus%:IFt%=&FFF THENPROCinitscript(f$) 2610 WHEN-1,-2:IFt%=&FFF ANDi%=icon0% THEN 2620 PROCinitscript(f$) 2630 ELSE 2640 FORZ%=0TOimax% 2650 IFi%=ibar%(Z%)ANDifile$(Z%)>""THENPROCifile(Z%,f$,t%) 2660 NEXT 2670 ENDIF 2680 ENDCASE 2690 Z%=FNdelfile("<Wimp$Scrap>") 2700WHEN 11:IFdevice% ANDq%!4<>task% THENPROCrefusedevice 2710WHEN 12:IFq%!4<>task% THEN 2720 PROCprint("Device claim failed",FNstr(q%+28),"") 2730 PROCfront(status%):device%=FALSE 2740 ENDIF 2750WHEN &502:A$=FNsendhelp(q%!32,q%!36) 2760 IFA$>""THEN 2770 q%!16=&503:q%!12=q%!8:$(q%+20)=A$:q%?(20+LENA$)=0:!q%=256 2780 SYS"Wimp_SendMessage",17,q%,q%!4 2790 ENDIF 2800WHEN &400C2:IF taskstart%<>0 THEN 2810 IFtaskh%(taskstart%)=0 THEN 2820 taskh%(taskstart%)=q%!4:PROClog(FNmsg1("TaskStart2",taskn$(taskstart%))) 2830 ENDIF 2840 taskstart%=0 2850 ENDIF 2860WHEN &400C3:REM TaskClosedown 2870 FORl%=0TOtaskmax% 2880 IFtaskh%(l%)=q%!4 THEN 2890 taskh%(l%)=0:IFtaskex$(l%)>""THENPROCaddevent(taskex$(l%),3) 2900 ENDIF 2910 NEXT 2920 PROCsorttasks 2930WHEN &808C1:REM TaskWindow_Output 2940 tw%=0:twlen%=q%!20-1 2950 WHILEtwh%(tw%)<>q%!4ANDtw%<twmax%:tw%+=1:ENDWHILE 2960 IFtwf%(tw%)=0 THEN 2970 FORZ%=0TOtwlen%STEP4:tmp%!Z%=q%!(24+Z%):NEXT 2980 PROCtw_data(tw%,tmp%,twlen%) 2990 ELSE 3000 FORZ%=0TOtwlen%:BPUT#twf%(tw%),q%!(24+Z%):NEXT 3010 ENDIF 3020WHEN &808C2:REM TaskWindow_Ego 3030 IFq%!20>=task%ANDq%!20<=(task%+twmax%)THEN 3040 twh%(q%!20-task%)=q%!4:PROClog("Task started: "+twname$(q%!20-task%)) 3050 ENDIF 3060WHEN &808C3:REM TaskWindow_Morio, task finished 3070 tw%=0:WHILEq%!4<>twh%(tw%)ANDtw%<twmax%:tw%+=1:ENDWHILE 3080 IFq%!4=twh%(tw%)THEN 3090 PROClog(FNmsg1("TaskEnd",twname$(tw%))) 3100 IFtwk%(tw%)=0 THEN 3110 twh%(tw%)=0:PROCclosew(tww%(tw%)) 3120 ELSE 3130 twh%(tw%)=-1:$twt%(tw%)=twname$(tw%)+FNmsg0("TaskFin") 3140 PROCdotitle(tww%(tw%)) 3150 ENDIF 3160 twname$(tw%)="":PROCcf(twf%(tw%)):twf%(tw%)=0 3170 IFtwexit$(tw%)>""THENPROCaddevent(twexit$(tw%),4) 3180 ENDIF 3190ENDCASE 3200ENDPROC 3210 3220DEFFNsendhelp(w%,i%) 3230LOCALA$,l% 3240A$="Hgeneric":CASEw%OF 3250 WHENtxt%:A$="Htext" 3260 WHENstatus%:A$="Hstatus":CASEi%OF 3270 WHEN1,2:A$="Haction" 3280 WHEN3:A$="Hip" 3290 WHEN4:A$="Hstop" 3300 WHEN5:A$="Hpause" 3310 WHEN6,7:A$="Hmenus" 3320 WHEN8:A$="Htime" 3330 WHEN10:A$="Hmodem" 3340 ENDCASE 3350 WHENmess%:A$="Hmess":IFpause%THENA$="Hmess2" 3360 WHENinput%:A$="Henter" 3370 WHENyesno%:A$="Hyesno" 3380 WHENinfo%:A$="Hinfo" 3390 WHENconfig%:A$="Hconfig" 3400 OTHERWISE:FORl%=0TOtwmax%:IFw%=tww%(l%)THENA$="Htask" 3410 NEXT 3420ENDCASE 3430=FNmsg0(A$) 3440 3450DEFPROCfinish 3460LOCALl% 3470IFdevice%<>0THEN 3480 J%=FNd(8,port%,0,0) 3490 J%=FNd(18,port%,0,0) 3500ENDIF 3510PROCopenlog("") 3520PROCcf(fh1%):PROCcf(fh2%) 3530FORl%=0TOtwmax%:PROCcf(twf%(l%)):NEXT 3540FORl%=0TOfmax%:PROCcf(fileh%(l%)):NEXT 3550PROCendmsgtrans 3560ENDPROC 3570 3580DEFPROCcf(RETURN C%) 3590IFC%<>0THENSYS"XOS_Find",0,C%:C%=0 3600ENDPROC 3610 3620DEFPROCgetpointer 3630SYS"Wimp_GetPointerInfo",,buffer% 3640mx%=!buffer%:my%=buffer%!4:b%=buffer%!8:handle%=buffer%!12 3650icon%=buffer%!16:ob%=buffer%!20 3660ENDPROC 3670 3680DEFPROCclick(mx%,my%,b%,w%,i%) 3690LOCALZ% 3700CASEb% OF 3710WHEN 2 3720 CASEw% OF 3730 WHEN -2:IFi%=icon0%THEN 3740 PROCdefmenu(TRUE) 3750 ELSE 3760 FORZ%=0TOimax% 3770 IFi%=ibar%(Z%)ANDimenu$(Z%,0)>""THENPROCdomenu(102,FNmakemenu(imenu$(Z%,0),imenu$(Z%,1)),ibarid$(Z%),TRUE) 3780 NEXT 3790 ENDIF 3800 WHEN txt%:SYS"OS_Byte",121,(1EOR&80)TO,Z% 3810 IFZ%=0THEN 3820 PROCdomenu(101,"Alarm list,Menu list,Var list,Task list,|Script list,Quit","Control",0) 3830 ELSE 3840 PROCdomenu(101,"DbgLev 0,DbgLev 1,DbgLev 2,DbgLev 3","Debug",0) 3850 ENDIF 3860 WHEN status% 3870 CASEi% OF 3880 WHEN7:IFusermenu$(0)>""THENPROCdomenu(102,FNmakemenu(usermenu$(0),usermenu$(1)),"User menu",FALSE) 3890 OTHERWISE:PROCdefmenu(0) 3900 ENDCASE 3910 OTHERWISE:PROCdefmenu(0) 3920 ENDCASE 3930WHEN1,4: 3940 CASE w% OF 3950 WHEN status%: 3960 CASEi% OF 3970 WHEN5: 3980 IFNOTpause% THEN 3990 PROCprint("",FNmsg0("PauseP"),"") 4000 pause%=TRUE:PROCaddevent("pause",0) 4010 ELSE 4020 PROCunpause 4030 ENDIF 4040 WHEN4: 4050 stop%=TRUE:PROCprint("",FNmsg0("StopP"),""):PROCstop 4060 WHEN6:IFusermenu$(0)>""THENPROCdomenu(102,FNmakemenu(usermenu$(0),usermenu$(1)),"User menu",FALSE) 4070 WHEN11:IFFNic_str(status%,i%)="Redial"THENredial%=TRUE:PROCprint("",FNmsg0("RedialP"),"") 4080 ENDCASE 4090 WHEN config%: 4100 IF i%=6 THENPROCsaveconfig:PROCclosew(config%) 4110 WHEN yesno%: 4120 IF i%=0 THENyesnoans%=2 4130 IF i%=1 THENyesnoans%=1 4140 WHEN txt%: 4150 SYS"Wimp_SetCaretPosition",w%,inic%,,,-1,LENFNic_str(w%,inic%) 4160 WHEN -2: 4170 IFi%=icon0%THEN 4180 IFb%=4THENPROCfront(status%)ELSEPROCfront(txt%) 4190 ELSE 4200 FORZ%=0TOimax% 4210 IFi%=ibar%(Z%)ANDibar$(Z%)>""THENPROCaddevent(ibar$(Z%),6) 4220 NEXT 4230 ENDIF 4240 ENDCASE 4250ENDCASE 4260ENDPROC 4270 4280DEFPROCdefmenu(i%) 4290PROCdomenu(101,">Info,Choices...,|Control...,Quit","SLIPdial",i%) 4300ENDPROC 4310 4320DEFPROChalt(mess$) 4330call_lev%=0:call_lock%()=0:event$()="":event%()=TRUE 4340IFerror$>""THENPROCaddevent(error$,0):error$="":ENDPROC 4350PROCmessage(""""+FNmsg2("Escript",STR$stage%,mess$)+""""):VDU7 4360PROCprint("",FNmsg0("StopE"),"") 4370stage%=0:run%=FALSE:PROCpaused 4380ENDPROC 4390 4400DEFPROCinput(A$) 4410LOCALv$,p$:p$="Input:" 4420REPEATB$=FNparam(A$):input$="" 4430IFLEFT$(B$,1)="/"THEN 4440C$=FNvalue(B$):CASELEFT$(B$,2)OF 4450 WHEN"pr":p$=LEFT$(C$,40) 4460 ENDCASE 4470ELSE 4480 v$=B$:PROCupd_icon(input%,1,""):PROCupd_icon(input%,0,p$) 4490 PROCfront(input%):SYS"Wimp_SetCaretPosition",input%,1,,,-1,0 4500 REPEATPROCpoll(50):UNTILinput$>"":p$="Input:" 4510 IFinput$=" "THENinput$="" 4520 PROCsetv(v$,input$) 4530ENDIF 4540UNTILA$="" 4550PROCclosew(input%) 4560ENDPROC 4570 4580DEFPROCmessage(A$) 4590LOCALw%,n%,t$ 4600t$=FNmsg0("Message"):msgc%=FALSE 4610w%=0:n%=0 4620REPEATB$=FNparam(A$) 4630IFLEFT$(B$,1)="/"THEN 4640C$=FNvalue(B$):CASELEFT$(B$,2)OF 4650 WHEN"cl":PROCclosew(mess%) 4660 WHEN"wa":w%=TRUE 4670 WHEN"ti":t$=C$ 4680 WHEN"ca":msg_cs$=C$:msg_ce$="" 4690 msg_cm%=msgmax%:msg_cs%=1:msgt%=time%:IFn%=0THENmsg$()="" 4700 WHEN"ce":msgc%=TRUE 4710 WHEN"en":msg_ce$=C$ 4720 WHEN"ma":msg_cm%=VALC$ 4730 WHEN"ad":n%+=1 4740 WHEN"na","id": 4750 ENDCASE 4760ELSE 4770 IFB$>""ANDn%=0THENmsg$()="" 4780 IFB$>""THENPROCaddmessage(B$):n%+=1 4790ENDIF 4800UNTILB$=""ORn%>msgmax% 4810$msgttl%=t$:PROCdotitle(mess%) 4820IFn%>0THEN 4830PROCaddmessage("") 4840ENDIF 4850IFw%THENPROCaddevent("pause",0) 4860ENDPROC 4870 4880DEFPROCaddmessage(A$) 4890LOCALl%,w%,t$:l%=-1:w%=0 4900REPEATl%+=1:t$=msg$(l%):IFLENt$>w%THENw%=LENt$ 4910UNTILt$=""ORl%=msgmax%:msgt%=time% 4920IFA$>""THEN 4930 IFl%=msgmax%THENFORl%=1TOmsgmax%:msg$(l%-1)=msg$(l%):NEXT 4940 msg$(l%)=A$ 4950 ELSE 4960 IFl%>0THENPROCopenmess(l%,w%) 4970ENDIF 4980ENDPROC 4990 5000DEFPROCopenmess(y%,x%) 5010LOCALo% 5020!tmp%=0:tmp%!4=-y%*32-32:tmp%!8=x%*16+10:tmp%!12=0 5030SYS"Wimp_SetExtent",mess%,tmp% 5040!q%=mess%:SYS"Wimp_GetWindowState",,q%:o%=(q%!32)AND(1<<16) 5050q%!12=q%!4+x%*16+10:q%!16=q%!8+y%*32+32 5060q%!20=0:q%!24=0:q%!28=-1:SYS"Wimp_OpenWindow",,q% 5070IFo%=0THENPROCcfront(mess%,0,150) ELSEPROCfront(mess%) 5080!q%=mess%:SYS"Wimp_GetWindowState",,q%:msgw%=q%!12-q%!4 5090PROCupdate_msg(0,-y%*32-32,msgw%,0) 5100ENDPROC 5110 5120DEFPROCmsgfilt(A$) 5130IFmsg_cs%=1 ANDINSTR(A$,msg_cs$)>0 THENmsg_cs%=2 5140IFmsg_cs%=2 THEN 5150 msg_cm%-=1:PROCaddmessage(A$) 5160 IFmsg_cm%<1OR(msg_ce$>""ANDINSTR(A$,msg_ce$)>0) THENmsg_cs%=0:PROCaddmessage("") 5170ENDIF 5180ENDPROC 5190 5200DEFPROCpaused 5210pause%=TRUE:PROCupd_icon(status%,5,FNmsg0("Resume")) 5220PROCprint("",FNmsg0("Paused"),"") 5230REPEATPROCpoll(30):UNTILpause%=FALSE 5240ENDPROC 5250 5260DEFPROCunpause 5270pause%=FALSE:stop%=FALSE:run%=TRUE:PROCupd_icon(status%,5,FNmsg0("Pause")) 5280PROCprint(""," ","") 5290ENDPROC 5300 5310DEFPROCstop 5320call_lev%=0:call_lock%()=0:event$()="":event%()=TRUE:msg_cs%=0 5330IFstage%>0ANDstop$<>""THENPROCaddevent(stop$,0):stop$="":ELSEPROCaddevent("pause",0):stage%=0:PROCrelease 5340ENDPROC 5350 5360DEFPROCdomenu(handle%,menu$,menutitle$,I%) 5370LOCALi%,item$,menuItems%,menuptr% 5380IFmenu$=""THENENDPROC 5390menuItems% = 0 5400menuhandle%=handle% 5410menuptr%=menudata% 5420i%=0 5430menuptr%!20=44 5440$menuptr%=menutitle$ 5450menuptr%?12=7:menuptr%?13=2:menuptr%?14=&7:menuptr%?15=0 5460menuptr%!16=230-24:menuptr%!24=0 5470menuptr%+=28 5480REPEAT 5490 item$=FNpar(menu$,",",i%):PROCmenuitem(item$):menuItems%+=1 5500UNTILitem$="" 5510menuptr%!-24=(menuptr%!-24)OR&80 5520IFI%<>0 THENY%=120+(menuItems%-1)*44 ELSEY%=my% 5530SYS "Wimp_CreateMenu",,menudata%,mx%-64,Y% 5540ENDPROC 5550 5560DEFPROCmenuitem(text$) 5570LOCALleft$ 5580IF text$>""THEN 5590 !menuptr%=0 5600 IFLEFT$(text$,1)="|"THENtext$=MID$(text$,2):!menuptr%=2 5610 left$ = LEFT$(text$,1):menuptr%!4=-1 5620 IF left$=">" THENmenuptr%!4=info% 5630 menuptr%!8=&07000021 5640 IF left$=">" OR left$="<" THEN $(menuptr%+12)=MID$(text$,2) ELSE $(menuptr%+12)=text$ 5650 menuptr%+=24 5660ENDIF 5670ENDPROC 5680 5690DEFFNpar(menu$,sep$,RETURN i%) 5700LOCALi1% 5710i1%=i%+1:i%=INSTR(menu$+sep$,sep$,i1%) 5720=MID$(menu$,i1%,i%-i1%) 5730 5740DEFPROCmenuselect(menus%) 5750LOCALA$ 5760LOCALl%:SYS"Wimp_DecodeMenu",,menudata%,menus%,STRING$(20," ")TO,,,A$ 5770CASE A$ OF 5780 WHEN"Choices...":PROCfront(config%) 5790 WHEN"Control...":PROCfront(txt%) 5800 WHEN"Quit":PROCfinish:END 5810 WHEN"Alarm list":PROClistalarms 5820 WHEN"Menu list":PROClistmenu 5830 WHEN"Task list":PROClisttasks 5840 WHEN"Var list":PROClistvars 5850 WHEN"Script list":PROClistscript("") 5860 WHEN"DbgLev 0":debug%=0 5870 WHEN"DbgLev 1":debug%=1 5880 WHEN"DbgLev 2":debug%=2 5890 WHEN"DbgLev 3":debug%=3 5900 OTHERWISE:IFumenu%>0 THEN 5910 FORl%=1TOumenu% 5920 IFA$=umenu$(l%,0) THEN 5930 PROCupd_icon(status%,7,umenu$(l%,0)) 5940 PROCaddevent(umenu$(l%,1),8) 5950 ENDIF 5960 NEXT 5970 ENDIF 5980ENDCASE 5990ENDPROC 6000 6010DEFPROCerrorbox 6020!buffer%=ERR:$(buffer%+4)=REPORT$+" (internal code "+STR$ERL+")."+CHR$0 6030SYS "Wimp_ReportError",buffer%,1,Task$:PROCfinish 6040ENDPROC 6050 6060DEFPROCfront(h%) 6070!q%=h%:SYS"Wimp_GetWindowState",,q% 6080q%!28=-1:SYS"Wimp_OpenWindow",,q% 6090IFh%=txt%THENSYS"Wimp_SetCaretPosition",h%,inic%,,,-1,LENFNic_str(h%,inic%) 6100ENDPROC 6110 6120DEFPROCcfront(h%,xoff%,yoff%) 6130LOCALx%,y%,wx%,wy%,xe%,ye% 6140IFautowinpos%=0ANDh%=status%THEN 6150 PROCfront(h%) 6160 ELSE 6170 SYS"OS_ReadModeVariable",-1,4TO,,xe%:SYS"OS_ReadModeVariable",-1,11TO,,x% 6180 SYS"OS_ReadModeVariable",-1,5TO,,ye%:SYS"OS_ReadModeVariable",-1,12TO,,y% 6190 !q%=h%:SYS"Wimp_GetWindowState",,q% 6200 x%=x%<<xe%:y%=y%<<ye%:wx%=q%!12-q%!4:wy%=q%!16-q%!8 6210 q%!4=(x%-wx%)DIV2-xoff%:q%!12=q%!4+wx%:q%!8=(y%-wy%)DIV2-yoff%:q%!16=q%!8+wy% 6220 q%!20=0:q%!24=0:q%!28=-1:SYS"Wimp_OpenWindow",,q% 6230ENDIF 6240ENDPROC 6250 6260DEFPROCdotitle(h%) 6270!q%=h%:SYS"Wimp_GetWindowOutline",,q% 6280SYS"Wimp_ForceRedraw",-1,q%!4,q%!16-44,q%!12,q%!16 6290ENDPROC 6300 6310DEFFNic_str(H%,I%) 6320!q%=H%:q%!4=I%:SYS"Wimp_GetIconState",,q% 6330=FNstr(q%!28) 6340 6350DEFPROCseticonstring(H%,I%,A$) 6360!q%=H%:q%!4=I%:SYS"XWimp_GetIconState",,q%TO;F% 6370IFFNtf10(F%)ANDq%!28>&8800 THEN$(q%!28)=A$+CHR$0 6380ENDPROC 6390 6400DEFPROCupd_icon(H%,I%,A$) 6410PROCseticonstring(H%,I%,A$):!q%=H%:q%!4=I%:q%!8=0:q%!12=0 6420SYS"Wimp_SetIconState",,q% 6430ENDPROC 6440 6450DEFPROCsetinv(H%,I%,S%) 6460S%=ABS(S%=0):!q%=H%:q%!4=I%:q%!8=((1)<<21)*S%:q%!12=(1<<21) 6470SYS"Wimp_SetIconState",,q% 6480ENDPROC 6490 6500DEFFNrdinv(H%,I%) 6510!q%=H%:q%!4=I%:SYS"Wimp_GetIconState",,q% 6520=NOT(((q%!24)AND(1<<21))DIV2097152<>0) 6530 6540DEFPROCsetshaded(H%,I%,S%) 6550!q%=H%:q%!4=I%:q%!8=((1)<<22)*ABSS%:q%!12=(1<<22) 6560SYS"Wimp_SetIconState",,q% 6570ENDPROC 6580 6590DEFPROCprint(a$,b$,c$) 6600IFa$>""THENPROCupd_icon(status%,1,RIGHT$(a$,34)):IFLENa$>1THENPROClog("Action: "+a$) 6610IFb$>""THENPROCupd_icon(status%,2,RIGHT$(b$,34)):IFLENb$>1THENPROClog("Status: "+b$) 6620IFc$>""THENPROCupd_icon(status%,3,RIGHT$(c$,34)):IFLENc$>1THENPROClog("IP add: "+c$) 6630ENDPROC 6640 6650DEFPROCopenw(handle%,x0%,y0%,x1%,y1%,scx%,scy%,bhandle%) 6660IFhandle%>-1THEN 6670 q%!0=handle%:q%!28=bhandle% 6680 q%!4=x0%:q%!8=y0%:q%!12=x1%:q%!16=y1% 6690 q%!20=scx%:q%!24=scy% 6700 SYS"Wimp_OpenWindow",,q% 6710ENDIF 6720ENDPROC 6730 6740DEFPROCclosew(h%) 6750LOCALL% 6760CASEh%OF 6770 WHENmess%:IFpause% THENPROCunpause 6780 WHENinput%:input$=" " 6790 OTHERWISE: 6800 FORL%=0TOtwmax% 6810 IFh%=tww%(L%)ANDtwh%(L%)>0THEN 6820 VDU7:IFFNyesno(FNmsg0("TaskKill"),3)=2 THEN 6830 PROCmesstw(twname$(L%),&808C4) 6840 ELSE 6850 h%=0 6860 ENDIF 6870 L%=twmax% 6880 ENDIF 6890 NEXT 6900ENDCASE 6910IFh%>0THEN!q%=h%:SYS"Wimp_CloseWindow",,q% 6920ENDPROC 6930 6940DEFFNask(A$) 6950LOCALd%,r%,def%:d%=60:r%=0:def%=1 6960REPEATB$=FNparam(A$) 6970 IFLEFT$(B$,1)="/"THEN 6980 C$=FNvalue(B$):CASELEFT$(B$,3)OF 6990 WHEN"del":d%=VALC$:IFd%<5THENd%=5 7000 WHEN"def":C$=FNlower(C$):IFLEFT$(C$,1)="y"THENdef%=2 7010 ENDCASE 7020 ELSE 7030 r%=FNyesno(B$,d%) 7040 ENDIF 7050UNTILA$="" 7060IFr%=0THENr%=def% 7070=-(r%=2) 7080 7090REM *** 7100 7110DEFFNyesno(A$,wait%) 7120REM returns 0=timeout 1=no 2=yes 7130LOCALst%:st%=time%:wait%=wait%*100:PROCupd_icon(yesno%,2,LEFT$(A$,57)) 7140PROCcfront(yesno%,0,0):IFwait%=0THENwait%=60000 7150yesnoans%=0:REPEAT:PROCpoll(50):UNTILyesnoans%>0ORtime%-st%>wait% 7160PROCclosew(yesno%) 7170=yesnoans% 7180 7190DEFFNvarval(A$) 7200LOCALL%,F% 7210SYS"XOS_ReadVarVal",A$,tmp%,256,0,3 TO,,L%;F% 7220IF(F%AND1) ORL%>256 THEN:="" 7230tmp%?L%=13:=$tmp% 7240 7250DEFPROCinfo(q%) 7260x0%=!q%:y0%=q%!4:x1%=q%!8:y1%=q%!12:scx%=q%!16:scy%=q%!20 7270bx%=x0%-scx%:by%=y1%-scy%:gy0%=q%!28:gy1%=q%!36 7280ENDPROC 7290 7300DEFPROCredraww(h%) 7310LOCALtw%:!q%=h%:CASEh%OF 7320WHENtxt%: 7330 SYS "Wimp_RedrawWindow",,q% TO more% 7340 PROCdraw_txt(more%) 7350WHENmess%: 7360 SYS "Wimp_RedrawWindow",,q% TO more% 7370 PROCdraw_msg(more%) 7380OTHERWISE: 7390 FORtw%=0TOtwmax%:IFh%=tww%(tw%)THEN 7400 SYS "Wimp_RedrawWindow",,q% TO more% 7410 PROCdraw_tw(tw%,more%) 7420 ENDIF 7430 NEXT 7440ENDCASE 7450ENDPROC 7460 7470DEFPROCinit_txt 7480txto%=0 7490log_y%=1:DIMtxtl$(txty%),txtc% txty%,msg$(msgmax%):msgw%=0 7500txtl$()=STRING$(txtx%DIV2," "):ioff%=40 7510!tmp%=0:tmp%!4=-txty%*32-ioff%-8:tmp%!8=txtx%*16:tmp%!12=0 7520SYS"Wimp_SetExtent",txt%,tmp% 7530FORi%=0TO1:!tmp%=txt%:tmp%!4=i%:SYS"Wimp_GetIconState",,tmp% 7540tmp%!12=tmp%!12-txty%*32:tmp%!20=tmp%!20-txty%*32:tmp%!4=txt% 7550!q%=txt%:q%!4=i%:SYS"Wimp_DeleteIcon",,q% 7560SYS"Wimp_CreateIcon",,tmp%+4 TOinic%:NEXT 7570ptr%=0:lt%=0:data$="":tdata$="" 7580PROCprint("Starting SLIPdial","Idle"," ") 7590IFquiet%=0ANDFNrdinv(config%,2)=0 THENPROCfront(txt%) 7600ENDPROC 7610 7620DEFPROCinit_tww(tw%,out%,T$) 7630LOCALoff%:off%=(tw%MOD4)*40 7640IFtww%(tw%)=0THEN 7650 SYS "Wimp_OpenTemplate",,sdlang$+".Templates" 7660 SYS "Wimp_LoadTemplate",,q%,ind%,sp%+size%,-1,"task",0 TO,,ind% 7670 twt%(tw%)=q%!72:q%!44=-twwmax%*32 7680 !q%=!q%+off%:q%!8=q%!8+off%:q%!4=q%!4-off%:q%!12=q%!12-off% 7690 SYS "Wimp_CreateWindow",,q% TO tww%(tw%) 7700 SYS "Wimp_CloseTemplate" 7710 CASEtw%OF 7720 WHEN0:DIMtwbuf0$(twwmax%) 7730 WHEN1:DIMtwbuf1$(twwmax%) 7740 WHEN2:DIMtwbuf2$(twwmax%) 7750 WHEN3:DIMtwbuf3$(twwmax%) 7760 WHEN4:DIMtwbuf4$(twwmax%) 7770 WHEN5:DIMtwbuf5$(twwmax%) 7780 WHEN6:DIMtwbuf6$(twwmax%) 7790 OTHERWISE:PROChalt(FNmsg0("Etask1")):ENDPROC 7800 ENDCASE 7810 ELSE 7820 CASEtw%OF 7830 WHEN0:twbuf0$()="" 7840 WHEN1:twbuf1$()="" 7850 WHEN2:twbuf2$()="" 7860 WHEN3:twbuf3$()="" 7870 WHEN4:twbuf4$()="" 7880 WHEN5:twbuf5$()="" 7890 WHEN6:twbuf6$()="" 7900 ENDCASE 7910ENDIF 7920$twt%(tw%)=FNmsg1("TaskRun",T$):tdata$(tw%)="":twy%(tw%)=0:two%(tw%)=0 7930IFout%THENPROCfront(tww%(tw%)) 7940ENDPROC 7950 7960DEFPROCupdate_txt(ux0%,uy0%,ux1%,uy1%) 7970!q%=txt%:q%!4=ux0%:q%!8=uy0%:q%!12=ux1%:q%!16=uy1% 7980SYS"Wimp_UpdateWindow",,q% TO more% 7990PROCdraw_txt(more%) 8000ENDPROC 8010 8020DEFPROCupdate_msg(ux0%,uy0%,ux1%,uy1%) 8030!q%=mess%:q%!4=ux0%:q%!8=uy0%:q%!12=ux1%:q%!16=uy1% 8040SYS"Wimp_UpdateWindow",,q% TO more% 8050PROCdraw_msg(more%) 8060ENDPROC 8070 8080DEFPROCupdate_tw(tw%,ux0%,uy0%,ux1%,uy1%) 8090!q%=tww%(tw%):q%!4=ux0%:q%!8=uy0%:q%!12=ux1%:q%!16=uy1% 8100SYS"Wimp_UpdateWindow",,q% TO more% 8110PROCdraw_tw(tw%,more%) 8120ENDPROC 8130 8140DEFPROCdraw_msg(more%) 8150WHILE more% 8160 PROCinfo(q%+4):CLG 8170 top%=ABS(gy1%-by%+16)DIV32:bot%=ABS(gy0%-by%+16)DIV32 8180 IFbot%>msgmax% THENbot%=msgmax%:IFtop%>bot% THENtop%=bot% 8190 SYS"Wimp_SetColour",7:FORL%=top%TObot% 8200 MOVEbx%+4-msgc%*(msgw%DIV2-LENmsg$(L%)*8),by%-L%*32-16 8210 PRINTmsg$(L%):NEXT 8220 SYS"Wimp_GetRectangle",,q%TOmore% 8230ENDWHILE 8240ENDPROC 8250 8260DEFPROCdraw_tw(tw%,more%) 8270LOCALL%,y%,top%,bot%:WHILE more% 8280 PROCinfo(q%+4):CLG 8290 top%=ABS(gy1%-by%)DIV32:bot%=ABS(gy0%-by%)DIV32 8300 IFbot%>twwmax% THENbot%=twwmax%:IFtop%>bot% THENtop%=bot% 8310 SYS"Wimp_SetColour",7:FORL%=top%TObot% 8320 y%=(L%+two%(tw%))MODtwwmax% 8330 MOVEbx%+4,by%-L%*32-4 8340 CASEtw%OF 8350 WHEN0:PRINTtwbuf0$(y%) 8360 WHEN1:PRINTtwbuf1$(y%) 8370 WHEN2:PRINTtwbuf2$(y%) 8380 WHEN3:PRINTtwbuf3$(y%) 8390 WHEN4:PRINTtwbuf4$(y%) 8400 WHEN5:PRINTtwbuf5$(y%) 8410 WHEN6:PRINTtwbuf6$(y%) 8420 ENDCASE 8430 NEXT 8440 SYS"Wimp_GetRectangle",,q%TOmore% 8450ENDWHILE 8460ENDPROC 8470 8480DEFPROCdraw_txt(more%) 8490LOCALL%,y%,top%,bot%:WHILE more% 8500 PROCinfo(q%+4):CLG 8510 top%=ABS(gy1%-by%)DIV32:bot%=ABS(gy0%-by%)DIV32 8520 IFbot%>txty% THENbot%=txty%:IFtop%>bot% THENtop%=bot% 8530 FORL%=top%TObot%:y%=(L%+txto%)MODtxty% 8540 MOVEbx%,by%-L%*32:SYS"Wimp_SetColour",txtc%?y%:PRINTtxtl$(y%):NEXT 8550 SYS"Wimp_GetRectangle",,q% TO more% 8560ENDWHILE 8570ENDPROC 8580 8590DEFPROCstr_txt(A$) 8600IFdata$>""THENPROCflush 8610PROCline_txt(A$,7) 8620ENDPROC 8630 8640DEFPROCwarn_txt(A$) 8650PROCline_txt(A$,11) 8660ENDPROC 8670 8680DEFPROCflush 8690IFdata$>""THEN 8700 IF(debug%AND2)<>0ANDerrC%<>0 THENBPUT#errC%,data$ 8710 IFmsg_cs%>0THENPROCmsgfilt(data$) 8720 PROCline_txt(data$,5):data$="" 8730ENDIF 8740ENDPROC 8750 8760DEFFNrec:IFdevice%=0THEN=-1 8770Z%=FNd(1,port%,0,0) 8780IFZ%>0AND(debug%AND2)>0ORmsg_cs%>0 THEN 8790 IFZ%>31 ANDZ%<128 THENdata$+=CHR$Z% 8800 IFZ%=13ORZ%=10ORLENdata$>=txtx% THENPROCflush 8810ENDIF 8820=Z% 8830 8840DEFPROCtw_data(tw%,buf%,len%) 8850LOCALl% 8860FORl%=0TOlen%:C%=buf%?l% 8870 IFC%>31 ANDC%<128 THENtdata$(tw%)+=CHR$C% 8880 IFC%=13ORC%=10ORLENtdata$(tw%)>78 THEN 8890 PROCtw_txt(tw%,tdata$(tw%)) 8900 IFtget%=tw%ANDtget$(0)>""THENPROCtget(tdata$(tw%)) 8910 tdata$(tw%)="" 8920 ENDIF 8930NEXT 8940IFtget%=tw%ANDtget$(0)>""THENPROCtget(tdata$(tw%)) 8950ENDPROC 8960 8970DEFPROCtw_txt(tw%,A$) 8980LOCALt%,B$ 8990IF(debug%AND4)<>0ANDerrC%<>0 THENBPUT#errC%,"TW"+STR$tw%+">"+A$ 9000WHILEA$>"" 9010 t%=(twy%(tw%)+two%(tw%))MODtwwmax% 9020 B$=LEFT$(A$,79):A$=MID$(A$,79) 9030 CASEtw%OF 9040 WHEN0:twbuf0$(t%)=B$ 9050 WHEN1:twbuf1$(t%)=B$ 9060 WHEN2:twbuf2$(t%)=B$ 9070 WHEN3:twbuf3$(t%)=B$ 9080 WHEN4:twbuf4$(t%)=B$ 9090 WHEN5:twbuf5$(t%)=B$ 9100 WHEN6:twbuf6$(t%)=B$ 9110 ENDCASE 9120 IFtwy%(tw%)<twwmax% THEN 9130 !q%=tww%(tw%):SYS"Wimp_GetWindowState",,q%:f%=(q%!32)AND(1<<16) 9140 IFtwy%(tw%)>=ABS(q%!8-q%!16)DIV32 THENq%!24=-(twy%(tw%)*32-ABS(q%!8-q%!16))-32:SYS"Wimp_OpenWindow",,q% 9150 PROCupdate_tw(tw%,0,-twy%(tw%)*32-32,1280,-twy%(tw%)*32+4) 9160 twy%(tw%)+=1 9170 ELSE 9180 two%(tw%)=(two%(tw%)+1)MODtwwmax% 9190 SYS"Wimp_BlockCopy",tww%(tw%),0,-32*twwmax%,1280,0,0,-32*(twwmax%-1) 9200 PROCupdate_tw(tw%,0,-32*twwmax%,1280,-32*(twwmax%-1)+4) 9210 ENDIF 9220ENDWHILE 9230ENDPROC 9240 9250DEFPROCline_txt(A$,col%) 9260LOCALt%:PROCpoll(slice%) 9270WHILEA$>"" 9280 t%=(log_y%+txto%)MODtxty% 9290 txtl$(t%)=LEFT$(A$,txtx%):A$=MID$(A$,txtx%) 9300 txtc%?t%=col%:IFlog_y%<txty% THEN 9310 !q%=txt%:SYS"Wimp_GetWindowState",,q%:f%=(q%!32)AND(1<<16) 9320 IFf%<>0ANDlog_y%>=ABS(q%!8-q%!16)DIV32 THENq%!24=-(log_y%*32-ABS(q%!8-q%!16))-32:SYS"Wimp_OpenWindow",,q% 9330 PROCupdate_txt(0,-log_y%*32-32,1280,-log_y%*32+4) 9340 log_y%+=1 9350 ELSE 9360 txto%=(txto%+1)MODtxty% 9370 SYS"Wimp_BlockCopy",txt%,0,-32*txty%,1280,0,0,-32*(txty%-1) 9380 PROCupdate_txt(0,-32*txty%,1280,-32*(txty%-1)+4) 9390 ENDIF 9400ENDWHILE 9410ENDPROC 9420 9430DEFPROCclr_txt 9440txtl$()="":log_y%=0:txto%=0:data$="" 9450PROCupdate_txt(0,-txty%*32-ioff%-8,16*txtx%,0) 9460ENDPROC 9470 9480DEFPROClog(m$) 9490IF(debug%AND1) THEN 9500 PROCstr_txt(m$) 9510 IFerrC%<>0 THENBPUT#errC%,m$ 9520ENDIF 9530ENDPROC 9540 9550DEFPROCopenlog(A$) 9560B$=FNparam(A$) 9570IFB$="" THEN 9580 PROCflush:PROCcf(errC%) 9590ELSE 9600 B$=FNcanon(B$) 9610 SYS"XOS_Find",&CF,B$TOerrC%;F% 9620 IF(F%AND1)THENSYS"XOS_Find",&8F,B$TOerrC%;F% 9630 IF(F%AND1)THENerrC%=0:PROChalt(FNmsg0("Etrace")):ENDPROC 9640 SYS"XOS_File",18,B$,&FFF 9650 IFerrC%<>0 THENPTR#errC%=EXT#errC% 9660ENDIF 9670ENDPROC 9680 9690DEFPROCclaimdevice 9700IFdriverno%>-1THEN 9710 !q%=256:q%!12=0:q%!16=11:q%!20=2:q%!24=driverno%+port% 9720 $(q%+28)="SLIPdial"+CHR$0 9730 SYS"Wimp_SendMessage",18,q%,0 9740 device%=TRUE:FORL%=1TO5:PROCpoll(0):NEXT 9750ENDIF 9760ENDPROC 9770 9780DEFPROCrefusedevice 9790IFdriverno%>-1THEN 9800 IF q%!20=2 AND q%!24=driverno%+port% THEN 9810 !q%=256:q%!12=q%!8:q%!16=12 9820 $(q%+28)=FNmsg0("DevMine")+CHR$0 9830 SYS"Wimp_SendMessage",17,q%,q%!4 9840 ENDIF 9850ENDIF 9860ENDPROC 9870 9880DEFFNloaddriver(A$) 9890A%=INSTR(A$," "):IFA%>=0 THEN 9900 driver$=LEFT$(A$,A%-1) 9910 port%=VAL(MID$(A$,A%+1)) 9920 ELSE 9930 driver$="internal" 9940 port%=0 9950ENDIF 9960 9970PROCsetv("port",driver$+" "+STR$port%) 9980PROCprint(FNmsg1("DevLoad",driver$)," ","") 9990SYS"XOS_File",16,"SerialDev:modules."+driver$+".driver",driver,0TO;F% 10000IF(F%AND1) THENPROChalt(FNmsg1("Edev",driver$)):=0 10010PROCprint("",FNmsg0("DevOK"),"") 10020driverno%=driver!&C8 10030=port% 10040 10050DEFPROCsetspeed(B$) 10060speed%=VALB$:IFspeed%=0 THENspeed%=19200 10070PROCsetv("speed",STR$speed%) 10080ENDPROC 10090 10100DEFPROCaddevent(A$,t%) 10110REM event types are: 0 system, 1 time-alarm, 2 line-alarm, 3 task-end, 10120REM 4 taskwindow-end, 5 command-input, 6 icon-click, 7 icon-filedrop, 10130REM 8 user-menu, 9 user-eof 10140PROClog(FNmsg1("Qadd",A$)) 10150L%=0:WHILEevent$(L%)>""ANDL%<maxev% 10160L%+=1:ENDWHILE 10170event$(L%)=A$:evtype%(L%)=t%:ENDPROC 10180 10190DEFFNgetevent 10200LOCALt%,l%,A$,n%:l%=0:A$="":n%=0 10210REPEATIFevent$(l%)>""ANDevent%(evtype%(l%))=TRUE THENA$=event$(l%):n%=l% 10220l%+=1:UNTILA$>""ORevent$(l%)=""ORl%=maxev% 10230IFA$>""THEN 10240 FORl%=n%TOmaxev%-1:event$(l%)=event$(l%+1):evtype%(l%)=evtype%(l%+1):NEXT 10250 event$(maxev%)="" 10260ENDIF 10270=A$ 10280 10290DEFFNtestevent 10300LOCALt%,l%,r%:l%=0:r%=0 10310REPEATIFevent$(l%)>""ANDevent%(evtype%(l%))=TRUE THENr%=TRUE 10320l%+=1:UNTILr%<>0ORevent$(l%)=""ORl%=maxev% 10330=r% 10340 10350DEFFNcommand(com$) 10360WHILEcom$>""ANDstop%=0:A$=FNmulticom(com$) 10370PROCpoll(slice%) 10380PROClog(STR$stage%+": "+A$) 10390B$=FNparam(A$):B$=FNlower(B$):lc$=B$:REM store last command for help 10400IFLEFT$(B$,1)<>":" THEN 10410 CASEB$ OF 10420 WHEN "if" :return%=FNif(A$,com$) 10430 WHEN "ask" :return%=FNask(A$) 10440 WHEN "case" :return%=FNcase(A$) 10450 WHEN "when" :return%=FNwhen(A$,com$) 10460 WHEN "otherwise":PROCotherwise(com$) 10470 WHEN "endcase":return%=FNendcase 10480 WHEN "claim":return%=FNclaim(A$) 10490 WHEN "debug":debug%=FNdebug(A$) 10500 WHEN "driver":return%=FNmodemdrv(A$) 10510 WHEN "source":return%=FNsource(A$) 10520 WHEN "library":return%=FNlibrary(A$) 10530 WHEN "chain":PROCchain(A$) 10540 WHEN "port" :port%=FNloaddriver(A$) 10550 WHEN "speed":PROCsetspeed(A$) 10560 WHEN "release":PROCrelease 10570 WHEN "init" :return%=FNinitmodem(A$) 10580 WHEN "reinit":PROCreinit 10590 WHEN "dial" :return%=FNdial(A$) 10600 WHEN "wait" :return%=FNwait(A$) 10610 WHEN "trace":PROCopenlog(A$) 10620 WHEN "send" :PROCsend(A$) 10630 WHEN "ipget":return%=FNipget(A$) 10640 WHEN "make" :PROCmakefile(A$) 10650 WHEN "task" :return%=FNtask(A$) 10660 WHEN "taskwindow":return%=FNtaskw(A$) 10670 WHEN "sleep","pause":PROCpause(VAL(A$)) 10680 WHEN "alarm":PROCalarm(A$) 10690 WHEN "set" :PROCset(A$) 10700 WHEN "unset":PROCunset(A$) 10710 WHEN "?eq","?ne","?lt","?le","?gt","?ge":return%=FNtesteq(B$,A$) 10720 WHEN "string":return%=FNstring(A$) 10730 WHEN "eval" :return%=FNeval(A$) 10740 WHEN "label":REM ignore labels 10750 WHEN "goto" :PROCgoto(A$,stage%) 10760 WHEN "call" :PROCgosub(A$,stage%) 10770 WHEN "return":return%=FNreturn(A$,stage%) 10780 WHEN "echo" :PROCecho(A$) 10790 WHEN "?file":return%=FNfile(A$) 10800 WHEN "?line":return%=FNtestline(A$) 10810 WHEN "?free":return%=FNfree(A$) 10820 WHEN "retry":PROCsetretry(A$) 10830 WHEN "open" :return%=FNopen(A$) 10840 WHEN "close":return%=FNclose(A$) 10850 WHEN "read" :return%=FNread(A$) 10860 WHEN "write" :return%=FNwrite(A$) 10870 WHEN "ptr" :return%=FNptr(A$) 10880 WHEN "move" :return%=FNmovefile(A$) 10890 WHEN "copy" :return%=FNcopyfile(A$) 10900 WHEN "append":return%=FNappend(A$) 10910 WHEN "delete":return%=FNdelete(A$) 10920 WHEN "newsrate":return%=FNnewsrate(A$) 10930 WHEN "?task":return%=FNtesttask(A$) 10940 WHEN "dopen","dataopen":return%=FNdataopen(A$) 10950 WHEN "stamp":PROClog("("+STR$(TIME DIV100)+") "+A$) 10960 WHEN "error":PROChalt(A$) 10970 WHEN "message":PROCmessage(A$) 10980 WHEN "menu" :PROCmenudef(A$) 10990 WHEN "list" :PROClist(A$) 11000 WHEN "icon":return%=FNiconbar(A$) 11010 WHEN "analyse","analyze":PROCanalyse(A$) 11020 WHEN "help" :PROChelp(A$) 11030 WHEN "event":PROCeventonoff(A$) 11040 WHEN "stop" :PROCstop 11050 WHEN "quit" :PROCquit(FNmsg0("Quit")) 11060 WHEN "exit" :PROCexit 11070 WHEN "input":PROCinput(A$) 11080 WHEN "oscli":return%=FNoscli(A$) 11090 OTHERWISE:PROClog(FNmsg0("BadCom")) 11100 ENDCASE 11110ENDIF 11120IFreturn%<0THENPROCsetv("$status",return$)ELSEPROCsetv("$status",STR$return%) 11130ENDWHILE 11140=return% 11150 11160DEFPROCecho(A$) 11170LOCALB$,s%:s%=0 11180REPEAT 11190 B$=FNparam(A$) 11200 IFLEFT$(B$,1)="/"THEN 11210 CASELEFT$(B$,3)OF 11220 WHEN"/st":s%=TRUE 11230 WHEN"/lo":s%=0 11240 WHEN"/da":A$=""""+TIME$+""" "+A$ 11250 ENDCASE 11260 ELSE 11270 IFs%THEN 11280 PROCprint("",B$,"") 11290 ELSE 11300 PROCstr_txt(B$) 11310 IF(debug%AND3)<>0ANDerrC%<>0 THENBPUT#errC%,B$ 11320 ENDIF 11330 ENDIF 11340UNTILA$="" 11350ENDPROC 11360 11370DEFFNclaim(A$) 11380LOCALJ%,t%,d%,try% 11390PROCprint(FNmsg0("DevClaim")," ","") 11400t%=VALFNparam(A$):IFt%<0 THENt%=retry% 11410d%=VALFNparam(A$):IFd%<2 THENd%=delay% 11420try%=1 11430REPEAT 11440PROCclaimdevice 11450IFdevice%<>0 THEN 11460 J%=FNd(17,port%,0,0) 11470 J%=FNd(13,port%,speed%,0):IFJ%<>speed%THENspeed%=J% 11480 J%=FNd(14,port%,speed%,0):IFJ%<>speed%THENspeed%=J% 11490 J%=FNd(15,port%,0,0) 11500 J%=FNd(16,port%,1,0) 11510 J%=FNd(6,port%,0,0) 11520 J%=FNd(7,port%,0,0) 11530ELSE 11540 PROCpause(d%):IFt%>0 THENtry%+=1 11550ENDIF 11560UNTILdevice%<>0 ORtry%>t% ORstop%<>0 11570=device% 11580 11590DEFPROCrelease 11600LOCALJ% 11610IF device% THEN 11620 PROCprint(FNmsg0("DevRel"),FNmsg0("DevDrop"),"") 11630 J%=FNd(8,port%,0,0) 11640 J%=FNd(18,port%,0,0) 11650 device%=FALSE 11660ENDIF 11670ENDPROC 11680 11690DEFFNinitmodem(A$) 11700LOCALB$,h%:h%=0 11710IFFNdroplines<>0 THEN 11720 PROCprint(FNmsg0("DevInit"),"","") 11730 IFA$=""THENA$=FNvv("$init") 11740 REPEAT 11750 B$=FNparam(A$) 11760 PROCprint("",FNmsg1("Sending",B$),"") 11770 PROCsend(B$):h%=FNget4s("OK","","","",5) 11780 UNTILA$=""ORh%=0 11790ENDIF 11800=h% 11810 11820DEFPROCreinit 11830LOCALJ% 11840J%=FNd(13,port%,speed%,0):IFJ%<>speed%THENspeed%=J% 11850J%=FNd(14,port%,speed%,0):IFJ%<>speed%THENspeed%=J% 11860J%=FNd(15,port%,0,0) 11870J%=FNd(16,port%,1,0) 11880J%=FNd(8,port%,3,0) 11890ENDPROC 11900 11910DEFPROCsetretry(A$) 11920LOCALB$ 11930B$=FNparam(A$) 11940IFVALB$>0 THENretry%=VALB$ 11950IFVALA$>2 THENdelay%=VALA$ 11960ENDPROC 11970 11980DEFPROCusericon(A$) 11990PROCupd_icon(status%,11,A$) 12000PROCsetshaded(status%,11,(A$="")) 12010ENDPROC 12020 12030DEFFNdial(numlist$) 12040LOCALflag%,r%,d%,nod%,noc%,bus%,dc$,B$,C$ 12050flag%=0:dc$="ATDT" 12060r%=retry%:d%=delay%:nod%=d%:noc%=d%:bus%=d% 12070PROCusericon(FNmsg0("Redial")) 12080REPEAT 12090 B$=FNparam(numlist$) 12100 IFLEFT$(B$,1)="/"THEN 12110 C$=FNvalue(B$):CASELEFT$(B$,3)OF 12120 WHEN"ret":r%=VALC$:IFr%<1 THENr%=1 12130 WHEN"del":d%=VALC$:IFd%<2 THENd%=2 12140 nod%=d%:noc%=d%:bus%=d% 12150 WHEN"noc":noc%=VALC$ 12160 WHEN"nod":nod%=VALC$ 12170 WHEN"not","pul":dc$="ATDP" 12180 WHEN"ton","nop":dc$="ATDT" 12190 WHEN"bus":bus%=VALC$ 12200 ENDCASE 12210 ELSE 12220 attempt%=1:flag%=0:num$=B$ 12230 REPEAT 12240 PROCprint(FNmsg1("Dialling",num$),FNmsg2("Dattempt",STR$attempt%,STR$r%),"") 12250 PROCsend(dc$+num$):attempt%+=1 12260 return%=FNget4s(FNvv("$conn"),FNvv("$busy"),FNvv("$nocarr"),FNvv("$nodial"),120) 12270 IFstop%=0 THEN 12280 IFredial%=TRUE THEN 12290 A%=FNdroplines:WHILE FNd(5,port%,0,0)>0:J%=FNrec:ENDWHILE:redial%=FALSE 12300 ELSE 12310 CASEreturn% OF 12320 WHEN 1:PROCprint("",FNmsg0("Dconnect"),""):flag%=1 12330 WHEN 2:PROCprint("",FNmsg0("Dbusy"),""):PROCpause(bus%) 12340 WHEN 3:PROCprint("",FNmsg0("Dnc"),""):PROCpause(noc%) 12350 WHEN 4:PROCprint("",FNmsg0("Dnd"),""):PROCpause(nod%) 12360 WHEN 2,3,4:WHILE FNd(5,port%,0,0)>0:J%=FNrec:ENDWHILE 12370 OTHERWISEPROCprint("",FNmsg0("Dnr"),""):PROCpause(d%) 12380 ENDCASE 12390 ENDIF 12400 ELSE 12410 A%=FNdroplines:REM cancel a dial if stop active 12420 ENDIF 12430 UNTIL attempt%>r% ORstop%<>0 ORflag%>0 ORdevice%=0 12440 IFflag%=0 ANDnumlist$>"" THENPROCprint(FNmsg0("Dnext"),"",""):PROCpause(1) 12450 ENDIF 12460UNTIL numlist$="" ORstop%<>0 OR flag%>0 ORdevice%=0 12470PROCusericon("") 12480=flag% 12490 12500DEFFNwait(A$) 12510LOCALl%,m%,d%,s%,return%,B$,C$,qual% 12520d%=600:tget%=-1:return%=0 12530REPEATB$=FNparam(A$):qual%=FALSE 12540IFLEFT$(B$,1)="/"THEN 12550 C$=FNvalue(B$):qual%=TRUE 12560 CASELEFT$(B$,2)OF 12570 WHEN"ev":return%=FNwaitevent 12580 WHEN"de","del":d%=VALC$ 12590 WHEN"na","id":FORl%=0TOtwmax%:IFC$=twname$(l%)THENtget%=l%:l%=twmax% 12600 NEXT:IFtget%<0 THENPROChalt(FNmsg0("Ebadtask")):=0 12610 OTHERWISE:PROChalt(FNmsg0("Ebadwait")):=0 12620 ENDCASE 12630ENDIF 12640UNTILqual%=FALSE 12650IFreturn%=0 THEN 12660 IFd%=0THENPROChalt(FNmsg1("Ebaddel",A$)):=0 12670 s4$()="":l%=0:C$="":REPEAT 12680 s4$(l%)=B$:C$+=B$+"/":l%+=1:B$=FNparam(A$) 12690 UNTILB$=""ORl%=4:C$=LEFT$(C$,LENC$-1) 12700 PROCprint(FNmsg1("Wait",C$),FNmsg1("Timeout",STR$d%),"") 12710 IFtget%<0 THEN 12720 return%=FNget4s(s4$(0),s4$(1),s4$(2),s4$(3),d%) 12730 ELSE 12740 return%=FNgettw(s4$(0),s4$(1),s4$(2),s4$(3),d%) 12750 ENDIF 12760 IF return%>0 THENPROCprint("",FNmsg1("Received",s4$(return%-1)),"")ELSEPROCprint("",FNmsg0("TimedOut"),"") 12770ENDIF 12780=return% 12790 12800DEFFNwaitevent 12810PROCupd_icon(status%,7,FNmsg0("Select")) 12820PROCprint(FNmsg0("Waiting")," ","") 12830REPEATPROCpoll(50):UNTILFNtestevent 12840=1 12850 12860DEFPROCeventonoff(A$) 12870LOCALa%,B$:a%=TRUE 12880REPEATB$=FNparam(A$) 12890CASELEFT$(B$,2)OF 12900WHEN"/e":a%=TRUE 12910WHEN"/d":a%=FALSE 12920WHEN"ti":event%(1)=a% 12930WHEN"li":event%(2)=a% 12940WHEN"ta":event%(3)=a% 12950WHEN"tw":event%(4)=a% 12960WHEN"in":event%(5)=a% 12970WHEN"ic":event%(6)=a% 12980WHEN"fi":event%(7)=a% 12990WHEN"me":event%(8)=a% 13000WHEN"eo":event%(9)=a% 13010WHEN"al":event%()=a% 13020ENDCASE 13030UNTILA$="":event%(0)=TRUE 13040ENDPROC 13050 13060DEFFNgettw(tget$(0),tget$(1),tget$(2),tget$(3),wait%) 13070LOCALst%,r% 13080r%=0:twgflag%=0:wait%=wait%*100:st%=time% 13090PROCtget(tdata$(tget%)) 13100REPEATPROCpoll(50):UNTILtwgflag%>0 ORABS(time%-st%)>wait% ORstop%<>0 13110IFtwgflag%>0 THENr%=twgflag% 13120=r% 13130 13140DEFPROCtget(A$) 13150LOCALL% 13160FORL%=0TO3 13170 IFtget$(L%)>""ANDINSTR(A$,tget$(L%))>0 THENtwgflag%=L%+1:L%=3 13180NEXT 13190tget%=-1 13200ENDPROC 13210 13220DEFFNget4s(s1$,s2$,s3$,s4$,wait%) 13230LOCALflag%,st%,J% 13240wait%=wait%*100:st%=time% 13250n1%=ASCs1$:n2%=ASCs2$:n3%=ASCs3$:n4%=ASCs4$ 13260p1%=1:p2%=1:p3%=1:p4%=1:flag%=0 13270REPEAT 13280 J%=FNrec 13290 IFJ%>-1 THEN 13300 IFJ%=n1% THENp1%+=1:n1%=ASC(MID$(s1$,p1%)) ELSEn1%=ASCs1$:p1%=1 13310 IFJ%=n2% THENp2%+=1:n2%=ASC(MID$(s2$,p2%)) ELSEn2%=ASCs2$:p2%=1 13320 IFJ%=n3% THENp3%+=1:n3%=ASC(MID$(s3$,p3%)) ELSEn3%=ASCs3$:p3%=1 13330 IFJ%=n4% THENp4%+=1:n4%=ASC(MID$(s4$,p4%)) ELSEn4%=ASCs4$:p4%=1 13340 ELSE 13350 PROCpoll(10) 13360 ENDIF 13370 IFp1%>LENs1$ ANDs1$>"":flag%=1 13380 IFp2%>LENs2$ ANDs2$>"":flag%=2 13390 IFp3%>LENs3$ ANDs3$>"":flag%=3 13400 IFp4%>LENs4$ ANDs4$>"":flag%=4 13410UNTILflag%>0 ORABS(time%-st%)>wait% ORstop%<>0 ORredial%<>0 13420IFflag%>0 THEN:=flag% 13430=0 13440 13450DEFPROCsend(A$) 13460LOCALA%,J%,R%,t$,tw%,B$,C$:t$="":R%=0 13470REPEATB$=FNparam(A$) 13480 IFLEFT$(B$,1)="/"THEN 13490 C$=FNvalue(B$):CASELEFT$(B$,2)OF 13500 WHEN"ra":R%=TRUE 13510 WHEN"no":R%=FALSE 13520 WHEN"na","id":t$=C$ 13530 ENDCASE 13540 ELSE 13550 IFt$=""THEN 13560 IFdevice%=0THENPROChalt(FNmsg0("Enodev")):ENDPROC 13570 FORA%=1TOLENB$:J%=FNd(0,port%,ASCMID$(B$,A%,1),0):NEXT 13580 IFR%=0 THENJ%=FNd(0,port%,13,0) 13590 ELSE 13600 tw%=0:WHILEtwname$(tw%)<>t$ANDtw%<twmax%:tw%+=1:ENDWHILE 13610 IFtw%<twmax%ANDtwh%(tw%)<>0THEN 13620 !q%=256:q%!12=0:q%!16=&808C0:q%!20=LENB$-(R%=0):$(q%+24)=B$ 13630 SYS"Wimp_SendMessage",17,q%,twh%(tw%) 13640 PROClog(FNmsg2("TaskSend",LEFT$(B$,100),twname$(tw%))) 13650 ENDIF 13660 ENDIF 13670 ENDIF 13680UNTILA$="" 13690ENDPROC 13700 13710DEFFNipget(A$) 13720LOCALr%,start$,d%,a%,loc%,tlim%,B$,C$,J% 13730r%=0:d%=60:a%=0 13740REPEATB$=FNparam(A$) 13750IFLEFT$(B$,1)="/"THEN 13760 C$=FNvalue(B$):CASELEFT$(B$,2)OF 13770 WHEN"de":d%=VALC$:IFd%<10THENd%=10 13780 WHEN"au":a%=TRUE 13790 ENDCASE 13800 ELSE 13810 start$=B$ 13820ENDIF 13830UNTILA$="" 13840IFa%=0THEN 13850 r%=FNget4s(start$,"","","",d%) 13860 ELSE 13870 start$="":loc%=0:r%=0:tlim%=time%+d%*100 13880 REPEAT 13890 J%=FNrec 13900 IFJ%>0THEN 13910 CASEloc%OF 13920 WHEN0,1,2:IFJ%>47ANDJ%<57THENstart$+=CHR$J%:loc%+=1:ELSEstart$="":loc%=0 13930 WHEN3:IFJ%=46THENstart$+=".":loc%+=1:ELSEstart$="":loc%=0 13940 ENDCASE 13950 ELSE 13960 PROCpoll(slice%) 13970 ENDIF 13980 UNTILloc%=4ORtime%>tlim%:IFloc%=4THENr%=1 13990ENDIF 14000IFr%=1 THEN 14010 ipnumber$=start$ 14020 J%=FNrec 14030 REM terminates on space or control char 14040 WHILE (J%>32 OR J%=0) ANDLENipnumber$<20 14050 IFJ%>31 THENipnumber$=ipnumber$+CHR$J%:PROCpoll(slice%):ELSEPROCpoll(10) 14060 J%=FNrec 14070 ENDWHILE 14080 C%=ASC(RIGHT$(ipnumber$,1)) 14090 WHILE (C%<48 OR C%>57) ANDLENipnumber$>5 14100 ipnumber$=LEFT$(ipnumber$,LEN(ipnumber$)-1) 14110 C%=ASC(RIGHT$(ipnumber$,1)) 14120 ENDWHILE 14130 PROCsetv("ipaddress",ipnumber$) 14140 PROCsetv("route",FNsubst("%ip1.%ip2.%ip3.254")) 14150 return$=ipnumber$:r%=-1:A$="" 14160ENDIF 14170=r% 14180 14190DEFPROCupdateip(A$) 14200LOCALl%,m% 14210l%=INSTR(A$,"."):PROCsetv("ip1",LEFT$(A$,l%-1)) 14220m%=INSTR(A$,".",l%+1):PROCsetv("ip2",MID$(A$,l%+1,m%-l%-1)) 14230l%=INSTR(A$,".",m%+1):PROCsetv("ip3",MID$(A$,m%+1,l%-m%-1)) 14240PROCsetv("ip4",MID$(A$,l%+1)) 14250PROCprint("","",A$) 14260ENDPROC 14270 14280DEFPROCmakefile(name$) 14290A%=INSTR(name$," ") 14300IFA%<=1 THEN PROCquit(FNmsg1("Ebadmake",name$)) 14310source$=LEFT$(name$,A%-1):dest$=MID$(name$,A%+1) 14320PROCprint(FNmsg1("Make",dest$),"","") 14330IFsource$="-"THENsource$="null:" 14340fh1%=FNopenin(source$) 14350IFfh1%=0 THENPROChalt(FNmsg1("Enotfound",source$)):ENDPROC 14360fh2%=FNopenout(dest$) 14370IFfh2%=0 THENPROChalt(FNmsg1("Ebadfile",dest$)):ENDPROC 14380WHILE (EOF#fh1%=FALSE ORLEFT$(FNline(stage%+1),1)="+") 14390 IF EOF#fh1% THEN 14400 stage%+=1:A$=MID$(FNline(stage%),2) 14410 ELSE 14420 A$=GET$#fh1% 14430 ENDIF 14440 A$=FNsubst(A$) 14450 IFLEFT$(A$,1)<>"#" THENBPUT#fh2%,A$ 14460 PROCpoll(slice%) 14470ENDWHILE 14480PROCcf(fh1%):PROCcf(fh2%) 14490ENDPROC 14500 14510DEFFNopenin(f$) 14520=FNfopen(f$,&4F) 14530 14540DEFFNopenout(f$) 14550=FNfopen(f$,&8F):PROCsettype(f$,&FFF) 14560 14570DEFFNopenup(f$) 14580LOCALh% 14590h%=FNfopen(f$,&CF) 14600IFh%=0THENh%=FNfopen(f$,&8F):PROCsettype(f$,&FFF) 14610=h% 14620 14630DEFFNfopen(f$,r%) 14640LOCALh%,F% 14650SYS"XOS_Find",r%,f$TOh%;F% 14660IF(F%AND1)THENh%=0 14670=h% 14680 14690DEFFNdelfile(f$) 14700LOCALF%:SYS"XOS_File",6,f$TO;F% 14710=(F%AND1) 14720 14730DEFPROCsettype(f$,t%) 14740SYS"XOS_File",18,f$,t% 14750ENDPROC 14760 14770DEFPROCpause(wait%) 14780LOCALendtime% 14790IFwait%=0 THEN 14800 PROCpaused 14810 ELSE 14820 PROClog(FNmsg1("Wait",STR$wait%+"s")) 14830 PROCpoll(0):st%=time%:wait%=wait%*100 14840 REPEAT 14850 PROCpoll(50) 14860 UNTILABS(st%-time%)>wait% 14870 ENDIF 14880ENDPROC 14890 14900DEFPROCsettime 14910LOCALl%,m% 14920?q%=3:SYS"OS_Word",14,q% 14930SYS"OS_ConvertDateAndTime",q%,tmp%,256,"%24%MI%SE"TOl%,m%:now$=FNstr(l%) 14940PROCsetv("$time",now$):PROCsetv("$mtime",STR$(time%DIV100)) 14950ENDPROC 14960 14970DEFPROCsetdate 14980LOCALl%,m% 14990?q%=3:SYS"OS_Word",14,q% 15000SYS"OS_ConvertDateAndTime",q%,tmp%,256,"%YR%MN%DY"TOl%,m%:now$=FNstr(l%) 15010PROCsetv("$date",now$) 15020ENDPROC 15030 15040DEFPROCalarm(A$) 15050LOCALal%,a$,an%,at%,ai%,B$,C$ 15060an%=-1:al%=-1:ai%=-1:a$=A$ 15070REPEATB$=FNparam(A$) 15080IFLEFT$(B$,1)="/"THEN 15090 C$=FNvalue(B$) 15100 CASELEFT$(B$,2)OF 15110 WHEN"st":stop$=C$ 15120 WHEN"er":error$=C$ 15130 WHEN"dt","cts":aline%(0)=FNtf10(VALC$):al%=0 15140 WHEN"ds":aline%(1)=FNtf10(VALC$):al%=1 15150 WHEN"rn":aline%(2)=FNtf10(VALC$):al%=2 15160 WHEN"dc":aline%(3)=FNtf10(VALC$):al%=3 15170 WHEN"ti":at%=FNdecodetime(C$) 15180 WHEN"ic":ai%=FNiconid(C$) 15190 WHEN"na","id":an%=FNalarmno(C$):alarmid$(an%)=C$ 15200 WHEN"ca","de":PROCcancelalarm(C$) 15210 ENDCASE 15220ENDIF 15230UNTILA$="" 15240IFat%>0 THEN 15250 IFan%<0THENan%=FNalarmno("~") 15260 alarm$(an%,0)=B$:alarm$(an%,1)=a$:alarmtime%(an%)=at% 15270ELSE 15280 IFal%>=0 THENaline$(al%)=B$ 15290 IFai%>=0 THENifile$(ai%)=B$ 15300ENDIF 15310ENDPROC 15320 15330DEFFNalarmno(A$) 15340LOCALa%:a%=0 15350REPEATa%+=1:UNTILalarm$(a%,0)=""ORalarmid$(a%)=A$ORa%=almax% 15360IFa%=almax%THENPROChalt(FNmsg0("Ealarm")):=0 15370=a% 15380 15390DEFFNtf10(A%):=-(A%<>0) 15400 15410DEFPROCcancelalarm(C$) 15420LOCALa%:a%=0 15430REPEATa%+=1:UNTILalarmid$(a%)=C$ORa%=almax% 15440IFalarmid$(a%)=C$ THENalarm$(a%,0)="":PROClog(FNmsg1("Acancel",C$)) 15450ENDPROC 15460 15470DEFFNdecodetime(C$) 15480LOCALl%,m%,hr%,mi%,sc%,add%,r%,now%,nhr%,nmi%,nse%,wait%,tnow% 15490IFLEFT$(C$,1)="+"THENadd%=TRUE:C$=MID$(C$,2) ELSEadd%=FALSE 15500l%=INSTR(C$,":"):IFl%>0 THEN 15510 m%=INSTR(C$,":",l%+1):IFm%>0 THEN 15520 hr%=VALLEFT$(C$,l%-1) 15530 mi%=VALMID$(C$,l%+1,m%-1) 15540 sc%=VALMID$(C$,m%+1,m%+3) 15550 ELSE 15560 IFadd% THEN 15570 hr%=0:mi%=VALLEFT$(C$,l%-1):sc%=VALMID$(C$,l%+1,l%+3) 15580 ELSE 15590 sc%=0:hr%=VALLEFT$(C$,l%-1):mi%=VALMID$(C$,l%+1,l%+3) 15600 ENDIF 15610 ENDIF 15620 ELSE 15630 IFadd% THENhr%=0:mi%=0:sc%=VALLEFT$(C$,2) ELSEsc%=0:mi%=0:hr%=VALLEFT$(C$,2) 15640ENDIF 15650SYS"OS_ReadMonotonicTime"TOnow% 15660IFadd% THEN 15670 r%=now%+100*sc%+6000*mi%+360000*hr% 15680 ELSE 15690 ?q%=3:SYS"OS_Word",14,q% 15700 SYS"OS_ConvertDateAndTime",q%,tmp%,256,"%24%MI%SE"TOl%,m%:now$=FNstr(l%) 15710 nhr%=VALLEFT$(now$,2):nmi%=VALMID$(now$,3,2):nse%=VALRIGHT$(now$,2) 15720 tnow%=nse%+nmi%*60+nhr%*3600 15730 wait%=(sc%+mi%*60+hr%*3600)-tnow%:WHILEwait%<0:wait%+=24*3600:ENDWHILE 15740 r%=now%+wait%*100 15750ENDIF 15760=r% 15770 15780DEFPROCtimealarm 15790LOCALc%:c%=0 15800REPEATc%+=1 15810 IFalarm$(c%,0)>"" ANDtime%>alarmtime%(c%) THEN 15820 com$=alarm$(c%,0):alarm$(c%,0)="" 15830 IFINSTR(alarm$(c%,1),"/repeat")>0 THENPROCalarm(alarm$(c%,1)) 15840 PROCaddevent(com$,1) 15850 ENDIF 15860UNTILc%=almax% 15870checkalarm%=time% 15880ENDPROC 15890 15900DEFPROClinealarm 15910LOCALl1%,J% 15920IFdevice%THEN 15930 J%=FNd(9,port%,0,0) 15940 IFJ%<>oldline%THEN 15950 oldline%=J%:IF(J%AND1)THENt$="�"ELSEt$=" " 15960 IF(J%AND2)THENt$+="�"ELSEt$+=" " 15970 IF(J%AND8)THENt$+="�"ELSEt$+=" " 15980 PROCupd_icon(status%,10,t$) 15990 ENDIF 16000 FORl1%=0TO3 16010 IFaline$(l1%)>""AND(J%AND(1<<l1%))=aline%(l1%)THENPROCaddevent(aline$(l1%),2):aline$(l1%)="" 16020 NEXTl1% 16030 ELSE 16040 IFoldline%>0THENoldline%=0:PROCupd_icon(status%,15,"") 16050ENDIF 16060ENDPROC 16070 16080DEFPROClist(A$) 16090LOCALB$,C$ 16100B$=FNparam(A$):C$=FNvalue(B$) 16110CASELEFT$(B$,2)OF 16120 WHEN"al":PROClistalarms 16130 WHEN"me":PROClistmenu 16140 WHEN"ta":PROClisttasks 16150 WHEN"va":PROClistvars 16160 WHEN"sc":PROClistscript(A$) 16170 WHEN"fi":PROClistfiles 16180 WHEN"ju":PROClistjt 16190ENDCASE 16200ENDPROC 16210 16220DEFPROClistalarms 16230LOCALc%,A%,A$ 16240PROCwarn_txt(FNmsg0("Condition")+" "+FNmsg0("Action")) 16250FORc%=0TOalmax% 16260 IFalarm$(c%,0)>"" THEN 16270 A%=(alarmtime%(c%)-time%)DIV100 16280 A$="t+"+RIGHT$("00"+STR$(A%DIV3600),2)+":" 16290 A$+=RIGHT$("00"+STR$((A%MOD3600)DIV60),2)+":" 16300 A$+=RIGHT$("00"+STR$(A%MOD60),2) 16310 PROCf_list(A$,alarm$(c%,1)+" ("+alarmid$(c%)+")") 16320 ENDIF 16330NEXT 16340FORc%=0TOimax% 16350 IFibar$(c%)>""THENPROCf_list(FNmsg0("Iclick"),ibar$(c%)+" ("+ibarid$(c%)+")") 16360 IFifile$(c%)>""THENPROCf_list(FNmsg0("Ifile"),ifile$(c%)+" ("+ibarid$(c%)+")") 16370NEXT 16380PROCf_list("stop",stop$) 16390IFaline$(0)>""THENPROCf_list("DTR"+" ("+STR$aline%(0)+")",aline$(0)) 16400IFaline$(1)>""THENPROCf_list("DSR"+" ("+STR$aline%(1)+")",aline$(1)) 16410IFaline$(2)>""THENPROCf_list("RNG"+" ("+STR$aline%(2)+")",aline$(2)) 16420IFaline$(3)>""THENPROCf_list("DCD"+" ("+STR$aline%(3)+")",aline$(3)) 16430ENDPROC 16440 16450DEFPROCf_list(A$,B$) 16460IFB$>""THENPROCwarn_txt(" "+A$+STRING$(13-LENA$," ")+B$) 16470ENDPROC 16480 16490DEFFNiconbar(A$) 16500LOCALr%,id$,act$,s$,B$,C$ 16510id$="":act$="":s$="" 16520REPEAT 16530 B$=FNparam(A$) 16540 IFLEFT$(B$,1)="/"THEN 16550 C$=FNvalue(B$) 16560 CASELEFT$(B$,2)OF 16570 WHEN"fi":r%=FNmergesprites(C$) 16580 WHEN"id","name":id$=C$ 16590 WHEN"ac":act$=C$ 16600 WHEN"ca","de":r%=FNcancelicon(C$) 16610 WHEN"fr":r%=FNsfree 16620 ENDCASE 16630 ELSE 16640 s$=B$ 16650 ENDIF 16660UNTILA$="" 16670 IFid$>""ANDs$>""THENr%=FNaddicon(s$,id$,act$) 16680=r% 16690 16700DEFFNiconid(A$) 16710LOCALa%:a%=0 16720REPEATa%+=1:UNTILibarid$(a%)=A$ORa%=imax% 16730IFa%=imax%ORA$=""THENPROClog(FNmsg0("Eicon1")):=-1 16740=a% 16750 16760DEFFNnewiconid(A$) 16770LOCALa%:a%=0 16780REPEATa%+=1:UNTILibarid$(a%)=A$ORibar%(a%)=0ORa%=imax% 16790IFa%=imax%ORA$=""THENPROClog(FNmsg0("Eicon1")):=-1 16800=a% 16810 16820DEFFNaddicon(A$,id$,act$) 16830LOCALa%,Z% 16840a%=FNnewiconid(id$) 16850IFa%<0THEN=0 16860IFA$>""THEN 16870 IFibarid$(a%)=id$ THENZ%=FNcancelicon(id$) 16880 PROClog("Adding icon "+A$) 16890 ibar%(a%)=FNic(A$,a%):ibarid$(a%)=id$ 16900ENDIF 16910ibar$(a%)=act$ 16920=FNtf10(ibar%(a%)) 16930 16940DEFFNcancelicon(A$) 16950LOCALa% 16960a%=FNiconid(A$) 16970IFa%<0THENPROClog(FNmsg0("Eicon1")):=0 16980IFibar%(a%)<1THENPROClog(FNmsg0("Eicon2")):=0 16990!icons%=-2:icons%!4=ibar%(a%):SYS"XWimp_DeleteIcon",,icons%TO;F% 17000ibar%(a%)=0:ibarid$(a%)="" 17010=FNtf10(F%) 17020 17030DEFPROCifile(Z%,f$,ty%) 17040PROCsetv("$type",STR$~ty%):PROCsetv("$file",+f$) 17050PROCaddevent(ifile$(Z%),7) 17060ENDPROC 17070 17080DEFPROCset(A$) 17090LOCALl%,m%,B$,C$ 17100B$=FNparam(A$):C$=FNparam(A$) 17110PROCsetv(B$,C$) 17120ENDPROC 17130 17140DEFPROCsetv(B$,C$) 17150LOCALl%,p%:p%=-1:FORl%=0TOvmax% 17160 IFvar$(l%,0)=B$ORvar$(l%,0)=""THENvar$(l%,0)=B$:var$(l%,1)=C$:p%=l%:l%=vmax%+1 17170NEXT 17180IFB$="ipaddress"THENPROCupdateip(C$) 17190IFp%=-1THENPROChalt(FNmsg0("Evar")) 17200ENDPROC 17210 17220DEFPROCunset(A$) 17230LOCALl%,B$ 17240B$=FNparam(A$) 17250FORl%=0TOvmax% 17260 IFvar$(l%,0)=B$ THENvar$(l%,0)="":var$(l%,1)="" 17270NEXT 17280IFB$="ipaddress"THENPROCprint("",""," ") 17290ENDPROC 17300 17310DEFFNvv(A$) 17320LOCALl%,t$,B$:t$="" 17330B$=FNparam(A$) 17340FORl%=0TOvmax% 17350 IFvar$(l%,0)=B$ THENt$=var$(l%,1):l%=vmax% 17360NEXT 17370=t$ 17380 17390DEFPROClistvars 17400LOCALc% 17410PROCwarn_txt(FNmsg0("Variable")+" "+FNmsg0("Value")) 17420FORc%=0TOvmax% 17430 IFvar$(c%,0)>""THENPROCf_list(var$(c%,0),var$(c%,1)) 17440NEXT 17450ENDPROC 17460 17470DEFFNdroplines 17480LOCALJ% 17490IFdevice%=0THEN=0 17500PROCprint("",FNmsg0("DevDrop"),"") 17510J%=FNd(8,port%,0,0) 17520PROCpoll(100) 17530J%=FNd(8,port%,3,0) 17540=1 17550 17560DEFPROCgoto(A$,RETURN stage%) 17570LOCALl%,flag%,dest$ 17580l%=0:flag%=-1:dest$=FNparam(A$) 17590REPEAT 17600IFjt$(l%)=dest$THENflag%=jt%(l%):l%=jtl% 17610l%+=1:UNTILl%>=jtl% 17620IFflag%<0THENPROChalt(FNmsg1("Elabel",dest$)):ENDPROC 17630stage%=flag% 17640ENDPROC 17650 17660DEFPROCgosub(A$,RETURN stage%) 17670LOCALB$,p%,old%,lock% 17680IFcall_lev%=submax% THENPROChalt(FNmsg0("Elevel")):ENDPROC 17690dest$=FNparam(A$) 17700lock%=FALSE:IFdest$="/lock"THENlock%=TRUE:dest$=FNparam(A$) 17710p%=0:IFA$>""THEN 17720 REPEATp%+=1:B$=FNparam(A$):PROCsetv("p"+STR$p%,B$):UNTILA$="" 17730ENDIF 17740old%=stage%:PROCgoto(dest$,stage%) 17750IFlock%THEN 17760 FORp%=0TOcall_lev%:IFcall_lock%(p%)=stage% THENstage%=old%:PROCwarn_txt(FNmsg1("Elock",dest$)) 17770 NEXT 17780ENDIF 17790IFstage%<>old% THEN 17800 call_lev%+=1:call_ret%(call_lev%)=old% 17810 IFlock% THENcall_lock%(call_lev%)=stage% 17820ENDIF 17830ENDPROC 17840 17850DEFFNreturn(A$,RETURN stage%) 17860IFcall_lev%=0 THENPROChalt(FNmsg0("Ereturn")):=0 17870stage%=call_ret%(call_lev%):call_lev%-=1 17880return$=A$ 17890=-1 17900 17910DEFFNtestfile(A$) 17920LOCALr% 17930SYS"XOS_File",17,A$TOr% 17940=r% 17950 17960DEFFNfile(A$) 17970LOCALr%,n%,l%,B$,C$ 17980r%=0:B$=FNparam(A$):C$=FNparam(A$) 17990CASELEFT$(B$,3)OF 18000 WHEN"/si":SYS"XOS_File",23,C$TOn%,,,,r% 18010 WHEN"/at":SYS"XOS_File",23,C$TOn%,,,,,r% 18020 WHEN"/ty":SYS"XOS_File",23,C$TOn%,,,,,,r%:return$=STR$~r%:r%=-1 18030 WHEN"/ex":return$=FNcanon(C$):IFreturn$>""THENr%=-1:n%=1 18040 WHEN"/le":return$=FNcanon(C$):n%=LENreturn$ 18050 WHILEn%>0ANDMID$(return$,n%,1)<>".":n%-=1:ENDWHILE 18060 IFn%>1THENreturn$=MID$(return$,n%+1):r%=-1 18070 WHEN"/pa":return$=FNcanon(C$):n%=LENreturn$ 18080 WHILEn%>0ANDMID$(return$,n%,1)<>".":n%-=1:ENDWHILE 18090 IFn%>1THENreturn$=LEFT$(return$,n%-1):r%=-1 18100 OTHERWISE:SYS"XOS_File",23,B$TOr%:n%=r% 18110ENDCASE 18120IFn%=0THENr%=0 18130=r% 18140 18150DEFFNcanon(A$) 18160LOCALr$:r$="" 18170SYS"XOS_FSControl",37,A$,tmp%,,,256TO,,,,,r%;F% 18180IFr%>0AND(F%AND1)=0THENr$=FNstr(tmp%) 18190=r$ 18200 18210DEFFNtestline(A$) 18220LOCAL return%,J%,B$:return%=0 18230J%=FNd(9,port%,0,0) 18240REPEATB$=FNparam(A$) 18250 CASEB$OF 18260 WHEN "/cts","/dtr":return%+=(J%AND1) 18270 WHEN "/dsr":return%+=(J%AND2) 18280 WHEN "/rng":return%+=(J%AND4) 18290 WHEN "/dcd":return%+=(J%AND8) 18300 OTHERWISE:PROChalt(FNmsg0("Eparam")):=0 18310 ENDCASE 18320UNTILA$="" 18330=return% 18340 18350DEFFNfree(A$) 18360LOCALn%,f%,r%,B$,C$ 18370SYS"Wimp_SlotSize",-1,-1TO,n%,f% 18380REPEATB$=FNparam(A$) 18390 IFLEFT$(B$,1)="/"THEN 18400 C$=FNvalue(B$) 18410 CASELEFT$(B$,2)OF 18420 WHEN"me":r%=n%+f% 18430 WHEN"ne":r%=n% 18440 WHEN"fr":r%=f% 18450 WHEN"in":r%=HIMEM-END 18460 WHEN"de":SYS"XOS_FSControl",49,C$TOr%;F%:IFFNtf10(F%)=0THENr%=0 18470 ENDCASE 18480 ELSE 18490 IFB$>""THENPROCsetv(B$,STR$r%) 18500 ENDIF 18510UNTILA$="" 18520=r% 18530 18540DEFFNif(A$,RETURNcom$) 18550LOCAL test$,if$,not%,return%,l%,m%,n% 18560l%=INSTR(A$,"("):m%=INSTR(A$,")",l%):n%=INSTR(A$," ",m%) 18570IF l%*m%*n%=0 THENPROClog(FNmsg0("Eif")):=0 18580not%=FALSE:test$=MID$(A$,l%+1,m%-l%-1):if$=MID$(A$,n%+1) 18590IFLEFT$(test$,1)="!" THENnot%=TRUE:test$=MID$(test$,2) 18600return%=FNcommand(test$):IFnot% THENreturn%=-(return%=0) 18610IF return%<>0ANDstop%=0THENreturn%=FNcommand(if$) ELSEcom$="" 18620=return% 18630 18640DEFFNcase(A$) 18650caslev%+=1:IFcaslev%>casmax%THENPROChalt(FNmsg0("Ecase")):=0 18660case$(caslev%)=FNparam(A$):casmatch%?caslev%=0:=1 18670 18680DEFFNwhen(A$,RETURNcom$) 18690LOCALm%,B$:m%=FALSE 18700IFcaslev%=0 THENPROChalt(FNmsg0("Ewhen")):=0 18710REPEATB$=FNparam(A$) 18720 IFB$=case$(caslev%)THENm%=TRUE:casmatch%?caslev%=1 18730UNTILA$="" 18740IFm%=FALSE THENcom$="" 18750=0 18760 18770DEFPROCotherwise(RETURNcom$) 18780IFcaslev%=0 THENPROChalt(FNmsg0("Ewhen")):ENDPROC 18790IFcasmatch%?caslev%=1 THENcom$="" 18800ENDPROC 18810 18820DEFFNendcase 18830IFcaslev%=0 THENPROChalt(FNmsg0("Ewhen")):=0 18840caslev%-=1:=1 18850 18860DEFFNtesteq(c$,A$) 18870LOCALr%,n%,l%,c%,b$,B$,C$:r%=0 18880B$=FNparam(A$):C$=FNparam(A$) 18890b$=B$+C$:n%=TRUE:FORl%=1TOLENb$:c%=ASCMID$(b$,l%,1) 18900 IFc%<46ORc%>57ORc%=47THENn%=FALSE:l%=LENb$ 18910NEXT 18920LOCALERROR 18930ONERRORLOCAL:PROClog(FNmsg1("Ecomp",c$)):ENDPROC 18940CASEc$OF 18950 WHEN"?eq":IFn%THENr%=(VALB$=VALC$)ELSEr%=(B$=C$) 18960 WHEN"?ne":IFn%THENr%=(VALB$<>VALC$)ELSEr%=(B$<>C$) 18970 WHEN"?lt":IFn%THENr%=(VALB$<VALC$)ELSEr%=(B$<C$) 18980 WHEN"?gt":IFn%THENr%=(VALB$>VALC$)ELSEr%=(B$>C$) 18990 WHEN"?le":IFn%THENr%=(VALB$<=VALC$)ELSEr%=(B$<=C$) 19000 WHEN"?ge":IFn%THENr%=(VALB$>=VALC$)ELSEr%=(B$>=C$) 19010ENDCASE 19020=-(r%<>0) 19030 19040DEFFNeval(A$) 19050LOCALB$ 19060return$="" 19070B$=FNparam(A$) 19080LOCAL ERROR 19090ON ERROR LOCAL:PROClog(FNmsg1("Eeval",B$)):=0 19100return$=STR$(EVALB$) 19110=-1 19120 19130DEFFNstring(A$) 19140LOCALa%,s%,l%,s$,b$,B$,C$:a%=0:s%=0:l%=0 19150REPEATB$=FNparam(A$) 19160 IFLEFT$(B$,1)="/"THEN 19170 C$=FNvalue(B$):CASELEFT$(B$,3)OF 19180 WHEN"siz":a%=1 19190 WHEN"low":a%=2 19200 WHEN"lef":a%=3:s%=VALC$ 19210 WHEN"rig":a%=4:s%=VALC$ 19220 WHEN"sta":a%=5:s%=VALC$ 19230 WHEN"len":l%=VALC$ 19240 WHEN"ins":a%=6:b$=C$ 19250 WHEN"upp":a%=7 19260 ENDCASE 19270 ELSE 19280 s$=B$ 19290 ENDIF 19300UNTILA$="" 19310CASEa%OF 19320 WHEN1:return$=STR$LENs$ 19330 WHEN2:return$=FNlower(s$) 19340 WHEN3:return$=LEFT$(s$,s%) 19350 WHEN4:return$=RIGHT$(s$,s%) 19360 WHEN5:IFl%<1THENreturn$=MID$(s$,s%)ELSEreturn$=MID$(s$,s%,l%) 19370 WHEN6:return$=STR$(INSTR(s$,b$)) 19380 WHEN7:return$=FNupper(s$) 19390 OTHERWISE:return$=s$ 19400ENDCASE 19410=-1 19420 19430DEFFNmovefile(A$) 19440LOCALl%,B$ 19450PROCprint(FNmsg0("Fmove1")," ","") 19460B$=FNparam(A$) 19470IFA$=""THENPROCprint("",FNmsg0("Fbad"),""):=0 19480l%=INSTR(A$,"*") 19490IFl%>0 THEN 19500 REPEATA$=LEFT$(A$,l%-1)+RIGHT$(STR$(TIME),4)+MID$(A$,l%+1) 19510 PROCpoll(slice%) 19520 UNTILFNtestfile(A$)<>1 19530ENDIF 19540PROCprint("",FNmsg2("Fto",B$,A$),"") 19550SYS"XOS_FSControl",25,B$,A$ TO;F% 19560IF (F%AND1) THEN 19570 SYS"XOS_FSControl",26,B$,A$,%10000010 TO;F% 19580ENDIF 19590PROCsetv("$dest",A$) 19600=-((F%AND1)=0) 19610 19620DEFFNcopyfile(A$) 19630LOCALl%,act%,s$,d$,n%,B$,C$ 19640act%=0:s$="":d$="" 19650PROCprint(FNmsg0("Fcopy")," ","") 19660REPEATB$=FNparam(A$) 19670 IFLEFT$(B$,1)="/"THEN 19680 C$=FNvalue(B$):CASELEFT$(B$,2)OF 19690 WHEN"ta":act%=1:n%=VALC$:IFn%=0THENn%=50 19700 WHEN"he":act%=2:n%=VALC$:IFn%=0THENn%=50 19710 ENDCASE 19720 ELSE 19730 IFs$=""THENs$=B$:ELSEd$=B$ 19740ENDIF 19750UNTILA$="" 19760IFd$=""THENPROCprint("",FNmsg0("Fbad"),""):=0 19770l%=INSTR(d$,"*"):IFl%>0 THEN 19780 REPEATd$=LEFT$(d$,l%-1)+RIGHT$(STR$(TIME),4)+MID$(d$,l%+1) 19790 UNTILFNtestfile(d$)<>1 19800ENDIF 19810PROCprint("",FNmsg2("Fto",B$,A$),"") 19820l%=0:CASEact%OF 19830 WHEN0:SYS"XOS_FSControl",26,s$,d$TO;F%:l%=-((F%AND1)=0) 19840 WHEN1:PROCprint(FNmsg0("Ftail"),"",""):l%=FNtail(s$,d$,n%) 19850 WHEN2:PROCprint(FNmsg0("Fhead"),"",""):l%=FNhead(s$,d$,n%) 19860ENDCASE 19870PROCsetv("$dest",A$) 19880=l% 19890 19900DEFFNappend(A$) 19910LOCALS%,r%,ff%,tf%,f$,t$,F% 19920PROCprint(FNmsg0("Fapp")," ","") 19930f$=FNparam(A$):t$=FNparam(A$) 19940IFt$=""THENPROCprint("",FNmsg0("Fbad"),""):=0 19950PROCprint("",FNmsg2("Fto",f$,t$),"") 19960ff%=FNopenin(f$):IFff%=0THENPROClog(FNmsg1("Fsource",f$)):=0 19970tf%=FNopenup(t$):IFtf%=0THENSYS"XOS_File",11,t$,&FFF,,0,0:tf%=FNopenout(t$) 19980IFtf%>0 ANDEXT#ff%>0THEN 19990 PTR#tf%=EXT#tf%:S%=0:REPEATSYS"XOS_GBPB",4,ff%,tmp%,256TO,,,r%;F% 20000 IFr%<>256AND(F%AND1)=0THENSYS"XOS_GBPB",2,tf%,tmp%,256-r%TO;F%:PROCpoll(slice%) 20010 S%+=256-r% 20020UNTILS%>=EXT#ff%OR(F%AND1)<>0 20030ENDIF 20040PROCcf(ff%):PROCcf(tf%) 20050=1 20060 20070DEFFNtail(s$,d$,l%) 20080LOCALn%,m%,A$ 20090ff%=FNopenin(s$):IFff%=0THENPROClog(FNmsg1("Fsource",s$)):=0 20100SYS"XOS_File",11,d$,&FFF,,0,0:tf%=FNopenout(d$) 20110IFtf%>0 ANDEXT#ff%>0THEN 20120 n%=0:REPEAT 20130 A$=GET$#ff%:n%+=1:PROCpoll(slice%*2) 20140 UNTILEOF#ff%:PTR#ff%=0 20150 m%=n%-l%:IFm%<0THENm%=0 20160 n%=0:REPEAT 20170 A$=GET$#ff%:n%+=1:PROCpoll(slice%*2) 20180 UNTILn%>=m% 20190 REPEAT 20200 A$=GET$#ff%:BPUT#tf%,A$:PROCpoll(slice%*2) 20210 UNTILEOF#ff% 20220ENDIF 20230PROCcf(ff%):PROCcf(tf%) 20240=1 20250 20260DEFFNhead(s$,d$,l%) 20270LOCALn%,m%,A$ 20280ff%=FNopenin(s$):IFff%=0THENPROClog(FNmsg1("Fsource",s$)):=0 20290SYS"XOS_File",11,d$,&FFF,,0,0:tf%=FNopenout(d$) 20300IFtf%>0 ANDEXT#ff%>0THEN 20310 n%=0:REPEAT 20320 A$=GET$#ff%:BPUT#tf%,A$:n%+=1:PROCpoll(slice%*2) 20330 UNTILEOF#ff%ORn%>=l% 20340ENDIF 20350PROCcf(ff%):PROCcf(tf%) 20360=1 20370 20380DEFFNdelete(A$) 20390LOCALw%,B$ 20400w%=0 20410REPEATB$=FNparam(A$) 20420IFLEFT$(B$,3)="/wi"THEN 20430 w%=TRUE 20440 ELSE 20450 IFw%=0THENSYS"XOS_File",6,B$TO;F%ELSESYS"XOS_FSControl",27,B$,,2TO;F% 20460ENDIF 20470UNTILA$="" 20480=-((F%AND1)=0) 20490 20500DEFFNdataopen(A$) 20510LOCALl%,h%,type%,B$ 20520B$=FNparam(A$) 20530IFA$=""THENPROChalt(FNmsg0("Edata")):=0 20540PROCprint(FNmsg0("DataOpen")," ","") 20550h%=FNtaskhand(B$) 20560SYS"XOS_File",23,A$ TO l%,,,,,,type% 20570IFh%<>0 ANDl%=1 THEN 20580 return%=1 20590 PROCprint("",A$+" (type &"+STR$~type%+") to "+B$,"") 20600 q%!12=0:q%!16=5:q%!20=0:q%!24=0:q%!28=0:q%!32=0:q%!36=0 20610 q%!40=type%:$(q%+44)=A$+CHR$0:!q%=47+LENA$+1ANDNOT3 20620 SYS"Wimp_SendMessage",18,q%,h% 20630ELSE 20640 return%=0 20650 IFh%=0THENPROCprint("",FNmsg1("Enotask",B$),"") 20660 IFl%<>1THENPROCprint("",FNmsg1("Enofile",A$),"") 20670ENDIF 20680=return% 20690 20700DEFPROClisttasks 20710LOCALl% 20720PROCwarn_txt(FNmsg0("TaskList1")) 20730FORl%=0TOtaskmax% 20740IFtaskh%(l%)>0 THEN 20750 PROCf_list(STR$~taskh%(l%),FNtaskname(taskh%(l%))+" ("+taskn$(l%)+")") 20760 IFtaskex$(l%)>""THENPROCf_list(""," exit: "+taskex$(l%)) 20770ENDIF 20780NEXT 20790PROCwarn_txt(FNmsg0("TaskList2")) 20800FORl%=0TOtwmax% 20810IFtwh%(l%)>0 THEN 20820 PROCf_list(STR$~twh%(l%),twcom$(l%)+" ("+twname$(l%)+")") 20830 IFtwexit$(l%)>""THENPROCf_list(""," exit: "+twexit$(l%)) 20840ENDIF 20850NEXT 20860ENDPROC 20870 20880DEFFNoscli(A$) 20890LOCALB$ 20900REPEATB$=FNparam(A$) 20910 SYS"XWimp_StartTask",B$ TO;F% 20920UNTILA$="" 20930=(F%AND1) 20940 20950DEFFNtask(A$) 20960LOCALa%,w%,h%,ts%,B$,C$ 20970wait%=0:a%=0 20980REPEATa%+=1:UNTILtaskh%(a%)=0ORa%=taskmax% 20990IFtaskh%(a%)<>0 THENPROChalt(FNmsg0("Etask2")):ENDPROC 21000taskn$(a%)="task"+STR$a%:taskex$(a%)="":h%=0 21010REPEATB$=FNparam(A$) 21020IFLEFT$(B$,1)="/"THEN 21030 C$=FNvalue(B$) 21040 CASELEFT$(B$,2)OF 21050 WHEN"ki","de":h%=FNkilltask(C$):B$="":A$="" 21060 WHEN"na","id":taskn$(a%)=C$ 21070 WHEN"ex":taskex$(a%)=C$ 21080 WHEN"wa":wait%=TRUE 21090 ENDCASE 21100ENDIF 21110UNTILA$="" 21120IFB$>""THEN 21130 PROCprint(FNmsg1("TaskStart1",B$),"","") 21140 SYS"XWimp_StartTask",B$ TO;F% 21150 IF(F%AND1)=0 THEN 21160 taskstart%=a%:ts%=0 21170 REPEATts%+=1:PROCpoll(0):UNTILtaskstart%=0ORts%>10:taskstart%=0 21180 ENDIF 21190 IFtaskh%(a%)<>0ANDwait%<>0THEN 21200 REPEAT:PROCpoll(50):UNTILtaskh%(a%)=0 21210 ENDIF 21220 h%=-((F%AND1)=0) 21230ENDIF 21240=h% 21250 21260DEFFNkilltask(A$) 21270LOCALl%,h% 21280IFA$=""THEN 21290 l%=taskmax%:WHILEtaskh%(l%)=0ANDl%>0:l%-=1:ENDWHILE 21300 IF taskh%(l%)>0 THENh%=taskh%(l%) 21310ELSE 21320 FORl%=0TOtaskmax% 21330 IFtaskh%(l%)>0THEN 21340 IFFNtaskname(taskh%(l%))=A$ ORtaskn$(l%)=A$ THENh%=taskh%(l%) 21350 ENDIF 21360 NEXT 21370ENDIF 21380IFh%<>0 THEN 21390 PROClog("Killing task: "+A$) 21400 !q%=256:q%!12=0:q%!16=0:SYS"Wimp_SendMessage",17,q%,h%:PROCpoll(0) 21410ENDIF 21420=-(h%<>0) 21430 21440DEFFNtesttask(A$) 21450=FNtaskhand(A$) 21460 21470DEFFNtaskname(h%) 21480LOCALf$,n% 21490f$="":SYS"XTaskManager_TaskNameFromHandle",h% TOh%;F% 21500IF(F%AND1)=0 THEN 21510 n%=0:WHILEh%?n%>31:f$+=CHR$(h%?n%):n%+=1:ENDWHILE 21520ENDIF 21530=f$ 21540 21550DEFFNtaskhand(A$) 21560LOCALA%,r%,l%,h%,B$ 21570r%=0:A%=0:A$=FNlower(A$) 21580REPEAT 21590 SYS"TaskManager_EnumerateTasks",A%,buffer%,&100 TO A%,l% 21600 ptr%=0 21610 WHILE(A%>=0 ANDr%=0 AND(ptr%+buffer%)<=l%) 21620 h%=buffer%!ptr%:B$=FNstr(buffer%!(ptr%+4)):ptr%+=16 21630 IFA$=FNlower(B$) THENr%=h% 21640 ENDWHILE 21650UNTIL A%<0 OR r%<>0 21660=r% 21670 21680DEFPROCsorttasks 21690LOCALl% 21700FORl%=0TOtaskmax%-1 21710 IFtaskh%(l%)=0ANDtaskh%(l%+1)<>0 THEN 21720 SWAPtaskh%(l%),taskh%(l%+1) 21730 SWAPtaskn$(l%),taskn$(l%+1) 21740 SWAPtaskex$(l%),taskex$(l%+1) 21750 ENDIF 21760NEXT 21770ENDPROC 21780 21790DEFFNtaskw(A$) 21800LOCALtw%,w%,ts%,n%,F%,out%,B$,C$,S$ 21810tw%=0:wait%=0:F%=0:out%=TRUE 21820WHILEtwh%(tw%)<>0ANDtw%<twmax%:tw%+=1:ENDWHILE 21830IFtw%=twmax%THENPROChalt(FNmsg0("Etask2")):=0 21840SYS"Wimp_SlotSize",-1,-1TO,n%:n%=n%DIV1024 21850S$=STR$n%+"k":twname$(tw%)="SDtask"+STR$tw%:twexit$(tw%)="":twk%(tw%)=0 21860REPEATB$=FNparam(A$) 21870IFLEFT$(B$,1)="/"THEN 21880 C$=FNvalue(B$) 21890 CASELEFT$(B$,2)OF 21900 WHEN"si":S$=C$ 21910 WHEN"na","id":twname$(tw%)=C$ 21920 WHEN"ex":twexit$(tw%)=C$ 21930 WHEN"ou":PROCcf(twf%(tw%)):twf%(tw%)=FNopenout(C$) 21940 WHEN"wa":wait%=TRUE 21950 WHEN"ke":twk%(tw%)=TRUE 21960 WHEN"ki":PROCmesstw(C$,&808C4) 21970 WHEN"su":PROCmesstw(C$,&808C6) 21980 WHEN"re":PROCmesstw(C$,&808C7) 21990 WHEN"no":out%=FALSE 22000 ENDCASE 22010 B$="" 22020ENDIF 22030UNTILA$="" 22040IFB$>""THEN 22050 PROCprint(FNmsg1("TaskStart1",twname$(tw%)),"",""):twcom$(tw%)=B$ 22060 IFtwf%(tw%)=0THENPROCinit_tww(tw%,out%,twname$(tw%)) 22070 SYS"XWimp_StartTask","TaskWindow """+B$+""" -quit -wimpslot "+S$+" -name """+twname$(tw%)+""" -task &"+STR$~task%+" -txt &"+STR$~(task%+tw%) TO;F% 22080 ts%=0:REPEATts%+=1:PROCpoll(0):UNTILtwh%(tw%)<>0ORts%>10 22090 IFtwh%(tw%)=0THENPROCcf(twf%(tw%)):twname$(tw%)="":PROCclosew(tww%(tw%)) 22100 IFwait%<>0ANDtwh%(tw%)<>0THEN 22110 REPEAT:PROCpoll(50):UNTILtwh%(tw%)=0 22120 ENDIF 22130ENDIF 22140=ABS((F%AND1)=0) 22150 22160DEFPROCmesstw(A$,m%) 22170A$=FNlower(A$) 22180LOCALtw%:FORtw%=0TOtwmax% 22190IFA$=FNlower(twname$(tw%))ANDtwh%(tw%)>0THEN 22200 !q%=20:q%!4=0:q%!8=0:q%!12=0:q%!16=m% 22210 SYS"Wimp_SendMessage",17,q%,twh%(tw%) 22220 CASEm%OF 22230 WHEN&808C6:$twt%(tw%)=FNmsg1("TaskSusp",twname$(tw%)):PROCdotitle(tww%(tw%)) 22240 WHEN&808C7:$twt%(tw%)=FNmsg1("TaskRun",twname$(tw%)):PROCdotitle(tww%(tw%)) 22250 ENDCASE 22260 tw%=twmax% 22270ENDIF 22280NEXT 22290ENDPROC 22300 22310DEFFNopen(A$) 22320LOCALf%,r%,err$,B$,C$ 22330err$="":f%=0:WHILEfileh%(f%)<>0ANDf%<fmax%:f%+=1:ENDWHILE 22340IFf%=fmax%THENPROChalt(FNmsg0("Efullfile")):=0 22350fileid$(f%)="":filewr%(f%)=1:r%=&4F 22360REPEATB$=FNparam(A$) 22370IFLEFT$(B$,1)="/"THEN 22380 C$=FNvalue(B$) 22390 CASELEFT$(B$,2)OF 22400 WHEN"na","id":fileid$(f%)=C$ 22410 WHEN"re":filewr%(f%)=1:r%=&4F 22420 WHEN"wr":filewr%(f%)=2:r%=&8F 22430 WHEN"rw":filewr%(f%)=3:r%=&CF 22440 WHEN"er":err$=C$ 22450 ENDCASE 22460 ELSE 22470 filen$(f%)=B$ 22480ENDIF 22490UNTILA$="" 22500IFfileid$(f%)>""THENSYS"XOS_Find",r%,filen$(f%)TOfileh%(f%);F% 22510IF(F%AND1)<>0THEN 22520 fileh%(f%)=0:fileid$(f%)="" 22530 IFerr$=""THENPROChalt(FNmsg0("Efilefail")):ELSEPROCaddevent(err$,9) 22540 ELSE 22550 IFfilewr%(f%)=2THENSYS"XOS_File",18,filen$(f%),&FFF 22560ENDIF 22570=fileh%(f%) 22580 22590DEFFNclose(A$) 22600LOCALn%,r%,B$,C$ 22610r%=0 22620REPEATB$=FNparam(A$) 22630 IFLEFT$(B$,1)="/"THEN 22640 C$=FNvalue(B$) 22650 CASELEFT$(B$,2)OF 22660 WHEN"na","id":FORn%=0TOfmax% 22670 IFfileid$(n%)=C$THENPROCcf(fileh%(n%)):fileid$(n%)="":n%=fmax%:r%=1 22680 NEXT 22690 ENDCASE 22700 ENDIF 22710UNTILA$="" 22720=r% 22730 22740DEFFNread(A$) 22750LOCALf%,r%,eof$,B$,C$ 22760f%=-1:r%=0:eof$="" 22770REPEATB$=FNparam(A$) 22780 IFLEFT$(B$,1)="/"THEN 22790 C$=FNvalue(B$) 22800 CASELEFT$(B$,2)OF 22810 WHEN"na","id":f%=FNfileidtoh(C$) 22820 WHEN"eof":eof$=C$ 22830 ENDCASE 22840 ELSE 22850 IFf%>-1ANDf%<fmax%THEN 22860 IF(filewr%(f%)AND1)=0THENPROChalt(FNmsg0("Enoread")):=0 22870 IFNOTEOF#fileh%(f%)THENPROCsetv(B$,GET$#fileh%(f%)):r%=1 22880 IFEOF#fileh%(f%)ANDeof$>""THENPROCaddevent(eof$,9) 22890 ENDIF 22900 ENDIF 22910UNTILA$="" 22920=r% 22930 22940DEFFNwrite(A$) 22950LOCALf%,r%,B$,C$ 22960f%=-1:r%=0 22970REPEATB$=FNparam(A$) 22980 IFLEFT$(B$,1)="/"THEN 22990 C$=FNvalue(B$) 23000 CASELEFT$(B$,2)OF 23010 WHEN"na","id":f%=FNfileidtoh(C$) 23020 ENDCASE 23030 ELSE 23040 IFf%>-1ANDf%<fmax%THEN 23050 IF(filewr%(f%)AND2)=0THENPROChalt(FNmsg0("Enowrite")):=0 23060 BPUT#fileh%(f%),B$ 23070 ENDIF 23080 ENDIF 23090UNTILA$="" 23100=r% 23110 23120DEFFNptr(A$) 23130LOCALf%,r%,s%,B$,C$ 23140f%=-1:s%=-1 23150REPEATB$=FNparam(A$) 23160 IFLEFT$(B$,1)="/"THEN 23170 C$=FNvalue(B$) 23180 CASELEFT$(B$,2)OF 23190 WHEN"na","id":f%=FNfileidtoh(C$) 23200 WHEN"se":IFFNlower(C$)="eof"THENs%=-2:ELSEs%=VALC$ 23210 ENDCASE 23220 ENDIF 23230UNTILA$="" 23240r%=0 23250IFf%>-1ANDfileh%(f%)<>0 THEN 23260 IFs%=-2THENPTR#fileh%(f%)=EXT#fileh%(f%):ELSEIFs%>=0THENPTR#fileh%(f%)=s% 23270 r%=PTR#fileh%(f%) 23280ENDIF 23290=r% 23300 23310DEFPROClistfiles 23320PROCf_list("Identifier","Filename") 23330LOCALf%:FORf%=0TOfmax% 23340IFfileh%(f%)>0THENPROCf_list(fileid$(f%),filen$(f%)) 23350NEXT 23360ENDPROC 23370 23380DEFFNfileidtoh(A$) 23390LOCALf%:f%=0:WHILEfileid$(f%)<>C$ANDf%<fmax%:f%+=1:ENDWHILE 23400IFf%=fmax%THENPROChalt(FNmsg0("Efileid")):=0 23410=f% 23420 23430DEFPROCmenudef(A$) 23440LOCALn%,l%,m$,n$,a$,b$,B$,C$:n%=-1:m$="":n$="" 23450REPEATB$=FNparam(A$) 23460 IFLEFT$(B$,1)="/"THEN 23470 C$=FNvalue(B$) 23480 CASELEFT$(B$,2)OF 23490 WHEN"co":n%=-2 23500 WHEN"ic":n%=0:REPEATn%+=1:UNTILibarid$(n%)=C$ORibar%(n%)=0ORn%=imax% 23510 IFn%=imax%ORC$=""THENPROClog(FNmsg0("Eicon1")):n%=-5 23520 ENDCASE 23530 ELSE 23540 l%=INSTR(B$,":") 23550 IFl%>0THEN 23560 a$=LEFT$(B$,l%-1):b$=MID$(B$,l%+1) 23570 ELSE 23580 a$=B$:b$="" 23590 ENDIF 23600 IFa$=""ORb$=""THENPROChalt(FNmsg1("Emenu",B$)):A$="" 23610 IFLENm$+LENa$<252ANDLENn$+LENb$<252THEN 23620 m$+=a$+CHR$0:n$+=b$+CHR$0 23630 ELSE 23640 PROChalt(FNmsg0("Ebigmenu")):A$="" 23650 ENDIF 23660 ENDIF 23670UNTILA$="" 23680IFRIGHT$(m$,1)=" "THENm$=LEFT$(m$,LENm$-1) 23690CASEn%OF 23700 WHEN-1:usermenu$(0)=m$:usermenu$(1)=n$ 23710 WHEN-2:logmenu$(0)=m$:logmenu$(1)=n$ 23720 OTHERWISE:IFn%>=0ANDn%<=imax%THENimenu$(n%,0)=m$:imenu$(n%,1)=n$: 23730ENDCASE 23740ENDPROC 23750 23760DEFFNmakemenu(A$,B$) 23770LOCALu$,a$,b$:umenu%=0:u$="" 23780REPEAT 23790 umenu%+=1 23800 a$=FNgetpar(A$,CHR$0):b$=FNgetpar(B$,CHR$0) 23810 u$+=","+a$:umenu$(umenu%,0)=a$:umenu$(umenu%,1)=b$ 23820UNTILA$=""ORumenu%=menumax%:u$=MID$(u$,2) 23830=u$ 23840 23850DEFPROClistmenu 23860LOCALC$ 23870IFusermenu$(0)>""THENC$=FNmakemenu(usermenu$(0),usermenu$(1)):PROClmenu("user") 23880IFlogmenu$(0)>""THENC$=FNmakemenu(logmenu$(0),logmenu$(1)):PROClmenu("debug") 23890FORZ%=0TOimax% 23900 IFimenu$(Z%,0)>""THENC$=FNmakemenu(imenu$(Z%,0),imenu$(Z%,1)):PROClmenu("icon: "+ibarid$(Z%)) 23910NEXT 23920ENDPROC 23930 23940DEFPROClmenu(t$) 23950LOCALl% 23960PROCwarn_txt("Label Action ("+t$+")") 23970FORl%=1TOumenu% 23980 PROCf_list(umenu$(l%,0),umenu$(l%,1)) 23990NEXT 24000ENDPROC 24010 24020DEFPROCanalyse(A$) 24030LOCALB$,C$ 24040REPEATB$=FNparam(A$) 24050 CASELEFT$(B$,1)OF 24060 WHEN"/":C$=FNvalue(B$):PROClog("Qualifier /"+B$+" value="+C$) 24070 OTHERWISE:PROClog("Parameter "+B$) 24080 ENDCASE 24090UNTILA$="" 24100ENDPROC 24110 24120DEFFNmulticom(RETURN str$):REM split on ; (ASCII 59) 24130LOCALB$,A%,B%,F%,qc%,bc%,cc%,esc%,l% 24140B$="":B%=0:qc%=0:bc%=0:cc%=0:esc%=0:F%=0:l%=LENstr$ 24150IFstr$=""THEN="" 24160REPEAT:B%+=1:A%=ASCMID$(str$,B%,1) 24170IFesc%=92 THEN 24180 B$+=CHR$A%:esc%=0 24190 ELSE 24200 IFA%=34ANDbc%=0 THENqc%+=1 24210 IFqc%MOD2=0 THEN 24220 IFA%=40 THENbc%+=1 24230 IFA%=41 THENbc%-=1 24240 IFA%=123 THENcc%+=1 24250 IFA%=125 THENcc%-=1 24260 IFbc%=0AND(qc%MOD2)=0 THEN 24270 IFA%=59ANDB%>1 THENF%=TRUE 24280 ENDIF 24290 ENDIF 24300 esc%=A%:IFF%=0ANDA%<>92THENB$+=CHR$A% 24310ENDIF 24320UNTILF%<>0ORB%=l%:IFB%=l% THENB%+=1 24330str$=FNtrim(MID$(str$,B%+1)) 24340B$=FNsubst(B$) 24350=FNtrim(B$) 24360 24370DEFFNsubst(A$) 24380LOCALl%,f%,c%,a$,l$,B$:l$="" 24390c%=INSTR(A$,"%"):IFc%=0THEN:=A$ 24400c%=c%-2:IFc%<0THENc%=0 24410B$=LEFT$(A$,c%) 24420REPEATc%+=1:a$=MID$(A$,c%,1) 24430 IFl$="\"THEN 24440 B$+=a$:l$="" 24450 ELSE 24460 IFa$="%"THEN 24470 FORl%=0TOvmax% 24480 IFvar$(l%,0)>""ANDvar$(l%,0)=MID$(A$,c%+1,LENvar$(l%,0)) THENB$+=var$(l%,1):c%+=LENvar$(l%,0):l%=vmax%+1 24490 NEXT 24500 IFl%=vmax% THENB$+="%" 24510 ELSE 24520 B$+=a$:l$=a$ 24530 ENDIF 24540 ENDIF 24550UNTILc%>=LENA$ 24560=B$ 24570 24580DEFFNparam(RETURN str$):REM split a param or qual from line 24590LOCALB$,A%,B%,F%,qc%,bc%,cc%,esc%,l% 24600B$="":B%=0:qc%=0:bc%=0:cc%=0:esc%=0:F%=0:l%=LENstr$ 24610IFstr$=""THEN="" 24620REPEAT:B%+=1:A%=ASCMID$(str$,B%,1) 24630IFesc%=92THEN 24640 B$+=CHR$A%:esc%=0 24650 ELSE 24660 IFA%=34ANDbc%=0 THENqc%+=1 24670 IFqc%MOD2=0 THEN 24680 IFA%=40 THENbc%+=1 24690 IFA%=41 THENbc%-=1 24700 IFA%=123 THENcc%+=1 24710 IFA%=125 THENcc%-=1 24720 IFbc%=0ANDcc%=0 THEN 24730 IF(A%=32ORA%=47)ANDB%>1 THENF%=TRUE 24740 ENDIF 24750 ENDIF 24760 esc%=A%:IFF%=0ANDA%<>92THENB$+=CHR$A% 24770ENDIF 24780UNTILF%<>0ORB%=l%:IFB%=l% THENB%+=1 24790B$=FNtrim(B$) 24800str$=FNcline(FNtrim(MID$(str$,B%))) 24810=FNstq(B$) 24820 24830DEFFNstq(B$) 24840LOCALl%,r% 24850l%=ASCB$:r%=ASCRIGHT$(B$,1):REM strip quotes from around a string 24860IFl%=34ANDr%=34 THENB$=MID$(B$,2,LENB$-2) 24870IFl%=123ANDr%=125 THEN 24880r%=FNcommand(MID$(B$,2,LENB$-2)):B$=FNvv("$status") 24890ENDIF 24900=B$ 24910 24920DEFFNupper(A$) 24930LOCALB$,l%,c%:B$="" 24940FORl%=1TOLENA$:c%=ASCMID$(A$,l%,1):IFc%>96ANDc%<123THENc%-=32 24950B$+=CHR$c%:NEXT:=B$ 24960 24970DEFFNcline(A$) 24980IFA$="-"THENA$=FNsubst(FNline(stage%)):PROClog("Continuation line:"+A$):stage%+=1 24990=A$ 25000 25010DEFFNvalue(RETURN A$):REM split value assignment from qual 25020LOCALB$,A%,B%:WHILELEFT$(A$,1)="/":A$=MID$(A$,2):ENDWHILE 25030A%=INSTR(A$,"="):IFA%=0THENA$=FNlower(A$):="" 25040B$=MID$(A$,A%+1):A$=FNlower(LEFT$(A$,A%-1)) 25050=FNstq(B$) 25060 25070DEFPROCexit 25080PROCprint("",FNmsg0("Exit"),"") 25090run%=FALSE:ENDPROC 25100 25110DEFFNdebug(A$) 25120IFA$=""THEN=1 25130=VAL(A$) 25140 25150DEFFNd(A%,B%,C%,D%) 25160=USR(driver) 25170 25180DEFPROCgetenv 25190LOCALA$,B$ 25200SYS"OS_GetEnv"TOA$ 25210A$=MID$(A$,INSTR(FNlower(A$),"!runi")):quiet%=0:file$="":spar$="" 25220A$=MID$(A$,INSTR(A$," ")+1):REM discard !Runimage part 25230REPEAT 25240 B$=FNparam(A$) 25250 CASELEFT$(B$,2) OF 25260 WHEN"-f":file$=FNparam(A$) 25270 WHEN"-a":file$="SLIPdial:default" 25280 WHEN"-q":quiet%=TRUE 25290 WHEN"-s":sprsz%=VALFNparam(A$):IFsprsz%<&1B00 THENsprsz%=&1B00 25300 OTHERWISE:spar$=spar$+B$+" " 25310 ENDCASE 25320UNTILB$="" 25330ENDPROC 25340 25350DEFFNnextsp(RETURN A$) 25360LOCALB$,a%:a%=INSTR(A$," ") 25370IFa%>0THEN 25380 B$=FNtrim(LEFT$(A$,a%-1)):A$=FNtrim(MID$(A$,a%+1)) 25390 ELSE 25400 B$=A$:A$="" 25410ENDIF 25420=B$ 25430 25440DEFPROCchain(N$) 25450PROCsetv("$caller",scriptname$):run%=0:PROCinitscript(N$) 25460ENDPROC 25470 25480DEFPROCinitscript(N$) 25490REM must be stopped to load... 25500IFrun%<>0THENPROClog(FNmsg0("Eload1")):ENDPROC 25510PROCcleanup 25520p%=0:IFspar$>""THEN 25530 REPEAT:p%+=1:B$=FNparam(spar$):PROCsetv("p"+STR$p%,B$):UNTILspar$="" 25540ENDIF 25550IFN$>""ANDFNloadscript(N$,0) THEN 25560 PROCprint(FNmsg0("Sload2")," "," "):scriptname$=N$:PROCsetv("$script",N$) 25570 run%=TRUE:stage%=0:PROCunpause 25580ENDIF 25590ENDPROC 25600 25610DEFPROCcleanup 25620driverno%=0:port%=0:speed%=19200:PROCclr_txt 25630retry%=1:delay%=30:debug%=FALSE:count%=0:stop$="":error$="" 25640call_lev%=0:caslev%=0:usermenu$()="":logmenu$()="":umenu%=0:alarm$()="": 25650FORn%=0TOvmax%:IFLEFT$(var$(n%,0),1)<>"$"THENvar$(n%,0)="" 25660NEXT 25670FORn%=0TOimax%:IFibar%(n%)>0THEN!icons%=-2:icons%!4=ibar%(n%):SYS"XWimp_DeleteIcon",,icons%TO;F% 25680NEXT:ibarid$()="":ibar%()=0:imenu$()="":alarm$()="":alarmtime%()=0 25690twh%()=0:twname$()="":twexit$()="":taskh%()=0:taskn$()="" 25700taskex$()="":event$()="":umenu$()="" 25710aline$()="":aline%()=0 25720ENDPROC 25730 25740DEFFNloadscript(N$,lib%) 25750LOCALA$,r%,fh1% 25760SYS"XOS_File",23,N$TOr%:IFr%<>1THEN=0 25770r%=0:fh1%=FNopenin(N$) 25780IFfh1%=0 THENPROClog("File not found: "+N$):=0 25790IFlib%=0THENcount%=0:jtl%=1 25800A$=GET$#fh1% 25810IFINSTR(A$,"slipdial")>0 THEN 25820 REPEATA$=GET$#fh1% 25830 IFLEFT$(A$,1)<>"#"ANDA$>"" THEN 25840 PROCaddline(A$,count%) 25850 IFLEFT$(A$,1)=":"THEN 25860 A$=MID$(A$,2):B$=FNparam(A$) 25870 IFB$="autoexec"THENjt%(0)=count%:jt$(0)=B$ ELSEjt%(jtl%)=count%:jt$(jtl%)=B$:jtl%+=1 25880 ENDIF 25890 count%+=1 25900 ENDIF 25910 UNTILEOF#fh1% 25920 IF count%>2000 THEN 25930 PROCcf(fh1%):PROChalt(FNmsg0("Elong")):=0 25940 ELSE 25950 r%=1 25960 ENDIF 25970ELSE 25980 PROChalt(FNmsg0("Eload2")):=0 25990ENDIF 26000PROCcf(fh1%) 26010=r% 26020 26030DEFPROCaddline(A$,n%) 26040IFn%>highest% THEN 26050 CASEn%OF 26060 WHEN0:DIMbuf0$(199) 26070 WHEN200:DIMbuf1$(199) 26080 WHEN400:DIMbuf2$(199) 26090 WHEN600:DIMbuf3$(199) 26100 WHEN800:DIMbuf4$(199) 26110 WHEN1000:DIMbuf5$(199) 26120 WHEN1200:DIMbuf6$(199) 26130 WHEN1400:DIMbuf7$(199) 26140 WHEN1600:DIMbuf8$(199) 26150 WHEN1800:DIMbuf9$(199) 26160 WHEN2000:DIMbufA$(199) 26170 ENDCASE 26180 highest%=n% 26190ENDIF 26200CASE(n%DIV200)OF 26210WHEN0:buf0$(n%)=A$ 26220WHEN1:buf1$(n%-200)=A$ 26230WHEN2:buf2$(n%-400)=A$ 26240WHEN3:buf3$(n%-600)=A$ 26250WHEN4:buf4$(n%-800)=A$ 26260WHEN5:buf5$(n%-1000)=A$ 26270WHEN6:buf6$(n%-1200)=A$ 26280WHEN7:buf7$(n%-1400)=A$ 26290WHEN8:buf8$(n%-1600)=A$ 26300WHEN9:buf9$(n%-1800)=A$ 26310WHEN10:bufA$(n%-2000)=A$ 26320ENDCASE 26330ENDPROC 26340 26350DEFFNline(n%) 26360IFn%>highest%THEN="" 26370LOCALA$:CASE(n%DIV200)OF 26380WHEN0:A$=buf0$(n%) 26390WHEN1:A$=buf1$(n%-200) 26400WHEN2:A$=buf2$(n%-400) 26410WHEN3:A$=buf3$(n%-600) 26420WHEN4:A$=buf4$(n%-800) 26430WHEN5:A$=buf5$(n%-1000) 26440WHEN6:A$=buf6$(n%-1200) 26450WHEN7:A$=buf7$(n%-1400) 26460WHEN8:A$=buf8$(n%-1600) 26470WHEN9:A$=buf9$(n%-1800) 26480WHEN10:A$=bufA$(n%-2000) 26490OTHERWISE:A$="" 26500ENDCASE 26510=A$ 26520 26530DEFFNlibrary(lib_p$) 26540LOCALr%,ae%,B$ 26550B$=FNparam(lib_p$):PROClog(FNmsg1("Slib",B$)) 26560ae%=jt%(0) 26570r%=FNloadscript(B$,1) 26580IFae%<>jt%(0)ANDr%<>0THENPROCaddevent("call auto "+lib_p$,0) 26590=r% 26600 26610DEFPROClistscript(A$) 26620LOCALst%,fn% 26630PROCwarn_txt(FNmsg0("Slist")) 26640st%=VALFNparam(A$):fn%=VALA$ 26650IFst%<0 THENst%=0 26660IFfn%=0ORfn%>count% THENfn%=count% 26670FORc%=st%TOfn% 26680 A$=STR$c%:IFc%=stage% THENA$="*"+A$ 26690 A$=RIGHT$(" "+A$,4)+" " 26700 PROCwarn_txt(A$+FNline(c%)) 26710NEXT 26720ENDPROC 26730 26740DEFPROClistjt 26750PROCf_list("Label","Line") 26760LOCALn%:FORn%=0TOjtl%-1:PROCf_list(jt$(n%),STR$jt%(n%)):NEXT 26770ENDPROC 26780 26790DEFFNmodemdrv(A$) 26800LOCALr%:r%=0 26810PROCsetv("$init","ATZQ0V1") 26820PROCsetv("$busy","BUSY") 26830PROCsetv("$conn","CONNECT") 26840PROCsetv("$nocarr","NO CARRIER") 26850PROCsetv("$nodial","NO DIALTONE") 26860IFA$>""THEN 26870 IFINSTR(A$,".")=0 THENA$="SlipDialDrv:"+A$ 26880 r%=FNsource(A$) 26890ENDIF 26900=r% 26910 26920DEFFNsource(file$) 26930LOCALr%,fh1%,B$,C$ 26940r%=0 26950REPEATB$=FNparam(file$) 26960 fh1%=FNopenin(B$) 26970 IFfh1%=0THEN 26980 PROClog(FNmsg1("Fsource",B$)):=0 26990 ELSE 27000 REPEATC$=GET$#fh1% 27010 IFLEFT$(C$,1)<>"#"ANDC$>"" THEN 27020 r%=FNcommand(C$) 27030 ENDIF 27040 UNTILEOF#fh1% 27050 PROCcf(fh1%) 27060 ENDIF 27070UNTILfile$="" 27080=r% 27090 27100DEFPROChelp(A$) 27110LOCALfh1%,n%,r%,B$,C$:msgc%=FALSE:msg$()="" 27120IFA$=""THEN 27130 PROCaddmessage(FNmsg0("Hannounce")) 27140 n%=0:C$="" 27150 REPEATB$="" 27160 REPEAT 27170 SYS"XOS_GBPB",9,sdlang$+".help",tmp%,1,n%,255,"*"TO,,,r%,n% 27180 C$=FNstr(tmp%):B$+=C$+STRING$(15-LENC$," ") 27190 UNTILn%=-1ORLENB$>60 27200 PROCaddmessage(B$) 27210 UNTILn%=-1:PROCaddmessage("") 27220 ELSE 27230 fh1%=FNopenin(sdlang$+".Help."+A$+"*") 27240 IFfh1%>0THEN 27250 PROCaddmessage("Help on "+A$+":") 27260 n%=0 27270 REPEAT 27280 B$=GET$#fh1%:IFB$>""THENn%+=1:PROCaddmessage(B$) 27290 UNTILEOF#fh1%ORn%>msgmax% 27300 PROCaddmessage(""):PROCcf(fh1%) 27310 ELSE 27320 PROChelp("") 27330 ENDIF 27340ENDIF 27350ENDPROC 27360 27370DEFPROCquit(mess$) 27380PROCprint(FNmsg0("Quit2"),mess$,"") 27390PROCfinish 27400END 27410ENDPROC 27420 27430DEFPROCloadconfig 27440fh1%=FNopenin(sdres$+".!Config"):IFfh1%=0 THENERROR0,"No config!":ENDPROC 27450PROCsetinv(config%,1,BGET#fh1%) 27460PROCsetinv(config%,2,BGET#fh1%) 27470PROCsetinv(config%,3,BGET#fh1%) 27480PROCupd_icon(config%,4,GET$#fh1%) 27490IFNOTEOF#fh1%THENPROCupd_icon(config%,7,GET$#fh1%) 27500IFNOTEOF#fh1%THENPROCupd_icon(config%,8,GET$#fh1%) 27510IFNOTEOF#fh1%THENPROCupd_icon(config%,12,GET$#fh1%) 27520IFNOTEOF#fh1%THENPROCsetinv(config%,13,BGET#fh1%) 27530IFNOTEOF#fh1%THENPROCsetinv(config%,14,BGET#fh1%) 27540PROCcf(fh1%) 27550txty%=VALFNic_str(config%,7):IFtxty%<24 THENtxty%=24 27560txtx%=VALFNic_str(config%,8) 27570autowinpos%=FNrdinv(config%,13) 27580 IFtxtx%<40 THENtxtx%=40ELSEIFtxtx%>240THENtxtx%=240 27590twwmax%=VALFNic_str(config%,12) 27600 IFtwwmax%<10 THENtwwmax%=10ELSEIFtwwmax%>100THENtwwmax%=100 27610SYS"OS_Byte",121,(2EOR&80)TO,A% 27620IFfile$=""ANDFNrdinv(config%,3)=0 ANDA%<>&FF THENfile$=FNic_str(config%,4) 27630IFquiet%=0ANDFNrdinv(config%,1)=0 THENPROCcfront(status%,0,-200) 27640ENDPROC 27650 27660DEFPROCsaveconfig 27670fh1%=FNopenout(sdres$+".!Config"):IFfh1%=0 THENENDPROC 27680BPUT#fh1%,FNrdinv(config%,1) 27690BPUT#fh1%,FNrdinv(config%,2) 27700BPUT#fh1%,FNrdinv(config%,3) 27710BPUT#fh1%,FNic_str(config%,4) 27720BPUT#fh1%,FNic_str(config%,7) 27730BPUT#fh1%,FNic_str(config%,8) 27740BPUT#fh1%,FNic_str(config%,12) 27750BPUT#fh1%,FNrdinv(config%,13):autowinpos%=FNrdinv(config%,13) 27760BPUT#fh1%,FNrdinv(config%,14) 27770PROCcf(fh1%) 27780IFFNrdinv(config%,14)=0 THEN 27790 fh1%=FNopenout(sdres$+".!windows"):IFfh1%=0 THENENDPROC 27800 !q%=status%:SYS"Wimp_GetWindowState",,q% 27810 BPUT#fh1%,STR$(q%!4) 27820 BPUT#fh1%,STR$(q%!8) 27830 PROCcf(fh1%) 27840ENDIF 27850ENDPROC 27860 27870DEFFNlomem(A%) 27880IFHIMEM-END<(A%+&2000) THEN=TRUE 27890=FALSE 27900 27910DEFFNnewsrate(A$) 27920LOCALf$,tim,cps%:cps%=0 27930f$=FNparam(A$):IFf$>""THEN 27940 tim=FNfile_age("<Mail$Dir>.folder."+f$+"News")-FNfile_age("<Mail$Dir>.folder."+f$+"NG"):PROClog("Time "+STR$tim) 27950 IFtim>0THENcps%=100*FNfile_size("<Mail$Dir>.folder."+f$+"News")/tim 27960ENDIF 27970=cps% 27980 27990DEFFNfile_age(f$) 28000LOCALfound%,load%,exec% 28010SYS"XOS_File",17,f$TOfound%,,load%,exec%;F% 28020IFfound%=0 OR(F%AND1)<>0 THENPROClog(FNmsg1("Enofile",f$)):=0 28030=(load%AND&FF)*2^32+exec% 28040 28050DEFFNfile_size(f$) 28060LOCALsize%,found% 28070SYS"XOS_File",17,f$TOfound%,,,,size%;F% 28080IFfound%=0 OR(F%AND1)<>0 THENPROClog(FNmsg1("Enofile",f$)):=0 28090=size% 28100 28110DEFFNtrim(A$) 28120REM strips leading & trailing spaces 28130LOCALB$:IFA$>""THENCALLtrimstr%,A$,B$ 28140=B$ 28150 28160DEFFNlower(A$) 28170IFA$>""THENCALLmklcase%,A$ 28180=A$ 28190 28200DEFFNstr(a%) 28210LOCALdummy%,B$ 28220CALLgetline%,dummy%,a%,B$ 28230=B$ 28240 28250DEFPROCloadcode 28260LOCALo%,l%,F% 28270SYS"XOS_File",17,sdres$+".code"TOo%,,,,l%;F% 28280IFo%=1ANDl%>0AND(F%AND1)=0THEN 28290 DIMmcode% l% 28300 cpylcase%=mcode%+4:getpath%=mcode%+8:getline%=mcode%+12 28310 getlinez%=mcode%+16:getstr%=mcode%+20:mklcase%=mcode%+24 28320 trimstr%=mcode%+28:chkdelart%=mcode%+32:headerno%=mcode%+36 28330 smatch%=mcode%+40 28340 SYS"XOS_File",16,sdres$+".code",mcode%,0TO;F% 28350 IF(F%AND1)THENERROR0,"Help! I can't find my Code file!" 28360 ELSE 28370 ERROR0,"Help! I can't find my Code file!" 28380ENDIF 28390ENDPROC 28400 28410DEFFNclaimmem(RETURN var%,size%,A$) 28420LOCALF%,ret% 28430IFosver%<&A5 THEN 28440 SYS"XOS_Module",6,,,size%TO,,var%;F% 28450 IF(F%AND1)THENvar%=0 28460 ret%=var% 28470 ELSE 28480 SYS&20066,0,-1,size%,-1,0,-1,0,0,Task$+"_"+A$TO,ret%,,var%;F% 28490 IF(F%AND1)THENvar%=0:ret%=0 28500ENDIF 28510=ret% 28520 28530DEFPROCreleasemem(RETURN var%) 28540LOCALF% 28550IFvar%>0THEN 28560 IFosver%<&A5 THEN 28570 SYS"XOS_Module",7,,var%TO;F%:var%=0 28580 SYS"XOS_ChangeDynamicArea",1,(-16*1024*1024) 28590 ELSE 28600 SYS&20066,1,var%TO;F%:var%=0 28610 ENDIF 28620ENDIF 28630ENDPROC 28640 28650DEFPROCtidydynareas 28660LOCALA%,N%,P% 28670IFosver%>&A4 THEN 28680 SYS&66,3,-1TO,A% 28690 WHILEA%<>-1 28700 SYS&66,2,A%TO,,,,,,,,P% 28710 SYS&66,3,A%TO,N% 28720 IFLEFT$(FNstr(P%),1+LENTask$)=Task$+"_"THENSYS&66,1,A% 28730 A%=N% 28740 ENDWHILE 28750ENDIF 28760ENDPROC 28770 28780DEFFNgetpar(RETURN A$,s$) 28790LOCALB$,l% 28800l%=INSTR(A$,s$) 28810IFl%>0THEN 28820 B$=LEFT$(A$,l%-1):A$=MID$(A$,l%+1) 28830 ELSE 28840 B$=A$:A$="" 28850ENDIF 28860=B$ 28870 28880DEFPROCstartmsgtrans 28890SYS"XMessageTrans_FileInfo",,sdlang$+".messages"TO,,buf%;F% 28900IF(F%AND1)THENERROR0,"Couldn't load Messages file!" 28910DIMmsgdesc%16,msgbuf% buf% 28920SYS"MessageTrans_OpenFile",msgdesc%,sdlang$+".messages",msgbuf% 28930ENDPROC 28940 28950DEFPROCendmsgtrans 28960IFmsgdesc%>0THENSYS"MessageTrans_CloseFile",msgdesc% 28970ENDPROC 28980 28990DEFFNmsg0(t$) 29000LOCALs% 29010SYS"MessageTrans_Lookup",msgdesc%,t$TO,,s% 29020=FNstr(s%) 29030DEFFNmsg1(t$,a$) 29040LOCALs% 29050SYS"MessageTrans_Lookup",msgdesc%,t$,tmp%,255,a$TO,,s% 29060=FNstr(s%) 29070DEFFNmsg2(t$,a$,b$) 29080LOCALs% 29090SYS"MessageTrans_Lookup",msgdesc%,t$,tmp%,255,a$,b$TO,,s% 29100=FNstr(s%) 29110DEFFNmsg3(t$,a$,b$,c$) 29120LOCALs% 29130SYS"MessageTrans_Lookup",msgdesc%,t$,tmp%,255,a$,b$,c$TO,,s% 29140=FNstr(s%)
� >!Runimage � �:�" at ";�:� �=�+&2000 ( �init 2 �loadcode <�startmsgtrans F�getenv P �initwimp Z��errorbox:� d�loadconfig n'ȕ�lomem(txtx%�2*txty%):�=�+&2000:� x �init_txt �"È™"XOS_File",17,file$�A%,,,,S% �ȕ�lomem(S%):�=�+&2000:� ��initscript(file$) �A%=�modemdrv("") �� � stage%=0 � � �8 �lomem(0)��warn_txt(�msg0("MoreMem")):�=�+&2000 �= �testevent �A$=�getevent �A$=�line(stage%):stage%+=1 � return%=�command(A$) � �stage%>=count% �run%=� �8 run%=�:�stage%>=count%��print("",�msg0("Idle"),"") � �paused �0 � " � set up universal variables , ��init 6� tmp% 256,driver 4096 @"È™"OS_Byte",129,0,&FF �,osver% Jsprsz%=&1B00 T redial%=� ^Gfileno%=1:total%=0:pause%=�:stop%=�:run%=�:taskstart%=0:highest%=-1 hKdevice%=�:oldline%=0:debug%=�:errC%=0:fh1%=0:fh2%=0:online$="":stage%=0 r6submax%=20:�call_ret%(submax%),call_lock%(submax%) |Dcasmax%=10:�case$(casmax%),casmatch% casmax%,aline$(3),aline%(3) �<menumax%=30:�umenu$(menumax%,1),usermenu$(1),logmenu$(1) �8jtmax%=50:�jt%(jtmax%),jt$(jtmax%):jtl%=0:return$="" �@vmax%=150:�var$(vmax%,1),s4$(3),tget$(3),ihist$(10):ihist%=0 �Calmax%=10:�alarm$(almax%,1),alarmtime%(almax%),alarmid$(almax%) �7imax%=8:�ifile$(imax%),ibar$(imax%),imenu$(imax%,1) � �ibarid$(imax%),ibar%(imax%) �Ctaskmax%=8:�taskex$(taskmax%),taskn$(taskmax%),taskh%(taskmax%) �<twmax%=8:�twexit$(twmax%),twname$(twmax%),twcom$(twmax%) �:�twh%(twmax%),twf%(twmax%),tdata$(twmax%),tww%(twmax%) �8�twy%(twmax%),two%(twmax%),twk%(twmax%),twt%(twmax%) �;tget%=-1:tww%()=0:two%()=0:twwmax%=29:txtx%=80:txty%=24 �Gmaxev%=10:�event$(maxev%),event%(maxev%),evtype%(maxev%):event%()=� �Gfmax%=10:�fileh%(fmax%),fileid$(fmax%),filewr%(fmax%),filen$(fmax%) Hmsgmax%=25:msg_cs$="":msg_ce$="":msg_cm%=0:msg_cs%=0:msgc%=�:msgt%=0 "sddir$=�varval("Slipdial$dir") (sdres$=�varval("Slipdial$resources") &9sdlang$=sdres$+".UK":ch$="":autowinpos%=1:num$="none" 0� : D'� set up wimp and related variables N��initwimp X3� sprites% sprsz%:!sprites%=sprsz%:sprites%!8=0 b"È™ "OS_SpriteOp",&109,sprites% lB�mergesprites(sdres$+".Sprites")=0��0,"Couldn't load sprites" v/� taskid%4:$taskid%="TASK":Task$="SLIPdial" �� msglist%4:!msglist%=0 �EÈ™ "Wimp_Initialise",310,!taskid%,Task$,msglist% � version%,task% �.�version%<310 ��1,"Window Manager too old" �stwx%=0:stwy%=0 �$fh1%=�openin(sdres$+".!windows") ��fh1%>0� �! stwx%=��#fh1%:stwy%=��#fh1% �� � �cf(fh1%) �5� q% &400,menudata% &200,icons% &100,buffer% &100 �0È™ "Wimp_OpenTemplate",,sdlang$+".Templates" �info%=�loadtemp("Info") �status%=�loadtemp("Status") txt%=�loadtemp("txtwin") config%=�loadtemp("config") mess%=�loadtemp("message") input%=�loadtemp("input") *yesno%=�loadtemp("yesno") 4È™ "Wimp_CloseTemplate" >C�seticonstring(info%,4,"0.33 (17-Feb-1995)"):�setv("$ver","33") H&sdic$="nodev":icon0%=�ic(sdic$,-1) R'�icon0%=0��0,"Couldn't create icon" \'M%=%10000001100000110000:slice%=-20 f6È™"OS_ReadMonotonicTime"�lastpoll%:time%=lastpoll% p?checkalarm%=time%:checkline%=time%:�checkicon:�usericon("") z� � �ݤloadtemp(A$) ��b%,i%,s%,scr%,icon%,h% �0È™"Wimp_LoadTemplate",,-1,0,0,-1,A$,0�,b%,i% �*s%=�claimmem(scr%,b%,"TBUF"):�icon% i% �6È™"Wimp_LoadTemplate",,scr%,icon%,icon%+i%,-1,A$,0 �!�A$="message"�msgttl%=scr%!72 �+�A$="Status"��setwpos(scr%,stwx%,stwy%) �Dscr%!64=sprites%:È™"Wimp_CreateWindow",,scr% �h%:�releasemem(s%) �=h% � ���setwpos(q%,x%,y%) � �w%,h% �x%>0� w%=q%!8-!q%:h%=q%!12-q%!4 !q%=x%:q%!8=x%+w% $q%!4=y%:q%!12=y%+h% .� 8� B L1� merge sprite file into slipdial sprite area Vݤmergesprites(A$) `�s%,f%,n%,r%:r%=0 jÈ™"XOS_File",17,A$�A%,,,,S% t.È™"XOS_SpriteOp",&108,sprites%�,,s%,n%,,f% ~�A%=1�S%<=(s%-f%) � �0È™"XOS_SpriteOp",&10B+(n%=0),sprites%,A$�;F% ��(F%�1)=0 �r%=s%-f%-S% �� �=r% � �ݤsfree �3�s%,f%:È™"XOS_SpriteOp",&108,sprites%�,,s%,,,f% � =s%-f% � �M� places an icon on the iconbar, n%<0 is main icon, others are user icons �ݤic(A$,n%) ��Z%,next%,w%,h% AÈ™"OS_SpriteOp",&100+40,sprites%,A$�,,,w%,h%:�w%>200�h%>70�=0 �n%<0� !icons%=-1:next%=0 7 � dimension memory in known location & store name (4 �ibarname%12:$ibarname%=A$:icons%!24=ibarname% 2� < next%=icon0% F, �Z%=0�n%:�ibar%(Z%)>0 �next%=ibar%(Z%) P �:!icons%=-3 Z* � dimension some memory & store name d# �icons%!24 12:$(icons%!24)=A$ n� xFicons%!4=0:icons%!8=0:icons%!12=w%*2:icons%!16=100:icons%!20=&3102 �#icons%!28=sprites%:icons%!32=11 �)È™ "Wimp_CreateIcon",next%,icons%�ic% �=ic% � �� update the main icon ���checkicon � �name$ ��device%=� � � name$="nodev" � � � � (�d(9,port%,0,0)�8)=0 � � name$="dev" � � 9 �sdic$="online1" �name$="online2"�name$="online1" � � "checkline%=time% ,�ibarname%>0�name$<>sdic$ � 6 �call_log(sdic$,name$) @ sdic$=name$ J5 È™ "XOS_SpriteOp",&118,sprites%,name$�,,src%;F% T �(F%�1)=0� ^: $ibarname%=name$:!q%=-1:q%!4=icon0%:q%!8=0:q%!12=0 h! È™"Wimp_SetIconState",,q% r � |� �� � �3� update call log on online-offline transitions ���call_log(A$,B$) � ÈŽB$ � �X �"nodev":�A$="online1"�A$="online2"�A$="dev"��wclog(�$+": offline after "+online$) �W �"online1":�A$<>"online2"��wclog(�$+": online to "+num$):ontime%=time%:��upd_time � �"online2":�upd_time �� �� � �(� update timer icon in status window ���upd_time �T% T%=�(time%-ontime%)�100 "online$=�"0"+�(T%�3600),2)+":" &&online$+=�"0"+�((T%�60)�60),2)+":" 0online$+=�"0"+�(T%�60),2) : �upd_icon(status%,8,online$) D� N X!� write a line to the logfile b��wclog(A$) l#fh1%=�openup(sddir$+".logfile") v.�fh1%<>0��#fh1%=�#fh1%:�#fh1%,A$:�cf(fh1%) �� � ���poll(idle%) �8� idle%=pollidle time (+) or time before polling (-) �#È™"OS_ReadMonotonicTime" �time% �'�idle%>=0 � lastpoll%-time%<idle% � � lastpoll%=time% � � �1 È™ "Wimp_PollIdle",M%,q%,time%+idle% � R% �H �device% � J%=�d(19,port%,0,0):� line to fix II dual serial card � ÈŽ R% � � � 1 :�redraww(!q%) �@ � 2 :�openw(!q%,q%!4,q%!8,q%!12,q%!16,q%!20,q%!24,q%!28) � 3 :�closew(!q%) . � 6 :�click(!q%,q%!4,q%!8,q%!12,q%!16) & � 8 :�keypress(!q%,q%!4,q%!24) ( � 9 :�getpointer:�menuselect(q%) * � 17,18:�receive(q%) 4 � > �R%=0 H; �time%>checkline%+100 ��checkicon:�linealarm:�settime R1 �time%>checkalarm%+500 ��timealarm:�setdate \1 �msg_cs%>0�time%>msgt%+500 ��addmessage("") f� p� z ���keypress(w%,i%,k%) ��l% ��w%=txt%�i%=inic%� � ÈŽk%� �1 �13:�l%=10�1�-1:ihist$(l%)=ihist$(l%-1):� �C ihist$(0)=�ic_str(w%,i%):�addevent(ihist$(0),0):ihist%=-1 �D �upd_icon(w%,i%,""):È™"Wimp_SetCaretPosition",w%,i%,,,-1,0 �- �&18F:�ihist%<10�ihist$(ihist%+1)>""� �3 ihist%+=1:�upd_icon(w%,i%,ihist$(ihist%)) �> È™"Wimp_SetCaretPosition",w%,i%,,,-1,�ihist$(ihist%) � � � �&18E:�ihist%>0� �3 ihist%-=1:�upd_icon(w%,i%,ihist$(ihist%)) > È™"Wimp_SetCaretPosition",w%,i%,,,-1,�ihist$(ihist%) � N ihist%=-1:�upd_icon(w%,i%,""):È™"Wimp_SetCaretPosition",w%,i%,,,-1,0 $ � .# :È™"Wimp_ProcessKey",q%!24 8 � B� L�w%=input%�i%=1�k%=13� V/input$=�ic_str(w%,i%):�input$=""�input$=" " `� jÈ™"Wimp_ProcessKey",q%!24 t� ~� �� � ���receive(q%) ��Z%,h%,i%,t%,f$,tw%,a%,A$ �Ȏ q%!16 � �� 0:�finish:� �3� 1:q%!16=2:q%!36=-1:$(q%+44)="<Wimp$Scrap>"+�0 �0 q%!12=q%!8:È™"Wimp_SendMessage",17,q%,q%!4 �1� 3:i%=q%!24:h%=q%!20:t%=q%!40:f$=�str(q%+44) �- q%!16=4:È™"Wimp_SendMessage",17,q%,q%!4 � ÈŽh%� � �config%:�t%=&FFF � ( �i%=4�upd_icon(config%,4,f$) � �initscript(f$) � (* �status%:�t%=&FFF ��initscript(f$) 2$ �-1,-2:�t%=&FFF �i%=icon0% � < �initscript(f$) F � P �Z%=0�imax% Z8 �i%=ibar%(Z%)�ifile$(Z%)>""��ifile(Z%,f$,t%) d � n � x � �! Z%=�delfile("<Wimp$Scrap>") �-� 11:�device% �q%!4<>task% ��refusedevice �� 12:�q%!4<>task% � �2 �print("Device claim failed",�str(q%+28),"") � �front(status%):device%=� � � �$� &502:A$=�sendhelp(q%!32,q%!36) � �A$>""� �? q%!16=&503:q%!12=q%!8:$(q%+20)=A$:q%?(20+�A$)=0:!q%=256 �' È™"Wimp_SendMessage",17,q%,q%!4 � � �� &400C2:� taskstart%<>0 � � �taskh%(taskstart%)=0 � L taskh%(taskstart%)=q%!4:�log(�msg1("TaskStart2",taskn$(taskstart%))) � taskstart%=0 " � ,� &400C3:� TaskClosedown 6 �l%=0�taskmax% @ �taskh%(l%)=q%!4 � J? taskh%(l%)=0:�taskex$(l%)>""��addevent(taskex$(l%),3) T � ^ � h �sorttasks r � &808C1:� TaskWindow_Output | tw%=0:twlen%=q%!20-1 �+ È•twh%(tw%)<>q%!4�tw%<twmax%:tw%+=1:� � �twf%(tw%)=0 � �+ �Z%=0�twlen%�4:tmp%!Z%=q%!(24+Z%):� �! �tw_data(tw%,tmp%,twlen%) � � �- �Z%=0�twlen%:�#twf%(tw%),q%!(24+Z%):� � � �� &808C2:� TaskWindow_Ego �* �q%!20>=task%�q%!20<=(task%+twmax%)� �J twh%(q%!20-task%)=q%!4:�log("Task started: "+twname$(q%!20-task%)) � � �.� &808C3:� TaskWindow_Morio, task finished �1 tw%=0:È•q%!4<>twh%(tw%)�tw%<twmax%:tw%+=1:� �q%!4=twh%(tw%)� + �log(�msg1("TaskEnd",twname$(tw%))) �twk%(tw%)=0 � &( twh%(tw%)=0:�closew(tww%(tw%)) 0 � :? twh%(tw%)=-1:$twt%(tw%)=twname$(tw%)+�msg0("TaskFin") D �dotitle(tww%(tw%)) N � X2 twname$(tw%)="":�cf(twf%(tw%)):twf%(tw%)=0 b2 �twexit$(tw%)>""��addevent(twexit$(tw%),4) l � v� �� � �ݤsendhelp(w%,i%) � �A$,l% �A$="Hgeneric":ÈŽw%� � �txt%:A$="Htext" �! �status%:A$="Hstatus":ÈŽi%� � �1,2:A$="Haction" � �3:A$="Hip" � �4:A$="Hstop" � �5:A$="Hpause" � �6,7:A$="Hmenus" � �8:A$="Htime" �10:A$="Hmodem" � + �mess%:A$="Hmess":�pause%�A$="Hmess2" �input%:A$="Henter" * �yesno%:A$="Hyesno" 4 �info%:A$="Hinfo" > �config%:A$="Hconfig" H, :�l%=0�twmax%:�w%=tww%(l%)�A$="Htask" R � \� f=�msg0(A$) p z��finish ��l% ��device%<>0� � J%=�d(8,port%,0,0) � J%=�d(18,port%,0,0) �� ��openlog("") ��cf(fh1%):�cf(fh2%) � �l%=0�twmax%:�cf(twf%(l%)):� �!�l%=0�fmax%:�cf(fileh%(l%)):� ��endmsgtrans �� � ���cf(� C%) !�C%<>0�ș"XOS_Find",0,C%:C%=0 � $��getpointer .$È™"Wimp_GetPointerInfo",,buffer% 8>mx%=!buffer%:my%=buffer%!4:b%=buffer%!8:handle%=buffer%!12 B#icon%=buffer%!16:ob%=buffer%!20 L� V `��click(mx%,my%,b%,w%,i%) j�Z% t ÈŽb% � ~� 2 � ÈŽw% � � � -2:�i%=icon0%� � �defmenu(�) � � � �Z%=0�imax% �k �i%=ibar%(Z%)�imenu$(Z%,0)>""��domenu(102,�makemenu(imenu$(Z%,0),imenu$(Z%,1)),ibarid$(Z%),�) � � � � �* � txt%:È™"OS_Byte",121,(1�&80)�,Z% � �Z%=0� �` �domenu(101,"Alarm list,Menu list,Var list,Task list,|Script list,Quit","Control",0) � � H �domenu(101,"DbgLev 0,DbgLev 1,DbgLev 2,DbgLev 3","Debug",0) � � status% ÈŽi% � (_ �7:�usermenu$(0)>""��domenu(102,�makemenu(usermenu$(0),usermenu$(1)),"User menu",�) 2 :�defmenu(0) < � F :�defmenu(0) P � Z �1,4: d ÈŽ w% � n � status%: x ÈŽi% � � �5: � �pause% � �+ �print("",�msg0("PauseP"),"") �+ pause%=�:�addevent("pause",0) � � � �unpause � � � �4: �8 stop%=�:�print("",�msg0("StopP"),""):�stop �_ �6:�usermenu$(0)>""��domenu(102,�makemenu(usermenu$(0),usermenu$(1)),"User menu",�) �V �11:�ic_str(status%,i%)="Redial"�redial%=�:�print("",�msg0("RedialP"),"") � � � � config%: . � i%=6 ��saveconfig:�closew(config%) � yesno%: � i%=0 �yesnoans%=2 " � i%=1 �yesnoans%=1 , � txt%: 6D È™"Wimp_SetCaretPosition",w%,inic%,,,-1,��ic_str(w%,inic%) @ � -2: J �i%=icon0%� T. �b%=4��front(status%)��front(txt%) ^ � h �Z%=0�imax% r? �i%=ibar%(Z%)�ibar$(Z%)>""��addevent(ibar$(Z%),6) | � � � � � �� �� � ���defmenu(i%) �B�domenu(101,">Info,Choices...,|Control...,Quit","SLIPdial",i%) �� � ���halt(mess$) �5call_lev%=0:call_lock%()=0:event$()="":event%()=� �.�error$>""��addevent(error$,0):error$="":� �9�message(""""+�msg2("Escript",�stage%,mess$)+""""):�7 �print("",�msg0("StopE"),"") stage%=0:run%=�:�paused � & 0��input(A$) :�v$,p$:p$="Input:" D�B$=�param(A$):input$="" N�B$,1)="/"� XC$=�value(B$):Ȏ�B$,2)� b �"pr":p$=�C$,40) l � v� �9 v$=B$:�upd_icon(input%,1,""):�upd_icon(input%,0,p$) �> �front(input%):È™"Wimp_SetCaretPosition",input%,1,,,-1,0 �' ��poll(50):�input$>"":p$="Input:" � �input$=" "�input$="" � �setv(v$,input$) �� � �A$="" ��closew(input%) �� � ���message(A$) � �w%,n%,t$ �t$=�msg0("Message"):msgc%=� w%=0:n%=0 �B$=�param(A$) �B$,1)="/"� C$=�value(B$):Ȏ�B$,2)� * �"cl":�closew(mess%) 4 �"wa":w%=� > �"ti":t$=C$ H! �"ca":msg_cs$=C$:msg_ce$="" RA msg_cm%=msgmax%:msg_cs%=1:msgt%=time%:�n%=0�msg$()="" \ �"ce":msgc%=� f �"en":msg_ce$=C$ p �"ma":msg_cm%=�C$ z �"ad":n%+=1 � �"na","id": � � �� � �B$>""�n%=0�msg$()="" �" �B$>""��addmessage(B$):n%+=1 �� ��B$=""�n%>msgmax% �$msgttl%=t$:�dotitle(mess%) � �n%>0� ��addmessage("") �� ��w%��addevent("pause",0) �� ��addmessage(A$) �l%,w%,t$:l%=-1:w%=0 $%�l%+=1:t$=msg$(l%):�t$>w%�w%=�t$ .!�t$=""�l%=msgmax%:msgt%=time% 8�A$>""� B5 �l%=msgmax%��l%=1�msgmax%:msg$(l%-1)=msg$(l%):� L msg$(l%)=A$ V � ` �l%>0��openmess(l%,w%) j� t� ~ ���openmess(y%,x%) ��o% �6!tmp%=0:tmp%!4=-y%*32-32:tmp%!8=x%*16+10:tmp%!12=0 �!È™"Wimp_SetExtent",mess%,tmp% �<!q%=mess%:È™"Wimp_GetWindowState",,q%:o%=(q%!32)�(1<<16) �+q%!12=q%!4+x%*16+10:q%!16=q%!8+y%*32+32 �4q%!20=0:q%!24=0:q%!28=-1:È™"Wimp_OpenWindow",,q% �-�o%=0��cfront(mess%,0,150) ��front(mess%) �:!q%=mess%:È™"Wimp_GetWindowState",,q%:msgw%=q%!12-q%!4 �$�update_msg(0,-y%*32-32,msgw%,0) �� � ��msgfilt(A$) )�msg_cs%=1 ��A$,msg_cs$)>0 �msg_cs%=2 �msg_cs%=2 � msg_cm%-=1:�addmessage(A$) (G �msg_cm%<1�(msg_ce$>""��A$,msg_ce$)>0) �msg_cs%=0:�addmessage("") 2� <� F P��paused Z1pause%=�:�upd_icon(status%,5,�msg0("Resume")) d!�print("",�msg0("Paused"),"") n��poll(30):�pause%=� x� � � ��unpause �?pause%=�:stop%=�:run%=�:�upd_icon(status%,5,�msg0("Pause")) ��print(""," ","") �� � � ��stop �?call_lev%=0:call_lock%()=0:event$()="":event%()=�:msg_cs%=0 �[�stage%>0�stop$<>""��addevent(stop$,0):stop$="":��addevent("pause",0):stage%=0:�release �� � �)��domenu(handle%,menu$,menutitle$,I%) �!�i%,item$,menuItems%,menuptr% �menu$=""�� menuItems% = 0 menuhandle%=handle% "menuptr%=menudata% ,i%=0 6menuptr%!20=44 @$menuptr%=menutitle$ J<menuptr%?12=7:menuptr%?13=2:menuptr%?14=&7:menuptr%?15=0 T$menuptr%!16=230-24:menuptr%!24=0 ^menuptr%+=28 h� r= item$=�par(menu$,",",i%):�menuitem(item$):menuItems%+=1 | �item$="" �#menuptr%!-24=(menuptr%!-24)�&80 �,�I%<>0 �Y%=120+(menuItems%-1)*44 �Y%=my% �-È™ "Wimp_CreateMenu",,menudata%,mx%-64,Y% �� � ���menuitem(text$) � �left$ �� text$>""� � !menuptr%=0 �0 �text$,1)="|"�text$=�text$,2):!menuptr%=2 �% left$ = �text$,1):menuptr%!4=-1 �# � left$=">" �menuptr%!4=info% � menuptr%!8=&07000021 O � left$=">" � left$="<" � $(menuptr%+12)=�text$,2) � $(menuptr%+12)=text$ menuptr%+=24 � &� 0 :ݤpar(menu$,sep$,� i%) D�i1% N%i1%=i%+1:i%=�menu$+sep$,sep$,i1%) X=�menu$,i1%,i%-i1%) b l��menuselect(menus%) v�A$ �<�l%:È™"Wimp_DecodeMenu",,menudata%,menus%,�20," ")�,,,A$ �Ȏ A$ � �# �"Choices...":�front(config%) � �"Control...":�front(txt%) � �"Quit":�finish:� � �"Alarm list":�listalarms � �"Menu list":�listmenu � �"Task list":�listtasks � �"Var list":�listvars �$ �"Script list":�listscript("") � �"DbgLev 0":debug%=0 � �"DbgLev 1":debug%=1 � �"DbgLev 2":debug%=2 �"DbgLev 3":debug%=3 :�umenu%>0 � �l%=1�umenu% �A$=umenu$(l%,0) � */ �upd_icon(status%,7,umenu$(l%,0)) 4' �addevent(umenu$(l%,1),8) > � H � R � \� f� p z��errorbox �<!buffer%=�:$(buffer%+4)=�$+" (internal code "+Þ+")."+�0 �1È™ "Wimp_ReportError",buffer%,1,Task$:�finish �� � ���front(h%) �&!q%=h%:È™"Wimp_GetWindowState",,q% �$q%!28=-1:È™"Wimp_OpenWindow",,q% �G�h%=txt%�ș"Wimp_SetCaretPosition",h%,inic%,,,-1,��ic_str(h%,inic%) �� � ���cfront(h%,xoff%,yoff%) ��x%,y%,wx%,wy%,xe%,ye% ��autowinpos%=0�h%=status%� �front(h%) � K È™"OS_ReadModeVariable",-1,4�,,xe%:È™"OS_ReadModeVariable",-1,11�,,x% $K È™"OS_ReadModeVariable",-1,5�,,ye%:È™"OS_ReadModeVariable",-1,12�,,y% .( !q%=h%:È™"Wimp_GetWindowState",,q% 89 x%=x%<<xe%:y%=y%<<ye%:wx%=q%!12-q%!4:wy%=q%!16-q%!8 BO q%!4=(x%-wx%)�2-xoff%:q%!12=q%!4+wx%:q%!8=(y%-wy%)�2-yoff%:q%!16=q%!8+wy% L6 q%!20=0:q%!24=0:q%!28=-1:È™"Wimp_OpenWindow",,q% V� `� j t��dotitle(h%) ~(!q%=h%:È™"Wimp_GetWindowOutline",,q% �5È™"Wimp_ForceRedraw",-1,q%!4,q%!16-44,q%!12,q%!16 �� � �ݤic_str(H%,I%) �,!q%=H%:q%!4=I%:È™"Wimp_GetIconState",,q% �=�str(q%!28) � ���seticonstring(H%,I%,A$) �1!q%=H%:q%!4=I%:È™"XWimp_GetIconState",,q%�;F% �*�tf10(F%)�q%!28>&8800 �$(q%!28)=A$+�0 �� � ��upd_icon(H%,I%,A$) :�seticonstring(H%,I%,A$):!q%=H%:q%!4=I%:q%!8=0:q%!12=0 È™"Wimp_SetIconState",,q% � ( 2��setinv(H%,I%,S%) <=S%=�(S%=0):!q%=H%:q%!4=I%:q%!8=((1)<<21)*S%:q%!12=(1<<21) FÈ™"Wimp_SetIconState",,q% P� Z dݤrdinv(H%,I%) n,!q%=H%:q%!4=I%:È™"Wimp_GetIconState",,q% x$=�(((q%!24)�(1<<21))�2097152<>0) � ���setshaded(H%,I%,S%) �3!q%=H%:q%!4=I%:q%!8=((1)<<22)*�S%:q%!12=(1<<22) �ș"Wimp_SetIconState",,q% �� � ���print(a$,b$,c$) �B�a$>""��upd_icon(status%,1,�a$,34)):�a$>1��log("Action: "+a$) �B�b$>""��upd_icon(status%,2,�b$,34)):�b$>1��log("Status: "+b$) �B�c$>""��upd_icon(status%,3,�c$,34)):�c$>1��log("IP add: "+c$) �� � �7��openw(handle%,x0%,y0%,x1%,y1%,scx%,scy%,bhandle%) �handle%>-1� ! q%!0=handle%:q%!28=bhandle% + q%!4=x0%:q%!8=y0%:q%!12=x1%:q%!16=y1% " q%!20=scx%:q%!24=scy% , È™"Wimp_OpenWindow",,q% 6� @� J T��closew(h%) ^�L% h ÈŽh%� r �mess%:�pause% ��unpause | �input%:input$=" " � : � �L%=0�twmax% �" �h%=tww%(L%)�twh%(L%)>0� �/ �7:�yesno(�msg0("TaskKill"),3)=2 � �) �messtw(twname$(L%),&808C4) � � � h%=0 � � � L%=twmax% � � � � �� �)�h%>0�!q%=h%:È™"Wimp_CloseWindow",,q% � ݤask(A$) &!�d%,r%,def%:d%=60:r%=0:def%=1 0�B$=�param(A$) : �B$,1)="/"� D C$=�value(B$):Ȏ�B$,3)� N" �"del":d%=�C$:�d%<5�d%=5 X1 �"def":C$=�lower(C$):�C$,1)="y"�def%=2 b � l � v r%=�yesno(B$,d%) � � � �A$="" ��r%=0�r%=def% �=-(r%=2) � � � *** � �ݤyesno(A$,wait%) �"� returns 0=timeout 1=no 2=yes �>�st%:st%=time%:wait%=wait%*100:�upd_icon(yesno%,2,�A$,57)) �,�cfront(yesno%,0,0):�wait%=0�wait%=60000 �8yesnoans%=0:�:�poll(50):�yesnoans%>0�time%-st%>wait% ��closew(yesno%) =yesnoans% ݤvarval(A$) �L%,F% */È™"XOS_ReadVarVal",A$,tmp%,256,0,3 �,,L%;F% 4�(F%�1) �L%>256 �:="" >tmp%?L%=13:=$tmp% H R��info(q%) \=x0%=!q%:y0%=q%!4:x1%=q%!8:y1%=q%!12:scx%=q%!16:scy%=q%!20 f3bx%=x0%-scx%:by%=y1%-scy%:gy0%=q%!28:gy1%=q%!36 p� z ���redraww(h%) ��tw%:!q%=h%:ÈŽh%� � �txt%: �( È™ "Wimp_RedrawWindow",,q% � more% � �draw_txt(more%) ��mess%: �( È™ "Wimp_RedrawWindow",,q% � more% � �draw_msg(more%) �: �" �tw%=0�twmax%:�h%=tww%(tw%)� �* È™ "Wimp_RedrawWindow",,q% � more% � �draw_tw(tw%,more%) � � � � � $ .��init_txt 8txto%=0 B<log_y%=1:�txtl$(txty%),txtc% txty%,msg$(msgmax%):msgw%=0 L"txtl$()=�txtx%�2," "):ioff%=40 V>!tmp%=0:tmp%!4=-txty%*32-ioff%-8:tmp%!8=txtx%*16:tmp%!12=0 ` È™"Wimp_SetExtent",txt%,tmp% j<�i%=0�1:!tmp%=txt%:tmp%!4=i%:È™"Wimp_GetIconState",,tmp% tAtmp%!12=tmp%!12-txty%*32:tmp%!20=tmp%!20-txty%*32:tmp%!4=txt% ~,!q%=txt%:q%!4=i%:È™"Wimp_DeleteIcon",,q% �(È™"Wimp_CreateIcon",,tmp%+4 �inic%:� �#ptr%=0:lt%=0:data$="":tdata$="" �*�print("Starting SLIPdial","Idle"," ") �/�quiet%=0��rdinv(config%,2)=0 ��front(txt%) �� � ���init_tww(tw%,out%,T$) ��off%:off%=(tw%�4)*40 ��tww%(tw%)=0� �2 È™ "Wimp_OpenTemplate",,sdlang$+".Templates" �C È™ "Wimp_LoadTemplate",,q%,ind%,sp%+size%,-1,"task",0 �,,ind% �' twt%(tw%)=q%!72:q%!44=-twwmax%*32 A !q%=!q%+off%:q%!8=q%!8+off%:q%!4=q%!4-off%:q%!12=q%!12-off% , È™ "Wimp_CreateWindow",,q% � tww%(tw%) È™ "Wimp_CloseTemplate" ÈŽtw%� ( �0:�twbuf0$(twwmax%) 2 �1:�twbuf1$(twwmax%) < �2:�twbuf2$(twwmax%) F �3:�twbuf3$(twwmax%) P �4:�twbuf4$(twwmax%) Z �5:�twbuf5$(twwmax%) d �6:�twbuf6$(twwmax%) n" :�halt(�msg0("Etask1")):� x � � � � ÈŽtw%� � �0:twbuf0$()="" � �1:twbuf1$()="" � �2:twbuf2$()="" � �3:twbuf3$()="" � �4:twbuf4$()="" � �5:twbuf5$()="" � �6:twbuf6$()="" � � �� �I$twt%(tw%)=�msg1("TaskRun",T$):tdata$(tw%)="":twy%(tw%)=0:two%(tw%)=0 ��out%��front(tww%(tw%)) � %��update_txt(ux0%,uy0%,ux1%,uy1%) "6!q%=txt%:q%!4=ux0%:q%!8=uy0%:q%!12=ux1%:q%!16=uy1% ,%È™"Wimp_UpdateWindow",,q% � more% 6�draw_txt(more%) @� J T%��update_msg(ux0%,uy0%,ux1%,uy1%) ^7!q%=mess%:q%!4=ux0%:q%!8=uy0%:q%!12=ux1%:q%!16=uy1% h%È™"Wimp_UpdateWindow",,q% � more% r�draw_msg(more%) |� � �(��update_tw(tw%,ux0%,uy0%,ux1%,uy1%) �;!q%=tww%(tw%):q%!4=ux0%:q%!8=uy0%:q%!12=ux1%:q%!16=uy1% �%È™"Wimp_UpdateWindow",,q% � more% ��draw_tw(tw%,more%) �� � ���draw_msg(more%) �ȕ more% � �info(q%+4):� �3 top%=�(gy1%-by%+16)�32:bot%=�(gy0%-by%+16)�32 �7 �bot%>msgmax% �bot%=msgmax%:�top%>bot% �top%=bot% �( È™"Wimp_SetColour",7:�L%=top%�bot% 5 �bx%+4-msgc%*(msgw%�2-�msg$(L%)*8),by%-L%*32-16 �msg$(L%):� % È™"Wimp_GetRectangle",,q%�more% &� 0� : D��draw_tw(tw%,more%) N�L%,y%,top%,bot%:È• more% X �info(q%+4):� b- top%=�(gy1%-by%)�32:bot%=�(gy0%-by%)�32 l7 �bot%>twwmax% �bot%=twwmax%:�top%>bot% �top%=bot% v( È™"Wimp_SetColour",7:�L%=top%�bot% � y%=(L%+two%(tw%))�twwmax% � �bx%+4,by%-L%*32-4 � ÈŽtw%� � �0:�twbuf0$(y%) � �1:�twbuf1$(y%) � �2:�twbuf2$(y%) � �3:�twbuf3$(y%) � �4:�twbuf4$(y%) � �5:�twbuf5$(y%) � �6:�twbuf6$(y%) � � � � �% È™"Wimp_GetRectangle",,q%�more% !� !� ! ! ��draw_txt(more%) !*�L%,y%,top%,bot%:È• more% !4 �info(q%+4):� !>- top%=�(gy1%-by%)�32:bot%=�(gy0%-by%)�32 !H3 �bot%>txty% �bot%=txty%:�top%>bot% �top%=bot% !R' �L%=top%�bot%:y%=(L%+txto%)�txty% !\= �bx%,by%-L%*32:È™"Wimp_SetColour",txtc%?y%:�txtl$(y%):� !f' È™"Wimp_GetRectangle",,q% � more% !p� !z� !� !���str_txt(A$) !��data$>""��flush !��line_txt(A$,7) !�� !� !���warn_txt(A$) !��line_txt(A$,11) !�� !� !���flush !��data$>""� !�, �(debug%�2)<>0�errC%<>0 ��#errC%,data$ " �msg_cs%>0��msgfilt(data$) "! �line_txt(data$,5):data$="" "� "$� ". "8ݤrec:�device%=0�=-1 "BZ%=�d(1,port%,0,0) "L"�Z%>0�(debug%�2)>0�msg_cs%>0 � "V �Z%>31 �Z%<128 �data$+=�Z% "`( �Z%=13�Z%=10��data$>=txtx% ��flush "j� "t=Z% "~ "���tw_data(tw%,buf%,len%) "��l% "��l%=0�len%:C%=buf%?l% "�& �C%>31 �C%<128 �tdata$(tw%)+=�C% "�$ �C%=13�C%=10��tdata$(tw%)>78 � "� �tw_txt(tw%,tdata$(tw%)) "�1 �tget%=tw%�tget$(0)>""��tget(tdata$(tw%)) "� tdata$(tw%)="" "� � "�� "�-�tget%=tw%�tget$(0)>""��tget(tdata$(tw%)) "�� # # ��tw_txt(tw%,A$) # �t%,B$ #5�(debug%�4)<>0�errC%<>0 ��#errC%,"TW"+�tw%+">"+A$ #(È•A$>"" #2& t%=(twy%(tw%)+two%(tw%))�twwmax% #< B$=�A$,79):A$=�A$,79) #F ÈŽtw%� #P �0:twbuf0$(t%)=B$ #Z �1:twbuf1$(t%)=B$ #d �2:twbuf2$(t%)=B$ #n �3:twbuf3$(t%)=B$ #x �4:twbuf4$(t%)=B$ #� �5:twbuf5$(t%)=B$ #� �6:twbuf6$(t%)=B$ #� � #� �twy%(tw%)<twwmax% � #�D !q%=tww%(tw%):È™"Wimp_GetWindowState",,q%:f%=(q%!32)�(1<<16) #�d �twy%(tw%)>=�(q%!8-q%!16)�32 �q%!24=-(twy%(tw%)*32-�(q%!8-q%!16))-32:È™"Wimp_OpenWindow",,q% #�? �update_tw(tw%,0,-twy%(tw%)*32-32,1280,-twy%(tw%)*32+4) #� twy%(tw%)+=1 #� � #�' two%(tw%)=(two%(tw%)+1)�twwmax% #�K È™"Wimp_BlockCopy",tww%(tw%),0,-32*twwmax%,1280,0,0,-32*(twwmax%-1) #�< �update_tw(tw%,0,-32*twwmax%,1280,-32*(twwmax%-1)+4) #� � $� $� $ $"��line_txt(A$,col%) $,�t%:�poll(slice%) $6È•A$>"" $@ t%=(log_y%+txto%)�txty% $J( txtl$(t%)=�A$,txtx%):A$=�A$,txtx%) $T# txtc%?t%=col%:�log_y%<txty% � $^? !q%=txt%:È™"Wimp_GetWindowState",,q%:f%=(q%!32)�(1<<16) $hd �f%<>0�log_y%>=�(q%!8-q%!16)�32 �q%!24=-(log_y%*32-�(q%!8-q%!16))-32:È™"Wimp_OpenWindow",,q% $r6 �update_txt(0,-log_y%*32-32,1280,-log_y%*32+4) $| log_y%+=1 $� � $� txto%=(txto%+1)�txty% $�B È™"Wimp_BlockCopy",txt%,0,-32*txty%,1280,0,0,-32*(txty%-1) $�5 �update_txt(0,-32*txty%,1280,-32*(txty%-1)+4) $� � $�� $�� $� $� ��clr_txt $�(txtl$()="":log_y%=0:txto%=0:data$="" $�/�update_txt(0,-txty%*32-ioff%-8,16*txtx%,0) $�� $� % ��log(m$) %�(debug%�1) � % �str_txt(m$) %& �errC%<>0 ��#errC%,m$ %0� %:� %D %N��openlog(A$) %XB$=�param(A$) %b�B$="" � %l �flush:�cf(errC%) %v� %� B$=�canon(B$) %�" È™"XOS_Find",&CF,B$�errC%;F% %�* �(F%�1)�ș"XOS_Find",&8F,B$�errC%;F% %�. �(F%�1)�errC%=0:�halt(�msg0("Etrace")):� %� È™"XOS_File",18,B$,&FFF %� �errC%<>0 ��#errC%=�#errC% %�� %�� %� %���claimdevice %��driverno%>-1� %�< !q%=256:q%!12=0:q%!16=11:q%!20=2:q%!24=driverno%+port% %� $(q%+28)="SLIPdial"+�0 &" È™"Wimp_SendMessage",18,q%,0 &" device%=�:�L%=1�5:�poll(0):� &� & � &* &4��refusedevice &>�driverno%>-1� &H) � q%!20=2 � q%!24=driverno%+port% � &R# !q%=256:q%!12=q%!8:q%!16=12 &\$ $(q%+28)=�msg0("DevMine")+�0 &f' È™"Wimp_SendMessage",17,q%,q%!4 &p � &z� &�� &� &�ݤloaddriver(A$) &�A%=�A$," "):�A%>=0 � &� driver$=�A$,A%-1) &� port%=�(�A$,A%+1)) &� � &� driver$="internal" &� port%=0 &�� &� &�$�setv("port",driver$+" "+�port%) &�+�print(�msg1("DevLoad",driver$)," ","") 'GÈ™"XOS_File",16,"SerialDev:modules."+driver$+".driver",driver,0�;F% ',�(F%�1) ��halt(�msg1("Edev",driver$)):=0 ' �print("",�msg0("DevOK"),"") '$driverno%=driver!&C8 '. =port% '8 'B��setspeed(B$) 'L&speed%=�B$:�speed%=0 �speed%=19200 'V�setv("speed",�speed%) '`� 'j 't��addevent(A$,t%) '~H� event types are: 0 system, 1 time-alarm, 2 line-alarm, 3 task-end, '�G� 4 taskwindow-end, 5 command-input, 6 icon-click, 7 icon-filedrop, '�� 8 user-menu, 9 user-eof '��log(�msg1("Qadd",A$)) '�"L%=0:È•event$(L%)>""�L%<maxev% '�L%+=1:� '�"event$(L%)=A$:evtype%(L%)=t%:� '� '�ݤgetevent '� �t%,l%,A$,n%:l%=0:A$="":n%=0 '�>��event$(l%)>""�event%(evtype%(l%))=� �A$=event$(l%):n%=l% '�(l%+=1:�A$>""�event$(l%)=""�l%=maxev% '��A$>""� ( I �l%=n%�maxev%-1:event$(l%)=event$(l%+1):evtype%(l%)=evtype%(l%+1):� ( event$(maxev%)="" (� (=A$ (( (2ݤtestevent (<�t%,l%,r%:l%=0:r%=0 (F/��event$(l%)>""�event%(evtype%(l%))=� �r%=� (P(l%+=1:�r%<>0�event$(l%)=""�l%=maxev% (Z=r% (d (nݤcommand(com$) (x(È•com$>""�stop%=0:A$=�multicom(com$) (��poll(slice%) (��log(�stage%+": "+A$) (�DB$=�param(A$):B$=�lower(B$):lc$=B$:� store last command for help (��B$,1)<>":" � (� ÈŽB$ � (�& � "if" :return%=�if(A$,com$) (�" � "ask" :return%=�ask(A$) (�# � "case" :return%=�case(A$) (�( � "when" :return%=�when(A$,com$) (�& � "otherwise":�otherwise(com$) (�$ � "endcase":return%=�endcase (�$ � "claim":return%=�claim(A$) (�# � "debug":debug%=�debug(A$) )( � "driver":return%=�modemdrv(A$) )& � "source":return%=�source(A$) )( � "library":return%=�library(A$) )" � "chain":�chain(A$) ),' � "port" :port%=�loaddriver(A$) )6 � "speed":�setspeed(A$) )@ � "release":�release )J( � "init" :return%=�initmodem(A$) )T � "reinit":�reinit )^# � "dial" :return%=�dial(A$) )h# � "wait" :return%=�wait(A$) )r � "trace":�openlog(A$) )| � "send" :�send(A$) )�$ � "ipget":return%=�ipget(A$) )� � "make" :�makefile(A$) )�# � "task" :return%=�task(A$) )�) � "taskwindow":return%=�taskw(A$) )�' � "sleep","pause":�pause(�(A$)) )� � "alarm":�alarm(A$) )� � "set" :�set(A$) )� � "unset":�unset(A$) )�D � "?eq","?ne","?lt","?le","?gt","?ge":return%=�testeq(B$,A$) )�& � "string":return%=�string(A$) )�# � "eval" :return%=�eval(A$) )�! � "label":� ignore labels )�" � "goto" :�goto(A$,stage%) *# � "call" :�gosub(A$,stage%) *- � "return":return%=�return(A$,stage%) * � "echo" :�echo(A$) *&# � "?file":return%=�file(A$) *0' � "?line":return%=�testline(A$) *:# � "?free":return%=�free(A$) *D � "retry":�setretry(A$) *N# � "open" :return%=�open(A$) *X$ � "close":return%=�close(A$) *b# � "read" :return%=�read(A$) *l% � "write" :return%=�write(A$) *v! � "ptr" :return%=�ptr(A$) *�' � "move" :return%=�movefile(A$) *�' � "copy" :return%=�copyfile(A$) *�& � "append":return%=�append(A$) *�& � "delete":return%=�delete(A$) *�* � "newsrate":return%=�newsrate(A$) *�' � "?task":return%=�testtask(A$) *�2 � "dopen","dataopen":return%=�dataopen(A$) *�- � "stamp":�log("("+�(� �100)+") "+A$) *� � "error":�halt(A$) *� � "message":�message(A$) *� � "menu" :�menudef(A$) *� � "list" :�list(A$) *�% � "icon":return%=�iconbar(A$) +* � "analyse","analyze":�analyse(A$) + � "help" :�help(A$) +! � "event":�eventonoff(A$) + � "stop" :�stop +*& � "quit" :�quit(�msg0("Quit")) +4 � "exit" :�exit +> � "input":�input(A$) +H$ � "oscli":return%=�oscli(A$) +R :�log(�msg0("BadCom")) +\ � +f� +pA�return%<0��setv("$status",return$)��setv("$status",�return%) +z� +�=return% +� +���echo(A$) +��B$,s%:s%=0 +�� +� B$=�param(A$) +� �B$,1)="/"� +� Ȏ�B$,3)� +� �"/st":s%=� +� �"/lo":s%=0 +�$ �"/da":A$=""""+�$+""" "+A$ +� � +� � , �s%� , �print("",B$,"") , � ,$ �str_txt(B$) ,.- �(debug%�3)<>0�errC%<>0 ��#errC%,B$ ,8 � ,B � ,L �A$="" ,V� ,` ,jݤclaim(A$) ,t�J%,t%,d%,try% ,~$�print(�msg0("DevClaim")," ","") ,�#t%=��param(A$):�t%<0 �t%=retry% ,�#d%=��param(A$):�d%<2 �d%=delay% ,� try%=1 ,�� ,��claimdevice ,��device%<>0 � ,� J%=�d(17,port%,0,0) ,�4 J%=�d(13,port%,speed%,0):�J%<>speed%�speed%=J% ,�4 J%=�d(14,port%,speed%,0):�J%<>speed%�speed%=J% ,� J%=�d(15,port%,0,0) ,� J%=�d(16,port%,1,0) ,� J%=�d(6,port%,0,0) - J%=�d(7,port%,0,0) - � - �pause(d%):�t%>0 �try%+=1 -� -("�device%<>0 �try%>t% �stop%<>0 -2=device% -< -F ��release -P�J% -Z� device% � -d1 �print(�msg0("DevRel"),�msg0("DevDrop"),"") -n J%=�d(8,port%,0,0) -x J%=�d(18,port%,0,0) -� device%=� -�� -�� -� -�ݤinitmodem(A$) -��B$,h%:h%=0 -��droplines<>0 � -�$ �print(�msg0("DevInit"),"","") -� �A$=""�A$=�vv("$init") -� � -� B$=�param(A$) -�) �print("",�msg1("Sending",B$),"") -�, �send(B$):h%=�get4s("OK","","","",5) . �A$=""�h%=0 .� .=h% ." .,��reinit .6�J% .@2J%=�d(13,port%,speed%,0):�J%<>speed%�speed%=J% .J2J%=�d(14,port%,speed%,0):�J%<>speed%�speed%=J% .TJ%=�d(15,port%,0,0) .^J%=�d(16,port%,1,0) .hJ%=�d(8,port%,3,0) .r� .| .���setretry(A$) .��B$ .�B$=�param(A$) .��B$>0 �retry%=�B$ .��A$>2 �delay%=�A$ .�� .� .���usericon(A$) .��upd_icon(status%,11,A$) .�"�setshaded(status%,11,(A$="")) .�� .� .�ݤdial(numlist$) /)�flag%,r%,d%,nod%,noc%,bus%,dc$,B$,C$ /flag%=0:dc$="ATDT" //r%=retry%:d%=delay%:nod%=d%:noc%=d%:bus%=d% /&�usericon(�msg0("Redial")) /0� /: B$=�param(numlist$) /D �B$,1)="/"� /N! C$=�value(B$):Ȏ�B$,3)� /X% �"ret":r%=�C$:�r%<1 �r%=1 /b% �"del":d%=�C$:�d%<2 �d%=2 /l% nod%=d%:noc%=d%:bus%=d% /v �"noc":noc%=�C$ /� �"nod":nod%=�C$ /�# �"not","pul":dc$="ATDP" /�# �"ton","nop":dc$="ATDT" /� �"bus":bus%=�C$ /� � /� � /�" attempt%=1:flag%=0:num$=B$ /� � /�K �print(�msg1("Dialling",num$),�msg2("Dattempt",�attempt%,�r%),"") /�% �send(dc$+num$):attempt%+=1 /�U return%=�get4s(�vv("$conn"),�vv("$busy"),�vv("$nocarr"),�vv("$nodial"),120) /� �stop%=0 � /� �redial%=� � 0B A%=�droplines:È• �d(5,port%,0,0)>0:J%=�rec:�:redial%=� 0 � 0 ÈŽreturn% � 0 9 � 1:�print("",�msg0("Dconnect"),""):flag%=1 0*; � 2:�print("",�msg0("Dbusy"),""):�pause(bus%) 049 � 3:�print("",�msg0("Dnc"),""):�pause(noc%) 0>9 � 4:�print("",�msg0("Dnd"),""):�pause(nod%) 0H4 � 2,3,4:È• �d(5,port%,0,0)>0:J%=�rec:� 0R4 �print("",�msg0("Dnr"),""):�pause(d%) 0\ � 0f � 0p � 0z6 A%=�droplines:� cancel a dial if stop active 0� � 0�1 � attempt%>r% �stop%<>0 �flag%>0 �device%=0 0�C �flag%=0 �numlist$>"" ��print(�msg0("Dnext"),"",""):�pause(1) 0� � 0�0� numlist$="" �stop%<>0 � flag%>0 �device%=0 0��usericon("") 0� =flag% 0� 0�ݤwait(A$) 0�$�l%,m%,d%,s%,return%,B$,C$,qual% 0�d%=600:tget%=-1:return%=0 0��B$=�param(A$):qual%=� 0��B$,1)="/"� 1 C$=�value(B$):qual%=� 1 Ȏ�B$,2)� 1 �"ev":return%=�waitevent 1$ �"de","del":d%=�C$ 1.@ �"na","id":�l%=0�twmax%:�C$=twname$(l%)�tget%=l%:l%=twmax% 18/ �:�tget%<0 ��halt(�msg0("Ebadtask")):=0 1B# :�halt(�msg0("Ebadwait")):=0 1L � 1V� 1`�qual%=� 1j�return%=0 � 1t) �d%=0��halt(�msg1("Ebaddel",A$)):=0 1~ s4$()="":l%=0:C$="":� 1�1 s4$(l%)=B$:C$+=B$+"/":l%+=1:B$=�param(A$) 1� �B$=""�l%=4:C$=�C$,�C$-1) 1�6 �print(�msg1("Wait",C$),�msg1("Timeout",�d%),"") 1� �tget%<0 � 1�6 return%=�get4s(s4$(0),s4$(1),s4$(2),s4$(3),d%) 1� � 1�6 return%=�gettw(s4$(0),s4$(1),s4$(2),s4$(3),d%) 1� � 1�a � return%>0 ��print("",�msg1("Received",s4$(return%-1)),"")��print("",�msg0("TimedOut"),"") 1�� 1�=return% 1� 2 ݤwaitevent 2 (�upd_icon(status%,7,�msg0("Select")) 2#�print(�msg0("Waiting")," ","") 2��poll(50):��testevent 2(=1 22 2<��eventonoff(A$) 2F�a%,B$:a%=� 2P�B$=�param(A$) 2Z Ȏ�B$,2)� 2d�"/e":a%=� 2n�"/d":a%=� 2x�"ti":event%(1)=a% 2��"li":event%(2)=a% 2��"ta":event%(3)=a% 2��"tw":event%(4)=a% 2��"in":event%(5)=a% 2��"ic":event%(6)=a% 2��"fi":event%(7)=a% 2��"me":event%(8)=a% 2��"eo":event%(9)=a% 2��"al":event%()=a% 2�� 2��A$="":event%(0)=� 2�� 2� 36ݤgettw(tget$(0),tget$(1),tget$(2),tget$(3),wait%) 3�st%,r% 3-r%=0:twgflag%=0:wait%=wait%*100:st%=time% 3"�tget(tdata$(tget%)) 3,8��poll(50):�twgflag%>0 ��(time%-st%)>wait% �stop%<>0 36�twgflag%>0 �r%=twgflag% 3@=r% 3J 3T��tget(A$) 3^�L% 3h�L%=0�3 3r8 �tget$(L%)>""��A$,tget$(L%))>0 �twgflag%=L%+1:L%=3 3|� 3�tget%=-1 3�� 3� 3�"ݤget4s(s1$,s2$,s3$,s4$,wait%) 3��flag%,st%,J% 3�wait%=wait%*100:st%=time% 3�'n1%=�s1$:n2%=�s2$:n3%=�s3$:n4%=�s4$ 3�#p1%=1:p2%=1:p3%=1:p4%=1:flag%=0 3�� 3� J%=�rec 3� �J%>-1 � 3�8 �J%=n1% �p1%+=1:n1%=�(�s1$,p1%)) �n1%=�s1$:p1%=1 3�8 �J%=n2% �p2%+=1:n2%=�(�s2$,p2%)) �n2%=�s2$:p2%=1 48 �J%=n3% �p3%+=1:n3%=�(�s3$,p3%)) �n3%=�s3$:p3%=1 48 �J%=n4% �p4%+=1:n4%=�(�s4$,p4%)) �n4%=�s4$:p4%=1 4 � 4& �poll(10) 40 � 4: �p1%>�s1$ �s1$>"":flag%=1 4D �p2%>�s2$ �s2$>"":flag%=2 4N �p3%>�s3$ �s3$>"":flag%=3 4X �p4%>�s4$ �s4$>"":flag%=4 4b6�flag%>0 ��(time%-st%)>wait% �stop%<>0 �redial%<>0 4l�flag%>0 �:=flag% 4v=0 4� 4���send(A$) 4�%�A%,J%,R%,t$,tw%,B$,C$:t$="":R%=0 4��B$=�param(A$) 4� �B$,1)="/"� 4� C$=�value(B$):Ȏ�B$,2)� 4� �"ra":R%=� 4� �"no":R%=� 4� �"na","id":t$=C$ 4� � 4� � 4� �t$=""� 4�- �device%=0��halt(�msg0("Enodev")):� 51 �A%=1��B$:J%=�d(0,port%,��B$,A%,1),0):� 5$ �R%=0 �J%=�d(0,port%,13,0) 5 � 5 6 tw%=0:È•twname$(tw%)<>t$�tw%<twmax%:tw%+=1:� 5*# �tw%<twmax%�twh%(tw%)<>0� 54E !q%=256:q%!12=0:q%!16=&808C0:q%!20=�B$-(R%=0):$(q%+24)=B$ 5>0 È™"Wimp_SendMessage",17,q%,twh%(tw%) 5H9 �log(�msg2("TaskSend",�B$,100),twname$(tw%))) 5R � 5\ � 5f � 5p �A$="" 5z� 5� 5�ݤipget(A$) 5�(�r%,start$,d%,a%,loc%,tlim%,B$,C$,J% 5�r%=0:d%=60:a%=0 5��B$=�param(A$) 5��B$,1)="/"� 5� C$=�value(B$):Ȏ�B$,2)� 5�! �"de":d%=�C$:�d%<10�d%=10 5� �"au":a%=� 5� � 5� � 5� start$=B$ 5�� 6 �A$="" 6 �a%=0� 6# r%=�get4s(start$,"","","",d%) 6$ � 6.. start$="":loc%=0:r%=0:tlim%=time%+d%*100 68 � 6B J%=�rec 6L �J%>0� 6V ÈŽloc%� 6`C �0,1,2:�J%>47�J%<57�start$+=�J%:loc%+=1:�start$="":loc%=0 6j9 �3:�J%=46�start$+=".":loc%+=1:�start$="":loc%=0 6t � 6~ � 6� �poll(slice%) 6� � 6�& �loc%=4�time%>tlim%:�loc%=4�r%=1 6�� 6��r%=1 � 6� ipnumber$=start$ 6� J%=�rec 6�+ � terminates on space or control char 6�& È• (J%>32 � J%=0) ��ipnumber$<20 6�@ �J%>31 �ipnumber$=ipnumber$+�J%:�poll(slice%):��poll(10) 6� J%=�rec 6� � 7 C%=�(�ipnumber$,1)) 7 & È• (C%<48 � C%>57) ��ipnumber$>5 7* ipnumber$=�ipnumber$,�(ipnumber$)-1) 7 C%=�(�ipnumber$,1)) 7( � 72" �setv("ipaddress",ipnumber$) 7<1 �setv("route",�subst("%ip1.%ip2.%ip3.254")) 7F# return$=ipnumber$:r%=-1:A$="" 7P� 7Z=r% 7d 7n��updateip(A$) 7x �l%,m% 7�&l%=�A$,"."):�setv("ip1",�A$,l%-1)) 7�3m%=�A$,".",l%+1):�setv("ip2",�A$,l%+1,m%-l%-1)) 7�3l%=�A$,".",m%+1):�setv("ip3",�A$,m%+1,l%-m%-1)) 7��setv("ip4",�A$,l%+1)) 7��print("","",A$) 7�� 7� 7���makefile(name$) 7�A%=�name$," ") 7�+�A%<=1 � �quit(�msg1("Ebadmake",name$)) 7�+source$=�name$,A%-1):dest$=�name$,A%+1) 7�%�print(�msg1("Make",dest$),"","") 7� �source$="-"�source$="null:" 8fh1%=�openin(source$) 80�fh1%=0 ��halt(�msg1("Enotfound",source$)):� 8fh2%=�openout(dest$) 8"-�fh2%=0 ��halt(�msg1("Ebadfile",dest$)):� 8,*È• (�#fh1%=� ���line(stage%+1),1)="+") 86 � �#fh1% � 8@& stage%+=1:A$=��line(stage%),2) 8J � 8T A$=�#fh1% 8^ � 8h A$=�subst(A$) 8r �A$,1)<>"#" ��#fh2%,A$ 8| �poll(slice%) 8�� 8��cf(fh1%):�cf(fh2%) 8�� 8� 8�ݤopenin(f$) 8�=�fopen(f$,&4F) 8� 8�ݤopenout(f$) 8�%=�fopen(f$,&8F):�settype(f$,&FFF) 8� 8�ݤopenup(f$) 8��h% 8�h%=�fopen(f$,&CF) 9-�h%=0�h%=�fopen(f$,&8F):�settype(f$,&FFF) 9=h% 9 9&ݤfopen(f$,r%) 90 �h%,F% 9:È™"XOS_Find",r%,f$�h%;F% 9D�(F%�1)�h%=0 9N=h% 9X 9bݤdelfile(f$) 9l�F%:È™"XOS_File",6,f$�;F% 9v=(F%�1) 9� 9���settype(f$,t%) 9�ș"XOS_File",18,f$,t% 9�� 9� 9���pause(wait%) 9� �endtime% 9��wait%=0 � 9� �paused 9� � 9�$ �log(�msg1("Wait",�wait%+"s")) 9�( �poll(0):st%=time%:wait%=wait%*100 9� � : �poll(50) : ��(st%-time%)>wait% : � : � :* :4 ��settime :> �l%,m% :H?q%=3:È™"OS_Word",14,q% :RIÈ™"OS_ConvertDateAndTime",q%,tmp%,256,"%24%MI%SE"�l%,m%:now$=�str(l%) :\4�setv("$time",now$):�setv("$mtime",�(time%�100)) :f� :p :z ��setdate :� �l%,m% :�?q%=3:È™"OS_Word",14,q% :�IÈ™"OS_ConvertDateAndTime",q%,tmp%,256,"%YR%MN%DY"�l%,m%:now$=�str(l%) :��setv("$date",now$) :�� :� :���alarm(A$) :��al%,a$,an%,at%,ai%,B$,C$ :�an%=-1:al%=-1:ai%=-1:a$=A$ :��B$=�param(A$) :��B$,1)="/"� :� C$=�value(B$) :� Ȏ�B$,2)� ; �"st":stop$=C$ ; �"er":error$=C$ ;. �"dt","cts":aline%(0)=�tf10(�C$):al%=0 ;$( �"ds":aline%(1)=�tf10(�C$):al%=1 ;.( �"rn":aline%(2)=�tf10(�C$):al%=2 ;8( �"dc":aline%(3)=�tf10(�C$):al%=3 ;B! �"ti":at%=�decodetime(C$) ;L �"ic":ai%=�iconid(C$) ;V4 �"na","id":an%=�alarmno(C$):alarmid$(an%)=C$ ;`# �"ca","de":�cancelalarm(C$) ;j � ;t� ;~ �A$="" ;��at%>0 � ;� �an%<0�an%=�alarmno("~") ;�; alarm$(an%,0)=B$:alarm$(an%,1)=a$:alarmtime%(an%)=at% ;�� ;� �al%>=0 �aline$(al%)=B$ ;� �ai%>=0 �ifile$(ai%)=B$ ;�� ;�� ;� ;�ݤalarmno(A$) ;��a%:a%=0 ;�5�a%+=1:�alarm$(a%,0)=""�alarmid$(a%)=A$�a%=almax% <