10 REM > CeefaxTime
   20 :
   30 DIM ctrl% 31:X%=ctrl%:Y%=X%DIV256
   40 DIM inBuf% &4F,outBuf% &1F:rxNum%=0
   50 :
   60 ON ERROR REPORT:PROCNet_RxKill(rxNum%):PRINT:END
   70 :
   80 rxNum%=FNNet_RxOpen(0,&B1,inBuf%,&50)
   90 $outBuf%="TELETEXT"
  100 REPEAT
  110     tx%=FNNet_TxCount(&FFFF,&80,&B0,outBuf%,8,0,0,0)
  120     IF tx% THEN PRINT FNNet_Err(tx%):END
  130     rx%=FNNet_Rx(rxNum%)
  140     IF NOT rx%:PROCDelay(200)
  150 UNTIL rx%
  160 rxsize%=FNNet_RxRead(rxNum%)
  170 stn%=X%!3
  180 portBase%=inBuf%?1
  190 inBuf%?(12+inBuf%?11)=13
  200 name$=$(inBuf%+12)
  210 PRINT "Teletext server = ";FNNet_Stn(Stn%);" ";name$
  220 :
  230 rxNum%=FNNet_RxOpen(stn%,portBase%,inBuf%,&50)
  240 tx%=FNNet_TxCount(stn%,&84,portBase%+1,outBuf%,1,10,50)
  250 IF tx% THEN PRINT FNNet_Err(tx%):END
  260 REPEAT PROCDelay(200):UNTIL FNNet_Rx(rx%)
  270 rxsize%=FNNet_RxRead(rx%)
  280 PRINT "The time is "$(inBuf%+1)
  290 END
  300 :
  310 :
  320 :
  330 DEFFNNet_TxCount(Stn%,Ctrl%,Port%,Addr%,Len%,RAddr%,Try%,Delay%):LOCAL TxErr%
  340 DEFFNNet_Tx(Stn%,Ctrl%,Port%,Addr%,Len%,RAddr%):LOCAL TxErr%,Try%,Delay%:Try%=10:Delay%=50
  350 X%?1=Port%:X%!2=Stn%:X%!4=Addr%:X%!8=Addr%+Len%:X%!12=RAddr%
  360 IFStn%=&FFFF:X%!4=Addr%!0:X%!8=Addr%!4
  370 REPEAT:REPEAT:X%?0=Ctrl%:A%=&10:CALL &FFF1:UNTILX%?0
  380   REPEAT:TxErr%=FNbyte(&32,0,0):UNTILTxErr%<&80
  390   IFTxErr%=&41 OR TxErr%=&42:IFTry%:A%=TIME+Delay%:REPEATUNTILTIME>A%:Try%=Try%-1
  400 UNTILNOT(TxErr%=&41 OR TxErr%=&42) OR Try%<1:=TxErr%
  410 :
  420 DEFFNNet_RxOpen(Stn%,Port%,Addr%,Len%)
  430 X%?0=0:X%?1=&7F:X%?2=Port%:X%!3=Stn%:X%!5=Addr%:X%!9=Addr%+Len%
  440 A%=&11:CALL &FFF1:=X%?0
  450 :
  460 DEFFNNet_Rx(RxNum%):=(FNbyte(&33,RxNum%,0)AND&80)<>0
  470 :
  480 DEFFNNet_RxRead(RxNum%)
  490 X%?0=RxNum%:A%=&11:CALL &FFF1:A%=X%!9-X%!5:X%!5=0:=A%
  500 :
  510 DEFPROCNet_RxKill(RxNum%):A%=FNbyte(&34,RxNum%,0):ENDPROC
  520 :
  530 DEFFNNet_Err(A%):IFA%=0:=""
  540 =MID$("Line jammedNet errorNot listeningNo clockBad Tx blockNo reply",VALMID$("011221344254",(A%-&40)*2+1,2),VALMID$("110913081208",(A%-&40)*2+1,2))
  550 :
  560 DEFFNNet_Stn(A%):=LEFT$(FNd0(A%DIV256,3)+".",(A%DIV256)<>0)+FNd0(A%AND255,3)
  570 DEFFNNet_StnFixed(A%):=FNd0(A%DIV256,3)+"."+FNd0(A%AND255,3)
  580 :
  590 DEFFNbyte(A%,X%,Y%)=((USR&FFF4)AND&FF00)DIV256
  600 DEFFNd0(A%,N%)=RIGHT$("00000000"+STR$A%,N%)
  610 DEFFNh0(A%,N%)=RIGHT$("0000000"+STR$~A%,N%)
  620 DEFPROCDelay(A%):A%=TIME+A%:REPEATUNTILTIME>A%:ENDPROC