Имеются три дополнительных программы, а именно, Options, SkipArg и GetArgs, которые достаточно полезны, чтобы привести здесь их листинги. В то же время, ни одна из этих программ не привязана жестко к Win32.
Options.с
Эта функция просматривает командную строку в поиске слов, начинающихся с символа "-" (дефис), проверяет отдельные символы и устанавливает булевские параметры. Хотя эта функция и аналогична UNIX-функции getopt, она обладает меньшими возможностями.
Программа А.7. Функция Options
/* Служебная функция для извлечения флагов опций из командной строки. */
/* argv — командная строка. Параметры (опции), если они нужны, начинаются с символа '-' в argv[1], argv[2], ….
OptStr — текстовая строка, содержащая все возможные параметры, находящиеся во взаимно-однозначном соответствии с адресами булевских переменных в списке аргументов (...). Эти флаги устанавливаются тогда и только тогда, когда символ соответствующей опции встречается в argv[1], argv[2], …Возвращаемым значением является индекс (в argv) первого аргумента, указанного
Эта функция обрабатывает командную строку, пропуская одно поле, отделенное пробельным символом. Впервые используется в программе timep (программа 6.2).
Программа А.8. Функция SkipArg
/* SkipArg.с
Пропуск одного аргумента командной строки – символы табуляции и пробела пропускаются. */
#include "EvryThng.h"
LPTSTR SkipArg(LPCTSTR targv) {
LPTSTR p;
p = (LPTSTR)targv;
/* Перейти к следующему символу табуляции или пробела. */
Эта функция просматривает строку, отыскивая слова, разделенные символами пробелов или табуляции, и помещает результат в массив строк, передаваемый функции. Эта функция может пригодиться для преобразования командной строки в массив argv[] и впервые используется в программе JobShell в главе 6. Функция Win32 CommandLineToArgW решает ту же задачу, но сфера ее применимости ограничивается символами Unicode.
Программа А.9. Функция GetArgs
/* GetArgs. Преобразует командную строку к виду argc/argv. */
#include "EvryThng.h"
VOID GetArgs(LPCTSTR Command, int *pArgc, LPTSTR argstr[]) {