/*========================================================================= MISC.HPP Author: Gary Liddon @ Watford Created: 4th May 1991 Purpose: Shitey misc stuff Copyright (c) 1991 - 1997 Gary Liddon ===========================================================================*/ #ifndef __PC_GLIB_MISC_HPP__ #define __PC_GLIB_MISC_HPP__ /*---------------------------------------------------------------------- Includes -------- */ /* Std Lib ------- */ #include #include /* Glib ---- */ #include "gtypes.h" /* Local ----- */ #include "gobject.hpp" #include "gstring.hpp" #include "gutils.h" /*---------------------------------------------------------------------- Tyepdefs && Defines ------------------- */ /*---------------------------------------------------------------------- Class defintions ---------------- */ class GLIB_API CommandLine : public GObject { public: CommandLine(int argc,char **argv,char *(*Func)(char *String,int Num)); ~CommandLine(); char *GetNextItem(); protected: std::ifstream *InStream; char *InStreamFile; char *GetNextScriptFileItem(); char *GetNextCommandLineItem(); private: int CommandItem; int MyArgc; char **MyArgv; char *LastItem; }; class GLIB_API Gofstream : public std::ofstream { public: enum ENDIAN { BIG_ENDIAN, LITTLE_ENDIAN, }; Gofstream(ENDIAN NewEndian=BIG_ENDIAN) {SetEndian(NewEndian);} void SetEndian(ENDIAN NewEndian) {Endian=NewEndian;} void Put16(u16 PVal) { switch(Endian) { case BIG_ENDIAN: put(u8(PVal>>8)); put(u8(PVal&0xff)); break; case LITTLE_ENDIAN: put(u8(PVal&0xff)); put(u8(PVal>>8)); break; } } void Put32(u32 PVal) { switch(Endian) { case BIG_ENDIAN: put(u8(PVal>>24)); put(u8(PVal>>16)); put(u8(PVal>>8)); put(u8(PVal>>0)); break; case LITTLE_ENDIAN: put(u8(PVal>>0)); put(u8(PVal>>8)); put(u8(PVal>>16)); put(u8(PVal>>24)); break; } } int Align(int Alignment,char const * Pad=NULL) { int NewPos; int CurrPos; CurrPos=tellp(); if (Alignment && CurrPos) { NewPos=CurrPos+((CurrPos%Alignment) == 0 ? 0 : Alignment-(CurrPos%Alignment)); if (NewPos != CurrPos) { if (Pad) { int StrSize; StrSize=strlen(Pad); for (;CurrPos & NewList) : List(NewList) { DoCycle(FileSpec,Recurse); } protected: virtual void FileCallback(char const * FName,int FileNum) { List.push_front(FName); } std::list & List; }; /*---------------------------------------------------------------------- Globals ------- */ /* Vars ---- */ /* Data ---- */ /* Functions --------- */ GLIB_API int CycleFiles(char const *Spec,void (*Func)(char const *Fname,int Num),BOOL Recurse); GLIB_API BOOL SwitchInfo(char *String); GLIB_API bool FileExists(const char *String); GLIB_API int FileSize(const char *String); GLIB_API bool copyFile(char const * Dest,char const * Source,bool Overwrite = false); /*---------------------------------------------------------------------- */ #endif /* __PC_GLIB_MISC_HPP__ */ /*=========================================================================== end */