/* * unix2dos Version 0.0 * Bart Trzynadlowski, November 18, 2001 and June 1, 2002 * Public domain */ /* * Converts ASCII UNIX files to DOS format by turning 10->13,10. If 13,10 or * just 13 is encountered, it will be skipped over. Make sure files are not * big enough to overflow the 32-bit counter. One byte has to be added for * every \n found. * Usage: unix2dos [-v] * -v,-V prints version information * * Contact Bart Trzynadlowski: * WWW: http://www.dynarec.com/~bart * Email: bart@dynarec.com */ #include #include #include #define VERSION "0.0" #define DATE "June 1, 2002" int main(int argc, char **argv) { FILE *fp; char *buf, *nbuf; unsigned i, j, k, s, num_cr; if (argc <= 1) { printf("unix2dos: No input file(s) specified\n"); exit(0); } else { for (i = 1; i < argc; i++) { if (!strcmp(argv[i], "-v") || !strcmp(argv[i], "-V")) { printf("unix2dos: Version "VERSION", "DATE"\n"); exit(0); } } } for (i = 1; i < argc; i++) { if ((fp = fopen(argv[i], "rb")) == NULL) fprintf(stderr, "unix2dos: Warning: Failed to open \"%s\"\n", argv[i]); else { fseek(fp, 0, SEEK_END); fgetpos(fp, (void *) &s); /* get size */ rewind(fp); if ((buf = malloc(s * sizeof(char))) == NULL) fprintf(stderr, "unix2dos: Warning: Not enough memory to load \"%s\"\n", argv[i]); else { fread(buf, sizeof(char), s, fp); fclose(fp); /* * Count number of CRs */ for (j = num_cr = 0; j < s; j++) { if (buf[j] == 13 && buf[j + 1] == 10) j++; /* this could be a DOS file already */ else if (buf[j] == 10) num_cr++; } if ((nbuf = malloc((s + num_cr) * sizeof(char))) == NULL) { fprintf(stderr, "unix2dos: Warning: Not enough memory to process \"%s\"\n", argv[i]); continue; } for (j = k = 0; j < (s + num_cr); j++) { if (buf[k] == 13 && buf[k + 1] == 10) { nbuf[j++] = buf[k++]; nbuf[j] = buf[k]; } else if (buf[k] == 10) { nbuf[j++] = 13; nbuf[j] = 10; } else nbuf[j] = buf[k]; k++; } if ((fp = fopen(argv[i], "wb")) == NULL) fprintf(stderr, "unix2dos: Warning: Failed to write back to \"%s\"\n", argv[i]); else { fwrite(nbuf, sizeof(char), s + num_cr, fp); fclose(fp); } free(buf); free(nbuf); } } } return 0; }