📄 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 "vardef.h"#include "args.h"#define VERSION "0.03"Arguments args = { "serfile", /* program */ "serutils", /* package */ VERSION, /*version */ "Paul Dean", /* author */ 115200, /* baudrate */ NULL, /* device */ 0, /* debug */ 0, /* echo */ 0, /* port */ 8, /* databit */ "1", /* stopbit */ 'N'};void parse_arguments (int argc, char **argv){ 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'}, {"databit", required_argument, 0, 'c'}, {"stopbit", required_argument, 0, 's'}, {"device", required_argument, 0, 'd'}, {"port", required_argument, 0, 'p'}, {"parity", required_argument, 0, 'P'}, {"DEBUG", no_argument, 0, 'D'}, {"echo", no_argument, 0, 'e'}, {"help", no_argument, 0, ARG_HELP}, {"version", no_argument, 0, ARG_VERSION}, {0, 0, 0, 0} }; static const char *short_options = "b:c:d:p:s:P:De"; while (-1 != (c = getopt_long (argc, argv, short_options, long_options, &option_index))) { switch (c) { case 0: break; case 'b': args.baudrate = atoi (optarg); break; case 'c': args.databit = atoi (optarg); break; case 'd': args.device = strrchr (optarg, 'S'); if (NULL == args.device) { break; } args.device++; sscanf (args.device, "%d", &args.port); break; case 'p': args.port = atoi (optarg); break; case 's': args.stopbit = optarg; break; case 'P': args.parity = toupper (optarg[0]); break; case 'D': args.debug = 1; break; case 'e': args.echo = 1; break; case ARG_HELP: usage (0, args.program_name); break; case ARG_VERSION: version (stdout, args.program_name, args.package, args.version, args.authors); break; default: break; } } if (argc <= optind) { usage (1, args.program_name); }}/* The name this program was run with. */void usage (INT32 status, const char *program_name){ if (status != 0) fprintf (stderr, "Try `%s --help' for more information.\n", program_name); else { printf ("Usage: %s [OPTION]\n", program_name); printf ("Send files via serial port.\n\\n\ -b, --baudrate=BAUDRATE set baudrate to BAUDRATE, default:115200\n\ -c, --CS=DATABIT\n\ --databit=DATABIT set databit, 5, 6, 7, 8; default:8\n\ -d, --device=DEVICE set device to DEVICE, default: /dev/ttyS0 [COM1]\n\ if [--port] has been set, [--device] is ignored.\n\ -p, --port=PORT set port to PORT, default: 0 [COM1]\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\ -D, --DEBUG set debug mode\n\ -e, --echo set echo mode\n\ -- help display this help and exit \n\ -- version output version information and exit \n\Examples:\n\ %s -b 38400 --port 1 *.c --DEBUG\n\ %s * --debug --device=/dev/ttyS0\n", program_name, program_name); puts ("\nReport bugs to <ding_baohua@yahoo.com>."); } exit (status);}void version (FILE * stream, const char *program_name, const char *package, const char *version, const char *authors){ char *version_etc_copyright = _("Copyright (C) 2002 Paul Studio."); if (program_name) fprintf (stream, "%s (%s) %s\n", program_name, package, version); else fprintf (stream, "%s %s\n", package, version); fprintf (stream, _("Written by %s.\n"), 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 + -