📄 prt.c
字号:
/*
** prt.c -- print files with optional page skips, headings, and line numbers.
**
** Copyright 1982 J. E. Hendrix. All rights reserved.
*/
#include <stdio.h>
#include "tools.h"
#define MARGIN1 0
#define MARGIN2 1
char name[MAXFN], inclext[MAXFN];
int
i,
fin,
files,
headings,
skips,
numbers,
begin,
end,
ready,
pause;
int lineno, pageno, margin;
main(argc, argv) int argc, *argv; {
headings=skips=numbers=YES;
doargs(argc, argv);
if(iscons(stdout)) freopen("PRN", "w", stdout);
if(ready && isatty(stdout)) {
fputs("ready printer... ", stderr);
fgetc(stderr);
}
files=NO;
i=0;
while(getarg(++i, name, MAXFN, argc, argv)!=EOF) {
if((name[0]=='-')|(name[0]==EXTMARK)) continue;
files=YES;
fin=fopen(name, "r");
if(fin==0) cant(name);
pageno=lineno=0;
fprnt(name, fin);
fclose(fin);
if((lineno > 0)&(skips)) skip(PTRHIGH-lineno);
}
if(files==NO) {
pageno=lineno=0;
fprnt("<stdin>", stdin);
if((lineno > 0)&(skips)) skip(PTRHIGH-lineno);
}
fclose(stdout);
exit(0);
}
doargs(argc, argv) int argc, *argv; {
int i, j;
inclext[0]=NULL;
begin=0;
end=32767;
ready=YES;
pause=NO;
margin=0;
i=0;
while(getarg(++i, name, MAXFN, argc, argv)!=EOF) {
if(name[0]==EXTMARK) {
j=0;
while(inclext[j]=toupper(name[j])) ++j;
continue;
}
if(name[0]!='-') continue;
if((same(name[1], 'b'))&(same(name[2], 'p'))) {
utoi(name+3, &begin);
continue;
}
if((same(name[1], 'e'))&(same(name[2], 'p'))) {
utoi(name+3, &end);
continue;
}
if((same(name[1], 'l'))&(same(name[2], 'm'))) {
utoi(name+3, &margin);
continue;
}
if((same(name[1], 'n'))&(same(name[2], 'r'))) {
ready=NO;
continue;
}
if(same(name[1], 'p')) {
pause=YES;
continue;
}
if(same(name[1], 'n')) {
if(same(name[2], 'h')) {headings=NO; continue;}
if(same(name[2], 's')) { skips=NO; continue;}
if(same(name[2], 'n')) { numbers=NO; continue;}
}
fputs("usage: PRT [file]... [.?] [-NN] [-NH|-NS]\n",
stderr);
fputs(" [-LM#] [-BP#] [-EP#] [-P] [-NR]\n", stderr);
abort(7);
}
}
fprnt(name, fin)
char name[]; int fin; {
char line[MAXLINE+1], word[MAXLINE+1];
int textline, fin2, i, temp;
textline=0;
while(fgets(line, MAXLINE+1, fin)!=NULL) {
poll(YES);
if((lineno==0)&(skips)) {
if(++pageno > end) exit(0);
if(pageno >= begin) {
page(pageno, pause, stdout);
skip(MARGIN1);
if(headings) {
temp=margin;
while(temp--) printf(" ", 0);
if(numbers) printf(" ", 0);
printf("File: %s Page: %d\n", name, pageno, 2);
}
else printf("\n",0);
++lineno;
skip(MARGIN2);
}
lineno=lineno+MARGIN1+MARGIN2;
}
++textline;
++lineno;
if(pageno >= begin) {
temp=margin;
while(temp--) printf(" ", 0);
if(numbers)
printf("%5d %s", textline, line, 2);
else printf("%s", line, 1);
}
if((lineno >= (PTRHIGH-PTRSKIP))&(skips)) {
skip(PTRHIGH-lineno);
lineno=0;
}
if(inclext[0]!=EXTMARK) continue;
i=0;
getwrd(line, &i, word);
if((lexcmp(word, "#include")==0) ||
(lexcmp(word, ".so")==0)) {
if(getwrd(line, &i, word) >= MAXFN) cant(word);
strip(word);
i=0;
while((word[i]!=EXTMARK) && (word[i])) ++i;
if((inclext[1]) &&
(lexcmp(word+i, inclext)!=0)) continue;
if((fin2=fopen(word, "r"))==NULL) cant(word);
fprnt(name, fin2);
fclose(fin2);
}
}
}
skip(n) int n; {
int i;
if(pageno < begin) return;
i=0;
while(++i <= n) {
poll(YES);
fputc('\n', stdout);
}
}
#include "cant.c"
#include "page.c"
#include "same.c"
#include "strip.c"
#include "getwrd.c"
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -