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