local fn Doubled( n as long ) : end fn = n * 2 local fn Halved( n as long ) : end fn = int( n / 2 ) local fn IsEven( n as long ) : end fn = ( n mod 2 ) - 1 local fn EthiopianMultiply( x as long, y as long ) long sum = 0, sign = x printf @"Ethiopian multiplication of %3ld x %3ld = \b", x, y do if not ( fn IsEven( x ) ) then sum += y x = fn Halved( x ) : y = fn Doubled( y ) until ( x == 0 ) if sign < 0 then sum *= - 1 printf @"%4ld", sum end fn fn EthiopianMultiply( 17, 34 ) fn EthiopianMultiply( -17, 34 ) fn EthiopianMultiply( -17, -34 ) HandleEvents