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; }
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; }
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; }