mirror of
https://github.com/gbdev/rgbds.git
synced 2025-11-29 06:17:48 +00:00
Make all file names lowercase
This fixes a zip/platform artifact. Signed-off-by: Vegard Nossum <vegard.nossum@gmail.com>
This commit is contained in:
13
src/lib/include/library.h
Normal file
13
src/lib/include/library.h
Normal file
@@ -0,0 +1,13 @@
|
||||
#ifndef LIBRARY_H
|
||||
#define LIBRARY_H
|
||||
|
||||
#include "libwrap.h"
|
||||
|
||||
extern sLibrary *lib_Read( char *filename );
|
||||
extern BBOOL lib_Write( sLibrary *lib, char *filename );
|
||||
extern sLibrary *lib_AddReplace( sLibrary *lib, char *filename );
|
||||
extern void lib_Free( sLibrary *lib );
|
||||
extern sLibrary *lib_DeleteModule( sLibrary *lib, char *filename );
|
||||
extern sLibrary *lib_Find( sLibrary *lib, char *filename );
|
||||
|
||||
#endif
|
||||
20
src/lib/include/libwrap.h
Normal file
20
src/lib/include/libwrap.h
Normal file
@@ -0,0 +1,20 @@
|
||||
#ifndef LIBWRAP_H
|
||||
#define LIBWRAP_H
|
||||
|
||||
#include "types.h"
|
||||
|
||||
#define MAXNAMELENGTH 256
|
||||
|
||||
struct LibraryWrapper
|
||||
{
|
||||
char tName[MAXNAMELENGTH];
|
||||
UWORD uwTime;
|
||||
UWORD uwDate;
|
||||
SLONG nByteLength;
|
||||
UBYTE *pData;
|
||||
struct LibraryWrapper *pNext;
|
||||
};
|
||||
|
||||
typedef struct LibraryWrapper sLibrary;
|
||||
|
||||
#endif
|
||||
16
src/lib/include/types.h
Normal file
16
src/lib/include/types.h
Normal file
@@ -0,0 +1,16 @@
|
||||
#ifndef TYPES_H
|
||||
#define TYPES_H 1
|
||||
|
||||
#if defined(AMIGA) || defined(__GNUC__)
|
||||
#define _MAX_PATH 512
|
||||
#endif
|
||||
|
||||
typedef unsigned char UBYTE;
|
||||
typedef signed char SBYTE;
|
||||
typedef unsigned short UWORD;
|
||||
typedef signed short SWORD;
|
||||
typedef unsigned long ULONG;
|
||||
typedef signed long SLONG;
|
||||
typedef signed char BBOOL;
|
||||
|
||||
#endif
|
||||
308
src/lib/library.c
Normal file
308
src/lib/library.c
Normal file
@@ -0,0 +1,308 @@
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
#include "types.h"
|
||||
#include "libwrap.h"
|
||||
|
||||
extern void fatalerror( char *s );
|
||||
|
||||
SLONG file_Length( FILE *f )
|
||||
{
|
||||
ULONG r,
|
||||
p;
|
||||
|
||||
p=ftell( f );
|
||||
fseek( f, 0, SEEK_END );
|
||||
r=ftell( f );
|
||||
fseek( f, p, SEEK_SET );
|
||||
|
||||
return( r );
|
||||
}
|
||||
|
||||
SLONG file_ReadASCIIz( char *b, FILE *f )
|
||||
{
|
||||
SLONG r=0;
|
||||
|
||||
while( (*b++ = fgetc(f))!=0 )
|
||||
r+=1;
|
||||
|
||||
return( r+1 );
|
||||
}
|
||||
|
||||
void file_WriteASCIIz( char *b, FILE *f )
|
||||
{
|
||||
while( *b )
|
||||
fputc(*b++,f);
|
||||
|
||||
fputc( 0, f );
|
||||
}
|
||||
|
||||
UWORD file_ReadWord( FILE *f )
|
||||
{
|
||||
UWORD r;
|
||||
|
||||
r =fgetc( f );
|
||||
r|=fgetc( f )<<8;
|
||||
|
||||
return( r );
|
||||
}
|
||||
|
||||
void file_WriteWord( UWORD w, FILE *f )
|
||||
{
|
||||
fputc( w, f );
|
||||
fputc( w>>8, f );
|
||||
}
|
||||
|
||||
ULONG file_ReadLong( FILE *f )
|
||||
{
|
||||
ULONG r;
|
||||
|
||||
r =fgetc( f );
|
||||
r|=fgetc( f )<<8;
|
||||
r|=fgetc( f )<<16;
|
||||
r|=fgetc( f )<<24;
|
||||
|
||||
return( r );
|
||||
}
|
||||
|
||||
void file_WriteLong( UWORD w, FILE *f )
|
||||
{
|
||||
fputc( w, f );
|
||||
fputc( w>>8, f );
|
||||
fputc( w>>16, f );
|
||||
fputc( w>>24, f );
|
||||
}
|
||||
|
||||
sLibrary *lib_ReadLib0( FILE *f, SLONG size )
|
||||
{
|
||||
if( size )
|
||||
{
|
||||
sLibrary *l=NULL,
|
||||
*first=NULL;
|
||||
|
||||
while( size>0 )
|
||||
{
|
||||
if( l==NULL )
|
||||
{
|
||||
if( (l=(sLibrary *)malloc(sizeof(sLibrary)))==NULL )
|
||||
fatalerror( "Out of memory" );
|
||||
|
||||
first=l;
|
||||
}
|
||||
else
|
||||
{
|
||||
if( (l->pNext=(sLibrary *)malloc(sizeof(sLibrary)))==NULL )
|
||||
fatalerror( "Out of memory" );
|
||||
l=l->pNext;
|
||||
}
|
||||
|
||||
size-=file_ReadASCIIz( l->tName, f );
|
||||
l->uwTime=file_ReadWord( f ); size-=2;
|
||||
l->uwDate=file_ReadWord( f ); size-=2;
|
||||
l->nByteLength=file_ReadLong( f ); size-=4;
|
||||
if( l->pData=(UBYTE *)malloc(l->nByteLength) )
|
||||
{
|
||||
fread( l->pData, sizeof(UBYTE), l->nByteLength, f );
|
||||
size-=l->nByteLength;
|
||||
}
|
||||
else
|
||||
fatalerror( "Out of memory" );
|
||||
|
||||
l->pNext=NULL;
|
||||
}
|
||||
return( first );
|
||||
}
|
||||
|
||||
return( NULL );
|
||||
}
|
||||
|
||||
sLibrary *lib_Read( char *filename )
|
||||
{
|
||||
FILE *f;
|
||||
|
||||
if( f=fopen(filename,"rb") )
|
||||
{
|
||||
SLONG size;
|
||||
char ID[5];
|
||||
|
||||
size=file_Length( f );
|
||||
if( size==0 )
|
||||
{
|
||||
fclose( f );
|
||||
return( NULL );
|
||||
}
|
||||
|
||||
fread( ID, sizeof(char), 4, f );
|
||||
ID[4]=0;
|
||||
size-=4;
|
||||
|
||||
if( strcmp(ID,"XLB0")==0 )
|
||||
{
|
||||
sLibrary *r;
|
||||
|
||||
r=lib_ReadLib0( f, size );
|
||||
fclose( f );
|
||||
printf( "Library '%s' opened\n", filename );
|
||||
return( r );
|
||||
}
|
||||
else
|
||||
{
|
||||
fclose( f );
|
||||
fatalerror( "Not a valid xLib library" );
|
||||
return( NULL );
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
printf( "Library '%s' not found, it will be created if necessary\n", filename );
|
||||
return( NULL );
|
||||
}
|
||||
}
|
||||
|
||||
BBOOL lib_Write( sLibrary *lib, char *filename )
|
||||
{
|
||||
FILE *f;
|
||||
|
||||
if( f=fopen(filename,"wb") )
|
||||
{
|
||||
fwrite( "XLB0", sizeof(char), 4, f );
|
||||
while( lib )
|
||||
{
|
||||
file_WriteASCIIz( lib->tName, f );
|
||||
file_WriteWord( lib->uwTime, f );
|
||||
file_WriteWord( lib->uwDate, f );
|
||||
file_WriteLong( lib->nByteLength, f );
|
||||
fwrite( lib->pData, sizeof(UBYTE), lib->nByteLength,f );
|
||||
lib=lib->pNext;
|
||||
}
|
||||
|
||||
fclose( f );
|
||||
printf( "Library '%s' closed\n", filename );
|
||||
return( 1 );
|
||||
}
|
||||
|
||||
return( 0 );
|
||||
}
|
||||
|
||||
void TruncateFileName( char *dest, char *src )
|
||||
{
|
||||
SLONG l;
|
||||
|
||||
l=strlen( src )-1;
|
||||
while( (l>=0) && (src[l]!='\\') && (src[l]!='/') )
|
||||
l-=1;
|
||||
|
||||
strcpy( dest, &src[l+1] );
|
||||
}
|
||||
|
||||
sLibrary *lib_Find( sLibrary *lib, char *filename )
|
||||
{
|
||||
char truncname[MAXNAMELENGTH];
|
||||
|
||||
TruncateFileName( truncname, filename );
|
||||
|
||||
while( lib )
|
||||
{
|
||||
if( strcmp(lib->tName,truncname)==0 )
|
||||
break;
|
||||
|
||||
lib=lib->pNext;
|
||||
}
|
||||
|
||||
return( lib );
|
||||
}
|
||||
|
||||
sLibrary *lib_AddReplace( sLibrary *lib, char *filename )
|
||||
{
|
||||
FILE *f;
|
||||
|
||||
if( f=fopen(filename,"rb") )
|
||||
{
|
||||
sLibrary *module;
|
||||
char truncname[MAXNAMELENGTH];
|
||||
|
||||
TruncateFileName( truncname, filename );
|
||||
|
||||
if( (module=lib_Find(lib,filename))==NULL )
|
||||
{
|
||||
if( module=(sLibrary *)malloc(sizeof(sLibrary)) )
|
||||
{
|
||||
module->pNext=lib;
|
||||
lib=module;
|
||||
}
|
||||
else
|
||||
fatalerror( "Out of memory" );
|
||||
}
|
||||
else
|
||||
{
|
||||
/* Module already exists */
|
||||
free( module->pData );
|
||||
}
|
||||
|
||||
module->nByteLength=file_Length( f );
|
||||
strcpy( module->tName, truncname );
|
||||
if( module->pData=(UBYTE *)malloc(module->nByteLength) )
|
||||
{
|
||||
fread( module->pData, sizeof(UBYTE), module->nByteLength, f );
|
||||
}
|
||||
|
||||
printf( "Added module '%s'\n", truncname );
|
||||
|
||||
fclose( f );
|
||||
}
|
||||
|
||||
return( lib );
|
||||
}
|
||||
|
||||
sLibrary *lib_DeleteModule( sLibrary *lib, char *filename )
|
||||
{
|
||||
char truncname[MAXNAMELENGTH];
|
||||
sLibrary **pp,
|
||||
**first;
|
||||
BBOOL found=0;
|
||||
|
||||
pp=&lib;
|
||||
first=pp;
|
||||
|
||||
TruncateFileName( truncname, filename );
|
||||
while( (*pp) && (!found) )
|
||||
{
|
||||
if( strcmp((*pp)->tName,truncname)==0 )
|
||||
{
|
||||
sLibrary *t;
|
||||
|
||||
t=*pp;
|
||||
|
||||
if( t->pData )
|
||||
free( t->pData );
|
||||
|
||||
*pp = t->pNext;
|
||||
|
||||
free( t );
|
||||
found=1;
|
||||
}
|
||||
pp=&((*pp)->pNext);
|
||||
}
|
||||
|
||||
if( !found )
|
||||
fatalerror( "Module not found" );
|
||||
else
|
||||
printf( "Module '%s' deleted from library\n", truncname );
|
||||
|
||||
return( *first );
|
||||
}
|
||||
|
||||
void lib_Free( sLibrary *lib )
|
||||
{
|
||||
while( lib )
|
||||
{
|
||||
sLibrary *l;
|
||||
|
||||
if( lib->pData )
|
||||
free( lib->pData );
|
||||
|
||||
l=lib;
|
||||
lib=lib->pNext;
|
||||
free( l );
|
||||
}
|
||||
}
|
||||
143
src/lib/main.c
Normal file
143
src/lib/main.c
Normal file
@@ -0,0 +1,143 @@
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
#include <ctype.h>
|
||||
|
||||
#include "asmotor.h"
|
||||
#include "types.h"
|
||||
#include "library.h"
|
||||
|
||||
// Quick and dirty...but it works
|
||||
#ifdef __GNUC__
|
||||
#define strcmpi strcasecmp
|
||||
#endif
|
||||
|
||||
/*
|
||||
* Print out an errormessage
|
||||
*
|
||||
*/
|
||||
|
||||
void fatalerror( char *s )
|
||||
{
|
||||
printf( "*ERROR* : %s\n", s );
|
||||
exit( 5 );
|
||||
}
|
||||
|
||||
/*
|
||||
* Print the usagescreen
|
||||
*
|
||||
*/
|
||||
|
||||
void PrintUsage( void )
|
||||
{
|
||||
printf( "xLib v" LIB_VERSION " (part of ASMotor " ASMOTOR_VERSION ")\n\n"
|
||||
"Usage: xlib library command [module1 module2 ... modulen]\n"
|
||||
"Commands:\n\ta\tAdd/replace modules to library\n"
|
||||
"\td\tDelete modules from library\n"
|
||||
"\tl\tList library contents\n"
|
||||
"\tx\tExtract modules from library\n" );
|
||||
exit( 0 );
|
||||
}
|
||||
|
||||
/*
|
||||
* The main routine
|
||||
*
|
||||
*/
|
||||
|
||||
int main( int argc, char *argv[] )
|
||||
{
|
||||
SLONG argn=0;
|
||||
char *libname;
|
||||
|
||||
argc-=1;
|
||||
argn+=1;
|
||||
|
||||
if( argc>=2 )
|
||||
{
|
||||
UBYTE command;
|
||||
sLibrary *lib;
|
||||
|
||||
lib=lib_Read( libname=argv[argn++] );
|
||||
argc-=1;
|
||||
|
||||
if( strlen(argv[argn])==1 )
|
||||
{
|
||||
command=argv[argn++][0];
|
||||
argc-=1;
|
||||
|
||||
switch( tolower(command) )
|
||||
{
|
||||
case 'a':
|
||||
while( argc )
|
||||
{
|
||||
lib=lib_AddReplace( lib, argv[argn++] );
|
||||
argc-=1;
|
||||
}
|
||||
lib_Write( lib, libname );
|
||||
lib_Free( lib );
|
||||
break;
|
||||
case 'd':
|
||||
while( argc )
|
||||
{
|
||||
lib=lib_DeleteModule( lib, argv[argn++] );
|
||||
argc-=1;
|
||||
}
|
||||
lib_Write( lib, libname );
|
||||
lib_Free( lib );
|
||||
break;
|
||||
case 'l':
|
||||
{
|
||||
sLibrary *l;
|
||||
|
||||
l=lib;
|
||||
|
||||
while( l )
|
||||
{
|
||||
printf( "%10d %s\n", l->nByteLength, l->tName );
|
||||
l=l->pNext;
|
||||
}
|
||||
}
|
||||
break;
|
||||
case 'x':
|
||||
while( argc )
|
||||
{
|
||||
sLibrary *l;
|
||||
|
||||
l=lib_Find( lib, argv[argn] );
|
||||
if( l )
|
||||
{
|
||||
FILE *f;
|
||||
|
||||
if( f=fopen(argv[argn],"wb") )
|
||||
{
|
||||
fwrite( l->pData, sizeof(UBYTE), l->nByteLength, f );
|
||||
fclose( f );
|
||||
printf( "Extracted module '%s'\n", argv[argn] );
|
||||
}
|
||||
else
|
||||
fatalerror( "Unable to write module" );
|
||||
}
|
||||
else
|
||||
fatalerror( "Module not found" );
|
||||
|
||||
argn+=1;
|
||||
argc-=1;
|
||||
}
|
||||
lib_Free( lib );
|
||||
break;
|
||||
default:
|
||||
fatalerror( "Invalid command" );
|
||||
break;
|
||||
}
|
||||
|
||||
}
|
||||
else
|
||||
{
|
||||
fatalerror( "Invalid command" );
|
||||
}
|
||||
}
|
||||
else
|
||||
PrintUsage();
|
||||
|
||||
return( 0 );
|
||||
}
|
||||
62
src/lib/makefile
Normal file
62
src/lib/makefile
Normal file
@@ -0,0 +1,62 @@
|
||||
.ERASE
|
||||
.EXTENSIONS:
|
||||
.EXTENSIONS: .obj .c .h
|
||||
|
||||
!ifndef TARGET
|
||||
TARGET = DOS
|
||||
!endif
|
||||
|
||||
!ifeq TARGET DOS
|
||||
!else
|
||||
!ifeq TARGET WIN95
|
||||
!else
|
||||
!error Invalid TARGET (must be DOS or WIN95)
|
||||
!endif
|
||||
!endif
|
||||
|
||||
!ifeq TARGET DOS
|
||||
COPT = /zp4 /5s /fp3 /d2 /oneatx /i=include /i=.. /d2 /wx /bt=dos
|
||||
OBJDIR = OBJS\
|
||||
EXE = xlib.exe
|
||||
!endif
|
||||
!ifeq TARGET WIN95
|
||||
COPT = /zp4 /5s /fp3 /d2 /oneatx /i=include /i=.. /d2 /wx /bt=nt
|
||||
OBJDIR = OBJS95\
|
||||
EXE = xlib95.exe
|
||||
!endif
|
||||
|
||||
C = wcc386 $(COPT)
|
||||
|
||||
.c: .
|
||||
.h: include
|
||||
.obj: $(OBJDIR)
|
||||
|
||||
OBJS = main.obj library.obj
|
||||
|
||||
$(EXE) : $(OBJS)
|
||||
%create link.lnk
|
||||
!ifeq TARGET DOS
|
||||
%append link.lnk system pmodew
|
||||
!endif
|
||||
!ifeq TARGET WIN95
|
||||
%append link.lnk system nt
|
||||
!endif
|
||||
%append link.lnk option map
|
||||
%append link.lnk option stack=64k
|
||||
%append link.lnk debug watcom all
|
||||
%append link.lnk name $(EXE)
|
||||
for %i in ($(OBJS)) do %append link.lnk file $(OBJDIR)\%i
|
||||
wlink @link.lnk
|
||||
!ifeq TARGET DOS
|
||||
d:\code\pmodew\pmwsetup /B0 $(EXE)
|
||||
!endif
|
||||
|
||||
.c.obj : .AUTODEPEND
|
||||
$(C) -fo=$(OBJDIR)$^. $[.
|
||||
|
||||
clean: .SYMBOLIC
|
||||
del $(OBJDIR)*.obj
|
||||
del *.err
|
||||
del $(EXE)
|
||||
del *.map
|
||||
del link.lnk
|
||||
2
src/lib/objs/delete.me
Normal file
2
src/lib/objs/delete.me
Normal file
@@ -0,0 +1,2 @@
|
||||
You can safely delete me.
|
||||
I'm just a dummy so pkzip will store this directory.
|
||||
2
src/lib/objs95/delete.me
Normal file
2
src/lib/objs95/delete.me
Normal file
@@ -0,0 +1,2 @@
|
||||
You can safely delete me.
|
||||
I'm just a dummy so pkzip will store this directory.
|
||||
Reference in New Issue
Block a user