root/trunk/mkiy0.c

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

essage first commit

Line 
1/* ------------------------------ mkiy0.c ----------------------------- */
2
3#include <stdio.h>
4#include <string.h>
5
6#define TRACE   0
7
8#include "cisis.h" /* CISIS Interface */
9#include "cirun.h" /* runtime area and defines by AOT */
10
11/* main */
12#if ANSI
13void main (int argc, char *argv[])
14#else
15void main(argc,argv)
16int argc;
17char *argv[];
18#endif
19{
20    int   fdy;
21    int   vfdx[1+2+2+1];    /* .cnt, .n0x, .l0x, .ifp */
22    char *vextp[1+2+2+1];   /* .cnt, .n0x, .l0x, .ifp */
23    off_t vflen[1+2+2+1];   /* .cnt, .n0x, .l0x, .ifp */
24
25    char *dbnp,*p;
26    unsigned int nbyts;
27    unsigned int blksize=SHRT_MAX+1; /* 32K */
28    off_t lv;
29    int i;
30    int nfiles=6;
31    int parmv=1;
32    char *buffp=NULL;
33
34    vextp[0]=cx1extp;
35    vextp[1]=nx12extp[0];
36    vextp[2]=nx12extp[1];
37    vextp[3]=lx12extp[0];
38    vextp[4]=lx12extp[1];
39    vextp[5]=ix1extp;
40
41    if (argc < 2) {
42        printf("%s",cicopyr("Utility MKIY0"));
43        printf("\n");
44        printf("mkiy0 <dbn> [-ifp] [-v] [blksize=%"_LD_"]\n",(LONGX)blksize);
45        exit(1);
46    }
47
48    /* get parms */
49    dbnp=argv[1];
50
51    for (i=2; i < argc; i++) {
52        p=argv[i];
53    if (strncmp(p,"blksize=",8) == 0) {
54        blksize=atol(p+8);
55        if (blksize <= 0 || blksize > ALLOMAXV) fatal(p);
56        continue;
57    }
58    if (strcmp(p,"-v") == 0) {
59        parmv=0;
60        continue;
61    }
62    if (strcmp(p,"-ifp") == 0 || strcmp(p,"-iyp") == 0) {
63        nfiles--;
64        continue;
65    }
66    fatal(p);
67    }
68
69    nbyts=blksize; if (nbyts < BUFSIZ) nbyts=BUFSIZ;
70    buffp=(char *)ALLOC((ALLOPARM)nbyts);
71    if (buffp == (char *)ALLONULL) fatal("mkiy0/ALLOC");
72
73    /* open individual I/F files */
74    for (i=0; i < nfiles; i++) {
75    vfdx[i]=dbxopen("",dbnp,vextp[i]);
76    vflen[i]=LSEEK64(vfdx[i],0L,SEEK_END);
77    LSEEK64(vfdx[i],0L,SEEK_SET);
78    }
79
80    /* create output file */
81    sprintf(buffp,"create=%s%s",dbnp,iy0extp);
82    dbxopenc(dbnp,buffp,&fdy,NULL,buffp,1,0); /*..force create= */
83
84    /* write 6-line header */
85    for (i=0; i < 6; i++) {
86        lv=vflen[i];
87    if (i == 5) if (nfiles == 5) lv=0; /* no .iyp */
88    sprintf(buffp,"%012"P_OFF_T,(LONG_LONG)lv);
89#if 1 /* CRLF*/
90    memset(buffp+12,' ',CNBSIZ-12-2);
91    buffp[CNBSIZ-2]='\r';
92    buffp[CNBSIZ-1]='\n';
93#else
94    memset(buffp+12,' ',CNBSIZ-12-1);
95    buffp[CNBSIZ-1]='\n';
96#endif
97    nbyts=CNBSIZ;
98    if (CIWRITE(fdy,buffp,nbyts) != nbyts) fatal("mkiy0/write");
99    }
100    if (parmv) printf("%s%s=%12"P_OFF_T" bytes",dbnp,iy0extp,(LONG_LONG)LSEEK64(fdy,0L,SEEK_END));
101
102    /* append I/F files */
103    for (i=0; i < nfiles; i++) {
104    memset(buffp,' ',strlen(dbnp)); buffp[strlen(dbnp)]='\0';
105    if (parmv) printf("\n%s%s=%12"P_OFF_T,buffp,vextp[i],(LONG_LONG)vflen[i]);
106    while ((nbyts=CIREAD(vfdx[i],buffp,blksize)) > 0)
107        if (CIWRITE(fdy,buffp,nbyts) != nbyts) fatal("mkiy0/write");
108        CLOSE(vfdx[i]);
109    }
110    if (parmv) printf("\n%s%s=%12"P_OFF_T" bytes\n",dbnp,iy0extp,(LONG_LONG)LSEEK64(fdy,0L,SEEK_END));
111
112    CLOSE(fdy);
113
114    exit(0);
115}
Note: See TracBrowser for help on using the browser.