# Macro CMP - Compare integers even if they are bigger than machine word size
# \%1 = arithmetic comparison operator (>, <, =, etc, listed below)
# \%2 = first number (unsigned decimal integer of any length)
# \%3 = second number (ditto)
#
# Succeeds if comparison is true, fails if not, or if called incorrectly.
# Example:
#  cmp > 1 2
#  if success { commands if true } else { commands if false }
#
# F. da Cruz, Columbia U, 18 December 2007
#
def cmp {
    .\%9 = 24  # max number of digits - you can make this any size you want
    if < \v(argc) 4 end 1 "Usage: CMD operator number number"
    if not integer \%2 end 1 "CMD: operand not numeric"
    if not integer \%3 end 1 "CMD: operand not numeric"
    .\%2 := \flpad(\%2,\%9,0)
    .\%3 := \flpad(\%3,\%9,0)
    switch \%1 {
      :<,  if LLT \%2 \%3 end 0, end 1
      :>,  if LGT \%2 \%3 end 0, end 1
      :=,  if EQU \%2 \%3 end 0, end 1
      :==, if EQU \%2 \%3 end 0, end 1
      :!=, if NOT EQU \%2 \%3 end 0, end 1
      :<=, if NOT LGT \%2 \%3 end 0, end 1
      :>=, if NOT LLT \%2 \%3 end 0, end 1
      :default, end 2 "CMD: Bad operator '\%1'"
    }
}
