1 #include <stdlib.h>
2 #include <stdio.h>
3 #include "errors.hpp"
4 #include "protos.hpp"
5 #include "buffer.hpp"
6 
FileSize(void)7 long C_FileRead::FileSize (void)
8 {
9 	if (inited==0)
10 		return 0x7FFFFFFFL;
11 	else
12                 return lengthoffile(readfile);
13 }
14 
C_FileRead(void)15 C_FileRead::C_FileRead (void)
16 {
17 	inited=0;
18 	BytesOnBuffer=0;
19 }
20 
~C_FileRead(void)21 C_FileRead::~C_FileRead (void)
22 {
23 	if (inited)
24 	{
25 		free (buffer);
26 		fclose (readfile);
27 	}
28 }
29 
CloseFile(void)30 void C_FileRead::CloseFile (void)
31 {
32 	if (inited)
33 	{
34 		free (buffer);
35 		fclose (readfile);
36 	}
37 	inited=0;
38 }
39 
OpenFile(char * filename)40 int C_FileRead::OpenFile (char *filename)
41 {
42 	if (inited==1)
43 		return EBH_ALREADYOPEN;
44 	buffer=(char *) malloc (BUFFER_SIZE);
45 	if (buffer==NULL)
46 		return NOMEMORY;
47 	readfile=fopen (filename,"rb");
48 	if (readfile==NULL)
49 		return EBH_OPENFAIL;
50 	currentpos=0;
51 	inited=1;
52 	filesize=FileSize(); /* filelength (fileno (readfile)); */
53 	return SUCCESS;
54 }
55 
ReadUpTo(void * storage,char * lookfor)56 int C_FileRead::ReadUpTo (void *storage,char *lookfor)
57 {
58 	char *posit,*posnow;
59 	long save;
60 	save=ftell (readfile);
61 	memset (buffer,0,BUFFER_SIZE);
62 	if (fread (buffer,1,BUFFER_SIZE,readfile)==0)
63 		return EBH_EOF;
64 	posit=NULL;
65 	while (*lookfor!='\0')
66 	{
67 		posnow=strchr (buffer,*lookfor);
68 		if (posit==NULL)
69 			posit=posnow;
70 		else
71 			if (posnow!=NULL)
72 				posit=(posit<posnow)?posit:posnow;
73 		lookfor++;
74 	}
75 	if (posit!=NULL)
76 	{
77 		*posit=0;
78 		strcpy ((char *) storage,buffer);
79 		fseek (readfile,save+(posit-buffer+1),SEEK_SET);
80 		currentpos=ftell (readfile);
81 	}
82 	else
83 	{
84 		buffer[BUFFER_SIZE-1]=0;
85 		strcpy ((char *) storage,buffer);
86 		return EBH_SEARCHFAILED;
87 	}
88 	return SUCCESS;
89 }
90 
ReadBytes(void * storage,size_t NumberOfBytes)91 size_t C_FileRead::ReadBytes (void *storage,size_t NumberOfBytes)
92 {
93 	size_t value;
94 	value=fread (storage,1,NumberOfBytes,readfile);
95 	currentpos+=value;
96 	return (value);
97 }
98