static void saveMode(_THIS, SDL_PixelFormat *vformat) { SCREENINFO si; /* Read infos about current mode */ VsetScreen(-1, &XBIOS_oldvmode, VN_MAGIC, CMD_GETMODE); si.size = sizeof(SCREENINFO); si.devID = XBIOS_oldvmode; si.scrFlags = 0; VsetScreen(-1, &si, VN_MAGIC, CMD_GETINFO); this->info.current_w = si.scrWidth; this->info.current_h = si.scrHeight; vformat->BitsPerPixel = si.scrPlanes; XBIOS_oldnumcol = 0; if (si.scrFlags & SCRINFO_OK) { if (si.scrPlanes <= 8) { XBIOS_oldnumcol = 1<<si.scrPlanes; } } if (XBIOS_oldnumcol) { VgetRGB(0, XBIOS_oldnumcol, XBIOS_oldpalette); } }
static void restoreMode(_THIS) { VsetScreen(-1, &XBIOS_oldvbase, VN_MAGIC, CMD_SETADR); VsetScreen(-1, &XBIOS_oldvmode, VN_MAGIC, CMD_SETMODE); if (XBIOS_oldnumcol) { VsetRGB(0, XBIOS_oldnumcol, XBIOS_oldpalette); } }
static void setMode(_THIS, xbiosmode_t *new_video_mode) { VsetScreen(-1, XBIOS_screens[0], VN_MAGIC, CMD_SETADR); VsetScreen(-1, new_video_mode->number, VN_MAGIC, CMD_SETMODE); /* Set hardware palette to black in True Colour */ if (new_video_mode->depth > 8) { SDL_memset(F30_palette, 0, sizeof(F30_palette)); VsetRGB(0,256,F30_palette); } }
static void listModes(_THIS, int actually_add) { #ifdef CTPCI_USE_TABLE int i; /* Read validated predefined modes */ for (i=0; i<sizeof(mode_list)/sizeof(predefined_mode_t); i++) { int j; Uint16 deviceid = mode_list[i].modecode; for (j=3; j<5; j++) { if (Validmode(deviceid + j)) { xbiosmode_t modeinfo; modeinfo.number = deviceid + j; modeinfo.width = mode_list[i].width; modeinfo.height = mode_list[i].height; modeinfo.depth = mode_bpp[j-3]; modeinfo.flags = 0; SDL_XBIOS_AddMode(this, actually_add, &modeinfo); } } } #else /* Read custom created modes */ enum_this = this; enum_actually_add = actually_add; VsetScreen(-1, &enumfunc, VN_MAGIC, CMD_ENUMMODES); #endif }
void exit_global(void) { #ifdef MINT_TARGET /* Destroy semaphore used by Shel_do_write */ Psemaphore(SEM_LOCK, SHEL_WRITE_LOCK, -1); Psemaphore(SEM_DESTROY, SHEL_WRITE_LOCK, 0); #endif #if 0 /* FIXME def MINT_TARGET */ if(open_physical_ws) { if(global_common.video == 0x00030000L) { VsetScreen(NULL, NULL, oldmode, oldmodecode); } else { VsetScreen((void *)-1, (void *)-1, oldmode, oldmodecode); }; v_clsvwk(global_common.vid); own_appl_exit(); }; #endif }
static int getLineWidth(_THIS, xbiosmode_t *new_video_mode, int width, int bpp) { SCREENINFO si; int retvalue = width * (((bpp==15) ? 16 : bpp)>>3); /* Set pitch of new mode */ si.size = sizeof(SCREENINFO); si.devID = new_video_mode->number; si.scrFlags = 0; VsetScreen(-1, &si, VN_MAGIC, CMD_GETINFO); if (si.scrFlags & SCRINFO_OK) { retvalue = si.lineWrap; } return (retvalue); }
static int allocVbuffers(_THIS, int num_buffers, int bufsize) { int i; for (i=0; i<num_buffers; i++) { if (i==0) { /* Buffer 0 is current screen */ XBIOS_screensmem[i] = XBIOS_oldvbase; } else { VsetScreen(-1, &XBIOS_screensmem[i], VN_MAGIC, CMD_ALLOCPAGE); } if (!XBIOS_screensmem[i]) { SDL_SetError("Can not allocate %d KB for buffer %d", bufsize>>10, i); return (0); } SDL_memset(XBIOS_screensmem[i], 0, bufsize); XBIOS_screens[i]=XBIOS_screensmem[i]; }
/* ** Description ** Initialize global variables, open vdi workstation etc */ void init_global (WORD physical_vdi_id) { #if 0 int temp_vid; int work_in[] = {1,1,1,1,1,1,1,1,1,1,2}; #endif int work_out[57]; int dum; static int is_inited = FALSE; /* Only initialize globals if they haven't been initialized before */ if(!is_inited) { is_inited = TRUE; DEBUG3 ("Entering init_global"); #if 0 /* FIXME def MINT_TARGET */ /* Only mess with videomodes if running under MiNT */ if(globals.video == 0x00030000L) { fprintf(stderr,"VsetMode\r\n"); oldmode = globals.vmode = 3; oldmodecode = globals.vmodecode = VsetMode(-1); fprintf(stderr,"/VsetMode\r\n"); } else { oldmode = globals.vmode = Getrez(); }; #endif /* MINT_TARGET */ global_common.mouse_owner = -1; global_common.realmove = 0; global_common.realsize = 0; global_common.realslide = 0; global_common.fnt_regul_id = -1; global_common.fnt_regul_sz = -1; global_common.icon_width = 48; global_common.icon_height = 56; global_common.wind_appl = 1; global_common.graf_mbox = 1; global_common.graf_growbox = 1; global_common.graf_shrinkbox = 1; global_common.fsel_sorted = 1; global_common.fsel_extern = 0; DEBUG3 ("init_global: 2"); #if 0 /* FIXME : Remove? def MINT_TARGET */ fprintf(stderr,"appl_init()\r\n"); own_appl_init(); fprintf(stderr,"/appl_init()\r\n"); if(open_physical_ws) { printf("No other AES found. Opening own Workstation.\r\n"); work_in[0] = 5; v_opnwk(work_in,&global_common.vid,work_out); if(global_common.video == 0x00030000L) { VsetScreen(NULL, NULL, global_common.vmode, global_common.vmodecode); } else { VsetScreen((void*)-1, (void *)-1, global_common.vmode, global_common.vmodecode); } } else { printf("Other AES detected.\r\n"); global_common.vid = own_graf_handle(); v_clrwk(global_common.vid); } #endif global_common.physical_vdi_id = physical_vdi_id; DEBUG2 ("lib_global.c: init_global: calling vq_extnd"); vq_extnd (physical_vdi_id, 0, work_out); global_common.screen.x = 0; global_common.screen.y = 0; global_common.screen.width = work_out[0] + 1; global_common.screen.height = work_out[1] + 1; global_common.num_pens = work_out[13]; vq_extnd (physical_vdi_id, 1, work_out); global_common.num_planes = work_out[4]; /* setup systemfont information */ if(global_common.screen.height >= 400) { global_common.fnt_regul_id = 1; global_common.fnt_regul_sz = 13; } else { global_common.fnt_regul_id = 1; global_common.fnt_regul_sz = 9; } global_common.fnt_small_id = global_common.fnt_regul_id; global_common.fnt_small_sz = global_common.fnt_regul_sz / 2; vst_font (physical_vdi_id, global_common.fnt_regul_id); vst_point (physical_vdi_id, global_common.fnt_regul_sz, &dum, &dum, &dum, &dum); global_common.arrowrepeat = 100; DEBUG2 ("lib_global.c: init_global: calling vqt_attributes"); vqt_attributes (physical_vdi_id, work_out); global_common.blwidth = work_out[8] + 3; global_common.blheight = work_out[9] + 3; global_common.clwidth = work_out[8]; global_common.clheight = work_out[9]; global_common.bswidth = work_out[8] / 2 + 3; global_common.bsheight = work_out[9] / 2 + 3; global_common.cswidth = work_out[8] / 2; global_common.csheight = work_out[9] / 2; global_common.time = 0L; #ifndef MINT_TARGET global_common.callback_handler = oaesis_callback; #endif DEBUG2("lib_global.c: init_global: Calling Rsrc_do_rcfix"); Rsrc_do_rcfix (physical_vdi_id, (RSHDR *)resource, FALSE , TRUE ); DEBUG2("lib_global.c: init_global: Called Rsrc_do_rcfix"); Rsrc_do_gaddr((RSHDR *)resource, R_TREE, AICONS, &global_common.aiconstad, TRUE); DEBUG3("init_global: 10"); Rsrc_do_gaddr((RSHDR *)resource, R_TREE, ALERT, &global_common.alerttad, TRUE); Rsrc_do_gaddr((RSHDR *)resource, R_TREE, FISEL, &global_common.fiseltad, TRUE); Rsrc_do_gaddr((RSHDR *)resource, R_TREE, PMENU, &global_common.pmenutad, TRUE); Rsrc_do_gaddr((RSHDR *)resource, R_FRSTR, 0, (OBJECT **)&global_common.fr_string, TRUE); /* Initialize window elements and resource counters */ Rsrc_do_gaddr((RSHDR *)resource, R_TREE, WINDOW, &global_common.windowtad, TRUE); global_common.elemnumber = -1; DEBUG3("init_global: 11"); /* Init mouseforms */ Rsrc_do_rcfix (physical_vdi_id, (RSHDR *)cursors, FALSE , TRUE ); DEBUG3("init_global: 12"); Rsrc_do_gaddr((RSHDR *)cursors, R_TREE, MOUSEFORMS, &global_common.mouseformstad, TRUE); DEBUG3("init_global: 13"); Graf_init_mouseforms(); DEBUG3("init_global: 14"); #ifdef MINT_TARGET /* Initialize semaphore used by Shel_do_write */ Psemaphore(SEM_CREATE, SHEL_WRITE_LOCK, 0); Psemaphore(SEM_UNLOCK, SHEL_WRITE_LOCK, 0); #endif } }