10
20 :
30
40
50 :
60
70
80
90
100
110 DEFFNNet_TxCount(Stn%,Ctrl%,Port%,Addr%,Len%,RAddr%,Try%,Delay%):LOCAL TxErr%
120 DEFFNNet_Tx(Stn%,Ctrl%,Port%,Addr%,Len%,RAddr%):LOCAL TxErr%,Try%,Delay%:Try%=10:Delay%=50
130 X%?1=Port%:X%!2=Stn%:X%!4=Addr%:X%!8=Addr%+Len%:X%!12=RAddr%
140 IFStn%=&FFFF:X%!4=Addr%!0:X%!8=Addr%!4 :
150 REPEAT:REPEAT:X%?0=Ctrl%:A%=&10:CALL &FFF1:UNTILX%?0 :
160 REPEAT:TxErr%=FNbyte(&32,0,0):UNTILTxErr%<&80 :
170 IFTxErr%=&41 OR TxErr%=&42:IFTry%:A%=TIME+Delay%:REPEATUNTILTIME>A%:Try%=Try%-1
180 UNTILNOT(TxErr%=&41 OR TxErr%=&42) OR Try%<1:=TxErr%
190 :
200 :
210
220
230
240 DEFFNNet_RxOpen(Stn%,Port%,Addr%,Len%)
250 X%?0=0:X%?1=&7F:X%?2=Port%:X%!3=Stn%:X%!5=Addr%:X%!9=Addr%+Len%
260 A%=&11:CALL &FFF1:=X%?0
270 :
280 :
290
300
310
320 DEFFNNet_Rx(RxNum%):=(FNbyte(&33,RxNum%,0)AND&80)<>0
330 :
340 :
350
360
370
380 DEFFNNet_RxRead(RxNum%)
390 X%?0=RxNum%:A%=&11:CALL &FFF1:A%=X%!9-X%!5:X%!5=0:=A%
400 :
410 :
420
430
440 DEFPROCNet_RxKill(RxNum%):A%=FNbyte(&34,RxNum%,0):ENDPROC
450 :
460 :
470
480
490 DEFFNNet_Err(A%):IFA%=0:=""
500 =MID$("Line jammedNet errorNot listeningNo clockBad Tx blockNo reply",VALMID$("011221344254",(A%-&40)*2+1,2),VALMID$("110913081208",(A%-&40)*2+1,2))
510 :
520 :
530
540
550 DEFPROCNet_Send(A%,D%,A$):?X%=A%:X%!1=D%:$(X%+3)=A$:A%=&14:CALL&FFF1:ENDPRO
560 :
570 :
580
590
600
610 DEFFNNet_Stn(A%):=LEFT$(FNd0(A%DIV256,3)+".",(A%DIV256)<>0)+FNd0(A%AND255,3)
620 DEFFNNet_StnFixed(A%):=FNd0(A%DIV256,3)+"."+FNd0(A%AND255,3)
630 :
640 :
650
660
670 DEFFNNet_StnNum(A$)
680 A%=INSTR(A$,"."):IFA%:=256*VALLEFT$(A$,A%-1)+VALMID$(A$,A%+1) ELSE =VALA$
690 :
700 :
710
720
730 DEFFNNet_Info(A%,D%):?X%=A%:X%!1=D%:A%=&13:CALL&FFF1:=X%!1
740 :
750 :
760 DEFFNbyte(A%,X%,Y%)=((USR&FFF4)AND&FF00)DIV256
770 DEFFNd0(A%,N%)=RIGHT$("00000000"+STR$A%,N%)
780 :
790 :