From c484497209a19dfd2bf5030f22d3984fa54ba0cb Mon Sep 17 00:00:00 2001 From: maqiyuan Date: Sat, 16 Aug 2014 22:43:53 +0800 Subject: [PATCH] added pdf backend --- src/texsourc/Makefile.linux.gcc.static | 13 +- src/texsourc/Makefile.win.msvc | 1 + src/texsourc/coerce.h | 7 +- src/texsourc/dpx.c | 580 ++++++++++++++++++++++++++++++++- src/texsourc/local.c | 4 +- src/texsourc/tex0.c | 4 +- src/texsourc/tex4.c | 35 +- src/texsourc/tex9.c | 101 +++++- src/texsourc/yandytex.h | 5 +- 9 files changed, 706 insertions(+), 44 deletions(-) diff --git a/src/texsourc/Makefile.linux.gcc.static b/src/texsourc/Makefile.linux.gcc.static index 119095a..b03c94a 100644 --- a/src/texsourc/Makefile.linux.gcc.static +++ b/src/texsourc/Makefile.linux.gcc.static @@ -8,22 +8,25 @@ # CC = gcc -CFLAGS = -c -O2 -Wno-unused-result -Ilibmd5 -LDFLAGS = /home/clerk/dev/android/lib/libkpathsea.a /home/clerk/dev/android/lib/libz.a +CFLAGS = -g -c -O2 -Wno-unused-result -Ilibmd5 +LDFLAGS = /home/clerk/dev/android/lib/libkpathsea.a libdpx.a libpng.a libpaper.a /home/clerk/dev/android/lib/libz.a /home/clerk/dev/android/lib/libkpathsea.a -lm objects = yandytex.o itex.o openinou.o subroute.o local.o \ tex0.o tex1.o tex2.o tex3.o tex4.o \ tex5.o tex6.o tex7.o tex8.o tex9.o \ - pool.o md5.o utils.o + pool.o md5.o utils.o dpx.o headers = yandytex.h texd.h coerce.h macros.h memory.h yandytex: $(objects) - $(CC) -s -o yandytex $(objects) $(LDFLAGS) + $(CC) -o yandytex $(objects) $(LDFLAGS) yandytex.o: yandytex.c $(headers) $(CC) $(CFLAGS) yandytex.c - + +dpx.o: dpx.c $(headers) + $(CC) $(CFLAGS) dpx.c + itex.o: itex.c $(headers) $(CC) $(CFLAGS) itex.c diff --git a/src/texsourc/Makefile.win.msvc b/src/texsourc/Makefile.win.msvc index bbd8a1c..981fb80 100644 --- a/src/texsourc/Makefile.win.msvc +++ b/src/texsourc/Makefile.win.msvc @@ -95,3 +95,4 @@ utils.obj: utils.c \ c..obj: $(CC) $(CFLAGS) $*.c + diff --git a/src/texsourc/coerce.h b/src/texsourc/coerce.h index 97c985d..ff84f80 100644 --- a/src/texsourc/coerce.h +++ b/src/texsourc/coerce.h @@ -85,10 +85,8 @@ void runaway (void); pointer get_avail (void); void flush_list_(pointer p); #define flush_list(p) flush_list_((pointer) (p)) -pointer get_node_(integer s); -#define get_node(s) get_node_((integer) (s)) -void free_node_(pointer p, halfword s); -#define free_node(p, s) free_node_((pointer) (p), (halfword) (s)) +pointer get_node (integer s); +void free_node (pointer p, halfword s); void sort_avail (void); pointer new_null_box (void); pointer new_rule (void); @@ -254,6 +252,7 @@ void movement (scaled w, eight_bits o); void special_out (pointer p); void hlist_out (void); void vlist_out (void); +void pdf_ship_out (pointer p); void ship_out (pointer p); void prune_movements (integer l); void write_out (pointer p); diff --git a/src/texsourc/dpx.c b/src/texsourc/dpx.c index 8cc83fe..e087ba9 100644 --- a/src/texsourc/dpx.c +++ b/src/texsourc/dpx.c @@ -21,7 +21,43 @@ #include "yandytex.h" -void dpx_ship_out_(pointer p) +void ensure_pdf_open(void) +{ + if (output_file_name == 0) + { + if (job_name == 0) + open_log_file(); + + pack_job_name(".pdf"); + + while (!b_open_out(pdf_file)) + prompt_file_name("file name for output", ".pdf"); + + output_file_name = b_make_name_string(pdf_file); + } +} + +extern void pdf_set_version(unsigned version); +extern void pdf_set_compression(int level); +extern void pdf_doc_set_creator(const char * creator); +extern void pdf_files_init(void); +extern void pdf_init_device(double dvi2pts, int precision, int black_and_white); +extern void pdf_open_document(const char *filename, + int do_encryption, + double media_width, double media_height, + double annot_grow_amount, int bookmark_open_depth, + int check_gotos); +extern void pdf_doc_begin_page(double scale, double x_origin, double y_origin); +extern void pdf_doc_end_page(void); +extern int spc_exec_at_begin_document(void); +extern int spc_exec_at_end_document(void); +extern int spc_exec_at_begin_page(void); +extern int spc_exec_at_end_page(void); +extern void read_config_file (const char *config); +extern void pdf_hlist_out (void); +extern void pdf_vlist_out (void); + +void pdf_ship_out (pointer p) { integer page_loc; char j, k; @@ -53,7 +89,7 @@ void dpx_ship_out_(pointer p) if (k < j) print_char('.'); } - + update_terminal(); if (tracing_output > 0) @@ -65,12 +101,12 @@ void dpx_ship_out_(pointer p) } if ((height(p) > max_dimen) || (depth(p) > max_dimen) || - (height(p) + depth(p) + v_offset > max_dimen) || - (width(p) + h_offset > max_dimen)) + (height(p) + depth(p) + v_offset > max_dimen) || + (width(p) + h_offset > max_dimen)) { print_err("Huge page cannot be shipped out"); help2("The page just created is more than 18 feet tall or", - "more than 18 feet wide, so I suspect something went wrong."); + "more than 18 feet wide, so I suspect something went wrong."); error(); if (tracing_output <= 0) @@ -94,18 +130,44 @@ void dpx_ship_out_(pointer p) dvi_v = 0; cur_h = h_offset; dvi_f = null_font; - ensure_dvi_open(); + ensure_pdf_open(); if (total_pages == 0) { + //kpse_init_prog("", 600, NULL, NULL); + //kpse_set_program_enabled(kpse_pk_format, true, kpse_src_texmf_cnf); + //pdf_font_set_dpi(600); + //dpx_delete_old_cache(image_cache_life); pdf_set_version(5); - pdf_doc_set_creator("Y&Y TeX 2.3.0"); + pdf_set_compression(9); + pdf_init_fontmaps(); + read_config_file("dvipdfmx.cfg"); + pdf_doc_set_producer("Y&YTeX 2.3.0"); + pdf_doc_set_creator("TeX"); + pdf_files_init(); + pdf_init_device(0.000015202, 2, 0); + // 0.000015259 1/65535 + // 0.000152018 + pdf_open_document(pdf_file_name, 0, 595.0, 842.0, 0, 0, (1 << 4)); + //pdf_open_document(pdf_file_name, 0, 595.0 * 65535, 842.0 * 65535, 0, 0, (1 << 4)); + spc_exec_at_begin_document(); } page_loc = dvi_offset + dvi_ptr; - pdf_doc_begin_page(1000, 0, 0); // bop + pdf_doc_begin_page(1.0, 72.0, 770.0); + spc_exec_at_begin_page(); + + last_bop = page_loc; cur_v = height(p) + v_offset; - pdf_doc_end_page(); // eop + temp_ptr = p; + + if (type(p) == vlist_node) + pdf_vlist_out(); + else + pdf_hlist_out(); + + spc_exec_at_end_page(); + pdf_doc_end_page(); incr(total_pages); cur_s = -1; @@ -143,11 +205,507 @@ done: #endif } +void pdf_synch_h (void) +{ + if (cur_h != dvi_h) + dvi_h = cur_h; +} + +void pdf_synch_v (void) +{ + if (cur_v != dvi_v) + dvi_v = cur_v; +} -void dpx_hlist_out (void) +int pdf_get_font_id (internal_font_number f) { + char * sbuf = malloc(length(font_name[f]) + 1); + int id; + memset(sbuf, 0, length(font_name[f]) + 1); + memcpy(sbuf, str_pool + str_start[font_name[f]], length(font_name[f])); + id = dvi_locate_font(sbuf, font_size[f]); + free(sbuf); + + return id; } -void dpx_vlist_out (void) +void pdf_hlist_out (void) { + scaled base_line; + scaled left_edge; + scaled save_h, save_v; + pointer this_box; + // glue_ord g_order; + int g_order; + // char g_sign; + int g_sign; + pointer p; + integer save_loc; + pointer leader_box; + scaled leader_wd; + scaled lx; + boolean outer_doing_leaders; + scaled edge; + real glue_temp; + real cur_glue; + scaled cur_g; + + cur_g = 0; + cur_glue = 0.0; + this_box = temp_ptr; + g_order = glue_order(this_box); + g_sign = glue_sign(this_box); + p = list_ptr(this_box); + incr(cur_s); + + if (cur_s > max_push) + max_push = cur_s; + + save_loc = dvi_offset + dvi_ptr; + base_line = cur_v; + left_edge = cur_h; + + while (p != 0) +reswitch: + if (is_char_node(p)) + { + pdf_synch_h(); + pdf_synch_v(); + + do + { + f = font(p); + c = character(p); + + if (f != dvi_f) + { + if (!font_used[f]) + { + font_used[f] = true; + font_id[f] = pdf_get_font_id(f); + } + + dvi_f = f; + } + + char cbuf[2] = {c, 0}; + pdf_dev_set_string(cur_h, -cur_v, cbuf, 1, char_width(f, char_info(f, c)), font_id[dvi_f], 1); + cur_h = cur_h + char_width(f, char_info(f, c)); + p = link(p); + } while (!(!is_char_node(p))); + + dvi_h = cur_h; + } + else + { + switch (type(p)) + { + case hlist_node: + case vlist_node: + if (list_ptr(p) == 0) + cur_h = cur_h + width(p); + else + { + save_h = dvi_h; + save_v = dvi_v; + cur_v = base_line + shift_amount(p); + temp_ptr = p; + edge = cur_h; + + if (type(p) == vlist_node) + pdf_vlist_out(); + else + pdf_hlist_out(); + + dvi_h = save_h; + dvi_v = save_v; + cur_h = edge + width(p); + cur_v = base_line; + } + break; + + case rule_node: + { + rule_ht = height(p); + rule_dp = depth(p); + rule_wd = width(p); + goto fin_rule; + } + break; + + case whatsit_node: + out_what(p); + break; + + case glue_node: + { + g = glue_ptr(p); + rule_wd = width(g) - cur_g; + + if (g_sign != normal) + { + if (g_sign == stretching) + { + if (stretch_order(g) == g_order) + { + cur_glue = cur_glue + stretch(g); + vet_glue(glue_set(this_box) * cur_glue); + cur_g = round(glue_temp); + } + } + else if (shrink_order(g) == g_order) + { + cur_glue = cur_glue - shrink(g); + vet_glue(glue_set(this_box) * cur_glue); + cur_g = round(glue_temp); + } + } + + rule_wd = rule_wd + cur_g; + + if (subtype(p) >= a_leaders) + { + leader_box = leader_ptr(p); + + if (type(leader_box) == rule_node) + { + rule_ht = height(leader_box); + rule_dp = depth(leader_box); + goto fin_rule; + } + + leader_wd = width(leader_box); + + if ((leader_wd > 0) && (rule_wd > 0)) + { + rule_wd = rule_wd + 10; + edge = cur_h + rule_wd; + lx = 0; + + if (subtype(p) == a_leaders) + { + save_h = cur_h; + cur_h = left_edge + leader_wd * ((cur_h - left_edge) / leader_wd); + + if (cur_h < save_h) + cur_h = cur_h + leader_wd; + } + else + { + lq = rule_wd / leader_wd; + lr = rule_wd % leader_wd; + + if (subtype(p) == c_leaders) + cur_h = cur_h + (lr / 2); + else + { + lx = (2 * lr + lq + 1) / (2 * lq + 2); + cur_h = cur_h + ((lr - (lq - 1)* lx) / 2); + } + } + + while (cur_h + leader_wd <= edge) + { + cur_v = base_line + shift_amount(leader_box); + pdf_synch_v(); + save_v = dvi_v; + pdf_synch_h(); + save_h = dvi_h; + temp_ptr = leader_box; + outer_doing_leaders = doing_leaders; + doing_leaders = true; + + if (type(leader_box) == vlist_node) + pdf_vlist_out(); + else + pdf_hlist_out(); + + doing_leaders = outer_doing_leaders; + dvi_v = save_v; + dvi_h = save_h; + cur_v = base_line; + cur_h = save_h + leader_wd + lx; + } + + cur_h = edge - 10; + goto next_p; + } + } + + goto move_past; + } + break; + + case kern_node: + case math_node: + cur_h = cur_h + width(p); + break; + + case ligature_node: + { + mem[lig_trick] = mem[lig_char(p)]; + link(lig_trick) = link(p); + p = lig_trick; + goto reswitch; + } + break; + + default: + break; + } + + goto next_p; + +fin_rule: + if (is_running(rule_ht)) + rule_ht = height(this_box); + + if (is_running(rule_dp)) + rule_dp = depth(this_box); + + rule_ht = rule_ht + rule_dp; + + if ((rule_ht > 0) && (rule_wd > 0)) + { + pdf_synch_h(); + cur_v = base_line + rule_dp; + pdf_synch_v(); + pdf_dev_set_rule(dvi_h, dvi_v, rule_wd, rule_ht); + cur_v = base_line; + dvi_h = dvi_h + rule_wd; + } + +move_past: + cur_h = cur_h + rule_wd; + +next_p: + p = link(p); + } + + prune_movements(save_loc); + decr(cur_s); +} + +void pdf_vlist_out (void) +{ + scaled left_edge; + scaled top_edge; + scaled save_h, save_v; + pointer this_box; + // glue_ord g_order; + int g_order; + // char g_sign; + int g_sign; + pointer p; + integer save_loc; + pointer leader_box; + scaled leader_ht; + scaled lx; + boolean outer_doing_leaders; + scaled edge; + real glue_temp; + real cur_glue; + scaled cur_g; + + cur_g = 0; + cur_glue = 0.0; + this_box = temp_ptr; + g_order = glue_order(this_box); + g_sign = glue_sign(this_box); + p = list_ptr(this_box); + incr(cur_s); + + if (cur_s > max_push) + max_push = cur_s; + + save_loc = dvi_offset + dvi_ptr; + left_edge = cur_h; + cur_v = cur_v - height(this_box); + top_edge = cur_v; + + while (p != 0) + { + if (is_char_node(p)) + { + confusion("vlistout"); + return; + } + else + { + switch (type(p)) + { + case hlist_node: + case vlist_node: + if (list_ptr(p) == 0) + cur_v = cur_v + height(p) + depth(p); + else + { + cur_v = cur_v + height(p); + pdf_synch_v(); + save_h = dvi_h; + save_v = dvi_v; + cur_h = left_edge + shift_amount(p); + temp_ptr = p; + + if (type(p) == vlist_node) + pdf_vlist_out(); + else + pdf_hlist_out(); + + dvi_h = save_h; + dvi_v = save_v; + cur_v = save_v + depth(p); + cur_h = left_edge; + } + break; + + case rule_node: + { + rule_ht = height(p); + rule_dp = depth(p); + rule_wd = width(p); + goto fin_rule; + } + break; + + case whatsit_node: + out_what(p); + break; + + case glue_node: + { + g = glue_ptr(p); + rule_ht = width(g) - cur_g; + + if (g_sign != normal) + { + if (g_sign == stretching) + { + if (stretch_order(g) == g_order) + { + cur_glue = cur_glue + stretch(g); + vet_glue(glue_set(this_box) * cur_glue); + cur_g = round(glue_temp); + } + } + else if (shrink_order(g) == g_order) /* BUG FIX !!! */ + { + cur_glue = cur_glue - shrink(g); + vet_glue(glue_set(this_box) * cur_glue); + cur_g = round(glue_temp); + } + } + + rule_ht = rule_ht + cur_g; + + if (subtype(p) >= a_leaders) + { + leader_box = leader_ptr(p); + + if (type(leader_box) == rule_node) + { + rule_wd = width(leader_box); + rule_dp = 0; + goto fin_rule; + } + + leader_ht = height(leader_box) + depth(leader_box); + + if ((leader_ht > 0) && (rule_ht > 0)) + { + rule_ht = rule_ht + 10; + edge = cur_v + rule_ht; + lx = 0; + + if (subtype(p) == a_leaders) + { + save_v = cur_v; + cur_v = top_edge + leader_ht * ((cur_v - top_edge) / leader_ht); + + if (cur_v < save_v) + cur_v = cur_v + leader_ht; + } + else + { + lq = rule_ht / leader_ht; + lr = rule_ht % leader_ht; + + if (subtype(p) == c_leaders) + cur_v = cur_v + (lr / 2); + else + { + lx = (2 * lr + lq + 1) / (2 * lq + 2); + cur_v = cur_v + ((lr - (lq - 1) * lx) / 2); + } + } + + while (cur_v + leader_ht <= edge) + { + cur_h = left_edge + shift_amount(leader_box); + pdf_synch_h(); + save_h = dvi_h; + cur_v = cur_v + height(leader_box); + pdf_synch_v(); + save_v = dvi_v; + temp_ptr = leader_box; + outer_doing_leaders = doing_leaders; + doing_leaders = true; + + if (type(leader_box) == vlist_node) + pdf_vlist_out(); + else + pdf_hlist_out(); + + doing_leaders = outer_doing_leaders; + dvi_v = save_v; + dvi_h = save_h; + cur_h = left_edge; + cur_v = save_v - height(leader_box) + leader_ht + lx; + } + + cur_v = edge - 10; + goto next_p; + } + } + + goto move_past; + } + break; + + case kern_node: + cur_v = cur_v + width(p); + break; + + default: + break; + } + + goto next_p; + +fin_rule: + if (is_running(rule_wd)) + rule_wd = width(this_box); + + rule_ht = rule_ht + rule_dp; + cur_v = cur_v + rule_ht; + + if ((rule_ht > 0) && (rule_wd > 0)) + { + pdf_synch_h(); + pdf_synch_v(); + pdf_dev_set_rule(cur_h, -cur_v, rule_wd, rule_ht); + } + + goto next_p; + +move_past: + cur_v = cur_v + rule_ht; + } + +next_p: + p = link(p); + } + + prune_movements(save_loc); + decr(cur_s); } diff --git a/src/texsourc/local.c b/src/texsourc/local.c index 87e00f6..1cf3c1a 100644 --- a/src/texsourc/local.c +++ b/src/texsourc/local.c @@ -2864,7 +2864,7 @@ void deslash_all (int ac, char **av) int main_init (int ac, char ** av) { - kpse_set_program_name(av[0], NULL); + kpse_set_program_name(av[0], "dvipdfmx"); xputenv("engine", "yandytex"); if (sizeof(memory_word) != sizeof(halfword) * 2) @@ -3383,4 +3383,4 @@ void show_font_info (void) } free((void *)fnumtable); -} \ No newline at end of file +} diff --git a/src/texsourc/tex0.c b/src/texsourc/tex0.c index 36873c2..871bab2 100644 --- a/src/texsourc/tex0.c +++ b/src/texsourc/tex0.c @@ -1373,7 +1373,7 @@ void flush_list_(pointer p) } } /* sec 0125 */ -pointer get_node_(integer s) +pointer get_node (integer s) { pointer p; pointer q; @@ -1494,7 +1494,7 @@ found: return r; } /* sec 0130 */ -void free_node_(pointer p, halfword s) +void free_node (pointer p, halfword s) { pointer q; diff --git a/src/texsourc/tex4.c b/src/texsourc/tex4.c index 8ba3f70..9149cd6 100644 --- a/src/texsourc/tex4.c +++ b/src/texsourc/tex4.c @@ -427,21 +427,23 @@ void special_out (pointer p) selector = old_setting; str_room(1); - + graphics_mode(); + spc_exec_special(str_pool + str_start[str_ptr], cur_length, cur_h * 0.000015202, -cur_v * 0.000015202, 1.0); +/* if (cur_length < 256) { dvi_out(xxx1); dvi_out(cur_length); } else - { + {Mag dvi_out(xxx4); dvi_four(cur_length); } for (k = str_start[str_ptr]; k <= pool_ptr - 1; k++) dvi_out(str_pool[k]); - +*/ pool_ptr = str_start[str_ptr]; } /* sec 1370 */ @@ -632,20 +634,17 @@ reswitch: dvi_out(fnt1); dvi_out(f - 1); } -#else else { - dvi_out(fnt1); - dvi_out(f - 1); + dvi_out(fnt2); + dvi_out(((f - 1) >> 8)); + dvi_out(((f - 1) & 255)); } -#endif - -#ifdef INCREASEFONTS +#else else { - dvi_out(fnt2); - dvi_out(((f - 1) >> 8)); /* top byte */ - dvi_out(((f - 1) & 255)); /* bottom byte */ + dvi_out(fnt1); + dvi_out(f - 1); } #endif @@ -1250,13 +1249,21 @@ done: } void ship_out (pointer p) { + //printf("init pdf devices."); + //dvi_ship_out_(p); + //printf("DPX test"); + pdf_ship_out(p); + /* switch (shipout_flag) { case out_dvi_flag: case out_xdv_flag: dvi_ship_out_(p); break; - } + case out_pdf_flag: + //pdf_ship_out(p); + break; + }*/ } /* sec 0645 */ void scan_spec (group_code c, boolean three_codes) @@ -2159,4 +2166,4 @@ found: shift_amount(b) = half(height(b) - depth(b)) - axis_height(s); return b; -} \ No newline at end of file +} diff --git a/src/texsourc/tex9.c b/src/texsourc/tex9.c index 4b5c628..003a139 100644 --- a/src/texsourc/tex9.c +++ b/src/texsourc/tex9.c @@ -19,6 +19,42 @@ #include "yandytex.h" +extern void pdf_init_fontmaps(void); +extern void pdf_close_fontmaps(void); + +extern void pdf_doc_set_creator(const char * creator); + +// primitive \pdfminorversion +extern void pdf_set_version(unsigned version); +// pdfobj.c +extern void pdf_set_compression(int level); +extern void pdf_files_init(void); +extern void pdf_files_close(void); + +extern void pdf_init_device(double dvi2pts, int precision, int black_and_white); +extern void pdf_close_device(void); + +extern void pdf_open_document(const char *filename, + int do_encryption, + double media_width, double media_height, + double annot_grow_amount, int bookmark_open_depth, + int check_gotos); +extern void pdf_close_document(void); +extern void pdf_doc_begin_page(double scale, double x_origin, double y_origin); +extern void pdf_doc_end_page(void); +extern int spc_exec_at_begin_document(void); +extern int spc_exec_at_end_document(void); +extern int spc_exec_at_begin_page(void); +extern int spc_exec_at_end_page(void); + +typedef signed long spt_t; +extern int pdf_dev_locate_font(const char *font_name, spt_t ptsize); +extern void pdf_dev_set_rule(spt_t xpos, spt_t ypos, spt_t width, spt_t height); +extern void pdf_dev_set_string(spt_t xpos, spt_t ypos, + const void *instr_ptr, int instr_len, + spt_t width, + int font_id, int ctype); + /* sec 1284 */ void give_err_help (void) { @@ -246,7 +282,68 @@ void close_files_and_terminate (void) } } #endif +///* + { + spc_exec_at_end_document(); + pdf_close_document(); + pdf_close_device(); + pdf_files_close(); + pdf_close_fontmaps(); + + if (total_pages == 0) + print_nl("No pages of output."); + else + { + if (total_pages >= 65536) + { + sprintf(log_line, "\nWARNING: page count (dvi_t) in DVI file will be %lld not %lld\n", + (total_pages % 65536), total_pages); + if (log_opened) + fputs(log_line, log_file); + + show_line(log_line, 1); + } + + print_nl("Output written on "); + + if (full_file_name_flag && pdf_file_name != NULL) + prints(pdf_file_name); + else + slow_print(output_file_name); + + prints(" ("); + print_int(total_pages); + prints(" page"); + + if (total_pages != 1) + print_char('s'); + + prints(", "); + print_int(pdf_output_stats()); + prints(" bytes)."); + b_close(pdf_file); + } + } +//*/ +/* +{ + pdf_set_version(5); + pdf_set_compression(0); + pdf_doc_set_creator("Y&Y TeX 2.3.0"); + pdf_files_init(); + pdf_init_device(1, 2, 0); + pdf_open_document("test.pdf", 0, 595.0, 842.0, 0, 0, (1 << 4)); + pdf_doc_begin_page(1, 0, 0); + spc_exec_at_begin_page(); + spc_exec_at_end_page(); + pdf_doc_end_page(); + pdf_close_document(); // bytes written + pdf_close_device(); + pdf_files_close(); +} +*/ +/* switch (shipout_flag) { case out_dvi_flag: @@ -348,7 +445,7 @@ void close_files_and_terminate (void) } break; } - +*/ if (log_opened) { wlog_cr(); @@ -503,4 +600,4 @@ void debug_help (void) } } } -#endif \ No newline at end of file +#endif diff --git a/src/texsourc/yandytex.h b/src/texsourc/yandytex.h index 026a8b8..dbaf3af 100644 --- a/src/texsourc/yandytex.h +++ b/src/texsourc/yandytex.h @@ -444,6 +444,7 @@ EXTERN font_index fmem_ptr; EXTERN internal_font_number font_ptr; EXTERN internal_font_number frozen_font_ptr; EXTERN four_quarters font_check[font_max + 1]; +EXTERN int font_id[font_max + 1]; EXTERN scaled font_size[font_max + 1]; EXTERN scaled font_dsize[font_max + 1]; EXTERN font_index font_params[font_max + 1]; @@ -488,12 +489,8 @@ EXTERN integer pdf_offset; EXTERN integer dvi_gone; EXTERN pointer down_ptr, right_ptr; EXTERN scaled dvi_h, dvi_v; -EXTERN scaled pdf_h, pdf_v; -EXTERN scaled pdf_x, pdf_y; -EXTERN scaled pdf_delta_h, pdf_delta_v; EXTERN scaled cur_h, cur_v; EXTERN internal_font_number dvi_f; -EXTERN internal_font_number pdf_f; EXTERN integer cur_s; EXTERN scaled total_stretch[4], total_shrink[4]; EXTERN integer last_badness; -- 2.11.0