📄 genmem.c
字号:
/* * Copyright (c) 2000, 2001 Greg Haerr <greg@censoft.com> * * Screen Driver Utilities * * Microwindows memory device routines */#include <assert.h>#include <stdio.h>#include <stdlib.h>#include "device.h"#include "fb.h"#include "genmem.h"/* allocate a memory screen device*/PSD gen_allocatememgc(PSD psd){ PSD mempsd; /* if driver doesn't have blit, fail*/ if((psd->flags & PSF_HAVEBLIT) == 0) return NULL; mempsd = malloc(sizeof(SCREENDEVICE)); if (!mempsd) return NULL; /* copy passed device get initial values*/ *mempsd = *psd; /* initialize*/ mempsd->flags |= PSF_MEMORY; mempsd->flags &= ~PSF_SCREEN; mempsd->addr = NULL; return mempsd;}/* initialize memory device with passed parms*/voidinitmemgc(PSD mempsd,MWCOORD w,MWCOORD h,int planes,int bpp,int linelen, int size,void *addr){ assert(mempsd->flags & PSF_MEMORY); /* create mem psd w/h aligned with hw screen w/h*/ if (mempsd->portrait & (MWPORTRAIT_LEFT|MWPORTRAIT_RIGHT)) { mempsd->yres = w; mempsd->xres = h; } else { mempsd->xres = w; mempsd->yres = h; } mempsd->xvirtres = w; mempsd->yvirtres = h; mempsd->planes = planes; mempsd->bpp = bpp; mempsd->linelen = linelen; mempsd->size = size; mempsd->addr = addr;}voidgen_freememgc(PSD mempsd){ assert(mempsd->flags & PSF_MEMORY); /* note: mempsd->addr must be freed elsewhere*/ free(mempsd);}voidgen_fillrect(PSD psd,MWCOORD x1, MWCOORD y1, MWCOORD x2, MWCOORD y2, MWPIXELVAL c){ while(y1 <= y2) psd->DrawHorzLine(psd, x1, x2, y1++, c);}/* * Set subdriver entry points in screen device * Initialize subdriver if init flag is TRUE * Return 0 on fail */MWBOOLset_subdriver(PSD psd, PSUBDRIVER subdriver, MWBOOL init){ /* set subdriver entry points in screen driver*/ psd->DrawPixel = subdriver->DrawPixel; psd->ReadPixel = subdriver->ReadPixel; psd->DrawHorzLine = subdriver->DrawHorzLine; psd->DrawVertLine = subdriver->DrawVertLine; psd->FillRect = subdriver->FillRect; psd->Blit = subdriver->Blit; psd->DrawArea = subdriver->DrawArea; psd->StretchBlit = subdriver->StretchBlit; /* 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*/voidget_subdriver(PSD psd, PSUBDRIVER subdriver){ /* set subdriver entry points in screen driver*/ subdriver->DrawPixel = psd->DrawPixel; subdriver->ReadPixel = psd->ReadPixel; subdriver->DrawHorzLine = psd->DrawHorzLine; subdriver->DrawVertLine = psd->DrawVertLine; subdriver->FillRect = psd->FillRect; subdriver->Blit = psd->Blit; subdriver->DrawArea = psd->DrawArea; subdriver->StretchBlit = psd->StretchBlit;}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -