1 /* Copyright 2014 Clerk Ma
3 This program is free software; you can redistribute it and/or modify
4 it under the terms of the GNU General Public License as published by
5 the Free Software Foundation; either version 2 of the License, or
6 (at your option) any later version.
8 This program is distributed in the hope that it will be useful, but
9 WITHOUT ANY WARRANTY; without even the implied warranty of
10 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
11 General Public License for more details.
13 You should have received a copy of the GNU General Public License
14 along with this program; if not, write to the Free Software
15 Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
22 /* end of the old tex8.c */
24 void give_err_help (void)
29 boolean open_fmt_file (void)
33 j = cur_input.loc_field;
35 /* For Windows NT, lets allow + instead of & for format specification */
36 /* User specified a format name on the command line */
37 if (buffer[cur_input.loc_field] == '&' || buffer[cur_input.loc_field] == '+')
39 incr(cur_input.loc_field);
40 j = cur_input.loc_field;
43 while (buffer[j] != ' ')
46 pack_buffered_name(0, cur_input.loc_field, j - 1);
48 if (w_open_in(fmt_file))
53 (void) sprintf(log_line, "%s;%s\n", "Sorry, I can't find that format",
54 " will try the default.");
55 show_line(log_line, 1);
61 name_of_file[name_length + 1] = '\0';
62 (void) sprintf(s, "%s (%s);%s\n", "Sorry, I can't find that format",
63 name_of_file + 1, " will try the default.");
64 name_of_file[name_length + 1] = ' ';
66 (void) sprintf(s, "(Perhaps your %s environment variable is not set correctly)\n",
70 char *t; /* extra info 97/June/13 */
72 if ((t = grabenv("TEXFORMATS")) != NULL)
74 sprintf(s, "(%s=%s)\n", "TEXFORMATS", t);
78 sprintf(s, "%s environment variable not set\n", "TEXFORMATS");
81 show_line(log_line, 1); // show all three lines at once
89 /* Try the default format (either because no format specified or failed) */
90 pack_buffered_name(format_default_length - 4, 1, 0);
92 if (!w_open_in(fmt_file))
96 (void) sprintf(log_line, "%s!\n", "I can't find the default format file");
97 show_line(log_line, 1);
103 name_of_file[name_length + 1] = '\0';
104 (void) sprintf(s, "%s (%s)!\n", "I can't find the default format file", name_of_file + 1);
105 name_of_file[name_length + 1] = ' ';
107 (void) sprintf(s, "(Perhaps your %s environment variable is not set correctly)\n", "TEXFORMATS");
110 char *t; /* extra info 97/June/13 */
112 if ((t = grabenv("TEXFORMATS")) != NULL)
114 sprintf(s, "(%s=%s)\n", "TEXFORMATS", t);
118 sprintf(s, "%s environment variable not set\n", "TEXFORMATS");
121 show_line(log_line, 1); // show all three lines at once
128 cur_input.loc_field = j;
132 /**************************************************************************/
133 void print_char_string (unsigned char *s)
138 void show_font_info (void); // now in local.c
139 extern int closed_already; // make sure we don't try this more than once
140 /* The following needs access to zdvibuf of ALLOCATEDVIBUF 94/Mar/24 */
141 /* done in closefilesandterminate_regmem in coerce.h */
143 void close_files_and_terminate (void)
147 if (closed_already++)
149 show_line("close_files_and_terminated already ", 0);
150 return; // sanity check
154 show_line("\nclose_files_and_terminate ", 0);
156 /* close all open files */
157 for (k = 0; k <= 15; k++)
160 (void) a_close(write_file[k]);
164 if (tracing_stats > 0 || verbose_flag != 0) /* 93/Nov/30 - bkph */
167 /* used to output paragraph breaking statistics here */
168 (void) fprintf(log_file, "%c\n", ' ');
169 (void) fprintf(log_file, "\n");
170 (void) fprintf(log_file, "%s%s\n", "Here is how much of TeX's memory", " you used:");
171 (void) fprintf(log_file, "%c%ld%s", ' ', (long)str_ptr - init_str_ptr, " string");
172 if (str_ptr != init_str_ptr + 1)
173 (void) putc('s', log_file);
174 #ifdef ALLOCATESTRING
176 (void) fprintf(log_file, "%s%ld\n", " out of ", (long) current_max_strings - init_str_ptr);
179 (void) fprintf(log_file, "%s%ld\n", " out of ", (long) max_strings - init_str_ptr);
181 #ifdef ALLOCATESTRING
183 (void) fprintf(log_file, "%c%ld%s%ld\n", ' ', (long) pool_ptr - init_pool_ptr, " string characters out of ", (long) current_pool_size - init_pool_ptr);
186 (void) fprintf(log_file, "%c%ld%s%ld\n", ' ', (long) pool_ptr - init_pool_ptr, " string characters out of ", (long) pool_size - init_pool_ptr);
190 (void) fprintf(log_file, "%c%ld%s%ld\n", ' ', (long) lo_mem_max - mem_min + mem_end - hi_mem_min + 2, " words of memory out of ", (long)current_mem_size);
193 (void) fprintf(log_file, "%c%ld%s%ld\n", ' ', (long) lo_mem_max - mem_min + mem_end - hi_mem_min + 2, " words of memory out of ", (long)mem_end + 1 - mem_min);
194 (void) fprintf(log_file, "%c%ld%s%ld\n", ' ', (long) cs_count, " multiletter control sequences out of ", (long)(hash_size + hash_extra));
195 (void) fprintf(log_file, "%c%ld%s%ld%s", ' ', (long) fmem_ptr, " words of font info for ", (long) font_ptr - 0, " font");
197 (void) putc('s', log_file);
201 (void) fprintf(log_file, "%s%ld%s%ld\n", ", out of ", (long)current_font_mem_size, " for ", (long)font_max - 0);
204 (void) fprintf(log_file, "%s%ld%s%ld\n", ", out of ", (long)font_mem_size, " for ", (long)font_max - 0);
205 (void) fprintf(log_file, "%c%ld%s", ' ', (long)hyph_count, " hyphenation exception");
207 (void) putc('s', log_file);
209 (void) fprintf(log_file, "%s%ld\n", " out of ", (long) hyphen_prime);
210 (void) fprintf(log_file, " ");
211 (void) fprintf(log_file, "%ld%s", (long)max_in_stack, "i,");
212 (void) fprintf(log_file, "%ld%s", (long)max_nest_stack, "n,");
213 (void) fprintf(log_file, "%ld%s", (long)max_param_stack, "p,");
214 (void) fprintf(log_file, "%ld%s", (long)max_buf_stack + 1, "b,");
215 (void) fprintf(log_file, "%ld%s", (long)max_save_stack + 6, "s");
216 (void) fprintf(log_file, " stack positions out of ");
218 #ifdef ALLOCATESAVESTACK
220 (void) fprintf(log_file, "%ld%s", (long)current_stack_size, "i,");
223 (void) fprintf(log_file, "%ld%s", (long)stack_size, "i,");
225 #ifdef ALLOCATENESTSTACK
227 (void) fprintf(log_file, "%ld%s", (long)current_nest_size, "n,");
230 (void) fprintf(log_file, "%ld%s", (long)nest_size, "n,");
232 #ifdef ALLOCATEPARAMSTACK
234 (void) fprintf(log_file, "%ld%s", (long)current_param_size, "p,");
237 (void) fprintf(log_file, "%ld%s", (long)param_size, "p,");
239 #ifdef ALLOCATEBUFFER
241 (void) fprintf(log_file, "%ld%s", (long)current_buf_size, "b,");
244 (void) fprintf(log_file, "%ld%s", (long)buf_size, "b,");
246 #ifdef ALLOCATESAVESTACK
248 (void) fprintf(log_file, "%ld%s", (long)current_save_size, "s");
251 (void) fprintf(log_file, "%ld%s", (long)save_size, "s");
252 (void) fprintf(log_file, "\n");
255 fprintf(log_file, " (i = in_stack, n = nest_stack, p = param_stack, b = buf_stack, s = save_stack)\n");
258 fprintf(log_file, " %d inputs open max out of %d\n", high_in_open, max_in_open);
260 /* Modified 98/Jan/14 to leave out lines with zero counts */
261 if (show_line_break_stats && first_pass_count > 0) /* 96/Feb/8 */
263 int first_count, secondcount, thirdcount;
265 (void) fprintf(log_file, "\nSuccess at breaking %d paragraph%s:", first_pass_count, (first_pass_count == 1) ? "" : "s");
268 (void) fprintf(log_file, "\n %d single line `paragraph%s'", single_line, (single_line == 1) ? "" : "s"); /* 96/Apr/23 */
270 first_count = first_pass_count - single_line - second_pass_count;
275 secondcount = second_pass_count - final_pass_count;
276 thirdcount = final_pass_count - paragraph_failed;
278 if (first_pass_count > 0)
279 (void) fprintf(log_file, "\n %d first pass (\\pretolerance = %d)", first_pass_count, pretolerance);
281 if (second_pass_count > 0)
282 (void) fprintf(log_file, "\n %d second pass (\\tolerance = %d)", second_pass_count, tolerance);
284 if (final_pass_count > 0 || emergency_stretch > 0)
286 (void) fprintf(log_file, "\n %d third pass (\\emergencystretch = %lgpt)", final_pass_count, (double) emergency_stretch / 65536.0);
289 if (paragraph_failed > 0)
290 (void) fprintf(log_file, "\n %d failed", paragraph_failed);
292 (void) putc('\n', log_file);
294 if (overfull_hbox > 0)
295 (void) fprintf(log_file, "\n %d overfull \\hbox%s", overfull_hbox, (overfull_hbox > 1) ? "es" : "");
297 if (underfull_hbox > 0)
298 (void) fprintf(log_file, "\n %d underfull \\hbox%s", underfull_hbox, (underfull_hbox > 1) ? "es" : "");
300 if (overfull_vbox > 0)
301 (void) fprintf(log_file, "\n %d overfull \\vbox%s", overfull_vbox, (overfull_vbox > 1) ? "es" : "");
303 if (underfull_vbox > 0)
304 (void) fprintf(log_file, "\n %d underfull \\vbox%s", underfull_vbox, (underfull_vbox > 1) ? "es" : "");
306 if (overfull_hbox || underfull_hbox || overfull_vbox || underfull_vbox)
307 (void) putc('\n', log_file);
309 } /* end of if (log_opened) */
314 if (total_pages == 0)
316 print_nl("No pages of output.");
320 HPDF_SaveToFile(yandy_pdf, pdf_file_name);
322 print_nl("Output written on ");
324 if (full_file_name_flag && pdf_file_name != NULL)
325 print_char_string((unsigned char *) pdf_file_name);
327 slow_print(output_file_name);
330 print_int(total_pages);
331 print_string(" page");
333 if (total_pages != 1)
336 //print_string(", ");
337 //print_int(dvi_offset + dvi_ptr);
338 //print_int(yandy_pdf->mmgr->mpool->used_size);
339 //print_string(" bytes).");
344 HPDF_Free(yandy_pdf);
345 font_name_hash_free(gentbl);
362 if (total_pages == 0)
363 print_nl("No pages of output.");
368 last_bop = dvi_offset + dvi_ptr - 5;
370 dvi_four(473628672L);
375 dvi_out(max_push / 256);
376 dvi_out(max_push % 256);
378 if (total_pages >= 65536) // 99/Oct/10 dvi_t 16 bit problem
380 sprintf(log_line, "\nWARNING: page count (dvi_t) in DVI file will be %ld not %ld\n",
381 (total_pages % 65536), total_pages);
384 (void) fputs (log_line, log_file);
386 show_line(log_line, 1);
389 dvi_out((total_pages / 256) % 256);
390 dvi_out(total_pages % 256);
392 if (show_fonts_used && log_opened) /* 97/Dec/24 */
393 show_font_info(); // now in local.c
397 if (font_used[font_ptr])
398 dvi_font_def(font_ptr);
406 k = 4 + ((dvi_buf_size - dvi_ptr) % 4);
414 if (trace_flag) /* 93/Dec/28 - bkph */
416 sprintf(log_line, "\ndviwrite %d", dvi_gone);
417 show_line(log_line, 0);
420 if (dvi_limit == half_buf)
421 write_dvi(half_buf, dvi_buf_size - 1);
424 write_dvi(0, dvi_ptr - 1);
426 print_nl("Output written on ");
428 if (full_file_name_flag && dvi_file_name != NULL)
429 print_char_string((unsigned char *) dvi_file_name);
431 slow_print(output_file_name);
434 print_int(total_pages);
435 print_string(" page");
437 if (total_pages != 1)
441 print_int(dvi_offset + dvi_ptr);
442 print_string(" bytes).");
449 (void) putc('\n', log_file);
450 (void) a_close(log_file);
451 selector = selector - 2;
453 if (selector == term_only)
455 print_nl("Transcript written on ");
457 if (full_file_name_flag && log_file_name != NULL)
458 print_char_string((unsigned char *) log_file_name);
460 slow_print(texmf_log_name);
468 if ((edit_name_start != 0) && (interaction > 0))
470 call_edit(str_pool, edit_name_start, edit_name_length, edit_line);
475 void debug_help (void)
480 print_nl(" debug # (-1 to exit):");
484 read(stdin, m); // ???
489 read(stdin, n); // ???
495 print_int(mem[n].hh.lh);
498 print_int(mem[n].hh.rh);
505 print_scaled(font_info[n].sc); print_char(' ');
506 print_int(font_info[n].qqq.b0); print_char(':');
507 print_int(font_info[n].qqq.b1); print_char(':');
508 print_int(font_info[n].qqq.b2); print_char(':');
509 print_int(font_info[n].qqq.b3);
511 print_word(font_info[n]);
515 print_word(save_stack[n]);
523 /* *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** */
524 #ifdef ALLOCATESTRING
525 /* About to output node list make some space in string pool 97/Mar/9 */
526 if (pool_ptr + 32000 > current_pool_size)
527 str_pool = realloc_str_pool (increment_pool_size);
528 /* We don't bother to check whether this worked */
530 #ifdef ALLOCATESTRING
531 depth_threshold = current_pool_size - pool_ptr - 10;
533 /* *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** */
534 depth_threshold = pool_size - pool_ptr - 10;
540 show_token_list(n, 0, 1000);
553 read(stdin, l); // ???
559 register integer for_end;
564 while(k++ < for_end);
569 font_in_short_display = 0;
574 panicking = !panicking;