VirtualBox

Changeset 77595 in vbox for trunk/src/VBox


Ignore:
Timestamp:
Mar 7, 2019 12:42:31 PM (6 years ago)
Author:
vboxsync
Message:

VBoxManage: Re-do help category handling (command/sub-command specific help) for old-style commands to lift the low limit of the bit field approach for everything. This is now much closer to the handling of new-style commands, but far from converting anything old. While at it I eliminated the need to define an entry in the (old-style) USAGECATEGORY enum for new-style commands.

Location:
trunk/src/VBox/Frontends/VBoxManage
Files:
8 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/Frontends/VBoxManage/VBoxInternalManage.cpp

    r76553 r77595  
    135135 * Print the usage info.
    136136 */
    137 void printUsageInternal(USAGECATEGORY u64Cmd, PRTSTREAM pStrm)
    138 {
     137void printUsageInternal(USAGECATEGORY enmCommand, PRTSTREAM pStrm)
     138{
     139    Assert(enmCommand != USAGE_INVALID);
     140    Assert(enmCommand != USAGE_S_NEWCMD);
     141    Assert(enmCommand != USAGE_S_DUMPOPTS);
    139142    RTStrmPrintf(pStrm,
    140143        "Usage: VBoxManage internalcommands <command> [command arguments]\n"
     
    147150        "         incompatible ways without warning.\n",
    148151
    149         (u64Cmd & USAGE_LOADMAP)
     152        (enmCommand == USAGE_I_LOADMAP || enmCommand == USAGE_S_ALL)
    150153        ? "  loadmap <vmname|uuid> <symfile> <address> [module] [subtrahend] [segment]\n"
    151154          "      This will instruct DBGF to load the given map file\n"
     
    153156          "\n"
    154157        : "",
    155         (u64Cmd & USAGE_LOADSYMS)
     158        (enmCommand == USAGE_I_LOADSYMS || enmCommand == USAGE_S_ALL)
    156159        ? "  loadsyms <vmname|uuid> <symfile> [delta] [module] [module address]\n"
    157160          "      This will instruct DBGF to load the given symbol file\n"
     
    159162          "\n"
    160163        : "",
    161         (u64Cmd & USAGE_SETHDUUID)
     164        (enmCommand == USAGE_I_SETHDUUID || enmCommand == USAGE_S_ALL)
    162165        ? "  sethduuid <filepath> [<uuid>]\n"
    163166          "       Assigns a new UUID to the given image file. This way, multiple copies\n"
     
    165168          "\n"
    166169        : "",
    167         (u64Cmd & USAGE_SETHDPARENTUUID)
     170        (enmCommand == USAGE_I_SETHDPARENTUUID || enmCommand == USAGE_S_ALL)
    168171        ? "  sethdparentuuid <filepath> <uuid>\n"
    169172          "       Assigns a new parent UUID to the given image file.\n"
    170173          "\n"
    171174        : "",
    172         (u64Cmd & USAGE_DUMPHDINFO)
     175        (enmCommand == USAGE_I_DUMPHDINFO || enmCommand == USAGE_S_ALL)
    173176        ?  "  dumphdinfo <filepath>\n"
    174177           "       Prints information about the image at the given location.\n"
    175178           "\n"
    176179        : "",
    177         (u64Cmd & USAGE_LISTPARTITIONS)
     180        (enmCommand == USAGE_I_LISTPARTITIONS || enmCommand == USAGE_S_ALL)
    178181        ? "  listpartitions -rawdisk <diskname>\n"
    179182          "       Lists all partitions on <diskname>.\n"
    180183          "\n"
    181184        : "",
    182         (u64Cmd & USAGE_CREATERAWVMDK)
     185        (enmCommand == USAGE_I_CREATERAWVMDK || enmCommand == USAGE_S_ALL)
    183186        ? "  createrawvmdk -filename <filename> -rawdisk <diskname>\n"
    184187          "                [-partitions <list of partition numbers> [-mbr <filename>] ]\n"
     
    198201          "\n"
    199202        : "",
    200         (u64Cmd & USAGE_RENAMEVMDK)
     203        (enmCommand == USAGE_I_RENAMEVMDK || enmCommand == USAGE_S_ALL)
    201204        ? "  renamevmdk -from <filename> -to <filename>\n"
    202205          "       Renames an existing VMDK image, including the base file and all its extents.\n"
    203206          "\n"
    204207        : "",
    205         (u64Cmd & USAGE_CONVERTTORAW)
     208        (enmCommand == USAGE_I_CONVERTTORAW || enmCommand == USAGE_S_ALL)
    206209        ? "  converttoraw [-format <fileformat>] <filename> <outputfile>"
    207210#ifdef ENABLE_CONVERT_RAW_TO_STDOUT
     
    216219          "\n"
    217220        : "",
    218         (u64Cmd & USAGE_CONVERTHD)
     221        (enmCommand == USAGE_I_CONVERTHD || enmCommand == USAGE_S_ALL)
    219222        ? "  converthd [-srcformat VDI|VMDK|VHD|RAW]\n"
    220223          "            [-dstformat VDI|VMDK|VHD|RAW]\n"
     
    223226          "\n"
    224227        : "",
    225         (u64Cmd & USAGE_REPAIRHD)
     228        (enmCommand == USAGE_I_REPAIRHD || enmCommand == USAGE_S_ALL)
    226229        ? "  repairhd [-dry-run]\n"
    227230          "           [-format VDI|VMDK|VHD|...]\n"
     
    231234        : "",
    232235#ifdef RT_OS_WINDOWS
    233         (u64Cmd & USAGE_MODINSTALL)
     236        (enmCommand == USAGE_I_MODINSTALL || enmCommand == USAGE_S_ALL)
    234237        ? "  modinstall\n"
    235238          "       Installs the necessary driver for the host OS\n"
    236239          "\n"
    237240        : "",
    238         (u64Cmd & USAGE_MODUNINSTALL)
     241        (enmCommand == USAGE_I_MODUNINSTALL || enmCommand == USAGE_S_ALL)
    239242        ? "  moduninstall\n"
    240243          "       Deinstalls the driver\n"
     
    245248        "",
    246249#endif
    247         (u64Cmd & USAGE_DEBUGLOG)
     250        (enmCommand == USAGE_I_DEBUGLOG || enmCommand == USAGE_S_ALL)
    248251        ? "  debuglog <vmname|uuid> [--enable|--disable] [--flags todo]\n"
    249252          "           [--groups todo] [--destinations todo]\n"
     
    251254          "\n"
    252255        : "",
    253         (u64Cmd & USAGE_PASSWORDHASH)
    254         ? "  passwordhash <passsword>\n"
     256        (enmCommand == USAGE_I_PASSWORDHASH || enmCommand == USAGE_S_ALL)
     257        ? "  passwordhash <password>\n"
    255258          "       Generates a password hash.\n"
    256259          "\n"
    257260        : "",
    258         (u64Cmd & USAGE_GUESTSTATS)
     261        (enmCommand == USAGE_I_GUESTSTATS || enmCommand == USAGE_S_ALL)
    259262        ? "  gueststats <vmname|uuid> [--interval <seconds>]\n"
    260263          "       Obtains and prints internal guest statistics.\n"
     
    627630        uuidType = HDUUID;
    628631        if (argc != 3 && argc != 2)
    629             return errorSyntax(USAGE_SETHDUUID, "Not enough parameters");
     632            return errorSyntax(USAGE_I_SETHDUUID, "Not enough parameters");
    630633        /* if specified, take UUID, otherwise generate a new one */
    631634        if (argc == 3)
    632635        {
    633636            if (RT_FAILURE(RTUuidFromStr(&rtuuid, argv[2])))
    634                 return errorSyntax(USAGE_SETHDUUID, "Invalid UUID parameter");
     637                return errorSyntax(USAGE_I_SETHDUUID, "Invalid UUID parameter");
    635638            uuid = argv[2];
    636639        } else
     
    641644        uuidType = HDPARENTUUID;
    642645        if (argc != 3)
    643             return errorSyntax(USAGE_SETHDPARENTUUID, "Not enough parameters");
     646            return errorSyntax(USAGE_I_SETHDPARENTUUID, "Not enough parameters");
    644647        if (RT_FAILURE(RTUuidFromStr(&rtuuid, argv[2])))
    645             return errorSyntax(USAGE_SETHDPARENTUUID, "Invalid UUID parameter");
     648            return errorSyntax(USAGE_I_SETHDPARENTUUID, "Invalid UUID parameter");
    646649        uuid = argv[2];
    647650    }
    648651    else
    649         return errorSyntax(USAGE_SETHDUUID, "Invalid invocation");
     652        return errorSyntax(USAGE_I_SETHDUUID, "Invalid invocation");
    650653
    651654    /* just try it */
     
    699702    if (argc != 1)
    700703    {
    701         return errorSyntax(USAGE_DUMPHDINFO, "Not enough parameters");
     704        return errorSyntax(USAGE_I_DUMPHDINFO, "Not enough parameters");
    702705    }
    703706
     
    10931096        else
    10941097        {
    1095             return errorSyntax(USAGE_LISTPARTITIONS, "Invalid parameter '%s'", argv[i]);
     1098            return errorSyntax(USAGE_I_LISTPARTITIONS, "Invalid parameter '%s'", argv[i]);
    10961099        }
    10971100    }
    10981101
    10991102    if (rawdisk.isEmpty())
    1100         return errorSyntax(USAGE_LISTPARTITIONS, "Mandatory parameter -rawdisk missing");
     1103        return errorSyntax(USAGE_I_LISTPARTITIONS, "Mandatory parameter -rawdisk missing");
    11011104
    11021105    RTFILE hRawFile;
     
    12101213#endif /* RT_OS_LINUX || RT_OS_FREEBSD */
    12111214        else
    1212             return errorSyntax(USAGE_CREATERAWVMDK, "Invalid parameter '%s'", argv[i]);
     1215            return errorSyntax(USAGE_I_CREATERAWVMDK, "Invalid parameter '%s'", argv[i]);
    12131216    }
    12141217
    12151218    if (filename.isEmpty())
    1216         return errorSyntax(USAGE_CREATERAWVMDK, "Mandatory parameter -filename missing");
     1219        return errorSyntax(USAGE_I_CREATERAWVMDK, "Mandatory parameter -filename missing");
    12171220    if (rawdisk.isEmpty())
    1218         return errorSyntax(USAGE_CREATERAWVMDK, "Mandatory parameter -rawdisk missing");
     1221        return errorSyntax(USAGE_I_CREATERAWVMDK, "Mandatory parameter -rawdisk missing");
    12191222    if (!pszPartitions && pszMBRFilename)
    1220         return errorSyntax(USAGE_CREATERAWVMDK, "The parameter -mbr is only valid when the parameter -partitions is also present");
     1223        return errorSyntax(USAGE_I_CREATERAWVMDK, "The parameter -mbr is only valid when the parameter -partitions is also present");
    12211224
    12221225#ifdef RT_OS_DARWIN
     
    18971900        else
    18981901        {
    1899             return errorSyntax(USAGE_RENAMEVMDK, "Invalid parameter '%s'", argv[i]);
     1902            return errorSyntax(USAGE_I_RENAMEVMDK, "Invalid parameter '%s'", argv[i]);
    19001903        }
    19011904    }
    19021905
    19031906    if (src.isEmpty())
    1904         return errorSyntax(USAGE_RENAMEVMDK, "Mandatory parameter -from missing");
     1907        return errorSyntax(USAGE_I_RENAMEVMDK, "Mandatory parameter -from missing");
    19051908    if (dst.isEmpty())
    1906         return errorSyntax(USAGE_RENAMEVMDK, "Mandatory parameter -to missing");
     1909        return errorSyntax(USAGE_I_RENAMEVMDK, "Mandatory parameter -to missing");
    19071910
    19081911    PVDISK pDisk = NULL;
     
    19701973        else
    19711974        {
    1972             return errorSyntax(USAGE_CONVERTTORAW, "Invalid parameter '%s'", argv[i]);
     1975            return errorSyntax(USAGE_I_CONVERTTORAW, "Invalid parameter '%s'", argv[i]);
    19731976        }
    19741977    }
    19751978
    19761979    if (src.isEmpty())
    1977         return errorSyntax(USAGE_CONVERTTORAW, "Mandatory filename parameter missing");
     1980        return errorSyntax(USAGE_I_CONVERTTORAW, "Mandatory filename parameter missing");
    19781981    if (dst.isEmpty())
    1979         return errorSyntax(USAGE_CONVERTTORAW, "Mandatory outputfile parameter missing");
     1982        return errorSyntax(USAGE_I_CONVERTTORAW, "Mandatory outputfile parameter missing");
    19801983
    19811984    PVDISK pDisk = NULL;
     
    21352138        else
    21362139        {
    2137             return errorSyntax(USAGE_CONVERTHD, "Invalid parameter '%s'", argv[i]);
     2140            return errorSyntax(USAGE_I_CONVERTHD, "Invalid parameter '%s'", argv[i]);
    21382141        }
    21392142    }
    21402143
    21412144    if (src.isEmpty())
    2142         return errorSyntax(USAGE_CONVERTHD, "Mandatory input image parameter missing");
     2145        return errorSyntax(USAGE_I_CONVERTHD, "Mandatory input image parameter missing");
    21432146    if (dst.isEmpty())
    2144         return errorSyntax(USAGE_CONVERTHD, "Mandatory output image parameter missing");
     2147        return errorSyntax(USAGE_I_CONVERTHD, "Mandatory output image parameter missing");
    21452148
    21462149
     
    22542257        else
    22552258        {
    2256             return errorSyntax(USAGE_REPAIRHD, "Invalid parameter '%s'", argv[i]);
     2259            return errorSyntax(USAGE_I_REPAIRHD, "Invalid parameter '%s'", argv[i]);
    22572260        }
    22582261    }
    22592262
    22602263    if (image.isEmpty())
    2261         return errorSyntax(USAGE_REPAIRHD, "Mandatory input image parameter missing");
     2264        return errorSyntax(USAGE_I_REPAIRHD, "Mandatory input image parameter missing");
    22622265
    22632266    PVDINTERFACE     pVDIfs = NULL;
     
    23332336     */
    23342337    if (argc < 1)
    2335         return errorSyntax(USAGE_DEBUGLOG, "Missing VM name/UUID");
     2338        return errorSyntax(USAGE_I_DEBUGLOG, "Missing VM name/UUID");
    23362339
    23372340    ComPtr<IMachine> ptrMachine;
     
    24212424
    24222425            default:
    2423                 return errorGetOpt(USAGE_DEBUGLOG, ch, &ValueUnion);
     2426                return errorGetOpt(USAGE_I_DEBUGLOG, ch, &ValueUnion);
    24242427        }
    24252428    }
     
    24492452    /* one parameter, the password to hash */
    24502453    if (argc != 1)
    2451         return errorSyntax(USAGE_PASSWORDHASH, "password to hash required");
     2454        return errorSyntax(USAGE_I_PASSWORDHASH, "password to hash required");
    24522455
    24532456    uint8_t abDigest[RTSHA256_HASH_SIZE];
     
    24682471    /* one parameter, guest name */
    24692472    if (argc < 1)
    2470         return errorSyntax(USAGE_GUESTSTATS, "Missing VM name/UUID");
     2473        return errorSyntax(USAGE_I_GUESTSTATS, "Missing VM name/UUID");
    24712474
    24722475    /*
     
    24932496
    24942497            default:
    2495                 return errorGetOpt(USAGE_GUESTSTATS, ch, &ValueUnion);
     2498                return errorGetOpt(USAGE_I_GUESTSTATS, ch, &ValueUnion);
    24962499        }
    24972500    }
    24982501
    24992502    if (argc > 1 && aUpdateInterval == 0)
    2500         return errorSyntax(USAGE_GUESTSTATS, "Invalid update interval specified");
     2503        return errorSyntax(USAGE_I_GUESTSTATS, "Invalid update interval specified");
    25012504
    25022505    RTPrintf("argc=%d interval=%u\n", argc, aUpdateInterval);
     
    25532556    /* at least a command is required */
    25542557    if (a->argc < 1)
    2555         return errorSyntax(USAGE_ALL, "Command missing");
     2558        return errorSyntax(USAGE_S_ALL, "Command missing");
    25562559
    25572560    /*
     
    25932596
    25942597    /* default: */
    2595     return errorSyntax(USAGE_ALL, "Invalid command '%s'", a->argv[0]);
     2598    return errorSyntax(USAGE_S_ALL, "Invalid command '%s'", a->argv[0]);
    25962599}
    25972600
  • trunk/src/VBox/Frontends/VBoxManage/VBoxManage.cpp

    r76553 r77595  
    9898static const VBMGCMD g_aCommands[] =
    9999{
    100     { "internalcommands",   0,                      VBMG_CMD_TODO, handleInternalCommands,     0 },
     100    { "internalcommands",   USAGE_INVALID,          VBMG_CMD_TODO, handleInternalCommands,     0 },
    101101    { "list",               USAGE_LIST,             VBMG_CMD_TODO, handleList,                 0 },
    102102    { "showvminfo",         USAGE_SHOWVMINFO,       VBMG_CMD_TODO, handleShowVMInfo,           0 },
     
    122122    { "startvm",            USAGE_STARTVM,          VBMG_CMD_TODO, handleStartVM,              0 },
    123123    { "controlvm",          USAGE_CONTROLVM,        VBMG_CMD_TODO, handleControlVM,            0 },
    124     { "unattended",         USAGE_UNATTENDED, HELP_CMD_UNATTENDED, handleUnattended,    0 },
     124    { "unattended",         USAGE_S_NEWCMD,   HELP_CMD_UNATTENDED, handleUnattended,           0 },
    125125    { "discardstate",       USAGE_DISCARDSTATE,     VBMG_CMD_TODO, handleDiscardState,         0 },
    126126    { "adoptstate",         USAGE_ADOPTSTATE,       VBMG_CMD_TODO, handleAdoptState,           0 },
     
    132132    { "showhdinfo",         USAGE_SHOWMEDIUMINFO,   VBMG_CMD_TODO, handleShowMediumInfo,       0 }, /* backward compatibility */
    133133    { "showvdiinfo",        USAGE_SHOWMEDIUMINFO,   VBMG_CMD_TODO, handleShowMediumInfo,       0 }, /* backward compatibility */
    134     { "mediumio",           USAGE_MEDIUMIO,     HELP_CMD_MEDIUMIO, handleMediumIO,             0 },
     134    { "mediumio",           USAGE_S_NEWCMD,     HELP_CMD_MEDIUMIO, handleMediumIO,             0 },
    135135    { "getextradata",       USAGE_GETEXTRADATA,     VBMG_CMD_TODO, handleGetExtraData,         0 },
    136136    { "setextradata",       USAGE_SETEXTRADATA,     VBMG_CMD_TODO, handleSetExtraData,         0 },
     
    154154    { "natnetwork",         USAGE_NATNETWORK,       VBMG_CMD_TODO, handleNATNetwork,           0 },
    155155#endif
    156     { "extpack",            USAGE_EXTPACK,       HELP_CMD_EXTPACK, handleExtPack,              0 },
     156    { "extpack",            USAGE_S_NEWCMD,      HELP_CMD_EXTPACK, handleExtPack,              0 },
    157157    { "bandwidthctl",       USAGE_BANDWIDTHCONTROL, VBMG_CMD_TODO, handleBandwidthControl,     0 },
    158     { "debugvm",            USAGE_DEBUGVM,       HELP_CMD_DEBUGVM, handleDebugVM,              0 },
     158    { "debugvm",            USAGE_S_NEWCMD,      HELP_CMD_DEBUGVM, handleDebugVM,              0 },
    159159    { "convertfromraw",     USAGE_CONVERTFROMRAW,   VBMG_CMD_TODO, handleConvertFromRaw,       VBMG_CMD_F_NO_COM },
    160160    { "convertdd",          USAGE_CONVERTFROMRAW,   VBMG_CMD_TODO, handleConvertFromRaw,       VBMG_CMD_F_NO_COM },
     
    497497            {
    498498                showLogo(g_pStdOut);
    499                 printUsage(USAGE_ALL, ~0U, g_pStdOut);
     499                printUsage(USAGE_S_ALL, RTMSGREFENTRYSTR_SCOPE_GLOBAL, g_pStdOut);
    500500                return 0;
    501501            }
     
    524524            /* Special option to dump really all commands,
    525525             * even the ones not understood on this platform. */
    526             printUsage(USAGE_DUMPOPTS, ~0U, g_pStdOut);
     526            printUsage(USAGE_S_DUMPOPTS, RTMSGREFENTRYSTR_SCOPE_GLOBAL, g_pStdOut);
    527527            return 0;
    528528        }
     
    619619        && (   fShowHelp
    620620            || (   argc - iCmdArg == 0
    621                 && pCmd->enmHelpCat != 0)))
     621                && pCmd->enmHelpCat != USAGE_INVALID)))
    622622    {
    623623        if (pCmd->enmCmdHelp == VBMG_CMD_TODO)
    624             printUsage(pCmd->enmHelpCat, ~0U, g_pStdOut);
     624            printUsage(pCmd->enmHelpCat, RTMSGREFENTRYSTR_SCOPE_GLOBAL, g_pStdOut);
    625625        else if (fShowHelp)
    626626            printHelp(g_pStdOut);
     
    636636            for (unsigned i = 0; i < RT_ELEMENTS(g_aCommands); i++)
    637637                if (   i == 0  /* skip backwards compatibility entries */
    638                     || g_aCommands[i].enmHelpCat != g_aCommands[i - 1].enmHelpCat)
     638                    || (g_aCommands[i].enmHelpCat != USAGE_S_NEWCMD
     639                        ? g_aCommands[i].enmHelpCat != g_aCommands[i - 1].enmHelpCat
     640                        : g_aCommands[i].enmCmdHelp != g_aCommands[i - 1].enmCmdHelp))
    639641                    RTPrintf("    %s\n", g_aCommands[i].pszCommand);
    640642            return RTEXITCODE_SUCCESS;
    641643        }
    642         return errorSyntax(USAGE_ALL, "Invalid command '%s'", argv[iCmd]);
     644        return errorSyntax(USAGE_S_ALL, "Invalid command '%s'", argv[iCmd]);
    643645    }
    644646
  • trunk/src/VBox/Frontends/VBoxManage/VBoxManage.h

    r76582 r77595  
    4646////////////////////////////////////////////////////////////////////////////////
    4747
    48 /** @name Syntax diagram category.
     48/** @name Syntax diagram category, i.e. the command.
    4949 * @{ */
    50 #define USAGE_DUMPOPTS              0
    51 #define USAGE_LIST                  RT_BIT_64(0)
    52 #define USAGE_SHOWVMINFO            RT_BIT_64(1)
    53 #define USAGE_REGISTERVM            RT_BIT_64(2)
    54 #define USAGE_UNREGISTERVM          RT_BIT_64(3)
    55 #define USAGE_CREATEVM              RT_BIT_64(4)
    56 #define USAGE_MODIFYVM              RT_BIT_64(5)
    57 #define USAGE_CLONEVM               RT_BIT_64(6)
    58 #define USAGE_STARTVM               RT_BIT_64(7)
    59 #define USAGE_CONTROLVM             RT_BIT_64(8)
    60 #define USAGE_DISCARDSTATE          RT_BIT_64(9)
    61 #define USAGE_SNAPSHOT              RT_BIT_64(10)
    62 #define USAGE_CLOSEMEDIUM           RT_BIT_64(11)
    63 #define USAGE_SHOWMEDIUMINFO        RT_BIT_64(12)
    64 #define USAGE_CREATEMEDIUM          RT_BIT_64(13)
    65 #define USAGE_MODIFYMEDIUM          RT_BIT_64(14)
    66 #define USAGE_CLONEMEDIUM           RT_BIT_64(15)
    67 #define USAGE_MOVEVM                RT_BIT_64(16)
    68 #define USAGE_CREATEHOSTIF          RT_BIT_64(17)
    69 #define USAGE_REMOVEHOSTIF          RT_BIT_64(18)
    70 #define USAGE_GETEXTRADATA          RT_BIT_64(19)
    71 #define USAGE_SETEXTRADATA          RT_BIT_64(20)
    72 #define USAGE_SETPROPERTY           RT_BIT_64(21)
    73 #define USAGE_USBFILTER             (RT_BIT_64(22) | RT_BIT_64(23) | RT_BIT_64(24))
    74 #define USAGE_USBFILTER_ADD         RT_BIT_64(22)
    75 #define USAGE_USBFILTER_MODIFY      RT_BIT_64(23)
    76 #define USAGE_USBFILTER_REMOVE      RT_BIT_64(24)
    77 #define USAGE_SHAREDFOLDER          (RT_BIT_64(25) | RT_BIT_64(26))
    78 #define USAGE_SHAREDFOLDER_ADD      RT_BIT_64(25)
    79 #define USAGE_SHAREDFOLDER_REMOVE   RT_BIT_64(26)
    80 #define USAGE_UNATTENDED            RT_BIT_64(27)
    81 #define USAGE_MEDIUMIO              RT_BIT_64(28)
    82 #define USAGE_LOADSYMS              RT_BIT_64(29)
    83 #define USAGE_LOADMAP               RT_BIT_64(30)
    84 #define USAGE_SETHDUUID             RT_BIT_64(31)
    85 #define USAGE_CONVERTFROMRAW        RT_BIT_64(32)
    86 #define USAGE_LISTPARTITIONS        RT_BIT_64(33)
    87 #define USAGE_CREATERAWVMDK         RT_BIT_64(34)
    88 #define USAGE_DEBUGVM               RT_BIT_64(35)
    89 #define USAGE_ADOPTSTATE            RT_BIT_64(36)
    90 #define USAGE_MODINSTALL            RT_BIT_64(37)
    91 #define USAGE_MODUNINSTALL          RT_BIT_64(38)
    92 #define USAGE_RENAMEVMDK            RT_BIT_64(39)
     50typedef enum
     51{
     52    USAGE_INVALID = 0,
     53    USAGE_LIST,
     54    USAGE_SHOWVMINFO,
     55    USAGE_REGISTERVM,
     56    USAGE_UNREGISTERVM,
     57    USAGE_CREATEVM,
     58    USAGE_MODIFYVM,
     59    USAGE_CLONEVM,
     60    USAGE_STARTVM,
     61    USAGE_CONTROLVM,
     62    USAGE_DISCARDSTATE,
     63    USAGE_SNAPSHOT,
     64    USAGE_CLOSEMEDIUM,
     65    USAGE_SHOWMEDIUMINFO,
     66    USAGE_CREATEMEDIUM,
     67    USAGE_MODIFYMEDIUM,
     68    USAGE_CLONEMEDIUM,
     69    USAGE_MOVEVM,
     70    USAGE_CREATEHOSTIF,
     71    USAGE_REMOVEHOSTIF,
     72    USAGE_GETEXTRADATA,
     73    USAGE_SETEXTRADATA,
     74    USAGE_SETPROPERTY,
     75    USAGE_USBFILTER,
     76    USAGE_SHAREDFOLDER,
     77    USAGE_I_LOADSYMS,
     78    USAGE_I_LOADMAP,
     79    USAGE_I_SETHDUUID,
     80    USAGE_CONVERTFROMRAW,
     81    USAGE_I_LISTPARTITIONS,
     82    USAGE_I_CREATERAWVMDK,
     83    USAGE_ADOPTSTATE,
     84    USAGE_I_MODINSTALL,
     85    USAGE_I_MODUNINSTALL,
     86    USAGE_I_RENAMEVMDK,
    9387#ifdef VBOX_WITH_GUEST_PROPS
    94 # define USAGE_GUESTPROPERTY        RT_BIT_64(40)
     88    USAGE_GUESTPROPERTY,
    9589#endif  /* VBOX_WITH_GUEST_PROPS defined */
    96 #define USAGE_CONVERTTORAW          RT_BIT_64(41)
    97 #define USAGE_METRICS               RT_BIT_64(42)
    98 #define USAGE_CONVERTHD             RT_BIT_64(43)
    99 #define USAGE_IMPORTAPPLIANCE       RT_BIT_64(44)
    100 #define USAGE_EXPORTAPPLIANCE       RT_BIT_64(45)
    101 #define USAGE_HOSTONLYIFS           RT_BIT_64(46)
    102 #define USAGE_DHCPSERVER            RT_BIT_64(47)
    103 #define USAGE_DUMPHDINFO            RT_BIT_64(48)
    104 #define USAGE_STORAGEATTACH         RT_BIT_64(49)
    105 #define USAGE_STORAGECONTROLLER     RT_BIT_64(50)
     90    USAGE_I_CONVERTTORAW,
     91    USAGE_METRICS,
     92    USAGE_I_CONVERTHD,
     93    USAGE_IMPORTAPPLIANCE,
     94    USAGE_EXPORTAPPLIANCE,
     95    USAGE_HOSTONLYIFS,
     96    USAGE_DHCPSERVER,
     97    USAGE_I_DUMPHDINFO,
     98    USAGE_STORAGEATTACH,
     99    USAGE_STORAGECONTROLLER,
    106100#ifdef VBOX_WITH_GUEST_CONTROL
    107 # define USAGE_GUESTCONTROL         RT_BIT_64(51)
     101    USAGE_GUESTCONTROL,
    108102#endif  /* VBOX_WITH_GUEST_CONTROL defined */
    109 #define USAGE_DEBUGLOG              RT_BIT_64(52)
    110 #define USAGE_SETHDPARENTUUID       RT_BIT_64(53)
    111 #define USAGE_PASSWORDHASH          RT_BIT_64(54)
    112 #define USAGE_EXTPACK               RT_BIT_64(55)
    113 #define USAGE_BANDWIDTHCONTROL      RT_BIT_64(56)
    114 #define USAGE_GUESTSTATS            RT_BIT_64(57)
    115 #define USAGE_REPAIRHD              RT_BIT_64(58)
    116 #define USAGE_NATNETWORK            RT_BIT_64(59)
    117 #define USAGE_MEDIUMPROPERTY        RT_BIT_64(60)
    118 #define USAGE_ENCRYPTMEDIUM         RT_BIT_64(61)
    119 #define USAGE_MEDIUMENCCHKPWD       RT_BIT_64(62)
    120 #define USAGE_USBDEVSOURCE          RT_BIT_64(63)
    121 #define USAGE_ALL                   (~(uint64_t)0)
     103    USAGE_I_DEBUGLOG,
     104    USAGE_I_SETHDPARENTUUID,
     105    USAGE_I_PASSWORDHASH,
     106    USAGE_BANDWIDTHCONTROL,
     107    USAGE_I_GUESTSTATS,
     108    USAGE_I_REPAIRHD,
     109    USAGE_NATNETWORK,
     110    USAGE_MEDIUMPROPERTY,
     111    USAGE_ENCRYPTMEDIUM,
     112    USAGE_MEDIUMENCCHKPWD,
     113    USAGE_USBDEVSOURCE,
     114    /* Insert new entries before this line, but only if it is not an option
     115     * to go for the new style command and help handling (see e.g. extpack,
     116     * unattend or mediumio. */
     117    USAGE_S_NEWCMD = 10000, /**< new style command with no old help support */
     118    USAGE_S_ALL,
     119    USAGE_S_DUMPOPTS
     120} USAGECATEGORY;
    122121/** @} */
    123122
     123
     124#define HELP_SCOPE_USBFILTER_ADD        RT_BIT_64(0)
     125#define HELP_SCOPE_USBFILTER_MODIFY     RT_BIT_64(1)
     126#define HELP_SCOPE_USBFILTER_REMOVE     RT_BIT_64(2)
     127
     128#define HELP_SCOPE_SHAREDFOLDER_ADD     RT_BIT_64(0)
     129#define HELP_SCOPE_SHAREDFOLDER_REMOVE  RT_BIT_64(1)
     130
    124131#ifdef VBOX_WITH_GUEST_CONTROL
    125 # define USAGE_GSTCTRL_RUN          RT_BIT(0)
    126 # define USAGE_GSTCTRL_START        RT_BIT(1)
    127 # define USAGE_GSTCTRL_COPYFROM     RT_BIT(2)
    128 # define USAGE_GSTCTRL_COPYTO       RT_BIT(3)
    129 # define USAGE_GSTCTRL_MKDIR        RT_BIT(4)
    130 # define USAGE_GSTCTRL_RMDIR        RT_BIT(5)
    131 # define USAGE_GSTCTRL_RM           RT_BIT(6)
    132 # define USAGE_GSTCTRL_MV           RT_BIT(7)
    133 # define USAGE_GSTCTRL_MKTEMP       RT_BIT(8)
    134 # define USAGE_GSTCTRL_LIST         RT_BIT(9)
    135 # define USAGE_GSTCTRL_CLOSEPROCESS RT_BIT(10)
    136 # define USAGE_GSTCTRL_CLOSESESSION RT_BIT(11)
    137 # define USAGE_GSTCTRL_STAT         RT_BIT(12)
    138 # define USAGE_GSTCTRL_UPDATEGA     RT_BIT(13)
    139 # define USAGE_GSTCTRL_WATCH        RT_BIT(14)
    140 #endif
    141 
    142 
    143 typedef uint64_t USAGECATEGORY;
     132# define HELP_SCOPE_GSTCTRL_RUN             RT_BIT(0)
     133# define HELP_SCOPE_GSTCTRL_START           RT_BIT(1)
     134# define HELP_SCOPE_GSTCTRL_COPYFROM        RT_BIT(2)
     135# define HELP_SCOPE_GSTCTRL_COPYTO          RT_BIT(3)
     136# define HELP_SCOPE_GSTCTRL_MKDIR           RT_BIT(4)
     137# define HELP_SCOPE_GSTCTRL_RMDIR           RT_BIT(5)
     138# define HELP_SCOPE_GSTCTRL_RM              RT_BIT(6)
     139# define HELP_SCOPE_GSTCTRL_MV              RT_BIT(7)
     140# define HELP_SCOPE_GSTCTRL_MKTEMP          RT_BIT(8)
     141# define HELP_SCOPE_GSTCTRL_LIST            RT_BIT(9)
     142# define HELP_SCOPE_GSTCTRL_CLOSEPROCESS    RT_BIT(10)
     143# define HELP_SCOPE_GSTCTRL_CLOSESESSION    RT_BIT(11)
     144# define HELP_SCOPE_GSTCTRL_STAT            RT_BIT(12)
     145# define HELP_SCOPE_GSTCTRL_UPDATEGA        RT_BIT(13)
     146# define HELP_SCOPE_GSTCTRL_WATCH           RT_BIT(14)
     147#endif
     148
    144149
    145150/** command handler argument */
     
    185190
    186191/* VBoxManageHelp.cpp */
    187 void printUsage(USAGECATEGORY fCategory, uint32_t fSubCategory, PRTSTREAM pStrm);
    188 RTEXITCODE errorSyntax(USAGECATEGORY fCategory, const char *pszFormat, ...);
    189 RTEXITCODE errorSyntaxEx(USAGECATEGORY fCategory, uint32_t fSubCategory, const char *pszFormat, ...);
    190 RTEXITCODE errorGetOpt(USAGECATEGORY fCategory, int rc, union RTGETOPTUNION const *pValueUnion);
    191 RTEXITCODE errorGetOptEx(USAGECATEGORY fCategory, uint32_t fSubCategory, int rc, union RTGETOPTUNION const *pValueUnion);
     192
     193/* Legacy help infrastructure, to be replaced by new one using generated help. */
     194void printUsage(USAGECATEGORY enmCommand, uint64_t fSubcommandScope, PRTSTREAM pStrm);
     195RTEXITCODE errorSyntax(USAGECATEGORY enmCommand, const char *pszFormat, ...);
     196RTEXITCODE errorSyntaxEx(USAGECATEGORY enmCommand, uint64_t fSubcommandScope, const char *pszFormat, ...);
     197RTEXITCODE errorGetOpt(USAGECATEGORY enmCommand, int rc, union RTGETOPTUNION const *pValueUnion);
     198RTEXITCODE errorGetOptEx(USAGECATEGORY enmCommand, uint64_t fSubcommandScope, int rc, union RTGETOPTUNION const *pValueUnion);
    192199RTEXITCODE errorArgument(const char *pszFormat, ...);
    193200
    194 void printUsageInternal(USAGECATEGORY fCategory, PRTSTREAM pStrm);
     201void printUsageInternal(USAGECATEGORY enmCommand, PRTSTREAM pStrm);
    195202
    196203#ifndef VBOX_ONLY_DOCS
     
    238245
    239246/* VBoxManageGuestCtrl.cpp */
    240 extern void usageGuestControl(PRTSTREAM pStrm, const char *pcszSep1, const char *pcszSep2, uint32_t fSubCategory);
     247extern void usageGuestControl(PRTSTREAM pStrm, const char *pcszSep1, const char *pcszSep2, uint64_t fSubcommandScope);
    241248
    242249#ifndef VBOX_ONLY_DOCS
  • trunk/src/VBox/Frontends/VBoxManage/VBoxManageDHCPServer.cpp

    r76553 r77595  
    261261                    else
    262262                        fVmOptionRead = true;
    263                     u8Slot = (uint8_t)~0; /* clear slor */
     263                    u8Slot = (uint8_t)~0; /* clear slot */
    264264                    pszVmName = RTStrDup(ValueUnion.psz);
    265265                }
  • trunk/src/VBox/Frontends/VBoxManage/VBoxManageGuestCtrl.cpp

    r76553 r77595  
    130130    DECLR3CALLBACKMEMBER(RTEXITCODE, pfnHandler, (struct GCTLCMDCTX *pCtx, int argc, char **argv));
    131131
    132     /** The command usage flags. */
    133     uint32_t    fCmdUsage;
     132    /** The sub-command scope flags. */
     133    uint64_t    fSubcommandScope;
    134134    /** Command context flags (GCTLCMDCTX_F_XXX). */
    135135    uint32_t    fCmdCtx;
     
    227227
    228228
    229 void usageGuestControl(PRTSTREAM pStrm, const char *pcszSep1, const char *pcszSep2, uint32_t uSubCmd)
    230 {
    231     const uint32_t fAnonSubCmds = USAGE_GSTCTRL_CLOSESESSION
    232                                 | USAGE_GSTCTRL_LIST
    233                                 | USAGE_GSTCTRL_CLOSEPROCESS
    234                                 | USAGE_GSTCTRL_CLOSESESSION
    235                                 | USAGE_GSTCTRL_UPDATEGA
    236                                 | USAGE_GSTCTRL_WATCH;
     229void usageGuestControl(PRTSTREAM pStrm, const char *pcszSep1, const char *pcszSep2, uint64_t fSubcommandScope)
     230{
     231    const uint64_t fAnonSubCmds = HELP_SCOPE_GSTCTRL_CLOSESESSION
     232                                | HELP_SCOPE_GSTCTRL_LIST
     233                                | HELP_SCOPE_GSTCTRL_CLOSEPROCESS
     234                                | HELP_SCOPE_GSTCTRL_CLOSESESSION
     235                                | HELP_SCOPE_GSTCTRL_UPDATEGA
     236                                | HELP_SCOPE_GSTCTRL_WATCH;
    237237
    238238    /*                0         1         2         3         4         5         6         7         8XXXXXXXXXX */
    239239    /*                0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 */
    240     if (~fAnonSubCmds & uSubCmd)
     240    if (~fAnonSubCmds & fSubcommandScope)
    241241        RTStrmPrintf(pStrm,
    242242                     "%s guestcontrol %s    <uuid|vmname> [--verbose|-v] [--quiet|-q]\n"
    243243                     "                              [--username <name>] [--domain <domain>]\n"
    244244                     "                              [--passwordfile <file> | --password <password>]\n%s",
    245                      pcszSep1, pcszSep2, uSubCmd == ~0U ? "\n" : "");
    246     if (uSubCmd & USAGE_GSTCTRL_RUN)
     245                     pcszSep1, pcszSep2, (fSubcommandScope & RTMSGREFENTRYSTR_SCOPE_MASK) == RTMSGREFENTRYSTR_SCOPE_GLOBAL ? "\n" : "");
     246    if (fSubcommandScope & HELP_SCOPE_GSTCTRL_RUN)
    247247        RTStrmPrintf(pStrm,
    248248                     "                              run [common-options]\n"
     
    255255                     "                              -- <program/arg0> [argument1] ... [argumentN]]\n"
    256256                     "\n");
    257     if (uSubCmd & USAGE_GSTCTRL_START)
     257    if (fSubcommandScope & HELP_SCOPE_GSTCTRL_START)
    258258        RTStrmPrintf(pStrm,
    259259                     "                              start [common-options]\n"
     
    263263                     "                              -- <program/arg0> [argument1] ... [argumentN]]\n"
    264264                     "\n");
    265     if (uSubCmd & USAGE_GSTCTRL_COPYFROM)
     265    if (fSubcommandScope & HELP_SCOPE_GSTCTRL_COPYFROM)
    266266        RTStrmPrintf(pStrm,
    267267                     "                              copyfrom [common-options]\n"
     
    274274                     "                              <guest-src0> [guest-src1 [...]]\n"
    275275                     "\n");
    276     if (uSubCmd & USAGE_GSTCTRL_COPYTO)
     276    if (fSubcommandScope & HELP_SCOPE_GSTCTRL_COPYTO)
    277277        RTStrmPrintf(pStrm,
    278278                     "                              copyto [common-options]\n"
     
    285285                     "                              <host-src0> [host-src1 [...]]\n"
    286286                     "\n");
    287     if (uSubCmd & USAGE_GSTCTRL_MKDIR)
     287    if (fSubcommandScope & HELP_SCOPE_GSTCTRL_MKDIR)
    288288        RTStrmPrintf(pStrm,
    289289                     "                              mkdir|createdir[ectory] [common-options]\n"
     
    291291                     "                              <guest directory> [...]\n"
    292292                     "\n");
    293     if (uSubCmd & USAGE_GSTCTRL_RMDIR)
     293    if (fSubcommandScope & HELP_SCOPE_GSTCTRL_RMDIR)
    294294        RTStrmPrintf(pStrm,
    295295                     "                              rmdir|removedir[ectory] [common-options]\n"
     
    297297                     "                              <guest directory> [...]\n"
    298298                     "\n");
    299     if (uSubCmd & USAGE_GSTCTRL_RM)
     299    if (fSubcommandScope & HELP_SCOPE_GSTCTRL_RM)
    300300        RTStrmPrintf(pStrm,
    301301                     "                              removefile|rm [common-options] [-f|--force]\n"
    302302                     "                              <guest file> [...]\n"
    303303                     "\n");
    304     if (uSubCmd & USAGE_GSTCTRL_MV)
     304    if (fSubcommandScope & HELP_SCOPE_GSTCTRL_MV)
    305305        RTStrmPrintf(pStrm,
    306306                     "                              mv|move|ren[ame] [common-options]\n"
    307307                     "                              <source> [source1 [...]] <dest>\n"
    308308                     "\n");
    309     if (uSubCmd & USAGE_GSTCTRL_MKTEMP)
     309    if (fSubcommandScope & HELP_SCOPE_GSTCTRL_MKTEMP)
    310310        RTStrmPrintf(pStrm,
    311311                     "                              mktemp|createtemp[orary] [common-options]\n"
     
    313313                     "                              <template>\n"
    314314                     "\n");
    315     if (uSubCmd & USAGE_GSTCTRL_STAT)
     315    if (fSubcommandScope & HELP_SCOPE_GSTCTRL_STAT)
    316316        RTStrmPrintf(pStrm,
    317317                     "                              stat [common-options]\n"
     
    322322     * Command not requiring authentication.
    323323     */
    324     if (fAnonSubCmds & uSubCmd)
     324    if (fAnonSubCmds & fSubcommandScope)
    325325    {
    326326        /*                0         1         2         3         4         5         6         7         8XXXXXXXXXX */
     
    328328        RTStrmPrintf(pStrm,
    329329                     "%s guestcontrol %s    <uuid|vmname> [--verbose|-v] [--quiet|-q]\n%s",
    330                      pcszSep1, pcszSep2, uSubCmd == ~0U ? "\n" : "");
    331         if (uSubCmd & USAGE_GSTCTRL_LIST)
     330                     pcszSep1, pcszSep2, (fSubcommandScope & RTMSGREFENTRYSTR_SCOPE_MASK) == RTMSGREFENTRYSTR_SCOPE_GLOBAL ? "\n" : "");
     331        if (fSubcommandScope & HELP_SCOPE_GSTCTRL_LIST)
    332332            RTStrmPrintf(pStrm,
    333333                     "                              list <all|sessions|processes|files> [common-opts]\n"
    334334                     "\n");
    335         if (uSubCmd & USAGE_GSTCTRL_CLOSEPROCESS)
     335        if (fSubcommandScope & HELP_SCOPE_GSTCTRL_CLOSEPROCESS)
    336336            RTStrmPrintf(pStrm,
    337337                     "                              closeprocess [common-options]\n"
     
    340340                     "                              <PID1> [PID1 [...]]\n"
    341341                     "\n");
    342         if (uSubCmd & USAGE_GSTCTRL_CLOSESESSION)
     342        if (fSubcommandScope & HELP_SCOPE_GSTCTRL_CLOSESESSION)
    343343            RTStrmPrintf(pStrm,
    344344                     "                              closesession [common-options]\n"
     
    346346                     "                                | --session-name <name or pattern> >\n"
    347347                     "\n");
    348         if (uSubCmd & USAGE_GSTCTRL_UPDATEGA)
     348        if (fSubcommandScope & HELP_SCOPE_GSTCTRL_UPDATEGA)
    349349            RTStrmPrintf(pStrm,
    350350                     "                              updatega|updateguestadditions|updateadditions\n"
     
    353353                     "                              [-- [<argument1>] ... [<argumentN>]]\n"
    354354                     "\n");
    355         if (uSubCmd & USAGE_GSTCTRL_WATCH)
     355        if (fSubcommandScope & HELP_SCOPE_GSTCTRL_WATCH)
    356356            RTStrmPrintf(pStrm,
    357357                     "                              watch [common-options]\n"
     
    966966    }
    967967    else
    968         rcExit = errorSyntaxEx(USAGE_GUESTCONTROL, pCtx->pCmdDef->fCmdUsage, "No user name specified!");
     968        rcExit = errorSyntaxEx(USAGE_GUESTCONTROL, pCtx->pCmdDef->fSubcommandScope, "No user name specified!");
    969969
    970970    pCtx->fPostOptionParsingInited = rcExit == RTEXITCODE_SUCCESS;
     
    13201320                    if (   ValueUnion.psz[0] == '\0'
    13211321                        || ValueUnion.psz[0] == '=')
    1322                         return errorSyntaxEx(USAGE_GUESTCONTROL, USAGE_GSTCTRL_RUN,
     1322                        return errorSyntaxEx(USAGE_GUESTCONTROL, HELP_SCOPE_GSTCTRL_RUN,
    13231323                                             "Invalid argument variable[=value]: '%s'", ValueUnion.psz);
    13241324                    aEnv.push_back(Bstr(ValueUnion.psz).raw());
     
    13901390
    13911391                default:
    1392                     return errorGetOptEx(USAGE_GUESTCONTROL, USAGE_GSTCTRL_RUN, ch, &ValueUnion);
     1392                    return errorGetOptEx(USAGE_GUESTCONTROL, HELP_SCOPE_GSTCTRL_RUN, ch, &ValueUnion);
    13931393
    13941394            } /* switch */
     
    13971397        /* Must have something to execute. */
    13981398        if (!pszImage || !*pszImage)
    1399             return errorSyntaxEx(USAGE_GUESTCONTROL, USAGE_GSTCTRL_RUN, "No executable specified!");
     1399            return errorSyntaxEx(USAGE_GUESTCONTROL, HELP_SCOPE_GSTCTRL_RUN, "No executable specified!");
    14001400
    14011401        /*
     
    16681668static DECLCALLBACK(RTEXITCODE) gctlHandleRun(PGCTLCMDCTX pCtx, int argc, char **argv)
    16691669{
    1670     return gctlHandleRunCommon(pCtx, argc, argv, true /*fRunCmd*/, USAGE_GSTCTRL_RUN);
     1670    return gctlHandleRunCommon(pCtx, argc, argv, true /*fRunCmd*/, HELP_SCOPE_GSTCTRL_RUN);
    16711671}
    16721672
     
    16741674static DECLCALLBACK(RTEXITCODE) gctlHandleStart(PGCTLCMDCTX pCtx, int argc, char **argv)
    16751675{
    1676     return gctlHandleRunCommon(pCtx, argc, argv, false /*fRunCmd*/, USAGE_GSTCTRL_START);
     1676    return gctlHandleRunCommon(pCtx, argc, argv, false /*fRunCmd*/, HELP_SCOPE_GSTCTRL_START);
    16771677}
    16781678
     
    17181718    bool fFollow = false;
    17191719    bool fRecursive = false;
    1720     uint32_t uUsage = fHostToGuest ? USAGE_GSTCTRL_COPYTO : USAGE_GSTCTRL_COPYFROM;
     1720    uint64_t uUsage = fHostToGuest ? HELP_SCOPE_GSTCTRL_COPYTO : HELP_SCOPE_GSTCTRL_COPYFROM;
    17211721
    17221722    int vrc = VINF_SUCCESS;
     
    20142014
    20152015            default:
    2016                 return errorGetOptEx(USAGE_GUESTCONTROL, USAGE_GSTCTRL_MKDIR, ch, &ValueUnion);
     2016                return errorGetOptEx(USAGE_GUESTCONTROL, HELP_SCOPE_GSTCTRL_MKDIR, ch, &ValueUnion);
    20172017        }
    20182018    }
    20192019
    20202020    if (!cDirsCreated)
    2021         return errorSyntaxEx(USAGE_GUESTCONTROL, USAGE_GSTCTRL_MKDIR, "No directory to create specified!");
     2021        return errorSyntaxEx(USAGE_GUESTCONTROL, HELP_SCOPE_GSTCTRL_MKDIR, "No directory to create specified!");
    20222022    return rcExit;
    20232023}
     
    21352135
    21362136            default:
    2137                 return errorGetOptEx(USAGE_GUESTCONTROL, USAGE_GSTCTRL_RMDIR, ch, &ValueUnion);
     2137                return errorGetOptEx(USAGE_GUESTCONTROL, HELP_SCOPE_GSTCTRL_RMDIR, ch, &ValueUnion);
    21382138        }
    21392139    }
    21402140
    21412141    if (!cDirRemoved)
    2142         return errorSyntaxEx(USAGE_GUESTCONTROL, USAGE_GSTCTRL_RMDIR, "No directory to remove specified!");
     2142        return errorSyntaxEx(USAGE_GUESTCONTROL, HELP_SCOPE_GSTCTRL_RMDIR, "No directory to remove specified!");
    21432143    return rcExit;
    21442144}
     
    22112211
    22122212            default:
    2213                 return errorGetOptEx(USAGE_GUESTCONTROL, USAGE_GSTCTRL_RM, ch, &ValueUnion);
     2213                return errorGetOptEx(USAGE_GUESTCONTROL, HELP_SCOPE_GSTCTRL_RM, ch, &ValueUnion);
    22142214        }
    22152215    }
    22162216
    22172217    if (!cFilesDeleted && !fForce)
    2218         return errorSyntaxEx(USAGE_GUESTCONTROL, USAGE_GSTCTRL_RM, "No file to remove specified!");
     2218        return errorSyntaxEx(USAGE_GUESTCONTROL, HELP_SCOPE_GSTCTRL_RM, "No file to remove specified!");
    22192219    return rcExit;
    22202220}
     
    22642264
    22652265                default:
    2266                     return errorGetOptEx(USAGE_GUESTCONTROL, USAGE_GSTCTRL_MV, ch, &ValueUnion);
     2266                    return errorGetOptEx(USAGE_GUESTCONTROL, HELP_SCOPE_GSTCTRL_MV, ch, &ValueUnion);
    22672267            }
    22682268        }
     
    22782278    size_t cSources = vecSources.size();
    22792279    if (!cSources)
    2280         return errorSyntaxEx(USAGE_GUESTCONTROL, USAGE_GSTCTRL_MV,
     2280        return errorSyntaxEx(USAGE_GUESTCONTROL, HELP_SCOPE_GSTCTRL_MV,
    22812281                             "No source(s) to move specified!");
    22822282    if (cSources < 2)
    2283         return errorSyntaxEx(USAGE_GUESTCONTROL, USAGE_GSTCTRL_MV,
     2283        return errorSyntaxEx(USAGE_GUESTCONTROL, HELP_SCOPE_GSTCTRL_MV,
    22842284                             "No destination specified!");
    22852285
     
    24212421                    strTemplate = ValueUnion.psz;
    24222422                else
    2423                     return errorSyntaxEx(USAGE_GUESTCONTROL, USAGE_GSTCTRL_MKTEMP,
     2423                    return errorSyntaxEx(USAGE_GUESTCONTROL, HELP_SCOPE_GSTCTRL_MKTEMP,
    24242424                                         "More than one template specified!\n");
    24252425                break;
    24262426
    24272427            default:
    2428                 return errorGetOptEx(USAGE_GUESTCONTROL, USAGE_GSTCTRL_MKTEMP, ch, &ValueUnion);
     2428                return errorGetOptEx(USAGE_GUESTCONTROL, HELP_SCOPE_GSTCTRL_MKTEMP, ch, &ValueUnion);
    24292429        }
    24302430    }
    24312431
    24322432    if (strTemplate.isEmpty())
    2433         return errorSyntaxEx(USAGE_GUESTCONTROL, USAGE_GSTCTRL_MKTEMP,
     2433        return errorSyntaxEx(USAGE_GUESTCONTROL, HELP_SCOPE_GSTCTRL_MKTEMP,
    24342434                             "No template specified!");
    24352435
    24362436    if (!fDirectory)
    2437         return errorSyntaxEx(USAGE_GUESTCONTROL, USAGE_GSTCTRL_MKTEMP,
     2437        return errorSyntaxEx(USAGE_GUESTCONTROL, HELP_SCOPE_GSTCTRL_MKTEMP,
    24382438                             "Creating temporary files is currently not supported!");
    24392439
     
    25132513            case 'c': /* Format */
    25142514            case 't': /* Terse */
    2515                 return errorSyntaxEx(USAGE_GUESTCONTROL, USAGE_GSTCTRL_STAT,
     2515                return errorSyntaxEx(USAGE_GUESTCONTROL, HELP_SCOPE_GSTCTRL_STAT,
    25162516                                     "Command \"%s\" not implemented yet!", ValueUnion.psz);
    25172517
    25182518            default:
    2519                 return errorGetOptEx(USAGE_GUESTCONTROL, USAGE_GSTCTRL_STAT, ch, &ValueUnion);
     2519                return errorGetOptEx(USAGE_GUESTCONTROL, HELP_SCOPE_GSTCTRL_STAT, ch, &ValueUnion);
    25202520        }
    25212521    }
    25222522
    25232523    if (ch != VINF_GETOPT_NOT_OPTION)
    2524         return errorSyntaxEx(USAGE_GUESTCONTROL, USAGE_GSTCTRL_STAT, "Nothing to stat!");
     2524        return errorSyntaxEx(USAGE_GUESTCONTROL, HELP_SCOPE_GSTCTRL_STAT, "Nothing to stat!");
    25252525
    25262526    RTEXITCODE rcExit = gctlCtxPostOptionParsingInit(pCtx);
     
    26682668
    26692669            default:
    2670                 return errorGetOptEx(USAGE_GUESTCONTROL, USAGE_GSTCTRL_UPDATEGA, ch, &ValueUnion);
     2670                return errorGetOptEx(USAGE_GUESTCONTROL, HELP_SCOPE_GSTCTRL_UPDATEGA, ch, &ValueUnion);
    26712671        }
    26722672    }
     
    27862786                    fListAll = true;
    27872787                else
    2788                     return errorSyntaxEx(USAGE_GUESTCONTROL, USAGE_GSTCTRL_LIST,
     2788                    return errorSyntaxEx(USAGE_GUESTCONTROL, HELP_SCOPE_GSTCTRL_LIST,
    27892789                                         "Unknown list: '%s'", ValueUnion.psz);
    27902790                fSeenListArg = true;
     
    27922792
    27932793            default:
    2794                 return errorGetOptEx(USAGE_GUESTCONTROL, USAGE_GSTCTRL_UPDATEGA, ch, &ValueUnion);
     2794                return errorGetOptEx(USAGE_GUESTCONTROL, HELP_SCOPE_GSTCTRL_UPDATEGA, ch, &ValueUnion);
    27952795        }
    27962796    }
    27972797
    27982798    if (!fSeenListArg)
    2799         return errorSyntaxEx(USAGE_GUESTCONTROL, USAGE_GSTCTRL_LIST, "Missing list name");
     2799        return errorSyntaxEx(USAGE_GUESTCONTROL, HELP_SCOPE_GSTCTRL_LIST, "Missing list name");
    28002800    Assert(fListAll || fListSessions);
    28012801
     
    29722972                    }
    29732973                    else
    2974                         return errorSyntaxEx(USAGE_GUESTCONTROL, USAGE_GSTCTRL_CLOSEPROCESS, "Invalid PID value: 0");
     2974                        return errorSyntaxEx(USAGE_GUESTCONTROL, HELP_SCOPE_GSTCTRL_CLOSEPROCESS, "Invalid PID value: 0");
    29752975                }
    29762976                else
    2977                     return errorSyntaxEx(USAGE_GUESTCONTROL, USAGE_GSTCTRL_CLOSEPROCESS, "Error parsing PID value: %Rrc", rc);
     2977                    return errorSyntaxEx(USAGE_GUESTCONTROL, HELP_SCOPE_GSTCTRL_CLOSEPROCESS, "Error parsing PID value: %Rrc", rc);
    29782978                break;
    29792979            }
    29802980
    29812981            default:
    2982                 return errorGetOptEx(USAGE_GUESTCONTROL, USAGE_GSTCTRL_CLOSEPROCESS, ch, &ValueUnion);
     2982                return errorGetOptEx(USAGE_GUESTCONTROL, HELP_SCOPE_GSTCTRL_CLOSEPROCESS, ch, &ValueUnion);
    29832983        }
    29842984    }
    29852985
    29862986    if (vecPID.empty())
    2987         return errorSyntaxEx(USAGE_GUESTCONTROL, USAGE_GSTCTRL_CLOSEPROCESS,
     2987        return errorSyntaxEx(USAGE_GUESTCONTROL, HELP_SCOPE_GSTCTRL_CLOSEPROCESS,
    29882988                             "At least one PID must be specified to kill!");
    29892989
    29902990    if (   strSessionName.isEmpty()
    29912991        && idSession == UINT32_MAX)
    2992         return errorSyntaxEx(USAGE_GUESTCONTROL, USAGE_GSTCTRL_CLOSEPROCESS, "No session ID specified!");
     2992        return errorSyntaxEx(USAGE_GUESTCONTROL, HELP_SCOPE_GSTCTRL_CLOSEPROCESS, "No session ID specified!");
    29932993
    29942994    if (   strSessionName.isNotEmpty()
    29952995        && idSession != UINT32_MAX)
    2996         return errorSyntaxEx(USAGE_GUESTCONTROL, USAGE_GSTCTRL_CLOSEPROCESS,
     2996        return errorSyntaxEx(USAGE_GUESTCONTROL, HELP_SCOPE_GSTCTRL_CLOSEPROCESS,
    29972997                             "Either session ID or name (pattern) must be specified");
    29982998
     
    31403140                 *  break; */
    31413141            default:
    3142                 return errorGetOptEx(USAGE_GUESTCONTROL, USAGE_GSTCTRL_CLOSESESSION, ch, &ValueUnion);
     3142                return errorGetOptEx(USAGE_GUESTCONTROL, HELP_SCOPE_GSTCTRL_CLOSESESSION, ch, &ValueUnion);
    31433143        }
    31443144    }
     
    31463146    if (   strSessionName.isEmpty()
    31473147        && idSession == UINT32_MAX)
    3148         return errorSyntaxEx(USAGE_GUESTCONTROL, USAGE_GSTCTRL_CLOSESESSION,
     3148        return errorSyntaxEx(USAGE_GUESTCONTROL, HELP_SCOPE_GSTCTRL_CLOSESESSION,
    31493149                             "No session ID specified!");
    31503150
    31513151    if (   !strSessionName.isEmpty()
    31523152        && idSession != UINT32_MAX)
    3153         return errorSyntaxEx(USAGE_GUESTCONTROL, USAGE_GSTCTRL_CLOSESESSION,
     3153        return errorSyntaxEx(USAGE_GUESTCONTROL, HELP_SCOPE_GSTCTRL_CLOSESESSION,
    31543154                             "Either session ID or name (pattern) must be specified");
    31553155
     
    32383238            case VINF_GETOPT_NOT_OPTION:
    32393239            default:
    3240                 return errorGetOptEx(USAGE_GUESTCONTROL, USAGE_GSTCTRL_WATCH, ch, &ValueUnion);
     3240                return errorGetOptEx(USAGE_GUESTCONTROL, HELP_SCOPE_GSTCTRL_WATCH, ch, &ValueUnion);
    32413241        }
    32423242    }
     
    33263326    static const GCTLCMDDEF s_aCmdDefs[] =
    33273327    {
    3328         { "run",                gctlHandleRun,              USAGE_GSTCTRL_RUN,       0, },
    3329         { "start",              gctlHandleStart,            USAGE_GSTCTRL_START,     0, },
    3330         { "copyfrom",           gctlHandleCopyFrom,         USAGE_GSTCTRL_COPYFROM,  0, },
    3331         { "copyto",             gctlHandleCopyTo,           USAGE_GSTCTRL_COPYTO,    0, },
    3332 
    3333         { "mkdir",              gctrlHandleMkDir,           USAGE_GSTCTRL_MKDIR,     0, },
    3334         { "md",                 gctrlHandleMkDir,           USAGE_GSTCTRL_MKDIR,     0, },
    3335         { "createdirectory",    gctrlHandleMkDir,           USAGE_GSTCTRL_MKDIR,     0, },
    3336         { "createdir",          gctrlHandleMkDir,           USAGE_GSTCTRL_MKDIR,     0, },
    3337 
    3338         { "rmdir",              gctlHandleRmDir,            USAGE_GSTCTRL_RMDIR,     0, },
    3339         { "removedir",          gctlHandleRmDir,            USAGE_GSTCTRL_RMDIR,     0, },
    3340         { "removedirectory",    gctlHandleRmDir,            USAGE_GSTCTRL_RMDIR,     0, },
    3341 
    3342         { "rm",                 gctlHandleRm,               USAGE_GSTCTRL_RM,        0, },
    3343         { "removefile",         gctlHandleRm,               USAGE_GSTCTRL_RM,        0, },
    3344         { "erase",              gctlHandleRm,               USAGE_GSTCTRL_RM,        0, },
    3345         { "del",                gctlHandleRm,               USAGE_GSTCTRL_RM,        0, },
    3346         { "delete",             gctlHandleRm,               USAGE_GSTCTRL_RM,        0, },
    3347 
    3348         { "mv",                 gctlHandleMv,               USAGE_GSTCTRL_MV,        0, },
    3349         { "move",               gctlHandleMv,               USAGE_GSTCTRL_MV,        0, },
    3350         { "ren",                gctlHandleMv,               USAGE_GSTCTRL_MV,        0, },
    3351         { "rename",             gctlHandleMv,               USAGE_GSTCTRL_MV,        0, },
    3352 
    3353         { "mktemp",             gctlHandleMkTemp,           USAGE_GSTCTRL_MKTEMP,    0, },
    3354         { "createtemp",         gctlHandleMkTemp,           USAGE_GSTCTRL_MKTEMP,    0, },
    3355         { "createtemporary",    gctlHandleMkTemp,           USAGE_GSTCTRL_MKTEMP,    0, },
    3356 
    3357         { "stat",               gctlHandleStat,             USAGE_GSTCTRL_STAT,      0, },
    3358 
    3359         { "closeprocess",       gctlHandleCloseProcess,     USAGE_GSTCTRL_CLOSEPROCESS, GCTLCMDCTX_F_SESSION_ANONYMOUS | GCTLCMDCTX_F_NO_SIGNAL_HANDLER, },
    3360         { "closesession",       gctlHandleCloseSession,     USAGE_GSTCTRL_CLOSESESSION, GCTLCMDCTX_F_SESSION_ANONYMOUS | GCTLCMDCTX_F_NO_SIGNAL_HANDLER, },
    3361         { "list",               gctlHandleList,             USAGE_GSTCTRL_LIST,         GCTLCMDCTX_F_SESSION_ANONYMOUS | GCTLCMDCTX_F_NO_SIGNAL_HANDLER, },
    3362         { "watch",              gctlHandleWatch,            USAGE_GSTCTRL_WATCH,        GCTLCMDCTX_F_SESSION_ANONYMOUS | GCTLCMDCTX_F_NO_SIGNAL_HANDLER, },
    3363 
    3364         {"updateguestadditions",gctlHandleUpdateAdditions,  USAGE_GSTCTRL_UPDATEGA,     GCTLCMDCTX_F_SESSION_ANONYMOUS | GCTLCMDCTX_F_NO_SIGNAL_HANDLER, },
    3365         { "updateadditions",    gctlHandleUpdateAdditions,  USAGE_GSTCTRL_UPDATEGA,     GCTLCMDCTX_F_SESSION_ANONYMOUS | GCTLCMDCTX_F_NO_SIGNAL_HANDLER, },
    3366         { "updatega",           gctlHandleUpdateAdditions,  USAGE_GSTCTRL_UPDATEGA,     GCTLCMDCTX_F_SESSION_ANONYMOUS | GCTLCMDCTX_F_NO_SIGNAL_HANDLER, },
     3328        { "run",                gctlHandleRun,              HELP_SCOPE_GSTCTRL_RUN,       0, },
     3329        { "start",              gctlHandleStart,            HELP_SCOPE_GSTCTRL_START,     0, },
     3330        { "copyfrom",           gctlHandleCopyFrom,         HELP_SCOPE_GSTCTRL_COPYFROM,  0, },
     3331        { "copyto",             gctlHandleCopyTo,           HELP_SCOPE_GSTCTRL_COPYTO,    0, },
     3332
     3333        { "mkdir",              gctrlHandleMkDir,           HELP_SCOPE_GSTCTRL_MKDIR,     0, },
     3334        { "md",                 gctrlHandleMkDir,           HELP_SCOPE_GSTCTRL_MKDIR,     0, },
     3335        { "createdirectory",    gctrlHandleMkDir,           HELP_SCOPE_GSTCTRL_MKDIR,     0, },
     3336        { "createdir",          gctrlHandleMkDir,           HELP_SCOPE_GSTCTRL_MKDIR,     0, },
     3337
     3338        { "rmdir",              gctlHandleRmDir,            HELP_SCOPE_GSTCTRL_RMDIR,     0, },
     3339        { "removedir",          gctlHandleRmDir,            HELP_SCOPE_GSTCTRL_RMDIR,     0, },
     3340        { "removedirectory",    gctlHandleRmDir,            HELP_SCOPE_GSTCTRL_RMDIR,     0, },
     3341
     3342        { "rm",                 gctlHandleRm,               HELP_SCOPE_GSTCTRL_RM,        0, },
     3343        { "removefile",         gctlHandleRm,               HELP_SCOPE_GSTCTRL_RM,        0, },
     3344        { "erase",              gctlHandleRm,               HELP_SCOPE_GSTCTRL_RM,        0, },
     3345        { "del",                gctlHandleRm,               HELP_SCOPE_GSTCTRL_RM,        0, },
     3346        { "delete",             gctlHandleRm,               HELP_SCOPE_GSTCTRL_RM,        0, },
     3347
     3348        { "mv",                 gctlHandleMv,               HELP_SCOPE_GSTCTRL_MV,        0, },
     3349        { "move",               gctlHandleMv,               HELP_SCOPE_GSTCTRL_MV,        0, },
     3350        { "ren",                gctlHandleMv,               HELP_SCOPE_GSTCTRL_MV,        0, },
     3351        { "rename",             gctlHandleMv,               HELP_SCOPE_GSTCTRL_MV,        0, },
     3352
     3353        { "mktemp",             gctlHandleMkTemp,           HELP_SCOPE_GSTCTRL_MKTEMP,    0, },
     3354        { "createtemp",         gctlHandleMkTemp,           HELP_SCOPE_GSTCTRL_MKTEMP,    0, },
     3355        { "createtemporary",    gctlHandleMkTemp,           HELP_SCOPE_GSTCTRL_MKTEMP,    0, },
     3356
     3357        { "stat",               gctlHandleStat,             HELP_SCOPE_GSTCTRL_STAT,      0, },
     3358
     3359        { "closeprocess",       gctlHandleCloseProcess,     HELP_SCOPE_GSTCTRL_CLOSEPROCESS, GCTLCMDCTX_F_SESSION_ANONYMOUS | GCTLCMDCTX_F_NO_SIGNAL_HANDLER, },
     3360        { "closesession",       gctlHandleCloseSession,     HELP_SCOPE_GSTCTRL_CLOSESESSION, GCTLCMDCTX_F_SESSION_ANONYMOUS | GCTLCMDCTX_F_NO_SIGNAL_HANDLER, },
     3361        { "list",               gctlHandleList,             HELP_SCOPE_GSTCTRL_LIST,         GCTLCMDCTX_F_SESSION_ANONYMOUS | GCTLCMDCTX_F_NO_SIGNAL_HANDLER, },
     3362        { "watch",              gctlHandleWatch,            HELP_SCOPE_GSTCTRL_WATCH,        GCTLCMDCTX_F_SESSION_ANONYMOUS | GCTLCMDCTX_F_NO_SIGNAL_HANDLER, },
     3363
     3364        {"updateguestadditions",gctlHandleUpdateAdditions,  HELP_SCOPE_GSTCTRL_UPDATEGA,     GCTLCMDCTX_F_SESSION_ANONYMOUS | GCTLCMDCTX_F_NO_SIGNAL_HANDLER, },
     3365        { "updateadditions",    gctlHandleUpdateAdditions,  HELP_SCOPE_GSTCTRL_UPDATEGA,     GCTLCMDCTX_F_SESSION_ANONYMOUS | GCTLCMDCTX_F_NO_SIGNAL_HANDLER, },
     3366        { "updatega",           gctlHandleUpdateAdditions,  HELP_SCOPE_GSTCTRL_UPDATEGA,     GCTLCMDCTX_F_SESSION_ANONYMOUS | GCTLCMDCTX_F_NO_SIGNAL_HANDLER, },
    33673367    };
    33683368
  • trunk/src/VBox/Frontends/VBoxManage/VBoxManageHelp.cpp

    r76906 r77595  
    2424#include <iprt/buildconfig.h>
    2525#include <iprt/ctype.h>
     26#include <iprt/assert.h>
    2627#include <iprt/env.h>
    2728#include <iprt/err.h>
     
    4546*********************************************************************************************************************************/
    4647#ifndef VBOX_ONLY_DOCS
    47 enum HELP_CMD_VBOXMANAGE    g_enmCurCommand = HELP_CMD_VBOXMANAGE_INVALID;
    48 /** The scope maskt for the current subcommand. */
    49 uint64_t                    g_fCurSubcommandScope = RTMSGREFENTRYSTR_SCOPE_GLOBAL;
     48static enum HELP_CMD_VBOXMANAGE    g_enmCurCommand = HELP_CMD_VBOXMANAGE_INVALID;
     49/** The scope mask for the current subcommand. */
     50static uint64_t                    g_fCurSubcommandScope = RTMSGREFENTRYSTR_SCOPE_GLOBAL;
    5051
    5152/**
     
    366367
    367368
    368 void printUsage(USAGECATEGORY fCategory, uint32_t fSubCategory, PRTSTREAM pStrm)
     369void printUsage(USAGECATEGORY enmCommand, uint64_t fSubcommandScope, PRTSTREAM pStrm)
    369370{
    370371    bool fDumpOpts = false;
     
    400401#endif
    401402
    402     if (fCategory == USAGE_DUMPOPTS)
     403    Assert(enmCommand != USAGE_INVALID);
     404    Assert(enmCommand != USAGE_S_NEWCMD);
     405
     406    if (enmCommand == USAGE_S_DUMPOPTS)
    403407    {
    404408        fDumpOpts = true;
     
    409413        fDarwin = true;
    410414        fVBoxSDL = true;
    411         fCategory = USAGE_ALL;
     415        enmCommand = USAGE_S_ALL;
    412416    }
    413417
     
    416420                 "\n");
    417421
    418     if (fCategory == USAGE_ALL)
     422    if (enmCommand == USAGE_S_ALL)
    419423        RTStrmPrintf(pStrm,
    420424                     "  VBoxManage [<general option>] <command>\n"
     
    431435    const char *pcszSep1 = " ";
    432436    const char *pcszSep2 = "         ";
    433     if (fCategory != USAGE_ALL)
     437    if (enmCommand != USAGE_S_ALL)
    434438    {
    435439        pcszSep1 = "VBoxManage";
     
    439443#define SEP pcszSep1, pcszSep2
    440444
    441     if (fCategory & USAGE_LIST)
     445    if (enmCommand == USAGE_LIST || enmCommand == USAGE_S_ALL)
    442446        RTStrmPrintf(pStrm,
    443447                           "%s list [--long|-l] [--sorted|-s]%s vms|runningvms|ostypes|hostdvds|hostfloppies|\n"
     
    453457                     "\n", SEP);
    454458
    455     if (fCategory & USAGE_SHOWVMINFO)
     459    if (enmCommand == USAGE_SHOWVMINFO || enmCommand == USAGE_S_ALL)
    456460        RTStrmPrintf(pStrm,
    457461                           "%s showvminfo %s      <uuid|vmname> [--details]\n"
     
    460464                     "\n", SEP, SEP);
    461465
    462     if (fCategory & USAGE_REGISTERVM)
     466    if (enmCommand == USAGE_REGISTERVM || enmCommand == USAGE_S_ALL)
    463467        RTStrmPrintf(pStrm,
    464468                           "%s registervm %s      <filename>\n"
    465469                     "\n", SEP);
    466470
    467     if (fCategory & USAGE_UNREGISTERVM)
     471    if (enmCommand == USAGE_UNREGISTERVM || enmCommand == USAGE_S_ALL)
    468472        RTStrmPrintf(pStrm,
    469473                           "%s unregistervm %s    <uuid|vmname> [--delete]\n"
    470474                     "\n", SEP);
    471475
    472     if (fCategory & USAGE_CREATEVM)
     476    if (enmCommand == USAGE_CREATEVM || enmCommand == USAGE_S_ALL)
    473477        RTStrmPrintf(pStrm,
    474478                           "%s createvm %s        --name <name>\n"
     
    481485                     "\n", SEP);
    482486
    483     if (fCategory & USAGE_MODIFYVM)
     487    if (enmCommand == USAGE_MODIFYVM || enmCommand == USAGE_S_ALL)
    484488    {
    485489        RTStrmPrintf(pStrm,
     
    730734    }
    731735
    732     if (fCategory & USAGE_CLONEVM)
     736    if (enmCommand == USAGE_CLONEVM || enmCommand == USAGE_S_ALL)
    733737        RTStrmPrintf(pStrm,
    734738                           "%s clonevm %s         <uuid|vmname>\n"
     
    744748                     "\n", SEP);
    745749
    746     if (fCategory & USAGE_MOVEVM)
     750    if (enmCommand == USAGE_MOVEVM || enmCommand == USAGE_S_ALL)
    747751        RTStrmPrintf(pStrm,
    748752                           "%s movevm %s          <uuid|vmname>\n"
     
    751755                     "\n", SEP);
    752756
    753     if (fCategory & USAGE_IMPORTAPPLIANCE)
     757    if (enmCommand == USAGE_IMPORTAPPLIANCE || enmCommand == USAGE_S_ALL)
    754758        RTStrmPrintf(pStrm,
    755759                           "%s import %s          <ovfname/ovaname>\n"
     
    760764                     "                             for a particular OVF)\n\n", SEP);
    761765
    762     if (fCategory & USAGE_EXPORTAPPLIANCE)
     766    if (enmCommand == USAGE_EXPORTAPPLIANCE || enmCommand == USAGE_S_ALL)
    763767        RTStrmPrintf(pStrm,
    764768                           "%s export %s          <machines> --output|-o <name>.<ovf/ova/tar.gz>\n"
     
    791795                     "\n", SEP);
    792796
    793     if (fCategory & USAGE_STARTVM)
     797    if (enmCommand == USAGE_STARTVM || enmCommand == USAGE_S_ALL)
    794798    {
    795799        RTStrmPrintf(pStrm,
     
    804808    }
    805809
    806     if (fCategory & USAGE_CONTROLVM)
     810    if (enmCommand == USAGE_CONTROLVM || enmCommand == USAGE_S_ALL)
    807811    {
    808812        RTStrmPrintf(pStrm,
     
    884888    }
    885889
    886     if (fCategory & USAGE_DISCARDSTATE)
     890    if (enmCommand == USAGE_DISCARDSTATE || enmCommand == USAGE_S_ALL)
    887891        RTStrmPrintf(pStrm,
    888892                           "%s discardstate %s    <uuid|vmname>\n"
    889893                     "\n", SEP);
    890894
    891     if (fCategory & USAGE_ADOPTSTATE)
     895    if (enmCommand == USAGE_ADOPTSTATE || enmCommand == USAGE_S_ALL)
    892896        RTStrmPrintf(pStrm,
    893897                           "%s adoptstate %s      <uuid|vmname> <state_file>\n"
    894898                     "\n", SEP);
    895899
    896     if (fCategory & USAGE_SNAPSHOT)
     900    if (enmCommand == USAGE_SNAPSHOT || enmCommand == USAGE_S_ALL)
    897901        RTStrmPrintf(pStrm,
    898902                           "%s snapshot %s        <uuid|vmname>\n"
     
    909913                     "\n", SEP);
    910914
    911     if (fCategory & USAGE_CLOSEMEDIUM)
     915    if (enmCommand == USAGE_CLOSEMEDIUM || enmCommand == USAGE_S_ALL)
    912916        RTStrmPrintf(pStrm,
    913917                           "%s closemedium %s     [disk|dvd|floppy] <uuid|filename>\n"
     
    915919                     "\n", SEP);
    916920
    917     if (fCategory & USAGE_STORAGEATTACH)
     921    if (enmCommand == USAGE_STORAGEATTACH || enmCommand == USAGE_S_ALL)
    918922        RTStrmPrintf(pStrm,
    919923                           "%s storageattach %s   <uuid|vmname>\n"
     
    948952                     "\n", SEP);
    949953
    950     if (fCategory & USAGE_STORAGECONTROLLER)
     954    if (enmCommand == USAGE_STORAGECONTROLLER || enmCommand == USAGE_S_ALL)
    951955        RTStrmPrintf(pStrm,
    952956                           "%s storagectl %s      <uuid|vmname>\n"
     
    963967                     "\n", SEP);
    964968
    965     if (fCategory & USAGE_BANDWIDTHCONTROL)
     969    if (enmCommand == USAGE_BANDWIDTHCONTROL || enmCommand == USAGE_S_ALL)
    966970        RTStrmPrintf(pStrm,
    967971                           "%s bandwidthctl %s    <uuid|vmname>\n"
     
    976980                     "\n", SEP);
    977981
    978     if (fCategory & USAGE_SHOWMEDIUMINFO)
     982    if (enmCommand == USAGE_SHOWMEDIUMINFO || enmCommand == USAGE_S_ALL)
    979983        RTStrmPrintf(pStrm,
    980984                           "%s showmediuminfo %s  [disk|dvd|floppy] <uuid|filename>\n"
    981985                     "\n", SEP);
    982986
    983     if (fCategory & USAGE_CREATEMEDIUM)
     987    if (enmCommand == USAGE_CREATEMEDIUM || enmCommand == USAGE_S_ALL)
    984988        RTStrmPrintf(pStrm,
    985989                           "%s createmedium %s    [disk|dvd|floppy] --filename <filename>\n"
     
    991995                     "\n", SEP);
    992996
    993     if (fCategory & USAGE_MODIFYMEDIUM)
     997    if (enmCommand == USAGE_MODIFYMEDIUM || enmCommand == USAGE_S_ALL)
    994998        RTStrmPrintf(pStrm,
    995999                           "%s modifymedium %s    [disk|dvd|floppy] <uuid|filename>\n"
     
    10051009                     "\n", SEP);
    10061010
    1007     if (fCategory & USAGE_CLONEMEDIUM)
     1011    if (enmCommand == USAGE_CLONEMEDIUM || enmCommand == USAGE_S_ALL)
    10081012        RTStrmPrintf(pStrm,
    10091013                           "%s clonemedium %s     [disk|dvd|floppy] <uuid|inputfile> <uuid|outputfile>\n"
     
    10131017                     "\n", SEP);
    10141018
    1015     if (fCategory & USAGE_MEDIUMPROPERTY)
     1019    if (enmCommand == USAGE_MEDIUMPROPERTY || enmCommand == USAGE_S_ALL)
    10161020        RTStrmPrintf(pStrm,
    10171021                           "%s mediumproperty %s  [disk|dvd|floppy] set <uuid|filename>\n"
     
    10251029                     "\n", SEP);
    10261030
    1027     if (fCategory & USAGE_ENCRYPTMEDIUM)
     1031    if (enmCommand == USAGE_ENCRYPTMEDIUM || enmCommand == USAGE_S_ALL)
    10281032        RTStrmPrintf(pStrm,
    10291033                           "%s encryptmedium %s   <uuid|filename>\n"
     
    10341038                     "\n", SEP);
    10351039
    1036     if (fCategory & USAGE_MEDIUMENCCHKPWD)
     1040    if (enmCommand == USAGE_MEDIUMENCCHKPWD || enmCommand == USAGE_S_ALL)
    10371041        RTStrmPrintf(pStrm,
    10381042                           "%s checkmediumpwd %s  <uuid|filename>\n"
     
    10401044                     "\n", SEP);
    10411045
    1042     if (fCategory & USAGE_CONVERTFROMRAW)
     1046    if (enmCommand == USAGE_CONVERTFROMRAW || enmCommand == USAGE_S_ALL)
    10431047        RTStrmPrintf(pStrm,
    10441048                           "%s convertfromraw %s  <filename> <outputfile>\n"
     
    10521056                     "\n", SEP, SEP);
    10531057
    1054     if (fCategory & USAGE_GETEXTRADATA)
     1058    if (enmCommand == USAGE_GETEXTRADATA || enmCommand == USAGE_S_ALL)
    10551059        RTStrmPrintf(pStrm,
    10561060                           "%s getextradata %s    global|<uuid|vmname>\n"
     
    10581062                     "\n", SEP);
    10591063
    1060     if (fCategory & USAGE_SETEXTRADATA)
     1064    if (enmCommand == USAGE_SETEXTRADATA || enmCommand == USAGE_S_ALL)
    10611065        RTStrmPrintf(pStrm,
    10621066                           "%s setextradata %s    global|<uuid|vmname>\n"
     
    10651069                     "\n", SEP);
    10661070
    1067     if (fCategory & USAGE_SETPROPERTY)
     1071    if (enmCommand == USAGE_SETPROPERTY || enmCommand == USAGE_S_ALL)
    10681072        RTStrmPrintf(pStrm,
    10691073                           "%s setproperty %s     machinefolder default|<folder> |\n"
     
    10801084                     "\n", SEP);
    10811085
    1082     if (fCategory & USAGE_USBFILTER_ADD)
    1083         RTStrmPrintf(pStrm,
    1084                            "%s usbfilter %s       add <index,0-N>\n"
    1085                      "                            --target <uuid|vmname>|global\n"
    1086                      "                            --name <string>\n"
    1087                      "                            --action ignore|hold (global filters only)\n"
    1088                      "                            [--active yes|no] (yes)\n"
    1089                      "                            [--vendorid <XXXX>] (null)\n"
    1090                      "                            [--productid <XXXX>] (null)\n"
    1091                      "                            [--revision <IIFF>] (null)\n"
    1092                      "                            [--manufacturer <string>] (null)\n"
    1093                      "                            [--product <string>] (null)\n"
    1094                      "                            [--remote yes|no] (null, VM filters only)\n"
    1095                      "                            [--serialnumber <string>] (null)\n"
    1096                      "                            [--maskedinterfaces <XXXXXXXX>]\n"
    1097                      "\n", SEP);
    1098 
    1099     if (fCategory & USAGE_USBFILTER_MODIFY)
    1100         RTStrmPrintf(pStrm,
    1101                            "%s usbfilter %s       modify <index,0-N>\n"
    1102                      "                            --target <uuid|vmname>|global\n"
    1103                      "                            [--name <string>]\n"
    1104                      "                            [--action ignore|hold] (global filters only)\n"
    1105                      "                            [--active yes|no]\n"
    1106                      "                            [--vendorid <XXXX>|\"\"]\n"
    1107                      "                            [--productid <XXXX>|\"\"]\n"
    1108                      "                            [--revision <IIFF>|\"\"]\n"
    1109                      "                            [--manufacturer <string>|\"\"]\n"
    1110                      "                            [--product <string>|\"\"]\n"
    1111                      "                            [--remote yes|no] (null, VM filters only)\n"
    1112                      "                            [--serialnumber <string>|\"\"]\n"
    1113                      "                            [--maskedinterfaces <XXXXXXXX>]\n"
    1114                      "\n", SEP);
    1115 
    1116     if (fCategory & USAGE_USBFILTER_REMOVE)
    1117         RTStrmPrintf(pStrm,
    1118                            "%s usbfilter %s       remove <index,0-N>\n"
    1119                      "                            --target <uuid|vmname>|global\n"
    1120                      "\n", SEP);
    1121 
    1122     if (fCategory & USAGE_SHAREDFOLDER_ADD)
    1123         RTStrmPrintf(pStrm,
    1124                            "%s sharedfolder %s    add <uuid|vmname>\n"
    1125                      "                            --name <name> --hostpath <hostpath>\n"
    1126                      "                            [--transient] [--readonly] [--automount]\n"
    1127                      "\n", SEP);
    1128 
    1129     if (fCategory & USAGE_SHAREDFOLDER_REMOVE)
    1130         RTStrmPrintf(pStrm,
    1131                            "%s sharedfolder %s    remove <uuid|vmname>\n"
    1132                      "                            --name <name> [--transient]\n"
    1133                      "\n", SEP);
     1086    if (enmCommand == USAGE_USBFILTER || enmCommand == USAGE_S_ALL)
     1087    {
     1088        if (fSubcommandScope & HELP_SCOPE_USBFILTER_ADD)
     1089            RTStrmPrintf(pStrm,
     1090                               "%s usbfilter %s       add <index,0-N>\n"
     1091                         "                            --target <uuid|vmname>|global\n"
     1092                         "                            --name <string>\n"
     1093                         "                            --action ignore|hold (global filters only)\n"
     1094                         "                            [--active yes|no] (yes)\n"
     1095                         "                            [--vendorid <XXXX>] (null)\n"
     1096                         "                            [--productid <XXXX>] (null)\n"
     1097                         "                            [--revision <IIFF>] (null)\n"
     1098                         "                            [--manufacturer <string>] (null)\n"
     1099                         "                            [--product <string>] (null)\n"
     1100                         "                            [--remote yes|no] (null, VM filters only)\n"
     1101                         "                            [--serialnumber <string>] (null)\n"
     1102                         "                            [--maskedinterfaces <XXXXXXXX>]\n"
     1103                         "\n", SEP);
     1104
     1105        if (fSubcommandScope & HELP_SCOPE_USBFILTER_MODIFY)
     1106            RTStrmPrintf(pStrm,
     1107                               "%s usbfilter %s       modify <index,0-N>\n"
     1108                         "                            --target <uuid|vmname>|global\n"
     1109                         "                            [--name <string>]\n"
     1110                         "                            [--action ignore|hold] (global filters only)\n"
     1111                         "                            [--active yes|no]\n"
     1112                         "                            [--vendorid <XXXX>|\"\"]\n"
     1113                         "                            [--productid <XXXX>|\"\"]\n"
     1114                         "                            [--revision <IIFF>|\"\"]\n"
     1115                         "                            [--manufacturer <string>|\"\"]\n"
     1116                         "                            [--product <string>|\"\"]\n"
     1117                         "                            [--remote yes|no] (null, VM filters only)\n"
     1118                         "                            [--serialnumber <string>|\"\"]\n"
     1119                         "                            [--maskedinterfaces <XXXXXXXX>]\n"
     1120                         "\n", SEP);
     1121
     1122        if (fSubcommandScope & HELP_SCOPE_USBFILTER_REMOVE)
     1123            RTStrmPrintf(pStrm,
     1124                               "%s usbfilter %s       remove <index,0-N>\n"
     1125                         "                            --target <uuid|vmname>|global\n"
     1126                         "\n", SEP);
     1127    }
     1128
     1129    if (enmCommand == USAGE_SHAREDFOLDER || enmCommand == USAGE_S_ALL)
     1130    {
     1131        if (fSubcommandScope & HELP_SCOPE_SHAREDFOLDER_ADD)
     1132            RTStrmPrintf(pStrm,
     1133                               "%s sharedfolder %s    add <uuid|vmname>\n"
     1134                         "                            --name <name> --hostpath <hostpath>\n"
     1135                         "                            [--transient] [--readonly] [--automount]\n"
     1136                         "\n", SEP);
     1137
     1138        if (fSubcommandScope & HELP_SCOPE_SHAREDFOLDER_REMOVE)
     1139            RTStrmPrintf(pStrm,
     1140                               "%s sharedfolder %s    remove <uuid|vmname>\n"
     1141                         "                            --name <name> [--transient]\n"
     1142                         "\n", SEP);
     1143    }
    11341144
    11351145#ifdef VBOX_WITH_GUEST_PROPS
    1136     if (fCategory & USAGE_GUESTPROPERTY)
     1146    if (enmCommand == USAGE_GUESTPROPERTY || enmCommand == USAGE_S_ALL)
    11371147        usageGuestProperty(pStrm, SEP);
    11381148#endif /* VBOX_WITH_GUEST_PROPS defined */
    11391149
    11401150#ifdef VBOX_WITH_GUEST_CONTROL
    1141     if (fCategory & USAGE_GUESTCONTROL)
    1142         usageGuestControl(pStrm, SEP, fSubCategory);
     1151    if (enmCommand == USAGE_GUESTCONTROL || enmCommand == USAGE_S_ALL)
     1152        usageGuestControl(pStrm, SEP, fSubcommandScope);
    11431153#endif /* VBOX_WITH_GUEST_CONTROL defined */
    11441154
    1145     if (fCategory & USAGE_METRICS)
     1155    if (enmCommand == USAGE_METRICS || enmCommand == USAGE_S_ALL)
    11461156        RTStrmPrintf(pStrm,
    11471157                           "%s metrics %s         list [*|host|<vmname> [<metric_list>]]\n"
     
    11681178
    11691179#if defined(VBOX_WITH_NAT_SERVICE)
    1170     if (fCategory & USAGE_NATNETWORK)
     1180    if (enmCommand == USAGE_NATNETWORK || enmCommand == USAGE_S_ALL)
    11711181    {
    11721182        RTStrmPrintf(pStrm,
     
    12001210
    12011211#if defined(VBOX_WITH_NETFLT)
    1202     if (fCategory & USAGE_HOSTONLYIFS)
     1212    if (enmCommand == USAGE_HOSTONLYIFS || enmCommand == USAGE_S_ALL)
    12031213    {
    12041214        RTStrmPrintf(pStrm,
     
    12151225#endif
    12161226
    1217     if (fCategory & USAGE_DHCPSERVER)
     1227    if (enmCommand == USAGE_DHCPSERVER || enmCommand == USAGE_S_ALL)
    12181228    {
    12191229        RTStrmPrintf(pStrm,
     
    12371247    }
    12381248
    1239     if (fCategory & USAGE_USBDEVSOURCE)
     1249    if (enmCommand == USAGE_USBDEVSOURCE || enmCommand == USAGE_S_ALL)
    12401250    {
    12411251        RTStrmPrintf(pStrm,
     
    12481258
    12491259#ifndef VBOX_ONLY_DOCS /* Converted to man page, not needed. */
    1250     if (fCategory == USAGE_ALL)
     1260    if (enmCommand == USAGE_S_ALL)
    12511261    {
    12521262        uint32_t cPendingBlankLines = 0;
     
    12701280 * @returns RTEXITCODE_SYNTAX.
    12711281 */
    1272 RTEXITCODE errorSyntax(USAGECATEGORY fCategory, const char *pszFormat, ...)
     1282RTEXITCODE errorSyntax(USAGECATEGORY enmCommand, const char *pszFormat, ...)
    12731283{
    12741284    va_list args;
     
    12761286#ifndef VBOX_ONLY_DOCS
    12771287    if (g_fInternalMode)
    1278         printUsageInternal(fCategory, g_pStdErr);
     1288        printUsageInternal(enmCommand, g_pStdErr);
    12791289    else
    1280         printUsage(fCategory, ~0U, g_pStdErr);
     1290        printUsage(enmCommand, RTMSGREFENTRYSTR_SCOPE_GLOBAL, g_pStdErr);
    12811291#else
    1282     RT_NOREF_PV(fCategory);
     1292    RT_NOREF_PV(enmCommand);
    12831293#endif
    12841294    va_start(args, pszFormat);
     
    12921302 * @returns RTEXITCODE_SYNTAX.
    12931303 */
    1294 RTEXITCODE errorSyntaxEx(USAGECATEGORY fCategory, uint32_t fSubCategory, const char *pszFormat, ...)
     1304RTEXITCODE errorSyntaxEx(USAGECATEGORY enmCommand, uint64_t fSubcommandScope, const char *pszFormat, ...)
    12951305{
    12961306    va_list args;
     
    12981308#ifndef VBOX_ONLY_DOCS
    12991309    if (g_fInternalMode)
    1300         printUsageInternal(fCategory, g_pStdErr);
     1310        printUsageInternal(enmCommand, g_pStdErr);
    13011311    else
    1302         printUsage(fCategory, fSubCategory, g_pStdErr);
     1312        printUsage(enmCommand, fSubcommandScope, g_pStdErr);
    13031313#else
    1304     RT_NOREF2(fCategory, fSubCategory);
     1314    RT_NOREF2(enmCommand, fSubcommandScope);
    13051315#endif
    13061316    va_start(args, pszFormat);
     
    13151325 * @returns RTEXITCODE_SYNTAX.
    13161326 *
    1317  * @param   fCategory          The usage category of the command.
    1318  * @param   fSubCategory         The usage sub-category of the command.
    1319  * @param   rc              The RTGetOpt return code.
    1320  * @param   pValueUnion     The value union.
    1321  */
    1322 RTEXITCODE errorGetOptEx(USAGECATEGORY fCategory, uint32_t fSubCategory, int rc, union RTGETOPTUNION const *pValueUnion)
     1327 * @param   enmCommand          The command.
     1328 * @param   fSubcommandScope    The subcommand scope, REFENTRYSTR_SCOPE_GLOBAL
     1329 *                              for all.
     1330 * @param   rc                  The RTGetOpt return code.
     1331 * @param   pValueUnion         The value union.
     1332 */
     1333RTEXITCODE errorGetOptEx(USAGECATEGORY enmCommand, uint64_t fSubcommandScope, int rc, union RTGETOPTUNION const *pValueUnion)
    13231334{
    13241335    /*
     
    13381349#ifndef VBOX_ONLY_DOCS
    13391350        if (g_fInternalMode)
    1340             printUsageInternal(fCategory, g_pStdOut);
     1351            printUsageInternal(enmCommand, g_pStdOut);
    13411352        else
    1342             printUsage(fCategory, fSubCategory, g_pStdOut);
     1353            printUsage(enmCommand, fSubcommandScope, g_pStdOut);
    13431354#endif
    13441355        return RTEXITCODE_SUCCESS;
     
    13511362#ifndef VBOX_ONLY_DOCS
    13521363    if (g_fInternalMode)
    1353         printUsageInternal(fCategory, g_pStdErr);
     1364        printUsageInternal(enmCommand, g_pStdErr);
    13541365    else
    1355         printUsage(fCategory, fSubCategory, g_pStdErr);
     1366        printUsage(enmCommand, fSubcommandScope, g_pStdErr);
    13561367#else
    1357     RT_NOREF2(fCategory, fSubCategory);
     1368    RT_NOREF2(enmCommand, fSubcommandScope);
    13581369#endif
    13591370
     
    13801391 * @returns RTEXITCODE_SYNTAX.
    13811392 *
    1382  * @param   fUsageCategory  The usage category of the command.
     1393 * @param   enmCommand      The command.
    13831394 * @param   rc              The RTGetOpt return code.
    13841395 * @param   pValueUnion     The value union.
    13851396 */
    1386 RTEXITCODE errorGetOpt(USAGECATEGORY fCategory, int rc, union RTGETOPTUNION const *pValueUnion)
    1387 {
    1388     return errorGetOptEx(fCategory, ~0U, rc, pValueUnion);
     1397RTEXITCODE errorGetOpt(USAGECATEGORY enmCommand, int rc, union RTGETOPTUNION const *pValueUnion)
     1398{
     1399    return errorGetOptEx(enmCommand, RTMSGREFENTRYSTR_SCOPE_GLOBAL, rc, pValueUnion);
    13891400}
    13901401
  • trunk/src/VBox/Frontends/VBoxManage/VBoxManageMisc.cpp

    r76553 r77595  
    10861086        /* we need at least four more parameters */
    10871087        if (a->argc < 5)
    1088             return errorSyntax(USAGE_SHAREDFOLDER_ADD, "Not enough parameters");
     1088            return errorSyntaxEx(USAGE_SHAREDFOLDER, HELP_SCOPE_SHAREDFOLDER_ADD, "Not enough parameters");
    10891089
    10901090        char *name = NULL;
     
    11361136            }
    11371137            else
    1138                 return errorSyntax(USAGE_SHAREDFOLDER_ADD, "Invalid parameter '%s'", Utf8Str(a->argv[i]).c_str());
     1138                return errorSyntaxEx(USAGE_SHAREDFOLDER, HELP_SCOPE_SHAREDFOLDER_ADD, "Invalid parameter '%s'", Utf8Str(a->argv[i]).c_str());
    11391139        }
    11401140
    11411141        if (NULL != strstr(name, " "))
    1142             return errorSyntax(USAGE_SHAREDFOLDER_ADD, "No spaces allowed in parameter '-name'!");
     1142            return errorSyntaxEx(USAGE_SHAREDFOLDER, HELP_SCOPE_SHAREDFOLDER_ADD, "No spaces allowed in parameter '-name'!");
    11431143
    11441144        /* required arguments */
    11451145        if (!name || !hostpath)
    11461146        {
    1147             return errorSyntax(USAGE_SHAREDFOLDER_ADD, "Parameters --name and --hostpath are required");
     1147            return errorSyntaxEx(USAGE_SHAREDFOLDER, HELP_SCOPE_SHAREDFOLDER_ADD, "Parameters --name and --hostpath are required");
    11481148        }
    11491149
     
    11901190        /* we need at least two more parameters */
    11911191        if (a->argc < 3)
    1192             return errorSyntax(USAGE_SHAREDFOLDER_REMOVE, "Not enough parameters");
     1192            return errorSyntaxEx(USAGE_SHAREDFOLDER, HELP_SCOPE_SHAREDFOLDER_REMOVE, "Not enough parameters");
    11931193
    11941194        char *name = NULL;
     
    12111211            }
    12121212            else
    1213                 return errorSyntax(USAGE_SHAREDFOLDER_REMOVE, "Invalid parameter '%s'", Utf8Str(a->argv[i]).c_str());
     1213                return errorSyntaxEx(USAGE_SHAREDFOLDER, HELP_SCOPE_SHAREDFOLDER_REMOVE, "Invalid parameter '%s'", Utf8Str(a->argv[i]).c_str());
    12141214        }
    12151215
    12161216        /* required arguments */
    12171217        if (!name)
    1218             return errorSyntax(USAGE_SHAREDFOLDER_REMOVE, "Parameter --name is required");
     1218            return errorSyntaxEx(USAGE_SHAREDFOLDER, HELP_SCOPE_SHAREDFOLDER_REMOVE, "Parameter --name is required");
    12191219
    12201220        if (fTransient)
  • trunk/src/VBox/Frontends/VBoxManage/VBoxManageUSB.cpp

    r76553 r77595  
    198198            {
    199199                if (cmd.mAction == USBFilterCmd::Add)
    200                     return errorSyntax(USAGE_USBFILTER_ADD, "Not enough parameters");
    201 
    202                 return errorSyntax(USAGE_USBFILTER_MODIFY, "Not enough parameters");
     200                    return errorSyntaxEx(USAGE_USBFILTER, HELP_SCOPE_USBFILTER_ADD, "Not enough parameters");
     201
     202                return errorSyntaxEx(USAGE_USBFILTER, HELP_SCOPE_USBFILTER_MODIFY, "Not enough parameters");
    203203            }
    204204
     
    329329                }
    330330                else
    331                     return errorSyntax(cmd.mAction == USBFilterCmd::Add ? USAGE_USBFILTER_ADD : USAGE_USBFILTER_MODIFY,
     331                    return errorSyntaxEx(USAGE_USBFILTER, cmd.mAction == USBFilterCmd::Add ? HELP_SCOPE_USBFILTER_ADD : HELP_SCOPE_USBFILTER_MODIFY,
    332332                                       "Unknown option '%s'", a->argv[i]);
    333333            }
     
    347347                   )
    348348                {
    349                     return errorSyntax(USAGE_USBFILTER_ADD, "Mandatory options not supplied");
     349                    return errorSyntaxEx(USAGE_USBFILTER, HELP_SCOPE_USBFILTER_ADD, "Mandatory options not supplied");
    350350                }
    351351            }
     
    357357            /* at least: 0: command, 1: index, 2: --target, 3: <target value> */
    358358            if (a->argc < 4)
    359                 return errorSyntax(USAGE_USBFILTER_REMOVE, "Not enough parameters");
     359                return errorSyntaxEx(USAGE_USBFILTER, HELP_SCOPE_USBFILTER_REMOVE, "Not enough parameters");
    360360
    361361            for (int i = 2; i < a->argc; i++)
     
    379379            // mandatory options
    380380            if (!cmd.mGlobal && !cmd.mMachine)
    381                 return errorSyntax(USAGE_USBFILTER_REMOVE, "Mandatory options not supplied");
     381                return errorSyntaxEx(USAGE_USBFILTER, HELP_SCOPE_USBFILTER_REMOVE, "Mandatory options not supplied");
    382382
    383383            break;
Note: See TracChangeset for help on using the changeset viewer.

© 2024 Oracle Support Privacy / Do Not Sell My Info Terms of Use Trademark Policy Automated Access Etiquette