2 //**************************************************************************
\r
6 //**************************************************************************
\r
8 // HEADER FILES ------------------------------------------------------------
\r
20 #include <sys/stat.h>
\r
24 #include <sys/stat.h>
\r
25 #include <sys/types.h>
\r
36 // MACROS ------------------------------------------------------------------
\r
42 // TYPES -------------------------------------------------------------------
\r
44 // EXTERNAL FUNCTION PROTOTYPES --------------------------------------------
\r
46 // PUBLIC FUNCTION PROTOTYPES ----------------------------------------------
\r
48 // PRIVATE FUNCTION PROTOTYPES ---------------------------------------------
\r
50 // EXTERNAL DATA DECLARATIONS ----------------------------------------------
\r
52 extern boolean acs_BigEndianHost;
\r
53 extern boolean acs_VerboseMode;
\r
54 extern boolean acs_DebugMode;
\r
55 extern FILE *acs_DebugFile;
\r
57 // PUBLIC DATA DEFINITIONS -------------------------------------------------
\r
59 // PRIVATE DATA DEFINITIONS ------------------------------------------------
\r
61 // CODE --------------------------------------------------------------------
\r
63 //==========================================================================
\r
67 //==========================================================================
\r
69 void *MS_Alloc(size_t size, error_t error)
\r
73 if((mem = malloc(size)) == NULL)
\r
75 ERR_Exit(error, NO);
\r
80 //==========================================================================
\r
84 //==========================================================================
\r
86 void *MS_Realloc(void *base, size_t size, error_t error)
\r
90 if((mem = realloc(base, size)) == NULL)
\r
92 ERR_Exit(error, NO);
\r
97 //==========================================================================
\r
101 // Converts a host U_WORD (2 bytes) to little endian byte order.
\r
103 //==========================================================================
\r
105 U_WORD MS_LittleUWORD(U_WORD val)
\r
107 if(acs_BigEndianHost == NO)
\r
111 return ((val&255)<<8)+((val>>8)&255);
\r
114 //==========================================================================
\r
118 // Converts a host U_INT (4 bytes) to little endian byte order.
\r
120 //==========================================================================
\r
122 U_INT MS_LittleUINT(U_INT val)
\r
124 if(acs_BigEndianHost == NO)
\r
128 return ((val&255)<<24)+(((val>>8)&255)<<16)+(((val>>16)&255)<<8)
\r
132 //==========================================================================
\r
136 //==========================================================================
\r
138 int MS_LoadFile(char *name, char **buffer)
\r
144 struct stat fileInfo;
\r
146 if(strlen(name) >= MAX_FILE_NAME_LENGTH)
\r
148 ERR_Exit(ERR_FILE_NAME_TOO_LONG, NO, name);
\r
150 if((handle = open(name, O_RDONLY|O_BINARY, 0666)) == -1)
\r
152 ERR_Exit(ERR_CANT_OPEN_FILE, NO, name);
\r
154 if(fstat(handle, &fileInfo) == -1)
\r
156 ERR_Exit(ERR_CANT_READ_FILE, NO, name);
\r
158 size = fileInfo.st_size;
\r
159 if((addr = malloc(size)) == NULL)
\r
161 ERR_Exit(ERR_NONE, NO, "Couldn't malloc %d bytes for "
\r
162 "file \"%s\".", size, name);
\r
164 count = read(handle, addr, size);
\r
168 ERR_Exit(ERR_CANT_READ_FILE, NO, name);
\r
175 //==========================================================================
\r
181 //==========================================================================
\r
182 boolean MS_FileExists(char *name)
\r
185 int ret = stat(name, &info);
\r
190 //==========================================================================
\r
194 //==========================================================================
\r
196 boolean MS_SaveFile(char *name, void *buffer, int length)
\r
201 handle = open(name, O_WRONLY|O_CREAT|O_TRUNC|O_BINARY, 0666);
\r
206 count = write(handle, buffer, length);
\r
215 //==========================================================================
\r
219 //==========================================================================
\r
221 int MS_StrCmp(char *s1, char *s2)
\r
223 for(; tolower(*s1) == tolower(*s2); s1++, s2++)
\r
230 return tolower(*s1)-tolower(*s2);
\r
233 //==========================================================================
\r
237 //==========================================================================
\r
239 char *MS_StrLwr(char *string)
\r
252 //==========================================================================
\r
256 //==========================================================================
\r
258 char *MS_StrUpr(char *string)
\r
271 //==========================================================================
\r
273 // MS_SuggestFileExt
\r
275 //==========================================================================
\r
277 void MS_SuggestFileExt(char *base, char *extension)
\r
281 search = base+strlen(base)-1;
\r
282 while(*search != ASCII_SLASH && *search != ASCII_BACKSLASH
\r
285 if(*search-- == '.')
\r
290 strcat(base, extension);
\r
293 //==========================================================================
\r
297 //==========================================================================
\r
299 void MS_StripFileExt(char *name)
\r
303 search = name+strlen(name)-1;
\r
304 while(*search != ASCII_SLASH && *search != ASCII_BACKSLASH
\r
316 //==========================================================================
\r
318 // MS_StripFilename
\r
320 //==========================================================================
\r
322 boolean MS_StripFilename(char *name)
\r
326 c = name+strlen(name);
\r
330 { // No directory delimiter
\r
333 } while(*c != DIRECTORY_DELIMITER_CHAR);
\r
338 //==========================================================================
\r
342 //==========================================================================
\r
344 void MS_Message(msg_t type, char *text, ...)
\r
349 if(type == MSG_VERBOSE && acs_VerboseMode == NO)
\r
354 if(type == MSG_DEBUG)
\r
356 if(acs_DebugMode == NO)
\r
360 if(acs_DebugFile != NULL)
\r
362 fp = acs_DebugFile;
\r
367 va_start(argPtr, text);
\r
368 vfprintf(fp, text, argPtr);
\r