static int _qdgdfv_startup(void) { vga_init(); _qdgdfv_scale = 1; /* only 320x200 supported by now */ _qdgdfv_screen_x_size = 320; _qdgdfv_screen_y_size = 200; vga_setmode(G320x200x256); _qdgdfv_set_palette(); keyboard_init(); keyboard_translatekeys(TRANSLATE_CURSORKEYS); _qdgdfv_virtual_screen = (unsigned char *) qdgdfv_malloc(_qdgdfv_screen_x_size * _qdgdfv_screen_y_size); qdgdfv_clear_virtual_screen(); /* svgalib runs always fullscreen */ _qdgdfv_full_screen = 1; qdgdfv_logger("qdgdfv_startup", "SVGALIB driver startup"); return 1; }
void MapStartup(void) /* inicializa el laberinto */ { size_t map_size; map_size = MAP_SIZE * sizeof(struct map_block *); if (m_block == NULL) m_block = (struct map_block **) qdgdfv_malloc(map_size); else { int n, i; struct map_block *m; struct map_face *f; for (n = 0; n < MAP_SIZE; n++) { if ((m = m_block[n]) == NULL) continue; for (i = 0; i < 4; i++) { if ((f = m->faces[i]) != NULL) { if (f->object != NULL) free(f->object); free(f); } } } objects = NULL; } memset(m_block, '\0', map_size); }
struct map_face *AllocMapFace(void) { struct map_face *f; f = qdgdfv_malloc(sizeof(struct map_face)); memset(f, '\0', sizeof(struct map_face)); return (f); }
struct map_block *AllocMapBlock(void) { struct map_block *m; m = qdgdfv_malloc(sizeof(struct map_block)); memset(m, '\0', sizeof(struct map_block)); return (m); }
sp_object *AllocObject(struct map_face * face) { sp_object *o; o = qdgdfv_malloc(sizeof(sp_object)); memset(o, '\0', sizeof(sp_object)); /* asocia ambos */ o->face = face; face->object = o; /* coge el dim */ o->idim = face->idim; /* actualiza la cadena */ o->next = objects; objects = o; return (o); }
/** * qdgdfv_set_accum_buffer - Sets or resets the accumulation buffer. * @percent: percentage of buffer lasting * * If @percent is set to a non zero value (the default), the contents * of the previous frame is blended with the actual one with the * specified percent. * [Video Functions] */ void qdgdfv_set_accum_buffer(int percent) { int x, y; if (_qdgdfv_accum_buffer) free(_qdgdfv_accum_buffer); if (percent == 0) _qdgdfv_accum_buffer = NULL; else { /* alloc a buffer */ _qdgdfv_accum_buffer = qdgdfv_malloc(_qdgdfv_screen_x_size * _qdgdfv_screen_y_size); /* build the table */ for (y = 0; y < 256; y++) for (x = 0; x < 256; x++) _qdgdfv_accum_table[x][y] = qdgdfv_blend_color(y, x, percent); } }
int Menu(void) { int up, down; int menu_opt = 0; if (_menu_mask == NULL) _menu_mask = qdgdfv_malloc(SCREEN_X_SIZE * SCREEN_Y_SIZE); _text_mask_x = -1; up = down = 0; qdgdfv_clear_virtual_screen(); qdgdfv_load_pcx((unsigned char *) _menu_mask, "graph/menu.pcx", SCREEN_X_SIZE * SCREEN_Y_SIZE); SwapScreens(1); LoadScreen("wmenu"); SwapScreens(0); qdgdfv_load_pcx((unsigned char *) cursor, "graph/cursor.pcx", CURSOR_SIZE); for (;;) { DrawWaterVirtualScreen(); DrawMenu(menu_opt); qdgdfv_dump_virtual_screen(); qdgdfv_input_poll(); if (_qdgdfv_key_up) { down = 0; if (up == 0) { up = 1; menu_opt--; if (menu_opt == -1) menu_opt = 4; } } else up = 0; if (_qdgdfv_key_down) { up = 0; if (down == 0) { down = 1; menu_opt++; if (menu_opt == 5) menu_opt = 0; } } else down = 0; if (_qdgdfv_key_escape) { menu_opt = -1; break; } if (_qdgdfv_key_enter) break; } /* wait until no key is pressed */ while (_qdgdfv_key_escape || _qdgdfv_key_enter || _qdgdfv_key_up || _qdgdfv_key_down) qdgdfv_input_poll(); return (menu_opt); }