nl::ArgParser

สรุป

การแจกแจง

OptionArgumentType enum
กำหนดข้อกำหนดของอาร์กิวเมนต์สำหรับตัวเลือกบรรทัดคำสั่ง

Typedef

NonOptionArgHandlerFunct)(const char *progName, int argc, char *argv[]) typedef
bool(*
ฟังก์ชันที่สามารถเรียกใช้เพื่อจัดการกับอาร์กิวเมนต์บรรทัดคำสั่งอื่นๆ ที่เหลือที่ไม่มีตัวเลือก
OptionHandlerFunct)(const char *progName, OptionSet *optSet, int id, const char *name, const char *arg) typedef
bool(*
ฟังก์ชันที่สามารถเรียกใช้เพื่อจัดการชุดตัวเลือกบรรทัดคำสั่ง

ตัวแปร

PrintArgError = DefaultPrintArgError)(const char *msg,...)
void(*
ตัวชี้ไปยังฟังก์ชันที่ใช้พิมพ์ข้อผิดพลาดที่เกิดขึ้นระหว่างการแยกวิเคราะห์อาร์กิวเมนต์
gActiveOptionSets = NULL
รายการ OptionSets ที่ส่งไปยังการเรียก ParseArgs() ที่ทำงานอยู่ในปัจจุบัน

ฟังก์ชัน

CountAllOptions(OptionSet *optSets[])
size_t
CountAllOptions(OptionSet **optSets)
size_t
CountOptionSets(OptionSet *optSets[])
size_t
CountOptionSets(OptionSet **optSets)
size_t
DefaultPrintArgError(const char *msg, ...)
void
พิมพ์ข้อความแสดงข้อผิดพลาดที่เกี่ยวข้องกับการแยกวิเคราะห์อาร์กิวเมนต์
FindOptionById(OptionSet **optSets, int optId, OptionSet *& optSet, OptionDef *& optDef)
void
FindOptionByIndex(OptionSet **optSets, int optIndex, OptionSet *& optSet, OptionDef *& optDef)
void
GetNextArg(char *& parsePoint)
bool
IsShortOptionChar(int ch)
bool
MakeLongOptions(OptionSet **optSets)
struct option *
MakeShortOptions(OptionSet **optSets)
char *
MakeUniqueHelpGroupNamesList(OptionSet *optSets[])
const char **
ParseArgs(const char *progName, int argc, char *argv[], OptionSet *optSets[], NonOptionArgHandlerFunct nonOptArgHandler, bool ignoreUnknown)
bool
แยกวิเคราะห์ชุดของอาร์กิวเมนต์รูปแบบบรรทัดคำสั่ง การเรียกใช้ฟังก์ชันการจัดการเพื่อประมวลผลแต่ละตัวเลือกและอาร์กิวเมนต์ที่ไม่ใช่ตัวเลือก
ParseArgs(const char *progName, int argc, char *argv[], OptionSet *optSets[], NonOptionArgHandlerFunct nonOptArgHandler)
bool
ParseArgs(const char *progName, int argc, char *argv[], OptionSet *optSets[])
bool
ParseArgsFromEnvVar(const char *progName, const char *varName, OptionSet *optSets[], NonOptionArgHandlerFunct nonOptArgHandler, bool ignoreUnknown)
bool
แยกวิเคราะห์ชุดอาร์กิวเมนต์จากตัวแปรสภาพแวดล้อมที่มีชื่อ
ParseArgsFromEnvVar(const char *progName, const char *varName, OptionSet *optSets[])
bool
ParseArgsFromEnvVar(const char *progName, const char *varName, OptionSet *optSets[], NonOptionArgHandlerFunct nonOptArgHandler)
bool
ParseArgsFromString(const char *progName, const char *argStr, OptionSet *optSets[], NonOptionArgHandlerFunct nonOptArgHandler, bool ignoreUnknown)
bool
แยกวิเคราะห์ชุดอาร์กิวเมนต์จากสตริงที่ระบุ
ParseArgsFromString(const char *progName, const char *argStr, OptionSet *optSets[], NonOptionArgHandlerFunct nonOptArgHandler)
bool
ParseArgsFromString(const char *progName, const char *argStr, OptionSet *optSets[])
bool
ParseBoolean(const char *str, bool & output)
bool
แยกวิเคราะห์สตริงเป็นค่าบูลีน
ParseFabricId(const char *str, uint64_t & fabricId, bool allowReserved)
bool
แยกวิเคราะห์รหัสผ้า Weave ในรูปแบบข้อความ
ParseHexString(const char *hexStr, uint32_t strLen, uint8_t *outBuf, uint32_t outBufSize, uint32_t & outDataLen)
bool
แยกวิเคราะห์สตริงไบต์ที่ระบุในรูปแบบเลขฐาน 16
ParseIPAddress(const char *str, IPAddress & output)
bool
แยกวิเคราะห์ที่อยู่ IP ในรูปแบบข้อความ
ParseInt(const char *str, uint64_t & output, int base)
bool
แยกวิเคราะห์และพยายามแปลงสตริงเป็นจำนวนเต็มที่ไม่มีเครื่องหมาย 64 บิต โดยใช้การตีความที่เหมาะสมตามพารามิเตอร์ฐาน
ParseInt(const char *str, uint32_t & output, int base)
bool
แยกวิเคราะห์และพยายามแปลงสตริงเป็นจำนวนเต็มที่ไม่มีเครื่องหมาย 32 บิต โดยใช้การตีความที่เหมาะสมตามพารามิเตอร์ฐาน
ParseInt(const char *str, int32_t & output, int base)
bool
แยกวิเคราะห์และพยายามแปลงสตริงเป็นจำนวนเต็มแบบมีเครื่องหมาย 32 บิต โดยใช้การตีความที่เหมาะสมตามพารามิเตอร์ฐาน
ParseInt(const char *str, uint64_t & output)
bool
แยกวิเคราะห์และพยายามแปลงสตริงที่ตีความเป็นค่าทศนิยมเป็นจํานวนเต็มที่ไม่มีเครื่องหมาย 64 บิต โดยใช้การตีความที่เหมาะสมตามพารามิเตอร์ฐาน
ParseInt(const char *str, uint32_t & output)
bool
แยกวิเคราะห์และพยายามแปลงสตริงที่ตีความเป็นค่าทศนิยมเป็นจํานวนเต็มที่ไม่มีเครื่องหมาย 32 บิต โดยใช้การตีความที่เหมาะสมตามพารามิเตอร์ฐาน
ParseInt(const char *str, int32_t & output)
bool
แยกวิเคราะห์และพยายามแปลงสตริงที่ตีความเป็นค่าทศนิยมเป็นจำนวนเต็มแบบมีเครื่องหมาย 32 บิต โดยใช้การตีความที่เหมาะสมตามพารามิเตอร์ฐาน
ParseInt(const char *str, uint16_t & output)
bool
แยกวิเคราะห์และพยายามแปลงสตริงที่ตีความเป็นค่าทศนิยมเป็นจํานวนเต็มที่ไม่มีเครื่องหมาย 16 บิต โดยใช้การตีความที่เหมาะสมตามพารามิเตอร์ฐาน
ParseInt(const char *str, int16_t & output)
bool
แยกวิเคราะห์และพยายามแปลงสตริงที่ตีความเป็นค่าทศนิยมเป็นจำนวนเต็มแบบมีเครื่องหมาย 16 บิต โดยใช้การตีความที่เหมาะสมตามพารามิเตอร์ฐาน
ParseInt(const char *str, uint8_t & output)
bool
แยกวิเคราะห์และพยายามแปลงสตริงที่ตีความเป็นค่าทศนิยมเป็นจำนวนเต็มที่ไม่มีเครื่องหมาย 8 บิต โดยใช้การตีความที่เหมาะสมตามพารามิเตอร์ฐาน
ParseNodeId(const char *str, uint64_t & nodeId)
bool
แยกวิเคราะห์รหัสโหนด Weave ในรูปแบบข้อความ
ParseSubnetId(const char *str, uint16_t & subnetId)
bool
แยกวิเคราะห์และพยายามแปลงสตริงเป็นรหัสซับเน็ตที่ไม่มีเครื่องหมาย 16 บิต โดยตีความสตริงเป็นเลขฐานสิบหก
PrintOptionHelp(OptionSet *optSets[], FILE *s)
void
พิมพ์ข้อความช่วยเหลือสำหรับรายการตัวเลือกที่ระบุไปยังสตรีม
PutStringWithBlankLine(FILE *s, const char *str)
void
PutStringWithNewLine(FILE *s, const char *str)
void
SplitArgs(char *argStr, char **& argList, char *initialArg)
int32_t

คลาส

nl::ArgParser::HelpOptions

OptionSet ทั่วไปสำหรับการจัดการตัวเลือกการให้ข้อมูล (ความช่วยเหลือ, เวอร์ชัน)

nl::ArgParser::OptionSetBase

OptionSet ซึ่งเครื่องจัดการเป็นฟังก์ชันเสมือน

โครงสร้าง

nl::ArgParser::OptionDef

กำหนดตัวเลือกบรรทัดคำสั่ง

nl::ArgParser::OptionSet

กำหนดกลุ่มของตัวเลือกบรรทัดคำสั่งที่เกี่ยวข้องกับตรรกะและนำมาใช้ใหม่ได้

การแจกแจง

OptionArgumentType

 OptionArgumentType

กำหนดข้อกำหนดของอาร์กิวเมนต์สำหรับตัวเลือกบรรทัดคำสั่ง

Typedef

NonOptionArgHandlerFunct

bool(* NonOptionArgHandlerFunct)(const char *progName, int argc, char *argv[])

ฟังก์ชันที่สามารถเรียกใช้เพื่อจัดการกับอาร์กิวเมนต์บรรทัดคำสั่งอื่นๆ ที่เหลือที่ไม่มีตัวเลือก

OptionHandlerFunct

bool(* OptionHandlerFunct)(const char *progName, OptionSet *optSet, int id, const char *name, const char *arg)

ฟังก์ชันที่สามารถเรียกใช้เพื่อจัดการชุดตัวเลือกบรรทัดคำสั่ง

ตัวแปร

PrintArgError

void(* PrintArgError)(const char *msg,...) = DefaultPrintArgError

ตัวชี้ไปยังฟังก์ชันที่ใช้พิมพ์ข้อผิดพลาดที่เกิดขึ้นระหว่างการแยกวิเคราะห์อาร์กิวเมนต์

แอปพลิเคชันควรเรียก PrintArgError() เพื่อรายงานข้อผิดพลาดในฟังก์ชันตัวเลือกและฟังก์ชันการจัดการอาร์กิวเมนต์ที่ไม่ใช่ตัวเลือก แทนการพิมพ์ไปยัง stdout/stderr โดยตรง

ค่าเริ่มต้นจะเป็นตัวชี้ไปยังฟังก์ชัน DefaultPrintArgError()

gActiveOptionSets

OptionSet ** gActiveOptionSets = NULL

รายการ OptionSets ที่ส่งไปยังการเรียก ParseArgs() ที่ทำงานอยู่ในปัจจุบัน

ค่านี้จะเป็น NULL เมื่อไม่มีการเรียกใช้ ParseArgs()

ฟังก์ชัน

CountAllOptions

size_t CountAllOptions(
  OptionSet *optSets[]
)

CountAllOptions

size_t CountAllOptions(
  OptionSet **optSets
)

CountOptionSets

size_t CountOptionSets(
  OptionSet *optSets[]
)

CountOptionSets

size_t CountOptionSets(
  OptionSet **optSets
)

DefaultPrintArgError

void DefaultPrintArgError(
  const char *msg,
  ...
)

พิมพ์ข้อความแสดงข้อผิดพลาดที่เกี่ยวข้องกับการแยกวิเคราะห์อาร์กิวเมนต์

ฟังก์ชันเริ่มต้นที่ใช้ในการพิมพ์ข้อความแสดงข้อผิดพลาดที่เกิดจากการแยกวิเคราะห์อาร์กิวเมนต์

รายละเอียด
พารามิเตอร์
[in] msg
ข้อความที่จะพิมพ์

แอปพลิเคชันควรเรียกผ่านตัวชี้ฟังก์ชัน PrintArgError แทนการเรียกใช้ฟังก์ชันนี้โดยตรง

FindOptionById

void FindOptionById(
  OptionSet **optSets,
  int optId,
  OptionSet *& optSet,
  OptionDef *& optDef
)

FindOptionByIndex

void FindOptionByIndex(
  OptionSet **optSets,
  int optIndex,
  OptionSet *& optSet,
  OptionDef *& optDef
)

GetNextArg

bool GetNextArg(
  char *& parsePoint
)

IsShortOptionChar

bool IsShortOptionChar(
  int ch
)

MakeLongOptions

struct option * MakeLongOptions(
  OptionSet **optSets
)

MakeShortOptions

char * MakeShortOptions(
  OptionSet **optSets
)

MakeUniqueHelpGroupNamesList

const char ** MakeUniqueHelpGroupNamesList(
  OptionSet *optSets[]
)

ParseArgs

bool ParseArgs(
  const char *progName,
  int argc,
  char *argv[],
  OptionSet *optSets[],
  NonOptionArgHandlerFunct nonOptArgHandler,
  bool ignoreUnknown
)

แยกวิเคราะห์ชุดของอาร์กิวเมนต์รูปแบบบรรทัดคำสั่ง การเรียกใช้ฟังก์ชันการจัดการเพื่อประมวลผลแต่ละตัวเลือกและอาร์กิวเมนต์ที่ไม่ใช่ตัวเลือก

ParseArgs() นำรายการอาร์กิวเมนต์ (argv) มาแยกวิเคราะห์ตามชุดคำนิยามตัวเลือกที่ให้มา ฟังก์ชันนี้รองรับทั้งตัวเลือกแบบยาว (ไม่บังคับ) และสั้น (-o) และใช้ไวยากรณ์ตัวเลือกเดียวกันกับฟังก์ชัน GNU getopt_long(3)

รายละเอียด
พารามิเตอร์
[in] progName
ชื่อของโปรแกรมหรือบริบทที่มีการแยกวิเคราะห์อาร์กิวเมนต์ สตริงนี้จะใช้นำหน้าข้อความแสดงข้อผิดพลาดและคำเตือน
[in] argc
จำนวนอาร์กิวเมนต์ที่จะแยกวิเคราะห์ บวกอีก 1
[in] argv
อาร์เรย์ของสตริงอาร์กิวเมนต์ที่จะแยกวิเคราะห์ ความยาวอาร์เรย์ต้องมากกว่าค่าที่ระบุสำหรับ argc และต้องตั้งค่า argv[argc] เป็น NULL การแยกวิเคราะห์อาร์กิวเมนต์เริ่มต้นด้วยองค์ประกอบอาร์เรย์ second (argv[1]) ระบบจะไม่สนใจองค์ประกอบ 0
[in] optSets
รายการตัวชี้ไปยังโครงสร้าง OptionSet ที่กำหนดตัวเลือกทางกฎหมาย รายการที่ให้มาต้องสิ้นสุดด้วยค่าว่าง
[in] nonOptArgHandler
ตัวชี้ไปยังฟังก์ชันที่จะเรียกใช้เมื่อการแยกวิเคราะห์ตัวเลือกเสร็จสมบูรณ์ ด้วย อาร์กิวเมนต์ที่ไม่ใช่ตัวเลือก ที่เหลืออยู่ ระบบจะเรียกใช้ฟังก์ชันไม่ว่าจะมีอาร์กิวเมนต์หรือไม่ ถ้ามีการส่งค่า NULL ParseArgs() จะรายงานข้อผิดพลาดหากมีอาร์กิวเมนต์ที่ไม่ใช่ตัวเลือก
[in] ignoreUnknown
หากเป็น "จริง" และไม่ต้องสนใจตัวเลือกที่ไม่รู้จักใดๆ เลย
การส่งคืน
true หากแยกวิเคราะห์ตัวเลือกและอาร์กิวเมนต์ที่ไม่ใช่ตัวเลือกทั้งหมดสำเร็จแล้ว false หากไม่รู้จักตัวเลือกหรือหากฟังก์ชันตัวแฮนเดิลตัวใดตัวหนึ่งล้มเหลว (เช่น แสดงผลเป็น false)

ระบบจะส่งคำจำกัดความของตัวเลือกไปยัง ParseArgs() เป็นอาร์เรย์ของโครงสร้าง OptionSet (optSets) โดย OptionSet แต่ละรายการจะมีอาร์เรย์ของการกำหนดตัวเลือก และฟังก์ชันตัวแฮนเดิล ParseArgs() ประมวลผลอาร์กิวเมนต์ตัวเลือกในลำดับที่ระบุ โดยเรียกใช้ฟังก์ชันตัวแฮนเดิลที่เกี่ยวข้องสำหรับตัวเลือกที่ยอมรับแต่ละตัวเลือก เมื่อแยกวิเคราะห์ตัวเลือกทั้งหมดแล้ว ระบบจะเรียกใช้ฟังก์ชันตัวแฮนเดิลที่ไม่ใช่ตัวเลือก (nonOptArgHandler) แยกต่างหาก 1 ครั้งเพื่อประมวลผลอาร์กิวเมนต์ที่เหลืออยู่

ชุดตัวเลือก

OptionSet ประกอบด้วยชุดคำจำกัดความของตัวเลือก พร้อมด้วยตัวชี้ไปยังฟังก์ชันเครื่องจัดการที่จะเรียกใช้เมื่อพบหนึ่งในตัวเลือกที่เกี่ยวข้อง นอกจากนี้ ชุดตัวเลือกยังมีข้อความช่วยเหลือที่อธิบายไวยากรณ์และวัตถุประสงค์ของตัวเลือกแต่ละรายการ (ดูตัวเลือกความช่วยเหลือด้านล่าง) ชุดตัวเลือกได้รับการออกแบบมาเพื่อให้สามารถสร้างคอลเล็กชันตัวเลือกที่เกี่ยวข้องซึ่งนำมาใช้ใหม่ได้ ซึ่งช่วยลดความซับซ้อนของความพยายามที่จำเป็นในการดูแลรักษาแอปพลิเคชันจำนวนมากที่ยอมรับตัวเลือกที่คล้ายกัน (เช่น แอปพลิเคชันทดสอบ)

การกำหนด OptionSetsone สามารถกำหนดค่าเริ่มต้นอินสแตนซ์ของ OptionSet ด้วยตัวเองได้ 2 รูปแบบ เช่น เป็นคลาสสากลแบบคงที่ หรือ คลาสย่อย OptionSetBase และจัดเตรียมตัวสร้าง ตัวหลังใช้ฟังก์ชัน HandleOption() เสมือนเพียงอย่างเดียวเพื่อมอบสิทธิ์การจัดการตัวเลือกให้กับคลาสย่อย

ระบบจะส่งรายการ OptionSets ไปยังฟังก์ชัน ParseArgs() เป็นอาร์เรย์ของตัวชี้ที่มีค่า Null ในตอนท้าย E.g.:

static OptionSet gToolOptions =
{
    HandleOption,        // handler function
    gToolOptionDefs,  // array of option definitions
    "GENERAL OPTIONS",   // help group
    gToolOptionHelp   // option help text
};

static OptionSet *gOptionSets[] =
{
    &gToolOptions,
    &gNetworkOptions,
    &gTestingOptions,
    &gHelpOptions,
    NULL
};

int main(int argc, char *argv[])
{
    if (!ParseArgs("test-app", argc, argv, gOptionSets))
    {
        ...
    }
}

คำจำกัดความตัวเลือก

คุณกำหนดตัวเลือกโดยใช้โครงสร้าง OptionDef คำจำกัดความของตัวเลือกจะจัดระเบียบเป็นอาร์เรย์ขององค์ประกอบ OptionDef โดยแต่ละองค์ประกอบจะประกอบด้วยชื่อของตัวเลือก รหัสจำนวนเต็มที่ใช้ระบุตัวเลือก และระบุว่าตัวเลือกคาดหวัง/อนุญาตอาร์กิวเมนต์หรือไม่ จุดสิ้นสุดของอาร์เรย์ตัวเลือกจะได้รับการส่งสัญญาณด้วยช่องชื่อ NULL E.g.:

enum
{
    kOpt_Listen = 1000,
    kOpt_Length,
    kOpt_Count,
};

static OptionDef gToolOptionDefs[] =
{
    // NAME         REQUIRES/ALLOWS ARG?  ID/SHORT OPTION CHAR
    // ============================================================
    {  "listen",    kNoArgument,          kOpt_Listen     },
    {  "length",    kArgumentRequired,    kOpt_Length     },
    {  "count",     kArgumentRequired,    kOpt_Count      },
    {  "num",       kArgumentRequired,    kOpt_Count      }, // alias for --count
    {  "debug",     kArgumentOptional,    'd'             },
    {  "help",      kNoArgument,          'h'             },
    {  NULL }
};

รหัสตัวเลือก

รหัสตัวเลือกจะระบุตัวเลือกสำหรับโค้ดที่จัดการตัวเลือกดังกล่าว (ฟังก์ชัน OptionHandler) รหัสตัวเลือกจะสัมพันธ์กับ OptionSet ที่ปรากฏ ดังนั้นจึงสามารถนำมาใช้ซ้ำได้ใน OptionSets ที่ต่างกัน (แต่จะเห็น "ตัวเลือก Shorts" ด้านล่าง) โดยทั่วไปจะใช้ตัวเลขรหัสตัวเลือกเป็น 1000 แต่คุณใช้ตัวเลขใดก็ได้ที่มากกว่า 128 คุณสร้างตัวเลือกชื่อแทนโดยใช้รหัสตัวเลือกเดียวกันที่มีชื่อตัวเลือกต่างกันได้

ตัวเลือก Shorts

ParseArgs() จะไม่ใช้สตริงแยกต่างหากที่ระบุรายการอักขระตัวเลือกแบบสั้น ซึ่งแตกต่างจาก getopt_long(3) แต่ตัวเลือกที่มีค่ารหัสอยู่ในช่วงอักขระ ASCII ที่เป็นกราฟิกจะอนุญาตให้ใช้อักขระนั้นเป็นตัวเลือกสั้นๆ

ParseArgs() กำหนดให้อักขระตัวเลือกแบบสั้นต้องไม่ซ้ำกันใน OptionSets ทั้งหมด ด้วยเหตุนี้ จึงไม่แนะนำให้ใช้ตัวเลือกสั้นๆ กับ OptionSet ที่แชร์ในโปรแกรม เนื่องจากมีโอกาสเกิดข้อขัดข้องอย่างมาก สามารถนำอักขระตัวเลือกสั้นมาใช้ซ้ำภายใน OptionSet ตัวเดียวได้ เพื่อให้สามารถสร้างชื่อตัวเลือกแบบยาวของชื่อแทนได้

ตัวเลือกความช่วยเหลือ

OptionSet แต่ละรายการประกอบด้วยสตริง OptionHelp ที่อธิบายวัตถุประสงค์และไวยากรณ์ของตัวเลือกที่เกี่ยวข้อง ฟังก์ชัน PrintOptionHelp() ใช้สตริงเหล่านี้เพื่อสร้างข้อมูลการใช้งานตัวเลือก

ตามหลักแล้ว สตริงความช่วยเหลือของตัวเลือกจะประกอบด้วยตัวอย่างไวยากรณ์ที่ต่อท้ายด้วยข้อความอธิบายของตัวเลือก หากตัวเลือกนั้นมีเวอร์ชันสั้น หรือชื่อชื่อแทน จะมีการกำหนดอยู่ก่อนชื่อยาวหลัก เพื่อความสอดคล้อง บรรทัดไวยากรณ์จะมีการเยื้องโดยการเว้นวรรค 2 ช่อง ส่วนบรรทัดรายละเอียดจะเยื้อง 7 ช่อง บรรทัดว่าง 1 บรรทัดจะอยู่หลังคำอธิบายตัวเลือกแต่ละรายการ รวมถึงบรรทัดสุดท้ายด้วย

E.g.:

static const char *const gToolOptionHelp =
    "  --listen\n"
    "       Listen and respond to requests sent from another node.\n"
    "\n"
    "  --length \n"
    "       Send requests with the specified number of bytes in the payload.\n"
    "\n"
    "  --num, --count \n"
    "       Send the specified number of requests and exit.\n"
    "\n"
    "  -d, --debug []\n"
    "       Set debug logging to the given level. (Default: 1)\n"
    "\n"
    "  -h, --help\n"
    "       Print help information.\n"
    "\n";

กลุ่มช่วยเหลือตัวเลือก

OptionSet ประกอบด้วยสตริง HelpGroupName ที่ใช้จัดกลุ่มตัวเลือกเข้าด้วยกันในผลลัพธ์ความช่วยเหลือ ฟังก์ชัน PrintOptionHelp() จะใช้ HelpGroupName เป็นชื่อส่วนในเอาต์พุตการใช้งานที่สร้างขึ้น ถ้า OptionSets หลายรายการมี HelpGroupName เดียวกัน PrintOptionHelp() จะพิมพ์ความช่วยเหลือสำหรับ OptionSets ที่ต่างกันพร้อมกันภายใต้ชื่อส่วนทั่วไป

ParseArgs

bool ParseArgs(
  const char *progName,
  int argc,
  char *argv[],
  OptionSet *optSets[],
  NonOptionArgHandlerFunct nonOptArgHandler
)

ParseArgs

bool ParseArgs(
  const char *progName,
  int argc,
  char *argv[],
  OptionSet *optSets[]
)

ParseArgsFromEnvVar

bool ParseArgsFromEnvVar(
  const char *progName,
  const char *varName,
  OptionSet *optSets[],
  NonOptionArgHandlerFunct nonOptArgHandler,
  bool ignoreUnknown
)

แยกวิเคราะห์ชุดอาร์กิวเมนต์จากตัวแปรสภาพแวดล้อมที่มีชื่อ

ParseArgsFromEnvVar() จะอ่านตัวแปรสภาพแวดล้อมที่มีชื่อ และส่งค่าไปยัง ParseArgsFromString() เพื่อแยกวิเคราะห์ หากไม่ได้ตั้งค่าตัวแปรสภาพแวดล้อมไว้ ฟังก์ชันจะไม่ทํางาน

รายละเอียด
พารามิเตอร์
[in] progName
ชื่อของโปรแกรมหรือบริบทที่มีการแยกวิเคราะห์อาร์กิวเมนต์ สตริงนี้จะใช้นำหน้าข้อความแสดงข้อผิดพลาดและคำเตือน
[in] varName
ชื่อของตัวแปรสภาพแวดล้อม
[in] optSets
รายการตัวชี้ไปยังโครงสร้าง OptionSet ที่กำหนดตัวเลือกทางกฎหมาย รายการที่ให้มาต้องสิ้นสุดด้วยค่าว่าง
[in] nonOptArgHandler
ตัวชี้ไปยังฟังก์ชันที่จะเรียกใช้เมื่อการแยกวิเคราะห์ตัวเลือกเสร็จสมบูรณ์ ด้วย อาร์กิวเมนต์ที่ไม่ใช่ตัวเลือก ที่เหลืออยู่ ระบบจะเรียกใช้ฟังก์ชันไม่ว่าจะมีอาร์กิวเมนต์หรือไม่ ถ้ามีการส่งค่า NULL ParseArgs() จะรายงานข้อผิดพลาดหากมีอาร์กิวเมนต์ที่ไม่ใช่ตัวเลือก
[in] ignoreUnknown
หากเป็น "จริง" และไม่ต้องสนใจตัวเลือกที่ไม่รู้จักใดๆ เลย
การส่งคืน
true หากมีการแยกวิเคราะห์ตัวเลือกและอาร์กิวเมนต์ที่ไม่ใช่ตัวเลือกทั้งหมดเรียบร้อยแล้ว หรือหากไม่ได้ตั้งค่าตัวแปรสภาพแวดล้อมที่ระบุ false หากไม่รู้จักตัวเลือก หากฟังก์ชันตัวแฮนเดิลรายการหนึ่งล้มเหลว (เช่น แสดงผลเป็น false) หรือเกิดข้อผิดพลาดภายใน

ParseArgsFromEnvVar

bool ParseArgsFromEnvVar(
  const char *progName,
  const char *varName,
  OptionSet *optSets[]
)

ParseArgsFromEnvVar

bool ParseArgsFromEnvVar(
  const char *progName,
  const char *varName,
  OptionSet *optSets[],
  NonOptionArgHandlerFunct nonOptArgHandler
)

ParseArgsFromString

bool ParseArgsFromString(
  const char *progName,
  const char *argStr,
  OptionSet *optSets[],
  NonOptionArgHandlerFunct nonOptArgHandler,
  bool ignoreUnknown
)

แยกวิเคราะห์ชุดอาร์กิวเมนต์จากสตริงที่ระบุ

ParseArgsFromString() จะแยกสตริงที่ระบุ (argStr) ออกเป็นชุดอาร์กิวเมนต์และแยกวิเคราะห์อาร์กิวเมนต์โดยใช้ฟังก์ชัน ParseArgs()

รายละเอียด
พารามิเตอร์
[in] progName
ชื่อของโปรแกรมหรือบริบทที่มีการแยกวิเคราะห์อาร์กิวเมนต์ สตริงนี้จะใช้นำหน้าข้อความแสดงข้อผิดพลาดและคำเตือน
[in] argStr
สตริงที่มีตัวเลือกและอาร์กิวเมนต์ที่จะแยกวิเคราะห์
[in] optSets
รายการตัวชี้ไปยังโครงสร้าง OptionSet ที่กำหนดตัวเลือกทางกฎหมาย รายการที่ให้มาต้องสิ้นสุดด้วยค่าว่าง
[in] nonOptArgHandler
ตัวชี้ไปยังฟังก์ชันที่จะเรียกใช้เมื่อการแยกวิเคราะห์ตัวเลือกเสร็จสมบูรณ์ ด้วย อาร์กิวเมนต์ที่ไม่ใช่ตัวเลือก ที่เหลืออยู่ ระบบจะเรียกใช้ฟังก์ชันไม่ว่าจะมีอาร์กิวเมนต์หรือไม่ ถ้ามีการส่งค่า NULL ParseArgs() จะรายงานข้อผิดพลาดหากมีอาร์กิวเมนต์ที่ไม่ใช่ตัวเลือก
[in] ignoreUnknown
หากเป็น "จริง" และไม่ต้องสนใจตัวเลือกที่ไม่รู้จักใดๆ เลย
การส่งคืน
true หากมีการแยกวิเคราะห์ตัวเลือกและอาร์กิวเมนต์ที่ไม่ใช่ตัวเลือกทั้งหมดสำเร็จ false หากไม่รู้จักตัวเลือกใด หากฟังก์ชันตัวแฮนเดิลตัวใดตัวหนึ่งล้มเหลว (เช่น แสดงผลเป็น false) หรือเกิดข้อผิดพลาดภายใน

ไวยากรณ์ของสตริงอินพุตคล้ายกับไวยากรณ์คำสั่งเชลล์ Uniix แต่มีรูปแบบเครื่องหมายคำพูดที่เรียบง่าย กล่าวอย่างเจาะจงคือ

  • อาร์กิวเมนต์ต้องคั่นด้วยช่องว่าง เว้นแต่จะมีเครื่องหมายอัญประกาศเดี่ยวหรือมีการกำหนดเป็นอักขระหลีก
  • แบ็กสแลชจะหลีกอักขระต่อไปนี้ ทำให้ระบบมองว่าเป็นอักขระปกติ แบ็กสแลชนั้นถูกตัดออก
  • สตริงย่อยที่อยู่ในเครื่องหมายคำพูดเดี่ยวหรือคู่ที่ขึ้นต้น/สิ้นสุด ภายในสตริงย่อย อักขระพิเศษมีเพียงรายการเดียวคือแบ็กสแลช ซึ่งจะหลีกอักขระถัดไปและอัญประกาศจบที่เกี่ยวข้อง อักขระอัญประกาศเริ่มต้น/สิ้นสุดถูกตัดออก

E.g.:

--listen --count 10 --sw-version '1.0 (DEVELOPMENT)' "--hostname=nest.com"

ParseArgsFromString

bool ParseArgsFromString(
  const char *progName,
  const char *argStr,
  OptionSet *optSets[],
  NonOptionArgHandlerFunct nonOptArgHandler
)

ParseArgsFromString

bool ParseArgsFromString(
  const char *progName,
  const char *argStr,
  OptionSet *optSets[]
)

ParseBoolean

bool ParseBoolean(
  const char *str,
  bool & output
)

แยกวิเคราะห์สตริงเป็นค่าบูลีน

ฟังก์ชันนี้ยอมรับค่าอินพุตต่อไปนี้ (ไม่คำนึงถึงตัวพิมพ์เล็กและตัวพิมพ์ใหญ่) ได้แก่ "true", "yes", "t", "y", "1", "false", "no", "f", "n", "0"

รายละเอียด
พารามิเตอร์
[in] str
ตัวชี้ไปยังสตริง C ที่สิ้นสุดค่า NULL ซึ่งแสดงค่าที่จะแยกวิเคราะห์
[out] output
การอ้างอิงไปยังพื้นที่เก็บข้อมูลบูลีนซึ่งค่าที่แยกวิเคราะห์แล้วจะจัดเก็บเมื่อใช้งานสำเร็จ
การส่งคืน
true สำหรับความสำเร็จ มิฉะนั้นให้ false เมื่อล้มเหลว

ParseFabricId

bool ParseFabricId(
  const char *str,
  uint64_t & fabricId,
  bool allowReserved
)

แยกวิเคราะห์รหัสผ้า Weave ในรูปแบบข้อความ

ฟังก์ชัน ParseFabricId() จะยอมรับรหัสผ้า 64 บิตที่ระบุในรูปแบบเลขฐาน 16 โดยมีหรือไม่มี "0x" นำหน้า

รายละเอียด
พารามิเตอร์
[in] str
ตัวชี้ไปยังสตริง C ที่สิ้นสุดค่า NULL ที่มีรหัส Fabric ที่จะแยกวิเคราะห์
[out] output
การอ้างอิงไปยัง uint64_t lvalue ซึ่งจะเก็บค่าที่แยกวิเคราะห์ไว้เมื่อสำเร็จ
[in] allowReserved
หากเป็น "จริง" ให้อนุญาตการแยกวิเคราะห์รหัสผ้าในช่วงที่สงวนไว้
การส่งคืน
true หากมีการแยกวิเคราะห์ค่าสำเร็จ จะ false หากไม่ จะเป็นเท็จ

ParseHexString

bool ParseHexString(
  const char *hexStr,
  uint32_t strLen,
  uint8_t *outBuf,
  uint32_t outBufSize,
  uint32_t & outDataLen
)

แยกวิเคราะห์สตริงไบต์ที่ระบุในรูปแบบเลขฐาน 16

ParseHexString() คาดหวังว่าอินพุตจะอยู่ในรูปแบบของเลขฐานสิบหกคู่ (ตัวพิมพ์เล็กหรือตัวพิมพ์ใหญ่) คู่เลขฐานสิบหกสามารถคั่นด้วยอักขระใดก็ได้ต่อไปนี้: โคลอน เซมิโคลอน คอมมา เครื่องหมายจุด หรือขีดกลาง และจะละเว้นอักขระช่องว่างที่ใดก็ได้ในสตริงอินพุต

รายละเอียด
พารามิเตอร์
[in] hexStr
ตัวชี้ไปยังสตริงที่จะแยกวิเคราะห์
[in] strLen
จำนวนอักขระใน hexStr ที่จะแยกวิเคราะห์
[in] outBuf
ตัวชี้ไปยังบัฟเฟอร์ที่จะจัดเก็บไบต์การแยกวิเคราะห์
[in] outBufSize
ขนาดของบัฟเฟอร์ที่ชี้ที่ outBuf
[out] outDataLen
การอ้างอิงไปยังจำนวนเต็มที่จะได้รับจำนวนไบต์ทั้งหมดที่แยกวิเคราะห์ ในกรณีที่ outBuf ไม่ใหญ่พอที่จะรองรับจำนวนไบต์ที่กำหนด outDataLen จะตั้งค่าเป็น UINT32_MAX
การส่งคืน
จริง หากค่าแยกวิเคราะห์สำเร็จ เป็นเท็จ หากข้อมูลอินพุตผิดรูปแบบ หรือหาก outBuf เล็กเกินไป

ParseIPAddress

bool ParseIPAddress(
  const char *str,
  IPAddress & output
)

แยกวิเคราะห์ที่อยู่ IP ในรูปแบบข้อความ

รายละเอียด
พารามิเตอร์
[in] str
ตัวชี้ไปยังสตริง C ที่สิ้นสุดค่า NULL ซึ่งมีที่อยู่ที่จะแยกวิเคราะห์
[out] output
การอ้างอิงไปยังออบเจ็กต์ IPAddress ซึ่งค่าที่แยกวิเคราะห์แล้วจะจัดเก็บเมื่อสําเร็จ
การส่งคืน
true หากมีการแยกวิเคราะห์ค่าสำเร็จ จะ false หากไม่ จะเป็นเท็จ

ParseInt

bool ParseInt(
  const char *str,
  uint64_t & output,
  int base
)

แยกวิเคราะห์และพยายามแปลงสตริงเป็นจำนวนเต็มที่ไม่มีเครื่องหมาย 64 บิต โดยใช้การตีความที่เหมาะสมตามพารามิเตอร์ฐาน

รายละเอียด
พารามิเตอร์
[in] str
ตัวชี้ไปยังสตริง C ที่สิ้นสุดค่า NULL ซึ่งแสดงจำนวนเต็มที่จะแยกวิเคราะห์
[out] output
การอ้างอิงพื้นที่เก็บข้อมูลสำหรับจำนวนเต็มที่ไม่มีเครื่องหมาย 64 บิต ซึ่งจะจัดเก็บค่าที่แยกวิเคราะห์ไว้เมื่อสำเร็จ
[in] base
ฐานตามที่ควรตีความและแยกวิเคราะห์สตริง หากเป็น 0 หรือ 16 สตริงอาจเป็นเลขฐานสิบหกและขึ้นต้นด้วย "0x" มิฉะนั้น 0 จะหมายถึง 10 ยกเว้นกรณีที่พบ 0 นำหน้าซึ่ง 8 ถูกบอกเป็นนัย
การส่งคืน
true สำหรับความสำเร็จ มิฉะนั้นให้ false เมื่อล้มเหลว

ParseInt

bool ParseInt(
  const char *str,
  uint32_t & output,
  int base
)

แยกวิเคราะห์และพยายามแปลงสตริงเป็นจำนวนเต็มที่ไม่มีเครื่องหมาย 32 บิต โดยใช้การตีความที่เหมาะสมตามพารามิเตอร์ฐาน

รายละเอียด
พารามิเตอร์
[in] str
ตัวชี้ไปยังสตริง C ที่สิ้นสุดค่า NULL ซึ่งแสดงจำนวนเต็มที่จะแยกวิเคราะห์
[out] output
การอ้างอิงพื้นที่เก็บข้อมูลสําหรับจํานวนเต็มที่ไม่มีเครื่องหมาย 32 บิต ซึ่งจะจัดเก็บค่าที่แยกวิเคราะห์ไว้เมื่อสําเร็จ
[in] base
ฐานตามที่ควรตีความและแยกวิเคราะห์สตริง หากเป็น 0 หรือ 16 สตริงอาจเป็นเลขฐานสิบหกและขึ้นต้นด้วย "0x" มิฉะนั้น 0 จะหมายถึง 10 ยกเว้นกรณีที่พบ 0 นำหน้าซึ่ง 8 ถูกบอกเป็นนัย
การส่งคืน
true สำหรับความสำเร็จ มิฉะนั้นให้ false เมื่อล้มเหลว

ParseInt

bool ParseInt(
  const char *str,
  int32_t & output,
  int base
)

แยกวิเคราะห์และพยายามแปลงสตริงเป็นจำนวนเต็มแบบมีเครื่องหมาย 32 บิต โดยใช้การตีความที่เหมาะสมตามพารามิเตอร์ฐาน

รายละเอียด
พารามิเตอร์
[in] str
ตัวชี้ไปยังสตริง C ที่สิ้นสุดค่า NULL ซึ่งแสดงจำนวนเต็มที่จะแยกวิเคราะห์
[out] output
การอ้างอิงพื้นที่เก็บข้อมูลสําหรับจํานวนเต็มที่มีเครื่องหมาย 32 บิต ซึ่งจะจัดเก็บค่าที่แยกวิเคราะห์ไว้เมื่อสําเร็จ
[in] base
ฐานตามที่ควรตีความและแยกวิเคราะห์สตริง หากเป็น 0 หรือ 16 สตริงอาจเป็นเลขฐานสิบหกและขึ้นต้นด้วย "0x" มิฉะนั้น 0 จะหมายถึง 10 ยกเว้นกรณีที่พบ 0 นำหน้าซึ่ง 8 ถูกบอกเป็นนัย
การส่งคืน
true สำหรับความสำเร็จ มิฉะนั้นให้ false เมื่อล้มเหลว

ParseInt

bool ParseInt(
  const char *str,
  uint64_t & output
)

แยกวิเคราะห์และพยายามแปลงสตริงที่ตีความเป็นค่าทศนิยมเป็นจํานวนเต็มที่ไม่มีเครื่องหมาย 64 บิต โดยใช้การตีความที่เหมาะสมตามพารามิเตอร์ฐาน

รายละเอียด
พารามิเตอร์
[in] str
ตัวชี้ไปยังสตริง C ที่สิ้นสุดค่า NULL ซึ่งแสดงจำนวนเต็มที่จะแยกวิเคราะห์
[out] output
การอ้างอิงพื้นที่เก็บข้อมูลสำหรับจำนวนเต็มที่ไม่มีเครื่องหมาย 64 บิต ซึ่งจะจัดเก็บค่าที่แยกวิเคราะห์ไว้เมื่อสำเร็จ
การส่งคืน
true สำหรับความสำเร็จ มิฉะนั้นให้ false เมื่อล้มเหลว

ParseInt

bool ParseInt(
  const char *str,
  uint32_t & output
)

แยกวิเคราะห์และพยายามแปลงสตริงที่ตีความเป็นค่าทศนิยมเป็นจํานวนเต็มที่ไม่มีเครื่องหมาย 32 บิต โดยใช้การตีความที่เหมาะสมตามพารามิเตอร์ฐาน

รายละเอียด
พารามิเตอร์
[in] str
ตัวชี้ไปยังสตริง C ที่สิ้นสุดค่า NULL ซึ่งแสดงจำนวนเต็มที่จะแยกวิเคราะห์
[out] output
การอ้างอิงพื้นที่เก็บข้อมูลสําหรับจํานวนเต็มที่ไม่มีเครื่องหมาย 32 บิต ซึ่งจะจัดเก็บค่าที่แยกวิเคราะห์ไว้เมื่อสําเร็จ
การส่งคืน
true สำหรับความสำเร็จ มิฉะนั้นให้ false เมื่อล้มเหลว

ParseInt

bool ParseInt(
  const char *str,
  int32_t & output
)

แยกวิเคราะห์และพยายามแปลงสตริงที่ตีความเป็นค่าทศนิยมเป็นจำนวนเต็มแบบมีเครื่องหมาย 32 บิต โดยใช้การตีความที่เหมาะสมตามพารามิเตอร์ฐาน

รายละเอียด
พารามิเตอร์
[in] str
ตัวชี้ไปยังสตริง C ที่สิ้นสุดค่า NULL ซึ่งแสดงจำนวนเต็มที่จะแยกวิเคราะห์
[out] output
การอ้างอิงพื้นที่เก็บข้อมูลสําหรับจํานวนเต็มที่มีเครื่องหมาย 32 บิต ซึ่งจะจัดเก็บค่าที่แยกวิเคราะห์ไว้เมื่อสําเร็จ
การส่งคืน
true สำหรับความสำเร็จ มิฉะนั้นให้ false เมื่อล้มเหลว

ParseInt

bool ParseInt(
  const char *str,
  uint16_t & output
)

แยกวิเคราะห์และพยายามแปลงสตริงที่ตีความเป็นค่าทศนิยมเป็นจํานวนเต็มที่ไม่มีเครื่องหมาย 16 บิต โดยใช้การตีความที่เหมาะสมตามพารามิเตอร์ฐาน

รายละเอียด
พารามิเตอร์
[in] str
ตัวชี้ไปยังสตริง C ที่สิ้นสุดค่า NULL ซึ่งแสดงจำนวนเต็มที่จะแยกวิเคราะห์
[out] output
การอ้างอิงพื้นที่เก็บข้อมูลสำหรับจำนวนเต็มที่ไม่มีเครื่องหมาย 16 บิต ซึ่งจะจัดเก็บค่าที่แยกวิเคราะห์ไว้เมื่อสำเร็จ
การส่งคืน
true สำหรับความสำเร็จ มิฉะนั้นให้ false เมื่อล้มเหลว

ParseInt

bool ParseInt(
  const char *str,
  int16_t & output
)

แยกวิเคราะห์และพยายามแปลงสตริงที่ตีความเป็นค่าทศนิยมเป็นจำนวนเต็มแบบมีเครื่องหมาย 16 บิต โดยใช้การตีความที่เหมาะสมตามพารามิเตอร์ฐาน

รายละเอียด
พารามิเตอร์
[in] str
ตัวชี้ไปยังสตริง C ที่สิ้นสุดค่า NULL ซึ่งแสดงจำนวนเต็มที่จะแยกวิเคราะห์
[out] output
การอ้างอิงพื้นที่เก็บข้อมูลสําหรับจํานวนเต็มที่มีเครื่องหมาย 16 บิต ซึ่งจะจัดเก็บค่าที่แยกวิเคราะห์ไว้เมื่อสําเร็จ
การส่งคืน
true สำหรับความสำเร็จ มิฉะนั้นให้ false เมื่อล้มเหลว

ParseInt

bool ParseInt(
  const char *str,
  uint8_t & output
)

แยกวิเคราะห์และพยายามแปลงสตริงที่ตีความเป็นค่าทศนิยมเป็นจำนวนเต็มที่ไม่มีเครื่องหมาย 8 บิต โดยใช้การตีความที่เหมาะสมตามพารามิเตอร์ฐาน

รายละเอียด
พารามิเตอร์
[in] str
ตัวชี้ไปยังสตริง C ที่สิ้นสุดค่า NULL ซึ่งแสดงจำนวนเต็มที่จะแยกวิเคราะห์
[out] output
การอ้างอิงพื้นที่เก็บข้อมูลสําหรับจํานวนเต็มที่ไม่มีเครื่องหมาย 8 บิต ซึ่งจะจัดเก็บค่าที่แยกวิเคราะห์ไว้เมื่อสําเร็จ
การส่งคืน
true สำหรับความสำเร็จ มิฉะนั้นให้ false เมื่อล้มเหลว

ParseNodeId

bool ParseNodeId(
  const char *str,
  uint64_t & nodeId
)

แยกวิเคราะห์รหัสโหนด Weave ในรูปแบบข้อความ

ฟังก์ชัน ParseNodeId() จะยอมรับรหัสโหนด 64 บิตที่ระบุในรูปแบบเลขฐาน 16 (มีหรือไม่มี "0x" นำหน้า) หรือคำว่า "ใดๆ" หรือ "ทั้งหมด" ซึ่งระบบจะตีความว่าเป็นรหัสโหนด Any (0xFFFFFFFFFFFFFF)

รายละเอียด
พารามิเตอร์
[in] str
ตัวชี้ไปยังสตริง C ที่สิ้นสุดค่า NULL ที่มีรหัสโหนดที่จะแยกวิเคราะห์
[out] output
การอ้างอิงไปยัง uint64_t lvalue ซึ่งจะเก็บค่าที่แยกวิเคราะห์ไว้เมื่อสำเร็จ
การส่งคืน
true หากมีการแยกวิเคราะห์ค่าสำเร็จ จะ false หากไม่ จะเป็นเท็จ

ParseSubnetId

bool ParseSubnetId(
  const char *str,
  uint16_t & subnetId
)

แยกวิเคราะห์และพยายามแปลงสตริงเป็นรหัสซับเน็ตที่ไม่มีเครื่องหมาย 16 บิต โดยตีความสตริงเป็นเลขฐานสิบหก

รายละเอียด
พารามิเตอร์
[in] str
ตัวชี้ไปยังสตริง C ที่มีค่าสิ้นสุดของค่า NULL ซึ่งแสดงรหัสซับเน็ตที่มีรูปแบบเป็นเลขฐาน 16 เพื่อแยกวิเคราะห์
[in,out] subnetId
การอ้างอิงไปยังพื้นที่เก็บข้อมูลสําหรับจํานวนเต็มที่ไม่มีเครื่องหมาย 16 บิต ซึ่งจะจัดเก็บค่ารหัสซับเน็ตที่แยกวิเคราะห์ไว้เมื่อสําเร็จ
การส่งคืน
true สำหรับความสำเร็จ มิฉะนั้นให้ false เมื่อล้มเหลว

PrintOptionHelp

void PrintOptionHelp(
  OptionSet *optSets[],
  FILE *s
)

พิมพ์ข้อความช่วยเหลือสำหรับรายการตัวเลือกที่ระบุไปยังสตรีม

รายละเอียด
พารามิเตอร์
[in] optSets
รายการตัวชี้ไปยังโครงสร้าง OptionSet ที่มีข้อความช่วยเหลือที่จะพิมพ์
[in] s
สตรีม FILE ที่ควรพิมพ์ข้อความช่วยเหลือ

PutStringWithBlankLine

void PutStringWithBlankLine(
  FILE *s,
  const char *str
)

PutStringWithNewLine

void PutStringWithNewLine(
  FILE *s,
  const char *str
)

SplitArgs

int32_t SplitArgs(
  char *argStr,
  char **& argList,
  char *initialArg
)