⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 prt.c

📁 C 语言开发环境
💻 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 + -