100REM Bridge Is Net 200REM (C) Ian Wolstenholme 2023 300REM Version 1.1 18/v/2024 340REM Add FNisnet(netno) and PROClistnets 350REM Read Rx block after receipt otherwise incorrect data remains in blk 400REM Done on Station 201 500DIM rxblock 64,osblock 16,broadcast 16 600replyport=&8A 700FORB%=0TO12STEP4:rxblock!B%=0:osblock!B%=0:broadcast!B%=0:NEXT 750Z%=TRUE:REM Ensure Rx block opened on first pass through loop 1000FOR D%=1 TO255 1050PRINT"Network ";D%;" "; 1060REM Open block if not already open (first pass) OR block has been 1065REM read following rx success 1070IFZ% R%=FNsetuprx(replyport):REM Set up receive block on reply port 1080IFR%=0 PRINT"No more receive blocks":END 1100tries=0 1200REPEAT 1300PROCisnet(D%) 1400Z%=FNpollrx(R%) 1500tries=tries+1 1600UNTILZ% OR tries>2 1700IFZ% PRINT"Available":PROCreadrx(R%) ELSEPRINT"Unknown" 1800NEXT 1900PROCdelete(R%) 2000END 2100DEFFNsetuprx(rport) 2200REM Set up Econet Receive Block 2300REM OSWORD &11 2400stn=0:REM Listen for any station 2500net=0:REM Any net 2600A%=&11:REM OSWORD &11, set up Rx 2700X%=osblock MOD256 2800Y%=osblock DIV256 2900?osblock=0:REM Rx blk no goes here 3000osblock?1=&7F:REM Set up block 3100osblock?2=rport:REM Port no 3200osblock?3=stn:REM Station no 3300osblock?4=net:REM Net no 3400osblock!5=rxblock:REM Buffer 3500osblock!9=rxblock+64:REM Buff end 3600CALL&FFF1 3700=?osblock 3800DEFPROCisnet(I%) 3900REM Set up Bridge Is Net 4000REM Uses OSWORD &10 (Variant of Transmit) 4100port=&9C:REM Bridge comms port 4200A%=&10:REM OSWORD &10, Transmit 4300X%=osblock MOD256 4400Y%=osblock DIV256 4500?osblock=&83:REM Control byte = What net function 4600osblock?1=port 4700osblock?2=&FF:osblock?3=&FF:REM Broadcast 4800$(osblock+4)="BRIDGE":REM Communicate with Bridge 4900osblock?10=replyport:REM Reply Port 5000osblock?11=I%:REM Test if Net I% is known about 5100CALL&FFF1 5200ENDPROC 5300DEFFNpollrx(rblock) 5400A%=&33 5500X%=rblock 5600T%=0 5700REPEAT 5800success=(USR&FFF4 AND &FF00)DIV256 5900T%=T%+1 6000UNTILsuccess>127 OR T%>5:REM 5 RETRIES 6100IFsuccess>127 =-1 ELSE =0 6200DEFPROCdelete(rblock) 6300A%=&34 6400X%=rblock 6500CALL&FFF4 6600ENDPROC 8000DEFPROCreadrx(rblk) 8010REM Read Rx with OSW &11 8020A%=&11 8030X%=osblock MOD256 8040Y%=osblock DIV256 8050?osblock=rblk:REM Rx blk number 8060REM Rest of block undefined 8070CALL&FFF1 8080REM osblock now updated with results (but not needed in this situation) 8090ENDPROC 10000DEFFNisnet(C%) 10100R%=FNsetuprx(&8A):REM open Receive block on port &8A 10200IFR%=0 PRINT"No more receive blocks":END 10300PROCisnet(C%) 10400Z%=FNpollrx(R%) 10500PROCdelete(R%) 10600=Z% 20000DEFPROClistnets 20020VDU8:P%=POS:PRINT 20100PRINT"Known networks: "; 20200E%=0:REM Total 20300FORB%=1TO127 20400N%=FNisnet(B%) 20500IFN% THEN IFE%>0 PRINT;", ";:IFPOS+3>P% PRINT 20600IFN% PRINT;B%;:E%=E%+1 20700NEXT 20800IFE%=0 PRINT"None" ELSE PRINT"."'"Total: ";E% 20900ENDPROC