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%: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%):A%=A%AND&FFFF
  510 IF A%=1:="BBC Micro"
  520 IF A%=2:="Acorn Atom"
  530 IF A%=3:="System 3/4"
  540 IF A%=4:="System 5"
  550 IF A%=5:="Master 128"
  560 IF A%=6:="Electron"
  570 IF A%=7:="RISC OS"
  580 REMA%=8:="Reserved"
  590 IF A%=9:="Communicator"
  600 IF A%=10:="Master ET"
  610 IF A%=11:="Filestore"
  620 IF A%=12:="Master Compact"
  630 IF A%=13:="EcoLink PC"
  640 IF A%=14:="RISCiX Workstation"
  650 IF A%=15:="RISC PC"
  660 IF A%=16:="Iyonix"
  670 IF A%=17:="Acorn A9"
  680 :
  690 IF (A%AND255)=64:="ZX Spectrum"
  700 IF (A%AND255)=65:="Amstrad CPC"
  710 IF A%DIV256=1:="Torch "+FNh0(A%,2)
  720 IF A%DIV256=2:="Reuters "+FNh0(A%,2)
  730 IF A%DIV256=80:="PB "+FNh0(A%,2)
  740 IF A%=&FFF8:="GP Server"
  750 IF A%=&FFF9:="80386 Unix"
  760 IF A%=&FFFA:="SCSI Interface"
  770 IF A%=&FFFB:="SJ PC Card"
  780 IF A%=&FFFC:="Nascom 2"
  790 IF A%=&FFFD:="RM480Z"
  800 IF A%=&FFFE:="SJ File Server"
  810 IF A%=&FFFF:="380Z or CP/M"
  820 ="Type "+FNh0(A%,4)
  830 :
  840 DEFFNnet_Info(A%,D%):?X%=A%:X%!1=D%:A%=&13:CALL&FFF1:=X%!1
  850 :
  860 DEFFNnetfs_Who(stn%):LOCALu%:REPEAT:A%=FNnetfs_Op(15,CHR$u%+CHR$1)
  870 u%=u%+1:UNTILA%<>0ORX%?4=0ORX%?5=stn%:IFA%=0:IFX%?4:=$(X%+7) ELSE =""
  880 :
  890 DEFFNnetfs_Op(A%,A$)=FNnetfs_OpN(A%,0,7,A$)
  900 DEFFNnetfs_OpN(A%,T%,O%,A$):!X%=0:X%?1=O%+1+LENA$:X%!3=A%
  910 IFHIMEM>&FFFF:X%?4=T%:$(X%+O%-3)=A$:SYS&60048,A%,X%+4,O%+LENA$,120TOA%:IFA%=0:X%?3=0:=0
  920 IFHIMEM>&FFFF:IFA%>&FFFF:X%?3=?A%:SYS&2002B,A%+4TO$(X%+4):=X%?3
  930 X%!4=0:X%?7=T%:$(X%+O%)=A$:A%=&14:CALL&FFF1:=X%?3