42 lines
1.5 KiB
Text
42 lines
1.5 KiB
Text
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
|