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