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

📄 g2_device.c

📁 ViennaRNA-1.6.1
💻 C
字号:
/*******************************************************************************  Copyright (C) 1998-2001  Ljubomir Milanovic & Horst Wagner**  This file is part of the g2 library****  This library is free software; you can redistribute it and/or**  modify it under the terms of the GNU Lesser General Public**  License as published by the Free Software Foundation; either**  version 2.1 of the License, or (at your option) any later version.****  This library is distributed in the hope that it will be useful,**  but WITHOUT ANY WARRANTY; without even the implied warranty of**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU**  Lesser General Public License for more details.****  You should have received a copy of the GNU Lesser General Public**  License along with this library; if not, write to the Free Software**  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA******************************************************************************/#include <stdio.h>#include "g2.h"#include "g2_device.h"#include "g2_physical_device.h"#include "g2_virtual_device.h"#include "g2_util.h"int __g2_last_device=-1;			  /* last acces. device (ld) */static int       g2_dev_size=0;			  /* size of devices array */static g2_device *g2_dev=NULL;			  /* devices array */static int  g2_get_free_device();static void g2_init_device(int dix);/* * * Register physical device * */int g2_register_physical_device(int pid,				void *pdp,				g2_coor ct,				const g2_funix_fun *ff,				double a11, double a22,				double b1,  double b2){    int dix;    dix=g2_get_free_device();    g2_init_device(dix);    g2_dev[dix].t=g2_PD;    g2_dev[dix].d.pd=g2_create_physical_device(pid, pdp,					       ct, ff,					       a11, a22,					       b1,  b2);    __g2_last_device=dix;    return dix;}/* * * Register virtual device * */int g2_register_virtual_device(){    int dix;        dix=g2_get_free_device();    g2_init_device(dix);        g2_dev[dix].t=g2_VD;    g2_dev[dix].d.vd=g2_create_virtual_device();    return dix;}/* * * Init device *  */void g2_init_device(int dix){    g2_dev[dix].t=g2_ILLEGAL;    g2_dev[dix].dix=dix;        g2_dev[dix].x=0.0;				  /* set cursor */    g2_dev[dix].y=0.0;    g2_dev[dix].auto_flush=1;			  /* set auto flush */    g2_dev[dix].QPd=1.0;			  /* Quasi pixel spec. */    g2_dev[dix].QPshape=QPrect;}/* * * Return pointer to device dix * */g2_device *g2_get_device_pointer(int dix){    if(dix<0 || dix>=g2_dev_size)        return NULL;    if(g2_dev[dix].t==g2_NDEV)        return NULL;        return &g2_dev[dix];}/* * * Return device type * */g2_device_type g2_get_device_type(int dix){    if(dix<0 || dix>=g2_dev_size)	return g2_ILLEGAL;    return g2_dev[dix].t;}/* * * 1 if device exist otherwise 0 * */int g2_device_exist(int dix){    if(dix<0 || dix>=g2_dev_size ||       g2_dev[dix].t==g2_ILLEGAL || g2_dev[dix].t==g2_NDEV)        return 0;    return 1;}/* * * Destroy device * */void g2_destroy_device(int dix){    int i;        for(i=0;i<g2_dev_size;i++)			  /* detach from all vd */	if(g2_dev[i].t==g2_VD)	    g2_detach(i, dix);        switch(g2_dev[dix].t) {      case g2_NDEV:	break;      case g2_PD:	g2_destroy_physical_device(g2_dev[dix].d.pd);	g2_dev[dix].t=g2_NDEV;	break;      case g2_VD:	g2_destroy_virtual_device(g2_dev[dix].d.vd);	g2_dev[dix].t=g2_NDEV;	break;      case g2_ILLEGAL:	break;    }}/* * * get free place for new device * */int g2_get_free_device(){    int i, dix;    if(g2_dev==NULL) {				  /* if NULL initialize */	g2_dev_size=1;	g2_dev=g2_malloc(sizeof(g2_device));	g2_dev[0].t=g2_NDEV;			  /* set to free */	g2_dev[0].d.pd=NULL;			  /* no device yet */    }    dix=-1;    for(i=0;i<g2_dev_size;i++)			  /* find empty place */      if(g2_dev[i].t==g2_NDEV) {	  dix=i;	  break;      }    if(dix<0) {					  /* no place for device */	dix=g2_dev_size++;	g2_dev=g2_realloc(g2_dev, g2_dev_size*sizeof(g2_device));	g2_dev[dix].t=g2_NDEV;			  /* set to free */	g2_dev[dix].d.pd=NULL;			  /* no device yet */    }        return dix;}

⌨️ 快捷键说明

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