📄 fb.c
字号:
/* * Copyright (c) 2000 Greg Haerr <greg@censoft.com> * Screen Driver Utilities * Microwindows framebuffer selection routines * Including this file will drag in all fblinX framebuffer subdrivers * When a new framebuffer subdriver is written, it should be referenced * here in select_fb_driver. * * 2000/10/20 Modified by Song Lixin to be used under MiniGUI. */#include <assert.h>#include <stdio.h>#include <stdlib.h>#include "native.h"#include "../../ial/native/native.h"#include "fb.h"#ifndef __ECOS# include <syslog.h>#endif/* select a framebuffer subdriver based on planes and bpp*//* modify this procedure to add a new framebuffer subdriver*/extern SUBDRIVER fblinear1;extern SUBDRIVER fblinear2;extern SUBDRIVER fblinear4;extern SUBDRIVER fblinear8;extern SUBDRIVER fblinear16;extern SUBDRIVER fblinear24;extern SUBDRIVER fblinear32;#ifndef __ECOSextern SUBDRIVER fbvga16;#endifPSUBDRIVER select_fb_subdriver(PSD psd){ PSUBDRIVER driver = NULL; /* FB_TYPE_VGA_PLANES*/ /* device and memory drivers are not same for vga16*/ if(psd->planes == 4 && psd->bpp == 4) {#ifndef __ECOS driver = &fbvga16;#endif } /* FB_TYPE_PACKED_PIXELS*/ /* device and memory drivers are the same for packed pixels*/ else if(psd->planes == 1) { switch(psd->bpp) { case 1: // driver = &fblinear1; break; case 2:// driver = &fblinear2; break; case 4:// driver = &fblinear4; break; case 8: driver = &fblinear8; break; case 16:// driver = &fblinear16; break; case 24:// driver = &fblinear24; break; case 32:// driver = &fblinear32; break; } } /* return driver selected*/ return driver;}/* * Initialize memory device with passed parms, * select suitable framebuffer subdriver, * and set subdriver in memory device. */int fb_mapmemgc(PSD mempsd,int w,int h,int planes,int bpp, int linelen,int size,void *addr){ PSUBDRIVER subdriver; /* initialize mem screen driver*/ assert ( w > 0 ); assert ( h > 0 ); assert ( planes > 0 ); assert ( linelen > 0 ); assert ( size > 0 ); assert ( addr ); native_gen_initmemgc(mempsd, w, h, planes, bpp, linelen, size, addr); /* select a framebuffer subdriver based on planes and bpp*/ subdriver = select_fb_subdriver(mempsd); if(!subdriver) return 0; /* set and initialize subdriver into mem screen driver*/ if(!set_subdriver(mempsd, subdriver, TRUE)) return 0; return 1;}/* * Set subdriver entry points in screen device * Initialize subdriver if init flag is TRUE * Return 0 on fail */int set_subdriver(PSD psd, PSUBDRIVER subdriver, int init){ /* set subdriver entry points in screen driver*/ psd->DrawPixel = subdriver->DrawPixel; psd->ReadPixel = subdriver->ReadPixel; psd->DrawHLine = subdriver->DrawHLine; psd->PutHLine = subdriver->PutHLine; psd->GetHLine = subdriver->GetHLine; psd->DrawVLine = subdriver->DrawVLine; psd->PutVLine = subdriver->PutVLine; psd->GetVLine = subdriver->GetVLine; psd->Blit = subdriver->Blit; psd->PutBox = subdriver->PutBox; psd->GetBox = subdriver->GetBox; psd->PutBoxMask = subdriver->PutBoxMask; psd->CopyBox = subdriver->CopyBox; /* call driver init procedure to calc map size and linelen*/ if (init && !subdriver->Init(psd)) return 0; return 1;}/* fill in a subdriver struct from passed screen device*/void get_subdriver(PSD psd, PSUBDRIVER subdriver){ /* set subdriver entry points in screen driver*/ subdriver->DrawPixel = psd->DrawPixel; subdriver->ReadPixel = psd->ReadPixel; subdriver->DrawHLine = psd->DrawHLine; subdriver->PutHLine = psd->PutHLine; subdriver->GetHLine = psd->GetHLine; subdriver->DrawVLine = psd->DrawVLine; subdriver->PutVLine = psd->PutVLine; subdriver->GetVLine = psd->GetVLine; subdriver->Blit = psd->Blit; subdriver->PutBox = psd->PutBox; subdriver->GetBox = psd->GetBox; subdriver->PutBoxMask = psd->PutBoxMask; subdriver->CopyBox = psd->CopyBox;}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -