📄 t6.c
字号:
setsbits(c, n); setfbits(c, pts); /* sneaky, CHARHT font bits are size bits */ return(c);}Tchar t_setslant(void) /* set slant from \S'...' */{ int n; Tchar c; getch(); n = 0; n = inumb(&n); getch(); if (nonumb) n = 0; c = SLANT; c |= ZBIT; setsfbits(c, n+180); return(c);}void caseft(void){ if (!TROFF) { n_caseft(); return; } skip(); setfont(1);}void t_setfont(int a){ int i, j; if (a) i = getrq(); else i = getsn(); if (!i || i == 'P') { j = font1; goto s0; } if (/* i == 'S' || */ i == '0') /* an experiment -- why can't we change to it? */ return; if ((j = findft(i)) == -1) if ((j = setfp(0, i, (char*) 0, 1)) == -1) /* try to put it in position 0 */ return;s0: font1 = font; font = j; mchbits();}void t_setwd(void){ int base, wid; Tchar i; int delim, emsz, k; int savhp, savapts, savapts1, savfont, savfont1, savpts, savpts1; base = numtabp[ST].val = numtabp[SB].val = wid = numtabp[CT].val = 0; if (ismot(i = getch())) return; delim = cbits(i); savhp = numtabp[HP].val; numtabp[HP].val = 0; savapts = apts; savapts1 = apts1; savfont = font; savfont1 = font1; savpts = pts; savpts1 = pts1; setwdf++; while (cbits(i = getch()) != delim && !nlflg) { k = width(i); wid += k; numtabp[HP].val += k; if (!ismot(i)) { emsz = (INCH/72) * xpts; } else if (isvmot(i)) { k = absmot(i); if (isnmot(i)) k = -k; base -= k; emsz = 0; } else continue; if (base < numtabp[SB].val) numtabp[SB].val = base; if ((k = base + emsz) > numtabp[ST].val) numtabp[ST].val = k; } setn1(wid, 0, (Tchar) 0); numtabp[HP].val = savhp; apts = savapts; apts1 = savapts1; font = savfont; font1 = savfont1; pts = savpts; pts1 = savpts1; mchbits(); setwdf = 0;}Tchar t_vmot(void){ dfact = lss; vflag++; return t_mot();}Tchar t_hmot(void){ dfact = EM; return t_mot();}Tchar t_mot(void){ int j, n; Tchar i; j = HOR; getch(); /*eat delim*/ if (n = atoi0()) { if (vflag) j = VERT; i = makem(quant(n, j)); } else i = 0; getch(); vflag = 0; dfact = 1; return(i);}Tchar t_sethl(int k){ int j; Tchar i; j = EM / 2; if (k == 'u') j = -j; else if (k == 'r') j = -2 * j; vflag++; i = makem(j); vflag = 0; return(i);}Tchar t_makem(int i){ Tchar j; if (i >= 0) j = i; else j = -i; if (Hor > 1 && !vflag) j = (j + Hor/2)/Hor * Hor; j |= MOT; if (i < 0) j |= NMOT; if (vflag) j |= VMOT; return(j);}Tchar getlg(Tchar i){ Tchar j, k; int lf; if (!TROFF) return i; if ((lf = fonts[fbits(i)].ligfont) == 0) /* font lacks ligatures */ return(i); j = getch0(); if (cbits(j) == 'i' && (lf & LFI)) j = LIG_FI; else if (cbits(j) == 'l' && (lf & LFL)) j = LIG_FL; else if (cbits(j) == 'f' && (lf & LFF)) { if ((lf & (LFFI|LFFL)) && lg != 2) { k = getch0(); if (cbits(k)=='i' && (lf&LFFI)) j = LIG_FFI; else if (cbits(k)=='l' && (lf&LFFL)) j = LIG_FFL; else { *pbp++ = k; j = LIG_FF; } } else j = LIG_FF; } else { *pbp++ = j; j = i; } return(i & SFMASK | j);}void caselg(void){ if(TROFF) { skip(); lg = atoi0(); if (nonumb) lg = 1; }}void casefp(void){ int i, j; if (!TROFF) { n_casefp(); return; } skip(); i = cbits(getch()); if (isdigit(i)) { i -= '0'; j = cbits(getch()); if (isdigit(j)) i = 10 * i + j - '0'; } if (i <= 0 || i > nfonts) ERROR "fp: bad font position %d", i WARN; else if (skip() || !(j = getrq())) ERROR "fp: no font name" WARN; else if (skip() || !getname()) setfp(i, j, (char*) 0, 1); else /* 3rd argument = filename */ setfp(i, j, nextf, 1);}char *strdupl(const char *s) /* make a copy of s */{ char *t; t = (char *) malloc(strlen(s) + 1); if (t == NULL) ERROR "out of space in strdupl(%s)", s FATAL; strcpy(t, s); return t;}setfp(int pos, int f, char *truename, int print) /* mount font f at position pos[0...nfonts] */{ char pathname[NS], shortname[NS], *sl; zapwcache(0); if (truename) strcpy(shortname, truename); else strcpy(shortname, (char *) unpair(f)); if (truename && strrchr(truename, '/')) { /* .fp 1 R dir/file: use verbatim */ sprintf(pathname, "%s", truename); if (fonts[pos].truename) free(fonts[pos].truename); fonts[pos].truename = strdupl(truename); } else if (truename) { /* synonym: .fp 1 R Avant */ sprintf(pathname, "%s/dev%s/%s", fontdir, devname, truename); truename = 0; /* so doesn't get repeated by ptfpcmd */ } else /* vanilla: .fp 5 XX */ sprintf(pathname, "%s/dev%s/%s", fontdir, devname, shortname); if (truename == 0 && fonts[pos].truename != 0) { free(fonts[pos].truename); fonts[pos].truename = 0; } if (getfont(pathname, pos) < 0) { ERROR "Can't open font file %s", pathname WARN; return -1; } if (print && !ascii) { ptfpcmd(pos, fonts[pos].longname, truename); ptfont(); } if (pos == smnt) { smnt = 0; sbold = 0; } fontlab[pos] = f; if (smnt == 0 && fonts[pos].specfont) smnt = pos; bdtab[pos] = cstab[pos] = ccstab[pos] = 0; return pos;}/* * .cs request; don't check legality of optional arguments */void casecs(void){ int i, j; if (TROFF) { int savtr = trace; trace = 0; noscale++; skip(); if (!(i = getrq()) || (i = findft(i)) < 0) goto rtn; skip(); cstab[i] = atoi0(); skip(); j = atoi0(); if(nonumb) ccstab[i] = 0; else ccstab[i] = findps(j); rtn: zapwcache(0); noscale = 0; trace = savtr; }}void casebd(void){ int i, j, k; if (!TROFF) { n_casebd(); return; } zapwcache(0); k = 0;bd0: if (skip() || !(i = getrq()) || (j = findft(i)) == -1) { if (k) goto bd1; else return; } if (j == smnt) { k = smnt; goto bd0; } if (k) { sbold = j; j = k; }bd1: skip(); noscale++; bdtab[j] = atoi0(); noscale = 0;}void casevs(void){ int i; if (!TROFF) { n_casevs(); return; } skip(); vflag++; dfact = INCH; /* default scaling is points! */ dfactd = 72; res = VERT; i = inumb(&lss); if (nonumb) i = lss1; if (i < VERT) i = VERT; lss1 = lss; lss = i;}void casess(void){ int i; if(TROFF) { noscale++; skip(); if(i = atoi0()) { spacesz = i & 0177; zapwcache(0); sps = width(' ' | chbits); } noscale = 0; }}Tchar t_xlss(void){ /* stores \x'...' into two successive Tchars. /* the first contains HX, the second the value, /* encoded as a vertical motion. /* decoding is done in n2.c by pchar(). */ int i; getch(); dfact = lss; i = quant(atoi0(), VERT); dfact = 1; getch(); if (i >= 0) *pbp++ = MOT | VMOT | i; else *pbp++ = MOT | VMOT | NMOT | -i; return(HX);}Uchar *unpair(int i){ static Uchar name[3]; name[0] = i & SHORTMASK; name[1] = (i >> SHORT) & SHORTMASK; name[2] = 0; return name;}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -