HP Forums
Output from WAIT(-1) - Printable Version

+- HP Forums (https://www.hpmuseum.org/forum)
+-- Forum: HP Calculators (and very old HP Computers) (/forum-3.html)
+--- Forum: HP Prime (/forum-5.html)
+--- Thread: Output from WAIT(-1) (/thread-16139.html)



Output from WAIT(-1) - cahlucas - 01-06-2021 09:57 PM

Hi all,
In a program I am making, I use the command WAIT (-1) to register both keystrokes and screen touch. In the documentation I have it says that when I touch the screen I get the following output: {type, [x, y], [dx, dy]}. An example of this is {#3h;#B0:-16h;#96:-16h}. How should I interpret this output? The '#3h' is of course the 'type', and indicates what kind of movement has been recorded. The '#B0' and the '#96' are the x and y coordinates where the screen is touched, but what should I do with those '-16h', and how can I remove it? To make those x and y coordinates usable, it will probably be necessary to convert them to decimal integers. I would like to hear how I can best process this information. Thanks in advance! Sincerely, Karel.


RE: Output from WAIT(-1) - Joe Horn - 01-07-2021 04:54 AM

When Prime displays a binary integer in Home in this form:

#123:16h

the trailing part :16h means that it's a 16-bit word, which is different from the current Home Setting for the default word size of binary integers. Try this: type #123 and press Enter. You'll see #123h by itself. Now go into Home Settings and change the default Integers word size to 16, and go back into Home. The result that previously looked like "#123h" now shows its wordsize, because it's now different from the default. Type #123 Enter, and reset the default word size to 32 (or 64 or whatever you prefer). Once again the previous results will look different, with their word size being displayed after a colon unless their word size is the same as the current default.

EDIT: If the word size is displayed as negative, it means that the binary integer was created as a signed number, not an unsigned number (settable at the end of the Integers line in Home Settings).

Hope that made sense!


RE: Output from WAIT(-1) - cahlucas - 01-08-2021 04:55 PM

Dear Mr. Horn,
The explanation you have given is very clear. What I can't understand is why the x and y values are returned as a signed number when it is set in home settings that no signed numbers should be used. There are no negative values themselves in the x and y values. And how can I get rid of that word size, if I only need the binary values of x and y? Sincerely, Karel.


RE: Output from WAIT(-1) - Joe Horn - 01-08-2021 10:20 PM

(01-08-2021 04:55 PM)cahlucas Wrote:  Dear Mr. Horn,
The explanation you have given is very clear. What I can't understand is why the x and y values are returned as a signed number when it is set in home settings that no signed numbers should be used. There are no negative values themselves in the x and y values. And how can I get rid of that word size, if I only need the binary values of x and y? Sincerely, Karel.

Question #1: Your Home Setting does NOT mean that no signed numbers should be used; it means that when you ENTER binary integers from the keyboard, or when you obtain binary integers as the result of a calculation, THEN what you get are unsigned. That's different from the binary integers you obtain from some functions which always return them with a specific word size and/or signed/unsigned.

For example, type TOff or TDim in Home (be sure to type the letters exactly as shown, with the first two letters uppercase and the next two letters lowercase). You'll always obtain unsigned 30-bit numbers, no matter what your Home Settings are for binary integers.

Question #2: You ask how to get rid of that word size. The answer is simple: Don't. There is no need to get rid of it. Just use the result as-is, or convert it to a real number using the B→R function. What appears after the colon is merely information for you. If you don't need that information, ignore it.


RE: Output from WAIT(-1) - cahlucas - 01-09-2021 06:14 PM

Dear Mr. Horn,
So code as shown below should work fine. Please let me know if anything is wrong or if something needs to be inserted. I hope to hear from you soon. Sincerely, Karel.
Code:

...
LOCAL input,exit,cx,cy;
exit:=0;
...
REPEAT
input:= WAIT(-1);
CASE
  IF TYPE(input)==6 THEN
     CASE
        IF input(1)==#0h THEN 
          cx:=B->R(input(2));
          cy:=B->R(input(3));
        END;
        IF input(1)==#1h THEN 
          cx:=B->R(input(2));
          cy:=B->R(input(3));
        END;
        IF input(1)==#3h THEN 
          cx:=B->R(input(2));
          cy:=B->R(input(3));
        END;
        IF input(1)==#5h THEN 
          cx:=B->R(input(2));
          cy:=B->R(input(3));
        END;
        IF input(1)==#6h THEN 
          cx:=B->R(input(2));
          cy:=B->R(input(3));
        END;
        IF input(1)==#7h THEN 
          cx:=B->R(input(2));
          cy:=B->R(input(3));
        END;
     END;
  END;
  IF TYPE(input)==0 THEN
     CASE
        IF input==-1 THEN  END;
        IF input==19 THEN exit:=1;  END;
        ...
        IF input==50 THEN ...  END;
     END;
  END;
END;
...
UNTIL exit;
...



RE: Output from WAIT(-1) - john gustaf stebbins - 01-09-2021 08:48 PM

This code, derived from yours, works fine.

Are you having problems with your code?

Code:

EXPORT KAREL()
BEGIN

LOCAL input,exit,cx,cy;
exit:=0;

REPEAT
input:= WAIT(-1);
CASE
  IF TYPE(input)==6 THEN
     CASE
        IF input(1)==#0h THEN 
          cx:=B→R(input(2));
          cy:=B→R(input(3));
        END;
        IF input(1)==#1h THEN 
          cx:=B→R(input(2));
          cy:=B→R(input(3));
        END;
        IF input(1)==#3h THEN 
          cx:=B→R(input(2));
          cy:=B→R(input(3));
        END;
        IF input(1)==#5h THEN 
          cx:=B→R(input(2));
          cy:=B→R(input(3));
        END;
        IF input(1)==#6h THEN 
          cx:=B→R(input(2));
          cy:=B→R(input(3));
        END;
        IF input(1)==#7h THEN 
          cx:=B→R(input(2));
          cy:=B→R(input(3));
        END;
     END;
  END;
  IF TYPE(input)==0 THEN
     CASE
        IF input==-1 THEN  END;
        IF input==29 THEN exit:=1;  END;
        IF input==50 THEN  END;
     END;
  END;
END;

ARC_P(cx,cy,40);

UNTIL exit;

END;



RE: Output from WAIT(-1) - cahlucas - 01-09-2021 09:36 PM

(01-09-2021 08:48 PM)john gustaf stebbins Wrote:  Are you having problems with your code?

Code:

EXPORT KAREL()
BEGIN
LOCAL input,exit,cx,cy;

ARC_P(cx,cy,40);

END;

Dear Mr. Stebbins,
The code in this thread apparently works fine, the problem is in another part of my program, which I have created a new thread for. In your code, a circle is drawn where the screen is touched, and I don't need a circle in my program. Sincerely, Karel.