]>
diplodocus.org Git - nmh/blob - docs/historical/mh-nov-1983/support/l.c
1 /* Rewrite for VAX: BSB 9/9/79 */
2 /* Compiled with V7 cc: BSB 6/2/79 */
11 #define CLEARPAGE write(2,"\014\000",2);
23 short int flagctl
= 1;
24 short int ontty
= 1; /* assume we're outputting to a tty */
25 short int delflg
; /* a <DEL> was typed. */
35 register char *c1
, *c2
;
40 extern char _sibuf
[], _sobuf
[];
42 if(gtty(1, &sg
) == -1) {
54 for( i
=1; i
<argc
; i
++ ) {/* look for - args */
55 if(argv
[i
][0] == '-' ) {
56 switch( argv
[i
][1] ) {
57 case 'c': noclr
++; break;
58 case 'f': first
=num(&argv
[i
][2]); /* set first line */
60 case 'n': numop
=1; /* set number option */
63 case 'p': spage
=num(&argv
[i
][2]); /* set page size */
65 case 'w': width
=num(&argv
[i
][2]);
67 case 'x': flagctl
= flagctl
? 0 : 1;
69 default: printf("Unknown switch: %s\n", argv
[i
]);
77 spage
= 0x07fffffff; /* largest positive number! */
78 setbuf(stdout
, _sobuf
);
81 signal(SIGQUIT
,getout
);
83 if(k
== 0) { /* filter */
96 if(fin
!= NULL
) { fclose(fin
); fin
= NULL
; }
97 if(stat(argv
[i
], &st
) == 0 && (st
.st_mode
&S_IFMT
) == S_IFDIR
){
98 printf("%s: Is a directory!\n", argv
[i
]);
101 if((fin
= fopen(argv
[i
],"r")) == NULL
) {
102 printf("Cannot open \"%s\" for reading!\n", argv
[i
]);
105 if(st
.st_size
== 0) {
106 printf("File \"%s\" is empty.\n", argv
[i
]);
114 printf("Press <RETURN> to list \"%s\"\n", argv
[i
]);
117 printf(">>>>> File \"%s\"\n", argv
[i
]);
125 int linpos
, line
, ct
;
131 if(flg
) nextpage(NOTICLEAR
);
132 else if(!noclr
&& ontty
)
137 while (line
< first
) /* Dcrocker: skip to first line */
138 if((c
= getch()) == EOF
)
144 while ((c
= getch()) != EOF
)
150 num(s
) /* computes the internal form of a number */
151 register char *s
; /* bad chars are ignored */
153 register int c
, i
, sign
;
157 if(c
=='-' && sign
==1) sign
= -1;
159 if(c
>=0 && c
<=9) i
=i
*10+c
;
169 if (clearpage
& NOTIFY
)
173 while(read(2, &c
, 1) && c
!= '\n') ;
174 if (clearpage
& CLEAR
&& c
) {
178 page
= (spage
>>1) + (spage
>>3);
179 /*** page = spage * .6; ***/
187 stdout
->_cnt
= BUFSIZ
;
188 stdout
->_ptr
= stdout
->_base
;
199 return(peekc
= getch());
221 if(linpos
== 0 && numop
) {
225 if(c
< 040 || c
== 0177) switch(c
) {
229 case 014: goto npage
;
230 case 011: linpos
+= 8;
234 default: if(flagctl
) {
246 if(width
&& linpos
>= width
&& peekch() != '\n') {
247 putchar('\n'); linpos
= 0;
249 if(linpos
== 0 && --ct
<= 0) {
250 npage
: nextpage(NOTICLEAR
);