root/trunk/cat0.c

Revision 389, 2.8 kB (checked in by heitor.barbieri, 3 weeks ago)

essage first commit

Line 
1/* --------------------------------- cat -------------------------------- */
2
3#include <stdio.h>
4#include <string.h>
5
6#define PC     1
7#define ANSI   1
8
9#if PC
10#include <dos.h>
11#include <dir.h>
12#include <io.h>
13#include <process.h>
14#endif
15
16#define TRACE   0
17
18#if PC
19struct ffblk ffblk;
20char drive[MAXDRIVE];
21char dir[MAXDIR];
22char file[MAXFILE];
23char ext[MAXEXT];
24int flag;
25#else
26#define MAXPATH 4096
27#endif
28
29char *parmv;
30char *parms;
31char *parmm;
32LONGX parml;
33char *parmmc;
34
35int lastchar='\n';
36int done;
37
38#if ANSI
39void concat(FILE *fp);
40#else
41void concat();
42#endif
43
44void concat(fp)
45FILE *fp;
46{
47    int c;
48    LONGX countl;
49
50    countl=parml;
51    while ((c=fgetc(fp)) != EOF) {
52        if (c == '\n')
53            countl=parml;
54        else
55            if (!countl) {
56                putchar('\n');
57                countl=parml;
58            }
59        putchar(c); lastchar=c;
60        countl--;
61    }
62}
63
64void main(argc,argv)
65int argc;
66char *argv[];
67{
68    int iarg;
69    char *argvp;
70    char path[MAXPATH];
71    char filename[MAXPATH];
72    FILE *fp;
73    char *p;
74
75
76    parmv=parms=parmm=parmmc=NULL; parml=999999999L;
77
78    if (argc == 1) {
79        concat(stdin);
80        exit(0);
81    }
82
83    for (iarg=1; iarg < argc; iarg++) {
84        argvp=argv[iarg];
85#if TRACE
86 fprintf(stderr,"+++arg '%s'\n",argvp);
87#endif
88        if (*argvp == '-') {
89            if (*(argvp+1) == 'l') {
90                sscanf(argvp+2,"%ld",&parml);
91                fprintf(stderr,"+++ f=%ld bytes\n",parml);
92                continue;
93            }
94            for (p=argvp+1; *p; p++)
95                switch (*p) {
96                    case 'v':
97                        parmv=p;
98                        break;
99                    case 's':
100                        parms=p;
101                        break;
102                    case 'm':
103                        parmm=p;
104                        break;
105                    case 'c':
106                        parmmc=p;
107                        break;
108                    default:
109                        fprintf(stderr,"*** invalid option: %s\n",p);
110                }
111            continue;   /* next argv */
112        }
113
114        strcpy(path,argvp);
115#if TRACE
116 fprintf(stderr,"+++path '%s'\n",path);
117#endif
118
119#if PC
120        flag=fnsplit(argvp,drive,dir,file,ext);
121if (parms || TRACE)
122 fprintf(stderr,"+s+ drive=%s, dir=%s, file=%s, ext=%s\n",drive,dir,file,ext);
123
124        done=findfirst(path,&ffblk,0xFF);
125        while (!done) {
126            if (ffblk.ff_attrib & FA_ARCH) {
127                strcpy(filename,drive);
128                strcat(filename,dir);
129                strcat(filename,ffblk.ff_name);
130#else
131                strcpy(filename,path);
132#endif
133                if ((fp=fopen(filename,"r")) != NULL ) {
134                  if (parmv || TRACE) fprintf(stderr,
135#if PC
136                        "+v+% 10ld bytes in %s\n",ffblk.ff_fsize,filename);
137#else
138                        "+v+ %s\n",filename);
139#endif
140                  if (parmm || parmmc || TRACE) {
141                      if (lastchar != '\n') putchar('\n');
142                      if (parmmc) printf("\f\n");
143  printf(       "/******************************************************\n");
144  printf(       "%s\n",filename);
145  printf(       "******************************************************/\n");
146                  }
147                  concat(fp);
148                  fclose(fp);
149                }
150#if PC
151            }
152            done=findnext(&ffblk);
153        }
154#endif
155    }
156   
157    exit(0);
158}
Note: See TracBrowser for help on using the browser.