// // G A M E.O.N.E - LOW LEVEL LIB V1.0 // Copyright (C) 2001 LEVEL ONE ENTERTAINMENT, // Licensed under the terms of LGPL. //:--------------------------------------------------------------------------- //:Description // // LOW LEVEL FILELOAD DRIVER INCLUDE FILE // //:--------------------------------------------------------------------------- #ifndef _LLFILE_H #define _LLFILE_H //#include "lib_base.h" #include "llstream.h" #define LLFILE_MAXPATH (260) // +------------------------+ // | llfile_CreateProcess | // +------------------------+ /* * Startet neuen Vordergrundprozess * Im Vollbildmodus verursacht der Aufruf ein Wechsel zum Desktop. * RETURN: * OK oder ungleich 0 bei Fehler */ int llfile_CreateProcess(const char * commandline ); // +-------------------+ // | llfile_LoadToMem | // +-------------------+ /* * Allociert Speicher und ladet das gesamte File ein. * Pointer auf "size" erhält die allokierte Filelänge. * RETURN: * Bei Erfolg: Pointer auf den allocierten Speicher mit dem Fileinhalt * 0 bei Fehler: kein freier Speicher mehr oder File nicht gefunden. * HINWEIS: * Speicher mit llmem_free() wieder freigeben. */ void * llfile_LoadToMem( const char * filename, int *size=0); // +-----------------------+ // | llfile_SplitSequence | // +-----------------------+ /* * Entnimmt aus einem Filenamen eine Sequenznummer. * Zeiger auf seqnum enthält die erkannte Sequenznummer, * Zeiger auf seqlen enthält die Länge der gefundenen Nummer * Optionaler Zeiger auf filename enthält den filenamen ohne Nummer und Extension * Optionaler Zeiger auf extension enthält die gefundene Extension * Liefert true bei Erfolg. * Beispiel: * char filename[256]; * char extension[256]; * int seqlen; * int seqnum; * * if(!llfile_SplitSequence("anim-a-002.tga", * &seqnum, * &seqlen, * filename, * extension); * //extension=".tga" * //filename="anim-a-" * //seqlen=3 * //seqnum=2 * * //Rekonstruktion der Sequenz * seqnum ++; // nächstes file * sprintf(buf,"%s%0*d%s",filename,seqlen,seqnum,extension); */ bool llfile_SplitSequence(const char *path,int *seqnum, int *seqlen, char *filename=0, char *extension=0); // +-------------------------+ // | llfile_GetSequencePath | // +-------------------------+ /* * Erzeugt einen Pfad mit einer neuen Sequenznummer. * Argument path bestimmt den Basispfad * Argument num bestimmt die nummer relativ zum Basispfad * RETURN: * 0 bei fehler, * sonst zeiger auf einen statischen null-terminierten string. * Der String ist static und ist LLFILE_MAXPATH definiert. * Man kann den String verändert (strcat,etc.) muss aber innerhalb von LLFILE_MAXPATH bleiben. * LLFILE_MAXPATH ist mindestens 260, egal welche Zielplatform. * * bsp: path="gfx-001.tga" num = 3, return= "gfx-004.tga" */ char * llfile_GetSequencePath(const char *path, int num); // +------------------------+ // | llfile_IsFileExisting | // +------------------------+ /* * Liefert true wenn der übergebene Pfad existiert */ bool llfile_IsFileExisting(const char *path); char * llfile_GetFullPath(const char * filename); // +-----------------+ // | llfile_GetPath | // +-----------------+ /* * Liefert Pfad zu ... * * LLFILE_APP_PATH = absoluter Pfad des Exefiles inkl. Namen * LLFILE_APP_DIR = absoluter Pfad des Verzeichnisses des Exefiles * LLFILE_APP_NAME = Name des Executables * LLFILE_APP_EXT = Extension des Executables * LLFILE_TEMP_DIR = absoluter Pfad zum Temporären Verzeichnis * LLFILE_TEMP_NAME = wie TEMP_DIR + temporärer Name * * RETURN: * Null terminierter string der den gewünschten Pfad enthält oder NULL bei Fehler. * Der String ist static und ist LLFILE_MAXPATH definiert. * Man kann den String verändert (strcat,etc.) muss aber innerhalb von LLFILE_MAXPATH bleiben. * LLFILE_MAXPATH ist mindestens 260, egal welche Zielplatform. */ typedef enum { LLFILE_CUR_DIR, LLFILE_APP_DIR, LLFILE_APP_NAME } llfile_ePATH; char * llfile_GetPath(llfile_ePATH type); // +-------------------+ // | llfile_SetCurDir | // +-------------------+ /* * Aktuelles Verzeichnis setzen * RETURN: * OK, ungleich 0 bei Fehler */ int llfile_SetCurDir( const char *dirpath ); const char * llfile_GetCurDir(); // +--------------------+ // | llfile_OpenStream | // +--------------------+ /* * Stream Öffnen */ typedef enum { LLFILE_STREAM_STDIO=0, // regular files = default LLFILE_STREAM_ZIP=10000, // zip files LLFILE_STREAM_FTP, LLFILE_STREAM_HTTP, LLFILE_STREAM_RES, // packed resources with exe LLFILE_UNKNOWN, // nur zip und resource supported LLFILE_STREAM_TCP, LLFILE_STREAM_UDP, LLFILE_STREAM_MEM, LLFILE_STREAM_USER, // erster User stream handle } llfile_eSTREAM; llfile_eSTREAM llfile_OpenStream( llfile_eSTREAM type, const char * url ); int llfile_PushModule( llfile_eSTREAM type, CStreamModule * module, int option ); int llfile_PopModule( llfile_eSTREAM type, CStreamModule * module, bool del=true); extern llfile_eSTREAM llfile_current_stream; // +---------------------+ // | llfile_CloseStream | // +---------------------+ /* * Schliesst den Stream. Streammodule, Buffer werden glöscht. */ int llfile_CloseStream( llfile_eSTREAM type ); // +---------------------+ // | llfile_IoCtlStream | // +---------------------+ /* * Sendet ein Commando den Stream "hinunter". */ int llfile_IoCtlStream( llfile_eSTREAM type, const char * cmd, void * argument ); // +--------------------+ // | llfile_ReadStream | // +--------------------+ /* * Liest vom Stream * RETURN: * Anzahl der gelesenen Bytes, bzw -1 bei Fehler */ int llfile_ReadStream( llfile_eSTREAM type, void * ioBuf, int numbytes ); // +---------------------------+ // | llfile_CreateEmptyStream | // +---------------------------+ /* * Erzeugt neuen, leeren Stream */ llfile_eSTREAM llfile_CreateEmptyStream(); // +---------------------+ // | llfile_OpenMapFile | // +---------------------+ /* * Memory Mapped Sequential Read Only File * Mapped ein File in den Speicher. * Zugriff erfolgt über die zurückgelieferte llfile_sMAPFILE structur. * Diese wird wie bei den StdIo Funktionen verwendet. * llfile_fgetc, llfile_ftell, etc. unterscheiden sich nur vom Namen * zur stdio., funktion ist die selbe. */ typedef struct { unsigned char * BasePtr; // Start des Memory Mapped Files im Speicher unsigned char * EndPtr; // End Adresse + 1 unsigned char * ReadPtr; // Aktueller Readpointer } llfile_sMAPFILE; llfile_sMAPFILE * llfile_OpenMapFile( const char * filename, int * filesize ); // +----------------------+ // | llfile_CloseMapFile | // +----------------------+ void llfile_CloseMapFile( llfile_sMAPFILE * mapfileptr ); // +----------------------+ // | llfile_CloseMapFile | // +----------------------+ /* * FILE IO replacement. Funktionen die llfile_sMAPFILE unterstützen * Parameter und Returnwerte wie bei den entsprechenden stdio Funktionen. */ int llfile_fgetc( llfile_sMAPFILE * mapfile ); long llfile_ftell( llfile_sMAPFILE * mapfile ); int llfile_fseek( llfile_sMAPFILE * mapfile, long offset, int pos ); long llfile_fread( void * buf, long cnt, long size, llfile_sMAPFILE * mapfile ); long llfile_fwrite( void * buf, long cnt, long size, llfile_sMAPFILE * mapfile ); long llfile_filesize(llfile_sMAPFILE * mapfile ); #endif // _LLFILE_H