📄 args.c
字号:
#include <stdio.h> /* printf */#include <limits.h> /* CHAR_MAX */#include <getopt.h> /* getopt_long */#include <stdlib.h> /* atoi */#include <string.h> /* strrchr */#include <ctype.h> /* toupper */#include "types.h"#include "args.h"static void usage (INT32 status, const char *program_name, int eargc);static void version (FILE * stream, const P_PACKAGE_INFO pPkgInfo);void parse_arguments (int argc, char **argv, int eargc, P_PACKAGE_INFO pPkgInfo, P_PORT_INFO pPortInfo){ enum LONG_OPTIONS { ARG_HELP = CHAR_MAX + 1, ARG_VERSION }; INT32 c; INT32 option_index = 0; static struct option long_options[] = { {"baudrate", required_argument, 0, 'b'}, {"cs", required_argument, 0, 'c'}, {"debug", no_argument, 0, 'd'}, {"echo", no_argument, 0, 'e'}, {"flowcontrol", required_argument, 0, 'f'}, {"tty", required_argument, 0, 't'}, {"stopbit", required_argument, 0, 's'}, {"parity", required_argument, 0, 'p'}, {"help", no_argument, 0, ARG_HELP}, {"version", no_argument, 0, ARG_VERSION}, {0, 0, 0, 0} }; static const char *short_options = "b:c:def:p:s:t:"; while (-1 != (c = getopt_long (argc, argv, short_options, long_options, &option_index))) { switch (c) { case 0: break; case 'b': pPortInfo->baudrate = atoi (optarg); break; case 'c': pPortInfo->databit = atoi (optarg); break; case 'd': pPortInfo->debug = 1; break; case 'e': pPortInfo->echo = 1; break; case 'f': pPortInfo->fctrl = atoi (optarg); break; case 'p': pPortInfo->parity = toupper (optarg[0]); break; case 's': pPortInfo->stopbit = optarg; break; case 't': pPortInfo->port = atoi (optarg); break; case ARG_HELP: usage (0, pPkgInfo->program_name, eargc); break; case ARG_VERSION: version (stdout, pPkgInfo); break; default: break; } } if (argc < optind + eargc) { usage (1, pPkgInfo->program_name, eargc); }}/* The name this program was run with. */static void usage (INT32 status, const char *program_name, int eargc){ if (status != 0) { fprintf (stderr, "Try `%s --help' for more information.\n", program_name); exit (status); } printf ("Usage: %s [OPTION] %s\n", program_name, eargc ? "SOURCE" : ""); printf ("\n\ -b, --baudrate=BAUDRATE set baudrate to BAUDRATE, default:115200\n\ -c, --CS=DATABIT set databit, 5, 6, 7, 8; default:8\n\ -d, --debug set debug mode\n\ -e, --echo set echo mode\n\ -f, --flowcontrol set flow control, default: 1\n\ 0: none, 1: hardware, 2: software\n\ -p, --parity=PARITY set parity to PARITY, 'N': no parity, 'E':even\n\ 'O': odd, default: 'N' (no parity)\n\ -s, --stopbit=STOPBIT set stopbit, 1, 1.5, 2; default: 1\n\ -t, --tty=TTY set tty to TTY, default: 0, /dev /ttyS0\n\ /dev/ttyS0 equals COM1 in DOS\n\ --help display this help and exit\n\ --version output version information and exit\n\ Examples:\n %s --baudrate 115200 --tty=1 --debug %s \n", program_name, eargc ? "*.c" : ""); puts ("\nReport bugs to <ding_baohua@yahoo.com>."); exit (status);}static void version (FILE * stream, const P_PACKAGE_INFO pPkgInfo){ char *version_etc_copyright = _("Copyright (C) 2002 Paul Studio."); if (pPkgInfo->program_name) fprintf (stream, "%s (%s) %s\n", pPkgInfo->program_name, pPkgInfo->package, pPkgInfo->version); else fprintf (stream, "%s %s\n", pPkgInfo->package, pPkgInfo->version); fprintf (stream, _("Written by %s.\n"), pPkgInfo->authors); putc ('\n', stream); fputs (version_etc_copyright, stream); putc ('\n', stream); fputs (_("\This is free software; see the source for copying conditions. There is NO\n\warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n"), stream); exit (0);}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -