Include bCini8
Eu havia prometido para mim mesmo que eu não postaria mais nenhuma bCini aqui no fórum, porém isso fez eu rever o meu conceito sobre esta decisão... Diversas pessoas não são capazes de te acompanhar e te julgam por seus trabalhos, e isto não é legal.
Então, eu estou aqui hoje então para postar a include de salvamento de arquivos locais mais rápida que eu consegui programar até hoje (que finalmente supera DOF2 em inúmeros aspectos), a oitava e provavelmente (quase que certamente) última versão desta include, a bCini8, acompanhem:
Funções nativas
- Código:
bCini6_Open - fopen
bCini6_Exists - fexist
bCini6_Write - fwrite
bCini6_Read - fread
bCini6_Close - fclose
bCini6_Delete - fremove
Escrita
Função ( arquivo, nome da linha, escrita );
Escrevendo textos em um arquivo:
- Código:
main()
{
bCini8_SetText("Biel_COP.ini","Olá","Como você vai ?");
}
Escrevendo int's em um arquivo:
- Código:
main()
{
bCini8_SetInt("Biel_COP.ini","Olá",1000);
}
Escrevendo float's em um arquivo:
- Código:
main()
{
bCini8_SetFloat("Biel_COP.ini","Olá",50.0);
}
Leitura
Função ( arquivo, nome da linha );
Lendo textos de um arquivo
- Código:
main()
{
printf("%s",bCini8_ReadText("Biel_COP.ini","Olá"));
}
Lendo int's de um arquivo:
- Código:
main()
{
printf("%d",bCini8_ReadInt("Biel_COP.ini","Olá"));
}
Lendo float's de um arquivo:
- Código:
main()
{
printf("%f",bCini8_ReadFloat("Biel_COP.ini","Olá"));
}
Mais funções
bCini8_ReadLineName ( nome do arquivo, id da linha ); - Obtenha o nome do ID de uma linha já existente.
- Código:
main()
{
printf("%s",bCini8_ReadLineName("Biel_COP.ini",0));
}
bCini8_DeleteSet ( nome do arquivo, nome da linha ); - Delete uma linha que já existe.
- Código:
main()
{
bCini8_DeleteSet("Biel_COP.ini","Olá");
}
bCini8_Copy ( nome do arquivo 1, nome do arquivo 2, valor da variável de deleção ); - Copie todo o conteúdo de um arquivo para outro arquivo.
Dica: O valor da variável de deleção deverá ser 1 para que o arquivo 1 seja deletado após ser copiado para o arquivo 2; o valor 0 indica que haverá cópia, mas não haverá deleção!
- Código:
main()
{
bCini8_Copy("Biel_COP.ini","Biel.ini",1); // Deletar o arquivo 1 após copiá-lo para o arquivo 2
}
bCini8_ChangeLine (nome do arquivo, linha, novo nome da linha); - Troque o nome de uma linha
- Código:
main()
{
bCini8_ChangeLine("Biel_COP.ini","Olá","Olá 2");
}
bCini8_IsSet ( nome do arquivo, nome da linha ); - Cheque se uma linha já existe.
- Código:
main()
{
if(bCini8_IsSet("Biel_COP.ini","Olá"))
{
print("A linha 'Olá' do arquivo 'Biel_COP.ini' existe!");
}
return 1;
}
Benchmark com a DOF2
Eu tenho sã consciência que o que as diferem em velocidade é algo bem 'rasteiro', porém já se dá para notar uma enorme melhora com isto; finalmente houve uma include brasileira que sim, pôde competir com a tão aclamada DOF2...
Download
Como instalar/usar: Crie um arquivo em sua pasta pawno/includes com o nome de bCini8.inc (sim, a extensão deve ser .inc para que haja reconhecimento da parte do compilador) e copie/cole todo o código abaixo neste novo arquivo; após isto, vá até o seu gamemode e use
- Código:
#define bCini8.inc
no início do gamemode! Com isto, basta usá-la com as funções citadas aqui
- Código:
// Include bCini8
#define bCini8_Open fopen
#define bCini8_Exists fexist
#define bCini8_Write fwrite
#define bCini8_Read fread
#define bCini8_Close fclose
#define bCini8_Create(%0) if(!bCini8_Exists(%0)) bCini8_Close(bCini8_Open(%0,io_write)) && bCini8_OpenArchive(%0)
#define bCini8_Delete(%0) if(bCini8_Exists(%0)) fremove(%0)
// Include definitions
#define bCini8_Lines 100
#define bCini8_Capacity 256
#define bCini8_Separator "="
#define bCini8_Null_Text "null"
// Variables
stock bCini8_Archive_Line[bCini8_Lines][bCini8_Capacity/4],bCini8_Archive_Value[bCini8_Lines][bCini8_Capacity],bCini8_Archive_Name[64] = bCini8_Null_Text,bCini8_Archive_Lines = 1,bool:bCini8_Archive_Has_Been_Used,Include_bCini8[bCini8_Capacity];
// Functions
#define bCini8_SetInt(%0,%1,%2) format(Include_bCini8,bCini8_Capacity,"%d",%2) && bCini8_SetText(%0,%1,Include_bCini8)
#define bCini8_SetFloat(%0,%1,%2) format(Include_bCini8,bCini8_Capacity,"%.2f",%2) && bCini8_SetText(%0,%1,Include_bCini8)
#define bCini8_ReadText(%0,%1) bCini8_Archive_Value[bCini8_IsSet(%0,%1)]
#define bCini8_ReadInt(%0,%1) strval(bCini8_Archive_Value[bCini8_IsSet(%0,%1)])
#define bCini8_ReadFloat(%0,%1) floatstr(bCini8_Archive_Value[bCini8_IsSet(%0,%1)])
#define bCini8_CleanArchive(%0) if(bCini8_Exists(%0)) bCini8_OpenArchive(%0); for(new i = 1; i < bCini8_Archive_Lines; ++i) bCini8_DeleteSet(%0,bCini8_Archive_Line[i])
#define bCini8_Log(%0,%1) new File:bCini8_Archive = bCini8_Open(%0,io_append); bCini8_Write(bCini8_Archive,%1) && bCini8_Close(bCini8_Archive)
stock bCini8_SetText(archive[],line[],value[])
{
if(bCini8_Archive_Lines < bCini8_Lines)
{
bCini8_Create(archive);
if(!bCini8_IsSet(archive,line))
{
// Line
strunpack(bCini8_Archive_Line[bCini8_Archive_Lines],line);
if(!strlen(bCini8_Archive_Line[bCini8_Archive_Lines]))
{
strunpack(bCini8_Archive_Line[bCini8_Archive_Lines],bCini8_Null_Text);
}
// Value
strunpack(bCini8_Archive_Value[bCini8_Archive_Lines],value);
if(!strlen(bCini8_Archive_Value[bCini8_Archive_Lines]))
{
strunpack(bCini8_Archive_Value[bCini8_Archive_Lines],bCini8_Null_Text);
}
++bCini8_Archive_Lines;
}
else
{
new bCini8_Line_ID = bCini8_IsSet(archive,line);
strunpack(bCini8_Archive_Value[bCini8_Line_ID],value);
if(!strlen(bCini8_Archive_Value[bCini8_Line_ID]))
{
strunpack(bCini8_Archive_Value[bCini8_Line_ID],bCini8_Null_Text);
}
}
bCini8_Archive_Has_Been_Used = true;
}
return 1;
}
stock bCini8_ReadLineName(archive[],line)
{
bCini8_OpenArchive(archive);
return bCini8_Archive_Line[line];
}
stock bCini8_DeleteSet(archive[],line[])
{
new bCini8_Line_ID = bCini8_IsSet(archive,line);
if(bCini8_Line_ID)
{
bCini8_Archive_Line[bCini8_Line_ID][0] = 0;
bCini8_Archive_Value[bCini8_Line_ID][0] = 0;
bCini8_Archive_Has_Been_Used = true;
}
return 1;
}
stock bCini8_Copy(archive[],archive2[],bool:delete_archive)
{
if(bCini8_Exists(archive))
{
if(!bCini8_Exists(archive2))
{
bCini8_OpenArchive(archive);
new File:bCini8_Archive_Used = bCini8_Open(archive2,io_write),bCini8_Format[bCini8_Capacity];
for(new i = 1; i < bCini8_Archive_Lines; ++i)
{
if(bCini8_Archive_Line[i][0])
{
format(bCini8_Format,bCini8_Capacity,"%s=%s\r\n",bCini8_Archive_Line[i],bCini8_Archive_Value[i]);
bCini8_Write(bCini8_Archive_Used,bCini8_Format);
}
}
bCini8_Close(bCini8_Archive_Used);
if(delete_archive)
{
bCini8_Delete(archive);
}
}
}
return 1;
}
stock bCini8_ChangeLine(archive[],line[],new_line[])
{
if(bCini8_Exists(archive))
{
new bCini8_Line_ID = bCini8_IsSet(archive,line);
if(bCini8_Line_ID)
{
strunpack(bCini8_Archive_Line[bCini8_Line_ID],new_line);
bCini8_Archive_Has_Been_Used = true;
}
}
return 1;
}
// Open & Close
stock bCini8_OpenArchive(archive[])
{
if(strcmp(bCini8_Archive_Name,archive,false))
{
bCini8_CloseArchive();
strunpack(bCini8_Archive_Name,archive);
if(bCini8_Exists(archive))
{
new bCini8_i[2],bCini8_Archive[bCini8_Capacity],File:bCini8_Archive_Used = bCini8_Open(archive,io_read);
while(bCini8_Read(bCini8_Archive_Used,bCini8_Archive))
{
if(bCini8_Archive[0])
{
if(bCini8_Archive_Lines < bCini8_Lines)
{
if(bCini8_Archive[0] >= 256)
{
strdel(bCini8_Archive,0,1);
}
bCini8_i[0] = strlen(bCini8_Archive);
if(bCini8_Archive[bCini8_i[0]-1] == '\r' || bCini8_Archive[bCini8_i[0]-1] == '\n')
{
bCini8_Archive[bCini8_i[0]-1] = 0;
}
if(bCini8_Archive[bCini8_i[0]-2] == '\r' || bCini8_Archive[bCini8_i[0]-2] == '\n')
{
bCini8_Archive[bCini8_i[0]-2] = 0;
}
bCini8_i[1] = strfind(bCini8_Archive,bCini8_Separator);
strmid(bCini8_Archive_Line[bCini8_Archive_Lines],bCini8_Archive,0,bCini8_i[1],bCini8_i[1]+1);
strmid(bCini8_Archive_Value[bCini8_Archive_Lines],bCini8_Archive,bCini8_i[1]+1,bCini8_i[0]);
++bCini8_Archive_Lines;
}
}
}
bCini8_Close(bCini8_Archive_Used);
}
}
return 1;
}
stock bCini8_CloseArchive()
{
if(bCini8_Exists(bCini8_Archive_Name))
{
if(bCini8_Archive_Has_Been_Used)
{
new File:bCini8_Archive_Used = bCini8_Open(bCini8_Archive_Name,io_write),bCini8_Format[bCini8_Capacity];
for(new i = 1; i < bCini8_Archive_Lines; ++i)
{
if(bCini8_Archive_Line[i][0])
{
format(bCini8_Format,bCini8_Capacity,"%s=%s\r\n",bCini8_Archive_Line[i],bCini8_Archive_Value[i]);
bCini8_Write(bCini8_Archive_Used,bCini8_Format);
}
}
bCini8_Close(bCini8_Archive_Used);
}
}
for(new i = 1; i < bCini8_Archive_Lines; ++i)
{
if(bCini8_Archive_Line[i][0])
{
bCini8_Archive_Line[i][0] = 0;
bCini8_Archive_Value[i][0] = 0;
}
}
bCini8_Archive_Name = bCini8_Null_Text;
bCini8_Archive_Lines = 1;
bCini8_Archive_Has_Been_Used = false;
return 1;
}
stock bCini8_IsSet(archive[],line[])
{
bCini8_OpenArchive(archive);
for(new i = 1; i < bCini8_Archive_Lines; ++i)
{
if(bCini8_Archive_Line[i][0])
{
if(strcmp(bCini8_Archive_Line[i],line,true) == 0)
{
return i;
}
}
}
return 0;
}
// End of the include
Créditos
Biel (me): Toda as versões da bCini);
W. Luigi: Ajuda inicial (bCini e bCini2);
Bruno: Ajuda inicial (bCini);
Gato: Ajuda na função de criar arquivos (bCini);
DracoBlue: Lógicas iniciais (bCini, bCini2 e bCini3).