Added silent mode and a manual page
This commit is contained in:
parent
6f21b1b08f
commit
88949110ab
26
Makefile
26
Makefile
@ -1,5 +1,23 @@
|
|||||||
subnetcalc: subnetcalc.c
|
CC=gcc
|
||||||
gcc -std=c99 -Wall -pedantic subnetcalc.c -lm -o subnetcalc
|
CFLAGS=-Wall -pedantic -std=c99
|
||||||
|
LIBS=-lm
|
||||||
|
OBJS=subnetcalc.o
|
||||||
|
BINDIR=/usr/local/bin
|
||||||
|
MANDIR=/usr/share/man/man1
|
||||||
|
|
||||||
clean: subnetcalc
|
subnetcalc: $(OBJS)
|
||||||
rm subnetcalc
|
$(CC) -o subnetcalc $(OBJS) $(LIBS)
|
||||||
|
|
||||||
|
subnetcalc: subnetcalc.c
|
||||||
|
|
||||||
|
install: subnetcalc subnetcalc.1
|
||||||
|
gzip -c subnetcalc.1 > subnetcalc.1.gz
|
||||||
|
install -g root -o root -m 0644 subnetcalc.1.gz $(MANDIR)/
|
||||||
|
install -g root -o root -m 0755 subnetcalc $(BINDIR)/
|
||||||
|
|
||||||
|
uninstall:
|
||||||
|
rm $(MANDIR)/subnetcalc.1.gz
|
||||||
|
rm $(BINDIR)/subnetcalc
|
||||||
|
|
||||||
|
clean:
|
||||||
|
rm subnetcalc $(OBJS) subnetcalc.1.gz
|
||||||
|
18
README.md
18
README.md
@ -1,4 +1,4 @@
|
|||||||
# subnetcalc #
|
# subnetcalc
|
||||||
A very simple subnet calculator written in C. It's nothing fancy at all,
|
A very simple subnet calculator written in C. It's nothing fancy at all,
|
||||||
just a small project of mine to get me going with C.
|
just a small project of mine to get me going with C.
|
||||||
|
|
||||||
@ -16,3 +16,19 @@ You can also give the netmask to the program as an argument. For example:
|
|||||||
256 total addresses
|
256 total addresses
|
||||||
254 usable addresses for hosts
|
254 usable addresses for hosts
|
||||||
|
|
||||||
|
Since version 1.0 it's also possible to run the program in silent mode
|
||||||
|
accepting input in stdin. This is excellent for batch processing. But note that
|
||||||
|
in this mode the program only calculates the total number of addresses.
|
||||||
|
|
||||||
|
## Installation
|
||||||
|
|
||||||
|
make
|
||||||
|
sudo make install
|
||||||
|
|
||||||
|
## Uninstalling
|
||||||
|
|
||||||
|
sudo make uninstall
|
||||||
|
|
||||||
|
## Getting help
|
||||||
|
|
||||||
|
man subnetcalc
|
||||||
|
22
subnetcalc.1
Normal file
22
subnetcalc.1
Normal file
@ -0,0 +1,22 @@
|
|||||||
|
.TH SUBNETCALC 1 "OCTOBER 2020" "Version 1.0" "User Manuals"
|
||||||
|
.SH NAME
|
||||||
|
subnetcalc \- calculate the number of address in a subnet
|
||||||
|
.SH SYNOPSIS
|
||||||
|
.B subnetcalc \fR[netmask] [-s]
|
||||||
|
.SH DESCRIPTION
|
||||||
|
.B subnetcalc
|
||||||
|
is a simple subnet calculator. The user provides a subnet to the program,
|
||||||
|
either as a argument or interactivly. The program then calculates the total
|
||||||
|
number of addresses and usable addresses in that subnet. It is also possible to
|
||||||
|
do batch processing with \fB\-s\fR option.
|
||||||
|
.SH OPTIONS
|
||||||
|
.TP
|
||||||
|
.B \-s
|
||||||
|
Makes the program silent and accept input on stdin. In this mode, the program
|
||||||
|
will only calculate the total number of addresses in the given netmask.
|
||||||
|
.SH RETURN VALUES
|
||||||
|
Upon error, 1 is returned. Otherwise, 0 is returned.
|
||||||
|
.SH AUTHOR
|
||||||
|
Jack-Benny Persson <jack-benny@cyberinfo.se>
|
||||||
|
.SH "SEE ALSO"
|
||||||
|
.BR bc (1)
|
36
subnetcalc.c
36
subnetcalc.c
@ -1,6 +1,7 @@
|
|||||||
/* A very simple subnet calculator in C, written by
|
/* A very simple subnet calculator in C, written by
|
||||||
* Jack-Benny Persson (jack-benny@cyberinfo.se).
|
* Jack-Benny Persson (jack-benny@cyberinfo.se).
|
||||||
* Released under GNU GPLv2.
|
* Released under GNU GPLv2.
|
||||||
|
* Version 1.0 (2020-10-09)
|
||||||
*/
|
*/
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <math.h>
|
#include <math.h>
|
||||||
@ -15,7 +16,7 @@ void printHelp(char progname[]);
|
|||||||
|
|
||||||
int main(int argc, char *argv[])
|
int main(int argc, char *argv[])
|
||||||
{
|
{
|
||||||
char input[3] = { 0 };
|
char input[4] = { 0 };
|
||||||
int net;
|
int net;
|
||||||
|
|
||||||
if (argc == 1) /* User didn't supply an argument, go interactive */
|
if (argc == 1) /* User didn't supply an argument, go interactive */
|
||||||
@ -37,7 +38,23 @@ int main(int argc, char *argv[])
|
|||||||
}
|
}
|
||||||
else if (argc == 2) /* User supplied exactly one argument */
|
else if (argc == 2) /* User supplied exactly one argument */
|
||||||
{
|
{
|
||||||
if (checkInput(argv[1]))
|
if ( strcmp("-s", argv[1]) == 0) /* User wants a silent batch */
|
||||||
|
{
|
||||||
|
while(fgets(input, sizeof(input), stdin) != NULL)
|
||||||
|
{
|
||||||
|
/* Check if netmask is numeric (and do conversion) */
|
||||||
|
if( checkInput(input) )
|
||||||
|
{
|
||||||
|
printf("%ld\n", calcAddr(atoi(input)));
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
printHelp(argv[0]);
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if (checkInput(argv[1]))
|
||||||
{
|
{
|
||||||
net = atoi(argv[1]);
|
net = atoi(argv[1]);
|
||||||
printAddr(net);
|
printAddr(net);
|
||||||
@ -105,11 +122,16 @@ void printAddr(int netmask)
|
|||||||
|
|
||||||
void printHelp(char progname[])
|
void printHelp(char progname[])
|
||||||
{
|
{
|
||||||
printf("Usage: %s [netmask]\n", progname);
|
printf("Usage: %s [netmask] [-s]\n", progname);
|
||||||
printf("If the program is started without any arguments, "
|
printf("If the program is started without any arguments, "
|
||||||
"it's started in interactive mode.\n");
|
"it is started in interactive mode.\n"
|
||||||
printf("Optionally, a netmask can be supplied as a "
|
"Optionally, a netmask can be supplied as a "
|
||||||
"argument.\n");
|
"argument.\n"
|
||||||
printf("Examle: %s 24\n", progname);
|
"If the program is started with the -s option, "
|
||||||
|
"the program will silently accept input on stdin,\n"
|
||||||
|
"outputting the number of total address on stdout\n");
|
||||||
|
printf("\nExample: %s \n"
|
||||||
|
"Example: %s 24\n"
|
||||||
|
"Example: %s -s\n", progname, progname, progname);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user