#include #include #include #define PCODE2 20004 #define PMAX 32 /* parameters */ #define FALSE 0 #define TRUE !FALSE int pgvct = 0; FILE *fp; int pl[PMAX]; void swapper(p, n) char *p; int n; { #ifdef RISK char d[4]; int i, j; for (j = 0; j < n; j++){ for (i = 0; i < 4; i++) d[3 - i] = p[i + 4 * j]; for (i = 0; i < 4; i++) p[i + 4 * j] = d[i]; } #endif } void Usage() { printf("USAGE: pgv2p4d [OPTIONS] filename [filename2 filename3 ...]\n"); printf(" filename.pgv: PGV data file\n"); printf(" filename.arg: Argument file\n"); exit(1); } void checkarg(char *arg) { char filename[1024]; char buf[1024]; char *wk; int j, fl; FILE *ff; if (strlen(arg) == 0) return; if (arg[0] == '-' || arg[0] == '/'){ switch(toupper(arg[1])){ default: Usage(); } } else { for (j = 0; j < (signed int)strlen(arg); j++){ filename[j] = toupper(arg[j]); } filename[j] = 0x00; printf("File name: %s\n", arg); if (strstr(filename, ".PGV") != NULL){ if (pgvct == 0){ strcpy(buf, arg); strtok(buf, "."); for (j = strlen(buf) - 1; j >= 0; j--){ if (buf[j] >= '0' && buf[j] <= '9'){ buf[j] = 0x00; } } if (j == 0) Usage(); strcat(buf, ".p4d"); for (j = 0; j < PMAX; j++) pl[j] = 0; pl[0] = PCODE2; if ((fp = fopen(buf, "wb")) == NULL){ printf("ERROR: file cannot open to write.\n"); exit(-1); } swapper(pl, PMAX); fwrite(pl, sizeof(int), PMAX, fp); } if ((ff = fopen(arg, "rb")) == NULL){ printf("ERROR: Input file [%s] is not found.\n", arg); exit(-1); } fseek(ff, 0L, SEEK_END); fl = ftell(ff); fseek(ff, 0L, SEEK_SET); wk = (char *)malloc(fl); if (wk == NULL){ printf("ERROR: Memory allocation for input file.\n"); exit(1); } fread(wk, fl, sizeof(char), ff); fwrite(wk, sizeof(char), fl, fp); fclose(ff); free(wk); pgvct++; } else Usage(); } } int main(int argc, char **argv) { int i, j, l, fl, ln; char filename[256]; char buf[256]; char bufwin[256]; char *wk, *wp; FILE *ff; printf("PGV2P4D Ver.1.00 Copyright(C) 2006 RCCS\n"); if (argc < 2) Usage(); for (i = 1; i < argc; i++){ if (argv[i][0] != '-' && argv[i][0] != '/'){ for (j = 0; j < strlen(argv[i]); j++){ filename[j] = toupper(argv[i][j]); } filename[j] = 0x00; if (strstr(filename, ".ARG") != NULL){ printf("This file is ARG format.\n"); if ((ff = fopen(argv[i], "rb")) == NULL){ printf("ERROR: Input file [%s] is not found.\n", argv[i]); exit(1); } fseek(ff, 0L, SEEK_END); fl = ftell(ff); fseek(ff, 0L, SEEK_SET); wk = (char *)malloc(fl); if (wk == NULL){ printf("ERROR: Memory allocation for input file.\n"); exit(1); } fread(wk, fl, sizeof(char), ff); fclose(ff); for (l = 0; l < fl; l++){ if (wk[l] == 0x0a || wk[l] == 0x0d || wk[l] == ' ') wk[l] = 0x00; } wp = wk; while((int)(wp - wk) < fl){ ln = strlen(wp); checkarg(wp); wp += ln + 1; } free(wk); } else { checkarg(argv[i]); } } else { checkarg(argv[i]); } } if (pgvct == 0){ printf("ERROR: data is not found.\n"); exit(-1); } else { pl[1] = pgvct; fseek(fp, 0L, SEEK_SET); fwrite(pl, sizeof(int), PMAX, fp); fclose(fp); printf("Terminated.\n"); exit(0); } }