#include #include #include #include #include void usage() { fprintf(stderr, "Usage: blkunpack dirname\n"); } int main(int argc, char *argv[]) { char buf[1024]; int blkid = 0; if (argc != 2) { usage(); return 1; } while (fread(buf, 1024, 1, stdin) == 1) { char fullpath[0x200]; sprintf(fullpath, "%s/%03d", argv[1], blkid); int linecnt = 0 ; for (int i=1023; i>=0; i--) { if (buf[i]) { linecnt = (i / 64) + 1; break; } } if (linecnt) { // not an empty block FILE *fp = fopen(fullpath, "w"); for (int i=0; i=0; j--) { if (line[j] != '\0') { break; } } int len = j+1; if (len) { for (; j>=0; j--) { if (line[j] == '\0') { line[j] = ' '; } } fwrite(line, len, 1, fp); } fputc('\n', fp); } fclose(fp); } else { // empty block, delete unlink(fullpath); } blkid++; } return 0; }