Esempio n. 1
0
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());
	}
}
Esempio n. 2
0
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;
}
Esempio n. 4
0
/*---------------------------------------------------------------------*/
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;
}
Esempio n. 5
0
/*
 * 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;
}