]> icculus.org git repositories - btb/d2x.git/blob - misc/fileutil.c
portable file i/o utils
[btb/d2x.git] / misc / fileutil.c
1 /*
2 THE COMPUTER CODE CONTAINED HEREIN IS THE SOLE PROPERTY OF PARALLAX
3 SOFTWARE CORPORATION ("PARALLAX").  PARALLAX, IN DISTRIBUTING THE CODE TO
4 END-USERS, AND SUBJECT TO ALL OF THE TERMS AND CONDITIONS HEREIN, GRANTS A
5 ROYALTY-FREE, PERPETUAL LICENSE TO SUCH END-USERS FOR USE BY SUCH END-USERS
6 IN USING, DISPLAYING,  AND CREATING DERIVATIVE WORKS THEREOF, SO LONG AS
7 SUCH USE, DISPLAY OR CREATION IS FOR NON-COMMERCIAL, ROYALTY OR REVENUE
8 FREE PURPOSES.  IN NO EVENT SHALL THE END-USER USE THE COMPUTER CODE
9 CONTAINED HEREIN FOR REVENUE-BEARING PURPOSES.  THE END-USER UNDERSTANDS
10 AND AGREES TO THE TERMS HEREIN AND ACCEPTS THE SAME BY USE OF THIS FILE.
11 COPYRIGHT 1993-1999 PARALLAX SOFTWARE CORPORATION.  ALL RIGHTS RESERVED.
12 */
13
14 #include <stdio.h>
15 #include <stdlib.h>
16 #include <sys/types.h>
17 #include <unistd.h>
18
19 #include "fileutil.h"
20 #include "fix.h"
21 #include "byteswap.h"
22 #include "error.h"
23
24 int filelength(int fd)
25 {
26         int cur_pos, end_pos;
27
28         cur_pos = lseek(fd, 0, SEEK_CUR);
29         lseek(fd, 0, SEEK_END);
30         end_pos = lseek(fd, 0, SEEK_CUR);
31         lseek(fd, cur_pos, SEEK_SET);
32         return end_pos;
33 }
34
35 byte file_read_byte(FILE *fp)
36 {
37         byte b;
38
39         if (fread(&b, 1, 1, fp) != 1)
40                 Error("Error reading byte in file_read_byte()");
41         return b;
42 }
43
44 short file_read_short(FILE *fp)
45 {
46         short s;
47
48         if (fread(&s, 2, 1, fp) != 1)
49                 Error("Error reading short in file_read_short()");
50         return INTEL_SHORT(s);
51 }
52
53 int file_read_int(FILE *fp)
54 {
55         uint i;
56
57         if (fread(&i, 4, 1, fp) != 1)
58                 Error("Error reading int in file_read_int()");
59         return INTEL_INT(i);
60 }
61
62 fix file_read_fix(FILE *fp)
63 {
64         fix f;
65
66         if (fread(&f, 4, 1, fp) != 1)
67                 Error("Error reading fix in file_read_fix()");
68         return INTEL_INT(f);
69 }
70
71 int file_write_byte(FILE *fp, byte b)
72 {
73         return (fwrite(&b, 1, 1, fp));
74 }
75
76 int file_write_short(FILE *fp, short s)
77 {
78         s = INTEL_SHORT(s);
79         return (fwrite(&s, 2, 1, fp));
80 }
81
82 int file_write_int(FILE *fp, int i)
83 {
84         i = INTEL_INT(i);
85         return (fwrite(&i, 4, 1, fp));
86 }
87
88 int write_fix_swap(FILE *fp, fix f)
89 {
90         f = (fix)INTEL_INT((int)f);
91         return (fwrite(&f, 4, 1, fp));
92 }