All pastes #1819530 Raw Edit

Unnamed

public text v1 · immutable
#1819530 ·published 2010-03-02 17:17 UTC
rendered paste body
/*
#################################
#     K's Technology - File     #
#           Ver. 0.1b           #
#      Created by K_POLAND      #
#                               #
#     Copyright © K_POLAND      #
#################################
*/

#include a_samp

#define SYMBOL '='
#define K'sEXTENSION ".KTech"

stock GetStrFromFile(fname[], str[])
{
	new File:f = fopen(fname, io_read),
		result[128];

	if(!fexist(fname)) return result;

	while(fread(f, result, sizeof(result)))
	{
	    if(!strcmp(str, result, true, strlen(str)))
	    {
			if(result[strlen(str)] == SYMBOL)
			{
			    if(result[strlen(result)-1] == '\n' || result[strlen(result)-1] == '\r')
			    {
			    	result[strlen(result)-1] = EOS;
			    	if(result[strlen(result)-1] == '\n' || result[strlen(result)-1] == '\n')
					{
				    	result[strlen(result)-1] = EOS;
					}
			    }
				strdel(result, 0, strlen(str)+1);
				fclose(f);
				return result;
			}
	    }
		result[0] = EOS;
	}
	fclose(f);
	return result;
}

stock GetIntFromFile(fname[], str[])
	return strval(GetStrFromFile(fname, str));

stock Float:GetFloatFromFile(fname[], str[])
	return floatstr(GetStrFromFile(fname, str));

stock GetBoolFromFile(fname[], str[])
{
    if(!strval(GetStrFromFile(fname, str))) return false;
	return true;
}

stock CreateFile(fname[])
{
	if(fexist(fname))
		return 0;
	new File:f = fopen(fname);
	fclose(f);
	return 1;
}

stock RemoveFile(fname[])
{
	if(!fexist(fname))
		return 0;
	fremove(fname);
	return 1;
}

stock RenameFile(fname[], newname[])
{
	if(!fexist(fname) || fexist(newname))
		return 0;

	if(!strcmp(fname, newname, false))
		return 0;

	new File:f = fopen(fname, io_read),
		File:nf = fopen(newname, io_append),
	    buffer,
		flen = flength(f);
	while(flen != 0)
	{
		fputchar(nf, fgetchar(f, buffer,false), false);
		flen--;
	}
	fclose(nf);
	fclose(f);
	fremove(fname);
	return 1;
}

stock CopyFile(fname[], newname[])
{
	if(!fexist(fname) || fexist(newname))
		return 0;

	if(!strcmp(fname, newname, false))
		return 0;

	new File:f = fopen(fname, io_read),
		File:nf = fopen(newname, io_append),
	    buffer,
		flen = flength(f);
	while(flen != 0)
	{
		fputchar(nf, fgetchar(f, buffer,false), false);
		flen--;
	}
	fclose(nf);
	fclose(f);
	return 1;
}

stock FileExists(fname[])
{
	if(!fexist(fname))
		return 0;
	return 1;
}

