1f47f0eddSBruce Evans#!/bin/sh 2f47f0eddSBruce Evans 358e5d669SAlfred Perlsteinusage() 458e5d669SAlfred Perlstein{ 5f47f0eddSBruce Evans echo "usage: genassym [-o outfile] objfile" 6f47f0eddSBruce Evans exit 1 7f47f0eddSBruce Evans} 8f47f0eddSBruce Evans 9f47f0eddSBruce Evans 10ce3b9e3aSJulian Elischerwork() 11ce3b9e3aSJulian Elischer{ 12aea3463eSRui Paulo ${NM:='nm'} ${NMFLAGS} "$1" | ${AWK:='awk'} ' 13f47f0eddSBruce Evans / C .*sign$/ { 14f47f0eddSBruce Evans sign = substr($1, length($1) - 3, 4) 15f47f0eddSBruce Evans sub("^0*", "", sign) 16f47f0eddSBruce Evans if (sign != "") 17f47f0eddSBruce Evans sign = "-" 18f47f0eddSBruce Evans } 19f47f0eddSBruce Evans / C .*w0$/ { 20f47f0eddSBruce Evans w0 = substr($1, length($1) - 3, 4) 21f47f0eddSBruce Evans } 22f47f0eddSBruce Evans / C .*w1$/ { 23f47f0eddSBruce Evans w1 = substr($1, length($1) - 3, 4) 24f47f0eddSBruce Evans } 25f47f0eddSBruce Evans / C .*w2$/ { 26f47f0eddSBruce Evans w2 = substr($1, length($1) - 3, 4) 27f47f0eddSBruce Evans } 28f47f0eddSBruce Evans / C .*w3$/ { 29f47f0eddSBruce Evans w3 = substr($1, length($1) - 3, 4) 30f47f0eddSBruce Evans w = w3 w2 w1 w0 31f47f0eddSBruce Evans sub("^0*", "", w) 32f47f0eddSBruce Evans if (w == "") 33f47f0eddSBruce Evans w = "0" 344e65501fSAndrew Turner hex = "" 354e65501fSAndrew Turner if (w != "0") 364e65501fSAndrew Turner hex = "0x" 37f47f0eddSBruce Evans sub("w3$", "", $3) 38ce3b9e3aSJulian Elischer # This still has minor problems representing INT_MIN, etc. 39ce3b9e3aSJulian Elischer # E.g., 40ce3b9e3aSJulian Elischer # with 32-bit 2''s complement ints, this prints -0x80000000, 41ce3b9e3aSJulian Elischer # which has the wrong type (unsigned int). 424e65501fSAndrew Turner printf("#define\t%s\t%s%s%s\n", $3, sign, hex, w) 43ce3b9e3aSJulian Elischer } ' 44f47f0eddSBruce Evans} 45ce3b9e3aSJulian Elischer 46ce3b9e3aSJulian Elischer 47ce3b9e3aSJulian Elischer# 48*2ce493e1SArtem Hevorhian# MAIN PROGRAM 49ce3b9e3aSJulian Elischer# 50ce3b9e3aSJulian Elischeruse_outfile="no" 51ce3b9e3aSJulian Elischerwhile getopts "o:" option 52ce3b9e3aSJulian Elischerdo 53ce3b9e3aSJulian Elischer case "$option" in 54ce3b9e3aSJulian Elischer o) outfile="$OPTARG" 55ce3b9e3aSJulian Elischer use_outfile="yes";; 56ce3b9e3aSJulian Elischer *) usage;; 57ce3b9e3aSJulian Elischer esac 58ce3b9e3aSJulian Elischerdone 5946dd3ef0SWarner Loshshift $((OPTIND - 1)) 60ce3b9e3aSJulian Elischercase $# in 61ce3b9e3aSJulian Elischer1) ;; 62ce3b9e3aSJulian Elischer*) usage;; 63ce3b9e3aSJulian Elischeresac 64ce3b9e3aSJulian Elischer 65ce3b9e3aSJulian Elischerif [ "$use_outfile" = "yes" ] 66ce3b9e3aSJulian Elischerthen 6746dd3ef0SWarner Losh work "$1" 3>"$outfile" >&3 3>&- 68ce3b9e3aSJulian Elischerelse 6946dd3ef0SWarner Losh work "$1" 70ce3b9e3aSJulian Elischerfi 71ce3b9e3aSJulian Elischer 72