source: trunk/athena/bin/lpr/filters/ln01filter.l @ 9

Revision 9, 2.7 KB checked in by builder, 39 years ago (diff)
Initial revision
Line 
1/* $Source: /afs/dev.mit.edu/source/repository/athena/bin/lpr/filters/ln01filter.l,v $ */
2/* $Author: builder $ */
3/* $Locker:  $ */
4/* $Header: /afs/dev.mit.edu/source/repository/athena/bin/lpr/filters/ln01filter.l,v 1.1 1985-04-28 16:49:52 builder Exp $ */
5%{
6#include <sys/file.h>
7#include <signal.h>
8#undef YYLMAX
9#define YYLMAX 1000
10extern int sighandler();
11struct sigvec vector =
12{
13        sighandler,
14        (int) 0xFFFFFFFF,
15        (int) 0,
16};
17       
18char *reset="\033c";                    /* ris  */
19char *land_length="\033[2550t";
20char *landscape="\033[10m";
21char *port_length="\033[3300t";         /* form length = 11 inches */
22char *portrait="\033[11m";
23char *beginunderline = "\033[4m";
24char *endunderline = "\033[0m";
25char *mode;
26char *form_length;
27char *lockfile = "/usr/lib/lpdfilters/ln.lock";
28%}
29PRINTABLE    [0-9A-Za-z \t`\[\];'\\<,./-=~!@#$%^&*()_+{}:"|>?]
30%%
31\f                      printf("\f%s%s%s",reset,mode,form_length);
32(_\b{PRINTABLE})+       {
33                                register char *p = &yytext[0];
34                                printf(beginunderline);
35                                while(*p)
36                                {
37                                        if((*p != '_') && (*p != '\b'))
38                                        {
39                                                putchar(*p);
40                                        }
41                                        ++p;
42                                }
43                                printf(endunderline);
44                        }
45%{
46/*
47{PRINTABLE}+/(\b)+_+    {
48                                register char *p;
49                                register int i;
50                                register char c;
51                                if(yyleng > 200)
52                                {
53                                        ECHO;
54                                        break;
55                                }
56                                p = &yytext[yyleng];
57                                while(c = input(), c == '\b')
58                                {
59                                        if(p > yytext)
60                                        {
61                                                --p;
62                                        }
63                                }
64                                unput(c);
65                                for(i = 0; &yytext[i] < p; ++i)
66                                {
67                                        putchar(yytext[i]);
68                                }
69                                printf("%s", beginunderline);
70                                while(c = input(), c == '_')
71                                {
72                                        if(p > &yytext[yyleng - 1])
73                                        {
74                                                break;
75                                        }
76                                        putchar(*p++);
77                                }
78                                printf("%s", endunderline);
79                                unput(c);
80                        }
81_+/(\b)+{PRINTABLE}+    {
82                                register int i = yyleng;
83                                register int j;
84                                register char c;
85                                if(i > 200)
86                                {
87                                        ECHO;
88                                        break;
89                                }
90                                while(c = input(), c == '\b')
91                                {
92                                        if(i > 0)
93                                        {
94                                                --i;
95                                        }
96                                }
97                                unput(c);
98                                for(j = 0; j < i; ++j)
99                                {
100                                        putchar('_');
101                                }
102                                printf("%s", beginunderline);
103                                while(c = input(), !((c == '\n') || (c == '\f')))
104                                {
105                                        if(i < yyleng)
106                                        {
107                                                putchar(c);
108                                                ++i;
109                                        }
110                                        else
111                                        {
112                                                break;
113                                        }
114                                }
115                                unput(c);
116                                printf("%s", endunderline);
117                        }
118*/
119%}
120
121%%
122
123yywrap()
124{
125        printf("\f%s",reset);
126        flock(1, LOCK_UN);
127
128        return(1);
129}
130main(argc,argv)
131int argc;
132register char *argv[];
133{
134        register int i;
135        for(i = 1; i <= 27; ++i)
136        {
137                sigvec(i, &vector, 0);
138        }
139        while(flock(1, LOCK_EX) < 0)
140        {
141                sleep(2);
142        }
143        if(atoi(&argv[1][2]) > 80)
144        {
145                mode = landscape;
146                form_length = land_length;
147        }
148        else
149        {
150                mode = portrait;
151                form_length = port_length;
152        }
153        setbuf(stdout, NULL);
154        printf("%s%s%s",reset,mode,form_length);
155        while(yylex() > 0);
156}
157
158int
159sighandler(sig)
160register int sig;
161{
162        yywrap();
163        exit(sig);
164}
165
166/* Local Modes: */
167/* Mode:C */
168/* End: */
Note: See TracBrowser for help on using the repository browser.