stock SetStrOption(fname[], opt[], str[])
{
	if(!fexist(fname))
		return 0;

	new File:f,
	    File:Kf,
		buffer[256],
		KfName[128],
		option[128],
		bool:x = false;

	format(option, sizeof(option), "%s%c", opt, SYMBOL);
	strcat(KfName, fname, sizeof(KfName));
	strcat(KfName, K'sEXTENSION, sizeof(KfName));

	if(fexist(KfName))
		return 0;

	f = fopen(fname, io_readwrite);
	Kf = fopen(KfName, io_readwrite);

	while(fread(f, buffer, sizeof(buffer)))
	{
 		if(!strcmp(option, buffer, true, strlen(option)))
	    {
			format(buffer, sizeof(buffer), "%s%s\r\n", option, str);
			x = true;
		}
		fwrite(Kf, buffer);
	}
	fclose(f);
	fclose(Kf);
	fremove(fname);
	RenameFile(KfName, fname);
	if(x == false)
	{
		f = fopen(fname, io_append);
    	format(buffer, sizeof(buffer), "%s%s\r\n", option, str);
    	fwrite(f, buffer);
    	fclose(f);
	}
	return 0;
}

stock SetIntOption(fname[], opt[], integer)
{
	new s[128];
	format(s, sizeof(s), "%d", integer);
	return SetStrOption(fname, opt, s);
}

stock SetFloatOption(fname[], opt[], Float:fl)
{
	new s[128];
	format(s, sizeof(s), "%f", fl);
	return SetStrOption(fname, opt, s);
}

stock SetBoolOption(fname[], opt[], bool:b)
{
	new s[128];
	format(s, sizeof(s), "%d", b);
	return SetStrOption(fname, opt, s);
}

stock UnsetOption(fname[], opt[])
{
	if(!fexist(fname))
		return 0;

	new File:f,
	    File:Kf,
		buffer[256],
		KfName[128];

	strcat(KfName, fname, sizeof(KfName));
	strcat(KfName, K'sEXTENSION, sizeof(KfName));

	if(fexist(KfName))
		return 0;

	f = fopen(fname, io_readwrite);
	Kf = fopen(KfName, io_readwrite);

	while(fread(f, buffer, sizeof(buffer)))
	{
 		if(!strcmp(opt, buffer, true, strlen(opt)))
	    {
			buffer[0] = EOS;
		}
		fwrite(Kf, buffer);
	}
	fclose(f);
	fclose(Kf);
	fremove(fname);
	RenameFile(KfName, fname);
	return 0;
}

stock Write(fname[], const str[])
{
	if(!fexist(fname))
		return 0;

	new File:f = fopen(fname, io_append);
	fwrite(f, str);
	fclose(f);
	return 0;
}

stock Read(fname[], line)
{
	new File:f = fopen(fname, io_read),
		buffer[256];

	if(!fexist(fname))
		return buffer;

	for(new a = 0; a < line; a++)
	{
	    fread(f, buffer, sizeof(buffer));
	    if(buffer[strlen(buffer)-1] == '\n' || buffer[strlen(buffer)-1] == '\r')
		{
			buffer[strlen(buffer)-1] = EOS;
			if(buffer[strlen(buffer)-1] == '\n' || buffer[strlen(buffer)-1] == '\n')
			{
				buffer[strlen(buffer)-1] = EOS;
			}
		}
	}
	fclose(f);
	return buffer;
}

stock SaveToArray(fname[], line, array[], maxlength)
	return strcat(array, Read(fname, line), maxlength);

stock ROT13(text[])
{
	new a,
		r[256];
	while(text[a] != 0)
	{
		switch(text[a])
		{
			case 65..77: r[a]=text[a]+13;
			case 97..109: r[a]=text[a]+13;
			case 78..90: r[a]=text[a]-13;
			case 110..122: r[a]=text[a]-13;
			default: r[a] = text[a];
		}
		a++;
	}
	return r;
}

stock KEncrypt(text[])
{
	new a,
		r[2][256];

	while(text[a] != 0)
	{
		format(r[0], 256, "%dK", text[a]*3);
		strcat(r[1], r[0], 256);
		a++;
	}
	return r[1];
}

stock KDecrypt(text[])
{
	new r[256],
	    o,
		a,
		k;

	while(text[a] != 0)
	{
	    if(text[a] == 'K')
	    {
	    	r[o] = k/3;
		    o++;
		    k = 0;
		    strdel(text, 0, a);
		    a = 0;
		}
		else
		{
			k = k * 10 + text[a] - 48;
		}
		a++;
	}
	return r;
}

stock KSEM(text[]) // K's Super Encrypt Method
{
	new a,
		r[512],
		omfg[512];

	while(text[a] != 0)
	{
		format(omfg, 512, "%d", text[a]*13);
		strcat(r, omfg, 512);
		a++;
	}
	return r;
}

stock SetPassword(fname[], opt[], pass[], method[])
{
	if(!strcmp(method, "ROT13", true))
		return SetStrOption(fname, opt, ROT13(pass));
	else if(!strcmp(method, "K", true))
        return SetStrOption(fname, opt, KEncrypt(pass));
	else if(!strcmp(method, "KSEM", true))
        return SetStrOption(fname, opt, KSEM(pass));
	return 0;
}

stock GetPassword(fname[], opt[], method[], array[], maxlength)
{
	array[0] = EOS; // I'm sorry :P
	if(!strcmp(method, "ROT13", true))
		return strcat(array, ROT13(GetStrFromFile(fname, opt)), maxlength);
	else if(!strcmp(method, "K", true))
		return strcat(array, KDecrypt(GetStrFromFile(fname, opt)), maxlength);
	return 0;
}

stock CompareKSEMPasswords(fname[], opt[], password[])
{
	if(strcmp_ex(GetStrFromFile(fname, opt), KSEM(password))==0)
		return 0;
	return 1;
}

stock strcmp_ex(const f[], const pass[])
{
	new strlenf = strlen(f)-1;
	if(strlenf != strlen(pass))
	    return 0;
	for(new a = 0; a < strlenf; a++)
	{
		if(f[a] != pass[a])
	    	return 0;
	}
	return 1;
}

/*
native FileExists(fname[]);
native CreateFile(fname[]);
native RemoveFile(fname[]);
native CopyFile(fname[], newname[]);
native RenameFile(fname[], newname[]);
native 
native GetStrFromFile(fname[], option[]);
native GetIntFromFile(fname[], option[]);
native GetFloatFromFile(fname[], option[]);
native GetBoolFromFile(fname[], option[]);
native GetPassword(fname[], option[], method[], array[], maxlength);
native CompareKSEMPasswords(fname[], option[], password[]);
native 
native SetStrOption(fname[], option[], str[]);
native SetIntOption(fname[], option[], integer);
native SetFloatOption(fname[], option[], Float);
native SetBoolOption(fname[], option[], bool);
native SetPassword(fname[], option[], password[], method[]);
native UnsetOption(fname[], option[]);
native 
native Write(fname[], str[]);
native Read(fname[], line);
native SaveToArray(fname[], line, array[], maxlength);
native 
native ROT13(text[]);
native KEncrypt(text[]);
native KDecrypt(text[]);
native KSEM(text[]);
*/