void CommandData::ProcessCommand() { #ifndef SFX_MODULE const char *SingleCharCommands="FUADPXETK"; if (Command[0]!=0 && Command[1]!=0 && strchr(SingleCharCommands,*Command)!=NULL || *ArcName==0) OutHelp(*Command==0 ? RARX_SUCCESS:RARX_USERERROR); // Return 'success' for 'rar' without parameters. #ifdef _UNIX if (GetExt(ArcName)==NULL && (!FileExist(ArcName) || IsDir(GetFileAttr(ArcName)))) strncatz(ArcName,".rar",ASIZE(ArcName)); #else if (GetExt(ArcName)==NULL) strncatz(ArcName,".rar",ASIZE(ArcName)); #endif if (strchr("AFUMD",*Command)==NULL) { if (GenerateArcName) GenerateArchiveName(ArcName,ArcNameW,ASIZE(ArcName),GenerateMask,false); StringList ArcMasks; ArcMasks.AddString(ArcName); ScanTree Scan(&ArcMasks,Recurse,SaveLinks,SCAN_SKIPDIRS); FindData FindData; while (Scan.GetNext(&FindData)==SCAN_SUCCESS) AddArcName(FindData.Name,FindData.NameW); } else AddArcName(ArcName,NULL); #endif switch(Command[0]) { case 'P': case 'X': case 'E': case 'T': case 'I': { CmdExtract Extract; Extract.DoExtract(this); } break; #ifndef SILENT case 'V': case 'L': ListArchive(this); break; default: OutHelp(RARX_USERERROR); #endif } if (!BareOutput) mprintf("\n"); }
/*-----------------------------------------------------------------*/ FILE *createDumpFile (int id) { struct _dumpFiles *dumpFilesPtr=dumpFiles; static int dumpIndex=0; static char dumpIndexStr[32]; while (dumpFilesPtr->id) { if (dumpFilesPtr->id==id) break; dumpFilesPtr++; } if (!dumpFilesPtr->id) { fprintf (stdout, "internal error: createDumpFile: unknown dump file.\n"); exit (1); } sprintf(dumpIndexStr, ".%d", dumpIndex); dumpIndex++; if (!dumpFilesPtr->filePtr) { // not used before, create it strncpyz (scratchFileName, dstFileName, PATH_MAX); #if 0 strncatz (scratchFileName, dumpIndexStr, PATH_MAX); #endif strncatz (scratchFileName, dumpFilesPtr->ext, PATH_MAX); if (!(dumpFilesPtr->filePtr = fopen (scratchFileName, "w"))) { werror (E_FILE_OPEN_ERR, scratchFileName); exit (1); } } #if 0 fprintf(dumpFilesPtr->filePtr, "Dump file index: %d\n", dumpIndex); #endif return dumpFilesPtr->filePtr; }
static void listoptions(const option_guide *opt_guide, const char *opt_spec) { char opt_name[32]; const char *opt_desc; struct OptionRange range[32]; char range_buffer[512]; char buf[32]; int i; assert(opt_guide); fprintf(stdout, "Option Allowed values Description\n"); fprintf(stdout, "---------------- ------------------------------ -----------\n"); while(opt_guide->option_type != OPTIONTYPE_END) { range_buffer[0] = 0; snprintf(opt_name, ARRAY_LENGTH(opt_name), "--%s", opt_guide->identifier); opt_desc = opt_guide->display_name; /* is this option relevant? */ if (!strchr(opt_spec, opt_guide->parameter)) { opt_guide++; continue; } switch(opt_guide->option_type) { case OPTIONTYPE_INT: option_resolution_listranges(opt_spec, opt_guide->parameter, range, ARRAY_LENGTH(range)); for (i = 0; range[i].max >= 0; i++) { if (range[i].min == range[i].max) snprintf(buf, ARRAY_LENGTH(buf), "%i", range[i].min); else snprintf(buf, ARRAY_LENGTH(buf), "%i-%i", range[i].min, range[i].max); if (i > 0) strncatz(range_buffer, "/", sizeof(range_buffer)); strncatz(range_buffer, buf, sizeof(range_buffer)); } break; case OPTIONTYPE_ENUM_BEGIN: i = 0; while(opt_guide[1].option_type == OPTIONTYPE_ENUM_VALUE) { if (i > 0) strncatz(range_buffer, "/", sizeof(range_buffer)); strncatz(range_buffer, opt_guide[1].identifier, sizeof(range_buffer)); opt_guide++; i++; } break; case OPTIONTYPE_STRING: snprintf(range_buffer, sizeof(range_buffer), "(string)"); break; default: assert(0); break; } fprintf(stdout, "%16s %-30s %s\n", opt_name, range_buffer, opt_desc); opt_guide++; } }