[code language="bennu"]
//------------------------------------//
//Modifica una linea de un archivo
//------------------------------------//
FUNCTION File_PutLine(TextFile tfile, INT LineNumber,STRING text)
PRIVATE
INT aux,n;
INT pos1,pos2,buffersize;
BYTE POINTER buffer;
BEGIN
//Linea inexistente
IF ([tfile].lines<LineNumber) RETURN ""; END
//Guarda la posicion
aux=ftell([tfile].fileid);
//Se posiciona en el principio
fseek([tfile].fileid,0,0);
//Busca la linea
n=(-1);
WHILE (n<LineNumber)
fgets([tfile].fileid);
n++;
END
//Guarda las posicion del los extremos de la linea a reemplazar
pos1=ftell([tfile].fileid);
fgets([tfile].fileid);
pos2=ftell([tfile].fileid);
//Guarda en buffer lo que se pierde
buffersize=flength([tfile].fileid)-pos2;
buffer=alloc(sizeof(BYTE)*buffersize);
fread([tfile].fileid,buffer,);
//Agrega la linea nueva
fseek([tfile].fileid,pos1,0);
fputs([tfile].fileid,text);
//Agrega el buffer al final
fseek([tfile].fileid,pos1+len(text),0); //REVISAR EL AUMENTO!!!!!!!
fwrite([tfile].fileid,buffer,buffersize); //EN ESTA LINEA APARECE EL ERROR
//Restaura la posicion
fseek([tfile].fileid,aux,0);
//Libera el buffer
free(buffer);
//Recarga el buffer
IF (LineNumber>=[tfile].scrollpos AND LineNumber<=[tfile].scrollpos+bufferlines)
File_ReloadBuffer(tfile);
END
END
[/code]
en el archivos modules-wip2.txt estan todos los prototipos... sin ver el codigo y leyendolo te digo...
hay 2 formatos para fwrite:
INT FWRITE (I,V++)
INT FWRITE (P,I,I)
el primero es:
id de archivo, variable a grabar
el segundo es:
puntero... ummmm... del area de datos a guardar, tamano de dicho area, id de archivo a grabar...