root/trunk/fixi80.c

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

essage first commit

Line 
1/*------------------------------------------------------------------------
2   fixi80.c - deblock arquivos ISO/SERLINE em registros de 80 com [CR]LF
3
4   uso: fixi80 <filin> <filout>
5
6        <filin>:    arquivo de entrada
7        <filout>:   arquivo de saida
8
9   AOT, 27/04/99
10
11----------------------------------------------------------------------- */
12
13#include <stdio.h>
14#include <fcntl.h>
15
16#define PC    0
17
18#define MODOP 0644  /* dono: LG, grupo: L, outros: L */
19#if !PC
20#define O_BINARY 0
21#endif
22
23#define IBUFSIZ 0x1FFF /* 8K */
24#define OBUFSIZ 0x3FFF /* 16K */
25
26unsigned char ibuf[IBUFSIZ+1];
27unsigned char *iptr;
28
29unsigned char bufout[OBUFSIZ];           /* writbsiz*/
30unsigned char obuf1[OBUFSIZ];
31unsigned char *obuf = obuf1;
32int obufsize;
33int f2,n2free,i2free=0;
34
35
36main(argc,argv)
37
38int argc;
39char *argv[];
40
41{
42    int f1;
43    int n1;
44
45    int n,reclen;
46
47    LONGX count,totbytes=0L,parmtell=1000L;
48
49
50    if (argc != 3)
51        erro("use 'fixi80 <filin> <filout>'","");
52
53    if ((f1=open(argv[1],O_RDONLY|O_BINARY)) == -1)
54        erro("impossivel abrir o arquivo ",argv[1]);
55
56    if ((f2=open(argv[2],O_WRONLY|O_TRUNC|O_CREAT|O_BINARY,MODOP)) == -1)
57        erro("impossivel criar o arquivo ",argv[2]);
58
59    /* inicializa writbsiz */
60    i2free=0; n2free=OBUFSIZ;
61    count=0;
62
63    /* le primeiro reclen */
64    n1=read(f1,ibuf,5);
65
66
67    /* loop principal */
68
69    while (n1 == 5) {    /* enquanto reclen */
70
71        count++; totbytes+=5;
72
73        ibuf[5]='\0';
74        if (sscanf(ibuf,"%d",&reclen) != 1) {
75            printf("+++ %ld/%ld recs/bytes  (read=%d)\n",count,totbytes,n1);
76            erro("reclen invalido - ","nao numerico");
77        }
78        if (reclen >= IBUFSIZ) {
79            printf("+++ %ld/%ld recs/bytes  (read=%d)\n",count,totbytes,n1);
80            erro("reclen invalido - ","muito grande");
81        }
82
83        n1+=read(f1,ibuf+5,(reclen-5));
84        if (n1 != reclen) {
85            printf("+++ %ld recs/bytes lidos %d bytes)\n",count,totbytes,n1);
86            erro("reclen invalido - ","ou arquivo truncado ");
87        }
88        totbytes+=(reclen-5);
89
90        for (iptr=ibuf, obufsize=0; n1; n1-=n, iptr+=n) {
91       
92            if (n1 < 80) n=n1; else n=80;
93           
94            memcpy(obuf+obufsize,iptr,n); obufsize+=n;
95#if PC
96            memcpy(obuf+obufsize,"\r",1); obufsize+=1;
97#endif
98            memcpy(obuf+obufsize,"\n",1); obufsize+=1;
99        }
100       
101        writbsiz();
102
103        if (parmtell) 
104            if (!(count % parmtell))
105                printf("+++ %ld/%ld recs/bytes \n",count,totbytes);
106
107        n1=read(f1,ibuf,5);
108    }
109
110    if (n1 && n1 != EOF) {
111        printf("+++ %ld/%ld recs/bytes  (read=%d)\n",count,totbytes,n1);
112        erro("EOF inesperado","");
113    }
114
115    breakout();
116
117    printf("fixi80: %ld/%ld recs/bytes \n",count,totbytes);
118
119    exit(0);
120}
121
122
123erro(s1,s2)     /* imprime mensagem de erro e morre */
124char *s1,*s2;
125{
126    printf("fixi80: %s%s\n",s1,s2);
127    breakout();
128    exit(1);
129}
130
131
132
133writbsiz()                                                          /*
134---------                                                           */
135
136{
137    int n2;
138    unsigned char *p,*q;
139    int loop;
140
141/*+++
142    write(f2,obuf,obufsize);
143    return;
144+++*/
145
146    if (n2free >= obufsize) {
147/*0     strncpy(&bufout[i2free],obuf,obufsize); */
148        for (p=bufout+i2free, q=obuf, loop=obufsize; loop--; )  *p++ = *q++;
149        n2free-=obufsize;
150        i2free+=obufsize;
151    }
152    else {
153/*0     strncpy(&bufout[i2free],obuf,n2free); */
154        for (p=bufout+i2free, q=obuf, loop=n2free; loop--; )  *p++ = *q++;
155        n2=write(f2,bufout,OBUFSIZ);
156        if (n2 < OBUFSIZ)
157            erro("writbsiz - ","erro na gravacao");
158        i2free=obufsize-n2free;
159/*0     strncpy(bufout,&obuf[n2free],i2free); */
160        for (p=bufout, q=obuf+n2free, loop=i2free; loop--; )  *p++ = *q++;
161        n2free=OBUFSIZ-i2free;
162    }
163}
164
165
166breakout()                                                      /*
167---------                                                       */
168
169{
170    int n2;
171
172/*+++
173    return;
174+++*/
175
176    if (i2free) {
177        n2=write(f2,bufout,i2free);
178        if (n2 < i2free) {
179            printf("breakout - erro na gravacao\n");
180            exit(1);
181        }
182    }
183}
Note: See TracBrowser for help on using the browser.