示例#1
0
void DataBase::applyGlossario(const QString& nomefile){

    QFile file(nomefile);
    if(!file.open(QIODevice::ReadWrite))
    {return;	throw Ecc_FileNotFound;}
    QString text(file.readAll());
    text.replace(QString("\\ped{g}"),QString(""));

    file.resize(0); // go to the beginning of the file
    file.write(text.toUtf8()); // write the new text back to the file

    file.close();

    QMap<QString, Lemma*>::const_iterator it=db.begin();
    for (;it!=db.end();++it){
        replaceFile(nomefile, it.value()->getWord());
        std::vector<QString>::const_iterator i=it.value()->getPlural().begin();
        for(; i!=it.value()->getPlural().end();++i){
            replaceFile(nomefile, *i);
        }
    }
}
示例#2
0
int main (int argc, char **argv) {
	// start flags declarations...
	
	gDataOffset = 0; //globally declared in GCMutils.h; Must be initialized before use...
	int hexFlag = 0;
	
	//for extracting:
	char *extractFileFrom = NULL;
	char *extractFileTo = NULL;
	
	char *fsReplacePath = NULL;
	
	verboseFlag = 0;
	
	int showInfoFlag = 1;

	int extractDiskHeaderFlag = 0;
	char *extractDiskHeaderFile = GCM_DISK_HEADER_FILENAME;
	
	int extractDiskHeaderInfoFlag = 0;
	char *extractDiskHeaderInfoFile = GCM_DISK_HEADER_INFO_FILENAME;

	int extractApploaderFlag = 0;
	char *extractApploaderFile = GCM_APPLOADER_FILENAME;
	
	int extractBootDolFlag = 0;
	char *extractBootDolFile = GCM_BOOT_DOL_FILENAME;
	
	int injectDiskHeaderFlag = 0;
	char *injectDiskHeaderFile = GCM_DISK_HEADER_FILENAME;
	
	int injectDiskHeaderInfoFlag = 0;
	char *injectDiskHeaderInfoFile = GCM_DISK_HEADER_INFO_FILENAME;
	
	int injectApploaderFlag = 0;
	char *injectApploaderFile = GCM_APPLOADER_FILENAME;
	
	char *replaceFileLocalPath = NULL;
	char *replaceFileGCMPath = NULL;

	int listFilesFlag = 0;
	listInfoFlag = 0;
	listPathFlag = 0;
	// end flag declarations
	
	//start argument parsing...
	char *currentArg = NULL;

	do {
		currentArg = GET_NEXT_ARG;
		if (!currentArg) {
			//there's no args! uh oh!
			
			//printf("No arguments...\n");
			printUsage();
			exit(0);
		} else if (CHECK_ARG(ARG_VERBOSE)) {
			//turn on verbosity!
			
			verboseFlag++;
			
			verbosePrint("Verbose output ON.");
		} else if (CHECK_ARG(ARG_HELP)) {
			// print extended help
			
			printExtendedUsage();
			exit(0);
		} else if (CHECK_ARG(ARG_INFO)) {
			//they want to see info...
			
			showInfoFlag++;
			
			verbosePrint("Show info flag ON.");
		} else if (CHECK_ARG(ARG_HEX)) {
			//they want hex notation...
			
			hexFlag = 1;
			
			verbosePrint("Hex notation ON.");
			
		} else if (CHECK_ARG(ARG_OFFSET)) {
			//change the data offset
			
			gDataOffset = strtoul(GET_NEXT_ARG, NULL, 0);
			
			char verboseMsg[32] = "";
			sprintf(verboseMsg, "Data offset changed to: %d", gDataOffset);
			
			verbosePrint(verboseMsg);
		} else if (CHECK_ARG(ARG_REPLACE_FILESYSTEM)) {
			// they want to replace the filesystem
			
			fsReplacePath		= GET_NEXT_ARG;
			
			if (!fsReplacePath) {
				printf("Argument error...\n");
				printUsage();
				exit(1);
			}
		} else if (CHECK_ARG(ARG_EXTRACT)) {
			// extract files...
			// usage: -e <path> <destPath>
			
			extractFileFrom		= GET_NEXT_ARG;
			extractFileTo		= GET_NEXT_ARG;
			
			if (!extractFileFrom || !extractFileTo) {
				//argument error... something was omitted...
				printf("Argument error.\n");
				printUsage();
				exit(1);
			}
		} else if (CHECK_ARG(ARG_EXTRACT_DISK_HEADER)) {
			// extract disk header... (to a file called "boot.bin")
			
			extractDiskHeaderFlag++;
			
			if (PEEK_ARG && strcmp(PEEK_ARG, OPT_FILE) == 0) {
				// if they're specifying a file...
				
				SKIP_NARG(1); //skip that -f we just looked at...
				extractDiskHeaderFile = GET_NEXT_ARG;
			}
		
		} else if (CHECK_ARG(ARG_EXTRACT_DISK_HEADER_INFO)) {
			// extract disk header info... (to a file called "bi2.bin")
			
			extractDiskHeaderInfoFlag++;
			
			if (PEEK_ARG && strcmp(PEEK_ARG, OPT_FILE) == 0) {
				// if they're specifying a file...
				
				SKIP_NARG(1); //skip that -f we just looked at...
				extractDiskHeaderInfoFile = GET_NEXT_ARG;
			}
			
		} else if (CHECK_ARG(ARG_EXTRACT_APPLOADER)) {
			//extract apploader... (to a file called "appldr.bin")
			
			extractApploaderFlag++;
			
			if (PEEK_ARG && strcmp(PEEK_ARG, OPT_FILE) == 0) {
				// if they're specifying a file...
				
				SKIP_NARG(1); //skip that -f we just looked at...
				extractApploaderFile = GET_NEXT_ARG;
			}
		} else if (CHECK_ARG(ARG_EXTRACT_BOOT_DOL)) {
			//extract the boot dol...
			
			extractBootDolFlag++;
			
			if (PEEK_ARG && strcmp(PEEK_ARG, OPT_FILE) == 0) {
				//if they specify a file...
				
				SKIP_NARG(1); //skip that -f
				extractBootDolFile = GET_NEXT_ARG;
			}
		} else if (CHECK_ARG(ARG_INJECT_DISK_HEADER)) {
			//inject the diskheader
			
			injectDiskHeaderFlag++;
			
			if (PEEK_ARG && strcmp(PEEK_ARG, OPT_FILE) == 0) {
				//if they're specifying a file... (otherwise use the default);
				
				SKIP_NARG(1); //skip the -f we just looked at...
				injectDiskHeaderFile = GET_NEXT_ARG;
			}
			
		} else if (CHECK_ARG(ARG_INJECT_DISK_HEADER_INFO)) {
			//inject the diskheaderinfo...
			
			injectDiskHeaderInfoFlag++;
			
			if (PEEK_ARG && strcmp(PEEK_ARG, OPT_FILE) == 0) {
				// if they're specifying a file...
				
				SKIP_NARG(1);
				injectDiskHeaderInfoFile = GET_NEXT_ARG;
			}
		} else if (CHECK_ARG(ARG_INJECT_APPLOADER)) {
			//inject the apploader...
			
			injectApploaderFlag++;
			
			if (PEEK_ARG && strcmp(PEEK_ARG, OPT_FILE) == 0) {
				//if they're specifying a file...
				
				SKIP_NARG(1);
				injectApploaderFile = GET_NEXT_ARG;
			}
		} else if (CHECK_ARG(ARG_REPLACE_FILE)) {
			//they want to replace a file...
			
			replaceFileGCMPath = GET_NEXT_ARG;
			replaceFileLocalPath = GET_NEXT_ARG;
			
			if (!replaceFileGCMPath || !replaceFileLocalPath) {
				printf("Argument error!\n");
				printUsage();
				exit(1);
			}
			
		} else if (CHECK_ARG(ARG_LIST)) {
			// list filesystem
			
			listFilesFlag++; //turn the listFiles flag on.
			
			while(1) {
				if (PEEK_ARG && (strcmp(PEEK_ARG, OPT_FILE_INFO) == 0 || strcmp(PEEK_ARG, OPT_FILE_INFO_SYN) == 0)) {
					SKIP_NARG(1);
					listInfoFlag++;
				} else if (PEEK_ARG && (strcmp(PEEK_ARG, OPT_FULL_PATH) == 0 || strcmp(PEEK_ARG, OPT_FULL_PATH_SYN) == 0)) {
					SKIP_NARG(1);
					listPathFlag++;
				} else {
					break;
				}
			}
		} else {
			// do it to this file... this is the last argument... just ignore the rest...
			
			filepath = currentArg;
			filename = lastPathComponent(filepath);
			
			break;
		}
	} while(*argv);
	//end parsing arguments...
	
	//open the file for reading and start doing read operations!
	openFile("r");

	// print the info...
	if (showInfoFlag) {
		printGCMInfo(hexFlag);
	}
	
	// list the files, if necesary...
	if (listFilesFlag) {
		listFiles();
	}

	// extract files...
	if (extractFileFrom && extractFileTo) {
		//testing recursive extraction...
		
		GCMFileEntryStruct *e = NULL;
		
		if (strcmp(extractFileFrom, "/") == 0) {
			e = GCMGetRootFileEntry(gcmFile);
			printf("root file entry index: %d\n", e->index);
		} else {	
			e = GCMGetFileEntryAtPath(gcmFile, extractFileFrom);
		}
		
		strcpy(extractRootPath, extractFileTo);
		
		recurseFileEntry(e, extractFileEntry);
		
		free(e);
		//extractFile(extractFileFrom, extractFileTo);
	}
	
	
	//extract diskheader
	if (extractDiskHeaderFlag) {
		extractDiskHeader(extractDiskHeaderFile);
	}
	
	//extract diskheaderinfo
	if (extractDiskHeaderInfoFlag) {
		extractDiskHeaderInfo(extractDiskHeaderInfoFile);
	}
	
	//extract apploader
	if (extractApploaderFlag) {
		extractApploader(extractApploaderFile);
	}
	
	//extract main executable DOL
	if (extractBootDolFlag) {
		extractBootDol(extractBootDolFile);
	}
	
	//close the file and open it again for read/write
	closeFile();
	openFile("r+");
	
	//inject the diskheader
	if (injectDiskHeaderFlag) {
		injectDiskHeader(injectDiskHeaderFile);
	}
	
	//inject the diskheaderinfo
	if (injectDiskHeaderInfoFlag) {
		injectDiskHeaderInfo(injectDiskHeaderInfoFile);
	}
	
	//inject the apploader
	if (injectApploaderFlag) {
		injectApploader(injectApploaderFile);
	}
	
	if (replaceFileLocalPath && replaceFileGCMPath) {
		replaceFile(replaceFileGCMPath, replaceFileLocalPath);
	}

	//replace the filesystem
	if (fsReplacePath) {
		GCMReplaceFilesystem(gcmFile, fsReplacePath);
	}
	
	closeFile();
	
	return 0;
}
示例#3
0
文件: Main.cpp 项目: gigte/nlfix
bool processFile(const char *path)
{
	HANDLE hfile = CreateFileA(path, GENERIC_READ, FILE_SHARE_READ,
		NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);

	if (hfile == INVALID_HANDLE_VALUE)
		return false;

	SetFilePointer(tempfile, 0, NULL, FILE_BEGIN);

	static char inbuf[NLF_BUFSIZE];
	static char outbuf[NLF_BUFSIZE];

	DWORD bytes;
	DWORD pos = 0;

	while (true)
	{
		if (!ReadFile(hfile, inbuf, NLF_BUFSIZE, &bytes, NULL))
			goto reading_failed;

		if (bytes < NLF_BUFSIZE)
			break;

		if (!writeBuffer(inbuf, outbuf, bytes, &pos, false))
			goto reading_failed;
	}

	if (bytes != 0 || pos != 0)
	{
		if (!writeBuffer(inbuf, outbuf, bytes, &pos, true))
			goto reading_failed;
	}

	/*if (SetFilePointer(hfile, 0, NULL, FILE_CURRENT)
		== SetFilePointer(tempfile, 0, NULL, FILE_CURRENT))
	{
		
	}*/

	SetEndOfFile(tempfile);

	CloseHandle(hfile);

	// TODO: check if replace isn't needed
	// (i.e. file already has the EOL format wanted)
	//
	// UPD: LF <-> CF check wasn't done

	if (Mode == MODE_DOS
		&& GetFileSize(hfile, NULL) == GetFileSize(tempfile, NULL))
	{
		//puts("(unchanged) ");
		return true;
	}

	if (!replaceFile(path, tempfile_name))
		return false;

	return true;

reading_failed:
	CloseHandle(hfile);

	return false;
}
示例#4
0
void *thread2(void *args) {

    replaceFile();
    return 0;
}