blob: 60e2dafd84092089578214a81d565b8293145814 [file] [log] [blame]
#include <stdint.h>
#include <stdio.h>
#include <string.h>
int main(int argc, char* argv[])
{
const uint8_t sync[] = {
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0x3C,0x5A
};
while(--argc > 0)
{
uint8_t l;
char* path = argv[argc];
FILE *in, *out;
in = fopen(path, "rb");
out = fopen("FILE.K5", "wb");
// HEADER BLOCK
fwrite(sync, 1, sizeof(sync), out);
uint8_t head[17];
l = 0;
head[l++] = 0; head[l++] = 16;
for(int i = 0; l < 13;)
{
if(i >= strlen(path)) break;
if(path[i] == '.') i++;
if(path[i] == '/') {
l = 2;
i++;
continue;
}
head[l++] = path[i++];
}
while(l < 13) head[l++] = ' ';
head[l++] = 2;
head[l++] = 0;
head[l++] = 0;
head[l] = 0;
for(int i = 2; i < l; i++)
head[l] += head[i];
head[l] = -head[l];
l++;
fwrite(head, 1, 17, out);
// DATA BLOCKS
for(;;)
{
uint8_t buf[254];
l = fread(buf, 1, 254, in);
if(l <= 0) break;
fwrite(sync, 1, sizeof(sync), out);
head[0] = 1;
head[1] = l + 2;
fwrite(head, 1, 2, out);
fwrite(buf, 1, l, out);
head[0] = 0;
while(l > 0)
head[0] -= buf[--l];
fwrite(head, 1, 1, out);
}
// FOOTER BLOCK
fwrite(sync, 1, sizeof(sync), out);
head[0] = 255;
head[1] = 2;
head[2] = 0;
fwrite(head, 1, 3, out);
fclose(in);
fclose(out);
}
}