ys2-intro/loader/tools/b2/bb.c
2025-11-13 19:07:39 +03:00

78 lines
1.8 KiB
C

#include "bb.h"
#include "file.h"
#include "cruncher.h"
#include <stdio.h>
#include <string.h>
int main(int argc, char * argv[])
{
File myFile;
File myBBFile;
char* fileName;
bool isExecutable = false;
bool isRelocated = false;
uint address = 0;
if((argc != 2 && argc != 4) ||
(strcmp(argv[1], "-h") == 0) ||
(strcmp(argv[1], "-help") == 0)){
printf("Usage: b2 [-[c|e|r] xxxx] <filename>\n");
printf(" -c: Make executable with start address xxxx.\n");
printf(" -e: Same as -c :P.\n");
printf(" -r: Relocate file to hex address xxxx.\n");
return 0;
}
if(argc == 2) {
fileName = argv[1];
} else {
int i;
char *s = argv[2];
fileName = argv[3];
if((strcmp(argv[1], "-c") == 0) ||
(strcmp(argv[1], "-e") == 0))
isExecutable = true;
else if(strcmp(argv[1], "-r") == 0)
isRelocated = true;
else {
printf("Don't understand, aborting.\n");
return -1;
}
if(strlen(s) != 4){
printf("Don't understand, aborting.\n");
return -1;
}
for(i = 0; i < 4; ++i){
byte c;
if(s[i] >= '0' && s[i] <= '9') c = s[i] - '0';
if(s[i] >= 'a' && s[i] <= 'f') c = s[i] - 'a' + 10;
if(s[i] >= 'A' && s[i] <= 'F') c = s[i] - 'A' + 10;
address *= 16;
address += c;
}
}
if(!readFile(&myFile, fileName)) {
printf("Error (B-1): Open file \"%s\", aborting.\n", fileName);
return -1;
}
if(!crunch(&myFile, &myBBFile, address, isExecutable, isRelocated)) {
freeFile(&myFile);
return -1;
}
if(!writeFile(&myBBFile, myFile.name)) {
printf("Error (B-2): Write file \"%s\", aborting.\n", myBBFile.name);
}
printf("B2: \"%s\" -> \"%s\"\n", myFile.name, myBBFile.name);
freeFile(&myFile);
freeFile(&myBBFile);
return 0;
}