/* History:10,1 */ #include #include #include #include #include #include #include #include typedef struct F { char *name; struct F *next; } F; main(argc, argv) int argc; char *argv[]; { F *root=NULL, *n; int done; struct ffblk ff; char path[80], drive[10]; for (argc--, argv++; argc; argc--, argv++) { fnsplit(*argv, drive, path, NULL, NULL); done = findfirst(*argv, &ff, 0); while (!done) { n = (F *)malloc(sizeof(F)); n->name = (char *)malloc(strlen(ff.ff_name)+strlen(drive)+strlen(path)+5); fnmerge(n->name, drive, path, ff.ff_name, ""); n->next = root; root = n; done = findnext(&ff); } while (root) { utod(root->name); n = root->next; free(root->name); free(root); root = n; } } } utod(fname) char *fname; { int sf, df, l, bp1, bp2, saw_13=0; struct ftime ftime; char buf[512], buf2[1024]; /* worst case */ char tfname[80], drive[3], path[80]; sf = open(fname, O_RDONLY|O_BINARY); fnsplit(fname, drive, path, NULL, NULL); fnmerge(tfname, drive, path, "utod", "c"); df = open(tfname, O_WRONLY|O_CREAT|O_TRUNC|O_BINARY, S_IWRITE); while ((l=read(sf, buf, 512)) > 0) { bp2 = 0; for (bp1 = 0; bp1 < l; bp1++) { if (!saw_13 && (buf[bp1] == 10)) buf2[bp2++] = 13; buf2[bp2++] = buf[bp1]; if (buf[bp1] == 13) saw_13 = 1; else saw_13 = 0; } write(df, buf2, bp2); } getftime(sf, &ftime); setftime(df, &ftime); close(sf); close(df); remove(fname); rename(tfname, fname); }