Advertisement
Eeems

MakeFS

Jun 30th, 2011
159
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Bash 3.03 KB | None | 0 0
  1. #!/bin/bash
  2. # Options
  3. DIR=src/filesystem
  4. FAT=root
  5. FILES=files
  6. TMPDIR=/tmp/MakeFS
  7. PAGE=01
  8. # colours
  9. RED='\033[01;38;5;160m'
  10. NORM='\033[39m'
  11. # Guts of the parsing
  12. function parsedir {
  13.     D=`cat $TMPDIR/D.$2.tmp`
  14.     P=`cat $TMPDIR/D.$7.tmp`
  15.     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
  16.     ls $1 | while read ITEM; do
  17.         EXT=`echo $ITEM|awk -F . '{print $NF}'`;
  18.         if test -d $1/$ITEM; then
  19.             echo -e "$RED$3$ITEM/$NORM";
  20.             echo -e "#include \"$1/$ITEM/$ITEM.asm\"\n" >> $4/$5;
  21.             T='\t'$3
  22.             D=`cat $TMPDIR/D.tmp`
  23.             let "D += 1"
  24.             echo $D > $TMPDIR/D.tmp
  25.             echo $D > $TMPDIR/D.$ITEM.tmp
  26.             parsedir $1/$ITEM $ITEM $T $4 $5 $6 $2;
  27.         elif [ $ITEM != $2.asm ] && [ $ITEM != $6 ] && [ $EXT != "log" ] && [ $EXT != "bin" ] && [ $EXT != "lst" ] && [ $EXT != "inc" ] && ! test -f $1/$ITEM.asm; then
  28.             echo -e "$RED$3$ITEM$NORM";
  29.             if [ $EXT == "asm" ]; then
  30.                 echo -e "$3$RED->$NORM Compiling $ITEM";
  31.                 BASE=`basename $ITEM .asm`
  32.                 wine $ROOT/tools/SPASM.exe -T -I $ROOT/src/inc/ $1/$ITEM $1/$BASE.bin | awk "{print \"\t$3\", \$0}";
  33.                 filename=$(basename $ITEM)
  34.                 filename=${filename%.*.*}
  35.                 mv $1/$filename.lst $1/$ITEM.lst
  36.                 mv $1/$BASE.bin $1/$BASE
  37.                 echo -e "$3$RED<-$NORM Done Compiling $ITEM";
  38.                 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;
  39.                 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;
  40.             else
  41.                 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;
  42.                 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;
  43.             fi;
  44.         fi;
  45.     done;
  46. }
  47. # Setup
  48. mkdir -p $TMPDIR/
  49. echo "0" > $TMPDIR/D.$FAT.tmp
  50. echo "0" > $TMPDIR/D.tmp
  51. echo "; File Data" > $DIR/$FILES.asm
  52. ROOT=`pwd`
  53. cd $DIR
  54. # Parsing
  55. parsedir $ROOT/$DIR $FAT '\t' $ROOT/$DIR $FAT.asm $FILES.asm $FAT
  56. cd $ROOT;
  57. 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
  58. echo -e "\tdb FILE_END\t; End of the FAT" >> $DIR/$FAT.asm
  59. 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
  60. # Cleanup
  61. rm -rf $TMPDIR/*
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement