void print_str(ui_context * ctx,char * buf,int maxsize,int col,int line,int linefeed,int mode) { int i; #ifdef DEBUG dbg_printf("UIOut x:%d y:%d %s\n",col,line,buf); #endif #ifdef SDLHOST if(strlen(buf)>2) { printf("%s\n",buf); } #endif set_char_pos(ctx, col, line); i = 0; while(buf[i] && i < maxsize) { if(buf[i] == '\n' && linefeed) { line++; set_char_pos(ctx, 0, line); } else { print_char(ctx,buf[i],mode); } i++; } }
int media_read(uint32 sector, uint8 *buffer, uint32 sector_count) { int ret; uint32 i; direct_access_status_sector * dass; dass = (direct_access_status_sector *)buffer; #ifdef DEBUG dbg_printf("media_read sector : 0x%.8X, cnt : %d \n",sector,sector_count); #endif set_char_pos(&g_ui_ctx,g_ui_ctx.screen_txt_xsize - 1, 0); print_char(&g_ui_ctx, 10, INVERTED); for(i=0;i<sector_count;i++) { do { if((sector-last_setlbabase)>=8) { ret = setlbabase(sector); if( ret != ERR_NO_ERROR ) return 0; } ret = readsector(0,buffer,0); if( ret != ERR_NO_ERROR ) { hxc_printf_box(&g_ui_ctx,"ERROR: Read ERROR ! fsector %d [Err %d]",(sector-last_setlbabase)+1,ret); return 0; } last_setlbabase = L_INDIAN(dass->lba_base); }while((sector-L_INDIAN(dass->lba_base))>=8); ret = readsector((unsigned char)((sector-last_setlbabase)+1),&buffer[i*512],0); if( ret != ERR_NO_ERROR ) { hxc_printf_box(&g_ui_ctx,"ERROR: Read ERROR ! fsector %d [Err %d]",(sector-last_setlbabase)+1,ret); return 0; } sector++; #ifdef DEBUG print_hex_array(buffer,512); #endif } set_char_pos(&g_ui_ctx,g_ui_ctx.screen_txt_xsize - 1, 0); print_char(&g_ui_ctx, ' ', INVERTED); return 1; }
int media_write(uint32 sector, uint8 *buffer, uint32 sector_count) { int ret; uint32 i; #ifdef DEBUG dbg_printf("media_write : 0x%.8X\n",sector); #endif set_char_pos(&g_ui_ctx,g_ui_ctx.screen_txt_xsize - 1, 0); print_char(&g_ui_ctx, 1, INVERTED); for(i=0;i<sector_count;i++) { if( sector - last_setlbabase >=8) { last_setlbabase=sector; ret = setlbabase(sector); if( ret != ERR_NO_ERROR ) return 0; } ret = writesector((unsigned char)((sector-last_setlbabase)+1),buffer); if( ret != ERR_NO_ERROR ) { hxc_printf_box(&g_ui_ctx,"ERROR: Write sector ERROR !"); return 0; } sector++; } set_char_pos(&g_ui_ctx,g_ui_ctx.screen_txt_xsize - 1, 0); print_char(&g_ui_ctx, ' ', INVERTED); #ifdef DEBUG print_hex_array(buffer,512); #endif return 1; }
void PXL_Text::render(PXL_Batch* batch) { scaled_max.x = max_width; scaled_max.y = max_height; if (scale_max_size) { scaled_max.x = max_width * font_scale.x; scaled_max.y = max_height * font_scale.y; } rect.x = x; rect.y = y; float pos_x = 0; float pos_y = 0; for (size_t n = 0; n < text.length(); ++n) { if (set_char_pos(text[n], x)) { continue; } float offset_x = rect.w + kerning; if (max_width != INT_MAX || max_height != INT_MAX) { pos_x = (rect.x - x) + rect.w; pos_y = (rect.y - y) + rect.h; if (pos_x - rect.w >= scaled_max.x) { continue; } if (pos_y - rect.h >= scaled_max.y) { continue; } //cut off texture width if it goes over the max width if (pos_x >= scaled_max.x) { src_rect.w = src_rect.w - fabs(scaled_max.x - pos_x); src_rect.w = PXL_min(src_rect.w, scaled_max.x); rect.w = src_rect.w * font_scale.x; } //cut off texture height if it goes over the max height if (pos_y >= scaled_max.y) { src_rect.h = src_rect.h - fabs(scaled_max.y - pos_y); src_rect.h = PXL_min(src_rect.h, scaled_max.y); rect.h = src_rect.h * font_scale.y; } } temp_origin.x = (x + origin.x) - rect.x; temp_origin.y = (y + origin.y) - rect.y; batch->add(*font->get_glyph_sheet(), &rect, &src_rect, rotation, &temp_origin, NULL, z_depth, colour, PXL_text_shader); rect.x += offset_x; } }
int hxc_printf_box(ui_context * ctx,char * chaine, ...) { char temp_buffer[1024]; int str_size; int i; int start_xpos; va_list marker; va_start( marker, chaine ); #if ( _MSC_VER >= 1100 && _MSC_VER <= 1200 ) // VC 6 doesn't have vsnprintf. vsprintf(temp_buffer,chaine,marker); #else vsnprintf(temp_buffer,1024,chaine,marker); #endif str_size = strlen(temp_buffer); str_size += 4; start_xpos = ( ctx->screen_txt_xsize - str_size) / 2; // Upper bar set_char_pos(ctx, start_xpos, BOX_UPPERBAR_YPOS); for(i=0;i< str_size;i++) { print_char(ctx,UPPER_HORIZONTAL_BAR_CHAR,0); } // Top right corner set_char_pos(ctx, start_xpos + (i-1), BOX_UPPERBAR_YPOS); print_char(ctx,UPPER_RIGHT_CORNER_CHAR,0); //Top left corner set_char_pos(ctx, start_xpos, BOX_UPPERBAR_YPOS); print_char(ctx,UPPER_LEFT_CORNER_CHAR,0); // Clear Middle space bar set_char_pos(ctx, start_xpos, BOX_UPPERBAR_YPOS+1); for(i=0;i< str_size;i++) { print_char(ctx,' ',0); } // Middle right bar set_char_pos(ctx, start_xpos + (i-1), BOX_UPPERBAR_YPOS+1); print_char(ctx,RIGHT_VERTICAL_BAR_CHAR,0); // Middle left bar set_char_pos(ctx, start_xpos, BOX_UPPERBAR_YPOS+1); print_char(ctx,LEFT_VERTICAL_BAR_CHAR,0); // Print the string print_str(ctx,temp_buffer,MAXTXTSIZE,start_xpos + 2,BOX_UPPERBAR_YPOS+1,0,0); // Lower bar set_char_pos(ctx, start_xpos, BOX_UPPERBAR_YPOS+2); for(i=0;i<str_size;i++) { print_char(ctx,LOWER_HORIZONTAL_BAR_CHAR,0); } // Bottom right corner set_char_pos(ctx, start_xpos + (i-1), BOX_UPPERBAR_YPOS+2); print_char(ctx,LOWER_RIGHT_CORNER_CHAR,0); // Bottom left corner set_char_pos(ctx, start_xpos, BOX_UPPERBAR_YPOS+2); print_char(ctx,LOWER_LEFT_CORNER_CHAR,0); va_end( marker ); return 0; }