home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Meeting Pearls 3
/
Meeting_Pearls_III.iso
/
Pearls
/
texmf
/
source
/
TeX
/
tex
/
mainctrl.c
< prev
next >
Wrap
C/C++ Source or Header
|
1992-11-14
|
25KB
|
1,122 lines
#define EXTERN extern
#include "texd.h"
static void appspace ( void )
{ appspace_regmem
register halfword q;
register liststaterecord * curlistp = &curlist;
#define curlist (*curlistp)
if ( ( curlist .auxfield .hh .v.LH >= 2000 ) && ( xspaceskip != zeroglue ) )
q = newparamglue ( xspaceskipcode );
else {
register halfword mainp;
register internalfontnumber mainf = curfont; /* (br) */
if ( spaceskip != zeroglue )
mainp = spaceskip;
else {
mainp = fontglue(mainf);
if ( mainp == 0 ) {
register SMALLmemoryword *gluep; /* halfword maink; */
mainp = newspec ( zeroglue ) ;
gluep = &fontinfo[ parambase(mainf) + spacecode ]; /* maink=...*/
width ( mainp ) = gluep++->cint; /* fontinfo[maink].cint; */
stretch ( mainp ) = gluep++->cint; /* fontinfo[maink+1].cint; */
shrink ( mainp ) = gluep->cint; /* fontinfo[maink+2].cint; */
fontglue(mainf) = mainp;
}
}
mainp = newspec ( mainp ) ;
if ( curlist .auxfield .hh .v.LH >= 2000 )
width ( mainp ) += extraspace ( mainf ) ;
stretch(mainp) = xnoverd(stretch(mainp), curlist.auxfield.hh.v.LH, 1000);
shrink(mainp) = xnoverd(shrink(mainp), 1000, curlist.auxfield.hh.v.LH);
q = newglue ( mainp );
gluerefcount ( mainp ) = 0;
}
link ( curlist .tailfield ) = q ;
curlist .tailfield = q ;
#undef curlist
}
void maincontrol ( void )
{ maincontrol_regmem
/* Try to force the Compiler to free all registers for this
* function. (This function is only leaved at the end of the job.)
*/
/* register */ integer t;
register internalfontnumber mainf;
/* register */ fourquarters maini, mainj;
register fontindex maink;
/* register halfword mainp; */
#ifdef BIG
register integer mains;
#else
register signed short mains;
#endif
register SMALLmemoryword *ligp; /* (br) ptr in lig program */
register long_halfword ligstack;
register halfword curl, curr, curq;
register /* eightbits */ long_halfword r_curcmd;
register liststaterecord * curlistp = &curlist;
#define curlist (*curlistp)
boolean insdisc = false;
halfword bchar = nonchar;
halfword falsebchar = nonchar;
boolean cancelboundary = false;
if ( everyjob != 0 )
begintokenlist ( everyjob , everyjobtext );
lab60: /* big_switch */
r_curcmd = getxtoken ();
lab21: /* reswitch */
if ( interrupt != 0 && OKtointerrupt ) {
backinput ();
if ( interrupt != 0 )
pauseforinstructions ();
goto lab60;
}
#ifdef DEBUG
if ( panicking )
checkmem ( false );
#endif /* DEBUG */
if ( tracingcommands > 0 )
showcurcmdchr ();
mains = curlist.modefield;
if( mains < 0 ) mains = -mains;
#if 0
switch ( mains + r_curcmd )
#else
switch ( r_curcmd )
#endif
{ /* switch begin */
case charnum :
if( mains == hmode ) {
#if 0
curchr = scancharnum (); /* curchr = curval; */
#else
r_curcmd = scancharnum ();
curchr = r_curcmd;
#endif
goto lab70;
} else if( mains == vmode ) {
backinput(); newgraf(true);
} else {
curchr = scancharnum (); /* curchr = curval; */
setmathchar ( mathcode ( curchr ) ) ;
}
break;
case letter :
case otherchar :
case chargiven :
if( mains == hmode ) {
goto lab701 /*lab70*/;
} else if( mains == vmode ) {
backinput () ; newgraf ( true ) ;
} else {
setmathchar ( mathcode ( curchr ) ) ;
}
break;
case noboundary :
if( mains == hmode ) {
r_curcmd = getxtoken ();
if ( (eightbits)r_curcmd == letter || (eightbits)r_curcmd == otherchar
|| (eightbits)r_curcmd == chargiven || (eightbits)r_curcmd == charnum )
cancelboundary = true;
goto lab21;
} else if( mains == vmode ) {
backinput () ; newgraf ( true ) ;
} else {
/* nothing */
}
break;
case spacer:
if( mains == hmode ) {
if ( curlist .auxfield .hh .v.LH != 1000 ) { /* space_factor */
appspace ();
break;
} else {
goto lab120;
}
} else {
/* nothing */
}
break;
case exspace :
if( mains == vmode ) {
backinput () ; newgraf ( true ) ;
} else {
long_halfword tempptr;
lab120:
if ( spaceskip == zeroglue ) {
register internalfontnumber tmp_cf = curfont;
register long_halfword mainp;
mainp = fontglue(tmp_cf);
if ( mainp == 0 ) {
register SMALLmemoryword *gluep;
mainp = newspec ( zeroglue ) ;
gluep = &fontinfo[ parambase(tmp_cf) + spacecode ]; /* maink=... */
width ( mainp ) = gluep++->cint; /* fontinfo[maink].cint; */
stretch ( mainp ) = gluep++->cint; /* fontinfo[maink+1].cint; */
shrink ( mainp ) = gluep->cint; /* fontinfo[maink+2].cint; */
fontglue(tmp_cf) = mainp;
}
tempptr = newglue ( mainp );
} else
tempptr = newparamglue ( spaceskipcode ) ;
link ( curlist .tailfield ) = tempptr ;
curlist .tailfield = tempptr ;
goto lab60;
}
break;
/* cases of main_control that are not part of the inner loop */
case relax :
break;
case ignorespaces :
r_curcmd = getxnbtoken(0);
goto lab21;
break;
case stop :
if( mains == hmode ) {
headforvmode () ;
} else if( mains == vmode ) {
if ( itsallover () )
return ;
} else {
insertdollarsign () ;
}
break;
case vmove :
if( mains == vmode ) {
reportillegalcase () ;
} else {
/* register integer t; */
register integer r_curval;
t = curchr;
r_curval = scandimen ( false , false , false );
if ( t == 0 )
scanbox ( r_curval );
else
scanbox ( - (integer) r_curval );
}
break;
case hmove :
if( mains != vmode ) {
reportillegalcase () ;
} else {
/* register integer t; */
register integer r_curval;
t = curchr;
r_curval = scandimen ( false , false , false );
if ( t == 0 )
scanbox ( r_curval );
else
scanbox ( - (integer) r_curval );
}
break;
case last_item :
reportillegalcase () ;
break ;
case vadjust :
if( mains == vmode ) {
reportillegalcase () ;
} else {
begininsertoradjust () ;
}
break;
case ital_corr :
if( mains == hmode ) {
appenditaliccorrection () ;
} else if( mains == vmode ) {
reportillegalcase () ;
} else {
tailappend ( newkern ( 0 ) ) ;
}
break;
case eq_no :
if( mains != mmode ) {
reportillegalcase () ;
} else {
if ( privileged () )
if ( curgroup == mathshiftgroup )
starteqno () ;
else
offsave () ;
break;
}
break;
case mac_param :
reportillegalcase () ;
break ;
case sup_mark :
case sub_mark :
if( mains != mmode ) {
insertdollarsign () ;
} else {
subsup () ;
}
break;
case math_char_num :
if( mains != mmode ) {
insertdollarsign () ;
} else {
setmathchar( scanfifteenbitint () );
/*setmathchar ( curval ) ;*/
}
break;
case math_given :
if( mains != mmode ) {
insertdollarsign () ;
} else {
setmathchar ( curchr ) ;
}
break;
case math_comp :
if( mains != mmode ) {
insertdollarsign () ;
} else {
tailappend ( newnoad () ) ;
ztype ( curlist .tailfield ) = curchr ;
scanmath ( nucleus ( curlist .tailfield ) ) ;
}
break;
case delim_num :
if( mains != mmode ) {
insertdollarsign () ;
} else {
setmathchar( scantwentysevenbitint() / 4096 );
/*setmathchar ( curval / 4096 );*/
}
break;
case left_right :
if( mains != mmode ) {
insertdollarsign () ;
} else {
mathleftright () ;
}
break;
case above :
if( mains != mmode ) {
insertdollarsign () ;
} else {
mathfraction () ;
}
break;
case radical :
if( mains != mmode ) {
insertdollarsign () ;
} else {
mathradical () ;
}
break;
case math_style :
if( mains != mmode ) {
insertdollarsign () ;
} else {
tailappend ( newstyle ( curchr ) ) ;
}
break;
case math_choice :
if( mains != mmode ) {
insertdollarsign () ;
} else {
appendchoices () ;
}
break;
case vcenter :
if( mains != mmode ) {
insertdollarsign () ;
} else {
scanspec ( vcentergroup , false ) ;
normalparagraph () ;
pushnest () ;
curlist .modefield = -vmode ;
curlist .auxfield .cint = ignoredepth ;
if ( everyvbox != 0 )
begintokenlist ( everyvbox , everyvboxtext ) ;
}
break;
case non_script :
if( mains != mmode ) {
insertdollarsign () ;
} else {
tailappend ( newglue ( zeroglue ) ) ;
subtype ( curlist .tailfield ) = condmathglue ;
}
break;
case mkern :
if( mains != mmode ) {
insertdollarsign () ;
} else {
appendkern () ;
}
break;
case limit_switch :
if( mains != mmode ) {
insertdollarsign () ;
} else {
mathlimitswitch () ;
}
break;
case mskip :
if( mains != mmode ) {
insertdollarsign () ;
} else {
appendglue () ;
}
break;
case math_accent :
if( mains != mmode ) {
insertdollarsign () ;
} else {
mathac () ;
}
break;
case endv :
if( mains != mmode ) {
doendv () ;
} else {
insertdollarsign () ;
}
break;
case par_end :
if( mains == hmode ) {
if ( alignstate < 0 )
offsave () ;
endgraf () ;
if ( curlist .modefield == vmode )
buildpage () ;
} else if( mains == vmode ) {
normalparagraph () ;
if ( curlist .modefield > 0 )
buildpage () ;
} else {
insertdollarsign () ;
}
break;
case vskip :
if( mains == hmode ) {
headforvmode () ;
} else if( mains == vmode ) {
appendglue () ;
} else {
insertdollarsign () ;
}
break;
case un_vbox :
if( mains == hmode ) {
headforvmode () ;
} else if( mains == vmode ) {
unpackage () ;
} else {
insertdollarsign () ;
}
break;
case valign :
if( mains == hmode ) {
#ifdef TEXXET
if( curchr > 0 )
tailappend(newmath(0, curchr));
else
initalign () ;
#else
initalign () ;
#endif
} else if( mains == vmode ) {
backinput () ;
newgraf ( true ) ;
} else {
insertdollarsign () ;
}
break;
case hrule :
if( mains == hmode ) {
headforvmode () ;
} else if( mains == vmode ) {
tailappend ( scanrulespec () );
if ( abs ( curlist .modefield ) == vmode )
curlist .auxfield .cint = ignoredepth ;
else if ( abs ( curlist .modefield ) == hmode )
curlist .auxfield .hh .v.LH = 1000 ;
} else {
insertdollarsign () ;
}
break;
case vrule :
if( mains == vmode ) {
backinput () ;
newgraf ( true ) ;
} else {
tailappend ( scanrulespec () );
if ( abs ( curlist .modefield ) == vmode )
curlist .auxfield .cint = ignoredepth ;
else if ( abs ( curlist .modefield ) == hmode )
curlist .auxfield .hh .v.LH = 1000 ;
}
break;
case hskip :
if( mains == vmode ) {
backinput () ;
newgraf ( true ) ;
} else {
appendglue () ;
}
break;
case kern :
appendkern () ;
break;
case left_brace :
if( mains != mmode ) {
newsavelevel ( simplegroup ) ;
} else {
tailappend ( newnoad () ) ;
backinput () ;
scanmath ( nucleus ( curlist .tailfield ) );
}
break;
case begin_group :
newsavelevel ( semisimplegroup ) ;
break ;
case end_group :
if ( curgroup == semisimplegroup )
unsave () ;
else
offsave () ;
break ;
case right_brace :
handlerightbrace () ;
break ;
case leader_ship :
scanbox ( 1073742337L - aleaders + curchr );
break ;
case make_box :
beginbox ( 0 ) ;
break ;
case start_par :
if( mains == vmode ) {
newgraf( curchr > 0 );
} else {
indentinhmode( curchr > 0 );
}
break;
case math_shift :
if( mains == hmode ) {
initmath () ;
} else if( mains == vmode ) {
backinput () ;
newgraf ( true ) ;
} else {
if ( curgroup == mathshiftgroup )
aftermath () ;
else
offsave () ;
}
break;
case un_hbox :
if( mains == vmode ) {
backinput () ;
newgraf ( true ) ;
} else {
unpackage () ;
}
break;
case accent :
if( mains == hmode ) {
makeaccent () ;
} else if( mains == vmode ) {
backinput () ;
newgraf ( true ) ;
} else {
mathac () ;
}
break;
case discretionary :
if( mains == vmode ) {
backinput () ;
newgraf ( true ) ;
} else {
appenddiscretionary () ;
}
break;
case halign :
if( mains == vmode ) {
initalign () ;
} else if( mains == hmode ) {
headforvmode () ;
} else {
if ( privileged () )
if ( curgroup == mathshiftgroup )
initalign () ;
else
offsave () ;
}
break;
case insert :
begininsertoradjust () ;
break ;
case mark :
makemark () ;
break ;
case break_penalty :
appendpenalty () ;
break ;
case remove_item :
deletelast () ;
break ;
case tab_mark :
case car_ret :
alignerror () ;
break ;
case no_align :
noalignerror () ;
break ;
case omit :
omiterror () ;
break ;
case end_cs_name :
cserror () ;
break ;
case toks_register :
case assign_toks :
case assign_int :
case assign_dimen :
case assign_glue :
case assign_mu_glue :
case assign_font_dimen :
case assign_font_int :
case set_aux :
case set_prev_graf :
case set_page_dimen :
case set_page_int :
case set_box_dimen :
case set_shape :
case def_code :
case def_family :
case set_font :
case def_font :
case register_cmd :
case advance :
case multiply :
case divide :
case prefix :
case let :
case shorthand_def :
case read_to_cs :
case def :
case set_box :
case hyph_data :
#ifdef MLTEX
case char_sub_def :
#endif
case set_interaction :
prefixedcommand () ;
break ;
case afterassignment :
gettoken () ;
aftertoken = curtok ;
break ;
case aftergroup :
gettoken () ;
saveforafter ( curtok ) ;
break ;
case instream :
openorclosein () ;
break ;
case message :
issuemessage () ;
break ;
case caseshift :
shiftcase () ;
break ;
case xray :
showwhatever () ;
break ;
case extension :
doextension () ;
break ;
default:
fprintf(stderr, "Internal error: can't happen (mainctrl) !\n");
} /* switch 1 */
goto lab60; /* goto big_switch ---^ */
/* main_loop: when hmode + letter/other_char/char_given/char_num */
lab701:
r_curcmd = curchr; /* added */
lab70:
#ifdef ERW_SHIFTCASE
if( uccode(0) > 0 && uccode(0) < 3 ) {
if( r_curcmd /*curchr*/ > 0 ) { /* nicht \char0, da \uccode falsch ! */
if( uccode(0) == 1 ) { /* lowercase */
if( lccode(r_curcmd) > 0 ) {
r_curcmd = lccode(r_curcmd);
curchr = r_curcmd;
}
} else { /* uppercase */
if( uccode(r_curcmd) > 0 ) {
r_curcmd = uccode(r_curcmd);
curchr = r_curcmd;
}
}
}
}
#endif
/* adjust space_factor */
mains = sfcode ( r_curcmd /*curchr*/ );
if ( mains == 1000 )
curlist .auxfield .hh .v.LH = 1000;
else if ( mains <= 1000 ) { /* was: if ( mains < 1000 ) */
if ( mains > 0 )
curlist .auxfield .hh .v.LH = mains;
} else if ( curlist .auxfield .hh .v.LH < 1000 )
curlist .auxfield .hh .v.LH = 1000;
else
curlist .auxfield .hh .v.LH = mains;
#ifdef ERW_CONSTITUTE
if (
#ifndef ERW_LANGUAGE
curlist .modefield > 0 &&
#endif
language != curlist.auxfield.hh.v.RH )
fixlanguage () ;
fastgetavail (ligstack);
character(ligstack) = curchr;
font(ligstack) = curfont;
tailappend(ligstack);
goto lab60;
#else
mainf = curfont;
bchar = fontbchar(mainf);
falsebchar = fontfalsebchar(mainf);
if (
#ifndef ERW_LANGUAGE
curlist .modefield > 0 &&
#endif
language != curlist.auxfield.hh.v.RH )
fixlanguage () ;
fastgetavail ( ligstack ) ;
curl = curchr ;
font ( ligstack ) = mainf ;
character ( ligstack ) = curl ;
curq = curlist .tailfield ;
if ( cancelboundary ) {
cancelboundary = false ;
#if 0 /* not needed with the following jump */
maink = nonaddress;
#endif
goto lab92; /* (br) added this ... see below */
} else
maink = bcharlabel(mainf);
if ( maink == nonaddress )
goto lab92; /* goto main_loop_move_2 */
curr = curl ;
curl = nonchar;
ligp = &fontinfo[ maink ]; /* (br) init ligp/maink for bcharlabel[] */
goto lab111; /* goto main_lig_loop_1 */
/* main_loop_wrapup: wird nur von "unten" angesprungen */
lab80:
if ( curl < nonchar ) {
if ( character ( curlist .tailfield ) == hyphenchar(mainf) )
if ( link ( curq ) > 0 )
insdisc = true ;
if ( ligaturepresent ) {
register long_halfword mainp;
mainp = newligature ( mainf , curl , link ( curq ) ) ;
if ( lfthit ) {
subtype ( mainp ) = 2 ;
lfthit = false ;
}
if ( rthit )
if ( ligstack == 0 ) {
incr ( subtype ( mainp ) );
rthit = false ;
}
link ( curq ) = mainp ;
curlist .tailfield = mainp ;
ligaturepresent = false ;
}
if ( insdisc ) {
insdisc = false ;
if ( curlist .modefield > 0 )
tailappend ( newdisc () ) ;
}
}
/* main_loop_move: */
lab90:
if ( ligstack == 0 ) {
r_curcmd = curcmd;
goto lab21;
}
curq = curlist .tailfield;
curl = character ( ligstack ); /* curr; TeX 3.141 */
lab91: /* main_loop_move_1 */
if ( ! ischarnode ( ligstack ) ) {
/* statt goto lab95; wurde Teil hierher verschoben */
register long_halfword mainp;
mainp = ligptr ( ligstack );
if ( mainp > 0 )
tailappend ( mainp ) ;
{long_halfword tempptr;
tempptr = ligstack ;
ligstack = link ( tempptr ) ;
freenode ( tempptr , smallnodesize ) ;
}
maini = zcharinfo ( mainf , curl ) ;
ligaturepresent = true ;
if ( ligstack == 0 )
if ( mainp > 0 )
goto lab100 ;
else
curr = bchar ;
else
curr = character ( ligstack ) ;
goto lab110 ;
}
lab92: /* main_loop_move_2 */
if ( curchr < fontbc(mainf) || effective_char(curchr) > fontec(mainf) ) {
charwarning ( mainf , curchr );
freeavail ( ligstack );
goto lab60; /* goto big_switch */
}
maini = zcharinfo ( mainf , curl );
if ( ! charexists ( maini ) ) {
charwarning ( mainf , curchr ) ;
freeavail ( ligstack ) ;
goto lab60 ;
}
tailappend ( ligstack ) ;
lab100:
r_curcmd = getnext () ;
if ( (eightbits)r_curcmd == letter || (eightbits)r_curcmd == otherchar
|| (eightbits)r_curcmd == chargiven )
goto lab101;
r_curcmd = xtoken () ;
if ( (eightbits)r_curcmd == letter || (eightbits)r_curcmd == otherchar
|| (eightbits)r_curcmd == chargiven )
goto lab101;
if ( (eightbits)r_curcmd == charnum ) {
curchr = scancharnum (); /* curchr = curval; */
goto lab101 ;
}
if ( (eightbits)r_curcmd == noboundary )
bchar = nonchar;
curr = bchar ;
ligstack = 0 ;
goto lab110 ;
lab101: /* wird nur ab lab100 bis hier angesprungen */
#ifdef ERW_SHIFTCASE
if( uccode(0) > 0 && uccode(0) < 3 ) {
if( curchr > 0 ) { /* nicht \char0, da \uccode falsch ! */
if( uccode(0) == 1 ) { /* lowercase */
if( lccode(curchr) > 0 )
curchr = lccode(curchr);
} else { /* uppercase */
if( uccode(curchr) > 0 )
curchr = uccode(curchr);
}
}
}
#endif
/* adjust_space_factor */
mains = sfcode ( curchr ) ;
if ( mains == 1000 )
curlist .auxfield .hh .v.LH = 1000 ;
else if ( mains <= 1000 ) {
if ( mains > 0 )
curlist .auxfield .hh .v.LH = mains ;
} else if ( curlist .auxfield .hh .v.LH < 1000 )
curlist .auxfield .hh .v.LH = 1000 ;
else
curlist .auxfield .hh .v.LH = mains ;
fastgetavail ( ligstack ) ;
font ( ligstack ) = mainf ;
curr = curchr ;
character ( ligstack ) = curr ;
if ( curr == falsebchar )
curr = nonchar ;
lab110:
#if 1
if ( mychartag ( maini ) != (ligtag << 8) ) /* (br) */
#else
if ( chartag ( maini ) != ligtag )
#endif
goto lab80;
/* maink = zligkernstart ( mainf , maini ) ; */
/* mainj = fontinfo [ maink ] .qqqq ; */
#ifdef FONTPTR
ligp = zligkernstart ( mainf, maini );
#else
ligp = &fontinfo[ zligkernstart ( mainf, maini ) ];
#endif
mainj = ligp->qqqq;
if ( skipbyte ( mainj ) <= stopflag )
goto lab112 ;
/* maink = zligkernrestart ( mainf , mainj ) ; */
#ifdef FONTPTR
ligp = zligkernrestart ( mainf , mainj );
#else
ligp = &fontinfo[ zligkernrestart ( mainf , mainj ) ];
#endif
lab111:
mainj = ligp->qqqq; /* mainj = fontinfo [ maink ] .qqqq ; */
lab112:
if ( nextchar ( mainj ) == curr ) {
if ( skipbyte ( mainj ) <= stopflag ) {
if ( opbyte ( mainj ) >= kernflag ) {
if ( curl < nonchar ) {
if ( character ( curlist .tailfield ) == hyphenchar(mainf) )
if ( link ( curq ) > 0 )
insdisc = true ;
if ( ligaturepresent ) {
register long_halfword mainp;
mainp = newligature ( mainf , curl , link ( curq ) ) ;
if ( lfthit ) {
subtype ( mainp ) = 2 ;
lfthit = false ;
}
if ( rthit )
if ( ligstack == 0 ) {
incr ( subtype ( mainp ) ) ;
rthit = false ;
}
link ( curq ) = mainp ;
curlist .tailfield = mainp ;
ligaturepresent = false ;
}
if ( insdisc ) {
insdisc = false ;
if ( curlist .modefield > 0 )
tailappend ( newdisc () ) ;
}
}
tailappend ( newkern ( zcharkern ( mainf , mainj ) ) ) ;
goto lab90 ;
}
if ( curl == nonchar )
lfthit = true ;
else if ( ligstack == 0 )
rthit = true ;
{
if ( interrupt != 0 )
pauseforinstructions () ;
}
switch ( opbyte ( mainj ) ) {
case 1 :
case 5 :
{
curl = rembyte ( mainj ) ;
maini = zcharinfo ( mainf , curl ) ;
ligaturepresent = true ;
}
break ;
case 2 :
case 6 :
{
curr = rembyte ( mainj ) ;
if ( ligstack == 0 ) {
ligstack = newligitem ( curr ) ;
bchar = nonchar ;
} else if ( ischarnode ( ligstack ) ) {
register halfword mainp;
mainp = ligstack ;
ligstack = newligitem ( curr ) ;
ligptr ( ligstack ) = mainp ;
} else
character ( ligstack ) = curr ;
}
break ;
case 3 :
{ register halfword mainp;
curr = rembyte ( mainj ) ;
mainp = ligstack ;
ligstack = newligitem ( curr ) ;
link ( ligstack ) = mainp ;
}
break ;
case 7 :
case 11 :
{
if ( curl < nonchar ) {
if ( character ( curlist .tailfield ) == hyphenchar(mainf) )
if ( link ( curq ) > 0 )
insdisc = true ;
if ( ligaturepresent ) {
register long_halfword mainp;
mainp = newligature ( mainf , curl , link ( curq ) ) ;
if ( lfthit ) {
subtype ( mainp ) = 2 ;
lfthit = false ;
}
if ( false )
if ( ligstack == 0 ) {
incr ( subtype ( mainp ) ) ;
rthit = false ;
}
link ( curq ) = mainp ;
curlist .tailfield = mainp ;
ligaturepresent = false ;
}
if ( insdisc ) {
insdisc = false ;
if ( curlist .modefield > 0 )
tailappend ( newdisc () ) ;
}
}
curq = curlist .tailfield ;
curl = rembyte ( mainj ) ;
maini = zcharinfo ( mainf , curl ) ;
ligaturepresent = true ;
}
break ;
case 0 : /* (br) added to avoid "subql #1" */
default:
{
curl = rembyte ( mainj ) ;
ligaturepresent = true ;
if ( ligstack == 0 )
goto lab80 ;
else
goto lab91 ;
}
break ;
}
if ( opbyte ( mainj ) > 4 && opbyte ( mainj ) != 7 )
goto lab80 ;
if ( curl < nonchar )
goto lab110 ;
ligp = &fontinfo[ bcharlabel(mainf) ]; /* maink = bcharlabel[mainf]; */
goto lab111 ;
}
} /* if (nextchar(mainj) == curr) */
if ( skipbyte ( mainj ) == 0 ) {
incr (ligp); /* incr ( maink ); */
} else {
if ( skipbyte ( mainj ) >= stopflag )
goto lab80;
/* maink = maink + skipbyte ( mainj ) + 1 ; */
ligp = ligp + skipbyte(mainj) + 1;
}
goto lab111 ;
#endif /* ERW_CONSTITUTE */
}
/* -- end -- */