* vsort - Sort troff output for versatec to reduce amount of reverse leading
int skmagic
= 1; /* skip the first leading so start at top of page */
int cpsize
= 02; /* Funny sizes */
#define MODOFF 3672 /* 432 * 8.5 */
int esc
, lead
, back
, verd
, mcase
, railmag
;
int pstart
0; /* Means a startline is pending */
int oback
, omcase
, orailmag
, ocol
;
struct line cline
{ -1,-1,-1,-1};
monitor(2,etext
,monbuf
,sizeof monbuf
/2,0);
if (argc
> 1 && argv
[1][0] == '-' && argv
[1][1] == 'l') {
float f
= 144 * atof(argv
[1] + 2);
if((inbuf
=fopen(name
, "r")) == NULL
)
error("cannot open data file");
while((c
= getch()) != -1) {
if((c
& 0377) < 0100) /* Purely for efficiency */
verd
= 0; back
= 0; mcase
= 0;
if(loadfont(railmag
, cpsize
) < 0)
putc(0100, outbuf
); /* Dont stuff it guys */
case 0101: /* lower rail */
case 0102: /* upper rail */
case 0103: /* upper mag */
case 0104: /* lower mag */
case 0105: /* lower case */
case 0106: /* upper case */
case 0107: /* escape forward */
case 0110: /* escape backwards */
case 0112: /* lead forward */
case 0113: /* undefined */
case 0114: /* lead backward */
case 0115: /* undefined */
if((c
& 0340) == 0140) /* leading */
if((c
& 0360) == 0120) /* size change */
col
+= stupidadj(c
& 017, cpsize
);
loadfont(railmag
, c
& 017);
fprintf(stderr
, "Vsort: %s\n", s
);
cline
.start
.psize
= cpsize
;
cline
.start
.mcase
= mcase
;
cline
.start
.railmag
= railmag
;
register struct line
*linep
;
if((allp
= calloc(sizeof *linep
,1)) == -1)
linep
->end
.psize
= cpsize
;
linep
->end
.mcase
= mcase
;
linep
->end
.railmag
= railmag
;
linep
->start
.row
= cline
.start
.row
;
linep
->start
.col
= cline
.start
.col
;
linep
->start
.psize
= cline
.start
.psize
;
linep
->start
.mcase
= cline
.start
.mcase
;
linep
->start
.back
= cline
.start
.back
;
linep
->start
.verd
= cline
.start
.verd
;
linep
->start
.railmag
= cline
.start
.railmag
;
if((allp
= calloc(cline
.len
,1)) == -1)
for(i
= 0; i
< cline
.len
; i
++)
register struct line
*linep
;
register struct line
*clp
;
if((clp
= tail
) == NULL
) {
linep
->lastp
= linep
->nextp
= NULL
;
while(clp
!= NULL
&& clp
->start
.row
> linep
->start
.row
)
if(clp
== NULL
) /* goes at head of list */ {
linep
->nextp
= clp
->nextp
;
clp
->nextp
->lastp
= linep
;
if(cline
.len
> TBUFLEN
) {
register struct line
*linep
;
if((linep
= head
) == NULL
) {
/* fprintf(stderr, "spitting %d\n", overflow - row); */
for(i
= 0; i
< linep
->len
; i
++)
drow
= linep
->nextp
->start
.row
;
register struct line
*linep
;
if(linep
->start
.railmag
!= orailmag
)
ptrail(linep
->start
.railmag
);
if(linep
->start
.psize
!= opsize
)
ptsize(linep
->start
.psize
);
if(linep
->start
.mcase
!= omcase
)
if(linep
->start
.row
!= row
) /* lead forward */
ptlead(linep
->start
.row
- row
);
/* updatelist(linep->start.row); */
if(linep
->start
.col
!= ocol
)
ptesc(linep
->start
.col
-ocol
);
if(linep
->start
.back
!= oback
)
if((rlmg
& 01) != (orailmag
& 01))
putc((rlmg
& 01) ? 0102:0101, outbuf
); /* rail */
if((rlmg
& 02) != (orailmag
& 02))
putc((rlmg
& 02) ? 0103:0104, outbuf
); /* mag */
putc(oback
? 0107:0110, outbuf
);
putc(0120 | (size
& 017), outbuf
);
ptesc(-stupidadj(size
, opsize
));
register struct point_sizes
*psp
;
register struct point_sizes
*lpsp
;
while(psp
->real_code
!= 0) {
if((psp
->stupid_code
& 017) == code
)
while(lpsp
->real_code
!= 0) {
if((lpsp
->stupid_code
& 017) == lcode
)
if(!(lpsp
->stupid_code
& 0200) && (psp
->stupid_code
& 0200))
if((lpsp
->stupid_code
& 0200) && !(psp
->stupid_code
& 0200))
putc(omcase
? 0105:0106, outbuf
);
if((escc
< 0 && !oback
) || (escc
>= 0 && oback
))
putc(0200 | ((~escc
) & 0177), outbuf
);
putc(0140 | ((~leadd
) & 037), outbuf
);
register struct line
*linep
;
orailmag
= linep
->end
.railmag
;
opsize
= linep
->end
.psize
;
omcase
= linep
->end
.mcase
;
register struct line
*clp
;
for(clp
= head
; clp
!= NULL
; clp
= clp
->nextp
)