Skip to content

Commit 2e7a6dc

Browse files
committed
Port open_log_file
1 parent e0ee626 commit 2e7a6dc

File tree

2 files changed

+49
-40
lines changed

2 files changed

+49
-40
lines changed

crates/engine_xetex/src/c_api/engine.rs

Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -898,3 +898,52 @@ pub extern "C" fn more_name(c: u16) -> bool {
898898
pub extern "C" fn make_name_string() -> StrNumber {
899899
Globals::with(|globals| rs_make_name_string(globals))
900900
}
901+
902+
pub fn rs_open_log_file(globals: &mut Globals<'_, '_>) {
903+
let old = globals.engine.selector;
904+
905+
if globals.engine.job_name == 0 {
906+
globals.engine.job_name = rs_maketexstring(globals, "texput");
907+
}
908+
909+
rs_pack_job_name(globals, ".log");
910+
911+
let file_name = globals
912+
.engine
913+
.name_of_file
914+
.as_ref()
915+
.unwrap()
916+
.to_string_lossy();
917+
match globals.state.output_open(&file_name, false) {
918+
Some(file) => globals.out.log_file = Some(file),
919+
None => panic!("cannot open log file output \"{}\"", file_name),
920+
}
921+
922+
globals.engine.texmf_log_name = rs_make_name_string(globals);
923+
globals.engine.selector = Selector::LogOnly;
924+
globals.engine.log_opened = true;
925+
926+
globals.engine.input_stack[globals.engine.input_ptr] = globals.engine.cur_input.clone();
927+
928+
rs_print_nl_bytes(globals, b"**");
929+
let mut l = globals.engine.input_stack[0].limit as usize;
930+
if globals.engine.buffer[l] as i32 == globals.engine.int_par(IntPar::EndLineChar) {
931+
l -= 1;
932+
}
933+
934+
for k in 1..=l {
935+
rs_print(globals, globals.engine.buffer[k] as i32)
936+
}
937+
938+
rs_print_ln(globals);
939+
globals.engine.selector = match old {
940+
Selector::NoPrint => Selector::LogOnly,
941+
Selector::TermOnly => Selector::TermAndLog,
942+
_ => panic!(),
943+
};
944+
}
945+
946+
#[no_mangle]
947+
pub extern "C" fn open_log_file() {
948+
Globals::with(|globals| rs_open_log_file(globals))
949+
}

crates/engine_xetex/xetex/xetex-xetex0.c

Lines changed: 0 additions & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -10677,46 +10677,6 @@ scan_file_name(void)
1067710677
warning_index = save_warning_index;
1067810678
}
1067910679

10680-
10681-
void
10682-
open_log_file(void)
10683-
{
10684-
unsigned char old_setting;
10685-
int32_t k;
10686-
int32_t l;
10687-
10688-
old_setting = selector();
10689-
if (job_name() == 0)
10690-
set_job_name(maketexstring("texput"));
10691-
10692-
pack_job_name(".log");
10693-
10694-
set_log_file(ttstub_output_open(name_of_file(), 0));
10695-
if (log_file() == INVALID_HANDLE)
10696-
_tt_abort ("cannot open log file output \"%s\"", name_of_file());
10697-
10698-
set_texmf_log_name(make_name_string());
10699-
set_selector(SELECTOR_LOG_ONLY);
10700-
set_log_opened(true);
10701-
10702-
set_input_stack(input_ptr(), cur_input());
10703-
10704-
/* Here we catch the log file up with anything that has already been
10705-
* printed. The eqtb reference is end_line_char. */
10706-
10707-
print_nl_cstr("**");
10708-
l = input_stack(0).limit;
10709-
if (buffer(l) == INTPAR(end_line_char))
10710-
l--;
10711-
10712-
for (k = 1; k <= l; k++)
10713-
print(buffer(k));
10714-
10715-
print_ln();
10716-
set_selector(old_setting + 2);
10717-
}
10718-
10719-
1072010680
void
1072110681
start_input(const char *primary_input_name)
1072210682
{

0 commit comments

Comments
 (0)