mirror of
				https://github.com/KevinMidboe/linguist.git
				synced 2025-10-29 17:50:22 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			290 lines
		
	
	
		
			7.2 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
			
		
		
	
	
			290 lines
		
	
	
		
			7.2 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
| /*  mFile 1.1 by Minokon
 | |
|  *
 | |
|  *  (c) Copyright by Minokon 2010
 | |
|  *  (c) y_files Copyright by Y_Less 2010
 | |
|  *
 | |
|  */
 | |
| 
 | |
| #if defined _mfile_included
 | |
| 	#endinput
 | |
| #endif
 | |
| #define _mfile_included
 | |
| 
 | |
| //Defines
 | |
| #define MAX_LINE_SIZE 80 //Max lenght of one line in file
 | |
| #define MAX_KEY_SIZE 50 //Max lenght of key in line (to =)
 | |
| #define MAX_VALUE_SIZE 50 //Max lenght of value in line (past =)
 | |
| #define TMP_FILE "tmpfile.txt"
 | |
| 
 | |
| //Natives
 | |
| /*
 | |
| native mCreateFile(const file[]);
 | |
| native mRemoveFile(const file[]);
 | |
| native mClearFile(const file[]);
 | |
| native bool:mFileExist(const file[]);
 | |
| native mRenameFile(const file[], const newname[]);
 | |
| native mFindFile(const name[], dest[], &index, sizename=sizeof dest);
 | |
| native mCreateDir(const name[]);
 | |
| native mRenameDir(const dir[], const newname[]);
 | |
| native mFindDir(const name[], dest[], &index, sizename=sizeof dest);
 | |
| native mHowLines(const file[]);
 | |
| native mRemoveNewLine(string[]); //removes "\n" from string
 | |
| native mGetString(const file[], const key[], bool:ignorecase=false);
 | |
| native mGetInt(const file[], const key[], bool:ignorecase=false);
 | |
| native mGetFloat(const file[], const key[], &Float:value);
 | |
| native mSetString(const file[], const key[], const new_value[]);
 | |
| native mSetInt(const file[], const key[], new_value);
 | |
| native mSetFloat(const file[], const key[], Float:new_value);
 | |
| native mIsSet(const file[], const key[], bool:ignorecase=false);
 | |
| native mUnSet(const file[], const key[]);
 | |
| native mIsFileEmpty(const file[]);
 | |
| native y_files
 | |
| */
 | |
| //y_files by Y_Less Functions
 | |
| native ffind(const pattern[], filename[], len, &idx);
 | |
| native frename(const oldname[], const newname[]);
 | |
| native dfind(const pattern[], filename[], len, &idx);
 | |
| native dcreate(const name[]);
 | |
| native drename(const oldname[], const newname[]);
 | |
| 
 | |
| //Forwards
 | |
| forward OnFileCreated(file[]);
 | |
| forward OnFileRemoved(file[]);
 | |
| forward OnFileCleared(file[]);
 | |
| forward OnFileRenamed(oldname[], newname[]);
 | |
| forward OnDirCreated(dir[]);
 | |
| forward OnDirRenamed(oldname[], newname[]);
 | |
| 
 | |
| stock mCreateFile(const file[])
 | |
| {
 | |
| 	if(fexist(file)) fremove(file);
 | |
| 	new File:mfile = fopen(file, io_write);
 | |
|  	fclose(mfile);
 | |
|  	CallLocalFunction("OnFileCreated", "s", file);
 | |
|  	return 1;
 | |
| }
 | |
| 
 | |
| stock mRemoveFile(const file[])
 | |
| {
 | |
|  	CallLocalFunction("OnFileRemoved", "s", file);
 | |
|  	return fremove(file);
 | |
| }
 | |
| 
 | |
| stock mClearFile(const file[])
 | |
| {
 | |
| 	if(!fremove(file)) return 0;
 | |
| 	new File:mfile = fopen(file, io_write);
 | |
| 	fclose(mfile);
 | |
| 	CallLocalFunction("OnFileCleared", "s", file);
 | |
| 	return 1;
 | |
| }
 | |
| 
 | |
| stock bool:mFileExist(const file[])
 | |
| 	if(fexist(file)) return true; //dla ciekawych: fexist nie zwraca booleanu
 | |
| 	else return false;
 | |
| 
 | |
