10 REM > Machines 1.03
   20 REM Prints stations connected and users logged on
   30 REM FNnet_Ping() doesn't work on ARMCoPro - works on 6502 CoPro
   40 :
   50 PRINT"Station Machine"SPC(15)"Software User"
   60 A%=0:X%=1:os%=(USR&FFF4 AND &FF00)DIV256
   70 DIM data% 15,ctrl% 31:X%=ctrl%:Y%=X%DIV256
   80 mystn%=FNnet_Info(8,0):fs%=FNnet_Ping(FNnet_Info(0,0))<>0
   90 FOR stn%=1 TO 254:ping%=FNnet_Ping(stn%):ok%=ping%<>0 OR stn%=mystn%
  100   IF ping%=&03350001:ping%=FNpingFix(stn%)
  110   IF ok%:IF ping%  :PRINTSPC2;FNd(stn%,3);TAB(8);FNnet_Type(ping%);TAB(33);FNver(ping%);
  120   IF ok%:IF ping%=0:PRINTSPC2;FNd(stn%,3);"*";TAB(8);FNmachine(os%);TAB(33);FNnfsver;
  130   IF ok%:IF fs%:PRINTTAB(39);FNnetfs_Who(stn%);
  140   IF ok%:PRINT
  150 NEXT:END
  160 :
  170 DEFFNh0(A%,N%)=RIGHT$("0000000"+STR$~A%,N%)
  180 DEFFNd(A%,N%)=RIGHT$("        "+STR$A%,N%)
  190 :
  200 DEFFNmachine(A%)
  210 IF A%=0:="Electron"
  220 IF A%=1:="BBC Micro"
  230 IF A%=2:="BBC B+"
  240 IF A%=3:="Master 128"
  250 IF A%=4:="Master ET"
  260 IF A%=5:="Master Compact"
  270 IF A%=6:="RISC OS"
  280 ="[Type "+STR$A%+"]"
  290 :
  300 DEFFNnfsver
  310 IF os%>6:="    "
  320 IF os%=6:SYS "OS_Module",18,"Econet" TO ,,,A%:SYS "OS_WriteN",A%+A%!20 TO A$:=MID$(A$,9,4)
  330 LOCAL X%,Y%,F%,A$:Y%=0:X%=&70
  340 A%=0:F%=(USR&FFDA)AND&FF:*FX143,18,5
  350 A%=4:IF((USR&FFDA)AND&FF)=4:A$="3.40-3.6x" :REM 3.34, 3.35, 3.40, 3.60, 3.62, 3.65
  360 A%=3:IF((USR&FFDA)AND&FF)=0:A$="4.00-4.1x" :REM 4.08, 4.18, 4.21, 4.25
  370 A%=2:IF((USR&FFDA)AND&FF)=2:A$="3.3x"      :REM 3.34, 3.35
  380 A%=1:IF((USR&FFDA)AND&FF)>0:A$="4.2x"      :REM 4.21, 4.25
  390 OSCLI"FX143,18,"+STR$F%:=A$
  400 :
  410 DEFFNver(A%):=LEFT$(FNh0(A%,8+((A%AND&F0000000)=0)),1)+"."+MID$(FNh0(A%,8),3,2)
  420 :
  430 DEFFNpingFix(S%):!X%=&81:X%!2=S%:X%!4=X%+16:X%!8=X%+20:X%!12=&FFFF820C:X%!16=0
  440 A%=&10:REPEATCALL&FFF1:UNTIL?X%:A%=&32:REPEATUNTIL(USR&FFF4 AND &8000)=0
  450 IFX%!16=&30342E33:=&03400001 ELSE =&03350001
  460 :
  470 DEFFNnet_Ping(S%):!X%=&88:X%!2=S%:X%!4=X%+16:X%!8=X%+20:X%!12=0:X%!16=0
  480 A%=&10:REPEATCALL&FFF1:UNTIL?X%:A%=&32:REPEATUNTIL(USR&FFF4 AND &8000)=0:=X%!16
  490 :
  500 DEFFNnet_Type(A%):LOCAL A$:A%=A%AND&FFFF
  510 IF A%DIV256=&00:A$="Acorn "
  520 IF A%DIV256=&01:A$="Torch "
  530 IF A%DIV256=&02:A$="Reuters "
  540 IF A%DIV256=&50:A$="PhilBlundell "
  550 IF A%DIV256=&FF:A$="SJ Research "
  560 :
  570 A%=A%AND255
  580 IF A%=1:=A$+"BBC Micro"
  590 IF A%=2:=A$+"Atom"
  600 IF A%=3:=A$+"System 3/4"
  610 IF A%=4:=A$+"System 5"
  620 IF A%=5:=A$+"Master 128"
  630 IF A%=6:=A$+"Electron"
  640 IF A%=7:=A$+"RISC OS"
  650 REMA%=8:=A$+"Reserved"
  660 IF A%=9:="A$+Communicator"
  670 IF A%=10:=A$+"Master ET"
  680 IF A%=11:=A$+"Filestore"
  690 IF A%=12:=A$+"Master Compact"
  700 IF A%=13:=A$+"PC EcoLink"
  710 IF A%=14:=A$+"RISCiX Workstation"
  720 IF A%=15:=A$+"RISC PC"
  730 IF A%=16:=A$+"Iyonix"
  740 IF A%=17:=A$+"Acorn A9"
  750 :
  760 IF A%=&40:=A$+"ZX Spectrum"
  770 IF A%=&41:=A$+"Amstrad CPC"
  780 IF A%=&50:=A$+"Econet/Ethernet Gateway"
  790 IF A%=&F8:=A$+"GP Server"
  800 IF A%=&F9:=A$+"80386 Unix"
  810 IF A%=&FA:=A$+"SCSI Interface"
  820 IF A%=&FB:=A$+"PC Card"
  830 IF A%=&FC:=A$+"Nascom 2"
  840 IF A%=&FD:=A$+"RM480Z"
  850 IF A%=&FE:=A$+"FileServer"
  860 IF A%=&FF:=A$+"380Z or CP/M"
  870 =A$+"["+FNh0(A%,4)+"]"
  880 :
  890 DEFFNnet_Info(A%,D%):?X%=A%:X%!1=D%:A%=&13:CALL&FFF1:=X%!1
  900 :
  910 DEFFNnetfs_Who(stn%):LOCALu%:REPEAT:A%=FNnetfs_Op(15,CHR$u%+CHR$1)
  920 u%=u%+1:UNTILA%<>0ORX%?4=0ORX%?5=stn%:IFA%=0:IFX%?4:=$(X%+7) ELSE =""
  930 :
  940 DEFFNnetfs_Op(A%,A$)=FNnetfs_OpN(A%,0,7,A$)
  950 DEFFNnetfs_OpN(A%,T%,O%,A$):!X%=0:X%?1=O%+1+LENA$:X%!3=A%
  960 IFHIMEM>&FFFF:X%?4=T%:$(X%+O%-3)=A$:SYS&60048,A%,X%+4,O%+LENA$,120TOA%:IFA%=0:X%?3=0:=0
  970 IFHIMEM>&FFFF:IFA%>&FFFF:X%?3=?A%:SYS&2002B,A%+4TO$(X%+4):=X%?3
  980 X%!4=0:X%?7=T%:$(X%+O%)=A$:A%=&14:CALL&FFF1:=X%?3