From 66a74fdb72b12419707850bc05637ba62b2b42b5 Mon Sep 17 00:00:00 2001 From: "Kartik K. Agaram" Date: Thu, 24 Feb 2022 22:08:01 -0800 Subject: [PATCH] more portable https://stackoverflow.com/questions/1815329/portable-way-to-get-file-size-in-bytes-in-the-shell/1815582#1815582 --- README.md | 3 --- translate | 14 +++++++------- translate_emulated | 21 +++++++-------------- 3 files changed, 14 insertions(+), 24 deletions(-) diff --git a/README.md b/README.md index 2ee0c8c1..f4525f74 100644 --- a/README.md +++ b/README.md @@ -103,9 +103,6 @@ For Macs and other Unix-like systems, use the (much slower) emulator: ./translate_emulated apps/ex2.mu # 2-5 minutes to emit code.img ``` -(Mac OS may require either editing `translate_emulated` or installing GNU -coreutils. Look in the script if you get an error about `stat`.) - Mu programs can be written for two very different environments: * At the top-level, Mu programs emit a bootable image that runs without an OS diff --git a/translate b/translate index 9c1fc38d..9c74cc3e 100755 --- a/translate +++ b/translate @@ -37,19 +37,19 @@ cat a.survey |linux/hex dd if=a.bin of=code.img conv=notrunc status=none -if [ `stat --printf="%s" a.bin` -ge 492544 ] # 15 tracks * 63 sectors per track * 512 bytes per sector (keep this sync'd with boot.subx) +if [ `wc -c < a.bin` -ge 492544 ] # 15 tracks * 63 sectors per track * 512 bytes per sector (keep this sync'd with boot.subx) then echo "a.bin won't all be loaded on boot" exit 1 fi -if [ `stat --printf="%s" a.bin` -ge 492544 ] # 15 tracks * 63 sectors per track * 512 bytes per sector +if [ `wc -c < a.bin` -ge 492544 ] # 15 tracks * 63 sectors per track * 512 bytes per sector then echo "a.bin will overwrite BIOS/Video memory; you'll need to adjust boot.subx to load code to some other non-contiguous area of memory" exit 1 fi -if [ `stat --printf="%s" a.bin` -ge $(($FONT*512)) ] +if [ `wc -c < a.bin` -ge $(($FONT*512)) ] then echo "a.bin will overwrite font in disk" exit 1 @@ -57,7 +57,7 @@ fi ## Latter half of disk is for debug info -if [ `stat --printf="%s" labels` -ge 1048576 ] # 8 reads * 256 sectors * 512 bytes per sector +if [ `wc -c < labels` -ge 1048576 ] # 8 reads * 256 sectors * 512 bytes per sector then echo "labels won't all be loaded on abort" exit 1 @@ -74,19 +74,19 @@ dd if=labels of=code.img seek=$DEBUG conv=notrunc status=none # keep this sync' ## Font data at another well-defined location cat font.subx |sed 's,/[^ ]*,,' |linux/hex > a.font -if [ `stat --printf="%s" a.font` -ge 262144 ] # 0x200 sectors * 512 bytes per sector (keep this sync'd with boot.subx) +if [ `wc -c < a.font` -ge 262144 ] # 0x200 sectors * 512 bytes per sector (keep this sync'd with boot.subx) then echo "font won't all be loaded on boot" exit 1 fi -if [ `stat --printf="%s" a.font` -ge 14680064 ] # 0x00e00000 = 0x00f00000 - 0x00100000 +if [ `wc -c < a.font` -ge 14680064 ] # 0x00e00000 = 0x00f00000 - 0x00100000 then echo "font is so large it overlaps the ISA memory hole; see https://wiki.osdev.org/Memory_Map_(x86)" exit 1 fi -if [ `stat --printf="%s" a.font` -ge $(( ($DEBUG - $FONT) * 512 )) ] +if [ `wc -c < a.font` -ge $(( ($DEBUG - $FONT) * 512 )) ] then echo "font will overwrite debug info in disk" exit 1 diff --git a/translate_emulated b/translate_emulated index b8392095..ea51a112 100755 --- a/translate_emulated +++ b/translate_emulated @@ -41,26 +41,19 @@ cat a.survey |linux/bootstrap/boots dd if=a.bin of=code.img conv=notrunc -file_size() { - stat --printf="%s" $* - # if you're on Mac OS and haven't installed GNU coreutils (coreutils on - # Homebrew or Macports), switch this to: -# stat -f "%z" $* -} - -if [ `file_size a.bin` -ge 492544 ] # 15 tracks * 63 sectors per track * 512 bytes per sector (keep this sync'd with boot.subx) +if [ `wc -c < a.bin` -ge 492544 ] # 15 tracks * 63 sectors per track * 512 bytes per sector (keep this sync'd with boot.subx) then echo "a.bin won't all be loaded on boot" exit 1 fi -if [ `file_size a.bin` -ge 492544 ] # 15 tracks * 63 sectors per track * 512 bytes per sector +if [ `wc -c < a.bin` -ge 492544 ] # 15 tracks * 63 sectors per track * 512 bytes per sector then echo "a.bin will overwrite BIOS/Video memory; you'll need to adjust boot.subx to load code to some other non-contiguous area of memory" exit 1 fi -if [ `file_size a.bin` -ge $(($FONT*512)) ] +if [ `wc -c < a.bin` -ge $(($FONT*512)) ] then echo "a.bin will overwrite font in disk" exit 1 @@ -68,7 +61,7 @@ fi ## Latter half of disk is for debug info -if [ `file_size labels` -ge 1048576 ] # 8 reads * 256 sectors * 512 bytes per sector +if [ `wc -c < labels` -ge 1048576 ] # 8 reads * 256 sectors * 512 bytes per sector then echo "labels won't all be loaded on abort" exit 1 @@ -85,19 +78,19 @@ dd if=labels of=code.img seek=$DEBUG conv=notrunc ## Font data at another well-defined location cat font.subx |sed 's,/[^ ]*,,' |linux/bootstrap/bootstrap run linux/hex > a.font -if [ `file_size a.font` -ge 262144 ] # 0x200 sectors * 512 bytes per sector (keep this sync'd with boot.subx) +if [ `wc -c < a.font` -ge 262144 ] # 0x200 sectors * 512 bytes per sector (keep this sync'd with boot.subx) then echo "font won't all be loaded on boot" exit 1 fi -if [ `file_size a.font` -ge 14680064 ] # 0x00e00000 = 0x00f00000 - 0x00100000 +if [ `wc -c < a.font` -ge 14680064 ] # 0x00e00000 = 0x00f00000 - 0x00100000 then echo "font is so large it overlaps the ISA memory hole; see https://wiki.osdev.org/Memory_Map_(x86)" exit 1 fi -if [ `file_size a.font` -ge $(( ($DEBUG - $FONT) * 512 )) ] +if [ `wc -c < a.font` -ge $(( ($DEBUG - $FONT) * 512 )) ] then echo "font will overwrite debug info in disk" exit 1