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(5)"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(23);FNver(ping%);
  120   IF ok%:IF ping%=0:PRINTSPC2;FNd(stn%,3);"*";TAB(8);FNmachine(os%);TAB(23);FNnfsver;
  130   IF ok%:IF fs%:PRINTTAB(29);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%:A%=A%+A%!20:SYS "OS_WriteN",A% TO A$:=MID$(A$,9,4)
  330 LOCAL X%,Y%,F%,A$:Y%=0:X%=&70:A$="4.2+":REM 4.21, 4.25
  340 A%=0:F%=(USR&FFDA)AND&FF:*FX143,18,5
  350 A%=3:IF ((USR&FFDA)AND&FF)=0:A$="4.xx" :REM 4.08, 4.18
  360 A%=4:IF ((USR&FFDA)AND&FF)=4:A$="3.4+" :REM 3.40, 3.60, 3.62
  370 A%=2:IF ((USR&FFDA)AND&FF)=2:A$="3.3x" :REM 3.34, 3.35
  380 OSCLI"FX143,18,"+STR$F%:=A$
  390 :
  400 DEFFNver(A%):=LEFT$(FNh0(A%,8+((A%AND&F0000000)=0)),1)+"."+MID$(FNh0(A%,8),3,2)
  410 :
  420 DEFFNpingFix(S%):!X%=&81:X%!2=S%:X%!4=X%+16:X%!8=X%+20:X%!12=&820C:X%!16=0
  430 A%=&10:REPEATCALL&FFF1:UNTIL?X%:A%=&32:REPEATUNTIL(USR&FFF4 AND &8000)=0
  440 IFX%!16=&30342E33:=&03400001 ELSE =&03350001
  450 :
  460 DEFFNnet_Ping(S%):!X%=&88:X%!2=S%:X%!4=X%+16:X%!8=X%+20:X%!12=0:X%!16=0
  470 A%=&10:REPEATCALL&FFF1:UNTIL?X%:A%=&32:REPEATUNTIL(USR&FFF4 AND &8000)=0:=X%!16
  480 :
  490 DEFFNnet_Type(A%):A%=A%AND&FFFF
  500 IF A%=1:="BBC Micro"
  510 IF A%=2:="Acorn Atom"
  520 IF A%=3:="System 3/4"
  530 IF A%=4:="System 5"
  540 IF A%=5:="Master 128"
  550 IF A%=6:="Electron"
  560 IF A%=7:="RISC OS"
  570 REMA%=8:="Reserved"
  580 IF A%=9:="Communicator"
  590 IF A%=10:="Master ET"
  600 IF A%=11:="Filestore"
  610 IF A%=12:="Master Compact"
  620 IF A%=13:="EcoLink PC"
  630 IF A%=14:="RISCiX Workstation"
  640 IF A%=15:="RISC PC"
  650 IF A%=16:="Iyonix"
  660 IF A%=17:="Acorn A9"
  670 :
  680 IF (A%AND255)=64:="ZX Spectrum"
  690 IF (A%AND255)=65:="Amstrad CPC"
  700 IF A%DIV256=1:="Torch "+FNh0(A%,2)
  710 IF A%DIV256=2:="Reuters "+FNh0(A%,2)
  720 IF A%DIV256=80:="PB "+FNh0(A%,2)
  730 IF A%=&FFF8:="GP Server"
  740 IF A%=&FFF9:="80386 Unix"
  750 IF A%=&FFFA:="SCSI Interface"
  760 IF A%=&FFFB:="SJ PC Card"
  770 IF A%=&FFFC:="Nascom 2"
  780 IF A%=&FFFD:="RM480Z"
  790 IF A%=&FFFE:="SJ File Server"
  800 IF A%=&FFFF:="380Z or CP/M"
  810 ="Type "+FNh0(A%,4)
  820 :
  830 DEFFNnet_Info(A%,D%):?X%=A%:X%!1=D%:A%=&13:CALL&FFF1:=X%!1
  840 :
  850 DEFFNnetfs_Who(stn%):LOCALu%:REPEAT:A%=FNnetfs_Op(15,CHR$u%+CHR$1)
  860 u%=u%+1:UNTILA%<>0ORX%?4=0ORX%?5=stn%:IFA%=0:IFX%?4:=$(X%+7) ELSE =""
  870 :
  880 DEFFNnetfs_Op(A%,A$)=FNnetfs_OpN(A%,0,7,A$)
  890 DEFFNnetfs_OpN(A%,T%,O%,A$):!X%=0:X%?1=O%+1+LENA$:X%!3=A%
  900 IFHIMEM>&FFFF:X%?4=T%:$(X%+O%-3)=A$:SYS&60048,A%,X%+4,O%+LENA$,120TOA%:IFA%=0:X%?3=0:=0
  910 IFHIMEM>&FFFF:IFA%>&FFFF:X%?3=?A%:SYS&2002B,A%+4TO$(X%+4):=X%?3
  920 X%!4=0:X%?7=T%:$(X%+O%)=A$:A%=&14:CALL&FFF1:=X%?3