VirtualBox

Ignore:
Timestamp:
Nov 22, 2013 11:15:41 AM (11 years ago)
Author:
vboxsync
Message:

VBoxManage: split 'guestcontrol' help into sub categories

File:
1 edited

Legend:

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

    r49190 r49621  
    4747}
    4848
    49 void printUsage(USAGECATEGORY u64Cmd, PRTSTREAM pStrm)
     49void printUsage(USAGECATEGORY fCategory, uint32_t fSubCategory, PRTSTREAM pStrm)
    5050{
    5151    bool fDumpOpts = false;
     
    8181#endif
    8282
    83     if (u64Cmd == USAGE_DUMPOPTS)
     83    if (fCategory == USAGE_DUMPOPTS)
    8484    {
    8585        fDumpOpts = true;
     
    9090        fDarwin = true;
    9191        fVBoxSDL = true;
    92         u64Cmd = USAGE_ALL;
     92        fCategory = USAGE_ALL;
    9393    }
    9494
     
    9797                 "\n");
    9898
    99     if (u64Cmd == USAGE_ALL)
     99    if (fCategory == USAGE_ALL)
    100100        RTStrmPrintf(pStrm,
    101101                     "  VBoxManage [<general option>] <command>\n"
     
    111111    const char *pcszSep1 = " ";
    112112    const char *pcszSep2 = "         ";
    113     if (u64Cmd != USAGE_ALL)
     113    if (fCategory != USAGE_ALL)
    114114    {
    115115        pcszSep1 = "VBoxManage";
     
    119119#define SEP pcszSep1, pcszSep2
    120120
    121     if (u64Cmd & USAGE_LIST)
     121    if (fCategory & USAGE_LIST)
    122122        RTStrmPrintf(pStrm,
    123123                           "%s list [--long|-l]%s vms|runningvms|ostypes|hostdvds|hostfloppies|\n"
     
    132132                     "\n", SEP);
    133133
    134     if (u64Cmd & USAGE_SHOWVMINFO)
     134    if (fCategory & USAGE_SHOWVMINFO)
    135135        RTStrmPrintf(pStrm,
    136136                           "%s showvminfo %s      <uuid|vmname> [--details]\n"
     
    139139                     "\n", SEP, SEP);
    140140
    141     if (u64Cmd & USAGE_REGISTERVM)
     141    if (fCategory & USAGE_REGISTERVM)
    142142        RTStrmPrintf(pStrm,
    143143                           "%s registervm %s      <filename>\n"
    144144                     "\n", SEP);
    145145
    146     if (u64Cmd & USAGE_UNREGISTERVM)
     146    if (fCategory & USAGE_UNREGISTERVM)
    147147        RTStrmPrintf(pStrm,
    148148                           "%s unregistervm %s    <uuid|vmname> [--delete]\n"
    149149                     "\n", SEP);
    150150
    151     if (u64Cmd & USAGE_CREATEVM)
     151    if (fCategory & USAGE_CREATEVM)
    152152        RTStrmPrintf(pStrm,
    153153                           "%s createvm %s        --name <name>\n"
     
    159159                     "\n", SEP);
    160160
    161     if (u64Cmd & USAGE_MODIFYVM)
     161    if (fCategory & USAGE_MODIFYVM)
    162162    {
    163163        RTStrmPrintf(pStrm,
     
    382382    }
    383383
    384     if (u64Cmd & USAGE_CLONEVM)
     384    if (fCategory & USAGE_CLONEVM)
    385385        RTStrmPrintf(pStrm,
    386386                           "%s clonevm %s         <uuid|vmname>\n"
     
    396396                     "\n", SEP);
    397397
    398     if (u64Cmd & USAGE_IMPORTAPPLIANCE)
     398    if (fCategory & USAGE_IMPORTAPPLIANCE)
    399399        RTStrmPrintf(pStrm,
    400400                           "%s import %s          <ovfname/ovaname>\n"
     
    405405                     "                             for a particular OVF)\n\n", SEP);
    406406
    407     if (u64Cmd & USAGE_EXPORTAPPLIANCE)
     407    if (fCategory & USAGE_EXPORTAPPLIANCE)
    408408        RTStrmPrintf(pStrm,
    409409                           "%s export %s          <machines> --output|-o <name>.<ovf/ova>\n"
     
    422422                     "\n", SEP);
    423423
    424     if (u64Cmd & USAGE_STARTVM)
     424    if (fCategory & USAGE_STARTVM)
    425425    {
    426426        RTStrmPrintf(pStrm,
     
    434434    }
    435435
    436     if (u64Cmd & USAGE_CONTROLVM)
     436    if (fCategory & USAGE_CONTROLVM)
    437437    {
    438438        RTStrmPrintf(pStrm,
     
    487487    }
    488488
    489     if (u64Cmd & USAGE_DISCARDSTATE)
     489    if (fCategory & USAGE_DISCARDSTATE)
    490490        RTStrmPrintf(pStrm,
    491491                           "%s discardstate %s    <uuid|vmname>\n"
    492492                     "\n", SEP);
    493493
    494     if (u64Cmd & USAGE_ADOPTSTATE)
     494    if (fCategory & USAGE_ADOPTSTATE)
    495495        RTStrmPrintf(pStrm,
    496496                           "%s adoptstate %s      <uuid|vmname> <state_file>\n"
    497497                     "\n", SEP);
    498498
    499     if (u64Cmd & USAGE_SNAPSHOT)
     499    if (fCategory & USAGE_SNAPSHOT)
    500500        RTStrmPrintf(pStrm,
    501501                           "%s snapshot %s        <uuid|vmname>\n"
     
    511511                     "\n", SEP);
    512512
    513     if (u64Cmd & USAGE_CLOSEMEDIUM)
     513    if (fCategory & USAGE_CLOSEMEDIUM)
    514514        RTStrmPrintf(pStrm,
    515515                           "%s closemedium %s     disk|dvd|floppy <uuid|filename>\n"
     
    517517                     "\n", SEP);
    518518
    519     if (u64Cmd & USAGE_STORAGEATTACH)
     519    if (fCategory & USAGE_STORAGEATTACH)
    520520        RTStrmPrintf(pStrm,
    521521                           "%s storageattach %s   <uuid|vmname>\n"
     
    549549                     "\n", SEP);
    550550
    551     if (u64Cmd & USAGE_STORAGECONTROLLER)
     551    if (fCategory & USAGE_STORAGECONTROLLER)
    552552        RTStrmPrintf(pStrm,
    553553                           "%s storagectl %s      <uuid|vmname>\n"
     
    562562                     "\n", SEP);
    563563
    564     if (u64Cmd & USAGE_BANDWIDTHCONTROL)
     564    if (fCategory & USAGE_BANDWIDTHCONTROL)
    565565        RTStrmPrintf(pStrm,
    566566                           "%s bandwidthctl %s    <uuid|vmname>\n"
     
    575575                     "\n", SEP);
    576576
    577     if (u64Cmd & USAGE_SHOWHDINFO)
     577    if (fCategory & USAGE_SHOWHDINFO)
    578578        RTStrmPrintf(pStrm,
    579579                           "%s showhdinfo %s      <uuid|filename>\n"
    580580                     "\n", SEP);
    581581
    582     if (u64Cmd & USAGE_CREATEHD)
     582    if (fCategory & USAGE_CREATEHD)
    583583        RTStrmPrintf(pStrm,
    584584                           "%s createhd %s        --filename <filename>\n"
     
    589589                     "\n", SEP);
    590590
    591     if (u64Cmd & USAGE_MODIFYHD)
     591    if (fCategory & USAGE_MODIFYHD)
    592592        RTStrmPrintf(pStrm,
    593593                           "%s modifyhd %s        <uuid|filename>\n"
     
    600600                     "\n", SEP);
    601601
    602     if (u64Cmd & USAGE_CLONEHD)
     602    if (fCategory & USAGE_CLONEHD)
    603603        RTStrmPrintf(pStrm,
    604604                           "%s clonehd %s         <uuid|inputfile> <uuid|outputfile>\n"
     
    608608                     "\n", SEP);
    609609
    610     if (u64Cmd & USAGE_CONVERTFROMRAW)
     610    if (fCategory & USAGE_CONVERTFROMRAW)
    611611        RTStrmPrintf(pStrm,
    612612                           "%s convertfromraw %s  <filename> <outputfile>\n"
     
    620620                     "\n", SEP, SEP);
    621621
    622     if (u64Cmd & USAGE_GETEXTRADATA)
     622    if (fCategory & USAGE_GETEXTRADATA)
    623623        RTStrmPrintf(pStrm,
    624624                           "%s getextradata %s    global|<uuid|vmname>\n"
     
    626626                     "\n", SEP);
    627627
    628     if (u64Cmd & USAGE_SETEXTRADATA)
     628    if (fCategory & USAGE_SETEXTRADATA)
    629629        RTStrmPrintf(pStrm,
    630630                           "%s setextradata %s    global|<uuid|vmname>\n"
     
    633633                     "\n", SEP);
    634634
    635     if (u64Cmd & USAGE_SETPROPERTY)
     635    if (fCategory & USAGE_SETPROPERTY)
    636636        RTStrmPrintf(pStrm,
    637637                           "%s setproperty %s     machinefolder default|<folder> |\n"
     
    645645                     "\n", SEP);
    646646
    647     if (u64Cmd & USAGE_USBFILTER_ADD)
     647    if (fCategory & USAGE_USBFILTER_ADD)
    648648        RTStrmPrintf(pStrm,
    649649                           "%s usbfilter %s       add <index,0-N>\n"
     
    662662                     "\n", SEP);
    663663
    664     if (u64Cmd & USAGE_USBFILTER_MODIFY)
     664    if (fCategory & USAGE_USBFILTER_MODIFY)
    665665        RTStrmPrintf(pStrm,
    666666                           "%s usbfilter %s       modify <index,0-N>\n"
     
    679679                     "\n", SEP);
    680680
    681     if (u64Cmd & USAGE_USBFILTER_REMOVE)
     681    if (fCategory & USAGE_USBFILTER_REMOVE)
    682682        RTStrmPrintf(pStrm,
    683683                           "%s usbfilter %s       remove <index,0-N>\n"
     
    685685                     "\n", SEP);
    686686
    687     if (u64Cmd & USAGE_SHAREDFOLDER_ADD)
     687    if (fCategory & USAGE_SHAREDFOLDER_ADD)
    688688        RTStrmPrintf(pStrm,
    689689                           "%s sharedfolder %s    add <uuid|vmname>\n"
     
    692692                     "\n", SEP);
    693693
    694     if (u64Cmd & USAGE_SHAREDFOLDER_REMOVE)
     694    if (fCategory & USAGE_SHAREDFOLDER_REMOVE)
    695695        RTStrmPrintf(pStrm,
    696696                           "%s sharedfolder %s    remove <uuid|vmname>\n"
     
    699699
    700700#ifdef VBOX_WITH_GUEST_PROPS
    701     if (u64Cmd & USAGE_GUESTPROPERTY)
     701    if (fCategory & USAGE_GUESTPROPERTY)
    702702        usageGuestProperty(pStrm, SEP);
    703703#endif /* VBOX_WITH_GUEST_PROPS defined */
    704704
    705705#ifdef VBOX_WITH_GUEST_CONTROL
    706     if (u64Cmd & USAGE_GUESTCONTROL)
    707         usageGuestControl(pStrm, SEP);
     706    if (fCategory & USAGE_GUESTCONTROL)
     707        usageGuestControl(pStrm, SEP, fSubCategory);
    708708#endif /* VBOX_WITH_GUEST_CONTROL defined */
    709709
    710     if (u64Cmd & USAGE_DEBUGVM)
     710    if (fCategory & USAGE_DEBUGVM)
    711711    {
    712712        RTStrmPrintf(pStrm,
     
    730730                     "\n", SEP);
    731731    }
    732     if (u64Cmd & USAGE_METRICS)
     732    if (fCategory & USAGE_METRICS)
    733733        RTStrmPrintf(pStrm,
    734734                           "%s metrics %s         list [*|host|<vmname> [<metric_list>]]\n"
     
    755755
    756756#if defined(VBOX_WITH_NAT_SERVICE)
    757     if (u64Cmd & USAGE_NATNETWORK)
     757    if (fCategory & USAGE_NATNETWORK)
    758758    {
    759759        RTStrmPrintf(pStrm,
     
    786786
    787787#if defined(VBOX_WITH_NETFLT)
    788     if (u64Cmd & USAGE_HOSTONLYIFS)
     788    if (fCategory & USAGE_HOSTONLYIFS)
    789789    {
    790790        RTStrmPrintf(pStrm,
     
    801801#endif
    802802
    803     if (u64Cmd & USAGE_DHCPSERVER)
     803    if (fCategory & USAGE_DHCPSERVER)
    804804    {
    805805        RTStrmPrintf(pStrm,
     
    819819                     "\n", SEP, SEP);
    820820    }
    821     if (u64Cmd & USAGE_EXTPACK)
     821    if (fCategory & USAGE_EXTPACK)
    822822    {
    823823        RTStrmPrintf(pStrm,
     
    833833 * @returns RTEXITCODE_SYNTAX.
    834834 */
    835 RTEXITCODE errorSyntax(USAGECATEGORY u64Cmd, const char *pszFormat, ...)
     835RTEXITCODE errorSyntax(USAGECATEGORY fCategory, const char *pszFormat, ...)
    836836{
    837837    va_list args;
     
    839839#ifndef VBOX_ONLY_DOCS
    840840    if (g_fInternalMode)
    841         printUsageInternal(u64Cmd, g_pStdErr);
     841        printUsageInternal(fCategory, g_pStdErr);
    842842    else
    843         printUsage(u64Cmd, g_pStdErr);
     843        printUsage(fCategory, ~0U, g_pStdErr);
    844844#endif /* !VBOX_ONLY_DOCS */
    845845    va_start(args, pszFormat);
     
    847847    va_end(args);
    848848    return RTEXITCODE_SYNTAX;
     849}
     850
     851/**
     852 * Print a usage synopsis and the syntax error message.
     853 * @returns RTEXITCODE_SYNTAX.
     854 */
     855RTEXITCODE errorSyntaxEx(USAGECATEGORY fCategory, uint32_t fSubCategory, const char *pszFormat, ...)
     856{
     857    va_list args;
     858    showLogo(g_pStdErr); // show logo even if suppressed
     859#ifndef VBOX_ONLY_DOCS
     860    if (g_fInternalMode)
     861        printUsageInternal(fCategory, g_pStdErr);
     862    else
     863        printUsage(fCategory, fSubCategory, g_pStdErr);
     864#endif /* !VBOX_ONLY_DOCS */
     865    va_start(args, pszFormat);
     866    RTStrmPrintf(g_pStdErr, "\nSyntax error: %N\n", pszFormat, &args);
     867    va_end(args);
     868    return RTEXITCODE_SYNTAX;
     869}
     870
     871/**
     872 * errorSyntax for RTGetOpt users.
     873 *
     874 * @returns RTEXITCODE_SYNTAX.
     875 *
     876 * @param   fCategory          The usage category of the command.
     877 * @param   fSubCategory         The usage sub-category of the command.
     878 * @param   rc              The RTGetOpt return code.
     879 * @param   pValueUnion     The value union.
     880 */
     881RTEXITCODE errorGetOptEx(USAGECATEGORY fCategory, uint32_t fSubCategory, int rc, union RTGETOPTUNION const *pValueUnion)
     882{
     883    /*
     884     * Check if it is an unhandled standard option.
     885     */
     886    if (rc == 'V')
     887    {
     888        RTPrintf("%sr%d\n", VBOX_VERSION_STRING, RTBldCfgRevision());
     889        return RTEXITCODE_SUCCESS;
     890    }
     891
     892    if (rc == 'h')
     893    {
     894        showLogo(g_pStdErr);
     895#ifndef VBOX_ONLY_DOCS
     896        if (g_fInternalMode)
     897            printUsageInternal(fCategory, g_pStdOut);
     898        else
     899            printUsage(fCategory, fSubCategory, g_pStdOut);
     900#endif
     901        return RTEXITCODE_SUCCESS;
     902    }
     903
     904    /*
     905     * General failure.
     906     */
     907    showLogo(g_pStdErr); // show logo even if suppressed
     908#ifndef VBOX_ONLY_DOCS
     909    if (g_fInternalMode)
     910        printUsageInternal(fCategory, g_pStdErr);
     911    else
     912        printUsage(fCategory, fSubCategory, g_pStdErr);
     913#endif /* !VBOX_ONLY_DOCS */
     914
     915    if (rc == VINF_GETOPT_NOT_OPTION)
     916        return RTMsgErrorExit(RTEXITCODE_SYNTAX, "Invalid parameter '%s'", pValueUnion->psz);
     917    if (rc > 0)
     918    {
     919        if (RT_C_IS_PRINT(rc))
     920            return RTMsgErrorExit(RTEXITCODE_SYNTAX, "Invalid option -%c", rc);
     921        return RTMsgErrorExit(RTEXITCODE_SYNTAX, "Invalid option case %i", rc);
     922    }
     923    if (rc == VERR_GETOPT_UNKNOWN_OPTION)
     924        return RTMsgErrorExit(RTEXITCODE_SYNTAX, "Unknown option: %s", pValueUnion->psz);
     925    if (rc == VERR_GETOPT_INVALID_ARGUMENT_FORMAT)
     926        return RTMsgErrorExit(RTEXITCODE_SYNTAX, "Invalid argument format: %s", pValueUnion->psz);
     927    if (pValueUnion->pDef)
     928        return RTMsgErrorExit(RTEXITCODE_SYNTAX, "%s: %Rrs", pValueUnion->pDef->pszLong, rc);
     929    return RTMsgErrorExit(RTEXITCODE_SYNTAX, "%Rrs", rc);
    849930}
    850931
     
    858939 * @param   pValueUnion     The value union.
    859940 */
    860 RTEXITCODE errorGetOpt(USAGECATEGORY fUsageCategory, int rc, union RTGETOPTUNION const *pValueUnion)
     941RTEXITCODE errorGetOpt(USAGECATEGORY fCategory, int rc, union RTGETOPTUNION const *pValueUnion)
    861942{
    862     /*
    863      * Check if it is an unhandled standard option.
    864      */
    865     if (rc == 'V')
    866     {
    867         RTPrintf("%sr%d\n", VBOX_VERSION_STRING, RTBldCfgRevision());
    868         return RTEXITCODE_SUCCESS;
    869     }
    870 
    871     if (rc == 'h')
    872     {
    873         showLogo(g_pStdErr);
    874 #ifndef VBOX_ONLY_DOCS
    875         if (g_fInternalMode)
    876             printUsageInternal(fUsageCategory, g_pStdOut);
    877         else
    878             printUsage(fUsageCategory, g_pStdOut);
    879 #endif
    880         return RTEXITCODE_SUCCESS;
    881     }
    882 
    883     /*
    884      * General failure.
    885      */
    886     showLogo(g_pStdErr); // show logo even if suppressed
    887 #ifndef VBOX_ONLY_DOCS
    888     if (g_fInternalMode)
    889         printUsageInternal(fUsageCategory, g_pStdErr);
    890     else
    891         printUsage(fUsageCategory, g_pStdErr);
    892 #endif /* !VBOX_ONLY_DOCS */
    893 
    894     if (rc == VINF_GETOPT_NOT_OPTION)
    895         return RTMsgErrorExit(RTEXITCODE_SYNTAX, "Invalid parameter '%s'", pValueUnion->psz);
    896     if (rc > 0)
    897     {
    898         if (RT_C_IS_PRINT(rc))
    899             return RTMsgErrorExit(RTEXITCODE_SYNTAX, "Invalid option -%c", rc);
    900         return RTMsgErrorExit(RTEXITCODE_SYNTAX, "Invalid option case %i", rc);
    901     }
    902     if (rc == VERR_GETOPT_UNKNOWN_OPTION)
    903         return RTMsgErrorExit(RTEXITCODE_SYNTAX, "Unknown option: %s", pValueUnion->psz);
    904     if (rc == VERR_GETOPT_INVALID_ARGUMENT_FORMAT)
    905         return RTMsgErrorExit(RTEXITCODE_SYNTAX, "Invalid argument format: %s", pValueUnion->psz);
    906     if (pValueUnion->pDef)
    907         return RTMsgErrorExit(RTEXITCODE_SYNTAX, "%s: %Rrs", pValueUnion->pDef->pszLong, rc);
    908     return RTMsgErrorExit(RTEXITCODE_SYNTAX, "%Rrs", rc);
     943    return errorGetOptEx(fCategory, ~0U, rc, pValueUnion);
    909944}
    910945
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