root/trunk/cat.c

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