Example #1
0
int ParseArgs(int nArgc, char *ppArgv[], CommandArgs *pArgs)
{
    char c;
    ArgsStream stream;
    char *pszStr;

    memset(pArgs, 0, sizeof(CommandArgs));
    stream.Initialize(nArgc, ppArgv);
#ifdef _win32
    GetCygpath();
#endif
    while ((c = stream.PeekChar()) != 0) {
        if (IsCommandSwitch(c)) {
            stream.GetChar(); // skip switch char: '-'

            switch (c = stream.GetChar()) {
                case 'B':
#ifdef _win32
                    if(HasCygpath()){
                        pArgs->pszInputLBO = Turn2WinPath(stream.GetWord());
                    } else {
#endif
                        pArgs->pszInputLBO = stream.GetWord();
#ifdef _win32
                    }
#endif

                    if (!pArgs->pszInputLBO) {
                        CmdError(CommandError_NoFile, c);
                        return CommandError_NoFile;
                    }
                    break;

                case 'C':
                    pszStr = stream.GetWord();
                    if (!pszStr) {
                        CmdError(CommandError_NoFile, c);
                        return CommandError_NoFile;
                    }
                    if (ContainsSemicolon(pszStr)) {
                        CmdError(CommandError_InvalidSemicolon, c);
                        return CommandError_InvalidSemicolon;
                    }
                    ConcatCommasStr(&(pArgs->pszInputCLS), pszStr);
                    break;

                case 'e':
                    pArgs->mAttribs |= Command_e_NoElastos;
                    break;
                case 'k':
                    pArgs->mAttribs |= Command_k_InKernel;
                    break;
                case 's':
                    pArgs->mAttribs |= Command_k_InSDK;
                    break;

                case 'T':
                    pszStr = stream.GetWord();
                    if (strcmp(pszStr, "foreground") == 0) {
                        pArgs->mAttribs |= Command_r_Foreground;
                    }
                    if (!pszStr) {
                        CmdError(CommandError_NoTemplate, c);
                        return CommandError_NoTemplate;
                    }
                    if (ContainsSemicolon(pszStr)) {
                        CmdError(CommandError_InvalidSemicolon, c);
                        return CommandError_InvalidSemicolon;
                    }
                    ConcatCommasStr(&(pArgs->pszTemplates), pszStr);
                    break;

                case 'I':
                    pszStr = stream.GetWord();
                    if (!pszStr) {
                        CmdError(CommandError_NoPathStr, c);
                        return CommandError_NoPathStr;
                    }
                    if (ContainsSemicolon(pszStr)) {
                        CmdError(CommandError_InvalidSemicolon, c);
                        return CommandError_InvalidSemicolon;
                    }
#ifdef _win32
                    if(HasCygpath()){
                        pszStr = Turn2WinPath(pszStr);
                    }
#endif
                    ConcatCommasStr(&(pArgs->pszInputPath), pszStr);
#ifdef _win32
                    if(HasCygpath()){
                        delete pszStr;
                    }
#endif
                    break;

                case 'p':
#ifdef _win32
                    if(HasCygpath()){
                        pArgs->pszOutputPath = Turn2WinPath(stream.GetWord());
                    } else {
#endif
                        pArgs->pszOutputPath = stream.GetWord();
#ifdef _win32
                    }
#endif
                    if (!pArgs->pszOutputPath) {
                        CmdError(CommandError_NoPathStr, c);
                        return CommandError_NoPathStr;
                    }
                    break;

                case 'o':
                    pArgs->pszOutputFile = stream.GetWord();
                    if (!pArgs->pszOutputFile) {
                        CmdError(CommandError_NoPathStr, c);
                        return CommandError_NoPathStr;
                    }
                    break;

                case 'l':
                    pArgs->mAttribs |= Command_l_ListTemplates;
                    break;

                case 'f':
                    pArgs->mAttribs |= Command_r_Overwrite;
                    break;

                case 'v':
                    pArgs->mAttribs |= Command_r_Redirect;
                    break;

                case 'z':
                    pArgs->mAttribs |= Command_z_UseCustomClassObject;
                    break;

                case 'w':
                    pArgs->mAttribs |= Command_w_HaveSandwichMethod;
                    break;

                case 'n':
                    pArgs->mAttribs |= Command_n_UseNakedMode;
                    break;

                case 'u':
                    pArgs->mAttribs |= Command_u_WeakRef;
                    break;

                case '?':
                    fputs(c_pszCopyright, stdout);
                    fputs(c_pszUsage, stdout);
                    exit(0);

                default:
                    CmdError(CommandError_UnknownArg, c);
                    return CommandError_UnknownArg;
            }
        }
        else {
            CmdError(CommandError_UnknownArg, c);
            return CommandError_UnknownArg;
        }
    }

    if (!(pArgs->mAttribs & Command_l_ListTemplates)
        && (!pArgs->pszTemplates || !pArgs->pszInputCLS)) {
        CmdError(CommandError_NoSource, c);
        return CommandError_NoSource;
    }
    return 0;
}
Example #2
0
int ParseArgs(int nArgc, char *ppArgv[], CommandArgs *pArgs)
{
    char c;
    ArgsStream stream;

    memset(pArgs, 0, sizeof(CommandArgs));
    stream.Initialize(nArgc, ppArgv);
//    GetCygpath();

    while ((c = stream.PeekChar()) != 0) {
        if (IsCommandSwitch(c)) {
            stream.GetChar(); // skip switch char: '-'

            switch (c = stream.GetChar()) {
                case 'o':
                    if (pArgs->dwAttribs & Command_o_GenLBO) {
                        CmdError(CommandError_DupSwitch, c);
                        return CommandError_DupSwitch;
                    }
                    pArgs->dwAttribs |= Command_o_GenLBO;

                    if (!IsCommandSwitch(stream.PeekChar())) {
                        GetFileName(&stream, ".lbo", pArgs, &pArgs->pszLBO);
                    }
                    break;

                case 'u':
                    pArgs->dwAttribs |= Command_u_ListUserFuncs;
                    break;

                case 'p':
                    pArgs->dwAttribs |= Command_p_Preview;
                    break;

                case 'I':
//                    if(HasCygpath()){
//                        pArgs->pszSourcePath = Turn2WinPath(stream.GetWord());
//                    } else {
                        pArgs->pszSourcePath = stream.GetWord();
//                    }
                    if (!pArgs->pszSourcePath) {
                        CmdError(CommandError_NoPathStr, c);
                        return CommandError_NoPathStr;
                    }
                    break;

                case '?':
                    fputs(c_pszCopyright, stdout);
                    fputs(c_pszUsage, stdout);
                    exit(0);

                default:
                    CmdError(CommandError_UnknownArg, c);
                    return CommandError_UnknownArg;
            }
        }
        else {
            if (pArgs->pszSource) {
                CmdError(CommandError_DupSource, c);
                return CommandError_DupSource;
            }
//            if(HasCygpath()){
//                pArgs->pszSource = Turn2WinPath(stream.GetWord());
//            } else {
                pArgs->pszSource = stream.GetWord();
//            }
        }
    }

    if (pArgs->dwAttribs & Command_u_ListUserFuncs) {
        ListAllUserFuncs();
        if (!pArgs->pszSource) exit(0);
    }

    if (!pArgs->pszSource) {
        CmdError(CommandError_NoSource, c);
        return CommandError_NoSource;
    }
    if ((pArgs->dwAttribs & Command_o_GenLBO) && NULL == pArgs->pszLBO) {
        pArgs->pszLBO = GenFileName(pArgs->pszSource, ".lbo");
        if (NULL == pArgs->pszLBO) {
            CmdError(CommandError_OutOfMemory, 0);
            return CommandError_OutOfMemory;
        }
    }

    return 0;
}
Example #3
0
int ParseArgs(int nArgc, char *ppArgv[], CommandArgs *pArgs)
{
    char c;
    ArgsStream stream;
    BOOL bCharSkipped;

    memset(pArgs, 0, sizeof(CommandArgs));
    stream.Initialize(nArgc, ppArgv);

    if (stream.PeekChar() == 0) {
        fputs(c_pszCopyright, stdout);
        fputs(c_pszUsage, stdout);
        exit(0);
    }

    while ((c = stream.PeekChar()) != 0) {
        if (IsCommandSwitch(c)) {
            stream.GetChar(); // skip switch char: '-'

            bCharSkipped = FALSE;
            c = stream.PeekChar();
            if (IsCommandSwitch(c)) { // another '-'
                stream.GetChar(); // skip switch char: '-'
                c = stream.PeekChar();
            }
            switch (c) {
                case 'o': // output
                    stream.GetWord(); // skip char "c" or the rest of "output"
                    bCharSkipped = TRUE;
                    pArgs->pszOutputFile = stream.GetWord();
                    if (!pArgs->pszOutputFile) {
                        CmdError(CommandError_NoPathStr, c);
                        return CommandError_NoPathStr;
                    }
                    break;

                case 'i': // interface
                    pArgs->dwAttribs |= Command_r_Interface;
                    break;

                case 'c':
                    if (stream.PeekCharAt(2) == 'a') { // callback
                        pArgs->dwAttribs |= Command_r_Callback;
                    }
                    else if (stream.PeekCharAt(2) == 'o') { // const
                        pArgs->dwAttribs |= Command_r_Const;
                    }
                    else {
                        pArgs->dwAttribs |= Command_r_Class;
                    }
                    break;

                case 'b':
                    pArgs->dwAttribs |= Command_r_BaseClass;
                    break;

                case 'a':
                    if (stream.PeekCharAt(2) == 'l') { // all
                        pArgs->dwAttribs |= Command_r_All;
                    }
                    else { // aspect
                        pArgs->dwAttribs |= Command_r_Aspect;
                    }
                    break;

                case 'g': // generic
                    pArgs->dwAttribs |= Command_r_Generic;
                    break;

                case 'h':
                    if (stream.PeekCharAt(2) == 'e') { // help
                        fputs(c_pszCopyright, stdout);
                        fputs(c_pszUsage, stdout);
                        exit(0);
                    }
                    else { // callback handler
                        pArgs->dwAttribs |= Command_r_Callback;
                    }
                    break;

                case 'n':
                    pArgs->dwAttribs |= Command_r_Const;
                    break;

                case 'e': // enum
                    pArgs->dwAttribs |= Command_r_Enum;
                    break;

                case 'r': // regime
                    pArgs->dwAttribs |= Command_r_Regime;
                    break;

                case 's': // struct
                    pArgs->dwAttribs |= Command_r_Struct;
                    break;

                case 'm': // method
                    pArgs->dwAttribs |= Command_r_Method;
                    break;

                case 'f':
                    pArgs->dwAttribs |= Command_r_ForceOverride;
                    break;

                case '?':
                    fputs(c_pszCopyright, stdout);
                    fputs(c_pszUsage, stdout);
                    exit(0);

                default:
                    CmdError(CommandError_UnknownArg, c);
                    return CommandError_UnknownArg;
            }
            if (!bCharSkipped) {
                stream.GetWord(); //skip the char and the rest
            }
        }
        else {
            pArgs->pszInputFile = stream.GetWord();
        }
    }

    if (!pArgs->pszInputFile) {
        CmdError(CommandError_NoSource, c);
        return CommandError_NoSource;
    }
    return 0;
}