| 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 |
|---|
| 13 | void main (int argc, char *argv[]) |
|---|
| 14 | #else |
|---|
| 15 | void main(argc,argv) |
|---|
| 16 | int argc; |
|---|
| 17 | char *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 | } |
|---|