Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #!/bin/bash
- # Options
- DIR=src/filesystem
- FAT=root
- FILES=files
- TMPDIR=/tmp/MakeFS
- PAGE=01
- # colours
- RED='\033[01;38;5;160m'
- NORM='\033[39m'
- # Guts of the parsing
- function parsedir {
- D=`cat $TMPDIR/D.$2.tmp`
- P=`cat $TMPDIR/D.$7.tmp`
- echo -e ".echo \"$3Entry $2/: \",$\n\tdb FILE_DIRECTORY\t; Type ID (1 byte)\n\tdb \"$2\",0\t; Directory Name\n\tdw $D\t; Directory ID (2 bytes)\n\tdw $P\t; Parent Directory ID (2 bytes)\n" > $1/$2.asm
- ls $1 | while read ITEM; do
- EXT=`echo $ITEM|awk -F . '{print $NF}'`;
- if test -d $1/$ITEM; then
- echo -e "$RED$3$ITEM/$NORM";
- echo -e "#include \"$1/$ITEM/$ITEM.asm\"\n" >> $4/$5;
- T='\t'$3
- D=`cat $TMPDIR/D.tmp`
- let "D += 1"
- echo $D > $TMPDIR/D.tmp
- echo $D > $TMPDIR/D.$ITEM.tmp
- parsedir $1/$ITEM $ITEM $T $4 $5 $6 $2;
- elif [ $ITEM != $2.asm ] && [ $ITEM != $6 ] && [ $EXT != "log" ] && [ $EXT != "bin" ] && [ $EXT != "lst" ] && [ $EXT != "inc" ] && ! test -f $1/$ITEM.asm; then
- echo -e "$RED$3$ITEM$NORM";
- if [ $EXT == "asm" ]; then
- echo -e "$3$RED->$NORM Compiling $ITEM";
- BASE=`basename $ITEM .asm`
- wine $ROOT/tools/SPASM.exe -T -I $ROOT/src/inc/ $1/$ITEM $1/$BASE.bin | awk "{print \"\t$3\", \$0}";
- filename=$(basename $ITEM)
- filename=${filename%.*.*}
- mv $1/$filename.lst $1/$ITEM.lst
- mv $1/$BASE.bin $1/$BASE
- echo -e "$3$RED<-$NORM Done Compiling $ITEM";
- echo -e ".echo \"\t$3Entry $ITEM: \",$\n\tdb FILE_FILE\t; Type ID (1 byte)\n\tdb \"$BASE\",0\t; File Name\n\tdb 01h\t; Flash Page ( 1 byte)\n\tdw `stat -c%s $1/$BASE`+2\t; Pointer to Data (2 bytes)\n\tdw `stat -c%s $1/$BASE`+2\t; Length Of Data (2 bytes)\n\tdw $D\t; Parent Directory ID (2 bytes)\n" >> $1/$2.asm;
- echo -e ".echo \"$ITEM Start \",$\n$BASE:\n\tdw `stat -c%s $1/$BASE`+2\n\t#import \"$1/$BASE\"\n.org $+`stat -c%s $1/$BASE`\n$BASE.end:\n.echo \"$ITEM End \",$" >> $4/$6;
- else
- echo -e ".echo \"\t$3Entry $ITEM: \",$\n\tdb FILE_FILE\t; Type ID (1 byte)\n\tdb \"$ITEM\",0\t; File Name\n\tdb 01h\t; Flash Page ( 1 byte)\n\tdw $ITEM\t; Pointer to Data (2 bytes)\n\tdw `stat -c%s $1/$ITEM`+1\t; Length Of Data (2 bytes)\n\tdw $D\t; Parent Directory ID (2 bytes)\n" >> $1/$2.asm;
- echo -e ".echo \"$ITEM Start \",$\n$ITEM:\n\tdw `stat -c%s $1/$BASE`+2\n\t#import \"$1/$ITEM\"\n.org $+`stat -c%s $1/$BASE`\n$ITEM.end:\n.echo \"$ITEM End \",$" >> $4/$6;
- fi;
- fi;
- done;
- }
- # Setup
- mkdir -p $TMPDIR/
- echo "0" > $TMPDIR/D.$FAT.tmp
- echo "0" > $TMPDIR/D.tmp
- echo "; File Data" > $DIR/$FILES.asm
- ROOT=`pwd`
- cd $DIR
- # Parsing
- parsedir $ROOT/$DIR $FAT '\t' $ROOT/$DIR $FAT.asm $FILES.asm $FAT
- cd $ROOT;
- echo -e ".echo \"Start of FAT: \",$\nFATTable: ;Start of the FAT\n\tdw \$ ;FILE_START\n"|cat - $DIR/$FAT.asm > $TMPDIR/out && mv $TMPDIR/out $DIR/$FAT.asm
- echo -e "\tdb FILE_END\t; End of the FAT" >> $DIR/$FAT.asm
- echo -e ".org 04000h\n.echo \"Compiling Page 01 \"\n\t#include ../filesystem/$FAT.asm\n\t#include ../filesystem/$FILES.asm\n.echo \"Free Space: \",08000h - $,\" bytes\"\n\tblock 08000h - $" > src/pages/$PAGE/$PAGE.asm
- # Cleanup
- rm -rf $TMPDIR/*
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement