45 lines
1.5 KiB
Plaintext
45 lines
1.5 KiB
Plaintext
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
|