剖析擴充自變數
EngExtCpp 擴充架構提供方法來協助剖析傳遞至延伸模組的命令行自變數。 若要利用這些方法,延伸模組必須先宣告EXT_COMMAND宏中的命令行自變數格式。
若要略過架構所完成的命令行自變數剖析,並讓延伸模組本身剖析自變數,請將命令行描述設定為 "{{custom}}"
,並使用 GetRawArgStr 方法來取得用於剖析的命令行自變數。
命令列描述字串會在列印時自動包裝,以符合顯示的數據行寬度。 不過,換行符可以內嵌在描述字串中,使用 『\n
' 來啟動新的行。
命令列描述可以是 NULL 或空字串。 如果發生上述任一項,表示延伸模組命令不會採用任何自變數。
命令列描述
命令行自變數的描述是一個序列,其中包含兩種類型的元件:指示詞和自變數。 描述可以選擇性地包含每個指示詞的其中一個,而且最多可以包含64個自變數。
指令
指示詞會指定如何剖析自變數。 它們以雙大括弧 ('{{'
和 '}}'
) 括住。 每個指示詞都可以選擇性地在描述自變數的字串中出現零或一次。
下列指示詞可供使用:
custom
關閉延伸模組架構所完成的剖析,並讓延伸模組執行自己的剖析。
l:str
覆寫命令行自變數的預設完整描述。 延伸模組架構會針對所有自變數的完整描述使用 str 。
opt:str
覆寫具名命令的預設前置字元。 默認值為 "/-"
,允許 『/
' 或 『-
作為識別具名自變數的前置詞。
s:str
覆寫命令行自變數的預設簡短描述。 延伸模組架構會針對所有自變數的簡短描述使用 str 。
以下是指示詞的一些範例。 下列字串是由剖析自己的自變數的擴充命令所使用。 它也提供簡短和冗長的描述,以搭配自動 !help 擴充功能命令使用:
{{custom}}{{s:<arg1> <arg2>}}{{l:arg1 - Argument 1\narg2 - Argument 2}}
下列字串會將自變數選項前置字元變更為 『/
' 或 『-
』 。 使用這個指示詞時,會使用 '+arg
' 和 ':arg
' 來指定自變數,而不是 '/arg
' 和 '-arg
'
{{opt:+:}}
參數
自變數可以是兩種類型:具名和未命名。 未命名的自變數會以位置讀取。 這兩種類型的自變數也有顯示名稱,由 help 命令使用。
自變數描述會以單大括弧 ('{'
和 '}'
) 括住。
每個自變數描述都有下列語法:
{[optname];[type[,flags]];[argname];[argdesc]}
其中:
optname
引數的名稱。 這是命令和依名稱擷取自變數的方法中使用的名稱。 這個名稱是選擇性的。 如果存在,自變數會變成「具名自變數」;它可以出現在命令行上的任何位置,並依名稱參考。 如果不存在,自變數會變成「未命名的自變數」;它在命令行上的位置很重要,而且相對於其他未命名自變數的位置會參考它。
type
引數型別。 這會影響剖析自變數的方式及其擷取方式。 類型參數可以有下列其中一個值:
b
布林值類型。 自變數存在或不存在。 您可以使用 HasArg 擷取具名布爾值自變數。
e[d][s][bits]
表達式類型。 自變數具有數值。 您可以使用 GetArgU64 擷取具名表示式自變數,並使用 GetUnnamedArgU64 來擷取未命名的表達式自變數。
d
表達式限制為自變數字串中的下一個空格字元。 如果不存在,表達式評估工具會取用命令行中的字元,直到判斷它到達表達式結尾為止。
表達式的值會帶正負號。 否則,表達式的值為不帶正負號。
位
自變數值中的位數。 位的最大值為 64。
字串類型。 字串限制為下一個空格字元。 您可以使用 GetArgStr 擷取具名字符串自變數,而未命名的字串自變數可以使用 GetUnnamedArgStr 來擷取。
x
字串類型。 自變數是命令行的其餘部分。 使用 GetArgStr 或 GetUnnamedArgStr 來擷取自變數,如同 s 字串類型一樣。
flags
自變數旗標。 這些會決定剖析器如何處理自變數。 flags 參數可以有下列其中一個值:
d=expr
自變數的預設值。 如果命令行上沒有自變數,則自變數會設定為 expr。 預設值是根據自變數類型剖析的字串。
ds
預設值不會顯示在說明所提供的自變數描述中。
o
引數是選擇性的。 這是具名自變數的預設值。
r
自變數是必要的。 這是未命名自變數的預設值。
argname
自變數的顯示名稱。 這是自動 !help extension 命令和自動 /? 或 -? 命令行自變數所使用的名稱。 列印命令列選項摘要時使用。
argdesc
自變數的描述。 這是自動 !help 延伸模組和自動 “/?” 或 “-?” 命令行自變數所列印的描述。
以下是一些自變數描述的範例。 下列表達式會定義接受單一選擇性表達式自變數的命令。 自變數必須符合 32 位。 如果命令行上沒有 自變數,則會使用0x100的預設值。
{;e32,o,d=0x100;flags;Flags to control command}
下列表達式會定義具有選擇性布爾值 「/v」 自變數和必要未命名字符串自變數的命令。
{v;b;;Verbose mode}{;s;name;Name of object}
下列表達式會定義具有選擇性具名表達式自變數 /oname expr 和選擇性具名字符串自變數 /eol str 的命令。 如果 /eol 存在,其值將會設定為命令行的其餘部分,而且不會剖析任何進一步的自變數。
{oname;e;expr;Address of object}{eol;x;str;Commands to use}
命令行
以下是在命令列上剖析自變數的一些方式清單:
具名表達式和字串自變數的值會遵循命令行上的名稱。 例如, /name expr 或 /name str。
針對具名布爾自變數,如果名稱出現在命令行上,則值為 true;否則為 false。
您可以在命令列上將多個單一字元命名為 Boolean 選項群組在一起。 例如,“/a /b /c” 可以使用速記表示法 “/abc” 來撰寫(除非已經有名為 “abc” 的自變數)。
如果命令行包含具名自變數 “?” - 例如 “/?” 和 “-?” - 自變數剖析結尾,並顯示延伸模組的說明文字。
剖析內部
自變數剖析器會使用數種方法來設定自變數。
SetUnnamedArg 方法會變更未命名自變數的值。 此外,為了方便起見,SetUnnamedArgStr 和 SetUnnamedArgU64 方法會分別設定未命名的字串串和表示式自變數。
具名自變數也有類似的方法。 SetArg 用來變更任何具名自變數的值,而 SetArgStr 和 SetArgU64 分別用於具名字符串和表達式自變數。