00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00036 class PG_API pgSysMgr
00037 {
00038 public:
00039 pgDefineException(ExceptionCannotCreateMutex);
00040 pgDefineException(ExceptionCannotCreateThread);
00041 pgDefineException(ExceptionCannotOpenFile);
00042 pgDefineException(ExceptionCannotReadFile);
00043 pgDefineException(ExceptionCannotWriteFile);
00044 pgDefineException(ExceptionCreateFramebufferFailed);
00045 pgDefineException(ExceptionEndPogolyn);
00046 pgDefineException(ExceptionInvalidArgument);
00047 pgDefineException(ExceptionNotInitialized);
00048
00052 enum SysFlag
00053 {
00054 FLAG_FULLSCREEN_START = 0x0001,
00055 FLAG_VARIABLE_SIZE = 0x0002,
00056 FLAG_DISABLE_SHADER = 0x0004
00057 };
00058
00059 enum FileMode
00060 {
00061 FILE_MODE_READ,
00062 FILE_MODE_WRITE
00063 };
00064
00065 static void printf(const char* str, ...);
00066 static void wprintf(const wchar_t* str, ...);
00067 static void sprintf(char* buf, u32 buf_size, const char* str, ...);
00068 static void swprintf(wchar_t* buf, u32 buf_size, const wchar_t* str, ...);
00069
00070 static void* openFile(const char* filename, FileMode file_mode);
00071 static u32 getFileSize(void* file_handler);
00072 static void readFile(void* buf, u32 offset, u32 size, void* file_handler);
00073 static void writeFile(u32 offset, const void* buf, u32 size, void* file_handler);
00074 static void closeFile(void* file_handler);
00075
00076 static u64 getUsecTime();
00077 static void sleepUsec(u64 usec);
00078
00079 static void* newThread(void (*start_func)(void*), void* user_param);
00080 static void deleteThread(void* thread_handler);
00081 static void joinThread(void* thread_handler);
00082 static void* newMutex();
00083 static void deleteMutex(void* mutex_handler);
00084 static void lockMutex(void* mutex_handler);
00085 static void unlockMutex(void* mutex_handler);
00086
00087 static bool isCreated();
00088 static void createAfterMem(const char* title, u16 width, u16 height, u16 sys_flag);
00089 static void destroyBeforeMem();
00090
00091 static u16 getFramebufferWidth();
00092 static u16 getFramebufferHeight();
00093 static bool isFramebufferSizeChanged();
00094
00095 static bool isFullScreen();
00096 static void toggleFullScreen(u16 width, u16 height);
00097
00098 static void updateForSystem();
00099
00100 static void readLittleEndianForSystem(void* dest, const void* src, u32 size);
00101 template<class T> static T readLittleEndianForSystem(const void* data)
00102 {
00103 T value;
00104
00105 readLittleEndianForSystem(&value, data, sizeof(T));
00106
00107 return value;
00108 }
00109
00110 static void writeLittleEndianForSystem(void* dest, const void* src, u32 size);
00111 template<class T> static void writeLittleEndianForSystem(void* dest, const T& value)
00112 {
00113 writeLittleEndianForSystem(dest, &value, sizeof(T));
00114 }
00115
00116 static void setInitialDirectoryForSystem(s32 argc, char** argv);
00117
00118 private:
00119 pgSysMgr(const char* title, u16 width, u16 height, u16 sys_flag);
00120 ~pgSysMgr();
00121 void operator=(const pgSysMgr&);
00122
00123 static pgSysMgr* instance();
00124
00125 static pgSysMgr* m_instance;
00126 };