annotate src/dmfile.c @ 1315:7687412f9aef

Fix jssmod sample conversion flags storing .. urgh.
author Matti Hamalainen <ccr@tnsp.org>
date Sun, 20 Aug 2017 01:54:54 +0300
parents e06abfde6c39
children c543f5ae92d5
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
1 /*
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
2 * DMLib
414
c452a459e552 Clear up the file descriptions.
Matti Hamalainen <ccr@tnsp.org>
parents: 405
diff changeset
3 * -- Standard I/O (stdio) file write/read endianess helpers
0
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
4 * Programmed and designed by Matti 'ccr' Hamalainen
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
5 * (C) Copyright 2011 Tecnic Software productions (TNSP)
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
6 */
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
7 #include "dmfile.h"
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
8
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
9
405
d0257d0004f6 Implement dm_{read,write}_byte() and constify.
Matti Hamalainen <ccr@tnsp.org>
parents: 0
diff changeset
10 BOOL dm_fread_str(FILE *f, void *buf, const size_t len)
0
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
11 {
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
12 return fread(buf, len, 1, f) == 1;
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
13 }
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
14
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
15
405
d0257d0004f6 Implement dm_{read,write}_byte() and constify.
Matti Hamalainen <ccr@tnsp.org>
parents: 0
diff changeset
16 BOOL dm_fread_byte(FILE *f, Uint8 *val)
d0257d0004f6 Implement dm_{read,write}_byte() and constify.
Matti Hamalainen <ccr@tnsp.org>
parents: 0
diff changeset
17 {
438
c1f6def0c1da Adjust dm_fread_byte() and dm_fwrite_byte() stdio helper functions to match
Matti Hamalainen <ccr@tnsp.org>
parents: 414
diff changeset
18 int tmp = fgetc(f);
c1f6def0c1da Adjust dm_fread_byte() and dm_fwrite_byte() stdio helper functions to match
Matti Hamalainen <ccr@tnsp.org>
parents: 414
diff changeset
19 *val = tmp;
c1f6def0c1da Adjust dm_fread_byte() and dm_fwrite_byte() stdio helper functions to match
Matti Hamalainen <ccr@tnsp.org>
parents: 414
diff changeset
20 return tmp != EOF;
405
d0257d0004f6 Implement dm_{read,write}_byte() and constify.
Matti Hamalainen <ccr@tnsp.org>
parents: 0
diff changeset
21 }
d0257d0004f6 Implement dm_{read,write}_byte() and constify.
Matti Hamalainen <ccr@tnsp.org>
parents: 0
diff changeset
22
d0257d0004f6 Implement dm_{read,write}_byte() and constify.
Matti Hamalainen <ccr@tnsp.org>
parents: 0
diff changeset
23
0
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
24 #define DM_DEFINE_FFUNC(xname, xtype, xmacro) \
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
25 BOOL dm_fread_ ## xname (FILE *f, xtype *v) { \
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
26 xtype result; \
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
27 if (fread(&result, sizeof( xtype ), 1, f) != 1) \
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
28 return FALSE; \
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
29 *v = DM_ ## xmacro ## _TO_NATIVE (result); \
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
30 return TRUE; \
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
31 }
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
32
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
33 #include "dmfiletmpl.h"
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
34
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
35 #undef DM_DEFINE_FFUNC
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
36
405
d0257d0004f6 Implement dm_{read,write}_byte() and constify.
Matti Hamalainen <ccr@tnsp.org>
parents: 0
diff changeset
37
d0257d0004f6 Implement dm_{read,write}_byte() and constify.
Matti Hamalainen <ccr@tnsp.org>
parents: 0
diff changeset
38 BOOL dm_fwrite_str(FILE *f, const void *buf, const size_t len)
0
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
39 {
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
40 return fwrite(buf, len, 1, f) == 1;
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
41 }
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
42
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
43
405
d0257d0004f6 Implement dm_{read,write}_byte() and constify.
Matti Hamalainen <ccr@tnsp.org>
parents: 0
diff changeset
44 BOOL dm_fwrite_byte(FILE *f, const Uint8 val)
d0257d0004f6 Implement dm_{read,write}_byte() and constify.
Matti Hamalainen <ccr@tnsp.org>
parents: 0
diff changeset
45 {
438
c1f6def0c1da Adjust dm_fread_byte() and dm_fwrite_byte() stdio helper functions to match
Matti Hamalainen <ccr@tnsp.org>
parents: 414
diff changeset
46 return fputc(val, f) == val;
405
d0257d0004f6 Implement dm_{read,write}_byte() and constify.
Matti Hamalainen <ccr@tnsp.org>
parents: 0
diff changeset
47 }
d0257d0004f6 Implement dm_{read,write}_byte() and constify.
Matti Hamalainen <ccr@tnsp.org>
parents: 0
diff changeset
48
d0257d0004f6 Implement dm_{read,write}_byte() and constify.
Matti Hamalainen <ccr@tnsp.org>
parents: 0
diff changeset
49
0
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
50 #define DM_DEFINE_FFUNC(xname, xtype, xmacro) \
405
d0257d0004f6 Implement dm_{read,write}_byte() and constify.
Matti Hamalainen <ccr@tnsp.org>
parents: 0
diff changeset
51 BOOL dm_fwrite_ ## xname (FILE *f, const xtype v) { \
0
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
52 xtype result = DM_NATIVE_TO_ ## xmacro (v); \
789
8b727fa3f529 Cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 567
diff changeset
53 return fwrite(&result, sizeof( xtype ), 1, f) == 1; \
0
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
54 }
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
55
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
56 #include "dmfiletmpl.h"
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
57
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
58 #undef DM_DEFINE_FFUNC
567
b2b461829c61 Move utility function dmReadDataFile() to dmfile module instead.
Matti Hamalainen <ccr@tnsp.org>
parents: 438
diff changeset
59
b2b461829c61 Move utility function dmReadDataFile() to dmfile module instead.
Matti Hamalainen <ccr@tnsp.org>
parents: 438
diff changeset
60
b2b461829c61 Move utility function dmReadDataFile() to dmfile module instead.
Matti Hamalainen <ccr@tnsp.org>
parents: 438
diff changeset
61 #define BUF_SIZE_INITIAL (16*1024)
b2b461829c61 Move utility function dmReadDataFile() to dmfile module instead.
Matti Hamalainen <ccr@tnsp.org>
parents: 438
diff changeset
62 #define BUF_SIZE_GROW (4*1024)
b2b461829c61 Move utility function dmReadDataFile() to dmfile module instead.
Matti Hamalainen <ccr@tnsp.org>
parents: 438
diff changeset
63
b2b461829c61 Move utility function dmReadDataFile() to dmfile module instead.
Matti Hamalainen <ccr@tnsp.org>
parents: 438
diff changeset
64 int dmReadDataFile(FILE *inFile, const char *filename, Uint8 **pbuf, size_t *pbufSize)
b2b461829c61 Move utility function dmReadDataFile() to dmfile module instead.
Matti Hamalainen <ccr@tnsp.org>
parents: 438
diff changeset
65 {
b2b461829c61 Move utility function dmReadDataFile() to dmfile module instead.
Matti Hamalainen <ccr@tnsp.org>
parents: 438
diff changeset
66 FILE *f;
b2b461829c61 Move utility function dmReadDataFile() to dmfile module instead.
Matti Hamalainen <ccr@tnsp.org>
parents: 438
diff changeset
67 int res = DMERR_OK;
b2b461829c61 Move utility function dmReadDataFile() to dmfile module instead.
Matti Hamalainen <ccr@tnsp.org>
parents: 438
diff changeset
68 Uint8 *dataBuf = NULL;
b2b461829c61 Move utility function dmReadDataFile() to dmfile module instead.
Matti Hamalainen <ccr@tnsp.org>
parents: 438
diff changeset
69 size_t readSize, dataSize, dataRead, dataPos;
1102
e06abfde6c39 Cosmetics pass: Remove excess whitespace.
Matti Hamalainen <ccr@tnsp.org>
parents: 1087
diff changeset
70
567
b2b461829c61 Move utility function dmReadDataFile() to dmfile module instead.
Matti Hamalainen <ccr@tnsp.org>
parents: 438
diff changeset
71 if (inFile != NULL)
b2b461829c61 Move utility function dmReadDataFile() to dmfile module instead.
Matti Hamalainen <ccr@tnsp.org>
parents: 438
diff changeset
72 f = inFile;
b2b461829c61 Move utility function dmReadDataFile() to dmfile module instead.
Matti Hamalainen <ccr@tnsp.org>
parents: 438
diff changeset
73 else
b2b461829c61 Move utility function dmReadDataFile() to dmfile module instead.
Matti Hamalainen <ccr@tnsp.org>
parents: 438
diff changeset
74 if (filename != NULL)
b2b461829c61 Move utility function dmReadDataFile() to dmfile module instead.
Matti Hamalainen <ccr@tnsp.org>
parents: 438
diff changeset
75 {
b2b461829c61 Move utility function dmReadDataFile() to dmfile module instead.
Matti Hamalainen <ccr@tnsp.org>
parents: 438
diff changeset
76 if ((f = fopen(filename, "rb")) == NULL)
b2b461829c61 Move utility function dmReadDataFile() to dmfile module instead.
Matti Hamalainen <ccr@tnsp.org>
parents: 438
diff changeset
77 {
958
985225a93aeb Add error code parameter to dmError() and dmErrorVA().
Matti Hamalainen <ccr@tnsp.org>
parents: 812
diff changeset
78 return dmError(DMERR_FOPEN,
985225a93aeb Add error code parameter to dmError() and dmErrorVA().
Matti Hamalainen <ccr@tnsp.org>
parents: 812
diff changeset
79 "Could not open '%s' for reading.\n", filename);
567
b2b461829c61 Move utility function dmReadDataFile() to dmfile module instead.
Matti Hamalainen <ccr@tnsp.org>
parents: 438
diff changeset
80 }
b2b461829c61 Move utility function dmReadDataFile() to dmfile module instead.
Matti Hamalainen <ccr@tnsp.org>
parents: 438
diff changeset
81 }
b2b461829c61 Move utility function dmReadDataFile() to dmfile module instead.
Matti Hamalainen <ccr@tnsp.org>
parents: 438
diff changeset
82 else
b2b461829c61 Move utility function dmReadDataFile() to dmfile module instead.
Matti Hamalainen <ccr@tnsp.org>
parents: 438
diff changeset
83 {
958
985225a93aeb Add error code parameter to dmError() and dmErrorVA().
Matti Hamalainen <ccr@tnsp.org>
parents: 812
diff changeset
84 return dmError(DMERR_NULLPTR,
985225a93aeb Add error code parameter to dmError() and dmErrorVA().
Matti Hamalainen <ccr@tnsp.org>
parents: 812
diff changeset
85 "NULL filename and stream pointers.\n");
567
b2b461829c61 Move utility function dmReadDataFile() to dmfile module instead.
Matti Hamalainen <ccr@tnsp.org>
parents: 438
diff changeset
86 }
b2b461829c61 Move utility function dmReadDataFile() to dmfile module instead.
Matti Hamalainen <ccr@tnsp.org>
parents: 438
diff changeset
87
b2b461829c61 Move utility function dmReadDataFile() to dmfile module instead.
Matti Hamalainen <ccr@tnsp.org>
parents: 438
diff changeset
88 // Allocate initial data buffer
b2b461829c61 Move utility function dmReadDataFile() to dmfile module instead.
Matti Hamalainen <ccr@tnsp.org>
parents: 438
diff changeset
89 readSize = dataSize = BUF_SIZE_INITIAL;
b2b461829c61 Move utility function dmReadDataFile() to dmfile module instead.
Matti Hamalainen <ccr@tnsp.org>
parents: 438
diff changeset
90 if ((dataBuf = dmMalloc(dataSize)) == NULL)
b2b461829c61 Move utility function dmReadDataFile() to dmfile module instead.
Matti Hamalainen <ccr@tnsp.org>
parents: 438
diff changeset
91 {
958
985225a93aeb Add error code parameter to dmError() and dmErrorVA().
Matti Hamalainen <ccr@tnsp.org>
parents: 812
diff changeset
92 res = dmError(DMERR_MALLOC,
985225a93aeb Add error code parameter to dmError() and dmErrorVA().
Matti Hamalainen <ccr@tnsp.org>
parents: 812
diff changeset
93 "Error allocating memory for data, %d bytes.\n", dataSize);
567
b2b461829c61 Move utility function dmReadDataFile() to dmfile module instead.
Matti Hamalainen <ccr@tnsp.org>
parents: 438
diff changeset
94 goto error;
b2b461829c61 Move utility function dmReadDataFile() to dmfile module instead.
Matti Hamalainen <ccr@tnsp.org>
parents: 438
diff changeset
95 }
b2b461829c61 Move utility function dmReadDataFile() to dmfile module instead.
Matti Hamalainen <ccr@tnsp.org>
parents: 438
diff changeset
96
b2b461829c61 Move utility function dmReadDataFile() to dmfile module instead.
Matti Hamalainen <ccr@tnsp.org>
parents: 438
diff changeset
97 dataPos = 0;
b2b461829c61 Move utility function dmReadDataFile() to dmfile module instead.
Matti Hamalainen <ccr@tnsp.org>
parents: 438
diff changeset
98 dataRead = 0;
b2b461829c61 Move utility function dmReadDataFile() to dmfile module instead.
Matti Hamalainen <ccr@tnsp.org>
parents: 438
diff changeset
99
b2b461829c61 Move utility function dmReadDataFile() to dmfile module instead.
Matti Hamalainen <ccr@tnsp.org>
parents: 438
diff changeset
100 while (!feof(f) && !ferror(f))
b2b461829c61 Move utility function dmReadDataFile() to dmfile module instead.
Matti Hamalainen <ccr@tnsp.org>
parents: 438
diff changeset
101 {
b2b461829c61 Move utility function dmReadDataFile() to dmfile module instead.
Matti Hamalainen <ccr@tnsp.org>
parents: 438
diff changeset
102 size_t read = fread(dataBuf + dataPos, 1, readSize, f);
b2b461829c61 Move utility function dmReadDataFile() to dmfile module instead.
Matti Hamalainen <ccr@tnsp.org>
parents: 438
diff changeset
103 dataPos += read;
b2b461829c61 Move utility function dmReadDataFile() to dmfile module instead.
Matti Hamalainen <ccr@tnsp.org>
parents: 438
diff changeset
104 dataRead += read;
b2b461829c61 Move utility function dmReadDataFile() to dmfile module instead.
Matti Hamalainen <ccr@tnsp.org>
parents: 438
diff changeset
105
b2b461829c61 Move utility function dmReadDataFile() to dmfile module instead.
Matti Hamalainen <ccr@tnsp.org>
parents: 438
diff changeset
106 if (dataRead >= dataSize)
b2b461829c61 Move utility function dmReadDataFile() to dmfile module instead.
Matti Hamalainen <ccr@tnsp.org>
parents: 438
diff changeset
107 {
b2b461829c61 Move utility function dmReadDataFile() to dmfile module instead.
Matti Hamalainen <ccr@tnsp.org>
parents: 438
diff changeset
108 readSize = BUF_SIZE_GROW;
b2b461829c61 Move utility function dmReadDataFile() to dmfile module instead.
Matti Hamalainen <ccr@tnsp.org>
parents: 438
diff changeset
109 dataSize += BUF_SIZE_GROW;
b2b461829c61 Move utility function dmReadDataFile() to dmfile module instead.
Matti Hamalainen <ccr@tnsp.org>
parents: 438
diff changeset
110 if ((dataBuf = dmRealloc(dataBuf, dataSize)) == NULL)
b2b461829c61 Move utility function dmReadDataFile() to dmfile module instead.
Matti Hamalainen <ccr@tnsp.org>
parents: 438
diff changeset
111 {
958
985225a93aeb Add error code parameter to dmError() and dmErrorVA().
Matti Hamalainen <ccr@tnsp.org>
parents: 812
diff changeset
112 res = dmError(DMERR_MALLOC,
985225a93aeb Add error code parameter to dmError() and dmErrorVA().
Matti Hamalainen <ccr@tnsp.org>
parents: 812
diff changeset
113 "Error reallocating memory for data, %d bytes.\n",
985225a93aeb Add error code parameter to dmError() and dmErrorVA().
Matti Hamalainen <ccr@tnsp.org>
parents: 812
diff changeset
114 dataSize);
567
b2b461829c61 Move utility function dmReadDataFile() to dmfile module instead.
Matti Hamalainen <ccr@tnsp.org>
parents: 438
diff changeset
115 goto error;
b2b461829c61 Move utility function dmReadDataFile() to dmfile module instead.
Matti Hamalainen <ccr@tnsp.org>
parents: 438
diff changeset
116 }
b2b461829c61 Move utility function dmReadDataFile() to dmfile module instead.
Matti Hamalainen <ccr@tnsp.org>
parents: 438
diff changeset
117 }
b2b461829c61 Move utility function dmReadDataFile() to dmfile module instead.
Matti Hamalainen <ccr@tnsp.org>
parents: 438
diff changeset
118 else
b2b461829c61 Move utility function dmReadDataFile() to dmfile module instead.
Matti Hamalainen <ccr@tnsp.org>
parents: 438
diff changeset
119 break;
b2b461829c61 Move utility function dmReadDataFile() to dmfile module instead.
Matti Hamalainen <ccr@tnsp.org>
parents: 438
diff changeset
120 }
b2b461829c61 Move utility function dmReadDataFile() to dmfile module instead.
Matti Hamalainen <ccr@tnsp.org>
parents: 438
diff changeset
121
b2b461829c61 Move utility function dmReadDataFile() to dmfile module instead.
Matti Hamalainen <ccr@tnsp.org>
parents: 438
diff changeset
122 *pbufSize = dataRead;
b2b461829c61 Move utility function dmReadDataFile() to dmfile module instead.
Matti Hamalainen <ccr@tnsp.org>
parents: 438
diff changeset
123 *pbuf = dataBuf;
b2b461829c61 Move utility function dmReadDataFile() to dmfile module instead.
Matti Hamalainen <ccr@tnsp.org>
parents: 438
diff changeset
124
b2b461829c61 Move utility function dmReadDataFile() to dmfile module instead.
Matti Hamalainen <ccr@tnsp.org>
parents: 438
diff changeset
125 error:
b2b461829c61 Move utility function dmReadDataFile() to dmfile module instead.
Matti Hamalainen <ccr@tnsp.org>
parents: 438
diff changeset
126 if (f != inFile)
b2b461829c61 Move utility function dmReadDataFile() to dmfile module instead.
Matti Hamalainen <ccr@tnsp.org>
parents: 438
diff changeset
127 fclose(f);
1102
e06abfde6c39 Cosmetics pass: Remove excess whitespace.
Matti Hamalainen <ccr@tnsp.org>
parents: 1087
diff changeset
128
567
b2b461829c61 Move utility function dmReadDataFile() to dmfile module instead.
Matti Hamalainen <ccr@tnsp.org>
parents: 438
diff changeset
129 return res;
b2b461829c61 Move utility function dmReadDataFile() to dmfile module instead.
Matti Hamalainen <ccr@tnsp.org>
parents: 438
diff changeset
130 }