void EditorPrintout::OnPreparePrinting() { // Make page size scale with screen resolution MapScreenSizeToPage(); const wxRect size = GetLogicalPageRect(); // Set the current themes font const wxFont& font = m_theme.font; wxDC& dc = *GetDC(); dc.SetFont(font); // Initialize line info m_line = new FixedLine(dc, m_printDoc.GetDocument(), s_sel, s_brackets, s_lastpos, s_isShadow, m_theme); m_line->SetPrintMode(); m_line->Init(); m_line->SetWordWrap(cxWRAP_SMART); m_lineList = new LineListWrap(*m_line, m_printDoc.GetDocument()); m_lineList->SetOffsets(m_printDoc.GetOffsets()); // Calc gutter width const wxSize digit_ext = dc.GetTextExtent(wxT("0")); const unsigned int max_num_width = digits_in_number(m_lineList->size()); m_gutter_width = (max_num_width * digit_ext.x) + 8; m_line->SetWidth(size.width - m_gutter_width); m_lineList->invalidate(); m_lineList->prepare_all(); m_page_height = size.height - (m_line->GetCharHeight() * 2); // room for footer // Calculate page list if (m_lineList->size()) { unsigned int bottom_ypos = m_page_height; // Calc lines on pages while (bottom_ypos <= m_lineList->height()) { const unsigned int lastline = m_lineList->find_ypos(bottom_ypos)-1; m_pages.push_back(lastline); bottom_ypos = m_lineList->bottom(lastline) + m_page_height; } if (bottom_ypos > m_lineList->height()) m_pages.push_back(m_lineList->last()); } }
void log_write_email_headers(struct rev_info *opt, struct commit *commit, const char **subject_p, const char **extra_headers_p, int *need_8bit_cte_p) { const char *subject = NULL; const char *extra_headers = opt->extra_headers; const char *name = sha1_to_hex(commit->object.sha1); *need_8bit_cte_p = 0; /* unknown */ if (opt->total > 0) { static char buffer[64]; snprintf(buffer, sizeof(buffer), "Subject: [%s%s%0*d/%d] ", opt->subject_prefix, *opt->subject_prefix ? " " : "", digits_in_number(opt->total), opt->nr, opt->total); subject = buffer; } else if (opt->total == 0 && opt->subject_prefix && *opt->subject_prefix) { static char buffer[256]; snprintf(buffer, sizeof(buffer), "Subject: [%s] ", opt->subject_prefix); subject = buffer; } else { subject = "Subject: "; } printf("From %s Mon Sep 17 00:00:00 2001\n", name); graph_show_oneline(opt->graph); if (opt->message_id) { printf("Message-Id: <%s>\n", opt->message_id); graph_show_oneline(opt->graph); } if (opt->ref_message_ids && opt->ref_message_ids->nr > 0) { int i, n; n = opt->ref_message_ids->nr; printf("In-Reply-To: <%s>\n", opt->ref_message_ids->items[n-1].string); for (i = 0; i < n; i++) printf("%s<%s>\n", (i > 0 ? "\t" : "References: "), opt->ref_message_ids->items[i].string); graph_show_oneline(opt->graph); } if (opt->mime_boundary) { static char subject_buffer[1024]; static char buffer[1024]; struct strbuf filename = STRBUF_INIT; *need_8bit_cte_p = -1; /* NEVER */ snprintf(subject_buffer, sizeof(subject_buffer) - 1, "%s" "MIME-Version: 1.0\n" "Content-Type: multipart/mixed;" " boundary=\"%s%s\"\n" "\n" "This is a multi-part message in MIME " "format.\n" "--%s%s\n" "Content-Type: text/plain; " "charset=UTF-8; format=fixed\n" "Content-Transfer-Encoding: 8bit\n\n", extra_headers ? extra_headers : "", mime_boundary_leader, opt->mime_boundary, mime_boundary_leader, opt->mime_boundary); extra_headers = subject_buffer; get_patch_filename(opt->numbered_files ? NULL : commit, NULL, opt->nr, opt->patch_suffix, &filename); snprintf(buffer, sizeof(buffer) - 1, "\n--%s%s\n" "Content-Type: text/x-patch;" " name=\"%s\"\n" "Content-Transfer-Encoding: 8bit\n" "Content-Disposition: %s;" " filename=\"%s\"\n\n", mime_boundary_leader, opt->mime_boundary, filename.buf, opt->no_inline ? "attachment" : "inline", filename.buf); opt->diffopt.stat_sep = buffer; strbuf_release(&filename); } *subject_p = subject; *extra_headers_p = extra_headers; }
/** * Convert a duration to a string. * */ char* duration2string(duration_type* duration) { char* str = NULL, *num = NULL; size_t count = 2; int T = 0; if (!duration) { return NULL; } if (duration->years > 0) { count = count + 1 + digits_in_number(duration->years); } if (duration->months > 0) { count = count + 1 + digits_in_number(duration->months); } if (duration->weeks > 0) { count = count + 1 + digits_in_number(duration->weeks); } if (duration->days > 0) { count = count + 1 + digits_in_number(duration->days); } if (duration->hours > 0) { count = count + 1 + digits_in_number(duration->hours); T = 1; } if (duration->minutes > 0) { count = count + 1 + digits_in_number(duration->minutes); T = 1; } if (duration->seconds > 0) { count = count + 1 + digits_in_number(duration->seconds); T = 1; } if (T) { count++; } str = (char*) calloc(count, sizeof(char)); str[0] = 'P'; str[1] = '\0'; if (duration->years > 0) { count = digits_in_number(duration->years); num = (char*) calloc(count+2, sizeof(char)); if (num) { snprintf(num, count+2, "%uY", (uint32_t) duration->years); str = strncat(str, num, count+2); free((void*) num); } else { goto duration2string_num_calloc_failed; } } if (duration->months > 0) { count = digits_in_number(duration->months); num = (char*) calloc(count+2, sizeof(char)); if (num) { snprintf(num, count+2, "%uM", (uint32_t) duration->months); str = strncat(str, num, count+2); free((void*) num); } else { goto duration2string_num_calloc_failed; } } if (duration->weeks > 0) { count = digits_in_number(duration->weeks); num = (char*) calloc(count+2, sizeof(char)); if (num) { snprintf(num, count+2, "%uW", (uint32_t) duration->weeks); str = strncat(str, num, count+2); free((void*) num); } else { goto duration2string_num_calloc_failed; } } if (duration->days > 0) { count = digits_in_number(duration->days); num = (char*) calloc(count+2, sizeof(char)); if (num) { snprintf(num, count+2, "%uD", (uint32_t) duration->days); str = strncat(str, num, count+2); free((void*) num); } else { goto duration2string_num_calloc_failed; } } if (T) { str = strncat(str, "T", 1); } if (duration->hours > 0) { count = digits_in_number(duration->hours); num = (char*) calloc(count+2, sizeof(char)); if (num) { snprintf(num, count+2, "%uH", (uint32_t) duration->hours); str = strncat(str, num, count+2); free((void*) num); } else { goto duration2string_num_calloc_failed; } } if (duration->minutes > 0) { count = digits_in_number(duration->minutes); num = (char*) calloc(count+2, sizeof(char)); if (num) { snprintf(num, count+2, "%uM", (uint32_t) duration->minutes); str = strncat(str, num, count+2); free((void*) num); } else { goto duration2string_num_calloc_failed; } } if (duration->seconds > 0) { count = digits_in_number(duration->seconds); num = (char*) calloc(count+2, sizeof(char)); if (num) { snprintf(num, count+2, "%uS", (uint32_t) duration->seconds); str = strncat(str, num, count+2); free((void*) num); } else { goto duration2string_num_calloc_failed; } } return str; duration2string_num_calloc_failed: ods_log_error("[%s] cannot create string: malloc error", duration_str); free((void*) str); return NULL; }
/*---------------------------------------------------------------------*/ void fill_entry_descriptors( char *image_file, char *img, int img_size, entry_t ** res_entries, int *res_nb_entries ) { int elf_offset; int max_size = 0; int max_name = 0; int i; // Check file integrity if ( ( img_size < ( 16 * 3 ) ) || img[0] != 'R' || img[1] != 'E' || img[2] != 'S' || img[3] != 'E' || img[4] != 'T' ) fatal( "%s is not a valid Playstation 2 ROM image\n", image_file ); // Get number of ROMDIR entries romdir_t *romdir = ( romdir_t * ) img; int offset = 0; entry_t *entries; int nb_entries = 0; while ( romdir[nb_entries].name[0] ) { nb_entries++; offset += 16; if ( offset > img_size ) fatal( "%s is not a valid Playstation 2 ROM image: " "ROMDIR section ended prematuraly\n", image_file ); } // Alloc the resulting entries entries = malloc( sizeof( entry_t ) * nb_entries ); // fill the resulting entries w.r.t the EXTINFO and ROMDIR sections unsigned char *extinfo = img + ( ( nb_entries + 1 ) * sizeof( romdir_t ) ); for ( i = 0; i < nb_entries; i++ ) { //print("%p [%p]\n",extinfo,img); if ( extinfo >= ( unsigned char * ) ( img + img_size ) ) fatal( "%s is not a valid Playstation 2 ROM image: " "EXTINFO section ended prematuraly\n", image_file ); // fill entry infos strcpy( entries[i].name, romdir[i].name ); if ( max_name < strlen( entries[i].name ) ) max_name = strlen( entries[i].name ); entries[i].flags = 0; int size = romdir[i].extinfo_size; while ( size ) { if ( extinfo >= ( unsigned char * ) ( img + img_size ) ) fatal( "%s is not a valid Playstation 2 ROM image: " "EXTINFO section ended prematuraly\n", image_file ); extinfo_t *ei = ( extinfo_t * ) extinfo; switch ( ei->id ) { case EXTINFO_ID_DATE: entries[i].date = *( unsigned int * ) ( ei + 1 ); entries[i].flags |= ENTRY_FLAG_DATE; break; case EXTINFO_ID_VERSION: entries[i].version = ei->value; entries[i].flags |= ENTRY_FLAG_VERSION; break; case EXTINFO_ID_DESCR: strcpy( entries[i].descr, ( char * ) ( ei + 1 ) ); entries[i].flags |= ENTRY_FLAG_DESCR; break; case EXTINFO_ID_NULL: strcpy( entries[i].descr, ( char * ) ( ei + 1 ) ); entries[i].flags |= ENTRY_FLAG_NULL; break; default: fatal( "%s is not a valid Playstation 2 archive: " "invalid EXTINFO id for IRX %s\n", image_file, entries[i].name ); } size -= ( sizeof( extinfo_t ) + ei->size ); extinfo += ( sizeof( extinfo_t ) + ei->size ); } } // The IRX files are located right after sizeof(ROMDIR) + sizeof(EXTINFO) elf_offset = PAD16( romdir[1].size + romdir[2].size ); entries[0].irx_size = romdir[0].size; entries[1].irx_size = romdir[1].size; entries[2].irx_size = romdir[2].size; for ( i = 3; i < nb_entries; i++ ) { entries[i].irx_binary = ( char * ) ( elf_offset + ( int ) img ); entries[i].irx_size = romdir[i].size; elf_offset += PAD16( romdir[i].size ); if ( max_size < romdir[i].size ) max_size = romdir[i].size; } verbose_set_length_of_size_column( digits_in_number( max_size ) ); verbose_set_length_of_name_column( max_name ); *res_entries = entries; *res_nb_entries = nb_entries; }
/* * Convert a duration to a string. * */ char* duration2str(region_type* r, duration_type* duration) { char* str = NULL, *num = NULL; size_t count = 2; int T = 0; if (!r || !duration) { return NULL; } if (duration->years > 0) { count = count + 1 + digits_in_number(duration->years); } if (duration->months > 0) { count = count + 1 + digits_in_number(duration->months); } if (duration->weeks > 0) { count = count + 1 + digits_in_number(duration->weeks); } if (duration->days > 0) { count = count + 1 + digits_in_number(duration->days); } if (duration->hours > 0) { count = count + 1 + digits_in_number(duration->hours); T = 1; } if (duration->minutes > 0) { count = count + 1 + digits_in_number(duration->minutes); T = 1; } if (duration->seconds > 0) { count = count + 1 + digits_in_number(duration->seconds); T = 1; } if (T) { count++; } str = (char*) region_alloc(r, count * sizeof(char)); if (!str) { goto duration2string_num_ralloc_failed; } str[0] = 'P'; str[1] = '\0'; if (duration->years > 0) { count = digits_in_number(duration->years); num = (char*) region_alloc(r, (count+2) * sizeof(char)); if (num) { snprintf(num, count+2, "%uY", (uint32_t) duration->years); str = strncat(str, num, count+2); } else { goto duration2string_num_ralloc_failed; } } if (duration->months > 0) { count = digits_in_number(duration->months); num = (char*) region_alloc(r, (count+2) * sizeof(char)); if (num) { snprintf(num, count+2, "%uM", (uint32_t) duration->months); str = strncat(str, num, count+2); } else { goto duration2string_num_ralloc_failed; } } if (duration->weeks > 0) { count = digits_in_number(duration->weeks); num = (char*) region_alloc(r, (count+2) * sizeof(char)); if (num) { snprintf(num, count+2, "%uW", (uint32_t) duration->weeks); str = strncat(str, num, count+2); } else { goto duration2string_num_ralloc_failed; } } if (duration->days > 0) { count = digits_in_number(duration->days); num = (char*) region_alloc(r, (count+2) * sizeof(char)); if (num) { snprintf(num, count+2, "%uD", (uint32_t) duration->days); str = strncat(str, num, count+2); } else { goto duration2string_num_ralloc_failed; } } if (T) { str = strncat(str, "T", 1); } if (duration->hours > 0) { count = digits_in_number(duration->hours); num = (char*) region_alloc(r, (count+2) * sizeof(char)); if (num) { snprintf(num, count+2, "%uH", (uint32_t) duration->hours); str = strncat(str, num, count+2); } else { goto duration2string_num_ralloc_failed; } } if (duration->minutes > 0) { count = digits_in_number(duration->minutes); num = (char*) region_alloc(r, (count+2) * sizeof(char)); if (num) { snprintf(num, count+2, "%uM", (uint32_t) duration->minutes); str = strncat(str, num, count+2); } else { goto duration2string_num_ralloc_failed; } } if (duration->seconds > 0) { count = digits_in_number(duration->seconds); num = (char*) region_alloc(r, (count+2) * sizeof(char)); if (num) { snprintf(num, count+2, "%uS", (uint32_t) duration->seconds); str = strncat(str, num, count+2); } else { goto duration2string_num_ralloc_failed; } } return str; duration2string_num_ralloc_failed: ods_log_error("[%s] region alloc failed", logstr); return NULL; }