| stock mRenameFile(const file[], const newname[])
 | |
| {
 | |
|     CallLocalFunction("OnFileRenamed", "ss", file, newname);
 | |
| 	return frename(file, newname);
 | |
| }
 | |
| 
 | |
| stock mFindFile(const name[], dest[], &index, sizename=sizeof dest)
 | |
| 	return ffind(name, dest, sizename, index);
 | |
| 
 | |
| stock mCreateDir(const name[])
 | |
| {
 | |
|     CallLocalFunction("OnDirCreated", "s", name);
 | |
| 	return dcreate(name);
 | |
| }
 | |
| 
 | |
| stock mRenameDir(const dir[], const newname[])
 | |
| {
 | |
|     CallLocalFunction("OnDirRenamed", "ss", dir, newname);
 | |
| 	return drename(dir, newname);
 | |
| }
 | |
| 
 | |
| stock mFindDir(const name[], dest[], &index, sizename=sizeof dest)
 | |
| 	return dfind(name, dest, sizename, index);
 | |
| 
 | |
| stock mHowLines(const file[])
 | |
| {
 | |
| 	new lines, str[MAX_LINE_SIZE];
 | |
| 	new File:mfile = fopen(file, io_read);
 | |
| 	while(fread(mfile, str)) lines++;
 | |
| 	fclose(mfile);
 | |
| 	return lines;
 | |
| }
 | |
| 
 | |
| stock mRemoveNewLine(string[])
 | |
| {
 | |
| 	new pos = strfind(string, "\n");
 | |
| 	if(pos != -1)
 | |
| 	{
 | |
| 		strdel(string, pos, pos+2);
 | |
| 		return 1;
 | |
| 	}
 | |
| 	return 0;
 | |
| }
 | |
| 
 | |
| stock mGetString(const file[], const key[], bool:ignorecase=false)
 | |
| {
 | |
| 	//Create file if not exists
 | |
|     if(!fexist(file))
 | |
| 	{
 | |
| 	    new File:created = fopen(file, io_write);
 | |
| 	    fclose(created);
 | |
| 	}
 | |
| 	new //Variables
 | |
| 	    File:mfile = fopen(file, io_read), //Open file
 | |
| 	    str[MAX_LINE_SIZE],
 | |
| 	    str2[MAX_KEY_SIZE],
 | |
| 	    str3[MAX_VALUE_SIZE],
 | |
| 	    pos;
 | |
| 	//Find key in file
 | |
| 	while(fread(mfile, str))
 | |
| 	{
 | |
| 	    pos = strfind(str, "=", ignorecase);
 | |
| 	    strmid(str2, str, 0, pos);
 | |
| 		if(!strcmp(str2, key, ignorecase, strlen(key)+1))
 | |
| 		{
 | |
| 		    strmid(str3, str, pos+1, strlen(str));
 | |
| 		    mRemoveNewLine(str3);
 | |
| 		    break;
 | |
| 		}
 | |
| 	}
 | |
| 	fclose(mfile);
 | |
| 	return str3;
 | |
| }
 | |
| 
 | |
| stock mGetInt(const file[], const key[], bool:ignorecase=false)
 | |
| 	return strval(mGetString(file, key, ignorecase));
 | |
| 	
 | |
| stock mGetFloat(const file[], const key[], &Float:value, bool:ignorecase=false)
 | |
| 	value = floatstr(mGetString(file, key, ignorecase));
 | |
| 
 | |
| stock mSetString(const file[], const key[], const new_value[])
 | |
