00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035
00043 #include "forward.h"
00044
00045 #if !defined(MAX_PATH)
00046 #define MAX_PATH 512
00047 #endif
00048
00049
00050
00051
00052
00053
00054
00055 #if !defined(OMICRON_TYPES_FILE_DEFINED)
00056 #define OMICRON_TYPES_FILE_DEFINED
00057
00062 typedef struct fileentry_s
00063 {
00064 char filename[128];
00065
00066
00067 ulong offset;
00068 ulong size;
00069 ulong realsize;
00070
00071 } fileentry_t;
00072
00077 typedef struct pak_header_s
00078 {
00079 ulong magic;
00080 ulong entrycount;
00081 } pak_header_t;
00082
00087 typedef struct file_s
00088 {
00089 char *buf;
00090 ulong size;
00091 ulong pos;
00092 FILE *f;
00093 int asyncloading:1;
00094 } file_t;
00095
00101 class file_manager_c
00102 {
00103 protected:
00104
00105 array_c <char> *pak_names;
00106 array_c <file_t> *files;
00107 list_c<file_t> *async_files;
00108
00109 char datadir[128];
00110
00111 friend ulong _win_mainloop();
00112
00113 void
00114 update();
00115
00116 public:
00117
00118 file_manager_c();
00119 ~file_manager_c();
00120
00125 ulong
00126 load_pak(const char *filename);
00127
00132 void
00133 unload_pak(ulong n);
00134
00139 void
00140 close_paks();
00141
00147 file_t *
00148 create();
00149
00158 void
00159 resize(file_t *file, ulong newsize);
00160
00169 file_t *
00170 load(const char *filename, bool async);
00171
00176 void
00177 save(file_t *file, const char *filename);
00178
00184 file_t *
00185 load_from_disk(const char *filename, bool async);
00186
00192 file_t *
00193 load_from_pak(const char *filename);
00194
00199 void
00200 close(file_t *file);
00201
00207 ulong
00208 seek(file_t *file, slong offset, ulong origin);
00209
00214 ulong
00215 tell(file_t *file);
00216
00221 bool
00222 eof(file_t *file);
00223
00229 ulong
00230 read(void *out, ulong size, ulong n, file_t *file);
00231
00236 ulong
00237 getch(file_t *file);
00238
00244 const char *
00245 gets(char *dst, ulong count, file_t *file);
00246
00254 void
00255 getpixel(file_t *file,
00256 char *r, char *g, char *b, char *a, char bpp);
00257
00263 ulong
00264 write(void *buf, ulong size, ulong n, file_t *file);
00265
00270 slong
00271 putch(slong ch, file_t *file);
00272
00278 slong
00279 puts(const char *string, file_t *file);
00280
00289 void
00290 putpixel(file_t *file,
00291 char r, char g, char b, char a, char bpp);
00292 };
00293
00294 #endif