home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Meeting Pearls 3
/
Meeting_Pearls_III.iso
/
Pearls
/
texmf
/
source
/
TeX
/
tex
/
tex2.c
< prev
next >
Wrap
C/C++ Source or Header
|
1991-08-24
|
22KB
|
1,008 lines
#define EXTERN extern
#include "texd.h"
/* preparemag() nach tex7.c */
void tokenshow ( halfword p )
{ tokenshow_regmem
if ( p != 0 )
showtokenlist ( link ( p ) , 0 , 10000000L ) ;
}
void printmeaning ( void )
{ printmeaning_regmem
printcmdchr ( curcmd , curchr ) ;
if ( curcmd >= call ) {
printchar ( 58 ) ;
println () ;
tokenshow ( curchr ) ;
} else if ( curcmd == topbotmark ) {
printchar ( 58 ) ;
println () ;
tokenshow ( curmark [ curchr ] ) ;
}
}
void showcurcmdchr ( void )
{ showcurcmdchr_regmem
begindiagnostic () ;
printnl ( 123 ) ;
if ( curlist .modefield != shownmode ) {
printmode ( curlist .modefield ) ;
c_print(": "); /* 564 */
shownmode = curlist .modefield ;
}
printcmdchr ( curcmd , curchr ) ;
printchar ( 125 ) ;
enddiagnostic ( false ) ;
}
void showcontext ( void )
{/* 30 */ showcontext_regmem
register integer oldsetting ;
register integer nn ;
boolean bottomline ;
register integer i ;
register integer j ;
register integer l ;
register integer m ;
register integer n ;
register integer p ;
register integer q ;
baseptr = inputptr ;
#ifndef INP_PTR
inputstack [ baseptr ] = curinput ;
#endif
nn = -1 ;
bottomline = false ;
while ( true ) {
#ifdef INP_PTR
curinput_ptr = &inputstack [ baseptr ] ;
#else
curinput = inputstack [ baseptr ] ;
#endif
if ( ( curinput .statefield != tokenlist ) )
if ( ( curinput .namefield > 17 ) || ( baseptr == 0 ) )
bottomline = true ;
if ( baseptr == inputptr || bottomline || nn < errorcontextlines ) {
if ( ( baseptr == inputptr ) || ( curinput .statefield != tokenlist )
|| ( tokentype != backedup ) || ( curinput .locfield != 0 ) ) {
tally = 0 ;
oldsetting = selector ;
if ( curinput .statefield != tokenlist ) {
if ( curinput .namefield <= 17 )
if ( ( curinput .namefield == 0 ) )
if ( baseptr == 0 )
c_printnl("<*>");
else
c_printnl("<insert> ");
else {
c_printnl("<read ");
if ( curinput .namefield == 17 )
printchar ( 42 ) ;
else
printint ( curinput .namefield - 1 ) ;
printchar ( 62 ) ;
}
else {
c_printnl("l.");
printint ( line ) ;
}
printchar ( 32 ) ;
{
l = tally ;
tally = 0 ;
selector = pseudo ;
trickcount = 1000000L ;
}
if ( buffer [ curinput .limitfield ] == endlinechar )
j = curinput .limitfield ;
else
j = curinput .limitfield + 1 ;
if ( j > 0 )
for ( i = curinput .startfield ; i <= j - 1 ; i++ ) {
if ( i == curinput .locfield ) {
firstcount = tally ;
trickcount = tally + 1 + errorline - halferrorline ;
if ( trickcount < errorline )
trickcount = errorline ;
}
print ( buffer [ i ] ) ;
}
} else {
switch ( tokentype ) {
case parameter :
c_printnl("<argument> ");
break ;
case utemplate :
case vtemplate :
c_printnl("<template> ");
break ;
case backedup :
if ( curinput .locfield == 0 )
c_printnl("<recently read> ");
else
c_printnl("<to be read again> ");
break ;
case inserted :
c_printnl("<inserted text> ");
break ;
case macro :
println () ;
printcs ( curinput .namefield ) ;
break ;
case outputtext :
c_printnl("<output> ");
break ;
case everypartext :
c_printnl("<everypar> ");
break ;
case everymathtext :
c_printnl("<everymath> ");
break ;
case everydisplaytext :
c_printnl("<everydisplay> ");
break ;
case everyhboxtext :
c_printnl("<everyhbox> ");
break ;
case everyvboxtext :
c_printnl("<everyvbox> ");
break ;
case everyjobtext :
c_printnl("<everyjob> ");
break ;
case everycrtext :
c_printnl("<everycr> ");
break ;
case marktext :
c_printnl("<mark> ");
break ;
case writetext :
c_printnl("<write> ");
break ;
default:
printnl ( 63 );
break ;
}
{
l = tally ;
tally = 0 ;
selector = pseudo ;
trickcount = 1000000L ;
}
if ( tokentype < macro )
showtokenlist (curinput .startfield, curinput .locfield, 100000L);
else
showtokenlist ( link ( curinput .startfield ),
curinput .locfield, 100000L );
}
selector = oldsetting ;
if ( trickcount == 1000000L ) {
firstcount = tally ;
trickcount = tally + 1 + errorline - halferrorline ;
if ( trickcount < errorline )
trickcount = errorline ;
}
m = ( (tally < trickcount) ? tally : trickcount ) - firstcount;
if ( l + firstcount <= halferrorline ) {
p = 0 ;
n = l + firstcount ;
} else {
print ( 275 ) ;
p = l + firstcount - halferrorline + 3 ;
n = halferrorline ;
}
for( q = p ; q <= firstcount - 1 ; q++ ) {
printchar ( trickbuf [ q % errorline ] ) ;
}
println () ;
for( q = n ; q >= 1 ; --q ) {
printchar ( 32 ) ;
}
if ( m + n <= errorline )
p = firstcount + m ;
else
p = firstcount + ( errorline - n - 3 ) ;
for( q = firstcount ; q <= p - 1 ; q++ ) {
printchar ( trickbuf [ q % errorline ] ) ;
}
if ( m + n > errorline )
print ( 275 ) ;
incr ( nn ) ;
}
} else if ( nn == errorcontextlines ) {
printnl ( 275 ) ;
incr ( nn ) ;
}
if ( bottomline )
goto lab30 ;
decr ( baseptr ) ;
}
lab30:
#ifdef INP_PTR
curinput_ptr = &inputstack [ inputptr ] ;
#else
curinput = inputstack [ inputptr ] ;
#endif
}
void begintokenlist ( halfword p, quarterword t )
{ begintokenlist_regmem
{
if ( inputptr > maxinstack ) {
maxinstack = inputptr ;
if ( inputptr == stacksize ) /* hier evtl. noch aendern */
overflow(8, stacksize);
}
#ifdef INP_PTR
incr ( inputptr ) ;
curinput_ptr++;
#else
inputstack [ inputptr ] = curinput ;
incr ( inputptr ) ;
#endif
}
{
#ifndef INP_PTR
register instaterecord *curinputPTR = &curinput;
# define curinput (*curinputPTR)
#endif
curinput .statefield = tokenlist ;
tokentype = t ;
curinput .startfield = p ;
if ( t >= macro ) {
addtokenref ( p ) ;
if ( t == macro )
paramstart = paramptr ;
else {
curinput .locfield = link ( p ) ;
if ( tracingmacros > 1 ) {
begindiagnostic () ;
c_printnl("");
switch ( t ) {
case marktext :
printesc ( 348 ) ;
break ;
case writetext :
printesc ( STR_WRITE );
break ;
default:
printcmdchr( assign_toks, t - outputtext + outputroutineloc );
break ;
}
c_print("->");
tokenshow ( p ) ;
enddiagnostic ( false ) ;
}
}
} else
curinput .locfield = p ;
#ifndef INP_PTR
# undef curinput
#endif
}
}
void endtokenlist ( void )
{ endtokenlist_regmem
#ifndef INP_PTR
register instaterecord *curinputPTR = &curinput;
# define curinput (*curinputPTR)
#endif
if ( tokentype >= backedup ) {
if ( tokentype <= inserted )
flushlist ( curinput.startfield ) ;
else {
deletetokenref ( curinput.startfield ) ;
if ( tokentype == macro ) {
#if 0 /* def PARAM_PTR */
long anzahl = paramptr - paramstart;
halfword *psp = ¶mstack[paramptr];
while ( anzahl-- > 0 ) {
flushlist( *psp );
psp--;
}
paramptr = paramstart;
#else
while ( paramptr > paramstart ) {
decr ( paramptr ) ;
flushlist ( paramstack [ paramptr ] ) ;
}
#endif
}
}
} else if ( tokentype == utemplate )
if ( alignstate > 500000L )
alignstate = 0 ;
else fatalerror( STR_H_FE_INTERWOVEN );
{
decr ( inputptr ) ;
#ifdef INP_PTR
--curinput_ptr;
#else
curinput = inputstack [ inputptr ] ;
#endif
}
{
if ( interrupt != 0 )
pauseforinstructions () ;
}
#ifndef INP_PTR
# undef curinput
#endif
}
void backinput ( void )
{
#ifndef INP_PTR
register instaterecord *curinputPTR = &curinput;
# define curinput (*curinputPTR)
#endif
while ( curinput .statefield == tokenlist && curinput .locfield == 0 )
endtokenlist();
{ register long_halfword p;
p = getavail();
{ backinput_regmem
register halfword r_curtok = curtok;
info ( p ) = r_curtok ;
if ( r_curtok < rightbracelimit )
if ( r_curtok < leftbracelimit )
decr ( alignstate ) ;
else
incr ( alignstate ) ;
}
{ register integer r_inputptr = inputptr;
if ( r_inputptr > maxinstack ) {
maxinstack = r_inputptr ;
if ( r_inputptr == stacksize )
overflow(8, stacksize);
}
#ifdef INP_PTR
incr ( r_inputptr ) ;
curinput_ptr++;
#else
inputstack [ r_inputptr ] = curinput ;
incr ( r_inputptr ) ;
#endif
inputptr = r_inputptr;
}
curinput .statefield = tokenlist ;
tokentype = backedup ;
curinput .startfield = p ;
curinput .locfield = p ;
}
#ifndef INP_PTR
# undef curinput
#endif
}
void backerror ( void )
{ backerror_regmem
OKtointerrupt = false ;
backinput () ;
OKtointerrupt = true ;
error () ;
}
void inserror ( void )
{ inserror_regmem
OKtointerrupt = false ;
backinput () ;
tokentype = inserted ;
OKtointerrupt = true ;
error () ;
}
void beginfilereading ( void )
{ beginfilereading_regmem
if ( inopen == maxinopen )
overflow(9, maxinopen);
if ( first == bufsize )
overflow(1, bufsize);
incr ( inopen ) ;
{
if ( inputptr > maxinstack ) {
maxinstack = inputptr ;
if ( inputptr == stacksize )
overflow(8, stacksize);
}
#ifdef INP_PTR
incr ( inputptr ) ;
curinput_ptr++;
curinput.locfield = (*(curinput_ptr-1)).locfield;
curinput.limitfield = (*(curinput_ptr-1)).limitfield;
#else
inputstack [ inputptr ] = curinput ;
incr ( inputptr ) ;
#endif
}
curinput .indexfield = inopen ;
linestack [ curinput .indexfield ] = line ;
curinput .startfield = first ;
curinput .statefield = 1 ;
curinput .namefield = 0 ;
}
void endfilereading ( void )
{ endfilereading_regmem
first = curinput .startfield ;
line = linestack [ curinput .indexfield ] ;
if ( curinput .namefield > 17 )
aclose ( inputfile [ curinput .indexfield ] ) ;
{
decr ( inputptr ) ;
#ifdef INP_PTR
--curinput_ptr;
#else
curinput = inputstack [ inputptr ] ;
#endif
}
decr ( inopen ) ;
}
void clearforerrorprompt ( void )
{ clearforerrorprompt_regmem
while ( ( curinput .statefield != tokenlist )
&& ( curinput .namefield == 0 )
&& ( inputptr > 0 )
&& ( curinput .locfield > curinput .limitfield ) )
endfilereading () ;
println () ;
clearterminal () ;
}
void checkoutervalidity ( void )
{ checkoutervalidity_regmem
if ( scannerstatus != normal ) {
deletionsallowed = false ;
if ( curcs != 0 ) {
if ( ( curinput .statefield == tokenlist )
|| ( curinput .namefield < 1 )
|| ( curinput .namefield > 17 ) ) {
register long_halfword p;
p = getavail();
info ( p ) = cstokenflag + curcs;
begintokenlist( p, backedup );
}
curcmd = 10 ;
curchr = 32 ;
}
if ( scannerstatus > skipping ) {
runaway () ;
if ( curcs == 0 ) {
print_err("File ended");
} else {
curcs = 0 ;
print_err("Forbidden control sequence found");
}
c_print(" while scanning ");
{ register halfword p;
p = getavail () ;
switch ( scannerstatus ) {
case defining :
{
c_print("definition");
info ( p ) = rightbracetoken + 125 ;
}
break ;
case matching :
{
c_print("use");
info ( p ) = partoken ;
longstate = outercall ;
}
break ;
case aligning :
{ register halfword q;
c_print("preamble");
info ( p ) = rightbracetoken + 125 ;
q = p ;
p = getavail () ;
link ( p ) = q ;
info ( p ) = cstokenflag + frozencr ;
alignstate = -1000000L ;
}
break ;
case absorbing :
{
c_print("text");
info ( p ) = rightbracetoken + 125;
}
break;
}
begintokenlist( p, inserted);
}
c_print(" of ");
sprintcs( warningindex );
zhelp1( STR_H_ISUSPECT_FORGOTTEN );
error();
} else {
print_err("Incomplete ");
printcmdchr( iftest, curif );
c_print("; all text was ignored after line ");
printint ( skipline );
if ( curcs != 0 ) {
zhelp2( STR_H_AFORBIDDEN_SKIPPED, STR_H_THISKIND_HAPPENS_IF );
curcs = 0;
} else {
zhelp2( STR_H_THEFILEENDEDWHILE, STR_H_THISKIND_HAPPENS_IF );
}
curtok = cstokenflag + frozenfi;
inserror();
}
deletionsallowed = true;
}
}
void firmuptheline ( void )
{ firmuptheline_regmem
register integer k ;
#if 0 /* (br) deleted */
curinput .limitfield = last ;
if ( pausing > 0 )
#endif
if ( interaction > nonstopmode ) {
wakeupterminal () ;
println () ;
if ( curinput .startfield < curinput .limitfield )
{register integer for_end; k = curinput .startfield ; for_end = curinput
.limitfield - 1 ; if ( k <= for_end) do
print ( buffer [ k ] ) ;
while ( k++ < for_end ) ; }
first = curinput .limitfield;
terminput("=>");
if ( last > first ) {
{register integer for_end; k = first ; for_end = last - 1 ; if ( k <=
for_end) do
buffer [ k + curinput .startfield - first ] = buffer [ k ] ;
while ( k++ < for_end ) ; }
curinput .limitfield = curinput .startfield + last - first ;
}
}
}
void macrocall ( void )
{ macrocall_regmem
register halfword r;
halfword p;
register halfword s;
halfword rbraceptr;
register smallnumber n;
register halfword unbalance;
register halfword m;
halfword refcount;
smallnumber savescannerstatus;
halfword savewarningindex;
ASCIIcode matchchr;
savescannerstatus = scannerstatus ;
savewarningindex = warningindex ;
warningindex = curcs ;
refcount = curchr;
r = link ( refcount ) ;
n = 0 ;
if ( tracingmacros > 0 ) {
begindiagnostic () ;
println () ;
printcs ( warningindex ) ;
tokenshow ( refcount ) ;
enddiagnostic ( false ) ;
}
if ( info ( r ) != endmatchtoken ) {
scannerstatus = matching ;
unbalance = 0 ;
longstate = eqtype ( curcs ) ;
if ( longstate >= outercall )
longstate = longstate - 2 ;
do {
link ( temphead ) = 0 ;
if ( ( info ( r ) > matchtoken + 255 ) || ( info ( r ) < matchtoken ) )
s = 0 ;
else {
matchchr = info ( r ) - matchtoken ;
s = link ( r ) ;
r = s ;
p = temphead ;
m = 0 ;
}
lab22: gettoken () ;
{ register halfword r_curtok = curtok;
if ( r_curtok == info ( r ) ) {
r = link ( r ) ;
if ( ( info(r) >= matchtoken ) && ( info(r) <= endmatchtoken ) ) {
if ( r_curtok < leftbracelimit )
decr ( alignstate ) ;
goto lab40 ;
} else
goto lab22 ;
}
if ( s != r )
if ( s == 0 ) {
print_err("Use of ");
sprintcs ( warningindex ) ;
c_print(" doesn't match its definition");
zhelp1( STR_H_IFYOUSAY_DEFA );
error();
goto lab10 ;
} else {
register halfword t;
t = s ;
do {
register halfword u, v;
storenewtoken( info ( t ) );
incr ( m ) ;
u = link ( t ) ;
v = s;
while ( true ) {
if ( u == r )
if ( r_curtok != info ( v ) )
goto lab30 ;
else {
r = link ( v ) ;
goto lab22 ;
}
if ( info ( u ) != info ( v ) )
goto lab30 ;
u = link ( u ) ;
v = link ( v ) ;
}
lab30: t = link ( t ) ;
} while ( ! ( t == r ) ) ;
r = s ;
}
if ( r_curtok == partoken )
if ( longstate != longcall ) {
if ( longstate == call ) {
runaway () ;
print_err("Paragraph ended before ");
sprintcs ( warningindex ) ;
c_print(" was complete");
zhelp1( STR_H_ISUSPECT_CAUSING );
backerror () ;
}
pstack [ n ] = link ( temphead ) ;
alignstate = alignstate - unbalance ;
for( m = 0 ; m <= n ; m++ ) {
flushlist ( pstack [ m ] ) ;
}
goto lab10 ;
}
if ( r_curtok < rightbracelimit )
if ( r_curtok < leftbracelimit ) {
/* register halfword r_curtok = curtok; */
unbalance = 1 ;
while ( true ) {
faststorenewtoken ( r_curtok );
gettoken () ;
r_curtok = curtok;
if ( r_curtok == partoken )
if ( longstate != longcall ) {
if ( longstate == call ) {
runaway () ;
print_err("Paragraph ended before ");
sprintcs ( warningindex ) ;
c_print(" was complete");
zhelp1( STR_H_ISUSPECT_CAUSING );
backerror () ;
}
pstack [ n ] = link ( temphead ) ;
alignstate = alignstate - unbalance ;
for( m = 0 ; m <= n ; m++ ) {
flushlist ( pstack [ m ] ) ;
}
goto lab10 ;
}
if ( r_curtok < rightbracelimit )
if ( r_curtok < leftbracelimit )
incr ( unbalance ) ;
else {
decr ( unbalance ) ;
if ( unbalance == 0 )
goto lab31 ;
}
}
lab31: rbraceptr = p ;
storenewtoken ( r_curtok );
} else {
backinput () ;
print_err("Argument of ");
sprintcs ( warningindex ) ;
c_print(" has an extra }");
zhelp1( STR_H_IVERUNACROSS );
incr ( alignstate ) ;
longstate = call ;
curtok = partoken ;
inserror () ;
}
else { /* (curtok >= rightbracelimit) */
if ( r_curtok == spacetoken )
if ( info ( r ) <= endmatchtoken && info ( r ) >= matchtoken )
goto lab22 ;
storenewtoken ( r_curtok );
}
}
incr ( m ) ;
if ( info ( r ) > endmatchtoken )
goto lab22 ;
if ( info ( r ) < matchtoken )
goto lab22 ;
lab40:
if ( s != 0 ) {
if ( (m == 1) && ( info(p) < rightbracelimit ) && ( p != temphead ) ) {
link ( rbraceptr ) = 0 ;
freeavail ( p ) ;
p = link ( temphead ) ;
pstack [ n ] = link ( p ) ;
freeavail ( p ) ;
} else
pstack [ n ] = link ( temphead ) ;
incr ( n ) ;
if ( tracingmacros > 0 ) {
begindiagnostic () ;
printnl ( matchchr ) ;
printint ( n ) ;
c_print("<-");
showtokenlist ( pstack [ n - 1 ] , 0 , 1000 ) ;
enddiagnostic ( false ) ;
}
}
} while ( ! ( info ( r ) == endmatchtoken ) ) ;
}
while ( ( curinput.statefield == tokenlist ) && ( curinput.locfield == 0 ) )
endtokenlist ();
begintokenlist ( refcount , macro ) ;
curinput .namefield = warningindex ;
curinput .locfield = link ( r ) ;
if ( n > 0 ) {
if ( paramptr + n > maxparamstack ) {
maxparamstack = paramptr + n ;
if ( maxparamstack > paramsize )
overflow(10, paramsize);
}
for( m = 0 ; m <= n - 1 ; m++ ) {
paramstack [ paramptr + m ] = pstack [ m ] ;
}
paramptr += n ;
}
lab10:
scannerstatus = savescannerstatus ;
warningindex = savewarningindex ;
}
void insertrelax ( void )
{ insertrelax_regmem
curtok = cstokenflag + curcs ;
backinput () ;
curtok = cstokenflag + frozenrelax ;
backinput () ;
tokentype = inserted ;
}
void expand ( void )
{ expand_regmem
integer cvbackup ;
smallnumber cvlbackup, radixbackup, cobackup ;
halfword backupbackup ;
cvbackup = curval;
cvlbackup = curvallevel;
radixbackup = radix ;
cobackup = curorder ;
backupbackup = link ( backuphead ) ;
if ( curcmd < call ) {
if ( tracingcommands > 1 )
showcurcmdchr () ;
switch ( curcmd ) {
case topbotmark :
if ( curmark [ curchr ] != 0 )
begintokenlist ( curmark [ curchr ] , marktext ) ;
break ;
case expandafter :
{ register halfword t;
gettoken () ;
t = curtok ;
if( (halfword)gettoken() > maxcommand )
expand();
else
backinput();
curtok = t ;
backinput();
}
break ;
case noexpand :
{ register halfword t;
register smallnumber savescannerstatus;
savescannerstatus = scannerstatus ;
scannerstatus = normal ;
gettoken () ;
scannerstatus = savescannerstatus ;
t = curtok ;
backinput () ;
if ( t >= cstokenflag ) {
register halfword p;
p = getavail () ;
info ( p ) = cstokenflag + frozendontexpand ;
link ( p ) = curinput .locfield ;
curinput .startfield = p ;
curinput .locfield = p ;
}
}
break ;
case csname :
{ register halfword p, r;
register integer j;
r = getavail () ;
p = r ;
do {
getxtoken () ;
if ( curcs == 0 )
storenewtoken ( curtok );
} while( curcs == 0 );
if ( curcmd != 67 ) {
print_err("Missing ");
printesc( STR_ENDCSNAME );
c_print(" inserted");
zhelp1( STR_H_THECSMARKED );
backerror();
}
j = first ;
p = link ( r ) ;
while ( p != 0 ) {
if ( j >= maxbufstack ) {
maxbufstack = j + 1 ;
if ( maxbufstack == bufsize )
overflow(1, bufsize);
}
buffer [ j ] = info ( p ) % 256 ;
incr ( j ) ;
p = link ( p ) ;
}
if ( j > first + 1 ) {
nonewcontrolsequence = false ;
curcs = idlookup ( first , j - first ) ;
nonewcontrolsequence = true ;
} else if ( j == first )
curcs = nullcs ;
else
curcs = singlebase + buffer [ first ] ;
flushlist ( r ) ;
if ( eqtype ( curcs ) == undefinedcs ) {
eqdefine ( curcs , 0 , 256 ) ;
}
curtok = curcs + cstokenflag ;
backinput () ;
}
break ;
case convert :
convtoks () ;
break ;
case the :
insthetoks () ;
break ;
case iftest :
conditional () ;
break ;
case fiorelse :
if ( curchr > iflimit )
if ( iflimit == ifcode )
insertrelax () ;
else {
print_err("Extra ");
printcmdchr ( fiorelse , curchr ) ;
zhelp1( STR_H_IMIGNORING_IF );
error () ;
} else {
while ( curchr != ficode )
passtext () ;
{ register halfword p;
p = condptr ;
ifline = iflinefield ( p ) ;
curif = subtype ( p ) ;
iflimit = ztype ( p ) ;
condptr = link ( p ) ;
freenode ( p , ifnodesize ) ;
}
}
break ;
case input :
if ( curchr > 0 )
forceeof = true ;
else if ( nameinprogress )
insertrelax () ;
else startinput () ;
break ;
default:
{
print_err("Undefined control sequence");
zhelp1( STR_H_THECSATTHEEND );
error();
}
break;
}
} else if ( curcmd < endtemplate )
macrocall () ;
else {
curtok = cstokenflag + frozenendv ;
backinput () ;
}
curval = cvbackup;
curvallevel = cvlbackup;
radix = radixbackup ;
curorder = cobackup ;
link ( backuphead ) = backupbackup ;
}
/* -- end -- */