QB64.org Forum

Active Forums => QB64 Discussion => Topic started by: FilipeEstima on March 04, 2020, 10:32:57 pm

Title: Playing with keyboard LEDs!
Post by: FilipeEstima on March 04, 2020, 10:32:57 pm
Hi guys, I'm very excited to try the new QB64 version 1.4. These keyboard LEDs functions and statements were something I was needing very badly. I want to create a piece of software "kbdleds.exe" that can be called from command-line with arguments passed like this:

kbdleds.exe c1 n0 s1 (this will make Caps Lock ON, Num Lock OFF, Scroll Lock ON)
kbdleds.exe a0 (this will make all 3 LEDs OFF)
kbdleds.exe ct (this will toggle Caps Lock)

However, I don't know how to read arguments passed via command line, or from a batch file. Help here, please?
Title: Re: Playing with keyboard LEDs! (SOLVED)
Post by: FilipeEstima on March 04, 2020, 10:37:46 pm
Nevermind, I figured it out: I can get the parameters with COMMAND$ :-)

Now it's coding time.
Title: Re: Playing with keyboard LEDs!
Post by: FellippeHeitor on March 04, 2020, 10:45:32 pm
Yay! 😁
Title: Re: Playing with keyboard LEDs!
Post by: Richard Frost on March 04, 2020, 11:13:49 pm
If your LEDs are in a line, and you blink them back and forth, the cat will clean your keyboard.
Title: Re: Playing with keyboard LEDs!
Post by: FilipeEstima on March 09, 2020, 08:45:53 pm
I'm having a problem with COMMAND$; whatever is after ">" is discarded and I don't know how to prevent it. I want my program to be able to receive ">nul" after all parameters, so instead of printing it will do the task then go SYSTEM. But since COMMAND$ suppresses everything that comes after ">", I can't get ">nul" into the program.
Title: Re: Playing with keyboard LEDs!
Post by: FellippeHeitor on March 09, 2020, 08:49:04 pm
Anything beyond > is dealt with by your os. Anything before that is yours to manipulate.
Title: Re: Playing with keyboard LEDs!
Post by: FilipeEstima on March 09, 2020, 09:21:22 pm
Thanks FellippeHeitor, I didn't realize that had to do with the OS. Anyway, here's the code:

Code: QB64: [Select]
  1. param$ = LCASE$(COMMAND$): wrong = 0: silent = 0: _SCREENHIDE
  2. IF RIGHT$(param$, 7) = "-silent" THEN param$ = LEFT$(param$, LEN(param$) - 9): silent = 1
  3. WHILE LEN(param$)
  4.     curr$ = LEFT$(param$, 2): param$ = MID$(param$, 4)
  5.     IF RIGHT$(curr$, 1) <> "n" AND RIGHT$(curr$, 1) <> "c" AND RIGHT$(curr$, 1) <> "s" THEN wrong = 1: EXIT WHILE
  6.     IF LEFT$(curr$, 1) <> "+" AND LEFT$(curr$, 1) <> "-" THEN wrong = 1: EXIT WHILE
  7.     IF curr$ = "+c" THEN _CAPSLOCK ON
  8.     IF curr$ = "-c" THEN _CAPSLOCK OFF
  9.     IF curr$ = "+n" THEN _NUMLOCK ON
  10.     IF curr$ = "-n" THEN _NUMLOCK OFF
  11.     IF curr$ = "+s" THEN _SCROLLLOCK ON
  12.     IF curr$ = "-s" THEN _SCROLLLOCK OFF
  13.  
  14. IF wrong THEN PRINT "Usage: TOGGLEW [+c|-c] [+n|-n] [+s|-s] [-silent]": END
  15.  
  16. PRINT "TOGGLEW 1.0 (c) Filipe Estima"
  17. PRINT "Inspired by TOGGLE (c) 1988 Ziff Communications Co."
  18. PRINT "PC Magazine þ Jeff Prosise": PRINT
  19. PRINT "    CapsLock   :  ";: IF _CAPSLOCK THEN PRINT "On" ELSE PRINT "Off"
  20. PRINT "    NumLock    :  ";: IF _NUMLOCK THEN PRINT "On" ELSE PRINT "Off"
  21. PRINT "    ScrollLock :  ";: IF _SCROLLLOCK THEN PRINT "On" ELSE PRINT "Off"
  22.  

I drew inspiration from TOGGLE, an utility developed by Jeff Prosise for MS-DOS back in 1988, while he worked at PC Magazine. It is just 338 bytes long and does exactly the same as this code.
Title: Re: Playing with keyboard LEDs!
Post by: FilipeEstima on March 09, 2020, 09:26:27 pm
What are the tags I need to use in order to post code that looks like QBASIC code in this forum?

Edit: nevermind, I figured it out.
Title: Re: Playing with keyboard LEDs!
Post by: bplus on March 09, 2020, 09:31:52 pm
What are the tags I need to use in order to post code that looks like QBASIC code in this forum?

It is the QB64 Icon button or
[  code  =  qb64  ]   [  / code ]
without spaces
Title: Re: Playing with keyboard LEDs!
Post by: FellippeHeitor on March 09, 2020, 09:46:39 pm
You may benefit from using COMMAND$ as an array. Try:

Code: QB64: [Select]
Title: Re: Playing with keyboard LEDs!
Post by: FellippeHeitor on March 09, 2020, 09:50:54 pm
I took the liberty:

Code: QB64: [Select]
  1.  
  2.         CASE "-silent": silent = 1
  3.         CASE "+c": _CAPSLOCK ON
  4.         CASE "-c": _CAPSLOCK OFF
  5.         CASE "+n": _NUMLOCK ON
  6.         CASE "-n": _NUMLOCK OFF
  7.         CASE "+s": _SCROLLLOCK ON
  8.         CASE "-s": _SCROLLLOCK OFF
  9.         CASE ELSE: wrong = 1: EXIT FOR
  10.     END SELECT
  11.  
  12. IF silent THEN SYSTEM
  13. IF wrong THEN PRINT "Usage: TOGGLEW [+c|-c] [+n|-n] [+s|-s] [-silent]": SYSTEM
  14.  
  15. PRINT "TOGGLEW 1.0 (c) Filipe Estima"
  16. PRINT "Inspired by TOGGLE (c) 1988 Ziff Communications Co."
  17. PRINT "PC Magazine þ Jeff Prosise": PRINT
  18. PRINT "    CapsLock   :  ";: IF _CAPSLOCK THEN PRINT "On" ELSE PRINT "Off"
  19. PRINT "    NumLock    :  ";: IF _NUMLOCK THEN PRINT "On" ELSE PRINT "Off"
  20. PRINT "    ScrollLock :  ";: IF _SCROLLLOCK THEN PRINT "On" ELSE PRINT "Off"
  21.  
Title: Re: Playing with keyboard LEDs!
Post by: FilipeEstima on March 10, 2020, 07:14:58 am
Hey, much better! Thanks FellippeHeitor, I didn't have a clue it was possible to write directly to the prompt: never knew _DEST _CONSOLE even existed.
Title: Re: Playing with keyboard LEDs!
Post by: FilipeEstima on March 10, 2020, 08:10:41 am
I noticed that, since the program is now writing to the console, I don't need the -silent switch anymore. It will work just fine with >nul.
Title: Re: Playing with keyboard LEDs!
Post by: FellippeHeitor on March 10, 2020, 08:33:50 am
Glad I could help 🙂