/** * Use this method to convert nsString to char*. * REMEMBER: Match this call with nsMemory::Free(aResult); * * @update 04/04/99 harishd * @param aValue - The string value * @param aResult - String coverted to char*. */ nsresult nsLoggingSink::GetNewCString(const nsAString& aValue, char** aResult) { nsresult result=NS_OK; nsAutoString temp; result=QuoteText(aValue,temp); if(NS_SUCCEEDED(result)) { *aResult = temp.IsEmpty() ? nsnull : ToNewCString(temp); } return result; }
static void DoText( char *line) /* The line of text. */ { char *p, *end; /* * Divide the line up into pieces consisting of backslash sequences, tabs, * and other text. */ p = line; while (*p != 0) { if (*p == '\t') { PRINT(("tab\n")); p++; } else if (*p != '\\') { /* * Ordinary text. */ for (end = p+1; (*end != '\\') && (*end != 0); end++) { /* Empty loop body. */ } PRINT(("text ")); QuoteText(p, end-p); PRINTC('\n'); p = end; } else { /* * A backslash sequence. There are particular ones that we * understand; output an error message for anything else and just * ignore the backslash. */ p++; if (*p == 'f') { /* * Font change. */ PRINT(("font %c\n", p[1])); p += 2; } else if (*p == '-') { PRINT(("dash\n")); p++; } else if (*p == 'e') { PRINT(("text \\\\\n")); p++; } else if (*p == '.') { PRINT(("text .\n")); p++; } else if (*p == '&') { p++; } else if (*p == '0') { PRINT(("text { }\n")); p++; } else if (*p == '(') { if ((p[1] == 0) || (p[2] == 0)) { fprintf(stderr, "Bad \\( sequence on line %d.\n", lineNumber); status = 1; } else { PRINT(("char {\\(%c%c}\n", p[1], p[2])); p += 3; } } else if (*p == 'N' && *(p+1) == '\'') { int ch; p += 2; sscanf(p,"%d",&ch); PRINT(("text \\u%04x\n", ch)); while(*p&&*p!='\'') p++; p++; } else if (*p != 0) { PRINT(("char {\\%c}\n", *p)); p++; } } } PRINT(("newline\n")); }
static void DoMacro( char *line) /* The line of text that contains the macro * invocation. */ { char *p, *end; int quote; /* * If there is no macro name, then just skip the whole line. */ if ((line[1] == 0) || (isspace(line[1]))) { return; } PRINT(("macro")); if (*line != '.') { PRINT(("2")); } /* * Parse the arguments to the macro (including the name), in order. */ p = line+1; while (1) { PRINTC(' '); if (*p == '"') { /* * The argument is delimited by quotes. */ for (end = p+1; *end != '"'; end++) { if (*end == 0) { fprintf(stderr, "Unclosed quote in macro call on line %d.\n", lineNumber); status = 1; break; } } QuoteText(p+1, (end-(p+1))); } else { quote = 0; for (end = p+1; (*end != 0) && (quote || !isspace(*end)); end++) { if (*end == '\'') { quote = !quote; } } QuoteText(p, end-p); } if (*end == 0) { break; } p = end+1; while (isspace(*p)) { /* * Skip empty space before next argument. */ p++; } if (*p == 0) { break; } } PRINTC('\n'); }
int ArcCommand::MakeListFile(char *ListFileName,int ShortNames,int QuoteName, int UseSlash,int FolderName,int NameOnly,int PathOnly, int FolderMask,char *LocalAllFilesMask,int AnsiCode) { // FILE *ListFile; HANDLE ListFile; DWORD WriteSize; SECURITY_ATTRIBUTES sa; sa.nLength=sizeof(sa); sa.lpSecurityDescriptor=NULL; sa.bInheritHandle=TRUE; if (FSF.MkTemp(ListFileName,"FAR")==NULL || (ListFile=CreateFile(ListFileName,GENERIC_WRITE, FILE_SHARE_READ|FILE_SHARE_WRITE, &sa,CREATE_ALWAYS, FILE_FLAG_SEQUENTIAL_SCAN,NULL)) == INVALID_HANDLE_VALUE) { if(!Silent) { char NameMsg[NM]; const char *MsgItems[]={GetMsg(MError),GetMsg(MCannotCreateListFile),NameMsg,GetMsg(MOk)}; FSF.TruncPathStr(lstrcpyn(NameMsg,ListFileName,sizeof(NameMsg)),MAX_WIDTH_MESSAGE); Info.Message(Info.ModuleNumber,FMSG_WARNING,NULL,MsgItems,ARRAYSIZE(MsgItems),1); } /* $ 25.07.2001 AA if(ListFile != INVALID_HANDLE_VALUE) CloseHandle(ListFile); 25.07.2001 AA $*/ return FALSE; } char CurArcDir[NM]; char Buf[3*NM]; if(NameOnly) *CurArcDir=0; else lstrcpy( CurArcDir, ArcDir ); int Length=lstrlen(CurArcDir); if (Length>0 && CurArcDir[Length-1]!='\\') lstrcat(CurArcDir,"\\"); if (UseSlash) for (int I=0;CurArcDir[I];I++) if (CurArcDir[I]=='\\') // CurArcDir[I]='//'; CurArcDir[I]='/'; for (int I=0;I<ItemsNumber;I++) { char FileName[NM]; if (ShortNames && *PanelItem[I].FindData.cAlternateFileName) lstrcpy(FileName,PanelItem[I].FindData.cAlternateFileName); else lstrcpy(FileName,PanelItem[I].FindData.cFileName); if (NameOnly) { char NewName[NM]; lstrcpy(NewName,FSF.PointToName(FileName)); lstrcpy(FileName,NewName); } if (PathOnly) { char *Ptr=(char*)FSF.PointToName(FileName); *Ptr=0; } int FileAttr=PanelItem[I].FindData.dwFileAttributes; *PrefixFileName=0; if(PanelItem[I].UserData && (PanelItem[I].Flags & PPIF_USERDATA)) { struct ArcItemUserData *aud=(struct ArcItemUserData*)PanelItem[I].UserData; if(aud->SizeStruct == sizeof(struct ArcItemUserData)) { if(aud->Prefix) lstrcpyn(PrefixFileName,aud->Prefix,sizeof(PrefixFileName)); if(aud->LinkName) lstrcpyn(FileName,aud->LinkName,sizeof(FileName)); } } int Error=FALSE; if (((FileAttr & FILE_ATTRIBUTE_DIRECTORY)==0 || FolderName)) { char OutName[NM]; // CHECK for BUGS!! if(*FileName == '\\' || *FileName == '/') FSF.sprintf(OutName,"%s%s",PrefixFileName,FileName+1); else FSF.sprintf(OutName,"%s%s%s",PrefixFileName,CurArcDir,FileName); NormalizePath(OutName,OutName); if (QuoteName==1) FSF.QuoteSpaceOnly(OutName); else if (QuoteName==2) QuoteText(OutName); if (AnsiCode) OemToChar(OutName,OutName); lstrcpy(Buf,OutName);lstrcat(Buf,"\r\n"); Error=WriteFile(ListFile,Buf,lstrlen(Buf),&WriteSize,NULL) == FALSE; //Error=fwrite(Buf,1,lstrlen(Buf),ListFile) != lstrlen(Buf); } if (!Error && (FileAttr & FILE_ATTRIBUTE_DIRECTORY) && FolderMask) { char OutName[NM]; FSF.sprintf(OutName,"%s%s%s%c%s",PrefixFileName,CurArcDir,FileName,UseSlash ? '/':'\\',LocalAllFilesMask); if (QuoteName==1) FSF.QuoteSpaceOnly(OutName); else if (QuoteName==2) QuoteText(OutName); if (AnsiCode) OemToChar(OutName,OutName); lstrcpy(Buf,OutName);lstrcat(Buf,"\r\n"); Error=WriteFile(ListFile,Buf,lstrlen(Buf),&WriteSize,NULL) == FALSE; //Error=fwrite(Buf,1,lstrlen(Buf),ListFile) != lstrlen(Buf); } if (Error) { CloseHandle(ListFile); DeleteFile(ListFileName); if(!Silent) { const char *MsgItems[]={GetMsg(MError),GetMsg(MCannotCreateListFile),GetMsg(MOk)}; Info.Message(Info.ModuleNumber,FMSG_WARNING,NULL,MsgItems,ARRAYSIZE(MsgItems),1); } return FALSE; } } CloseHandle(ListFile); /* if (!CloseHandle(ListFile)) { // clearerr(ListFile); CloseHandle(ListFile); DeleteFile(ListFileName); if(!Silent) { char *MsgItems[]={GetMsg(MError),GetMsg(MCannotCreateListFile),GetMsg(MOk)}; Info.Message(Info.ModuleNumber,FMSG_WARNING,NULL,MsgItems,ARRAYSIZE(MsgItems),1); } return FALSE; } */ return TRUE; }
int ArcCommand::ReplaceVar(char *Command,int &Length) { char Chr=Command[2]&(~0x20); if (Command[0]!='%' || Command[1]!='%' || Chr < 'A' || Chr > 'Z') return FALSE; char SaveStr[MAX_COMMAND_LENGTH],LocalAllFilesMask[NM]; int QuoteName=0,UseSlash=FALSE,FolderMask=FALSE,FolderName=FALSE; int NameOnly=FALSE,PathOnly=FALSE,AnsiCode=FALSE; int MaxNamesLength=127; int VarLength=3; lstrcpy(LocalAllFilesMask,AllFilesMask); while (1) { int BreakScan=FALSE; Chr=Command[VarLength]; if (Command[2]=='F' && Chr >= '0' && Chr <= '9') { MaxNamesLength=FSF.atoi(&Command[VarLength]); while (Chr >= '0' && Chr <= '9') Chr=Command[++VarLength]; continue; } if (Command[2]=='E' && Chr >= '0' && Chr <= '9') { MaxAllowedExitCode=FSF.atoi(&Command[VarLength]); while (Chr >= '0' && Chr <= '9') Chr=Command[++VarLength]; continue; } switch(Command[VarLength]) { case 'A': AnsiCode=TRUE; break; case 'Q': QuoteName=1; break; case 'q': QuoteName=2; break; case 'S': UseSlash=TRUE; break; case 'M': FolderMask=TRUE; break; case 'N': FolderName=TRUE; break; case 'W': NameOnly=TRUE; break; case 'P': PathOnly=TRUE; break; case '*': lstrcpy(LocalAllFilesMask,"*"); break; default: BreakScan=TRUE; break; } if (BreakScan) break; VarLength++; } if ((MaxNamesLength-=Length)<=0) MaxNamesLength=1; if (MaxNamesLength>MAX_COMMAND_LENGTH-512) MaxNamesLength=MAX_COMMAND_LENGTH-512; if (FolderMask==FALSE && FolderName==FALSE) FolderName=TRUE; lstrcpy(SaveStr,Command+VarLength); switch(Command[2]) { case 'A': lstrcpy(Command,ArcName); if (AnsiCode) OemToChar(Command,Command); if (PathOnly) { char *NamePtr=(char *)FSF.PointToName(Command); if (NamePtr!=Command) *(NamePtr-1)=0; else lstrcpy(Command," "); } FSF.QuoteSpaceOnly(Command); break; case 'a': { int Dot=strchr(FSF.PointToName(ArcName),'.')!=NULL; ConvertNameToShort(ArcName,Command); char *Slash=strrchr(ArcName,'\\'); if (GetFileAttributes(ArcName)==0xFFFFFFFF && Slash!=NULL && Slash!=ArcName) { char Path[NM]; lstrcpy(Path,ArcName); Path[Slash-ArcName]=0; ConvertNameToShort(Path,Command); lstrcat(Command,Slash); } if (Dot && strchr(FSF.PointToName(Command),'.')==NULL) lstrcat(Command,"."); if (AnsiCode) OemToChar(Command,Command); if (PathOnly) { char *NamePtr=(char *)FSF.PointToName(Command); if (NamePtr!=Command) *(NamePtr-1)=0; else lstrcpy(Command," "); } } FSF.QuoteSpaceOnly(Command); break; case 'D': *Command=0; break; case 'E': *Command=0; break; case 'l': case 'L': if (!MakeListFile(ListFileName,Command[2]=='l',QuoteName,UseSlash, FolderName,NameOnly,PathOnly,FolderMask, LocalAllFilesMask,AnsiCode)) return -1; char QListName[NM+2]; FSF.QuoteSpaceOnly(lstrcpy(QListName,ListFileName)); lstrcpy(Command,QListName); break; case 'P': lstrcpy(Command,Password); break; case 'C': if(*CommentFileName) //второй раз сюда не лезем break; { *Command=0; HANDLE CommentFile; //char CommentFileName[MAX_PATH]; char Buf[512]; SECURITY_ATTRIBUTES sa; sa.nLength=sizeof(sa); sa.lpSecurityDescriptor=NULL; sa.bInheritHandle=TRUE; if(FSF.MkTemp(CommentFileName, "FAR") && (CommentFile=CreateFile(CommentFileName, GENERIC_WRITE, FILE_SHARE_READ|FILE_SHARE_WRITE, &sa, CREATE_ALWAYS, /*FILE_ATTRIBUTE_TEMPORARY|*//*FILE_FLAG_DELETE_ON_CLOSE*/0, NULL)) != INVALID_HANDLE_VALUE) { DWORD Count; if(Info.InputBox(GetMsg(MComment), GetMsg(MInputComment), NULL, "", Buf, sizeof(Buf), NULL, 0)) //??тут можно и заполнить строку комментарием, но надо знать, файловый //?? он или архивный. да и имя файла в архиве тоже надо знать... { WriteFile(CommentFile, Buf, lstrlen(Buf), &Count, NULL); lstrcpy(Command, CommentFileName); CloseHandle(CommentFile); } FlushConsoleInputBuffer(GetStdHandle(STD_INPUT_HANDLE)); } } break; case 'R': lstrcpy(Command,RealArcDir); if (UseSlash) { for (int I=0;Command[I];I++) if (Command[I]=='\\') // Command[I]='//'; /* $ 28.11.2000 AS */ Command[I]='/'; /* AS $*/ } FSF.QuoteSpaceOnly(Command); break; case 'W': lstrcpy(Command,TempPath); break; case 'f': case 'F': if (PanelItem!=NULL) { char CurArcDir[NM]; lstrcpy(CurArcDir,ArcDir); int Length=lstrlen(CurArcDir); if (Length>0 && CurArcDir[Length-1]!='\\') lstrcat(CurArcDir,"\\"); char Names[MAX_COMMAND_LENGTH]; *Names=0; if (NameNumber==-1) NameNumber=0; while (NameNumber<ItemsNumber || Command[2]=='f') { char Name[NM*2]; int IncreaseNumber=0,FileAttr; if (*NextFileName) { FSF.sprintf(Name,"%s%s%s",PrefixFileName,CurArcDir,NextFileName); *NextFileName=0; FileAttr=0; } else { int N; if (Command[2]=='f' && PrevFileNameNumber!=-1) N=PrevFileNameNumber; else { N=NameNumber; IncreaseNumber=1; } if (N>=ItemsNumber) break; *PrefixFileName=0; char *cFileName=PanelItem[N].FindData.cFileName; if(PanelItem[N].UserData && (PanelItem[N].Flags & PPIF_USERDATA)) { struct ArcItemUserData *aud=(struct ArcItemUserData*)PanelItem[N].UserData; if(aud->SizeStruct == sizeof(struct ArcItemUserData)) { if(aud->Prefix) lstrcpyn(PrefixFileName,aud->Prefix,sizeof(PrefixFileName)); if(aud->LinkName) cFileName=aud->LinkName; } } // CHECK for BUGS!! if(*cFileName == '\\' || *cFileName == '/') FSF.sprintf(Name,"%s%s",PrefixFileName,cFileName+1); else FSF.sprintf(Name,"%s%s%s",PrefixFileName,CurArcDir,cFileName); NormalizePath(Name,Name); FileAttr=PanelItem[N].FindData.dwFileAttributes; PrevFileNameNumber=N; } if (AnsiCode) OemToChar(Name,Name); if (NameOnly) { char NewName[NM]; lstrcpy(NewName,FSF.PointToName(Name)); lstrcpy(Name,NewName); } if (PathOnly) { char *NamePtr=(char *)FSF.PointToName(Name); if (NamePtr!=Name) *(NamePtr-1)=0; else lstrcpy(Name," "); } if (*Names==0 || (lstrlen(Names)+lstrlen(Name)<MaxNamesLength && Command[2]!='f')) { NameNumber+=IncreaseNumber; if (FileAttr & FILE_ATTRIBUTE_DIRECTORY) { char FolderMaskName[NM]; //lstrcpy(LocalAllFilesMask,PrefixFileName); FSF.sprintf(FolderMaskName,"%s\\%s",Name,LocalAllFilesMask); if (PathOnly) { lstrcpy(FolderMaskName,Name); char *NamePtr=(char *)FSF.PointToName(FolderMaskName); if (NamePtr!=FolderMaskName) *(NamePtr-1)=0; else lstrcpy(FolderMaskName," "); } if (FolderMask) { if (FolderName) lstrcpy(NextFileName,FolderMaskName); else lstrcpy(Name,FolderMaskName); } } if (QuoteName==1) FSF.QuoteSpaceOnly(Name); else if (QuoteName==2) QuoteText(Name); if (UseSlash) for (int I=0;Name[I];I++) if (Name[I]=='\\') // Name[I]='//'; /* $ 28.11.2000 AS */ Name[I]='/'; /* AS $*/ if (*Names) lstrcat(Names," "); lstrcat(Names,Name); } else break; } lstrcpy(Command,Names); } else *Command=0; break; default: return FALSE; } Length=lstrlen(Command); lstrcat(Command,SaveStr); return TRUE; }