add
This commit is contained in:
parent
49a1496cbb
commit
c42a1d3d61
31 changed files with 4745 additions and 2 deletions
131
src/cmd/htmlroff/t17.c
Normal file
131
src/cmd/htmlroff/t17.c
Normal file
|
|
@ -0,0 +1,131 @@
|
|||
#include "a.h"
|
||||
|
||||
/*
|
||||
* 17. Environment switching.
|
||||
*/
|
||||
typedef struct Env Env;
|
||||
struct Env
|
||||
{
|
||||
int s;
|
||||
int s0;
|
||||
int f;
|
||||
int f0;
|
||||
int fi;
|
||||
int ad;
|
||||
int ce;
|
||||
int v;
|
||||
int v0;
|
||||
int ls;
|
||||
int ls0;
|
||||
int it;
|
||||
/* - ta */
|
||||
/* - tc */
|
||||
/* - lc */
|
||||
/* - ul */
|
||||
/* - cu */
|
||||
/* - cc */
|
||||
/* - c2 */
|
||||
/* - nh */
|
||||
/* - hy */
|
||||
/* - hc */
|
||||
/* - lt */
|
||||
/* - nm */
|
||||
/* - nn */
|
||||
/* - mc */
|
||||
};
|
||||
|
||||
Env defenv =
|
||||
{
|
||||
10,
|
||||
10,
|
||||
1,
|
||||
1,
|
||||
1,
|
||||
1,
|
||||
0,
|
||||
12,
|
||||
12,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
};
|
||||
|
||||
Env env[3];
|
||||
Env *evstack[20];
|
||||
int nevstack;
|
||||
|
||||
void
|
||||
saveenv(Env *e)
|
||||
{
|
||||
e->s = getnr(L(".s"));
|
||||
e->s0 = getnr(L(".s0"));
|
||||
e->f = getnr(L(".f"));
|
||||
e->f0 = getnr(L(".f0"));
|
||||
e->fi = getnr(L(".fi"));
|
||||
e->ad = getnr(L(".ad"));
|
||||
e->ce = getnr(L(".ce"));
|
||||
e->v = getnr(L(".v"));
|
||||
e->v0 = getnr(L(".v0"));
|
||||
e->ls = getnr(L(".ls"));
|
||||
e->ls0 = getnr(L(".ls0"));
|
||||
e->it = getnr(L(".it"));
|
||||
}
|
||||
|
||||
void
|
||||
restoreenv(Env *e)
|
||||
{
|
||||
nr(L(".s"), e->s);
|
||||
nr(L(".s0"), e->s0);
|
||||
nr(L(".f"), e->f);
|
||||
nr(L(".f0"), e->f0);
|
||||
nr(L(".fi"), e->fi);
|
||||
nr(L(".ad"), e->ad);
|
||||
nr(L(".ce"), e->ce);
|
||||
nr(L(".v"), e->v);
|
||||
nr(L(".v0"), e->v0);
|
||||
nr(L(".ls"), e->ls);
|
||||
nr(L(".ls0"), e->ls0);
|
||||
nr(L(".it"), e->it);
|
||||
|
||||
nr(L(".ev"), e-env);
|
||||
runmacro1(L("font"));
|
||||
}
|
||||
|
||||
|
||||
void
|
||||
r_ev(int argc, Rune **argv)
|
||||
{
|
||||
int i;
|
||||
Env *e;
|
||||
|
||||
if(argc == 1){
|
||||
if(nevstack <= 0){
|
||||
if(verbose) warn(".ev stack underflow");
|
||||
return;
|
||||
}
|
||||
restoreenv(evstack[--nevstack]);
|
||||
return;
|
||||
}
|
||||
if(nevstack >= nelem(evstack))
|
||||
sysfatal(".ev stack overflow");
|
||||
i = eval(argv[1]);
|
||||
if(i < 0 || i > 2){
|
||||
warn(".ev bad environment %d", i);
|
||||
i = 0;
|
||||
}
|
||||
e = &env[getnr(L(".ev"))];
|
||||
saveenv(e);
|
||||
evstack[nevstack++] = e;
|
||||
restoreenv(&env[i]);
|
||||
}
|
||||
|
||||
void
|
||||
t17init(void)
|
||||
{
|
||||
int i;
|
||||
|
||||
for(i=0; i<nelem(env); i++)
|
||||
env[i] = defenv;
|
||||
|
||||
addreq(L("ev"), r_ev, -1);
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue