volaski@acsu.buffalo.edu (maurice volaski) (01/13/90)
Below is a program written in THINK Pascal that performs the
Macintosh's famous task of command-period to cancel. The programs
loops idly until command-period is pressed and then it quits.
However, according to one aspect of THINK Pascal's debugger it
shouldn't work. In the Lightsbug window, the variables are updated
properly, but in the Observe window they are not. The variable temp
is appropriately set to true when command-period is set to true, but
the the function result CmdPeriod is not set to the value of temp!
This only occurs in the observe window, not anywhere else.
Anyone familiar with problems like this one and others in THINK Pascal's
Observe window? Rich Siegal, are you listening?
program testcmdperiod;
var
BtnUpdate: boolean;
function CmdPeriod: boolean;
const
periodKey = 46;
var
chCode: integer;
stopEvent: EventRecord;
temp: boolean;
begin
CmdPeriod := false;
if GetNextEvent(keyDownMask, stopEvent) then
begin
with stopEvent do
begin
if (BitAnd(modifiers, CmdKey) <> 0) and
(BitAnd(message, CharCodeMask) = periodKey) then
temp := true
else
temp := false;
end;
end
else
temp := false;
CmdPeriod := temp; {This line doesn't work according to only Observe}
end;
begin
BtnUpdate := false;
repeat
begin
;
end;
until CmdPeriod;
BtnUpdate := true;
end.siegman@sierra.Stanford.EDU (Anthony E. Siegman) (01/13/90)
In article <15719@eerie.acsu.Buffalo.EDU> volaski@acsu.buffalo.edu (maurice volaski) writes: >Below is a program written in THINK Pascal that performs the >Macintosh's famous task of command-period to cancel. The programs >loops idly until command-period is pressed and then it quits. (and then follows _36 lines_ of Pascal code) (which doesn't work) Good God! In MS QuickBASIC you say ON BREAK GOSUB BreakHandler: BREAK ON and write your BreakHandler routine, and that's it!
volaski@acsu.Buffalo.EDU (maurice volaski) (01/13/90)
In article <456@sierra.stanford.edu> siegman@sierra.UUCP (Anthony E. Siegman) writes: >In article <15719@eerie.acsu.Buffalo.EDU> volaski@acsu.buffalo.edu (maurice volaski) writes: >>Below is a program written in THINK Pascal that performs the >>Macintosh's famous task of command-period to cancel. The programs >>loops idly until command-period is pressed and then it quits. > >(and then follows _36 lines_ of Pascal code) (which doesn't work) The code does work; it's the debugger that is at issue.
siegel@endor.harvard.edu (Rich Siegel) (01/13/90)
In article <15719@eerie.acsu.Buffalo.EDU> volaski@acsu.buffalo.edu (maurice volaski) writes: >Below is a program written in THINK Pascal that performs the >Macintosh's famous task of command-period to cancel. The programs >loops idly until command-period is pressed and then it quits. > >However, according to one aspect of THINK Pascal's debugger it >shouldn't work. In the Lightsbug window, the variables are updated >properly, but in the Observe window they are not. The variable temp >is appropriately set to true when command-period is set to true, but >the the function result CmdPeriod is not set to the value of temp! >This only occurs in the observe window, not anywhere else. >Anyone familiar with problems like this one and others in THINK Pascal's >Observe window? Rich Siegal, are you listening? This is not a problem in Observe, or in LightsBug, or in your code. In Observe, when you enter an expression, the compiler is called to generate the code for the expression, and this code is then executed. If the expression includes a function name, then that function is called. In this case, you entered the name "CmdPeriod" in the Observe window, so the function "CmdPeriod" got called. (When executing functions from the Observe window, stopsigns are disregarded.) Since you weren't holding a command-Period when you evaluated the results in the Observe window, the function (correctly) returned FALSE. In LightsBug, the name of the function actually does refer to the value stored as the function's result, rather than the result of an invocation of the function itself. This ability of the Observe window is unique, but can sometimes be confusing. And my name does not have an "a" in it. :-) R. ~~~~~~~~~~~~~~~ Rich Siegel Staff Software Developer Symantec Corporation, Language Products Group Internet: siegel@endor.harvard.edu UUCP: ..harvard!endor!siegel "When someone who makes four hundred and fifty dollars an hour wants to tell you something for free, it's a good idea to listen." ~~~~~~~~~~~~~~~