[A89] Re: OSDequeue


[Prev][Next][Index][Thread]

[A89] Re: OSDequeue




-------------------
> 
> John David Ratliff wrote:
> 
> > -------------------
> > >
> > > How do you implement this and save the key press to a variable,
> > every
> > > time I do it the thing won't work!
> > >
> > >
> > >
> > >
> >
> > OSdequeue for keyboard reading is very simple.
> >
> > #include <system.h>
> > #include <kbd.h>
> >
> > short int getKey(short int wait) {
> >     unsigned short int key = 0;
> >     short int done = 0;
> >     void *kbq = kbd_queue();
> >
> >     while (!done) {
> >         if (!wait || !OSdequeue(&key,kbq)) {
> >             done = 1;
> >         }
> >     }
> >
> >     return (signed short int)key;
> > }
> >
> > It's sometimes a good idea to cast it to a signed int to avoid
> > warnings between signed and unsigned comparisons, which you will
often
> > get when comparing the KEY macros, like arrow keys KEY_LEFT.
> >
> > So, if you want to use that function...
> >
> > void _main(void) {
> >     short int key;
> >
> >     key = getKey(1);
> > }
> >
> > This will wait until a key is available and return the signed
> > keypress, stored in the variable key local to the _main()
function.
> >
> > OSdequeue() will not work if you have disabled interrupts or
> > redirected auto-int 1. If you did this, you will have to use
low-level
> > keyboard reading...
> >
> > Hope this helps...
> >
> > John David Ratliff
> > jdratlif@cs.indiana.edu
> 
> When the compiler goes over void kbq = kdb_queue(); it gives an
error
> 
> 
> 
> 

It must be a pointer.

void *kbq = kbd_queue();

You must include kbd.h for this, or tigcclib.h
You must include system.h for the OSdequeue() function, or tigcclib.h

This program compiles and runs fine for me, using TIGCC 0.91 SP1

// C Source File
// Created 6/15/2001; 2:41:11 PM

#define OPTIMIZE_ROM_CALLS    // Use ROM Call Optimization

#define SAVE_SCREEN           // Save/Restore LCD Contents

#include <stdio.h>
#include <graph.h>
#include <system.h>
#include <kbd.h>

short _ti89;                  // Produce .89Z File
short _ti92plus;              // Produce .9XZ File

short int getKey(short int wait) {
     unsigned short int key = 0;
     short int done = 0;
     void *kbq = kbd_queue();

     while (!done) {
         if (!wait || !OSdequeue(&key,kbq)) {
             done = 1;
         }
     }

    return (signed short int)key;
}

void _main(void) {
    short int key;
    key = getKey(1);
    
    ClrScr();
    printf_xy(0,0,"Key: %hd",key);
    
    getKey(1);
}

John David Ratliff
jdratlif@cs.indiana.edu



Follow-Ups: References: