-- Look out! We be programming!
-- cradle2a.ex a Euphoria compiler by A.R.S. KA9QLQ Alvin Koffman Copy right 2002

-- cradle2a.ex

include get.e -- for get character functions
include wildcard.e -- for upper()

with trace
--trace(1) -- output to screen

constant
  alpha = "ABCDEFGHIJKLMNOPQRSTUVWXYZ", -- Define alphas
  nums = "0123456789"	-- Define numerics

 object Look	-- Look ahead character

procedure GetChar() -- this grabs a line of characters
   Look = getc(0)			 --	this will prosess one character at a time if looped
end procedure

function IsAlpha(object c) -- Recognize an Alpha Character
   return find(upper(c),alpha)
end function

function IsDigit(object c) -- Recognize a Decimal Digit
   return find(c,nums)
end function

procedure Error(sequence s) -- Report an Error
   puts(1,"\n Error: " & s & ".")
end procedure

procedure Abort(sequence s) -- Report Error and Halt
atom x
   Error(s) -- call to get the error
   x = wait_key() -- wait so you can see results
   abort(1)	   -- when using Windows or Linux
end procedure

procedure Expected(sequence s) -- Report What Was Expected
   Abort(s & " Expected")
end procedure

function GetNum() -- Get a Number
object x				-- check for error and return results
   if not find(Look,nums) then Expected("Integer")
   end if
   x = Look
   return x
end function

procedure Init()  -- Initialize
   GetChar() -- grab a character
end procedure

procedure Expression() -- output assembly code for numerics
   puts(1, "MOVE # " & GetNum() & " D0 \n")
end procedure

-- start
   puts(1, "Input a line of characters \n") -- ask for imput
   Init()    -- call initialison procedure
   Expression()  -- check for and process numbers