#include #include #include #include "def.h" #ifdef WIN32 #include "win_dig.h" #endif #define NEWL "\r\n" /* Get a line from a buffer. This should be compatible with all 3 text file formats: DOS, Unix and Mac. */ char *sgets(char *buffer,char *s) { int i; for (i=0;buffer[i]!=10 && buffer[i]!=13 && buffer[i]!=0;i++) s[i]=buffer[i]; s[i]=0; if (buffer[i]==13) i++; if (buffer[i]==10) i++; return buffer+i; } /* These are re-implementations of the Windows version of INI filing. */ void WriteINIString(char *section,char *key,char *value,char *filename) { FILE *fp; char *buffer,*p,*p0,s1[80],s2[80],s3[80]; int tl; fp=fopen(filename,"rb"); if (fp==NULL) { fp=fopen(filename,"wb"); if (fp==NULL) return; fprintf(fp,"[%s]" NEWL,section); fprintf(fp,"%s=%s" NEWL NEWL,key,value); fclose(fp); return; } fseek(fp,0,2); tl=(int)ftell(fp); fseek(fp,0,0); buffer=(char *)malloc(tl+1); if (buffer==NULL) { fclose(fp); return; } fread(buffer,tl,1,fp); buffer[tl]=0; fclose(fp); strcpy(s2,"["); strcat(s2,section); strcat(s2,"]"); strcpy(s3,key); strcat(s3,"="); p=buffer; do { p=sgets(p,s1); if (stricmp(s1,s2)==0) { do { p0=p; p=sgets(p,s1); if (strnicmp(s1,s3,strlen(s3))==0) { fp=fopen(filename,"wb"); if (fp==NULL) { free(buffer); return; } fwrite(buffer,p0-buffer,1,fp); fprintf(fp,"%s=%s" NEWL,key,value); fwrite(p,tl-(p-buffer),1,fp); fclose(fp); free(buffer); return; } } while (s1[0]!=0); fp=fopen(filename,"wb"); if (fp==NULL) { free(buffer); return; } fwrite(buffer,p0-buffer,1,fp); fprintf(fp,"%s=%s" NEWL,key,value); fwrite(p0,tl-(p0-buffer),1,fp); fclose(fp); free(buffer); return; } } while (p