| {
 | |
|     //Create file if not exists
 | |
| 	if(!fexist(file))
 | |
| 	{
 | |
| 	    new File:created = fopen(file, io_write);
 | |
| 	    fclose(created);
 | |
| 	}
 | |
| 	new //Variables
 | |
| 		str[MAX_LINE_SIZE],
 | |
| 		str2[MAX_KEY_SIZE],
 | |
| 		str3[MAX_LINE_SIZE],
 | |
| 		bool:lFinded = false;
 | |
| 	//Open file
 | |
| 	new File:mfile = fopen(file, io_read);
 | |
| 	//Create cache file
 | |
| 	new File:tmpfile = fopen(TMP_FILE, io_write);
 | |
| 	fclose(tmpfile);
 | |
| 	//Open cache file
 | |
| 	tmpfile = fopen(TMP_FILE, io_append);
 | |
| 	format(str3, sizeof str3, "%s=%s\n", key, new_value);
 | |
| 	while(fread(mfile, str))
 | |
| 	{
 | |
| 	    strmid(str2, str, 0, strfind(str, "="));
 | |
| 	    if(!strcmp(str2, key))
 | |
| 	    {
 | |
| 			fwrite(tmpfile, str3);
 | |
| 			lFinded = true;
 | |
| 	    }
 | |
| 	    else
 | |
| 	        fwrite(tmpfile, str);
 | |
| 	}
 | |
| 	if(!lFinded) //if line not found
 | |
| 		fwrite(tmpfile, str3);
 | |
|     //Close and remove old file
 | |
|     fclose(mfile);
 | |
| 	fremove(file);
 | |
| 	//Close cache file and rename it
 | |
| 	fclose(tmpfile);
 | |
| 	frename(TMP_FILE, file);
 | |
| 	return 1;
 | |
| }
 | |
| 
 | |
| stock mSetInt(const file[], const key[], new_value)
 | |
| {
 | |
| 	new str[MAX_VALUE_SIZE];
 | |
| 	valstr(str, new_value);
 | |
| 	mSetString(file, key, str);
 | |
| 	return 1;
 | |
| }
 | |
| 
 | |
| stock mSetFloat(const file[], const key[], Float:new_value)
 | |
| {
 | |
| 	new str[MAX_VALUE_SIZE];
 | |
| 	format(str, sizeof str, "%f", new_value);
 | |
| 	return mSetString(file, key, str);
 | |
| }
 | |
| 
 | |
| stock bool:mIsSet(const file[], const key[], bool:ignorecase=false)
 | |
| {
 | |
|     //If fexists return false
 | |
|     if(!fexist(file)) return false;
 | |
| 	new //Variables
 | |
| 	    File:mfile = fopen(file, io_read), //Open file
 | |
| 	    str[MAX_LINE_SIZE],
 | |
| 	    str2[MAX_KEY_SIZE],
 | |
| 		bool:finded = false;
 | |
| 	//Find key in file
 | |
| 	while(fread(mfile, str))
 | |
| 	{
 | |
| 	    strmid(str2, str, 0, strfind(str, "="));
 | |
| 		if(!strcmp(str2, key, ignorecase, strlen(key)+1))
 | |
| 		{
 | |
| 			finded = true;
 | |
| 			break;
 | |
|    		}
 | |
| 	}
 | |
| 	fclose(mfile);
 | |
| 	return finded;
 | |
| }
 | |
| 
 | |
| stock mUnSet(const file[], const key[])
 | |
| {
 | |
| 	if(!fexist(file)) return 0;
 | |
| 	new //Variables
 | |
| 		str[MAX_LINE_SIZE],
 | |
| 		str2[MAX_KEY_SIZE];
 | |
| 	//Open file
 | |
| 	new File:mfile = fopen(file, io_read);
 | |
| 	//Create cache file
 | |
| 	new File:tmpfile = fopen(TMP_FILE, io_write);
 | |
| 	fclose(tmpfile);
 | |
| 	//Open cache file
 | |
| 	tmpfile = fopen(TMP_FILE, io_append);
 | |
| 	while(fread(mfile, str))
 | |
| 	{
 | |
| 	    strmid(str2, str, 0, strfind(str, "="));
 | |
| 	    if(strcmp(str2, key) != 0)
 | |
| 	    	fwrite(tmpfile, str);
 | |
| 	}
 | |
|     //Close and remove old file
 | |
|     fclose(mfile);
 | |
| 	fremove(file);
 | |
| 	//Close cache file and rename it
 | |
| 	fclose(tmpfile);
 | |
| 	frename(TMP_FILE, file);
 | |
| 	return 1;
 | |
| }
 | |
| 
 | |
| stock bool:mIsFileEmpty(const file[])
 | |
| {
 | |
| 	if(!fexist(file)) return true;
 | |
| 	new File:mfile = fopen(file, io_read);
 | |
| 	if(flength(mfile) <= 1)
 | |
| 	{
 | |
| 	    fclose(mfile);
 | |
| 		return true;
 | |
| 	}
 | |
| 	else
 | |
| 	{
 | |
| 		fclose(mfile);
 | |
| 		return false;
 | |
| 	}
 | |
| }
 |