10#include "tpcclibConfig.h"
21static char *info[] = {
22 "Byte order conversion of numerical values stored in flat binary files,",
23 "between big endian (Sun Sparc, Motorola, PowerPC) and little endian",
24 "(PC/Intel) computers.",
26 "Usage: @P [Options] basetype flatfile outputfile",
31 "Accepted base types are: char, short, int, long, float, and double.",
33 "See also: bigend, img2flat, flat2img, anabyteo",
35 "Keywords: image, byte order, big endian, little endian",
54int main(
int argc,
char **argv)
56 int ai, help=0, version=0, verbose=1;
58 char infile[FILENAME_MAX], outfile[FILENAME_MAX];
59 char *cptr, *base_type=NULL;
70 if(argc==1) {
tpcPrintUsage(argv[0], info, stderr);
return(1);}
71 infile[0]=outfile[0]=(char)0;
73 for(ai=1; ai<argc; ai++)
if(*argv[ai]==
'-') {
74 cptr=argv[ai]+1;
if(*cptr==
'-') cptr++;
if(cptr==NULL)
continue;
76 fprintf(stderr,
"Error: invalid option '%s'\n", argv[ai]);
81 if(help==2) {
tpcHtmlUsage(argv[0], info,
"");
return(0);}
86 for(; ai<argc; ai++) {
89 if(!strcasecmp(base_type,
"int")) size=
sizeof(int);
90 else if(!strcasecmp(base_type,
"short")) size=
sizeof(
short int);
91 else if(!strcasecmp(base_type,
"int")) size=
sizeof(int);
92 else if(!strcasecmp(base_type,
"long")) size=
sizeof(
long int);
93 else if(!strcasecmp(base_type,
"float")) size=
sizeof(float);
94 else if(!strcasecmp(base_type,
"double")) size=
sizeof(double);
95 else if(!strcasecmp(base_type,
"char")) {
96 printf(
"No conversion is necessary for char type.\n");
return(0);
98 fprintf(stderr,
"Error: illegal datatype %s.\n", base_type);
102 }
else if(!infile[0]) {
103 strlcpy(infile, argv[ai], FILENAME_MAX);
continue;
104 }
else if(!outfile[0]) {
105 strlcpy(outfile, argv[ai], FILENAME_MAX);
continue;
107 fprintf(stderr,
"Error: invalid argument '%s'\n", argv[ai]);
113 fprintf(stderr,
"Error: missing command-line argument; use option --help\n");
116 if(strcasecmp(infile, outfile)==0) {
117 fprintf(stderr,
"Error: same name for input and output file.\n");
124 printf(
"infile := %s\n", infile);
125 printf(
"outfile := %s\n", outfile);
126 printf(
"size := %d\n", size);
128 printf(
"double=%d, float=%d, long=%d, int=%d, short=%d, char=%d\n",
129 (
int)
sizeof(
double), (
int)
sizeof(
float), (
int)
sizeof(
long),
130 (
int)
sizeof(
int), (
int)
sizeof(
short int), (
int)
sizeof(
char));
134 if((fp=fopen(infile,
"rb"))==NULL) {
135 fprintf(stderr,
"Error: cannot open file %s\n", infile);
return(2);
138 if((fp2=fopen(outfile,
"wb"))==NULL) {
139 fprintf(stderr,
"Error: cannot open file %s\n", outfile);
140 fclose(fp);
return(11);
147 if(fread((
char*)s, size, 1, fp)!=1)
break;
148 swap((
char*)s, (
char*)(s+1), size);
149 wn=fwrite((
char*)(s+1), size, 1, fp2);
if(wn==0)
break;
155 if(fread((
char*)l, size, 1, fp)!=1)
break;
156 swap((
char*)l, (
char*)(l+1), size);
157 wn=fwrite((
char*)(l+1), size, 1, fp2);
if(wn==0)
break;
163 if(fread((
char*)d, size, 1, fp)!=1)
break;
164 swap((
char*)d, (
char*)(d+1), size);
165 wn=fwrite((
char*)(d+1), size, 1, fp2);
if(wn==0)
break;
170 fclose(fp); fclose(fp2);
172 fprintf(stderr,
"Error: cannot write data in %s\n", outfile);
175 if(verbose>0) fprintf(stdout,
" %ld %ss converted\n", n, base_type);
Header file for libtpcmisc.
int tpcProcessStdOptions(const char *s, int *print_usage, int *print_version, int *verbose_level)
size_t strlcpy(char *dst, const char *src, size_t dstsize)
int tpcHtmlUsage(const char *program, char *text[], const char *path)
void tpcPrintBuild(const char *program, FILE *fp)
void tpcPrintUsage(const char *program, char *text[], FILE *fp)
void swap(void *orig, void *new, int size)