// 最終行を1行またはNULを含む最大textMax(>0)バイト(収まらない場合行頭側をカット)読み込む // 改行文字は取り除く // ファイルポインタは先頭に戻る // 戻り値はNULを含む読み込まれたバイト数 int CTextFileReader::ReadLastLine(char *text, int textMax) { if (!IsOpen()) { return 0; } // 2GB以上には対応しない DWORD fileSize = GetFileSize(hFile_, NULL); if (fileSize > 0x7FFFFFFF || SetFilePointer(hFile_, -min(textMax - 1, static_cast<int>(fileSize)), NULL, FILE_END) == INVALID_SET_FILE_POINTER) { return 0; } DWORD read; if (!ReadFile(hFile_, text, textMax - 1, &read, NULL)) { ResetPointer(); return 0; } text[read] = '\0'; int textLen = lstrlenA(text); if (textLen >= 1 && text[textLen-1] == '\n') { text[--textLen] = '\0'; } if (textLen >= 1 && text[textLen-1] == '\r') { text[--textLen] = '\0'; } char *p = StrRChrA(text, text + textLen, '\n'); if (p) { ++p; memmove(text, p, textLen - static_cast<int>(p - text) + 1); textLen -= static_cast<int>(p - text); } ResetPointer(); return textLen + 1; }
eiMemoryFile::eiMemoryFile(void) : eiFile() { ResetPointer(); MemorySize = 0; hMemory = 0; pMemory = NULL; }
void App::MotionFunc(int x, int y) { yaw += (mousex - x) * mousesensivity * 0.0005; pitch += (y - mousey) * mousesensivity * 0.0005; if (fabs(width / 2 - x) > 25 || fabs(height / 2 - y) > 25) { ResetPointer(); } }
App::App(int* argc, char** argv) : width(800), height(800), bullet(shadow), lightpos({ 0, -200, 0, 1} ),lightpos2({ 0, 50, 0, 1 }){ glutInit(argc, argv); glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB | GLUT_DEPTH); glutInitWindowSize(width, height); glutInitWindowPosition(0, 0); glutCreateWindow("Program OpenGL"); glutDisplayFunc(DisplayFrameCallback); glutIdleFunc(NextFrameCallback); glewInit(); glutKeyboardFunc(KeyDownCallback); glutKeyboardUpFunc(KeyUpCallback); glutSpecialFunc(KeySpecialDownCallback); glutSpecialUpFunc(KeySpecialUpCallback); glutMouseFunc(MouseFuncCallback); ResetPointer(); glutSetCursor(GLUT_CURSOR_NONE); glutPassiveMotionFunc(MotionFuncCallback); GLfloat ambient[] = { 0.2f, 0.2f, 0.2f, 1.0f }; GLfloat diffuse[] = { 1.0f, 1.0f, 1.0f, 1.0f }; GLfloat specular[] = { 1.0f, 1.0f, 1.0f, 1.0f }; glMaterialfv(GL_LIGHT0, GL_AMBIENT, ambient); glMaterialfv(GL_LIGHT0, GL_DIFFUSE, diffuse); glMaterialfv(GL_LIGHT0, GL_SPECULAR, specular); glMateriali(GL_FRONT, GL_SHININESS, 50); glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); glEnable(GL_BLEND); glEnable(GL_NORMALIZE); glEnable(GL_LIGHTING); glEnable(GL_LIGHT0); glEnable(GL_LIGHT1); glShadeModel(GL_SMOOTH); glEnable(GL_TEXTURE_2D); glEnable(GL_DEPTH_TEST); glEnable(GL_COLOR_MATERIAL); bullet.AddLevel(); LoadTexture(0, "bricks.bmp"); LoadTexture(1, "ntex.bmp"); }
int eiMemoryFile::Open(eistr *lpFileName,int mode /*= EI_FILE_READ | EI_FILE_BINARY*/) { ResetPointer(); return 1; }
// Message определяет пришедшее сообщение. VOID Clipper_ClipperMessageProcessing( PQMSG Message ) { // Устанавливаем приоритет потока. if( Message->msg == SM_PRIORITY ) { // Устанавливаем приоритет. LONG Class = (LONG) Message->mp1; LONG Delta = (LONG) Message->mp2; DosSetPriority( PRTYS_THREAD, Class, Delta, 0 ); // Запоминаем приоритет. Enhancer.Modules.Clipper->Priority = MAKELONG( Class, Delta ); } // Включаем выделение в текстовом окне. if( Message->msg == SM_BEGIN_VIO_MARKING || Message->msg == SM_END_VIO_MARKING ) { // Узнаем окно рамки. HWND Frame_window = (HWND) Message->mp1; // Если окна нет - возврат. if( !WinIsWindow( WinQueryAnchorBlock( Frame_window ), Frame_window ) ) return; // Включаем и выключаем выделение. if( Message->msg == SM_BEGIN_VIO_MARKING ) Clipper_BeginVIOMarking( Frame_window ); if( Message->msg == SM_END_VIO_MARKING ) Clipper_EndVIOMarkingAndCopyText( Frame_window ); } // Запоминаем выделенный текст. if( Message->msg == SM_COPY_VIO_TEXT ) { // Если в текстовых окнах не надо запоминать текст - возврат. if( !Clipper.Settings.Mouse_in_VIO ) return; // Узнаем окно рамки. HWND Frame_window = (HWND) Message->mp1; // Если окна нет - возврат. if( !WinIsWindow( WinQueryAnchorBlock( Frame_window ), Frame_window ) ) return; // Если выделение текста еще не начато - начинаем его. if( !Clipper_VIOMarkingIsInProcess( Frame_window ) ) Clipper_BeginVIOMarking( Frame_window ); // Иначе - завершаем выделение и запоминаем текст. else Clipper_EndVIOMarkingAndCopyText( Frame_window ); } // Вставляем текст в окно. if( Message->msg == SM_PASTE_VIO_TEXT ) { // Если в текстовых окнах не надо запоминать текст - возврат. if( !Clipper.Settings.Mouse_in_VIO ) return; // Узнаем окно рамки. HWND Frame_window = (HWND) Message->mp1; // Если окна нет - возврат. if( !WinIsWindow( WinQueryAnchorBlock( Frame_window ), Frame_window ) ) return; // Если в окне не идет выделение текста - вставляем текст. if( !Clipper_VIOMarkingIsInProcess( Frame_window ) ) Clipper_PasteTextToVIOWindow( Frame_window ); } // Запоминаем текст при нажатии средней кнопки мыши. if( Message->msg == SM_MB_CLICK ) { // Узнаем окно, с которым работает пользователь. HWND Input_window = (HWND) Message->mp1; // Если окна нет - возврат. if( !WinIsWindow( WinQueryAnchorBlock( Input_window ), Input_window ) ) return; // Узнаем окно рабочего стола. HWND Desktop = QueryDesktopWindow(); // Узнаем время, достаточное для двойного нажатия на кнопку мыши. LONG DblClk_delta = WinQuerySysValue( Desktop, SV_DBLCLKTIME ); // Выполняем задержку, чтобы избежать двойного нажатия. while( 1 ) { // Если время последнего нажатия на среднюю кнопку мыши неизвестно - произошло двойное нажатие, возврат. // В это время в очереди потока уже лежит следующее сообщение - SM_MB_DOUBLECLICK. if( WMMBDownTime() == 0 ) { // Освобождаем указатель мыши. ResetPointer(); // Возврат. return; } // Узнаем текущее время. LONG Current_time = WinGetCurrentTime( Enhancer.Application ); // Если прошло достаточно много времени - все в порядке. if( Current_time > WMMBDownTime() ) if( Current_time - WMMBDownTime() > DblClk_delta ) break; // Если время прошло через ноль - возврат. if( Current_time < WMMBDownTime() ) { // Освобождаем указатель мыши. ResetPointer(); // Возврат. return; } // Через некоторое время - устанавливаем указатель мыши "прозрачная стрелка". if( Current_time - WMMBDownTime() > ( DblClk_delta / 2 ) ) if( Resources.Pointer_for_CopyPaste != NULLHANDLE ) WinSetPointer( QueryDesktopWindow(), Resources.Pointer_for_CopyPaste ); // Выполняем задержку. Retard(); } // Освобождаем указатель мыши. ResetPointer(); // Время последнего нажатия на среднюю кнопку мыши - неизвестно. DiscardWMMBDownTime(); // Узнаем ускоритель для этого окна. LONG Accelerator = (LONG) Message->mp2; // Запоминаем текст в окне. ClipboardMouseAction( Input_window, MOUSE_CLIPBOARD_COPY, Accelerator ); } // Вставляем текст в окно при нажатии средней кнопки мыши. if( Message->msg == SM_MB_DOUBLECLICK ) { // Узнаем окно, с которым работает пользователь. HWND Input_window = (HWND) Message->mp1; // Если окна нет - возврат. if( !WinIsWindow( WinQueryAnchorBlock( Input_window ), Input_window ) ) return; // Если кнопка мыши снова была нажата - возврат. if( WMMBDownTime() ) return; // Узнаем ускоритель для этого окна. LONG Accelerator = (LONG) Message->mp2; // Вставляем текст в окно. ClipboardMouseAction( Input_window, MOUSE_CLIPBOARD_PASTE, Accelerator ); } // Вставляем текст в окно Mozilla при нажатии FireFox-клавиши. if( Message->msg >= SM_FFX_PASTE_FIRST && Message->msg <= SM_FFX_PASTE_LAST ) { // Узнаем окно, с которым работает пользователь. HWND Input_window = (HWND) Message->mp1; // Если окна нет - возврат. if( !WinIsWindow( WinQueryAnchorBlock( Input_window ), Input_window ) ) return; // Вставляем текст в окно. Clipper_PasteFireFoxCharacters( Input_window, Message->msg ); } // Восстанавливаем содержимое Clipboard. if( Message->msg == SM_RESTORE_CLIPBOARD ) Clipper_RestoreClipboard(); // Возврат. return; }