-#ifdef _WINDOWS
- #define NOCOMM
- #define NOSOUND
- #define NODRIVERS
- #define STRICT
- #pragma warning(disable:4115) // kill rpcasync.h complaint
- #include <windows.h>
- #define MYLIBAPI __declspec(dllexport)
-#endif
+/* Copyright 2014 Clerk Ma
-#include "texwin.h"
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
-#pragma warning(disable:4996)
-#pragma warning(disable:4131) // old style declarator
-#pragma warning(disable:4135) // conversion between different integral types
-#pragma warning(disable:4127) // conditional expression is constant
+ This program is distributed in the hope that it will be useful, but
+ WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ General Public License for more details.
-#include <setjmp.h>
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA. */
#define EXTERN extern
#include "texd.h"
-#pragma warning(disable:4244) /* 96/Jan/10 */
-
-/* *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** */
-
-void scan_int (void)
-{/* 30 */
- bool negative;
- integer m;
- small_number d;
- bool vacuous;
- bool OKsofar;
- radix = 0;
- OKsofar = true;
- negative = false;
- do {
- do {
- get_x_token ();
- } while(!(cur_cmd != 10));
- if(cur_tok == 3117)
+/* sec 0440 */
+void scan_int (void)
+{
+ boolean negative;
+ integer m;
+ small_number d;
+ boolean vacuous;
+ boolean OKsofar;
+
+ radix = 0;
+ OKsofar = true;
+ negative = false;
+
+ do
{
- negative = ! negative;
- cur_tok = 3115;
- }
- } while(!(cur_tok != 3115));
- if(cur_tok == 3168)
+ do
+ {
+ get_x_token();
+ }
+ while (!(cur_cmd != spacer));
+
+ if (cur_tok == other_token + '-')
+ {
+ negative = !negative;
+ cur_tok = other_token + '+';
+ }
+ }
+ while (!(cur_tok != other_token + '+'));
+
+ if (cur_tok == alpha_token)
{
- get_token ();
- if(cur_tok < 4095)
+ get_token();
+
+ if (cur_tok < cs_token_flag)
{
- cur_val = cur_chr;
- if(cur_cmd <= 2)
- if(cur_cmd == 2)
- incr(align_state);
- else decr(align_state);
- }
-/* else if cur_tok<cs_token_flag+single_base then ... */
- else if(cur_tok < 4352) /* 4095 + 257 */
-/* cur_val:=cur_tok-cs_token_flag-active_base */
- cur_val = cur_tok - 4096; /* 4095 + 1 */
-/* else cur_val:=cur_tok-cs_token_flag-single_base; */
- else cur_val = cur_tok - 4352; /* 4095 + 257 */
- if(cur_val > 255)
+ cur_val = cur_chr;
+
+ if (cur_cmd <= right_brace)
+ if (cur_cmd == right_brace)
+ incr(align_state);
+ else
+ decr(align_state);
+ }
+ else if (cur_tok < cs_token_flag + single_base)
+ cur_val = cur_tok - cs_token_flag - active_base;
+ else
+ cur_val = cur_tok - cs_token_flag - single_base;
+
+ if (cur_val > 255)
{
- print_err("Improper alphabetic constant");
- help2("A one-character control sequence belongs after a ` mark.",
- "So I'm essentially inserting \\0 here.");
- cur_val = 48;
- back_error ();
- }
- else {
- get_x_token ();
- if(cur_cmd != 10)
- back_input ();
- }
- }
- else if((cur_cmd >= 68)&&(cur_cmd <= 89)) {
- scan_something_internal(0, false);
+ print_err("Improper alphabetic constant");
+ help2("A one-character control sequence belongs after a ` mark.",
+ "So I'm essentially inserting \\0 here.");
+ cur_val = '0';
+ back_error();
+ }
+ else
+ {
+ get_x_token();
+
+ if (cur_cmd != spacer)
+ back_input();
+ }
}
- else {
-
-/* begin radix:=10; m:=214748364; l.8734 */
- radix = 10;
+ else if ((cur_cmd >= min_internal) && (cur_cmd <= max_internal))
+ {
+ scan_something_internal(int_val, false);
+ }
+ else
+ {
+ radix = 10;
m = 214748364L; /* 7FFFFFFF hex */
- if(cur_tok == 3111)
+
+ if (cur_tok == octal_token)
{
- radix = 8;
+ radix = 8;
m = 268435456L; /* 2^28 */
- get_x_token ();
- }
- else if(cur_tok == 3106)
+ get_x_token();
+ }
+ else if (cur_tok == hex_token)
{
- radix = 16;
+ radix = 16;
m = 134217728L; /* 2^27 8000000 hex */
- get_x_token ();
- }
- vacuous = true;
- cur_val = 0;
- while(true){
- if((cur_tok < 3120 + radix)&&(cur_tok >= 3120)&&(cur_tok <= 3129
- ))
- d = cur_tok - 3120;
- else if(radix == 16)
- if((cur_tok <= 2886)&&(cur_tok >= 2881))
- d = cur_tok - 2871;
- else if((cur_tok <= 3142)&&(cur_tok >= 3137))
- d = cur_tok - 3127;
- else goto lab30;
- else goto lab30;
- vacuous = false;
- if((cur_val >= m)&&((cur_val > m)||(d > 7)||(radix != 10)
- ))
+ get_x_token();
+ }
+
+ vacuous = true;
+ cur_val = 0;
+
+ while (true)
+ {
+ if ((cur_tok < zero_token + radix) && (cur_tok >= zero_token) && (cur_tok <= zero_token + 9))
+ d = cur_tok - zero_token;
+ else if (radix == 16)
+ if ((cur_tok <= A_token + 5) && (cur_tok >= A_token))
+ d = cur_tok - A_token + 10;
+ else if ((cur_tok <= other_A_token + 5) && (cur_tok >= other_A_token))
+ d = cur_tok - other_A_token;
+ else
+ goto done;
+ else
+ goto done;
+
+ vacuous = false;
+
+ if ((cur_val >= m) && ((cur_val > m) || (d > 7) || (radix != 10)))
{
- if(OKsofar)
- {
- print_err("Number too big");
- help2("I can only go up to 2147483647='17777777777=\"7FFFFFFF,",
- "so I'm using that number instead of yours.");
- error ();
- cur_val = 2147483647L; /* 7FFFFFFF hex */
- OKsofar = false;
- }
- }
- else cur_val = cur_val * radix + d;
- get_x_token ();
- }
- lab30:;
- if(vacuous)
+ if (OKsofar)
+ {
+ print_err("Number too big");
+ help2("I can only go up to 2147483647='17777777777=\"7FFFFFFF,",
+ "so I'm using that number instead of yours.");
+ error();
+ cur_val = 2147483647L; /* 7FFFFFFF hex */
+ OKsofar = false;
+ }
+ }
+ else
+ cur_val = cur_val * radix + d;
+ get_x_token();
+ }
+done:;
+
+ if (vacuous)
{
- print_err("Missing number, treated as zero");
- help3("A number should have been here; I inserted `0'.",
- "(If you can't figure out why I needed to see a number,",
- "look up `weird error' in the index to The TeXbook.)");
- back_error ();
+ print_err("Missing number, treated as zero");
+ help3("A number should have been here; I inserted `0'.",
+ "(If you can't figure out why I needed to see a number,",
+ "look up `weird error' in the index to The TeXbook.)");
+ back_error();
}
- else if(cur_cmd != 10)
- back_input ();
- }
- if(negative)
- cur_val = - (integer) cur_val;
-}
-void scan_dimen_(bool mu, bool inf, bool shortcut)
-{/* 30 31 32 40 45 88 89 */
- bool negative;
- integer f;
- integer num, denom;
- small_number k, kk;
- halfword p, q;
- scaled v;
- integer savecurval;
- f = 0;
- arith_error = false;
- cur_order = 0;
- negative = false;
- if(! shortcut)
- {
- negative = false;
- do {
- do {
- get_x_token ();
- } while(!(cur_cmd != 10));
- if(cur_tok == 3117)
+ else if (cur_cmd != spacer)
+ back_input();
+ }
+
+ if (negative)
+ cur_val = - (integer) cur_val;
+}
+/* sec 0448 */
+void scan_dimen_(boolean mu, boolean inf, boolean shortcut)
+{
+ boolean negative;
+ integer f;
+ integer num, denom;
+ small_number k, kk;
+ halfword p, q;
+ scaled v;
+ integer savecurval;
+
+ f = 0;
+ arith_error = false;
+ cur_order = 0;
+ negative = false;
+
+ if (!shortcut)
+ {
+ negative = false;
+
+ do
{
- negative = ! negative;
- cur_tok = 3115;
- }
- } while(!(cur_tok != 3115));
- if((cur_cmd >= 68)&&(cur_cmd <= 89))
- if(mu)
+ do
+ {
+ get_x_token();
+ }
+ while (!(cur_cmd != spacer));
+
+ if (cur_tok == other_token + '-')
+ {
+ negative = ! negative;
+ cur_tok = other_token + '+';
+ }
+ }
+ while (!(cur_tok != other_token + '+'));
+
+ if ((cur_cmd >= min_internal) && (cur_cmd <= max_internal))
{
- scan_something_internal(3, false);
- if(cur_val_level >= 2){
- v = mem[cur_val + 1].cint;
- delete_glue_ref(cur_val);
- cur_val = v;
- }
- if(cur_val_level == 3)
- goto lab89;
- if(cur_val_level != 0){
- mu_error ();
- }
- }
- else {
- scan_something_internal(1, false);
- if(cur_val_level == 1)goto lab89;
- }
- else {
-
- back_input ();
- if(cur_tok == 3116)
- cur_tok = 3118;
- if(cur_tok != 3118){
- scan_int ();
- }
- else {
-
- radix = 10;
- cur_val = 0;
- }
- if(cur_tok == 3116)
- cur_tok = 3118;
- if((radix == 10)&&(cur_tok == 3118))
+ if (mu)
{
- k = 0;
- p = 0; /* p:=null l.8883 */
- get_token ();
- while(true){
- get_x_token ();
- if((cur_tok > 3129)||(cur_tok < 3120))
- goto lab31;
- if(k < 17)
- {
- q = get_avail ();
- mem[q].hh.v.RH = p;
- mem[q].hh.v.LH = cur_tok - 3120;
- p = q;
- incr(k);
- }
- }
- lab31: {
- register integer for_end; kk = k; for_end = 1; if(kk >=
- for_end) do
+ scan_something_internal(mu_val, false);
+
+ if (cur_val_level >= glue_val)
+ {
+ v = width(cur_val);
+ delete_glue_ref(cur_val);
+ cur_val = v;
+ }
+
+ if (cur_val_level == mu_val)
+ goto attach_sign;
+
+ if (cur_val_level != int_val)
+ mu_error();
+ }
+ else
+ {
+ scan_something_internal(dimen_val, false);
+
+ if (cur_val_level == dimen_val)
+ goto attach_sign;
+ }
+ }
+ else
{
-/* long to char ... */
- dig[kk - 1]= mem[p].hh.v.LH;
- q = p;
- p = mem[p].hh.v.RH;
+ back_input();
+
+ if (cur_tok == continental_point_token)
+ cur_tok = point_token;
+
+ if (cur_tok != point_token)
{
- mem[q].hh.v.RH = avail;
- avail = q;
- ;
-#ifdef STAT
- decr(dyn_used);
-#endif /* STAT */
- }
- }
- while(kk-- > for_end); }
- f = round_decimals(k);
- if(cur_cmd != 10)
- back_input ();
- }
- }
- }
- if(cur_val < 0)
+ scan_int();
+ }
+ else
+ {
+ radix = 10;
+ cur_val = 0;
+ }
+
+ if (cur_tok == continental_point_token)
+ cur_tok = point_token;
+
+ if ((radix == 10) && (cur_tok == point_token))
+ {
+ k = 0;
+ p = 0; /* p:=null l.8883 */
+ get_token();
+
+ while (true)
+ {
+ get_x_token();
+
+ if ((cur_tok > zero_token + 9) || (cur_tok < zero_token))
+ goto done1;
+
+ if (k < 17)
+ {
+ q = get_avail();
+ link(q) = p;
+ info(q) = cur_tok - zero_token;
+ p = q;
+ incr(k);
+ }
+ }
+done1:
+ for (kk = k; kk >= 1; kk--)
+ {
+ dig[kk - 1] = info(p);
+ q = p;
+ p = link(p);
+ free_avail(q);
+ }
+
+ f = round_decimals(k);
+
+ if (cur_cmd != spacer)
+ back_input();
+ }
+ }
+ }
+
+ if (cur_val < 0)
{
- negative = ! negative;
- cur_val = - (integer) cur_val;
- }
- if(inf)
- if(scan_keyword(309)) /* fil */
- {
- cur_order = 1;
- while(scan_keyword(108)) { /* l */
-
- if(cur_order == 3) {
- print_err("Illegal unit of measure(");
- print(703); /* replaced by filll) */
- help1("I dddon't go any higher than filll.");
- error ();
- }
- else incr(cur_order);
- }
- goto lab88;
- }
- savecurval = cur_val;
- do {
- get_x_token ();
- } while(!(cur_cmd != 10));
- if((cur_cmd < 68)||(cur_cmd > 89))
- back_input ();
- else {
-
- if(mu)
+ negative = !negative;
+ cur_val = - (integer) cur_val;
+ }
+
+ if (inf)
+ {
+ if (scan_keyword("fil"))
{
- scan_something_internal(3, false);
- if(cur_val_level >= 2){
- v = mem[cur_val + 1].cint;
- delete_glue_ref(cur_val);
- cur_val = v;
- }
- if(cur_val_level != 3){
- mu_error ();
+ cur_order = fil;
+
+ while (scan_keyword("l"))
+ {
+ if (cur_order == filll)
+ {
+ print_err("Illegal unit of measure (");
+ prints("replaced by filll)");
+ help1("I dddon't go any higher than filll.");
+ error();
+ }
+ else
+ incr(cur_order);
+ }
+ goto attach_fraction;
}
- }
- else {
- scan_something_internal(1, false);
}
- v = cur_val;
- goto lab40;
- }
- if(mu)
- goto lab45;
- if(scan_keyword(705)) /* em */
- v =(font_info[6 + param_base[eqtb[(hash_size + 1834)].hh.v.RH]].cint);
- else if(scan_keyword(706)) /* ex */
- v =(font_info[5 + param_base[eqtb[(hash_size + 1834)].hh.v.RH]].cint);
- else goto lab45;
- {
- get_x_token ();
- if(cur_cmd != 10) back_input ();
- }
- lab40: cur_val = mult_and_add(savecurval, v, xn_over_d(v, f, 65536L),
- 1073741823L); /* 2^30 - 1 */
- goto lab89;
- lab45:;
- if(mu)
- if(scan_keyword(334)) /* mu */
- goto lab88;
- else {
- print_err("Illegal unit of measure(");
- print(707); /* mu inserted) */
- help4("The unit of measurement in math glue must be mu.",
- "To recover gracefully from this error, it's best to",
- "delete the erroneous units; e.g., type `2' to delete",
- "two letters. (See Chapter 27 of The TeXbook.)");
- error ();
- goto lab88;
- }
- if(scan_keyword(701)) /* true */
- {
- prepare_mag ();
- if(eqtb[(hash_size + 3180)].cint != 1000)
+
+ savecurval = cur_val;
+
+ do
{
- cur_val = xn_over_d(cur_val, 1000, eqtb[(hash_size + 3180)].cint);
- f =(1000 * f + 65536L * tex_remainder)/
- eqtb[(hash_size + 3180)].cint;
- cur_val = cur_val +(f / 65536L);
-/* cur_val = cur_val +(f >> 16); */ /* f positive ??? */
- f = f % 65536L;
-/* f = f & 65535L; */ /* f positive ??? */
- }
- }
- if(scan_keyword(394)) /* pt */
- goto lab88;
- if(scan_keyword(712)) /* in */
+ get_x_token();
+ }
+ while (!(cur_cmd != spacer));
+
+ if ((cur_cmd < min_internal) || (cur_cmd > max_internal))
+ back_input();
+ else
{
- num = 7227;
- denom = 100;
- }
- else if(scan_keyword(713)) /* pc */
+ if (mu)
+ {
+ scan_something_internal(mu_val, false);
+
+ if (cur_val_level >= glue_val)
+ {
+ v = width(cur_val);
+ delete_glue_ref(cur_val);
+ cur_val = v;
+ }
+
+ if (cur_val_level != mu_val)
+ {
+ mu_error();
+ }
+ }
+ else
+ {
+ scan_something_internal(dimen_val, false);
+ }
+
+ v = cur_val;
+ goto found;
+ }
+
+ if (mu)
+ goto not_found;
+
+ if (scan_keyword("em"))
+ v = quad(cur_font);
+ else if (scan_keyword("ex"))
+ v = x_height(cur_font);
+ else
+ goto not_found;
+
{
- num = 12;
- denom = 1;
- }
- else if(scan_keyword(714)) /* cm */
+ get_x_token();
+
+ if (cur_cmd != spacer)
+ back_input();
+ }
+
+found:
+ cur_val = mult_and_add(savecurval, v, xn_over_d(v, f, 65536L), 1073741823L); /* 2^30 - 1 */
+ goto attach_sign;
+
+not_found:
+ if (mu)
{
- num = 7227;
- denom = 254;
- }
- else if(scan_keyword(715)) /* mm */
+ if (scan_keyword("mu"))
+ goto attach_fraction;
+ else
+ {
+ print_err("Illegal unit of measure (");
+ prints("mu inserted)");
+ help4("The unit of measurement in math glue must be mu.",
+ "To recover gracefully from this error, it's best to",
+ "delete the erroneous units; e.g., type `2' to delete",
+ "two letters. (See Chapter 27 of The TeXbook.)");
+ error();
+ goto attach_fraction;
+ }
+ }
+
+ if (scan_keyword("true"))
{
- num = 7227;
- denom = 2540;
- }
- else if(scan_keyword(716)) /* bp */
+ prepare_mag();
+
+ if (mag != 1000)
+ {
+ cur_val = xn_over_d(cur_val, 1000, mag);
+ f = (1000 * f + 65536L * tex_remainder) / mag;
+ cur_val = cur_val + (f / 65536L);
+ f = f % 65536L;
+ }
+ }
+
+ if (scan_keyword("pt"))
+ goto attach_fraction;
+
+ if (scan_keyword("in"))
+ set_conversion(7227, 100);
+ else if (scan_keyword("pc"))
+ set_conversion(12, 1);
+ else if (scan_keyword("cm"))
+ set_conversion(7227, 254);
+ else if (scan_keyword("mm"))
+ set_conversion(7227, 2540);
+ else if (scan_keyword("bp"))
+ set_conversion(7227, 7200);
+ else if (scan_keyword("dd"))
+ set_conversion(1238, 1157);
+ else if (scan_keyword("cc"))
+ set_conversion(14856, 1157);
+ else if (scan_keyword("Q"))
+ set_conversion(7227, 10160);
+ else if (scan_keyword("H"))
+ set_conversion(7227, 10160);
+ else if (scan_keyword("sp"))
+ goto done;
+ else
{
- num = 7227;
- denom = 7200;
- }
- else if(scan_keyword(717)) /* dd */
+ print_err("Illegal unit of measure (");
+ prints("pt inserted)");
+ help6("Dimensions can be in units of em, ex, in, pt, pc,",
+ "cm, mm, dd, cc, bp, or sp; but yours is a new one!",
+ "I'll assume that you meant to say pt, for printer's points.",
+ "To recover gracefully from this error, it's best to",
+ "delete the erroneous units; e.g., type `2' to delete",
+ "two letters. (See Chapter 27 of The TeXbook.)");
+ error();
+ goto done2;
+ }
+
+ cur_val = xn_over_d(cur_val, num, denom);
+ f = (num * f + 65536L * tex_remainder) / denom;
+ cur_val = cur_val +(f / 65536L);
+ f = f % 65536L;
+
+done2:
+attach_fraction:
+ if (cur_val >= 16384) /* 2^14 */
+ arith_error = true;
+ else
+ cur_val = cur_val * unity + f;
+
+done:
{
- num = 1238;
- denom = 1157;
- }
- else if(scan_keyword(718)) /* cc */
+ get_x_token();
+
+ if (cur_cmd != spacer)
+ back_input();
+ }
+
+attach_sign:
+ if (arith_error || (abs(cur_val) >= 1073741824L)) /* 2^30 */
{
- num = 14856; /* numerator */
- denom = 1157; /* denominator */
- }
- else if(scan_keyword(719)) /* sp */
- goto lab30;
- else {
- print_err("Illegal unit of measure(");
- print(720); /* pt inserted) */
- help6("Dimensions can be in units of em, ex, in, pt, pc,",
- "cm, mm, dd, cc, bp, or sp; but yours is a new one!",
- "I'll assume that you meant to say pt, for printer's points.",
- "To recover gracefully from this error, it's best to",
- "delete the erroneous units; e.g., type `2' to delete",
- "two letters. (See Chapter 27 of The TeXbook.)");
- error ();
- goto lab32;
- }
- cur_val = xn_over_d(cur_val, num, denom);
- f =(num * f + 65536L * tex_remainder)/ denom;
- cur_val = cur_val +(f / 65536L);
-/* cur_val = cur_val +(f >> 16); */ /* f positive ??? */
- f = f % 65536L;
-/* f = f & 65535L; */ /* f positive ??? */
- lab32:;
- lab88: if(cur_val >= 16384) /* 2^14 */
- arith_error = true;
- else cur_val = cur_val * 65536L + f;
-/* else cur_val = cur_val << 16 + f; */ /* f positive ?? */
- lab30:;
- {
- get_x_token ();
- if(cur_cmd != 10) back_input ();
- }
-lab89:
- if(arith_error ||(abs(cur_val)>= 1073741824L)) /* 2^30 */
- {
- print_err("Dimension too large");
- help2("I can't work with sizes bigger than about 19 feet.",
- "Continue and I'll use the largest value I can.");
- error ();
- cur_val = 1073741823L; /* 2^30 - 1 */
- arith_error = false;
- }
- if(negative)
- cur_val = - (integer) cur_val;
-}
+ print_err("Dimension too large");
+ help2("I can't work with sizes bigger than about 19 feet.",
+ "Continue and I'll use the largest value I can.");
+ error();
+ cur_val = max_dimen;
+ arith_error = false;
+ }
+
+ if (negative)
+ cur_val = - (integer) cur_val;
+}
+/* sec 0461 */
void scan_glue_(small_number level)
-{/* 10 */
- bool negative;
- halfword q;
- bool mu;
- mu =(level == 3);
- negative = false;
- do {
- do {
- get_x_token ();
- } while(!(cur_cmd != 10));
- if(cur_tok == 3117)
+{
+ boolean negative;
+ halfword q;
+ boolean mu;
+
+ mu = (level == mu_val);
+ negative = false;
+
+ do
{
- negative = ! negative;
- cur_tok = 3115;
- }
- } while(!(cur_tok != 3115));
- if((cur_cmd >= 68)&&(cur_cmd <= 89))
+ do
+ {
+ get_x_token();
+ }
+ while (!(cur_cmd != spacer));
+
+ if (cur_tok == other_token + '-')
+ {
+ negative = !negative;
+ cur_tok = other_token + '+';
+ }
+ }
+ while (!(cur_tok != other_token + '+'));
+
+ if ((cur_cmd >= min_internal) && (cur_cmd <= max_internal))
{
- scan_something_internal(level, negative);
- if(cur_val_level >= 2){
- if(cur_val_level != level){
- mu_error ();
+ scan_something_internal(level, negative);
+
+ if (cur_val_level >= glue_val)
+ {
+ if (cur_val_level != level)
+ {
+ mu_error();
+ }
+ return;
+ }
+
+ if (cur_val_level == int_val)
+ {
+ scan_dimen(mu, false, true);
+ }
+ else if (level == mu_val)
+ {
+ mu_error();
}
- return;
- }
- if(cur_val_level == 0){
- scan_dimen(mu, false, true);
}
- else if(level == 3){
- mu_error ();
+ else
+ {
+ back_input();
+ scan_dimen(mu, false, false);
+
+ if (negative)
+ cur_val = - (integer) cur_val;
}
- }
- else {
- back_input ();
- scan_dimen(mu, false, false);
- if(negative)cur_val = - (integer) cur_val;
- }
- q = new_spec(0);
- mem[q + 1].cint = cur_val;
- if(scan_keyword(727)) /* plus */
+ q = new_spec(zero_glue);
+ width(q) = cur_val;
+
+ if (scan_keyword("plus"))
{
- scan_dimen(mu, true, false);
- mem[q + 2].cint = cur_val;
- mem[q].hh.b0 = cur_order;
- }
- if(scan_keyword(728)) /* minus */
+ scan_dimen(mu, true, false);
+ stretch(q) = cur_val;
+ stretch_order(q) = cur_order;
+ }
+
+ if (scan_keyword("minus"))
{
- scan_dimen(mu, true, false);
- mem[q + 3].cint = cur_val;
- mem[q].hh.b1 = cur_order;
- }
- cur_val = q;
-}
-halfword scan_rule_spec (void)
-{/* 21 */ register halfword Result;
- halfword q;
- q = new_rule ();
-/* if cur_cmd=vrule then width(q):=default_rule */
-/* @d default_rule=26214 {0.4\thinspace pt} */
-/* *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** */
- if(cur_cmd == 35) /* cur_cmd == vrule */
-/* mem[q + 1].cint = 26214; */ /* width := 0.4pt */
- mem[q + 1].cint = default_rule; /* 95/Oct/9 */
- else {
-
-/* mem[q + 3].cint = 26214; */ /* height := 0.4pt */
- mem[q + 3].cint = default_rule; /* 95/Oct/9 */
- mem[q + 2].cint = 0; /* depth := 0.0pt */
- }
-/* *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** */
- lab21: if(scan_keyword(729)) /* width */
+ scan_dimen(mu, true, false);
+ shrink(q) = cur_val;
+ shrink_order(q) = cur_order;
+ }
+
+ cur_val = q;
+}
+/* sec 0463 */
+halfword scan_rule_spec (void)
+{
+ halfword q;
+
+ q = new_rule();
+
+ if (cur_cmd == vrule)
+ width(q) = default_rule;
+ else
{
- scan_dimen(false, false, false);
- mem[q + 1].cint = cur_val;
- goto lab21;
- }
- if(scan_keyword(730)) /* height */
+ height(q) = default_rule;
+ depth(q) = 0;
+ }
+
+reswitch:
+
+ if (scan_keyword("width"))
{
- scan_dimen(false, false, false);
- mem[q + 3].cint = cur_val;
- goto lab21;
- }
- if(scan_keyword(731)) /* depth */
+ scan_dimen(false, false, false);
+ width(q) = cur_val;
+ goto reswitch;
+ }
+
+ if (scan_keyword("height"))
{
- scan_dimen(false, false, false);
- mem[q + 2].cint = cur_val;
- goto lab21;
- }
- Result = q;
- return Result;
-}
-halfword str_toks_(pool_pointer b)
-{register halfword Result;
- halfword p;
- halfword q;
- halfword t;
- pool_pointer k;
+ scan_dimen(false, false, false);
+ height(q) = cur_val;
+ goto reswitch;
+ }
+
+ if (scan_keyword("depth"))
{
-/* *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** */
-#ifdef ALLOCATESTRING
- if(pool_ptr + 1 > current_pool_size)
- str_pool = realloc_str_pool (increment_pool_size);
- if(pool_ptr + 1 > current_pool_size) { /* in case it failed 94/Jan/22 */
- overflow(257, current_pool_size - init_pool_ptr); /* 97/Mar/7 */
- return 0; // abort_flag set
+ scan_dimen(false, false, false);
+ depth(q) = cur_val;
+ goto reswitch;
}
-#else
-/* *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** */
- if(pool_ptr + 1 > pool_size){
- overflow(257, pool_size - init_pool_ptr); /* pool size */
- return; // abort_flag set
+
+ return q;
+}
+/* sec 0464 */
+halfword str_toks_(pool_pointer b)
+{
+ halfword p;
+ halfword q;
+ halfword t;
+ pool_pointer k;
+
+ str_room(1);
+ p = temp_head;
+ link(p) = 0;
+ k = b;
+
+ while (k < pool_ptr)
+ {
+ t = str_pool[k];
+
+ if (t == ' ')
+ t = space_token;
+ else
+ t = other_token + t;
+
+ fast_store_new_token(t);
+ incr(k);
}
-#endif
- }
- p = mem_top - 3;
- mem[p].hh.v.RH = 0; /* link(p):=null l.9135 */
- k = b;
- while(k < pool_ptr){
-
- t = str_pool[k];
- if(t == 32)
- t = 2592;
- else t = 3072 + t;
+
+ pool_ptr = b;
+
+ return p;
+}
+/* sec 0465 */
+halfword the_toks (void)
+{
+ char old_setting;
+ halfword p, q, r;
+ pool_pointer b;
+
+ get_x_token();
+ scan_something_internal(tok_val, false);
+
+ if (cur_val_level >= ident_val)
+ {
+ p = temp_head;
+ link(p) = 0;
+
+ if (cur_val_level == ident_val)
+ store_new_token(cs_token_flag + cur_val);
+ else if (cur_val != 0)
{
+ r = link(cur_val);
+
+ while (r != 0)
{
- q = avail;
- if(q == 0)
- q = get_avail ();
- else {
-
- avail = mem[q].hh.v.RH;
- mem[q].hh.v.RH = 0;
- ;
-#ifdef STAT
- incr(dyn_used);
-#endif /* STAT */
- }
- }
- mem[p].hh.v.RH = q;
- mem[q].hh.v.LH = t;
- p = q;
- }
- incr(k);
- }
- pool_ptr = b;
- Result = p;
- return Result;
-}
-halfword the_toks (void)
-{register halfword Result;
- char old_setting;
- halfword p, q, r;
- pool_pointer b;
- get_x_token ();
- scan_something_internal(5, false);
- if(cur_val_level >= 4)
- {
- p = mem_top - 3;
- mem[p].hh.v.RH = 0;
- if(cur_val_level == 4)
+ fast_store_new_token(info(r));
+ r = link(r);
+ }
+ }
+
+ return p;
+ }
+ else
+ {
+ old_setting = selector;
+ selector = new_string;
+ b = pool_ptr;
+
+ switch (cur_val_level)
{
- q = get_avail ();
- mem[p].hh.v.RH = q;
- mem[q].hh.v.LH = 4095 + cur_val;
- p = q;
- }
- else if(cur_val != 0)/* else if cur_val<>null then l.9176 */
+ case int_val:
+ print_int(cur_val);
+ break;
+
+ case dimen_val:
+ {
+ print_scaled(cur_val);
+ prints("pt");
+ }
+ break;
+
+ case glue_val:
+ {
+ print_spec(cur_val, "pt");
+ delete_glue_ref(cur_val);
+ }
+ break;
+
+ case mu_val:
+ {
+ print_spec(cur_val, "mu");
+ delete_glue_ref(cur_val);
+ }
+ break;
+ }
+
+ selector = old_setting;
+ return str_toks(b);
+ }
+}
+/* sec 0467 */
+void ins_the_toks (void)
+{
+ link(garbage) = the_toks();
+ ins_list(link(temp_head));
+}
+/* sec 0470 */
+void conv_toks (void)
+{
+ char old_setting;
+ char c;
+ small_number save_scanner_status;
+ pool_pointer b;
+
+ c = cur_chr;
+
+ switch (c)
+ {
+ case number_code:
+ case roman_numeral_code:
+ scan_int();
+ break;
+
+ case string_code:
+ case meaning_code:
+ save_scanner_status = scanner_status;
+ scanner_status = 0;
+ get_token();
+ scanner_status = save_scanner_status;
+ break;
+
+ case font_name_code:
+ scan_font_ident();
+ break;
+
+ case job_name_code:
+ if (job_name == 0)
+ open_log_file();
+ break;
+ }
+
+ old_setting = selector;
+ selector = new_string;
+ b = pool_ptr;
+
+ switch (c)
+ {
+ case number_code:
+ print_int(cur_val);
+ break;
+
+ case roman_numeral_code:
+ print_roman_int(cur_val);
+ break;
+
+ case string_code:
+ if (cur_cs != 0)
+ sprint_cs(cur_cs);
+ else
+ print_char(cur_chr);
+ break;
+
+ case meaning_code:
+ print_meaning();
+ break;
+
+ case font_name_code:
+ print(font_name[cur_val]);
+
+ if (font_size[cur_val] != font_dsize[cur_val])
+ {
+ prints(" at ");
+ print_scaled(font_size[cur_val]);
+ prints("pt");
+ }
+ break;
+
+ case job_name_code:
+ print(job_name);
+ break;
+ }
+
+ selector = old_setting;
+ link(garbage) = str_toks(b);
+ begin_token_list(link(temp_head), 4);
+}
+/* sec 0473 */
+halfword scan_toks_(boolean macro_def, boolean xpand)
+{
+ halfword t;
+ halfword s;
+ halfword p;
+ halfword q;
+ halfword unbalance;
+ halfword hash_brace;
+
+ if (macro_def)
+ scanner_status = defining;
+ else
+ scanner_status = absorbing;
+
+ warning_index = cur_cs;
+ def_ref = get_avail();
+ token_ref_count(def_ref) = 0;
+ p = def_ref;
+ hash_brace = 0;
+ t = zero_token;
+
+ if (macro_def)
+ {
+ while (true)
{
- r = mem[cur_val].hh.v.RH;
- while(r != 0){ /* while r<>null do l.9178 */
-
+ get_token();
+
+ if (cur_tok < right_brace_limit)
+ goto done1;
+
+ if (cur_cmd == mac_param)
+ {
+ s = match_token + cur_chr;
+ get_token();
+
+ if (cur_cmd == left_brace)
+ {
+ hash_brace = cur_tok;
+ store_new_token(cur_tok);
+ store_new_token(end_match_token);
+ goto done;
+ }
+
+ if (t == zero_token + 9)
+ {
+ print_err("You already have nine parameters");
+ help1("I'm going to ignore the # sign you just used.");
+ error();
+ }
+ else
+ {
+ incr(t);
+
+ if (cur_tok != t)
+ {
+ print_err("Parameters must be numbered consecutively");
+ help2("I've inserted the digit you should have used after the #.",
+ "Type `1' to delete what you did use.");
+ back_error();
+ }
+
+ cur_tok = s;
+ }
+ }
+
+ store_new_token(cur_tok);
+ }
+
+done1:
+ store_new_token(end_match_token);
+
+ if (cur_cmd == right_brace)
+ {
+ print_err("Missing { inserted");
+ incr(align_state);
+ help2("Where was the left brace? You said something like `\\def\\a}',",
+ "which I'm going to interpret as `\\def\\a{}'.");
+ error();
+ goto found;
+ }
+done:;
+ }
+ else
+ {
+ scan_left_brace();
+ }
+
+ unbalance = 1;
+
+ while (true)
{
+ if (xpand)
{
- q = avail;
- if(q == 0)
- q = get_avail ();
- else {
-
- avail = mem[q].hh.v.RH;
- mem[q].hh.v.RH = 0;
- ;
-#ifdef STAT
- incr(dyn_used);
-#endif /* STAT */
- }
- }
- mem[p].hh.v.RH = q;
- mem[q].hh.v.LH = mem[r].hh.v.LH;
- p = q;
- }
- r = mem[r].hh.v.RH;
- }
- }
- Result = p;
- }
- else {
-
- old_setting = selector;
- selector = 21;
- b = pool_ptr;
- switch(cur_val_level)
- {case 0 :
- print_int(cur_val);
- break;
- case 1 :
+ while (true)
{
- print_scaled(cur_val);
- print(394); /* pt */
- }
- break;
- case 2 :
+ get_next();
+
+ if (cur_cmd <= max_command)
+ goto done2;
+
+ if (cur_cmd != the)
+ {
+ expand();
+ }
+ else
+ {
+ q = the_toks();
+
+ if (link(temp_head) != 0)
+ {
+ link(p) = link(temp_head);
+ p = q;
+ }
+ }
+ }
+done2:
+ x_token();
+ }
+ else
+ get_token();
+
+ if (cur_tok < right_brace_limit)
+ if (cur_cmd < right_brace)
+ incr(unbalance);
+ else
{
- print_spec(cur_val, 394); /* pt */
- delete_glue_ref(cur_val);
- }
- break;
- case 3 :
+ decr(unbalance);
+
+ if (unbalance == 0)
+ goto found;
+ }
+ else if (cur_cmd == mac_param)
+ if (macro_def)
{
- print_spec(cur_val, 334); /* mu */
- delete_glue_ref(cur_val);
- }
- break;
- }
- selector = old_setting;
- Result = str_toks(b);
- }
- return Result;
-}
-void ins_the_toks (void)
-{
- mem[mem_top - 12].hh.v.RH = the_toks ();
- begin_token_list(mem[mem_top - 3].hh.v.RH, 4);
-}
-void conv_toks (void)
-{
- char old_setting;
- char c;
- small_number savescannerstatus;
- pool_pointer b;
- c = cur_chr;
- switch(c)
- {case 0 :
- case 1 :
- {
- scan_int ();
- }
- break;
- case 2 :
- case 3 :
- {
- savescannerstatus = scanner_status;
- scanner_status = 0;
- get_token ();
- scanner_status = savescannerstatus;
- }
- break;
- case 4 :
- scan_font_ident ();
- break;
- case 5 :
- if(job_name == 0)open_log_file ();
- break;
- }
- old_setting = selector;
- selector = 21;
- b = pool_ptr;
- switch(c)
- {case 0 :
- print_int(cur_val);
- break;
- case 1 :
- print_roman_int(cur_val);
- break;
- case 2 :
- if(cur_cs != 0)
- sprint_cs(cur_cs);
- else print_char(cur_chr);
- break;
- case 3 :
- print_meaning ();
- break;
- case 4 :
+ s = cur_tok;
+
+ if (xpand)
+ get_x_token();
+ else
+ get_token();
+
+ if (cur_cmd != mac_param)
+ if ((cur_tok <= zero_token) || (cur_tok > t))
+ {
+ print_err("Illegal parameter number in definition of ");
+ sprint_cs(warning_index);
+ help3("You meant to type ## instead of #, right?",
+ "Or maybe a } was forgotten somewhere earlier, and things",
+ "are all screwed up? I'm going to assume that you meant ##.");
+ back_error();
+ cur_tok = s;
+ }
+ else
+ cur_tok = out_param_token - '0' + cur_chr;
+ }
+
+ store_new_token(cur_tok);
+ }
+found:
+ scanner_status = 0;
+
+ if (hash_brace != 0)
+ store_new_token(hash_brace);
+
+ return p;
+}
+/* used only in ITEX.C */
+/* sec 0482 */
+void read_toks_(integer n, halfword r)
+{
+ halfword p;
+ halfword q;
+ integer s;
+/* small_number m; */
+ int m; /* 95/Jan/7 */
+
+ scanner_status = defining;
+ warning_index = r;
+ def_ref = get_avail();
+ token_ref_count(def_ref) = 0;
+ p = def_ref;
+ store_new_token(end_match_token);
+
+ if ((n < 0) || (n > 15))
+ m = 16;
+ else
+ m = n;
+
+ s = align_state;
+ align_state = 1000000L;
+
+ do
{
- print(font_name[cur_val]);
- if(font_size[cur_val]!= font_dsize[cur_val])
+ begin_file_reading();
+ name = m + 1;
+
+ if (read_open[m] == closed)
+ if (interaction > nonstop_mode)
+ if (n < 0)
+ prompt_input("");
+ else
+ {
+ print_ln();
+ sprint_cs(r);
+ prompt_input("=");
+ n = -1;
+ }
+ else
+ {
+ fatal_error("*** (cannot \\read from terminal in nonstop modes)");
+ return;
+ }
+ else if (read_open[m] == 1)
+ if (input_ln(read_file[m], false))
+ read_open[m] = 0;
+ else
+ {
+ (void) a_close(read_file[m]);
+ read_open[m] = 2;
+ }
+ else
{
- print(738); /* at */
- print_scaled(font_size[cur_val]);
- print(394); /* pt */
- }
- }
- break;
- case 5 :
- print(job_name);
- break;
- }
- selector = old_setting;
- mem[mem_top - 12].hh.v.RH = str_toks(b);
- begin_token_list(mem[mem_top - 3].hh.v.RH, 4);
-}
-halfword scan_toks_(bool macrodef, bool xpand)
-{/* 40 30 31 32 */ register halfword Result;
- halfword t;
- halfword s;
- halfword p;
- halfword q;
- halfword unbalance;
- halfword hashbrace;
- if(macrodef)
- scanner_status = 2;
- else scanner_status = 5;
- warning_index = cur_cs;
- def_ref = get_avail ();
- mem[def_ref].hh.v.LH = 0;
- p = def_ref;
- hashbrace = 0;
- t = 3120;
- if(macrodef)
- {
- while(true){
- get_token ();
- if(cur_tok < 768)
- goto lab31;
- if(cur_cmd == 6)
+ if (!input_ln(read_file[m], true))
+ {
+ (void) a_close(read_file[m]);
+ read_open[m] = 2;
+
+ if (align_state != 1000000L)
+ {
+ runaway();
+ print_err("File ended within ");
+ print_esc("read");
+ help1("This \\read has unbalanced braces.");
+ align_state = 1000000L;
+ error();
+ }
+ }
+ }
+
+ limit = last;
+
+ if (end_line_char_inactive())
+ decr(limit);
+ else
+ buffer[limit] = end_line_char;
+
+ first = limit + 1;
+ loc = start;
+ state = new_line;
+
+ while (true)
{
- s = 3328 + cur_chr;
- get_token ();
- if(cur_cmd == 1)
+ get_token();
+
+ if (cur_tok == 0)
+ goto done;
+
+ if (align_state < 1000000L)
+ {
+ do
+ {
+ get_token();
+ }
+ while (!(cur_tok == 0));
+
+ align_state = 1000000L;
+ goto done;
+ }
+
+ store_new_token(cur_tok);
+ }
+done:
+ end_file_reading();
+ }
+ while (!(align_state == 1000000L));
+
+ cur_val = def_ref;
+ scanner_status = normal;
+ align_state = s;
+}
+/* sec 0494 */
+void pass_text (void)
+{
+ integer l;
+ small_number save_scanner_status;
+
+ save_scanner_status = scanner_status;
+ scanner_status = skipping;
+ l = 0;
+ skip_line = line;
+
+ while (true)
{
- hashbrace = cur_tok;
- {
- q = get_avail ();
- mem[p].hh.v.RH = q;
- mem[q].hh.v.LH = cur_tok;
- p = q;
- }
+ get_next();
+
+ if (cur_cmd == fi_or_else)
{
- q = get_avail ();
- mem[p].hh.v.RH = q;
- mem[q].hh.v.LH = 3584;
- p = q;
- }
- goto lab30;
- }
- if(t == 3129)
+ if (l == 0)
+ goto done;
+
+ if (cur_chr == 2)
+ decr(l);
+ }
+ else if (cur_cmd == if_test)
+ incr(l);
+ }
+done:
+ scanner_status = save_scanner_status;
+}
+/* sec 0497 */
+void change_if_limit_(small_number l, halfword p)
+{
+ halfword q;
+
+ if (p == cond_ptr)
+ if_limit = l;
+ else
{
- print_err("You already have nine parameters");
- help1("I'm going to ignore the # sign you just used.");
- error ();
- }
- else {
-
- incr(t);
- if(cur_tok != t)
+ q = cond_ptr;
+
+ while (true)
{
- print_err("Parameters must be numbered consecutively");
- help2("I've inserted the digit you should have used after the #.",
- "Type `1' to delete what you did use.");
- back_error ();
- }
- cur_tok = s;
- }
- }
+ if (q == 0)
{
- q = get_avail ();
- mem[p].hh.v.RH = q;
- mem[q].hh.v.LH = cur_tok;
- p = q;
- }
- }
- lab31: {
-
- q = get_avail ();
- mem[p].hh.v.RH = q;
- mem[q].hh.v.LH = 3584;
- p = q;
- }
- if(cur_cmd == 2)
- {
- print_err("Missing { inserted");
- incr(align_state);
- help2("Where was the left brace? You said something like `\\def\\a}',",
- "which I'm going to interpret as `\\def\\a{}'.");
- error ();
- goto lab40;
- }
- lab30:;
- }
- else {
- scan_left_brace ();
- }
- unbalance = 1;
- while(true){
- if(xpand){
- while(true){
- get_next ();
- if(cur_cmd <= 100) goto lab32;
- if(cur_cmd != 109){
- expand ();
+ confusion("if");
+ return;
}
- else {
-
- q = the_toks ();
-/* if link(temp_head)<>null then l.9376 */
- if(mem[mem_top - 3].hh.v.RH != 0)
- {
- mem[p].hh.v.RH = mem[mem_top - 3].hh.v.RH;
- p = q;
- }
- }
- }
-lab32:
- x_token ();
- }
- else get_token ();
- if(cur_tok < 768)
- if(cur_cmd < 2) incr(unbalance);
- else {
- decr(unbalance);
- if(unbalance == 0)
- goto lab40;
- }
- else if(cur_cmd == 6)
- if(macrodef) {
- s = cur_tok;
- if(xpand)get_x_token ();
- else get_token ();
- if(cur_cmd != 6)
- if((cur_tok <= 3120)||(cur_tok > t)) {
- print_err("Illegal parameter number in definition of");
- sprint_cs(warning_index);
- help3("You meant to type ## instead of #, right?",
- "Or maybe a } was forgotten somewhere earlier, and things",
- "are all screwed up? I'm going to assume that you meant ##.");
- back_error ();
- cur_tok = s;
- }
- else cur_tok = 1232 + cur_chr;
- }
- {
- q = get_avail ();
- mem[p].hh.v.RH = q;
- mem[q].hh.v.LH = cur_tok;
- p = q;
- }
- }
- lab40: scanner_status = 0;
- if(hashbrace != 0)
+
+ if (link(q) == p)
+ {
+ type(p) = l;
+ return;
+ }
+
+ q = link(q);
+ }
+ }
+}
+/* called from tex2.c */
+/* sec 0498 */
+void conditional (void)
+{
+ boolean b;
+ char r;
+ integer m, n;
+ halfword p, q;
+ small_number save_scanner_status;
+ halfword save_cond_ptr;
+ small_number this_if;
+
{
- q = get_avail ();
- mem[p].hh.v.RH = q;
- mem[q].hh.v.LH = hashbrace;
- p = q;
- }
- Result = p;
- return Result;
-}
-/* used only in ITEX.C */
-void read_toks_(integer n, halfword r)
-{/* 30 */
- halfword p;
- halfword q;
- integer s;
-/* small_number m; */
- int m; /* 95/Jan/7 */
- scanner_status = 2;
- warning_index = r;
- def_ref = get_avail ();
- mem[def_ref].hh.v.LH = 0;
- p = def_ref;
- {
- q = get_avail ();
- mem[p].hh.v.RH = q;
- mem[q].hh.v.LH = 3584;
- p = q;
- }
- if((n < 0)||(n > 15)) m = 16;
- else m = n;
- s = align_state;
- align_state = 1000000L;
- do {
- begin_file_reading ();
- cur_input.name_field = m + 1;
- if(read_open[m]== 2)
- if(interaction > 1)
- if(n < 0) {
- ;
- print(335); /* "" */
- term_input(335, 0);
- }
- else {
- ;
- print_ln ();
- sprint_cs(r);
+ p = get_node(if_node_size);
+ link(p) = cond_ptr;
+ type(p) = if_limit;
+ subtype(p) = cur_if;
+ if_line_field(p) = if_line;
+ cond_ptr = p;
+ cur_if = cur_chr;
+ if_limit = if_code;
+ if_line = line;
+ }
+
+ save_cond_ptr = cond_ptr;
+ this_if = cur_chr;
+
+ switch (this_if)
+ {
+ case if_char_code:
+ case if_cat_code:
+ {
+ {
+ get_x_token();
+
+ if (cur_cmd == relax)
+ if (cur_chr == no_expand_flag)
+ {
+ cur_cmd = active_char;
+ cur_chr = cur_tok - cs_token_flag - active_base;
+ }
+ }
+
+ if ((cur_cmd > active_char) || (cur_chr > 255))
+ {
+ m = relax;
+ n = 256;
+ }
+ else
+ {
+ m = cur_cmd;
+ n = cur_chr;
+ }
+ {
+ get_x_token();
+
+ if (cur_cmd == relax)
+ if (cur_chr == no_expand_flag)
+ {
+ cur_cmd = active_char;
+ cur_chr = cur_tok - cs_token_flag - active_base;
+ }
+ }
+
+ if ((cur_cmd > active_char) || (cur_chr > 255))
+ {
+ cur_cmd = relax;
+ cur_chr = 256;
+ }
+
+ if (this_if == if_char_code)
+ b = (n == cur_chr);
+ else
+ b = (m == cur_cmd);
+ }
+ break;
+
+ case if_int_code:
+ case if_dim_code:
+ {
+ if (this_if == if_int_code)
+ scan_int();
+ else
+ scan_dimen(false, false, false);
+
+ n = cur_val;
+
+ do
{
- ;
- print(61); /* = */
- term_input(61, 0);
- }
- n = -1;
- }
- else {
- fatal_error(750); /* *** (cannot \read from terminal in nonstop modes) */
- return; // abort_flag set
+ get_x_token();
+ }
+ while (!(cur_cmd != spacer));
+
+ if ((cur_tok >= other_token + '<') && (cur_tok <= other_token + '>'))
+ r = cur_tok - other_token;
+ else
+ {
+ print_err("Missing = inserted for ");
+ print_cmd_chr(if_test, this_if);
+ help1("I was expecting to see `<', `=', or `>'. Didn't.");
+ back_error();
+ r = '=';
+ }
+
+ if (this_if == if_int_code)
+ scan_int();
+ else
+ scan_dimen(false, false, false);
+
+ switch (r)
+ {
+ case '<':
+ b = (n < cur_val);
+ break;
+
+ case '=':
+ b = (n == cur_val);
+ break;
+
+ case '>':
+ b = (n > cur_val);
+ break;
+ }
}
- else if(read_open[m]== 1)
- if(input_ln(read_file[m], false))
- read_open[m]= 0;
- else {
- (void) a_close(read_file[m]);
- read_open[m]= 2;
- }
- else {
- if(! input_ln(read_file[m], true)) {
- (void) a_close(read_file[m]);
- read_open[m]= 2;
- if(align_state != 1000000L) {
- runaway ();
- print_err("File ended within");
- print_esc(531); /* read */
- help1("This \\read has unbalanced braces.");
- align_state = 1000000L;
- error ();
- }
- }
- }
- cur_input.limit_field = last;
- if((eqtb[(hash_size + 3211)].cint < 0)||(eqtb[(hash_size + 3211)].cint > 255))
- decr(cur_input.limit_field);
-/* long to unsigned char ... */
- else buffer[cur_input.limit_field]= eqtb[(hash_size + 3211)].cint;
- first = cur_input.limit_field + 1;
- cur_input.loc_field = cur_input.start_field;
- cur_input.state_field = 33;
- while(true){
- get_token ();
- if(cur_tok == 0)
- goto lab30;
- if(align_state < 1000000L)
+ break;
+
+ case if_odd_code:
+ scan_int();
+ b = odd(cur_val);
+ break;
+
+ case if_vmode_code:
+ b = (abs(mode) == vmode);
+ break;
+
+ case if_hmode_code:
+ b = (abs(mode) == hmode);
+ break;
+
+ case if_mmode_code:
+ b = (abs(mode) == mmode);
+ break;
+
+ case if_inner_code:
+ b = (mode < 0);
+ break;
+
+ case if_void_code:
+ case if_hbox_code:
+ case if_vbox_code:
{
- do {
- get_token ();
- } while(!(cur_tok == 0));
- align_state = 1000000L;
- goto lab30;
- }
+ scan_eight_bit_int();
+ p = box(cur_val);
+
+ if (this_if == if_void_code)
+ b = (p == 0);
+ else if (p == 0)
+ b = false;
+ else if (this_if == if_hbox_code)
+ b = (type(p) == hlist_node);
+ else
+ b = (type(p) == vlist_node);
+ }
+ break;
+
+ case ifx_code:
{
- q = get_avail ();
- mem[p].hh.v.RH = q;
- mem[q].hh.v.LH = cur_tok;
- p = q;
- }
- }
- lab30: end_file_reading ();
- } while(!(align_state == 1000000L));
- cur_val = def_ref;
- scanner_status = 0;
- align_state = s;
-}
-void pass_text (void)
-{/* 30 */
- integer l;
- small_number savescannerstatus;
- savescannerstatus = scanner_status;
- scanner_status = 1;
- l = 0;
- skip_line = line;
- while(true){
- get_next ();
- if(cur_cmd == 106){
- if(l == 0) goto lab30;
- if(cur_chr == 2)
- decr(l);
- }
- else if(cur_cmd == 105) incr(l);
- }
-lab30: scanner_status = savescannerstatus;
-}
-void change_if_limit_(small_number l, halfword p)
-{/* 10 */
- halfword q;
- if(p == cond_ptr)
- if_limit = l;
- else {
- q = cond_ptr;
- while(true){
- if(q == 0) { /* begin if q=null then confusion("if"); l.9674 */
- confusion(753); /* if */
- return; // abort_flag set
- }
- if(mem[q].hh.v.RH == p)
+ save_scanner_status = scanner_status;
+ scanner_status = 0;
+ get_next();
+ n = cur_cs;
+ p = cur_cmd;
+ q = cur_chr;
+ get_next();
+
+ if (cur_cmd != p)
+ b = false;
+ else if (cur_cmd < call)
+ b = (cur_chr == q);
+ else
+ {
+ p = link(cur_chr);
+ q = link(equiv(n));
+
+ if (p == q)
+ b = true;
+ else
+ {
+ while ((p != 0) && (q != 0))
+ if (info(p) != info(q))
+ p = 0;
+ else
+ {
+ p = link(p);
+ q = link(q);
+ }
+
+ b = ((p == 0) && (q == 0));
+ }
+ }
+
+ scanner_status = save_scanner_status;
+ }
+ break;
+
+ case if_eof_code:
{
- mem[q].hh.b0 = l;
- return;
- }
- q = mem[q].hh.v.RH;
- }
- }
-}
-/* called from tex2.c */
-void conditional (void)
-{/* 10 50 */
- bool b;
- char r;
- integer m, n;
- halfword p, q;
- small_number savescannerstatus;
- halfword savecondptr;
- small_number thisif;
-
- {
-/* begin p:=get_node(if_node_size); */
- p = get_node(2); /* p <- get_node(if_node_size); p.495*/
-/* link(p):=cond_ptr; */
- mem[p].hh.v.RH = cond_ptr;
-/* type(p):=if_limit; */
- mem[p].hh.b0 = if_limit;
-/* subtype(p):=cur_if; */
- mem[p].hh.b1 = cur_if;
-/* if_line_field(p):=if_line; */
- mem[p + 1].cint = if_line;
- cond_ptr = p;
- cur_if = cur_chr;
- if_limit = 1;
- if_line = line;
- }
- savecondptr = cond_ptr; /* save_cond_ptr <- cond_ptr; p.498 */
- thisif = cur_chr;
- switch(thisif)
- {case 0 :
- case 1 :
- {
+ scan_four_bit_int();
+ b = (read_open[cur_val] == closed);
+ }
+ break;
+
+ case if_true_code:
+ b = true;
+ break;
+
+ case if_false_code:
+ b = false;
+ break;
+
+ case if_case_code:
{
- get_x_token ();
- if(cur_cmd == 0) /* if cur_cmd = relax then .. p.506 */
- if(cur_chr == 257) /* if cur_chr = no_expand_flag then ... p.506 */
+ scan_int();
+ n = cur_val;
+
+ if (tracing_commands > 1)
+ {
+ begin_diagnostic();
+ prints("{case ");
+ print_int(n);
+ print_char('}');
+ end_diagnostic(false);
+ }
+
+ while (n != 0)
+ {
+ pass_text();
+
+ if (cond_ptr == save_cond_ptr)
+ if (cur_chr == or_code)
+ decr(n);
+ else
+ goto common_ending;
+ else if (cur_chr == fi_code)
+ {
+ p = cond_ptr;
+ if_line = if_line_field(p);
+ cur_if = subtype(p);
+ if_limit = type(p);
+ cond_ptr = link(p);
+ free_node(p, if_node_size);
+ }
+ }
+
+ change_if_limit(or_code, save_cond_ptr);
+ return;
+ }
+ break;
+ }
+
+ if (tracing_commands > 1)
+ {
+ begin_diagnostic();
+
+ if (b)
+ prints("{true}");
+ else
+ prints("{false}");
+
+ end_diagnostic(false);
+ }
+
+ if (b)
{
- cur_cmd = 13;
- cur_chr = cur_tok - 4096;
- }
- }
- if((cur_cmd > 13)||(cur_chr > 255))
- {
- m = 0;
- n = 256;
- }
- else {
-
- m = cur_cmd;
- n = cur_chr;
- }
- {
- get_x_token ();
- if(cur_cmd == 0) /* if cur_cmd = relax then .. p.506 */
- if(cur_chr == 257) /* if cur_chr = no_expand_flag then ... p.506 */
+ change_if_limit(else_code, save_cond_ptr);
+ return;
+ }
+
+ while (true)
{
- cur_cmd = 13;
- cur_chr = cur_tok - 4096;
- }
- }
- if((cur_cmd > 13)||(cur_chr > 255))
- {
- cur_cmd = 0;
- cur_chr = 256;
- }
- if(thisif == 0)
- b =(n == cur_chr);
- else b =(m == cur_cmd);
- }
- break;
- case 2 :
- case 3 :
+ pass_text();
+
+ if (cond_ptr == save_cond_ptr)
{
- if(thisif == 2){
- scan_int ();
- }
- else {
- scan_dimen(false, false, false);
+ if (cur_chr != or_code)
+ goto common_ending;
+
+ print_err("Extra ");
+ print_esc("or");
+ help1("I'm ignoring this; it doesn't match any \\if.");
+ error();
}
- n = cur_val;
- do {
- get_x_token ();
- } while(!(cur_cmd != 10));
- if((cur_tok >= 3132)&&(cur_tok <= 3134))
- r = cur_tok - 3072;
- else {
- print_err("Missing = inserted for ");
- print_cmd_chr(105, thisif); /* i */
- help1("I was expecting to see `<', `=', or `>'. Didn't.");
- back_error ();
- r = 61;
- }
- if(thisif == 2){
- scan_int ();
+ else if (cur_chr == fi_code)
+ {
+ p = cond_ptr;
+ if_line = if_line_field(p);
+ cur_if = subtype(p);
+ if_limit = type(p);
+ cond_ptr = link(p);
+ free_node(p, if_node_size);
}
- else {
- scan_dimen(false, false, false);
- }
- switch(r)
- {case 60 :
- b =(n < cur_val);
- break;
- case 61 :
- b =(n == cur_val);
- break;
- case 62 :
- b =(n > cur_val);
- break;
- }
- }
- break;
- case 4 :
- {
- scan_int ();
- b = odd(cur_val);
- }
- break;
- case 5 :
- b =(abs(mode)== 1);
- break;
- case 6 :
- b =(abs(mode)== 102);
- break;
- case 7 :
- b =(abs(mode)== 203);
- break;
- case 8 :
- b =(mode < 0);
- break;
- case 9 :
- case 10 :
- case 11 :
- {
- scan_eight_bit_int ();
- p = eqtb[(hash_size + 1578) + cur_val].hh.v.RH;
- if(thisif == 9)
- b =(p == 0);
- else if(p == 0)
- b = false;
- else if(thisif == 10)
- b =(mem[p].hh.b0 == 0);
- else b =(mem[p].hh.b0 == 1);
- }
- break;
- case 12 :
- {
- savescannerstatus = scanner_status;
- scanner_status = 0;
- get_next ();
- n = cur_cs;
- p = cur_cmd;
- q = cur_chr;
- get_next ();
- if(cur_cmd != p) b = false;
- else if(cur_cmd < 111) b =(cur_chr == q);
- else {
-
- p = mem[cur_chr].hh.v.RH;
- q = mem[eqtb[n].hh.v.RH].hh.v.RH;
- if(p == q)
- b = true;
- else {
-/* else begin while (p<>null)and(q<>null) do l.9840 */
- while((p != 0)&&(q != 0)) if(mem[p].hh.v.LH != mem[
- q].hh.v.LH)
- p = 0; /* p:=null */
- else {
-
- p = mem[p].hh.v.RH;
- q = mem[q].hh.v.RH;
- }
- b =((p == 0)&&(q == 0)); /* b:=((p=null)and(q=null)); */
- }
- }
- scanner_status = savescannerstatus;
- }
- break;
- case 13 :
- {
- scan_four_bit_int ();
- b =(read_open[cur_val]== 2);
- }
- break;
- case 14 :
- b = true;
- break;
- case 15 :
- b = false;
- break;
- case 16 :
- {
- scan_int ();
- n = cur_val;
- if(eqtb[(hash_size + 3199)].cint > 1)
- {
- begin_diagnostic ();
- print(779); /* {case */
- print_int(n);
- print_char(125); /* } */
- end_diagnostic(false);
- }
- while(n != 0){
-
- pass_text ();
- if(cond_ptr == savecondptr)
- if(cur_chr == 4)
- decr(n);
- else goto lab50;
- else if(cur_chr == 2)
- {
- p = cond_ptr;
- if_line = mem[p + 1].cint;
- cur_if = mem[p].hh.b1;
- if_limit = mem[p].hh.b0;
- cond_ptr = mem[p].hh.v.RH;
- free_node(p, 2);
- }
- }
- change_if_limit(4, savecondptr);
- return;
- }
- break;
- }
- if(eqtb[(hash_size + 3199)].cint > 1)
- {
- begin_diagnostic ();
- if(b)
- print(775); /* {true}*/
- else print(776); /* {false}*/
- end_diagnostic(false);
- }
- if(b) /* b may be used without ... */
+ }
+
+common_ending:
+ if (cur_chr == fi_code)
{
- change_if_limit(3, savecondptr);
- return;
- }
- while(true){
- pass_text ();
- if(cond_ptr == savecondptr)
- {
- if(cur_chr != 4)
- goto lab50;
- print_err("Extra ");
- print_esc(771); /* or */
- help1("I'm ignoring this; it doesn't match any \\if.");
- error ();
- }
- else if(cur_chr == 2)
- {
- p = cond_ptr;
- if_line = mem[p + 1].cint;
- cur_if = mem[p].hh.b1;
- if_limit = mem[p].hh.b0;
- cond_ptr = mem[p].hh.v.RH;
- free_node(p, 2);
- }
- }
- lab50: if(cur_chr == 2)
- {
- p = cond_ptr;
- if_line = mem[p + 1].cint;
- cur_if = mem[p].hh.b1;
- if_limit = mem[p].hh.b0;
- cond_ptr = mem[p].hh.v.RH;
- free_node(p, 2);
- }
- else if_limit = 2;
-}
-void begin_name (void)
+ p = cond_ptr;
+ if_line = if_line_field(p);
+ cur_if = subtype(p);
+ if_limit = type(p);
+ cond_ptr = link(p);
+ free_node(p, if_node_size);
+ }
+ else
+ if_limit = fi_code;
+}
+/* sec 0515 */
+void begin_name (void)
{
- area_delimiter = 0; /* index between `file area' and `file name' */
- ext_delimiter = 0; /* index between `file name' and `file extension' */
-}
+ area_delimiter = 0;
+ ext_delimiter = 0;
+}
/* This gathers up a file name and makes a string of it */
/* Also tries to break it into `file area' `file name' and `file extension' */
/* Used by scan_file_name and prompt_file_name */
/* We assume tilde has been converted to pseudo_tilde and space to pseudo_space */
/* returns false if it is given a space character - end of file name */
-bool more_name_(ASCII_code c)
-{register bool Result;
-
-/* if(c == 32)*/ /* white space delimits file name ... */
- if (quoted_file_name == 0 && c == 32)
- Result = false;
- else if (quoted_file_name != 0 && c == '"') {
- quoted_file_name = 0; /* catch next space character */
- Result = true; /* accept ending quote, but throw away */
- }
- else {
-/* *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** */
-/* convert pseudo tilde back to '~' 95/Sep/26 */ /* moved here 97/June/5 */
-/* if (pseudo_tilde != 0 && c == pseudo_tilde) c = '~'; */
-/* convert pseudo space back to ' ' 97/June/5 */ /* moved here 97/June/5 */
-/* if (pseudo_space != 0 && c == pseudo_space) c = ' '; */
-/* *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** */
- {
-/* *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** */
-#ifdef ALLOCATESTRING
- if(pool_ptr + 1 > current_pool_size)
- str_pool = realloc_str_pool (increment_pool_size);
- if(pool_ptr + 1 > current_pool_size) { /* in case it failed 94/Jan/24 */
- overflow(257, current_pool_size - init_pool_ptr); /* 97/Mar/7 */
- return 0; // abort_flag set
- }
-#else
-/* *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** */
- if(pool_ptr + 1 > pool_size){
- overflow(257, pool_size - init_pool_ptr); /* pool size */
- return 0; // abort_flag set
- }
-#endif
- }
- {
- str_pool[pool_ptr]= c;
- incr(pool_ptr);
- }
-/* *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** */
-// if((c == 47)) /* / */
-// for DOS/Windows
- if((c == '/' || c == '\\' || c == ':')) /* 94/Mar/1 */
-/* *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** */
+/* sec 0516 */
+boolean more_name_(ASCII_code c)
+{
+ if (quoted_file_name == 0 && c == ' ')
+ return false;
+ else if (quoted_file_name != 0 && c == '"')
+ {
+ quoted_file_name = 0; /* catch next space character */
+ return true; /* accept ending quote, but throw away */
+ }
+ else
+ {
+ str_room(1);
+ append_char(c);
+ // for DOS/Windows
+ if ((c == '/' || c == '\\' || c == ':'))
{
- area_delimiter =(pool_ptr - str_start[str_ptr]);
- ext_delimiter = 0;
+ area_delimiter = cur_length;
+ ext_delimiter = 0;
}
- else if(c == 46) /* . */
- ext_delimiter =(pool_ptr - str_start[str_ptr]);
- Result = true;
- }
- return Result;
-}
-/******************************** 2000 August 15th start ***********************/
-
-// The following code is to save string space used by TeX for filenames
-// Not really critical in a system that has dynamic memory allocation
-// And may slow it down slightly - although this linear search only
-// occurs when opening a file, which is somewhat slow inany case...
+ else if (c == '.')
+ ext_delimiter = cur_length;
-// see if string from str_pool[start] to str_pool[end]
-// occurs elsewhere in string pool - returns string number
-// returns -1 if not found in string pool 2000 Aug 15
-
-int find_string (int start, int end)
-{
- int k, nlen=end-start;
- char *s;
-
-// int trace_flag = 1; // debugging only
-
- if (trace_flag) {
- sprintf(log_line, "\nLOOKING for string (str_ptr %d nlen %d) ", str_ptr, end-start);
- s = log_line + strlen(log_line);
- strncpy(s, str_pool+start, nlen);
- strcpy(s+nlen, "");
- show_line(log_line, 0);
- }
-
-// avoid problems with(cur_name == flushablestring)by going only up to str_ptr-1
-// code in new_font (tex8.c) will take care of reuse of font name already
-// for (k = 0; k < str_ptr; k++) {
- for (k = 0; k < str_ptr-1; k++) {
- if ((str_start[k+1] - str_start[k]) != nlen) continue;
- if (strncmp(str_pool+start, str_pool+str_start[k], nlen) == 0) {
- if (trace_flag) {
- sprintf(log_line, "\nFOUND the string %d (%d) ", k, str_start[k+1]-str_start[k]);
- s = log_line + strlen(log_line);
- strncpy(s, str_pool+start, nlen);
- strcpy(s+nlen, "\n");
- show_line(log_line, 0);
- }
- return k; // return number of matching string
- }
+ return true;
}
- if (trace_flag) {
- sprintf(log_line, "\nNOT FOUND string ");
- s = log_line + strlen(log_line);
- strncpy(s, str_pool+start, nlen);
- strcpy(s+nlen, "\n");
- show_line(log_line, 0);
- }
- return -1; // no match found
-}
-
-// snip out the string from str_pool[start] to str_pool[end]
-// and move everything above it down 2000 Aug 15
-
-void remove_string (int start, int end)
-{
- int nlen = pool_ptr - end; // how many bytes to move down
- char *s;
-
-// int trace_flag=1; // debugging only
-// if (end < start) show_line("\nEND < START", 1);
-// if (pool_ptr < end) show_line("\nPOOLPTR < END", 1);
-
- if (trace_flag) {
- int n = end-start;
- sprintf(log_line, "\nSTRIPPING OUT %d %d ", n, nlen);
- s = log_line + strlen(log_line);
- strncpy(s, str_pool+start, n);
- strcpy(s+n, "\n");
- show_line(log_line, 0);
- }
- if (nlen > 0) memcpy(str_pool+start, str_pool+end, nlen);
- pool_ptr = start + nlen; // poolprt - (end-start);
-}
-
-void show_string (int k)
-{ // debugging code
- int nlen = str_start[k+1] - str_start[k];
- char *s;
-
- sprintf(log_line, "\nSTRING %5d (%3d) %5d--%5d ",
- k, nlen, str_start[k], str_start[k+1]);
- s = log_line + strlen(log_line);
- strncpy(s, str_pool+str_start[k], nlen);
- strcpy(s + nlen, "");
- show_line(log_line, 0);
-}
-
-void show_all_strings (void)
-{ // debugging code
- int k;
- for (k = 0; k < str_ptr; k++) show_string(k);
}
-// int notfirst=0; // debugging only
-
-/********************************** 2000 August 15 end ****************************/
-
+/* sec 0517 */
void end_name (void)
-{
-/* *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** */
+{
#ifdef ALLOCATESTRING
- if(str_ptr + 3 > current_max_strings)
-/* str_start = realloc_str_start(increment_max_strings); */
+ if (str_ptr + 3 > current_max_strings)
str_start = realloc_str_start(increment_max_strings + 3);
- if(str_ptr + 3 > current_max_strings){ /* in case it failed 94/Jan/24 */
- overflow(258, current_max_strings - init_str_ptr); /* 97/Mar/7 */
- return; // abort_flag set
+
+ if (str_ptr + 3 > current_max_strings)
+ {
+ overflow("number of strings", current_max_strings - init_str_ptr);
+ return;
}
#else
-/* *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** */
- if(str_ptr + 3 > max_strings){
- overflow(258, max_strings - init_str_ptr); /* number of strings */
- return; // abort_flag set
+ if (str_ptr + 3 > max_strings)
+ {
+ overflow("number of strings", max_strings - init_str_ptr);
+ return;
}
#endif
-// if (notfirst++ == 0) show_all_strings(); // debugging only
-
- if(area_delimiter == 0) // no area delimiter ':' '/' or '\' found
+ if (area_delimiter == 0) // no area delimiter ':' '/' or '\' found
cur_area = 335; // "" default area
- else {
- if (save_strings_flag &&
- (cur_area = find_string(str_start[str_ptr], str_start[str_ptr]+area_delimiter)) > 0) {
- remove_string(str_start[str_ptr], str_start[str_ptr] + area_delimiter);
- area_delimiter = 0; // area_delimiter - area_delimiter;
- if (ext_delimiter != 0) ext_delimiter = ext_delimiter - area_delimiter;
-// str_start[str_ptr + 1]= str_start[str_ptr]+ area_delimiter; // test only
-// incr(str_ptr); // test only
- }
- else { // carve out string for "cur_area"
- cur_area = str_ptr;
- str_start[str_ptr + 1]= str_start[str_ptr]+ area_delimiter;
- incr(str_ptr);
- }
- }
- if(ext_delimiter == 0){ // no extension delimiter '.' found
- cur_ext = 335; // "" default extension
- if (save_strings_flag &&
- (cur_name = find_string(str_start[str_ptr], pool_ptr)) > 0) {
- remove_string(str_start[str_ptr], pool_ptr);
-// (void) make_string (); // test only
+ else
+ {
+ cur_area = str_ptr;
+ str_start[str_ptr + 1] = str_start[str_ptr] + area_delimiter;
+ incr(str_ptr);
}
- else // Make string from str_start[str_ptr]to pool_ptr
- cur_name = make_string ();
+
+ if (ext_delimiter == 0) // no extension delimiter '.' found
+ {
+ cur_ext = 335; // "" default extension
+ cur_name = make_string();
}
- else { // did find an extension
- if (save_strings_flag &&
- (cur_name = find_string(str_start[str_ptr], str_start[str_ptr] + ext_delimiter - area_delimiter-1)) > 0) {
- remove_string(str_start[str_ptr], str_start[str_ptr] + ext_delimiter - area_delimiter - 1);
-// str_start[str_ptr + 1]= str_start[str_ptr]+ ext_delimiter - area_delimiter - 1; // test only
-// incr(str_ptr); // test only
- }
- else { // carve out string for "cur_name"
- cur_name = str_ptr;
- str_start[str_ptr + 1]= str_start[str_ptr]+ ext_delimiter - area_delimiter - 1;
+ else // did find an extension
+ {
+ cur_name = str_ptr;
+ str_start[str_ptr + 1] = str_start[str_ptr] + ext_delimiter - area_delimiter - 1;
incr(str_ptr);
- }
- if (save_strings_flag &&
- (cur_ext = find_string(str_start[str_ptr], pool_ptr)) > 0) {
- remove_string(str_start[str_ptr], pool_ptr);
-// (void) make_string (); // test only
- }
- else // Make string from str_start[str_ptr]to pool_ptr
- cur_ext = make_string ();
+ cur_ext = make_string();
}
}
/* n current name, a current area, e current extension */
/* result in name_of_file[] */
-
+/* sec 0519 */
void pack_file_name_(str_number n, str_number a, str_number e)
-{
- integer k;
- ASCII_code c;
- pool_pointer j;
- k = 0;
- {register integer for_end; j = str_start[a];
- for_end = str_start[a + 1]- 1; if(j <= for_end) do
- {
- c = str_pool[j];
- incr(k);
- if(k <= PATHMAX)
- name_of_file[k]= xchr[c];
- }
- while(j++ < for_end); }
- {register integer for_end; j = str_start[n];
- for_end = str_start[n + 1]- 1; if(j <= for_end) do
- {
- c = str_pool[j];
- incr(k);
- if(k <= PATHMAX)
- name_of_file[k]= xchr[c];
- }
- while(j++ < for_end); }
- {register integer for_end; j = str_start[e];
- for_end = str_start[e + 1]- 1; if(j <= for_end) do
- {
- c = str_pool[j];
- incr(k);
- if(k <= PATHMAX)
- name_of_file[k]= xchr[c];
- }
- while(j++ < for_end); }
- if(k < PATHMAX)name_length = k;
- else name_length = PATHMAX - 1;
+{
+ integer k;
+ ASCII_code c;
+ pool_pointer j;
+
+ k = 0;
+
+ for (j = str_start[a]; j <= str_start[a + 1] - 1; j++)
+ {
+ c = str_pool[j];
+ incr(k);
+
+ if (k <= file_name_size)
+ name_of_file[k] = xchr[c];
+ }
+
+ for (j = str_start[n]; j <= str_start[n + 1] - 1; j++)
+ {
+ c = str_pool[j];
+ incr(k);
+
+ if (k <= file_name_size)
+ name_of_file[k] = xchr[c];
+ }
+
+ for (j = str_start[e]; j <= str_start[e + 1] - 1; j++)
+ {
+ c = str_pool[j];
+ incr(k);
+
+ if (k <= file_name_size)
+ name_of_file[k] = xchr[c];
+ }
+
+ if (k < file_name_size)
+ name_length = k;
+ else
+ name_length = file_name_size - 1;
+
/* pad it out with spaces ... what for ? in case we modify and forget ? */
- {register integer for_end; k = name_length + 1; for_end = PATHMAX;
- if(k <= for_end) do name_of_file[k]= ' ';
- while(k++ < for_end); }
- name_of_file[PATHMAX]= '\0'; /* paranoia 94/Mar/24 */
+ for (k = name_length + 1; k <= file_name_size; k++)
+ name_of_file[k] = ' ';
+
+ name_of_file[file_name_size] = '\0'; /* paranoia 94/Mar/24 */
+
{
name_of_file [name_length+1] = '\0';
- if (trace_flag) {
- sprintf(log_line, " pack_file_name `%s' (%d) ",
- name_of_file+1, name_length); /* debugging */
+
+ if (trace_flag)
+ {
+ sprintf(log_line, " pack_file_name `%s' (%lld) ", name_of_file + 1, name_length); /* debugging */
show_line(log_line, 0);
}
- name_of_file [name_length+1] = ' ';
- }
-}
+ name_of_file [name_length + 1] = ' ';
+ }
+}
/* Called only from two places tex9.c for format name - specified and default */
/* for specified format name args are 0, a, b name in buffer[a] --- buffer[b] */
/* for default args are format_default_length-4, 1, 0 */
+/* sec 0523 */
void pack_buffered_name_(small_number n, integer a, integer b)
-{
- integer k;
- ASCII_code c;
- integer j;
- if(n + b - a + 5 > PATHMAX)
- b = a + PATHMAX - n - 5;
- k = 0;
+{
+ integer k;
+ ASCII_code c;
+ integer j;
+
+ if (n + b - a + 5 > file_name_size)
+ b = a + file_name_size - n - 5;
+
+ k = 0;
+
/* This loop kicks in when we want the default format name */
- {register integer for_end; j = 1; for_end = n; if(j <= for_end) do
- {
- c = xord[TEX_format_default[j]];
- incr(k);
- if(k <= PATHMAX)
- name_of_file[k]= xchr[c];
- }
- while(j++ < for_end); }
+ for (j = 1; j <= n; j++)
+ {
+ c = xord[TEX_format_default[j]];
+ incr(k);
+
+ if (k <= file_name_size)
+ name_of_file[k] = xchr[c];
+ }
/* This loop kicks in when we want a specififed format name */
- {register integer for_end; j = a; for_end = b; if(j <= for_end) do
- {
- c = buffer[j];
- incr(k);
- if(k <= PATHMAX)
- name_of_file[k]= xchr[c];
- }
- while(j++ < for_end); }
+ for (j = a; j <= b; j++)
+ {
+ c = buffer[j];
+ incr(k);
+
+ if (k <= file_name_size)
+ name_of_file[k] = xchr[c];
+ }
+
/* This adds the extension from the default format name */
- {register integer for_end; j = format_default_length - 3; for_end =
- format_default_length; if(j <= for_end) do
- {
- c = xord[TEX_format_default[j]];
- incr(k);
- if(k <= PATHMAX)
- name_of_file[k]= xchr[c];
- }
- while(j++ < for_end); }
- if(k < PATHMAX)
- name_length = k;
- else name_length = PATHMAX - 1;
-/* pad it out with spaces ... what for ? */
- {register integer for_end; k = name_length + 1; for_end = PATHMAX; if(k
- <= for_end) do
- name_of_file[k]= ' ';
- while(k++ < for_end); }
- name_of_file[PATHMAX]= '\0'; /* paranoia 94/Mar/24 */
-}
-
-str_number make_name_string (void)
-{register str_number Result;
- integer k;
-/* *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** */
+ for (j = format_default_length - 3; j <= format_default_length; j++)
+ {
+ c = xord[TEX_format_default[j]];
+ incr(k);
+
+ if (k <= file_name_size)
+ name_of_file[k] = xchr[c];
+ }
+
+ if (k < file_name_size)
+ name_length = k;
+ else
+ name_length = file_name_size - 1;
+
+ /* pad it out with spaces ... what for ? */
+ for (k = name_length + 1; k <= file_name_size; k++)
+ name_of_file[k]= ' ';
+
+ name_of_file[file_name_size] = '\0'; /* paranoia 94/Mar/24 */
+}
+/* sec 0525 */
+str_number make_name_string (void)
+{
+ integer k;
+
#ifdef ALLOCATESTRING
- if(pool_ptr + name_length > current_pool_size)
-/* str_pool = realloc_str_pool (increment_pool_size); */
- str_pool = realloc_str_pool (increment_pool_size + name_length);
- if(str_ptr == current_max_strings)
+ if (pool_ptr + name_length > current_pool_size)
+ str_pool = realloc_str_pool(increment_pool_size + name_length);
+
+ if (str_ptr == current_max_strings)
str_start = realloc_str_start(increment_max_strings);
- if((pool_ptr + name_length > current_pool_size)||
- (str_ptr == current_max_strings)||
- ((pool_ptr - str_start[str_ptr])> 0))
+
+ if ((pool_ptr + name_length > current_pool_size) || (str_ptr == current_max_strings) || (cur_length > 0))
#else
-/* *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** */
- if((pool_ptr + name_length > pool_size)||(str_ptr == max_strings)||
- ((pool_ptr - str_start[str_ptr])> 0))
+ if ((pool_ptr + name_length > pool_size) || (str_ptr == max_strings) || (cur_length > 0))
#endif
- Result = 63;
- else {
-
- {register integer for_end; k = 1; for_end = name_length; if(k <= for_end) do
- {
- str_pool[pool_ptr]= xord[name_of_file[k]];
-// sprintf(log_line, "%d => %d ", name_of_file[k], xord[name_of_file[k]]);
-// show_line(log_line, 0); // debugging only
- incr(pool_ptr);
- }
- while(k++ < for_end); }
- Result = make_string ();
- }
- return Result;
-}
-
-str_number a_make_name_string_(alpha_file * f)
-{register str_number Result;
- Result = make_name_string ();
- return Result;
-} /* f unreferenced ? bkph */
-
-str_number b_make_name_string_(byte_file * f)
-{register str_number Result;
- Result = make_name_string ();
- return Result;
-} /* f unreferenced ? bkph */
-
-str_number w_make_name_string_(word_file * f)
-{register str_number Result;
- Result = make_name_string ();
- return Result;
-} /* f unreferenced ? bkph */
+ {
+ return '?';
+ }
+ else
+ {
+ for (k = 1; k <= name_length; k++)
+ append_char(xord[name_of_file[k]]);
+
+ return make_string();
+ }
+}
+/* sec 0525 */
+//str_number a_make_name_string_(alpha_file * f)
+str_number a_make_name_string_(void)
+{
+ return make_name_string();
+}
+/* sec 0525 */
+//str_number b_make_name_string_(byte_file * f)
+str_number b_make_name_string_(void)
+{
+ return make_name_string();
+}
+/* sec 0525 */
+//str_number w_make_name_string_(word_file * f)
+str_number w_make_name_string_(void)
+{
+ return make_name_string();
+}
/* Used by start_input to scan file name on command line */
/* Also in tex8.c new_font_, open_or_close_in, and do_extension */
+/* sec 0526 */
+void scan_file_name (void)
+{
+ name_in_progress = true;
+ begin_name();
-void scan_file_name (void)
-{/* 30 */
- name_in_progress = true;
- begin_name ();
- do {
- get_x_token ();
- } while(!(cur_cmd != 10)); /* until cur_cmd != spacer */
- quoted_file_name = 0; /* 98/March/15 */
- if (allow_quoted_names) { /* check whether quoted name */
- if(cur_chr == '"') {
- quoted_file_name = 1;
- get_x_token ();
- }
+ do
+ {
+ get_x_token();
+ }
+ while (!(cur_cmd != spacer));
+
+ quoted_file_name = false;
+
+ if (allow_quoted_names)
+ {
+ if (cur_chr == '"')
+ {
+ quoted_file_name = true;
+ get_x_token();
+ }
}
- while(true){
- if((cur_cmd > 12)||(cur_chr > 255))
- { /* (cur_cmd > otherchar) OR (cur_chr > 255) */
- back_input (); /* not a character put it back and leave */
- goto lab30;
+
+ while (true)
+ {
+ if ((cur_cmd > other_char) || (cur_chr > 255))
+ {
+ back_input();
+ goto done;
}
-/* *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** */
-/* convert tilde '~' to pseudo tilde */
-/* if (pseudo_tilde != 0 && cur_chr == '~') cur_chr = pseudo_tilde; */
-/* convert space ' ' to pseudo space */
-/* if (pseudo_space != 0 && cur_chr == ' ') cur_chr = pseudo_space; */
-/* *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** */
- if(! more_name(cur_chr)) /* up to next white space */
- goto lab30;
- get_x_token ();
- }
-lab30:
- end_name ();
- name_in_progress = false;
-}
-/* argument is string .fmt, .log, or .dvi */
+ if (!more_name(cur_chr)) /* up to next white space */
+ goto done;
+
+ get_x_token();
+ }
+done:
+ end_name();
+ name_in_progress = false;
+}
+/* argument is string .fmt, .log, or .dvi */
+/* sec 0529 */
void pack_job_name_(str_number s)
-{
+{
cur_area = 335; /* "" */
- cur_ext = s;
- cur_name = job_name;
- pack_file_name(cur_name, cur_area, cur_ext);
-}
-
-/**********************************************************************/
-
-/* show TEXINPUTS=... or format specific */
-/* only show this if name was not fully qualified ? */
-void show_tex_inputs (void)
-{ /* 98/Jan/28 */
- char *s, *t, *v;
- s = "TEXINPUTS"; /* default */
- if (format_specific) {
- s = format_name; /* try specific */
- if (grabenv(s) == NULL) s = "TEXINPUTS"; /* no format specific */
- }
-
- if (grabenv(s) == NULL) s = "TEXINPUT"; /* 94/May/19 */
-
- print_nl(32); /* */
- print_char(32); /* */
- print_char(40); /*(*/
- t = s;
- while (*t > '\0') print_char(*t++);
- print_char(61); /* = */
- v = grabenv(s);
- if (v != NULL) {
- t = v;
- while (*t > '\0') print_char(*t++);
- }
- print_char(41); /*)*/
+ cur_ext = s;
+ cur_name = job_name;
+ pack_file_name(cur_name, cur_area, cur_ext);
}
+/* sec 0530 */
+/* s - what can't be found, e - default */
+void prompt_file_name_(char * s, str_number e)
+{
+ integer k;
-/**********************************************************************/
+ if (interaction == scroll_mode)
+ do_nothing();
-void prompt_file_name_(str_number s, str_number e)/* s - what can't be found, e - default */
-{/* 30 */
- integer k;
- if(interaction == 2)
- ;
- if(s == 781)
+ if (!strcmp("input file name", s))
print_err("I can't find file `");
- else
+ else
print_err("I can't write on file `");
- print_file_name(cur_name, cur_area, cur_ext);
- print(784); /* '. */
- if(s == 781){ /* input file name */
- if (cur_area == 335) { /* "" only if path not specified */
- if (show_texinput_flag) show_tex_inputs();
- }
- }
- if(e == 785) /* .tex */
- show_context ();
- print_nl(786); /* Please type another */
- print(s);
- if(interaction < 2){
- fatal_error(787); /* *** (job aborted, file error in nonstop mode) */
- return; // abort_flag set
+
+ print_file_name(cur_name, cur_area, cur_ext);
+ prints("'.");
+
+ if (e == 785) /* .tex */
+ show_context();
+
+ print_nl("Please type another ");
+ prints(s);
+
+ if (interaction < 2)
+ {
+ fatal_error("*** (job aborted, file error in nonstop mode)");
+ return;
}
- if (! knuth_flag)
+
+ if (!knuth_flag)
#ifdef _WINDOWS
-// show_line(" (or ^Z to exit)\n", 0);
show_line(" (or ^z to exit)", 0);
#else
show_line(" (or Ctrl-Z to exit)", 0);
#endif
- {
- ;
- print(565); /* : */
- term_input(565, 0);
- }
+
+ prompt_input(": ");
+
/* should we deal with tilde and space in file name here ??? */
{
- begin_name ();
- k = first;
-/* step over leading spaces ... */
- while((buffer[k]== 32)&&(k < last)) incr(k);
+ begin_name();
+ k = first;
+
+ while ((buffer[k] == ' ') && (k < last))
+ incr(k);
+/* *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** */
+ quoted_file_name = 0; /* 98/March/15 */
+
+ if (allow_quoted_names && k < last) /* check whether quoted name */
+ {
+ if (buffer[k]== '"')
+ {
+ quoted_file_name = 1;
+ incr(k);
+ }
+ }
+
+ while (true)
+ {
+ if (k == last)
+ goto done;
/* *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** */
- quoted_file_name = 0; /* 98/March/15 */
- if (allow_quoted_names && k < last) { /* check whether quoted name */
- if(buffer[k]== '"') {
- quoted_file_name = 1;
+/* convert tilde '~' to pseudo tilde */
+ if (pseudo_tilde != 0 && buffer[k]== '~')
+ buffer[k] = pseudo_tilde;
+/* convert space ' ' to pseudo space */
+ if (pseudo_space != 0 && buffer[k]== ' ')
+ buffer[k] = pseudo_space;
+/* *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** */
+ if (!more_name(buffer[k]))
+ goto done;
+
incr(k);
}
+done:
+ end_name();
+ }
+
+ if (cur_ext == 335) /* "" */
+ cur_ext = e; /* use default extension */
+
+ pack_file_name(cur_name, cur_area, cur_ext);
+}
+/* sec 0534 */
+void open_log_file (void)
+{
+ char old_setting;
+ integer k;
+ integer l;
+ char * months;
+
+ old_setting = selector;
+
+ if (job_name == 0)
+ job_name = 790;
+
+ pack_job_name(".log");
+
+ while (!a_open_out(log_file))
+ {
+ selector = term_only;
+ prompt_file_name("transcript file name", ".log");
+ }
+
+ texmf_log_name = a_make_name_string(log_file);
+ selector = log_only;
+ log_opened = true;
+
+ {
+ if (want_version)
+ {
+ stamp_it(log_line);
+ strcat(log_line, "\n");
+ (void) fputs(log_line, log_file);
+ stampcopy(log_line);
+ strcat(log_line, "\n");
+ (void) fputs(log_line, log_file);
+ }
+
+ fprintf(log_file, "%s (%s %s)", tex_version, application, yandyversion);
+
+ if (format_ident > 0)
+ slow_print(format_ident);
+
+ prints(" ");
+
+ if (civilize_flag)
+ print_int(year);
+ else
+ print_int(day);
+
+ print_char(' ');
+ months = " JANFEBMARAPRMAYJUNJULAUGSEPOCTNOVDEC";
+
+ for (k = 3 * month - 2; k <= 3 * month; k++)
+ putc(months[k], log_file);
+
+ print_char(' ');
+
+ if (civilize_flag)
+ print_int(day);
+ else
+ print_int(year);
+
+ print_char(' ');
+ print_two(tex_time / 60);
+ print_char(':');
+ print_two(tex_time % 60);
}
- while(true){
- if(k == last) goto lab30;
-/* *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** */
-/* convert tilde '~' to pseudo tilde */
- if (pseudo_tilde != 0 && buffer[k]== '~') buffer[k]= pseudo_tilde;
-/* convert space ' ' to pseudo space */
- if (pseudo_space != 0 && buffer[k]== ' ') buffer[k]= pseudo_space;
-/* *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** */
- if(! more_name(buffer[k])) goto lab30;
- incr(k);
- }
- lab30: end_name ();
- }
- if(cur_ext == 335) /* "" */
- cur_ext = e; /* use default extension */
- pack_file_name(cur_name, cur_area, cur_ext);
-}
-void open_log_file (void)
-{
- char old_setting;
- integer k;
- integer l;
- ccharpointer months;
-
- old_setting = selector;
-
- if(job_name == 0) job_name = 790; /* default: texput */
- pack_job_name(791); /* .log */
- while(! a_open_out(log_file)) {
- selector = 17;
- prompt_file_name(793, 791); /* transcript file name texput */
- }
- texmf_log_name = a_make_name_string(log_file);
- selector = 18; /* log file only */
- log_opened = true;
+ input_stack[input_ptr] = cur_input;
+ print_nl("**");
+ l = input_stack[0].limit_field;
+
+ if (buffer[l] == end_line_char)
+ decr(l);
+
+ for (k = 1; k <= l; k++)
+ print(buffer[k]);
+
+ print_ln();
+
+ if (show_fmt_flag)
{
-/* *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** */
-// for our version DOS/Windows
- if (want_version) {
-// showversion (log_file); /* in local.c - bkph */
-// showversion (stdout);
- stamp_it(log_line); // ??? use log_line ???
- strcat(log_line, "\n");
- (void) fputs(log_line, log_file);
-// show_line(buffer, 0); // ??? show on screen as well
-// print_ln ();
- stampcopy(log_line);
- strcat(log_line, "\n");
-// show_line(buffer, 0); // ??? show on screen as well
- (void) fputs(log_line, log_file);
-// print_ln ();
- }
-/* *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** */
-/* also change following in itex.c - bkph */
- (void) fputs(tex_version, log_file);
- (void) fprintf(log_file, " (%s %s)", application, yandyversion);
- if (format_ident > 0) slow_print(format_ident); /* bkph */
- print(794); /* ' ' (i.e. two spaces) */
-/* *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** */
- if (civilize_flag) print_int(eqtb[(hash_size + 3186)].cint); /* year */
- else
-/* *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** */
- print_int(eqtb[(hash_size + 3184)].cint); /* day */
- print_char(32); /* */
- months = " JANFEBMARAPRMAYJUNJULAUGSEPOCTNOVDEC";
- {register integer for_end; k = 3 * eqtb[(hash_size + 3185)].cint - 2; for_end = 3
- * eqtb[(hash_size + 3185)].cint; if(k <= for_end) do
- (void) putc(months[k], log_file);
- while(k++ < for_end); } /* month */
- print_char(32); /* */
-/* *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** */
- if (civilize_flag) print_int(eqtb[(hash_size + 3184)].cint);/* day */
- else
-/* *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** */
- print_int(eqtb[(hash_size + 3186)].cint); /* year */
- print_char(32); /* */
- print_two(eqtb[(hash_size + 3183)].cint / 60); /* hour */
- print_char(58); /* : */
- print_two(eqtb[(hash_size + 3183)].cint % 60); /* minute */
- }
- input_stack[input_ptr]= cur_input;
- print_nl(792); /* ** */
- l = input_stack[0].limit_field;
- if(buffer[l]== eqtb[(hash_size + 3211)].cint)
- decr(l);
- {register integer for_end; k = 1; for_end = l; if(k <= for_end) do
- print(buffer[k]);
- while(k++ < for_end); }
- print_ln ();
-/* *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** */
-/* a good place to show the fmt file name or pool file name ? 94/June/21 */
- if (show_fmt_flag) {
- if (string_file != NULL) {
- fprintf(log_file, "(%s)\n", string_file);
- free(string_file); /* this was allocated by strdup in openinou */
- string_file = NULL; /* for safety */
- }
- if (format_file != NULL) {
+ if (format_file != NULL)
+ {
fprintf(log_file, "(%s)\n", format_file);
- free(format_file); /* this was allocated by strdup in openinou */
- format_file = NULL; /* for safety */
+ free(format_file);
+ format_file = NULL;
}
}
-/* *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** */
- selector = old_setting + 2;
-}
-/**************************** start of insertion 98/Feb/7 **************/
+ selector = old_setting + 2;
+}
// Attempt to deal with foo.bar.tex given as foo.bar on command line
// Makes copy of job_name with extension
-void morenamecopy(ASCII_code c)
+void more_name_copy(ASCII_code c)
{
#ifdef ALLOCATESTRING
- if(pool_ptr + 1 > current_pool_size)
+ if (pool_ptr + 1 > current_pool_size)
str_pool = realloc_str_pool (increment_pool_size);
- if(pool_ptr + 1 > current_pool_size) { /* in case it failed 94/Jan/24 */
- overflow(257, current_pool_size - init_pool_ptr); /* 97/Mar/7 */
- return; // abort_flag set
+
+ if (pool_ptr + 1 > current_pool_size)
+ {
+ overflow("pool size", current_pool_size - init_pool_ptr);
+ return;
}
#else
- if(pool_ptr + 1 > pool_size){
- overflow(257, pool_size - init_pool_ptr); /* pool size */
- return; // abort_flag set
+ if (pool_ptr + 1 > pool_size)
+ {
+ overflow("pool size", pool_size - init_pool_ptr);
+ return;
}
#endif
- str_pool[pool_ptr]= c;
- incr(pool_ptr);
-}
-int endnamecopy(void)
+ str_pool[pool_ptr] = c;
+ incr(pool_ptr);
+}
+
+int end_name_copy(void)
{
#ifdef ALLOCATESTRING
- if(str_ptr + 1 > current_max_strings)
- str_start = realloc_str_start(increment_max_strings + 1);
- if(str_ptr + 1 > current_max_strings) { /* in case it failed 94/Jan/24 */
- overflow(258, current_max_strings - init_str_ptr); /* 97/Mar/7 */
- return 0; // abort_flag set
- }
+ if (str_ptr + 1 > current_max_strings)
+ str_start = realloc_str_start(increment_max_strings + 1);
+
+ if (str_ptr + 1 > current_max_strings)
+ {
+ overflow("number of strings", current_max_strings - init_str_ptr);
+ return 0;
+ }
#else
- if(str_ptr + 1 > max_strings){
- overflow(258, max_strings - init_str_ptr); /* number of strings */
- return 0; // abort_flag set
- }
+ if (str_ptr + 1 > max_strings)
+ {
+ overflow("number of strings", max_strings - init_str_ptr);
+ return 0;
+ }
#endif
- return make_string ();
-}
-
-void jobnameappend (void)
-{ /* add extension to job_name */
- int k, n;
-/* copy job_name */
- k = str_start[job_name];
- n = str_start[job_name + 1];
- while (k < n) morenamecopy(str_pool[k++]);
-/* copy `extension' */
- k = str_start[cur_ext];
- n = str_start[cur_ext + 1];
- while (k < n) morenamecopy(str_pool[k++]);
- job_name = endnamecopy ();
+
+ return make_string();
}
+/* sec 0537 */
+void start_input(void)
+{
+ scan_file_name();
+ pack_file_name(cur_name, cur_area, cur_ext);
-/**************************** end of insertion 98/Feb/7 **************/
+ while (true)
+ {
+ begin_file_reading();
+
+ if (a_open_in(cur_file, TEXINPUTPATH))
+ goto done;
-void start_input (void)
-{/* 30 */
- bool addedextension = false;
- scan_file_name ();
- pack_file_name(cur_name, cur_area, cur_ext);
+ end_file_reading();
+ prompt_file_name("input file name", ".tex");
+ }
- while(true){ /* loop until we get a valid file name */
- addedextension = false;
- begin_file_reading ();
-/* *** *** *** *** *** following is new in 3.14159 *** *** *** *** *** *** */
-/* if current extension is *not* empty, try to open using name as is */
-/* string 335 is "" the empty string */
- if((cur_ext != 335)&& a_open_in(input_file[cur_input.index_field],
- TEXINPUTPATH))
- goto lab30;
-/* *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** */
-/* we get here if extension is "", or file with extension failed to open */
-/* if current extension is not `tex,' and `tex' is not irrelevant, try it */
-/* string 785 is .tex */
- if((cur_ext != 785)&&(name_length + 5 < PATHMAX)&&
-/* (! extensionirrelevantp(name_of_file, "tex"))){ */
- (! extensionirrelevantp(name_of_file, name_length, "tex"))){
- name_of_file[name_length + 1]= 46; /* .tex */
- name_of_file[name_length + 2]= 116;
- name_of_file[name_length + 3]= 101;
- name_of_file[name_length + 4]= 120;
- name_of_file[name_length + 5]= 32; /* 96/Jan/20 ??? */
- name_length = name_length + 4;
- addedextension = true;
-/* *** *** *** *** following new in 3.14159 *** *** *** *** *** *** *** */
- if(a_open_in(input_file[cur_input.index_field], TEXINPUTPATH))
- goto lab30;
- name_length = name_length - 4; /* strip extension again */
- name_of_file[name_length + 1]= 32; /* ' ' */
- addedextension = false;
-/* *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** */
- }
-/* *** *** *** *** major changes here in 3.14159 *** *** *** *** *** *** */
-/* string 335 is "" the empty string */
- if((cur_ext == 335)&& a_open_in(input_file[cur_input.index_field],
- TEXINPUTPATH))
- goto lab30;
- if(maketextex () && a_open_in(input_file[cur_input.index_field],
- TEXINPUTPATH))
- goto lab30;
-/* *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** */
- end_file_reading ();
- prompt_file_name(781, 785); /* input file name .tex */
- } /* end of while(true)trying to get valid file name */
-
-/* maybe set pseudo_tilde = 0 at this point ? 95/Sep/26 */
- lab30: cur_input.name_field =
- a_make_name_string(input_file[cur_input.index_field]);
- if(job_name == 0) /* only the first time */
- {
- job_name = cur_name; /* here we set the job_name */
-/* did file name have an `extension' already and we added ".tex" ? */
- if (cur_ext != 335 && addedextension) /* 98/Feb/7 */
- jobnameappend (); /* append `extension' to job_name */
- open_log_file ();
- }
- if(term_offset +(str_start[cur_input.name_field + 1]- str_start[
- cur_input.name_field])> max_print_line - 2) /* was 3 ? */
- print_ln ();
- else if((term_offset > 0)||(file_offset > 0))
- print_char(32); /* */
- print_char(40); /*(*/
-// print_char(64); // debugging only marker
- incr(open_parens);
- if(open_parens > max_open_parens)
- max_open_parens = open_parens; /* 1999/Jan/17 */
- slow_print(cur_input.name_field);
-// print_char(64); // debugging only marker
-#ifndef _WINDOWS
- fflush(stdout);
-#endif
- cur_input.state_field = 33;
- {
- line = 1;
- if(input_ln(input_file[cur_input.index_field], false))
- ;
- firm_up_the_line ();
- if((eqtb[(hash_size + 3211)].cint < 0)||
- (eqtb[(hash_size + 3211)].cint > 255))
- decr(cur_input.limit_field);
-/* long to unsigned char ... */
- else buffer[cur_input.limit_field] = eqtb[(hash_size + 3211)].cint;
- first = cur_input.limit_field + 1;
- cur_input.loc_field = cur_input.start_field;
- }
-}
-
-/**********************************************************************/
-/* show TEXFONTS=... or format specific */
-/* only show this if name was not fully qualified ? */
-void show_tex_fonts(void)
-{ /* 98/Jan/28 */
- char *s, *t, *v, *u;
- int n;
- s = "TEXFONTS";
- if (encoding_specific) {
- u = encoding_name; /* try specific */
- if ((t = grabenv(u)) != NULL) {
- if (strchr(t, ':') != NULL &&
- sscanf(t, "%d", &n) == 0) {
- s = u; /* look here instead of TEXFONTS=... */
- }
- }
+done:
+ name = a_make_name_string(cur_file);
+
+ if (job_name == 0)
+ {
+ job_name = cur_name;
+ open_log_file();
}
- print_nl(32); /* */
- print_char(32); /* */
- print_char(40); /*(*/
- t = s;
- while (*t > '\0') print_char(*t++);
- print_char(61); /* = */
- v = grabenv(s);
- if (v != NULL) {
- t = v;
- while (*t > '\0') print_char(*t++);
- }
- print_char(41); /*)*/
-}
-/**********************************************************************/
+ if (term_offset + length(name) > max_print_line - 2)
+ print_ln();
+ else if ((term_offset > 0) || (file_offset > 0))
+ print_char(' ');
+
+ print_char('(');
+ incr(open_parens);
+
+ if (open_parens > max_open_parens)
+ max_open_parens = open_parens;
+
+ slow_print(name);
+ update_terminal();
+ state = new_line;
+
+ {
+ line = 1;
+
+ if (input_ln(cur_file, false))
+ do_nothing();
+
+ firm_up_the_line();
-/* called only from tex8.c */
+ if (end_line_char_inactive())
+ decr(limit);
+ else
+ buffer[limit] = end_line_char;
+ first = limit + 1;
+ loc = start;
+ }
+}
+/* sec 0560 */
internal_font_number read_font_info_(halfword u, str_number nom, str_number aire, scaled s)
-{/* 30 11 45 */ register internal_font_number Result;
- font_index k;
- bool fileopened;
-/* halfword lf, lh, bc, ec, nw, nh, nd, ni, nl, nk, ne, np; */
+{
+ font_index k;
+ boolean file_opened;
halfword lf, lh, nw, nh, nd, ni, nl, nk, ne, np;
-/* halfword bc, ec; */
- int bc, ec; /* 95/Jan/7 */
- internal_font_number f;
- internal_font_number g;
- eight_bits a, b, c, d;
- ffourquarters qw;
- scaled sw;
- integer bchlabel;
- short bchar;
- scaled z;
- integer alpha;
- char beta;
- g = 0;
- fileopened = false;
+ int bc, ec;
+ internal_font_number f;
+ internal_font_number g;
+ eight_bits a, b, c, d;
+ four_quarters qw;
+ scaled sw;
+ integer bch_label;
+ short bchar;
+ scaled z;
+ integer alpha;
+ char beta;
+
+ g = 0;
+ file_opened = false;
pack_file_name(nom, aire, 805); /* .tfm */
- if(! b_open_in(tfm_file))
- { /* new in C version d */
- if(maketextfm ())
- {
- if(! b_open_in(tfm_file))
- goto lab11;
- }
- else goto lab11;
- }
-/* was just: goto lab11; */
- fileopened = true;
+
+ if (!b_open_in(tfm_file))
+ goto bad_tfm;
+
+ file_opened = true;
+
{
-/* tfm_temp = getc(tfm_file); */ /* done already in open_input, but why? */
- {
- lf = tfm_temp;
- if(lf > 127)
- goto lab11;
- tfm_temp = getc(tfm_file);
- lf = lf * 256 + tfm_temp;
- }
- tfm_temp = getc(tfm_file);
- {
- lh = tfm_temp;
- if(lh > 127)
- goto lab11;
- tfm_temp = getc(tfm_file);
- lh = lh * 256 + tfm_temp;
- }
- tfm_temp = getc(tfm_file);
- {
- bc = tfm_temp;
- if(bc > 127)
- goto lab11;
- tfm_temp = getc(tfm_file);
- bc = bc * 256 + tfm_temp;
- }
- tfm_temp = getc(tfm_file);
- {
- ec = tfm_temp;
- if(ec > 127)
- goto lab11;
- tfm_temp = getc(tfm_file);
- ec = ec * 256 + tfm_temp;
- }
- if((bc > ec + 1)||(ec > 255))
- goto lab11;
- if(bc > 255)
- {
- bc = 1;
- ec = 0;
- }
- tfm_temp = getc(tfm_file);
- {
- nw = tfm_temp;
- if(nw > 127)
- goto lab11;
- tfm_temp = getc(tfm_file);
- nw = nw * 256 + tfm_temp;
- }
- tfm_temp = getc(tfm_file);
- {
- nh = tfm_temp;
- if(nh > 127)
- goto lab11;
- tfm_temp = getc(tfm_file);
- nh = nh * 256 + tfm_temp;
- }
- tfm_temp = getc(tfm_file);
- {
- nd = tfm_temp;
- if(nd > 127)
- goto lab11;
- tfm_temp = getc(tfm_file);
- nd = nd * 256 + tfm_temp;
- }
- tfm_temp = getc(tfm_file);
- {
- ni = tfm_temp;
- if(ni > 127)
- goto lab11;
- tfm_temp = getc(tfm_file);
- ni = ni * 256 + tfm_temp;
- }
- tfm_temp = getc(tfm_file);
- {
- nl = tfm_temp;
- if(nl > 127)
- goto lab11;
- tfm_temp = getc(tfm_file);
- nl = nl * 256 + tfm_temp;
- }
- tfm_temp = getc(tfm_file);
- {
- nk = tfm_temp;
- if(nk > 127)
- goto lab11;
- tfm_temp = getc(tfm_file);
- nk = nk * 256 + tfm_temp;
- }
- tfm_temp = getc(tfm_file);
- {
- ne = tfm_temp;
- if(ne > 127)
- goto lab11;
- tfm_temp = getc(tfm_file);
- ne = ne * 256 + tfm_temp;
- }
- tfm_temp = getc(tfm_file);
+ read_sixteen(lf);
+ tfm_temp = getc(tfm_file);
+ read_sixteen(lh);
+ tfm_temp = getc(tfm_file);
+ read_sixteen(bc);
+ tfm_temp = getc(tfm_file);
+ read_sixteen(ec);
+
+ if ((bc > ec + 1) || (ec > 255))
+ goto bad_tfm;
+
+ if (bc > 255)
{
- np = tfm_temp;
- if(np > 127)
- goto lab11;
- tfm_temp = getc(tfm_file);
- np = np * 256 + tfm_temp;
- }
- if(lf != 6 + lh +(ec - bc + 1)+ nw + nh + nd + ni + nl + nk + ne +
- np)
- goto lab11;
- }
- lf = lf - 6 - lh;
- if(np < 7)
- lf = lf + 7 - np;
-/* *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** */
+ bc = 1;
+ ec = 0;
+ }
+
+ tfm_temp = getc(tfm_file);
+ read_sixteen(nw);
+ tfm_temp = getc(tfm_file);
+ read_sixteen(nh);
+ tfm_temp = getc(tfm_file);
+ read_sixteen(nd);
+ tfm_temp = getc(tfm_file);
+ read_sixteen(ni);
+ tfm_temp = getc(tfm_file);
+ read_sixteen(nl);
+ tfm_temp = getc(tfm_file);
+ read_sixteen(nk);
+ tfm_temp = getc(tfm_file);
+ read_sixteen(ne);
+ tfm_temp = getc(tfm_file);
+ read_sixteen(np);
+
+ if (lf != 6 + lh + (ec - bc + 1) + nw + nh + nd + ni + nl + nk + ne + np)
+ goto bad_tfm;
+
+ if ((nw == 0) || (nh == 0) || (nd == 0) || (ni == 0))
+ goto bad_tfm;
+ }
+
+ lf = lf - 6 - lh;
+
+ if (np < 7)
+ lf = lf + 7 - np;
+
#ifdef ALLOCATEFONT
- if((fmem_ptr + lf > current_font_mem_size)) /* 93/Nov/28 */
+ if ((fmem_ptr + lf > current_font_mem_size))
font_info = realloc_font_info (increment_font_mem_size + lf);
- if((font_ptr == font_max)||(fmem_ptr + lf > current_font_mem_size))
+
+ if ((font_ptr == font_max) || (fmem_ptr + lf > current_font_mem_size))
#else
-/* *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** */
- if((font_ptr == font_max)||(fmem_ptr + lf > font_mem_size))
+ if ((font_ptr == font_max) || (fmem_ptr + lf > font_mem_size))
#endif
{
-/* *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** */
-
- if (trace_flag) {
- sprintf(log_line, "font_ptr %d font_max %d fmem_ptr %d lf %d font_mem_size %d\n",
- font_ptr, font_max, fmem_ptr, lf, font_mem_size); /* debugging */
+ if (trace_flag)
+ {
+ sprintf(log_line, "font_ptr %lld font_max %d fmem_ptr %lld lf %ld font_mem_size %ld\n",
+ font_ptr, font_max, fmem_ptr, lf, font_mem_size);
show_line(log_line, 0);
}
-/* *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** */
print_err("Font ");
- sprint_cs(u);
- print_char(61); /* = */
+ sprint_cs(u);
+ print_char('=');
print_file_name(nom, aire, 335); /* "" */
- if(s >= 0)
- {
- print(738); /* at */
- print_scaled(s);
- print(394); /* pt */
- }
- else if(s != -1000)
- {
- print(797); /* scaled */
- print_int(- (integer) s);
- }
- print(806); /* not loaded: Not enough room left */
- help4("I'm afraid I won't be able to make use of this font,",
- "because my memory for character-size data is too small.",
- "If you're really stuck, ask a wizard to enlarge me.",
- "Or maybe try `I\\font<same font id>=<name of loaded font>'.");
- error ();
- goto lab30;
- }
- f = font_ptr + 1;
- char_base[f]= fmem_ptr - bc;
- width_base[f]= char_base[f]+ ec + 1;
- height_base[f]= width_base[f]+ nw;
- depth_base[f]= height_base[f]+ nh;
- italic_base[f]= depth_base[f]+ nd;
- lig_kern_base[f]= italic_base[f]+ ni;
- kern_base[f]= lig_kern_base[f]+ nl - 256 *(128);
- exten_base[f]= kern_base[f]+ 256 *(128)+ nk;
- param_base[f]= exten_base[f]+ ne;
- {
- if(lh < 2)
- goto lab11;
-/* build the font checksum now */
- {
- tfm_temp = getc(tfm_file);
- a = tfm_temp;
- qw.b0 = a;
- tfm_temp = getc(tfm_file);
- b = tfm_temp;
- qw.b1 = b;
- tfm_temp = getc(tfm_file);
- c = tfm_temp;
- qw.b2 = c;
- tfm_temp = getc(tfm_file);
- d = tfm_temp;
- qw.b3 = d;
- font_check[f]= qw;
- }
- tfm_temp = getc(tfm_file);
+
+ if (s >= 0)
{
- z = tfm_temp;
- if(z > 127)
- goto lab11;
- tfm_temp = getc(tfm_file);
- z = z * 256 + tfm_temp;
- }
- tfm_temp = getc(tfm_file);
- z = z * 256 + tfm_temp;
- tfm_temp = getc(tfm_file);
- z =(z * 16)+(tfm_temp / 16);
- if(z < 65536L)
- goto lab11;
- while(lh > 2){
- tfm_temp = getc(tfm_file);
- tfm_temp = getc(tfm_file);
- tfm_temp = getc(tfm_file);
- tfm_temp = getc(tfm_file);
- decr(lh);
- }
- font_dsize[f]= z;
- if(s != -1000)
- if(s >= 0)
- z = s;
- else z = xn_over_d(z, - (integer) s, 1000);
- font_size[f]= z;
- }
- {register integer for_end; k = fmem_ptr; for_end = width_base[f]- 1
-; if(k <= for_end) do
+ prints(" at ");
+ print_scaled(s);
+ prints("pt");
+ }
+ else if (s != -1000)
{
- {
- tfm_temp = getc(tfm_file);
- a = tfm_temp;
- qw.b0 = a;
- tfm_temp = getc(tfm_file);
- b = tfm_temp;
- qw.b1 = b;
- tfm_temp = getc(tfm_file);
- c = tfm_temp;
- qw.b2 = c;
- tfm_temp = getc(tfm_file);
- d = tfm_temp;
- qw.b3 = d;
- font_info[k].qqqq = qw;
- }
- if((a >= nw)||(b / 16 >= nh)||(b % 16 >= nd)||(c / 4 >=
- ni))
- goto lab11;
- switch(c % 4)
- {case 1 :
- if(d >= nl)
- goto lab11;
- break;
- case 3 :
- if(d >= ne)
- goto lab11;
- break;
- case 2 :
+ prints(" scaled ");
+ print_int(- (integer) s);
+ }
+
+ prints(" not loaded: Not enough room left");
+ help4("I'm afraid I won't be able to make use of this font,",
+ "because my memory for character-size data is too small.",
+ "If you're really stuck, ask a wizard to enlarge me.",
+ "Or maybe try `I\\font<same font id>=<name of loaded font>'.");
+ error();
+ goto done;
+ }
+
+ f = font_ptr + 1;
+ char_base[f] = fmem_ptr - bc;
+ width_base[f] = char_base[f] + ec + 1;
+ height_base[f] = width_base[f] + nw;
+ depth_base[f] = height_base[f] + nh;
+ italic_base[f] = depth_base[f] + nd;
+ lig_kern_base[f] = italic_base[f] + ni;
+ kern_base[f] = lig_kern_base[f] + nl - 256 * (128);
+ exten_base[f] = kern_base[f] + 256 * (128) + nk;
+ param_base[f] = exten_base[f] + ne;
+
{
+ if (lh < 2)
+ goto bad_tfm;
+
+ store_four_quarters(font_check[f]);
+ tfm_temp = getc(tfm_file);
+ read_sixteen(z);
+ tfm_temp = getc(tfm_file);
+ z = z * 256 + tfm_temp;
+ tfm_temp = getc(tfm_file);
+ z =(z * 16) + (tfm_temp / 16);
+
+ if (z < unity)
+ goto bad_tfm;
+
+ while (lh > 2)
{
- if((d < bc)||(d > ec))
- goto lab11;
- }
- while(d < k + bc - fmem_ptr){
-
- qw = font_info[char_base[f]+ d].qqqq;
- if(((qw.b2)% 4)!= 2)
- goto lab45;
- d = qw.b3;
- }
- if(d == k + bc - fmem_ptr)
- goto lab11;
- lab45:;
- }
- break;
- default:
- ;
- break;
- }
- }
- while(k++ < for_end); }
+ tfm_temp = getc(tfm_file);
+ tfm_temp = getc(tfm_file);
+ tfm_temp = getc(tfm_file);
+ tfm_temp = getc(tfm_file);
+ decr(lh);
+ }
+
+ font_dsize[f] = z;
+
+ if (s != -1000)
+ if (s >= 0)
+ z = s;
+ else
+ z = xn_over_d(z, - (integer) s, 1000);
+
+ font_size[f] = z;
+ }
+
+ for (k = fmem_ptr; k <= width_base[f] - 1; k++)
{
+ store_four_quarters(font_info[k].qqqq);
+
+ if ((a >= nw) || (b / 16 >= nh) || (b % 16 >= nd) || (c / 4 >= ni))
+ goto bad_tfm;
+
+ switch (c % 4)
{
- alpha = 16;
- while(z >= 8388608L){ /* 2^23 */
-
- z = z / 2;
- alpha = alpha + alpha;
- }
-/* beta = 256 / alpha; */ /* keep compiler happy */
- beta = (char) (256 / alpha);
- alpha = alpha * z;
- }
- {register integer for_end; k = width_base[f]; for_end = lig_kern_base[
- f]- 1; if(k <= for_end) do
- {
- tfm_temp = getc(tfm_file);
- a = tfm_temp;
- tfm_temp = getc(tfm_file);
- b = tfm_temp;
- tfm_temp = getc(tfm_file);
- c = tfm_temp;
- tfm_temp = getc(tfm_file);
- d = tfm_temp;
- sw =(((((d * z)/ 256)+(c * z)) / 256)+(b * z)) / beta;
- if(a == 0)
- font_info[k].cint = sw;
- else if(a == 255)
- font_info[k].cint = sw - alpha;
- else goto lab11;
- }
- while(k++ < for_end); }
- if(font_info[width_base[f]].cint != 0)
- goto lab11;
- if(font_info[height_base[f]].cint != 0)
- goto lab11;
- if(font_info[depth_base[f]].cint != 0)
- goto lab11;
- if(font_info[italic_base[f]].cint != 0)
- goto lab11;
- }
-/* read ligature/kern program */
- bchlabel = 32767; /* '77777 */
- bchar = 256;
- if(nl > 0)
- {
-/* begin for k:=lig_kern_base[f] to kern_base[f]+kern_base_offset-1 do */
- {register integer for_end; k = lig_kern_base[f]; for_end = kern_base[f
- ]+ 256 *(128)- 1; if(k <= for_end) do
- {
- {
- tfm_temp = getc(tfm_file);
- a = tfm_temp;
- qw.b0 = a;
- tfm_temp = getc(tfm_file);
- b = tfm_temp;
- qw.b1 = b;
- tfm_temp = getc(tfm_file);
- c = tfm_temp;
- qw.b2 = c;
- tfm_temp = getc(tfm_file);
- d = tfm_temp;
- qw.b3 = d;
- font_info[k].qqqq = qw; /* store_four_quarters(font_info[k].qqqq */
- }
- if(a > 128)
+ case lig_tag:
+ if (d >= nl)
+ goto bad_tfm;
+ break;
+
+ case ext_tag:
+ if (d >= ne)
+ goto bad_tfm;
+ break;
+
+ case list_tag:
+ {
+ {
+ if ((d < bc) || (d > ec))
+ goto bad_tfm;
+ }
+
+ while (d < k + bc - fmem_ptr)
+ {
+ qw = char_info(f, d);
+
+ if (char_tag(qw) != list_tag)
+ goto not_found;
+
+ d = rem_byte(qw);
+ }
+
+ if (d == k + bc - fmem_ptr)
+ goto bad_tfm;
+not_found:;
+ }
+ break;
+
+ default:
+ break;
+ }
+ }
+
{
- if(256 * c + d >= nl)
- goto lab11; /* error in TFM, abort */
- if(a == 255)
- if(k == lig_kern_base[f])
- bchar = b;
- }
- else {
- if(b != bchar)
- {
- {
- if((b < bc)||(b > ec)) /* check-existence(b) */
- goto lab11; /* error in TFM, abort */
- }
- qw = font_info[char_base[f]+ b].qqqq;
- if(!(qw.b0 > 0))
- goto lab11; /* error in TFM, abort */
- }
- if(c < 128)
{
+ alpha = 16;
+
+ while (z >= 8388608L) /* 2^23 */
{
- if((d < bc)||(d > ec)) /* check-existence(d) */
- goto lab11; /* error in TFM, abort */
- }
- qw = font_info[char_base[f]+ d].qqqq;
- if(!(qw.b0 > 0))
- goto lab11; /* error in TFM, abort */
- }
- else if(256 *(c - 128)+ d >= nk)
- goto lab11; /* error in TFM, abort */
- if(a < 128)
- if(k - lig_kern_base[f]+ a + 1 >= nl)
- goto lab11; /* error in TFM, abort */
- }
- }
- while(k++ < for_end); }
- if(a == 255)
- bchlabel = 256 * c + d;
- }
-/* for k:=kern_base[f]+kern_base_offset to exten_base[f]-1 do */
-/* store_scaled(font_info[k].sc); */
- {register integer for_end; k = kern_base[f]+ 256 *(128); for_end =
- exten_base[f]- 1; if(k <= for_end) do
- {
- tfm_temp = getc(tfm_file);
- a = tfm_temp;
- tfm_temp = getc(tfm_file);
- b = tfm_temp;
- tfm_temp = getc(tfm_file);
- c = tfm_temp;
- tfm_temp = getc(tfm_file);
- d = tfm_temp;
- sw =(((((d * z)/ 256)+(c * z)) / 256)+(b * z)) / beta;
- if(a == 0)
- font_info[k].cint = sw;
- else if(a == 255)
- font_info[k].cint = sw - alpha;
- else goto lab11;
- }
- while(k++ < for_end); }
-/* read extensible character recipes */
-/* for k:=exten_base[f] to param_base[f]-1 do */
- {register integer for_end; k = exten_base[f]; for_end = param_base[f]
- - 1; if(k <= for_end) do
+ z = z / 2;
+ alpha = alpha + alpha;
+ }
+
+ beta = (char) (256 / alpha);
+ alpha = alpha * z;
+ }
+
+ for (k = width_base[f]; k <= lig_kern_base[f] - 1; k++)
+ {
+ tfm_temp = getc(tfm_file);
+ a = tfm_temp;
+ tfm_temp = getc(tfm_file);
+ b = tfm_temp;
+ tfm_temp = getc(tfm_file);
+ c = tfm_temp;
+ tfm_temp = getc(tfm_file);
+ d = tfm_temp;
+ sw = (((((d * z) / 256) + (c * z)) / 256) + (b * z)) / beta;
+
+ if (a == 0)
+ font_info[k].cint = sw;
+ else if (a == 255)
+ font_info[k].cint = sw - alpha;
+ else
+ goto bad_tfm;
+ }
+
+ if (font_info[width_base[f]].cint != 0)
+ goto bad_tfm;
+
+ if (font_info[height_base[f]].cint != 0)
+ goto bad_tfm;
+
+ if (font_info[depth_base[f]].cint != 0)
+ goto bad_tfm;
+
+ if (font_info[italic_base[f]].cint != 0)
+ goto bad_tfm;
+ }
+
+ bch_label = 32767; /* '77777 */
+ bchar = 256;
+
+ if (nl > 0)
+ {
+ for (k = lig_kern_base[f]; k <= kern_base[f] + 256 * (128) - 1; k++)
{
+ store_four_quarters(font_info[k].qqqq);
+
+ if (a > 128)
{
- tfm_temp = getc(tfm_file);
- a = tfm_temp;
- qw.b0 = a;
- tfm_temp = getc(tfm_file);
- b = tfm_temp;
- qw.b1 = b;
- tfm_temp = getc(tfm_file);
- c = tfm_temp;
- qw.b2 = c;
- tfm_temp = getc(tfm_file);
- d = tfm_temp;
- qw.b3 = d;
-/* store_four_quarters(font_info[k].qqqq); */
- font_info[k].qqqq = qw;
- }
- if(a != 0)
+ if (256 * c + d >= nl)
+ goto bad_tfm;
+
+ if (a == 255)
+ if (k == lig_kern_base[f])
+ bchar = b;
+ }
+ else
{
+ if (b != bchar)
+ check_existence(b);
+
+ if (c < 128)
+ check_existence(d);
+ else if (256 * (c - 128) + d >= nk)
+ goto bad_tfm;
+
+ if (a < 128)
+ if (k - lig_kern_base[f] + a + 1 >= nl)
+ goto bad_tfm;
+ }
+ }
+
+ if (a == 255)
+ bch_label = 256 * c + d;
+ }
+
+ for (k = kern_base[f] + 256 * (128); k <= exten_base[f] - 1; k++)
{
- if((a < bc)||(a > ec))
- goto lab11;
- }
- qw = font_info[char_base[f]+ a].qqqq;
- if(!(qw.b0 > 0))
- goto lab11;
- }
- if(b != 0)
- {
+ tfm_temp = getc(tfm_file);
+ a = tfm_temp;
+ tfm_temp = getc(tfm_file);
+ b = tfm_temp;
+ tfm_temp = getc(tfm_file);
+ c = tfm_temp;
+ tfm_temp = getc(tfm_file);
+ d = tfm_temp;
+ sw = (((((d * z) / 256) + (c * z)) / 256) + (b * z)) / beta;
+
+ if (a == 0)
+ font_info[k].cint = sw;
+ else if (a == 255)
+ font_info[k].cint = sw - alpha;
+ else
+ goto bad_tfm;
+ }
+
+ for (k = exten_base[f]; k <= param_base[f] - 1; k++)
{
- if((b < bc)||(b > ec))
- goto lab11;
- }
- qw = font_info[char_base[f]+ b].qqqq;
- if(!(qw.b0 > 0))
- goto lab11;
- }
- if(c != 0)
- {
+ store_four_quarters(font_info[k].qqqq);
+
+ if (a != 0)
+ check_existence(a);
+
+ if (b != 0)
+ check_existence(b);
+
+ if (c != 0)
+ check_existence(c);
+
+ check_existence(d);
+ }
+
{
- if((c < bc)||(c > ec))
- goto lab11;
- }
- qw = font_info[char_base[f]+ c].qqqq;
- if(!(qw.b0 > 0))
- goto lab11;
- }
+ for (k = 1; k <= np; k++)
+ if (k == 1)
{
- {
- if((d < bc)||(d > ec))
- goto lab11;
- }
- qw = font_info[char_base[f]+ d].qqqq;
- if(!(qw.b0 > 0))
- goto lab11;
- }
- }
- while(k++ < for_end); }
- {
- {register integer for_end; k = 1; for_end = np; if(k <= for_end) do
- if(k == 1)
+ tfm_temp = getc(tfm_file);
+ sw = tfm_temp;
+
+ if (sw > 127)
+ sw = sw - 256;
+
+ tfm_temp = getc(tfm_file);
+ sw = sw * 256 + tfm_temp;
+ tfm_temp = getc(tfm_file);
+ sw = sw * 256 + tfm_temp;
+ tfm_temp = getc(tfm_file);
+ font_info[param_base[f]].cint = (sw * 16) + (tfm_temp / 16);
+ }
+ else
{
- tfm_temp = getc(tfm_file);
- sw = tfm_temp;
- if(sw > 127)
- sw = sw - 256;
- tfm_temp = getc(tfm_file);
- sw = sw * 256 + tfm_temp;
- tfm_temp = getc(tfm_file);
- sw = sw * 256 + tfm_temp;
- tfm_temp = getc(tfm_file);
- font_info[param_base[f]].cint =(sw * 16)+(tfm_temp / 16);
- }
- else {
-
- tfm_temp = getc(tfm_file);
- a = tfm_temp;
- tfm_temp = getc(tfm_file);
- b = tfm_temp;
- tfm_temp = getc(tfm_file);
- c = tfm_temp;
- tfm_temp = getc(tfm_file);
- d = tfm_temp;
- sw =(((((d * z)/ 256)+(c * z)) / 256)+(b * z)) / beta;
- if(a == 0)
- font_info[param_base[f]+ k - 1].cint = sw;
- else if(a == 255)
- font_info[param_base[f]+ k - 1].cint = sw - alpha;
- else goto lab11;
- }
- while(k++ < for_end); }
-/* use test_eof() here instead ? */
- if(feof(tfm_file))
- goto lab11;
- {register integer for_end; k = np + 1; for_end = 7; if(k <= for_end)
- do
- font_info[param_base[f]+ k - 1].cint = 0;
- while(k++ < for_end); }
- }
-/* @<Make final adjustments...@>= l.11174 */
- if(np >= 7)
- font_params[f]= np;
- else font_params[f]= 7;
- hyphen_char[f]= eqtb[(hash_size + 3209)].cint; /* default_hyphen_char */
- skew_char[f]= eqtb[(hash_size + 3210)].cint; /* default_skew_char */
- if(bchlabel < nl)
- bchar_label[f]= bchlabel + lig_kern_base[f];
-/* bchar_label[f]:=non_address; */ /* 3.14159 */
-/* else bchar_label[f]= font_mem_size; */ /* OK ??? 93/Nov/28 */
- else bchar_label[f]= non_address; /* i.e. 0 --- 96/Jan/15 */
- font_bchar[f]= bchar;
- font_false_bchar[f]= bchar;
- if(bchar <= ec)
- if(bchar >= bc)
- {
- qw = font_info[char_base[f]+ bchar].qqqq;
- if((qw.b0 > 0))
- font_false_bchar[f]= 256;
- }
- font_name[f]= nom;
- font_area[f]= aire;
- font_bc[f]= bc;
- font_ec[f]= ec;
- font_glue[f]= 0; /* font_glue[f]:=null; l.11184 */
- char_base[f]= char_base[f];
- width_base[f]= width_base[f];
- lig_kern_base[f]= lig_kern_base[f];
- kern_base[f]= kern_base[f];
- exten_base[f]= exten_base[f];
- decr(param_base[f]);
- fmem_ptr = fmem_ptr + lf;
- font_ptr = f;
- g = f;
- goto lab30;
-
-lab11: print_err("Font ");
+ tfm_temp = getc(tfm_file);
+ a = tfm_temp;
+ tfm_temp = getc(tfm_file);
+ b = tfm_temp;
+ tfm_temp = getc(tfm_file);
+ c = tfm_temp;
+ tfm_temp = getc(tfm_file);
+ d = tfm_temp;
+ sw = (((((d * z) / 256) + (c * z)) / 256) + (b * z)) / beta;
+
+ if (a == 0)
+ font_info[param_base[f] + k - 1].cint = sw;
+ else if (a == 255)
+ font_info[param_base[f] + k - 1].cint = sw - alpha;
+ else goto bad_tfm;
+ }
+
+ if (feof(tfm_file))
+ goto bad_tfm;
+
+ for (k = np + 1; k <= 7; k++)
+ font_info[param_base[f] + k - 1].cint = 0;
+ }
+
+ if (np >= 7)
+ font_params[f] = np;
+ else
+ font_params[f] = 7;
+
+ hyphen_char[f] = default_hyphen_char;
+ skew_char[f] = default_skew_char;
+
+ if (bch_label < nl)
+ bchar_label[f] = bch_label + lig_kern_base[f];
+ else
+ bchar_label[f] = non_address;
+
+ font_bchar[f] = bchar;
+ font_false_bchar[f] = bchar;
+
+ if (bchar <= ec)
+ if (bchar >= bc)
+ {
+ qw = font_info[char_base[f] + bchar].qqqq;
+
+ if ((qw.b0 > 0))
+ font_false_bchar[f] = 256;
+ }
+
+ font_name[f] = nom;
+ font_area[f] = aire;
+ font_bc[f] = bc;
+ font_ec[f] = ec;
+ font_glue[f] = 0;
+ char_base[f] = char_base[f];
+ width_base[f] = width_base[f];
+ lig_kern_base[f] = lig_kern_base[f];
+ kern_base[f] = kern_base[f];
+ exten_base[f] = exten_base[f];
+ decr(param_base[f]);
+ fmem_ptr = fmem_ptr + lf;
+ font_ptr = f;
+ g = f;
+ goto done;
+
+bad_tfm:
+ print_err("Font ");
sprint_cs(u);
- print_char(61); /* = */
- print_file_name(nom, aire, 335); /* "" */
- if(s >= 0)
+ print_char('=');
+ print_file_name(nom, aire, 335);
+
+ if (s >= 0)
{
- print(738); /* at */
- print_scaled(s);
- print(394); /* pt */
- }
- else if(s != -1000)
+ prints(" at ");
+ print_scaled(s);
+ prints("pt");
+ }
+ else if (s != -1000)
{
- print(797); /* scaled */
- print_int(- (integer) s);
+ prints("scaled");
+ print_int(-(integer)s);
}
- if(fileopened)print(798); /* not loadable: Bad metric (TFM) file */
- else print(799); /* not loadable: Metric (TFM) file not found */
- if (aire == 335) { /* "" only if path not specified */
- if (show_texinput_flag) show_tex_fonts(); /* 98/Jan/31 */
- }
+
+ if (file_opened)
+ prints(" not loadable: Bad metric (TFM) file");
+ else
+ prints(" not loadable: Metric (TFM) file not found");
+
help5("I wasn't able to read the size data for this font,",
- "so I will ignore the font specification.",
- "[Wizards can fix TFM files using TFtoPL/PLtoTF.]",
- "You might try inserting a different font spec;",
- "e.g., type `I\\font<same font id>=<substitute font name>'.");
- error ();
-
-lab30:
- if(fileopened)b_close(tfm_file);
- Result = g;
- return Result;
-}
+ "so I will ignore the font specification.",
+ "[Wizards can fix TFM files using TFtoPL/PLtoTF.]",
+ "You might try inserting a different font spec;",
+ "e.g., type `I\\font<same font id>=<substitute font name>'.");
+ error();
+
+done:
+ if (file_opened)
+ b_close(tfm_file);
+
+ return g;
+}
\ No newline at end of file