You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
258 lines
7.2 KiB
C
258 lines
7.2 KiB
C
//
|
|
// 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
|
|
|
|
|
|
|
|
|
|
|