int PositionFile(char *Section, char *Name, char *File)
params.c
des Projektes Transfermatrixsimulation.Die Parameterdatei wird nach Möglichkeit geöffnet und Zeile für Zeile eingelesen, bis der gesuchte Abschnitt gefunden wird. Gibt es den Abschnitt nicht, so wird die Datei geschlossen und ein Mißerfolg gemeldet. Ansonsten wird der Abschnitt bis zum Ende der Datei oder bis zum Beginn des nächsten Abschnittes nach einer Zeile mit dem angegebenen Namen durchsucht. Auch hier wird bei einem Mißerfolg die Datei geschlossen. Ist jedoch ein entsprechender Eintrag zu finden, wird der Dateizeiger so weit zurückgesetzt, daß er genau hinter dem Gleichheitszeichen in dem Eintrag zu stehen kommt und die Datei bleibt offen.
Section, char *
Name, char *
File, char *
int
):GetPrivateProfileInt, GetPrivateProfileFloat, GetPrivateProfileString
int PositionFile(char *Section,char *Name,char *File) { int fh; /* File Handle */ char Line[255]; /* One Line of the file */ if ((fh=open(File,O_RDWR))==-1) return(-1); do { if (!GetLine(Line,sizeof(Line),fh)) { close(fh); return(-1); } } while (Line[0]!='[' || strlen(Line)<strlen(Section)+2 || strncmp(Line+1,Section,strlen(Section)) || Line[strlen(Section)+1]!=']'); do { if (!GetLine(Line,sizeof(Line),fh)) { close(fh); return(-1); } } while (Line[0]!='[' && (strlen(Line)<strlen(Name)+1 || strncmp(Line,Name,strlen(Name)) || Line[strlen(Name)]!='=')); if (Line[0]=='[') { close(fh); return(-1); } lseek(fh,-(off_t)(strlen(Line)-strlen(Name)),SEEK_CUR); return(fh); }