CLS DIM IP(3) DO REM Read DEMO Data 140 READ CI$ IF CI$ = "" THEN EXIT DO 'Sleep: End REM FIND / SL = 0 FOR I = LEN(CI$) TO 1 STEP -1 IF MID$(CI$, I, 1) = "/" THEN SL = I: I = 1 NEXT I IF SL = 0 THEN PRINT "INVALID CIDR STRING: '"; CI$; "'": GOTO 140 NW = VAL(MID$(CI$, SL + 1)) IF NW < 1 OR NW > 32 THEN PRINT "INVALID NETWORK WIDTH:"; NW: GOTO 140 REM PARSE OCTETS INTO IP ARRAY BY = 0: N = 0 FOR I = 1 TO SL - 1 C$ = MID$(CI$, I, 1): IF C$ <> "." THEN 300 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 IP(N) = BY: N = N + 1: IF IP(N - 1) > 255 THEN 290 REM NUMBER OF COMPLETE OCTETS IN NETWORK PART NB = INT(NW / 8) REM NUMBER OF NETWORK BITS IN PARTIAL OCTET XB = NW AND 7 REM ZERO Out HOST BITS IN PARTIAL OCTET IP(NB) = IP(NB) AND (255 - 2 ^ (8 - XB) + 1) REM And SET Any ALL-HOST OCTETS To 0 IF NB < 3 THEN FOR I = NB + 1 TO 3: IP(I) = 0: NEXT I REM Print Out THE RESULT PRINT MID$(STR$(IP(0)), 2); FOR I = 1 TO 3 PRINT "."; MID$(STR$(IP(I)), 2); NEXT I PRINT MID$(CI$, SL) LOOP DATA 87.70.141.1/22, 36.18.154.103/12, 62.62.197.11/29 DATA 67.137.119.181/4, 161.214.74.21/24, 184.232.176.184/18 REM SOME INVALID INPUTS DATA 127.0.0.1, 123.45.67.89/0, 98.76.54.32/100, 123.456.789.0/12 DATA