56 lines
1.9 KiB
Text
56 lines
1.9 KiB
Text
begin enum 1 // Object tags
|
|
_fldA
|
|
_ansA
|
|
_fldB
|
|
_ansB
|
|
_rand
|
|
end enum
|
|
|
|
void local fn BuildMacInterface //15-line GUI
|
|
window 1, @"Greatest Common Divisor", ( 0, 0, 380, 130 ), NSWindowStyleMaskTitled + NSWindowStyleMaskClosable
|
|
textfield _fldA,,, ( 20, 89, 156, 21 )
|
|
ControlSetAlignment( _fldA, NSTextAlignmentRight )
|
|
ControlSetFormat( _fldA, @"0123456789", Yes, 18, 0 )
|
|
textfield _fldB,,, ( 20, 57, 156, 24 )
|
|
ControlSetAlignment( _fldB, NSTextAlignmentRight )
|
|
ControlSetFormat( _fldB, @"0123456789", Yes, 18, 0 )
|
|
textlabel _ansA, @"= ", ( 182, 91, 185, 16 )
|
|
textlabel _ansB, @"= ", ( 182, 62, 185, 16 )
|
|
button _rand,,,@"Random demo", ( 129, 13, 122, 32 )
|
|
menu 1,,, @"File" : menu 1,0,, @"Close", @"w" : MenuItemSetAction(1,0,@"performClose:")
|
|
editmenu 2
|
|
WindowMakeFirstResponder( 1, _fldA )
|
|
end fn
|
|
|
|
local fn GCD( a as long, b as long ) as long //the requested function
|
|
while b
|
|
long c = a mod b
|
|
a = b : b = c
|
|
wend
|
|
end fn = a
|
|
|
|
void local fn DoDialog( ev as Long, tag as long ) //This makes it interactive
|
|
long a, b, c
|
|
select ev
|
|
case _textFieldDidchange //Find GCD of edit fields' contents
|
|
a = fn ControlIntegerValue( _fldA )
|
|
b = fn ControlIntegerValue( _fldB )
|
|
if a + b == 0 then textlabel _ansA, @"= 0" : textlabel _ansB, @"= 0" : exit fn
|
|
c = fn GCD( a, b )
|
|
textlabel _ansA, fn stringwithformat(@"= %ld x %ld", c, a / c )
|
|
textlabel _ansB, fn stringwithformat(@"= %ld x %ld", c, b / c )
|
|
case _btnclick //Fill edit fields with random content, then process
|
|
select tag
|
|
case _rand
|
|
c = rnd(65536)
|
|
textfield _fldA,,str( c * rnd(65536) )
|
|
textfield _fldB,,str( c * rnd(65536) )
|
|
fn DoDialog( _textFieldDidchange, 0 )
|
|
end select
|
|
case _windowWillClose : end
|
|
end select
|
|
end fn
|
|
|
|
fn BuildMacInterface
|
|
on dialog fn doDialog
|
|
handleevents
|