⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 nvram_pi.h

📁 NEO SDK是一个跨平台的免费开源图形软件开发包。它支持基本绘图、多种格式图形显示、鼠标操 作、扩展内存和扩充内存的操作、时钟、音频播放、多种字体的汉字及英文显示等等特性;更激动人心的是
💻 H
字号:
/*http://neo.coderlife.net*/
 /*ckerhome@yahoo.com.cn*/
 /* Plug-Ins of NEO SDK */
 /*显存直接读写插件 V0.1*/
 /* 创建日期:07/02/2005 */

#ifndef  VRAM_PI_H
#define  VRAM_PI_H

#define _VM_FIR_PAGE 0

void bm_vm_copy(void *bm_handle, unsigned long vm_off, unsigned length, char mode)
{
   unsigned offset = vm_off % 0xffff;
   unsigned page_bef = length, page_aft = 0, i;
   int  page_1 = (int)(vm_off >> 16);
   int  page_2   = (int)((vm_off + length) >> 16);
   int  page_bak = g_cur_vbe_page;
   char far *vpoint = g_videoptr + offset;
   int  far *_vpoint = (int far *)vpoint;
   int  far *_bm_handle = (int far *)bm_handle;

   if (page_1 != page_2)
   {
      page_aft = (vm_off + (long)length) % 0xffff;
      page_bef = length - page_aft;
   }
   set_vbe_page(page_1 + _VM_FIR_PAGE);

   if (mode != 0) /*显存到基本内存*/
   {  /*改变主从关系*/
      _vpoint = (int far *)bm_handle;
      _bm_handle = (int far *)vpoint;
   }

   for (i = 0; i < page_bef; i += 2)
   {
      *_vpoint++ = *_bm_handle++;
   }
   if (page_2 != page_1)
   {
      set_vbe_page(page_2 + _VM_FIR_PAGE);
      if (mode != 0) /*显存到基本内存*/
         _bm_handle = (int far *)g_videoptr;
      else
         _vpoint = (int far *)g_videoptr;
      for (i = page_bef; i < page_bef + page_aft; i += 2)
      {
         *_vpoint++ = *_bm_handle++;
      }
   }
   set_vbe_page(page_bak);
}


char set_scanline(BITMAP *bm, void *buf, int n_line)
{
   unsigned long offset;
   if (bm->flag == 0) return FALSE;

   if (bm->flag == 3)
   {
      if (n_line >= 0 && n_line < bm->height)
      {
         bm_vm_copy(buf, bm->vram_offset + (long)n_line * (long)(bm->width * (bm->bpp >> 3)), bm->width * (bm->bpp >> 3), 0);
      }
   }
   return TRUE;
}


char get_scanline(BITMAP *bm, void *buf, int n_line)
{

   if (bm->flag == 0) return FALSE;

   if (bm->flag == 3)
   {
      if (n_line >= 0 && n_line < bm->height)
      {
         bm_vm_copy(buf, bm->vram_offset + (long)n_line * (long)(bm->width * (bm->bpp >> 3)), bm->width * (bm->bpp >> 3), 1);
      }
   }
   return TRUE;
}


BITMAP *load_bmp(char *filename, PALETTE pal)
{
   BITMAPINFOHEADER bmpheader;
   unsigned bmp_wid;
   unsigned bmpheight;
   unsigned char wid_fix, bmpbits;

   if (read_win_bminfoheader(filename, &bmpheader) <= 0)
      return 0;
   /*bmp_wid = bmpheader.biWidth;
   bmpheight = bmpheader.biHeight;
   bmpbits = bmpheader.biBitCount;*/
}


BITMAP *create_bitmap(int width, int height)
{
   BITMAP *bm = malloc(sizeof(BITMAP));
   if (bm  == NULL)
   {
      #ifndef NEO_sys_report_error_unused
      Errinfo_t error = {"create_bitmap", NO_MEMORY, 0};
      throw_error(error);
      #endif
   }

   if (1)
   {
      bm->flag = 3;
      bm->width = width;
      bm->height= height;
      bm->vram_offset = _VM_FIR_PAGE << 16;
      bm->bpp = g_color_depth;
   }

   return bm;
}

#endif

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -