예제 #1
0
// 最終行を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;
}
예제 #2
0
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");
}
예제 #5
0
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;
}