Commit | Line | Data |
---|---|---|
f10d52e6 JO |
1 | #include "tdef.h" |
2 | extern | |
3 | #include "d.h" | |
4 | extern | |
5 | #include "v.h" | |
6 | #ifdef NROFF | |
7 | extern | |
8 | #include "tw.h" | |
9 | #endif | |
10 | #include "s.h" | |
11 | #ifdef NROFF | |
12 | #define GETCH gettch | |
13 | #endif | |
14 | #ifndef NROFF | |
15 | #define GETCH getch | |
16 | #endif | |
17 | ||
18 | /* | |
19 | troff7.c | |
20 | ||
21 | text | |
22 | */ | |
23 | ||
24 | extern struct s *frame, *stk; | |
25 | extern struct s *ejl; | |
26 | ||
27 | extern int pl; | |
28 | extern int trap; | |
29 | extern int flss; | |
30 | extern int npnflg; | |
31 | extern int npn; | |
32 | extern int stop; | |
33 | extern int nflush; | |
34 | extern int ejf; | |
35 | extern int ascii; | |
36 | extern int donef; | |
37 | extern int nc; | |
38 | extern int wch; | |
39 | extern int dpn; | |
40 | extern int ndone; | |
41 | extern int lss; | |
42 | extern int pto; | |
43 | extern int pfrom; | |
44 | extern int print; | |
45 | extern int nlist[NTRAP]; | |
46 | extern int mlist[NTRAP]; | |
47 | extern int *pnp; | |
48 | extern int nb; | |
49 | extern int ic; | |
50 | extern int icf; | |
51 | extern int ics; | |
52 | extern int ne; | |
53 | extern int ll; | |
54 | extern int un; | |
55 | extern int un1; | |
56 | extern int in; | |
57 | extern int ls; | |
58 | extern int spread; | |
59 | extern int totout; | |
60 | extern int nwd; | |
61 | extern int *pendw; | |
62 | extern int *linep; | |
63 | extern int line[]; | |
64 | extern int lastl; | |
65 | extern int ch; | |
66 | extern int ce; | |
67 | extern int fi; | |
68 | extern int nlflg; | |
69 | extern int pendt; | |
70 | extern int sps; | |
71 | extern int adsp; | |
72 | extern int pendnf; | |
73 | extern int over; | |
74 | extern int adrem; | |
75 | extern int nel; | |
76 | extern int ad; | |
77 | extern int ohc; | |
78 | extern int hyoff; | |
79 | extern int nhyp; | |
80 | extern int spflg; | |
81 | extern int word[]; | |
82 | extern int *wordp; | |
83 | extern int wne; | |
84 | extern int chbits; | |
85 | extern int cwidth; | |
86 | extern int widthp; | |
87 | extern int hyf; | |
88 | extern int xbitf; | |
89 | extern int vflag; | |
90 | extern int ul; | |
91 | extern int cu; | |
92 | extern int font; | |
93 | extern int sfont; | |
94 | extern int it; | |
95 | extern int itmac; | |
96 | extern int *hyptr[NHYP]; | |
97 | extern int **hyp; | |
98 | extern int *wdstart, *wdend; | |
99 | extern int lnmod; | |
100 | extern int admod; | |
101 | extern int nn; | |
102 | extern int nms; | |
103 | extern int ndf; | |
104 | extern int ni; | |
105 | extern int nform; | |
106 | extern int lnsize; | |
107 | extern int po; | |
108 | extern int ulbit; | |
109 | extern int *vlist; | |
110 | extern int nrbits; | |
111 | extern int nmbits; | |
112 | extern char trtab[]; | |
113 | extern int xxx; | |
114 | int brflg; | |
115 | ||
116 | tbreak(){ | |
117 | register *i, j, pad; | |
118 | int res; | |
119 | ||
120 | trap = 0; | |
121 | if(nb)return; | |
122 | if((dip == d) && (v.nl == -1)){ | |
123 | newline(1); | |
124 | return; | |
125 | } | |
126 | if(!nc){ | |
127 | setnel(); | |
128 | if(!wch)return; | |
129 | if(pendw)getword(1); | |
130 | movword(); | |
131 | }else if(pendw && !brflg){ | |
132 | getword(1); | |
133 | movword(); | |
134 | } | |
135 | *linep = dip->nls = 0; | |
136 | #ifdef NROFF | |
137 | if(dip == d)horiz(po); | |
138 | #endif | |
139 | if(lnmod)donum(); | |
140 | lastl = ne; | |
141 | if(brflg != 1){ | |
142 | totout = 0; | |
143 | }else if(ad){ | |
144 | if((lastl = (ll - un)) < ne)lastl = ne; | |
145 | } | |
146 | if(admod && ad && (brflg != 2)){ | |
147 | lastl = ne; | |
148 | adsp = adrem = 0; | |
149 | #ifdef NROFF | |
150 | if(admod == 1)un += quant(nel/2,t.Adj); | |
151 | #endif | |
152 | #ifndef NROFF | |
153 | if(admod == 1)un += nel/2; | |
154 | #endif | |
155 | else if(admod ==2)un += nel; | |
156 | } | |
157 | totout++; | |
158 | brflg = 0; | |
159 | if((lastl+un) > dip->maxl)dip->maxl = (lastl+un); | |
160 | horiz(un); | |
161 | #ifdef NROFF | |
162 | if(adrem%t.Adj)res = t.Hor; else res = t.Adj; | |
163 | #endif | |
164 | for(i = line;nc > 0;){ | |
165 | if(((j = *i++) & CMASK) == ' '){ | |
166 | pad = 0; | |
167 | do{ | |
168 | pad += width(j); | |
169 | nc--; | |
170 | }while(((j = *i++) & CMASK) == ' '); | |
171 | i--; | |
172 | pad += adsp; | |
173 | --nwd; | |
174 | if(adrem){ | |
175 | if(adrem < 0){ | |
176 | #ifdef NROFF | |
177 | pad -= res; | |
178 | adrem += res; | |
179 | }else if((totout&01) || | |
180 | ((adrem/res)>=(nwd))){ | |
181 | pad += res; | |
182 | adrem -= res; | |
183 | #endif | |
184 | #ifndef NROFF | |
185 | pad--; | |
186 | adrem++; | |
187 | }else{ | |
188 | pad++; | |
189 | adrem--; | |
190 | #endif | |
191 | } | |
192 | } | |
193 | horiz(pad); | |
194 | }else{ | |
195 | pchar(j); | |
196 | nc--; | |
197 | } | |
198 | } | |
199 | if(ic){ | |
200 | if((j = ll - un - lastl + ics) > 0)horiz(j); | |
201 | pchar(ic); | |
202 | } | |
203 | if(icf)icf++; | |
204 | else ic = 0; | |
205 | ne = nwd = 0; | |
206 | un = in; | |
207 | setnel(); | |
208 | newline(0); | |
209 | if(dip != d){if(dip->dnl > dip->hnl)dip->hnl = dip->dnl;} | |
210 | else{if(v.nl > dip->hnl)dip->hnl = v.nl;} | |
211 | for(j=ls-1; (j >0) && !trap; j--)newline(0); | |
212 | spread = 0; | |
213 | } | |
214 | donum(){ | |
215 | register i, nw; | |
216 | extern pchar(); | |
217 | ||
218 | nrbits = nmbits; | |
219 | nw = width('1' | nrbits); | |
220 | if(nn){ | |
221 | nn--; | |
222 | goto d1; | |
223 | } | |
224 | if(v.ln%ndf){ | |
225 | v.ln++; | |
226 | d1: | |
227 | un += nw*(3+nms+ni); | |
228 | return; | |
229 | } | |
230 | i = 0; | |
231 | if(v.ln<100)i++; | |
232 | if(v.ln<10)i++; | |
233 | horiz(nw*(ni+i)); | |
234 | nform = 0; | |
235 | fnumb(v.ln,pchar); | |
236 | un += nw*nms; | |
237 | v.ln++; | |
238 | } | |
239 | text(){ | |
240 | register i; | |
241 | static int spcnt; | |
242 | ||
243 | nflush++; | |
244 | if((dip == d) && (v.nl == -1)){newline(1); return;} | |
245 | setnel(); | |
246 | if(ce || !fi){ | |
247 | nofill(); | |
248 | return; | |
249 | } | |
250 | if(pendw)goto t4; | |
251 | if(pendt)if(spcnt)goto t2; else goto t3; | |
252 | pendt++; | |
253 | if(spcnt)goto t2; | |
254 | while(((i = GETCH()) & CMASK) == ' ')spcnt++; | |
255 | if(nlflg){ | |
256 | t1: | |
257 | nflush = pendt = ch = spcnt = 0; | |
258 | callsp(); | |
259 | return; | |
260 | } | |
261 | ch = i; | |
262 | if(spcnt){ | |
263 | t2: | |
264 | tbreak(); | |
265 | if(nc || wch)goto rtn; | |
266 | un += spcnt*sps; | |
267 | spcnt = 0; | |
268 | setnel(); | |
269 | if(trap)goto rtn; | |
270 | if(nlflg)goto t1; | |
271 | } | |
272 | t3: | |
273 | if(spread)goto t5; | |
274 | if(pendw || !wch) | |
275 | t4: | |
276 | if(getword(0))goto t6; | |
277 | if(!movword())goto t3; | |
278 | t5: | |
279 | if(nlflg)pendt = 0; | |
280 | adsp = adrem = 0; | |
281 | if(ad){ | |
282 | /* jfr */ if (nwd==1) adsp=nel; else adsp=nel/(nwd-1); | |
283 | #ifdef NROFF | |
284 | adsp = (adsp/t.Adj)*t.Adj; | |
285 | #endif | |
286 | adrem = nel - adsp*(nwd-1); | |
287 | } | |
288 | brflg = 1; | |
289 | tbreak(); | |
290 | spread = 0; | |
291 | if(!trap)goto t3; | |
292 | if(!nlflg)goto rtn; | |
293 | t6: | |
294 | pendt = 0; | |
295 | ckul(); | |
296 | rtn: | |
297 | nflush = 0; | |
298 | } | |
299 | nofill(){ | |
300 | register i, j; | |
301 | ||
302 | if(!pendnf){ | |
303 | over = 0; | |
304 | tbreak(); | |
305 | if(trap)goto rtn; | |
306 | if(nlflg){ | |
307 | ch = nflush = 0; | |
308 | callsp(); | |
309 | return; | |
310 | } | |
311 | adsp = adrem = 0; | |
312 | nwd = 10000; | |
313 | } | |
314 | while((j = ((i = GETCH()) & CMASK)) != '\n'){ | |
315 | if(j == ohc)continue; | |
316 | if(j == CONT){ | |
317 | pendnf++; | |
318 | nflush = 0; | |
319 | flushi(); | |
320 | ckul(); | |
321 | return; | |
322 | } | |
323 | storeline(i,-1); | |
324 | } | |
325 | if(ce){ | |
326 | ce--; | |
327 | if((i=quant(nel/2,HOR)) > 0)un += i; | |
328 | } | |
329 | if(!nc)storeline(FILLER,0); | |
330 | brflg = 2; | |
331 | tbreak(); | |
332 | ckul(); | |
333 | rtn: | |
334 | pendnf = nflush = 0; | |
335 | } | |
336 | callsp(){ | |
337 | register i; | |
338 | ||
339 | if(flss)i = flss; else i = lss; | |
340 | flss = 0; | |
341 | casesp(i); | |
342 | } | |
343 | ckul(){ | |
344 | if(ul && (--ul == 0)){ | |
345 | cu = 0; | |
346 | font = sfont; | |
347 | mchbits(); | |
348 | } | |
349 | if(it && (--it == 0) && itmac)control(itmac,0); | |
350 | } | |
351 | storeline(c,w){ | |
352 | register i; | |
353 | ||
354 | if((c & CMASK) == JREG){ | |
355 | if((i=findr(c>>BYTE)) != -1)vlist[i] = ne; | |
356 | return; | |
357 | } | |
358 | if(linep >= (line + lnsize - 1)){ | |
359 | if(!over){ | |
360 | prstrfl("Line overflow.\n"); | |
361 | over++; | |
362 | c = 0343; | |
363 | w = -1; | |
364 | goto s1; | |
365 | } | |
366 | return; | |
367 | } | |
368 | s1: | |
369 | if(w == -1)w = width(c); | |
370 | ne += w; | |
371 | nel -= w; | |
372 | /* | |
373 | * if( cu && !(c & MOT) && (trtab[(c & CMASK)] == ' ')) | |
374 | * c = ((c & ~ulbit) & ~CMASK) | '_'; | |
375 | */ | |
376 | *linep++ = c; | |
377 | nc++; | |
378 | } | |
379 | newline(a) | |
380 | int a; | |
381 | { | |
382 | register i, j, nlss; | |
383 | int opn; | |
384 | ||
385 | if(a)goto nl1; | |
386 | if(dip != d){ | |
387 | j = lss; | |
388 | pchar1(FLSS); | |
389 | if(flss)lss = flss; | |
390 | i = lss + dip->blss; | |
391 | dip->dnl += i; | |
392 | pchar1(i); | |
393 | pchar1('\n'); | |
394 | lss = j; | |
395 | dip->blss = flss = 0; | |
396 | if(dip->alss){ | |
397 | pchar1(FLSS); | |
398 | pchar1(dip->alss); | |
399 | pchar1('\n'); | |
400 | dip->dnl += dip->alss; | |
401 | dip->alss = 0; | |
402 | } | |
403 | if(dip->ditrap && !dip->ditf && | |
404 | (dip->dnl >= dip->ditrap) && dip->dimac) | |
405 | if(control(dip->dimac,0)){trap++; dip->ditf++;} | |
406 | return; | |
407 | } | |
408 | j = lss; | |
409 | if(flss)lss = flss; | |
410 | nlss = dip->alss + dip->blss + lss; | |
411 | v.nl += nlss; | |
412 | #ifndef NROFF | |
413 | if(ascii){dip->alss = dip->blss = 0;} | |
414 | #endif | |
415 | pchar1('\n'); | |
416 | flss = 0; | |
417 | lss = j; | |
418 | if(v.nl < pl)goto nl2; | |
419 | nl1: | |
420 | ejf = dip->hnl = v.nl = 0; | |
421 | ejl = frame; | |
422 | if(donef){ | |
423 | if((!nc && !wch) || ndone)done1(0); | |
424 | ndone++; | |
425 | donef = 0; | |
426 | if(frame == stk)nflush++; | |
427 | } | |
428 | opn = v.pn; | |
429 | v.pn++; | |
430 | if(npnflg){ | |
431 | v.pn = npn; | |
432 | npn = npnflg = 0; | |
433 | } | |
434 | nlpn: | |
435 | if(v.pn == pfrom){ | |
436 | print++; | |
437 | pfrom = -1; | |
438 | }else if(opn == pto){ | |
439 | print = 0; | |
440 | opn = -1; | |
441 | chkpn(); | |
442 | goto nlpn; | |
443 | } | |
444 | if(stop && print){ | |
445 | dpn++; | |
446 | if(dpn >= stop){ | |
447 | dpn = 0; | |
448 | dostop(); | |
449 | } | |
450 | } | |
451 | nl2: | |
452 | trap = 0; | |
453 | if(v.nl == 0){ | |
454 | if((j = findn(0)) != NTRAP) | |
455 | trap = control(mlist[j],0); | |
456 | } else if((i = findt(v.nl-nlss)) <= nlss){ | |
457 | if((j = findn1(v.nl-nlss+i)) == NTRAP){ | |
458 | prstrfl("Trap botch.\n"); | |
459 | done2(-5); | |
460 | } | |
461 | trap = control(mlist[j],0); | |
462 | } | |
463 | } | |
464 | findn1(a) | |
465 | int a; | |
466 | { | |
467 | register i, j; | |
468 | ||
469 | for(i=0; i<NTRAP; i++){ | |
470 | if(mlist[i]){ | |
471 | if((j = nlist[i]) < 0)j += pl; | |
472 | if(j == a)break; | |
473 | } | |
474 | } | |
475 | return(i); | |
476 | } | |
477 | chkpn(){ | |
478 | pto = *(pnp++); | |
479 | pfrom = pto & ~MOT; | |
480 | if(pto == -1){ | |
481 | flusho(); | |
482 | done1(0); | |
483 | } | |
484 | if(pto & MOT){ | |
485 | pto &= ~MOT; | |
486 | print++; | |
487 | pfrom = 0; | |
488 | } | |
489 | } | |
490 | findt(a) | |
491 | int a; | |
492 | { | |
493 | register i, j, k; | |
494 | ||
495 | k = 32767; | |
496 | if(dip != d){ | |
497 | if(dip->dimac && ((i = dip->ditrap -a) > 0))k = i; | |
498 | return(k); | |
499 | } | |
500 | for(i=0; i<NTRAP; i++){ | |
501 | if(mlist[i]){ | |
502 | if((j = nlist[i]) < 0)j += pl; | |
503 | if((j -= a) <= 0)continue; | |
504 | if(j < k)k = j; | |
505 | } | |
506 | } | |
507 | i = pl - a; | |
508 | if(k > i)k = i; | |
509 | return(k); | |
510 | } | |
511 | findt1(){ | |
512 | register i; | |
513 | ||
514 | if(dip != d)i = dip->dnl; | |
515 | else i = v.nl; | |
516 | return(findt(i)); | |
517 | } | |
518 | eject(a) | |
519 | struct s *a; | |
520 | { | |
521 | register savlss; | |
522 | ||
523 | if(dip != d)return; | |
524 | ejf++; | |
525 | if(a)ejl = a; | |
526 | else ejl = frame; | |
527 | if(trap)return; | |
528 | e1: | |
529 | savlss = lss; | |
530 | lss = findt(v.nl); | |
531 | newline(0); | |
532 | lss = savlss; | |
533 | if(v.nl && !trap)goto e1; | |
534 | } | |
535 | movword(){ | |
536 | register i, w, *wp; | |
537 | int savwch, hys; | |
538 | ||
539 | over = 0; | |
540 | wp = wordp; | |
541 | if(!nwd){ | |
542 | while(((i = *wp++) & CMASK) == ' '){ | |
543 | wch--; | |
544 | wne -= width(i); | |
545 | } | |
546 | wp--; | |
547 | } | |
548 | if((wne > nel) && | |
549 | !hyoff && hyf && | |
550 | (!nwd || (nel > 3*sps)) && | |
551 | (!(hyf & 02) || (findt1() > lss)) | |
552 | )hyphen(wp); | |
553 | savwch = wch; | |
554 | hyp = hyptr; | |
555 | nhyp = 0; | |
556 | while(*hyp && (*hyp <= wp))hyp++; | |
557 | while(wch){ | |
558 | if((hyoff != 1) && (*hyp == wp)){ | |
559 | hyp++; | |
560 | if(!wdstart || | |
561 | ((wp > (wdstart+1)) && | |
562 | (wp < wdend) && | |
563 | (!(hyf & 04) || (wp < (wdend-1))) && | |
564 | (!(hyf & 010) || (wp > (wdstart+2))) | |
565 | ) | |
566 | ){ | |
567 | nhyp++; | |
568 | storeline(IMP,0); | |
569 | } | |
570 | } | |
571 | i = *wp++; | |
572 | w = width(i); | |
573 | wne -= w; | |
574 | wch--; | |
575 | storeline(i,w); | |
576 | } | |
577 | if(nel >= 0){ | |
578 | nwd++; | |
579 | return(0); | |
580 | } | |
581 | xbitf = 1; | |
582 | hys = width(0200); /*hyphen*/ | |
583 | m1: | |
584 | if(!nhyp){ | |
585 | if(!nwd)goto m3; | |
586 | if(wch == savwch)goto m4; | |
587 | } | |
588 | if(*--linep != IMP)goto m5; | |
589 | if(!(--nhyp)) | |
590 | if(!nwd)goto m2; | |
591 | if(nel < hys){ | |
592 | nc--; | |
593 | goto m1; | |
594 | } | |
595 | m2: | |
596 | if(((i = *(linep-1) & CMASK) != '-') && | |
597 | (i != 0203) | |
598 | ){ | |
599 | *linep = (*(linep-1) & ~CMASK) | 0200; | |
600 | w = width(*linep); | |
601 | nel -= w; | |
602 | ne += w; | |
603 | linep++; | |
604 | /* | |
605 | hsend(); | |
606 | */ | |
607 | } | |
608 | m3: | |
609 | nwd++; | |
610 | m4: | |
611 | wordp = wp; | |
612 | return(1); | |
613 | m5: | |
614 | nc--; | |
615 | w = width(*linep); | |
616 | ne -= w; | |
617 | nel += w; | |
618 | wne += w; | |
619 | wch++; | |
620 | wp--; | |
621 | goto m1; | |
622 | } | |
623 | horiz(i) | |
624 | int i; | |
625 | { | |
626 | vflag = 0; | |
627 | if(i)pchar(makem(i)); | |
628 | } | |
629 | setnel(){ | |
630 | if(!nc){ | |
631 | linep = line; | |
632 | if(un1 >= 0){ | |
633 | un = un1; | |
634 | un1 = -1; | |
635 | } | |
636 | nel = ll - un; | |
637 | ne = adsp = adrem = 0; | |
638 | } | |
639 | } | |
640 | getword(x) | |
641 | int x; | |
642 | { | |
643 | register i, j, swp; | |
644 | int noword; | |
645 | ||
646 | noword = 0; | |
647 | if(x)if(pendw){ | |
648 | *pendw = 0; | |
649 | goto rtn; | |
650 | } | |
651 | if(wordp = pendw)goto g1; | |
652 | hyp = hyptr; | |
653 | wordp = word; | |
654 | over = wne = wch = 0; | |
655 | hyoff = 0; | |
656 | while(1){ | |
657 | j = (i = GETCH()) & CMASK; | |
658 | if(j == '\n'){ | |
659 | wne = wch = 0; | |
660 | noword = 1; | |
661 | goto rtn; | |
662 | } | |
663 | if(j == ohc){ | |
664 | hyoff = 1; | |
665 | continue; | |
666 | } | |
667 | if(j == ' '){ | |
668 | storeword(i,cwidth); | |
669 | continue; | |
670 | } | |
671 | break; | |
672 | } | |
673 | swp = widthp; | |
674 | storeword(' ' | chbits, -1); | |
675 | if(spflg){ | |
676 | storeword(' ' | chbits, -1); | |
677 | spflg = 0; | |
678 | } | |
679 | widthp = swp; | |
680 | g0: | |
681 | if(j == CONT){ | |
682 | pendw = wordp; | |
683 | nflush = 0; | |
684 | flushi(); | |
685 | return(1); | |
686 | } | |
687 | if(hyoff != 1){ | |
688 | if(j == ohc){ | |
689 | hyoff = 2; | |
690 | *hyp++ = wordp; | |
691 | if(hyp > (hyptr+NHYP-1))hyp = hyptr+NHYP-1; | |
692 | goto g1; | |
693 | } | |
694 | if((j == '-') || | |
695 | (j == 0203) /*3/4 Em dash*/ | |
696 | )if(wordp > word+1){ | |
697 | hyoff = 2; | |
698 | *hyp++ = wordp + 1; | |
699 | if(hyp > (hyptr+NHYP-1))hyp = hyptr+NHYP-1; | |
700 | } | |
701 | } | |
702 | storeword(i,cwidth); | |
703 | g1: | |
704 | j = (i = GETCH()) & CMASK; | |
705 | if(j != ' '){ | |
706 | if(j != '\n')goto g0; | |
707 | j = *(wordp-1) & CMASK; | |
708 | if((j == '.') || | |
709 | (j == '!') || | |
710 | (j == '?'))spflg++; | |
711 | } | |
712 | *wordp = 0; | |
713 | rtn: | |
714 | wdstart = 0; | |
715 | wordp = word; | |
716 | pendw = 0; | |
717 | *hyp++ = 0; | |
718 | setnel(); | |
719 | return(noword); | |
720 | } | |
721 | storeword(c,w) | |
722 | int c, w; | |
723 | { | |
724 | ||
725 | if(wordp >= &word[WDSIZE - 1]){ | |
726 | if(!over){ | |
727 | prstrfl("Word overflow.\n"); | |
728 | over++; | |
729 | c = 0343; | |
730 | w = -1; | |
731 | goto s1; | |
732 | } | |
733 | return; | |
734 | } | |
735 | s1: | |
736 | if(w == -1)w = width(c); | |
737 | wne += w; | |
738 | *wordp++ = c; | |
739 | wch++; | |
740 | } | |
741 | #ifdef NROFF | |
742 | extern char trtab[]; | |
743 | gettch(){ | |
744 | register int i, j; | |
745 | ||
746 | if(!((i = getch()) & MOT) && (i & ulbit)){ | |
747 | j = i&CMASK; | |
748 | if(cu && (trtab[j] == ' ')) | |
749 | i = ((i & ~ulbit)& ~CMASK) | '_'; | |
750 | if(!cu && (j>32) && (j<0370) && !(*t.codetab[j-32] & 0200)) | |
751 | i &= ~ulbit; | |
752 | } | |
753 | return(i); | |
754 | } | |
755 | #endif |