100 REM THE BINARY OPS ONLY WORK ON SIGNED 16-BIT NUMBERS 110 REM SO WE STORE THE IP ADDRESS AS AN ARRAY OF FOUR OCTETS 120 DIM IP(3) 130 REM READ DEMO DATA 140 READ CI$ 150 IF CI$="" THEN END 160 REM FIND / 170 SL=0 180 FOR I=LEN(CI$) TO 1 STEP -1 190 : IF MID$(CI$,I,1)="/" THEN SL=I:I=1 200 NEXT I 210 IF SL=0 THEN PRINT "INVALID CIDR STRING: '"CI$"'":GOTO 140 220 NW=VAL(MID$(CI$,SL+1)) 230 IF NW < 1 OR NW > 32 THEN PRINT "INVALID NETWORK WIDTH:"NW:GOTO 140 240 REM PARSE OCTETS INTO IP ARRAY 250 BY=0:N=0 260 FOR I=1 TO SL-1 270 : C$=MID$(CI$,I,1):IF C$<>"." THEN 300 280 : IP(N)=BY:N=N+1:BY=0:IF IP(N-1)<256 THEN 310 290 : PRINT "INVALID OCTET VALUE:"IP(N-1):GOTO 140 300 : C=VAL(C$):IF C OR (C$="0") THEN BY=BY*10+C 310 NEXT I 320 IP(N)=BY:N=N+1:IF IP(N-1)>255 THEN 290 330 REM NUMBER OF COMPLETE OCTETS IN NETWORK PART 340 NB=INT(NW/8) 350 REM NUMBER OF NETWORK BITS IN PARTIAL OCTET 360 XB=NW AND 7 370 REM ZERO OUT HOST BITS IN PARTIAL OCTET 380 IP(NB) = IP(NB) AND (255 - 2^(8-XB) + 1) 390 REM AND SET ANY ALL-HOST OCTETS TO 0 400 IF NB<3 THEN FOR I=NB+1 TO 3:IP(I)=0 :NEXT I 410 REM PRINT OUT THE RESULT 420 PRINT MID$(STR$(IP(0)),2); 430 FOR I=1 TO 3: PRINT "."MID$(STR$(IP( I)),2);:NEXT I 440 PRINT MID$(CI$,SL) 450 REM AND GO BACK FOR NEXT INPUT 460 GOTO 140 500 DATA 87.70.141.1/22, 36.18.154.103/12, 62.62.197.11/29 510 DATA 67.137.119.181/4, 161.214.74.21/24, 184.232.176.184/18 520 REM SOME INVALID INPUTS 530 DATA 127.0.0.1, 123.45.67.89/0, 98.76.54.32/100, 123.456.789.0/12 540 DATA