10
20
30
40 :
50 OSBYTE=&FFF4:OSWORD=&FFF1:OSWRCH=&FFEE
60 OSNEWL=&FFE7:OSASCI=&FFE3:OSARGS=&FFDA
70 DEFFNm(A$)=LEFT$(A$,LENA$-1)+CHR$(ASCRIGHT$(A$,1)OR128)
80 :
90 load%=&FFFF08D5
100 DIM mcode% &280
110 FOR P=0 TO 1
120 P%=load%:O%=mcode%
130 [OPT P*3+4
140 \ Transmit control block
150 .L0AE5
160 EQUB &00 :\ Control byte
170 EQUB &00 :\ Port &00=Immediate
180 .L0AE7
190 EQUB &FE :\ Station
200 .L0AE8
210 EQUB &00 :\ Network
220 EQUW L0900+0:EQUW &FFFF :\ Data start address
230 EQUW L0900+4:EQUW &FFFF :\ Data end address
240 :
250 .exec%
260 .L0900
270 LDX #&A8
280 LDY #&00:LDA #&01:JSR OSARGS :\ Get command line
290 LDX #&00 :\ Prepare to do net 0=this net
300 :
310 .L0926
320 LDA (&A8),Y :\ Get current character
330 CMP #ASC"0":BCC L093F:INY :\ <"0", do this net
340 AND #&0F:STX &AA:ASL &AA :\ X=X*10+digit
350 ADC &AA:ASL &AA:ASL &AA
360 ADC &AA:TAX:JMP L0926 :\ Jump to check next digit
370 :
380 \ Scan the network X
390 .L093F
400 STX L0AE8 :\ Store network number
410 LDX #&00:JSR L0A20 :\ Print banner
420 :
430 \ Ping remote machine
440 .L0947
450 LDA #&22:STA &AC :\ Set column counter to 34
460 .L094B
470 LDA #&88:STA L0AE5 :\ Control='MachinePeek'
480 LDA #&10
490 LDX #L0AE5 AND 255
500 LDY #L0AE5 DIV 256
510 JSR OSWORD :\ Transmit MachinePeek
520 LDA L0AE5:BEQ L094B :\ Loop until Tx sucessful
530 .L095E
540 LDA #&32:JSR OSBYTE :\ Poll Tx
550 TXA:BMI L095E :\ Loop until finished
560 ROL A:BMI L0988 :\ If TxError, skip to next
570 :
580 LDX #&02:JSR L0ADC :\ Print two spaces
590 LDA L0AE7:JSR L098E :\ Print station number
600 LDX #&04:JSR L0ADC :\ Print four spaces
610 JSR L09C0:JSR L09C4 :\ Print machine name, version
620 JSR OSNEWL :\ Print newline
630 :
640 .L0988
650 DEC L0AE7:BNE L0947 :\ Dec station and loop until all done
660 RTS
670 :
680 \ Print decimal number in A
690 .L098E
700 TAY
710 LDA #&64:JSR L099B :\ Print 100s
720 LDA #&0A:JSR L099B :\ Print 10s
730 LDA #&01 :\ Print 1s
740 .L099B
750 STA &AE:LDX #&FF:SEC:TYA
760 .L09A1
770 INX:SBC &AE:BCS L09A1
780 ADC &AE:TAY:TXA
790 .L09AA
800 AND #&0F:SED:CLC
810 ADC #&90:ADC #&40:CLD
820 .L09B3
830 DEC &AC:JMP OSASCI :\ Dec column counter and print character
840 :
850 \ Print 'X' spaces
860 .L0ADC
870 LDA #ASC" "
880 .L0ADE
890 JSR L09B3:DEX:BNE L0ADE
900 .L0AE0
910 RTS
920 :
930 \ Print version number
940 .L09C4
950 LDX &AC:BEQ P%+5:JSR L0ADC :\ Print spaces to align
960 LDA L0900+3:JSR L09BA :\ Print version.hi in hex
970 LDA #&2E:JSR L09B3 :\ Print '.'
980 LDA L0900+2 :\ Print version.lo in hex
990 :
1000 \ Print hex number in A
1010 .L09B8
1020 PHA:JSR L09BC:PLA:JMP L09AA
1030 .L09BA
1040 CMP #&10:BCC L09BE
1050 .L09BC
1060 LSR A:LSR A:LSR A:LSR A
1070 .L09BE
1080 JMP L09AA
1090 :
1100 \ Print machine name
1110 .L09C0
1120 LDA L0900+0 :\ A=machine
1130 CLC:ADC #&40:BMI L09F8 :\ Don't print manufacturers
1140 LDA L0900+1 :\ A=manufacturer
1150 LDX #L0A50-L0A30 :\ X=>start of manufacturers
1160 JSR L09FE :\ Find and print name
1170 LDA &AC:BEQ L0AE0 :\ Exit if unknown
1180 :
1190 .L09F8
1200 LDA L0900+0:LDX #L0A60-L0A30 :\ X=>start of machine names
1210 .L09FE
1220 CMP L0A30,X:BEQ L0A20 :\ Matches, print this entry
1230 PHA
1240 LDA L0A30,X:BEQ L0A10 :\ End of table, print 'Uknown'
1250 .L0A04
1260 INX:LDA L0A30,X:BPL L0A04 :\ Step past this entry
1270 PLA:INX:BNE L09FE
1280 .L0A10
1290 PLA
1300 LDX #L0A40-L0A30:JSR L0A20 :\ Print 'Unknown'
1310 LDA L0900+1:JSR L09B8 :\ Print manufacture code
1320 LDA L0900+0:JSR L09B8 :\ Print machine code
1330 LDA #ASC")":JSR L09B3 :\ Print closing ')'
1340 LDX &AC:BNE L0ADC
1350 :
1360 \ Print message indexed by X
1370 \ --------------------------
1380 .L0A20
1390 INX:LDA L0A30,X:PHP :\ Get character, save bit 7
1400 AND #&7F:JSR L09B3 :\ Drop bit 7, print character
1410 PLP:BPL L0A20 :\ Loop until bit 7 set
1420 .L0A28
1430 RTS
1440 :
1450 .L0A30
1460 EQUB &00:EQUS FNm("Station Type"+CHR$13)
1470 .L0A40
1480 EQUB &80:EQUS FNm("Unknown (")
1490 .L0A50
1500 EQUB &FF:EQUS FNm("SJ Research ")
1510 EQUB &02:EQUS FNm("Reuters ")
1520 EQUB &01:EQUS FNm("Torch ")
1530 EQUB &00:EQUS FNm("Acorn ")
1540 .L0A60
1550 EQUB &01:EQUS FNm("BBC Micro")
1560 EQUB &02:EQUS FNm("Atom")
1570 EQUB &03:EQUS FNm("System 3/4")
1580 EQUB &04:EQUS FNm("System 5")
1590 EQUB &05:EQUS FNm("Master")
1600 EQUB &06:EQUS FNm("Electron")
1610 EQUB &07:EQUS FNm("RISC OS")
1620 EQUB &09:EQUS FNm("Communicator")
1630 EQUB &0A:EQUS FNm("Master ET")
1640 EQUB &0B:EQUS FNm("FileStore")
1650 EQUB &0C:EQUS FNm("Compact")
1660 EQUB &0D:EQUS FNm("Ecolink")
1670 EQUB &0E:EQUS FNm("RISCiX")
1680 EQUB &0F:EQUS FNm("RISC PC")
1690 EQUB &10:EQUS FNm("Iyonix")
1700 EQUB &11:EQUS FNm("A9")
1710 EQUB &40:EQUS FNm("ZX Spectrum")
1720 EQUB &41:EQUS FNm("Amstrad CPC")
1730 \EQUB &F8:\EQUS FNm("GP Server")
1740 \EQUB &F9:\EQUS FNm("80386 Unix")
1750 \EQUB &FA:\EQUS FNm("SCSI")
1760 \EQUB &FB:\EQUS FNm("PC card")
1770 EQUB &FC:EQUS FNm("Nascom 2")
1780 EQUB &FD:EQUS FNm("RM480Z")
1790 EQUB &FE:EQUS FNm("File Server")
1800 EQUB &FF:EQUS FNm("Z80 CP/M")
1810 EQUB &00
1820 .L0B00
1830 :
1840 ]NEXT
1850 PRINT"Machine names table length: ";L0B00-L0A30;
1860 IF L0B00-L0A30>256:PRINT" - too long":END ELSE PRINT
1870 PRINT "*SAVE STATIONS ";~mcode%;" ";~O%;" ";~exec%OR&FFFF0000;" ";~load%