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

//
// 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