20.09.2016, 20:29
(
Last edited by GabrielCOP; 20/09/2016 at 10:41 PM.
)
Include bCini8
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
pawn Code:
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:
pawn Code:
main()
{
bCini8_SetText("Biel_COP.ini","Olб","Como vocк vai ?");
}
pawn Code:
main()
{
bCini8_SetInt("Biel_COP.ini","Olб",1000);
}
pawn Code:
main()
{
bCini8_SetFloat("Biel_COP.ini","Olб",50.0);
}
Leitura
Funзгo ( arquivo, nome da linha );
Lendo textos de um arquivo
pawn Code:
main()
{
printf("%s",bCini8_ReadText("Biel_COP.ini","Olб"));
}
pawn Code:
main()
{
printf("%d",bCini8_ReadInt("Biel_COP.ini","Olб"));
}
pawn Code:
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.
pawn Code:
main()
{
printf("%s",bCini8_ReadLineName("Biel_COP.ini",0));
}
pawn Code:
main()
{
bCini8_DeleteSet("Biel_COP.ini","Olб");
}
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!
pawn Code:
main()
{
bCini8_Copy("Biel_COP.ini","Biel.ini",1); // Deletar o arquivo 1 apуs copiб-lo para o arquivo 2
}
pawn Code:
main()
{
bCini8_ChangeLine("Biel_COP.ini","Olб","Olб 2");
}
pawn Code:
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
pawn Code:
#define bCini8.inc
pawn Code:
// 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).