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

📄 fb_output_section.c

📁 操作系统SunOS 4.1.3版本的源码
💻 C
字号:
#ifndef lintstatic  char sccsid[] = "@(#)fb_output_section.c 1.1 92/07/30 Copyr 1990 Sun Micro";#endif/* * Copyright (c) 1990 by Sun Microsystems, Inc. */#include <stdio.h>#include <sdrtns.h>     /* sdrtns.h should always be included */#include <gttest.h>#include <errmsg.h>#include <pixrect/pixrect_hs.h>#include <pixrect/gtvar.h>#define MAX_REGIONS	8#define R_WIDTH		1280/MAX_REGIONS#define R_HEIGHT	100staticlong rand_state[32]  =  {		   3,  0x9a319039,  0x8999220b,       0x27fb47b9,	  0x32d9c024,  0x9b663182,  0x5da1f342,       0x7449e56b,          0xbeb1dbb0,  0xab5c5918,  0x946554fd,       0x8c2e680f,          0xeb3d799f,  0xb11ee0b7,  0x2d436b86,       0xda672e2a,          0x1588ca88,  0xe369735d,  0x904f35f7,       0xd7158fd6,          0x6fa6f051,  0x616e6b96,  0xac94efdc,       0xde3b81e0,          0xdf0a6fb5,  0xf103bc02,  0x48f340fb,       0x36413f93,          0xc622c298,  0xf5a42ab8,  0x8a88d77b,       0xf5ad9d0e, };/**********************************************************************/char *fb_output_section()/**********************************************************************/{    Pixrect *open_pr_device();    static int pg[MAX_REGIONS] = {  PIXPG_24BIT_COLOR,				    PIXPG_24BIT_COLOR,				    PIXPG_24BIT_COLOR,				    PIXPG_24BIT_COLOR,				    PIXPG_8BIT_COLOR,				    PIXPG_8BIT_COLOR,				    PIXPG_8BIT_COLOR,				    PIXPG_8BIT_COLOR,				  };    char *errmsg = (char *) 0;    Pixrect *pr = open_pr_device();	/* Whole screen pixrect */    Pixrect *prr[MAX_REGIONS];		/* Subregion for test */    Pixrect *mp = (Pixrect *)NULL;    int wid[MAX_REGIONS];    int clut[MAX_REGIONS];    unsigned char red[256];    unsigned char green[256];    unsigned char blue[256];    unsigned char *bptr;    unsigned int *iptr;    int i;    int j;    int op;    func_name = "fb_output_section";    TRACE_IN    /* initialize random state */    (void)initstate(0x1205, (char *)rand_state, 128);    (void)setstate((char *)rand_state);    /* preset cluts with random number */    for (i = 0 ;  i < 256 ; i++) {	red[i] = (unsigned char) random();	green[i] = (unsigned char) random();	blue[i] = (unsigned char) random();    }    /* set the 24 bit clut randomly */    (void)pr_set_planes(pr, PIXPG_24BIT_COLOR, PIX_ALL_PLANES);    (void)gt_putlut_blocked(pr,	    0|PR_FORCE_UPDATE|PR_DONT_DEGAMMA, 256, red, green, blue);    /* preset array to 0 pointers */    for (i = 0 ; i < MAX_REGIONS ; i++) {	prr[i] = (Pixrect *)NULL;    }    for (i = 0 ; i < MAX_REGIONS ; i++) {	prr[i] = pr_region(pr, i*R_WIDTH, 0, R_WIDTH, R_HEIGHT);	if (prr[i] == (Pixrect *)NULL) {	    errmsg = DLXERR_OPEN_REGIONS;	    goto returning;	}	/* allocate wid and clut for test region */	if (i < MAX_REGIONS/2) {	    wid[i] = wid_alloc(prr[i], FB_WID_DBL_24);	    clut[i] = 0;	} else {	    wid[i] = wid_alloc(prr[i], FB_WID_DBL_8);	    clut[i] = clut_alloc(prr[i]);	    (void)pr_set_planes(prr[i], PIXPG_8BIT_COLOR, PIX_ALL_PLANES);	    /* preset cluts with random number */	    for (j = 0 ;  j < 256 ; j++) {		red[j] = (unsigned char) random();		green[j] = (unsigned char) random();		blue[j] = (unsigned char) random();	    }	    (void)gt_putlut_blocked(prr[i], 0| PR_DONT_DEGAMMA,					    256, red, green, blue);	}	/* set plane groups */	(void)pr_set_planes(prr[i], pg[i], PIX_ALL_PLANES);	/* set buffer  (should be A, B, A, B, A, B, A, B on screen) */	if (i % 2) {	    (void)pr_dbl_set(prr[i], PR_DBL_DISPLAY_DONTBLOCK, PR_DBL_B,			    PR_DBL_WRITE, PR_DBL_B,			    0);	} else {	    (void)pr_dbl_set(prr[i], PR_DBL_DISPLAY_DONTBLOCK, PR_DBL_A,			    PR_DBL_WRITE, PR_DBL_A,			    0);	}	/* allocate mempixrect */	mp = mem_create(R_WIDTH, R_HEIGHT, prr[i]->pr_depth);	if (mp == (Pixrect *)NULL) {	    errmsg = DLXERR_OPEN_MEM_PIXRECT;	    goto returning;	}	/* preset mempixrect */	if (prr[i]->pr_depth == 8) {	    bptr = (unsigned char *)mpr_d(mp)->md_image;	    for (j = 0 ; j < R_WIDTH * R_HEIGHT ; j++) {		*bptr++ = (unsigned char)random();	    }	} else {	    iptr = (unsigned int *)mpr_d(mp)->md_image;	    for (j = 0 ; j < R_WIDTH * R_HEIGHT ; j++) {		*iptr++ = (unsigned int)random();	    }	}	/* pr_rop to FB */	(void)pr_rop (prr[i], 0, 0, R_WIDTH, R_HEIGHT,			    PIX_SRC | PIX_DONTCLIP, mp, 0, 0);	/* make buffer visible */	(void)pr_set_planes(prr[i], PIXPG_WID, PIX_ALL_PLANES);	op = PIX_SRC | PIX_COLOR(wid[i]);	(void)pr_rop (prr[i], 0, 0, R_WIDTH, R_HEIGHT, op,						(Pixrect *)NULL, 0, 0);		(void)pr_close(mp);    }    xtract_hdl(FB_OUTPUT_SECTION);    errmsg = exec_dl(getfname(FB_OUTPUT_SECTION, HDL_CHK));returning:    /* close all opened subregions */    for (i = 0 ; i < MAX_REGIONS ; i++) {	if (prr[i]) {	    (void)pr_clear(prr[i], PIX_SRC);	    /* free  wid and clut index */	    if (i < MAX_REGIONS/2) {		(void)wid_free(prr[i], wid[i], FB_WID_DBL_24);	    } else {		(void)wid_free(prr[i], wid[i], FB_WID_DBL_8);		(void)clut_free(prr[i], clut[i]);	    }	    /* close pixrect region */	    (void)pr_close(prr[i]);	}    }    /* restore 24 bit clut */    for (i = 0 ;  i < 256 ; i++) {	red[i] = green[i] = blue[i] = (unsigned char)i;    }    (void)pr_set_planes(pr, PIXPG_24BIT_COLOR, PIX_ALL_PLANES);    (void)gt_putlut_blocked(pr,	    0|PR_FORCE_UPDATE|PR_DONT_DEGAMMA, 256, red, green, blue);    /* close the pixrect  */    (void)close_pr_device();    TRACE_OUT    return errmsg;}

⌨️ 快捷键说明

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