Subj : Switch/Case with inkey() not working
To   : Codefenix
From : Digital Man
Date : Wed Jan 08 2025 11:49 am

 Re: Switch/Case with inkey() not working
 By: Codefenix to All on Wed Jan 08 2025 11:36 am

> Having an odd problem with a script I'm writing.
>
> Consider the following JS code:
>
> while (!script_exit) {
>   switch (console.inkey().toUpperCase()) {
>     case "A":
>         doThingOne();
>         break;
>     case "B":
>         doThingTwo();
>         break;
>     case KEY_ESC:
>     case "Q":
>     case "\r":
>         script_exit = true;
>         break;
>     default:
>         log("switch default"); // hits this every time
>   }
> }
>
> I'm trying to get a single key from the user and let the switch/case block
> handle accordingly. However, instead of waiting for input, it immediately
> falls to the default conition (as commented above).

by default, console.inkey() immediately returns null when there's no pending keyboard input. I recommend passing a non-zero timeout value to inkey() (so you don't peg the CPU while polling for input) and then checking for null (no input) as a possible return value.

> If I change inkey to getkey, it works as expected. I'd prefer to use inkey
> instead of getkey though, to avoid showing the cursor while waiting for
> input.

The cursor is displayed by the terminal, no the BBS, so using inkey() or getkey(), you'll still get a cursor (somewhere).
--
                                           digital man (rob)

This Is Spinal Tap quote #46:
"Not an Exit" - we don't want an exit. Well that's true.
Norco, CA WX: 62.0�F, 19.0% humidity, 3 mph NW wind, 0.00 inches rain/24hrs

---
� Synchronet � Vertrauen � Home of Synchronet � [vert/cvs/bbs].synchro.net