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