[ Ivan Tanasic @ 15.08.2001. 20:52 ] @
Zna li neko kako da napisem neki kod koji ce odgovoriti na pritisak npr ctrl + p???

[ tOwk @ 15.08.2001. 23:16 ] @
navedi platformu: dos/win/sus/bsd?

Cesto se neki "kontrolni znakovi" dobijaju tako sto prvo sledi 0x0, pa zatim kod (tako je pri direktnom citanju sa tastature), medjutim, neki kontrolni znakovi spadaju u opseg ASCII znakova (posto njih moze biti do 256/128, a tastature imaju 101/102+ tastera).

Jednostavan kod:
Code:

#include <stdio.h>
#include <conio.h>

int main () {
    char c;

    while (c=getch()) {
        printf("[%c] %.3dn",c,c);
    }
    return 0;
}

moze ti u DOSu dati odgovor na tvoje pitanje (ja dobijem 16 za ctr+p, tj. 0x10 ako bi se stampalo u hex).

Ovo je ponekad zgodan nacin da se sazna neki kod, ali ponekad je bolje pronaci referencu. Zasad, mislim da ce ti ovo posluziti. Ako te interesuje u Windowsu mogu da pronadjem koju poruku treba cekati (mozda i WM_CHAR daje informacije o tome da li je Ctrl pritisnut ali nisam siguran). Na UNIX platformama trenutno nemam nijednu operativnu masinu pa ne mogu da probam, ali ovo ti moze dati ideju, a mozes najverovatnije i direktno da citas sa konzole.

Toliko.
[ Ivan Tanasic @ 15.08.2001. 23:41 ] @
Citat:
tOwk je napisao:
navedi platformu: dos/win/sus/bsd?

Cesto se neki "kontrolni znakovi" dobijaju tako sto prvo sledi 0x0, pa zatim kod (tako je pri direktnom citanju sa tastature), medjutim, neki kontrolni znakovi spadaju u opseg ASCII znakova (posto njih moze biti do 256/128, a tastature imaju 101/102+ tastera).

Jednostavan kod:
Code:

#include <stdio.h>
#include <conio.h>

int main () {
    char c;

    while (c=getch()) {
        printf("[%c] %.3dn",c,c);
    }
    return 0;
}

moze ti u DOSu dati odgovor na tvoje pitanje (ja dobijem 16 za ctr+p, tj. 0x10 ako bi se stampalo u hex).

Ovo je ponekad zgodan nacin da se sazna neki kod, ali ponekad je bolje pronaci referencu. Zasad, mislim da ce ti ovo posluziti. Ako te interesuje u Windowsu mogu da pronadjem koju poruku treba cekati (mozda i WM_CHAR daje informacije o tome da li je Ctrl pritisnut ali nisam siguran). Na UNIX platformama trenutno nemam nijednu operativnu masinu pa ne mogu da probam, ali ovo ti moze dati ideju, a mozes najverovatnije i direktno da citas sa konzole.

Toliko.



Hvaal mnogo...

Prvenstveno mi je potrebno za nrad na unix sistemima znaci neki linux/bsd mozda i dos

Probacu ovo sto si mi rekao...

Uz to cinimi se da postoji alternativa u ncurses ili curses biblioteci....

Ako neko zna jos neki predlog, dobro doslo je
[ kajla @ 16.08.2001. 18:04 ] @
Postoji funkcija bioskey() pa mozes da probas sa njom...

poz.
[ Ivan Tanasic @ 16.08.2001. 20:04 ] @
Citat:
kajla je napisao:
Postoji funkcija bioskey() pa mozes da probas sa njom...

poz.


ok, al daj jos malo informacija o njoj
[ kajla @ 16.08.2001. 20:13 ] @
_________ 
&brvbar;bioskey_ Keyboard interface. _
_________ _
_
Syntax: _
int bioskey(int cmd); _
_
Prototype in: _
bios.h _
_
Remarks: _
bioskey performs various keyboard operations using BIOS interrupt 0x16. _
_
The parameter cmd determines the exact operation. _
_
Return Value: _
The value returned by bioskey depends on the task it performs, determined by _
the value of cmd: _

cmd &brvbar;
Value &brvbar; Description
--------+-------------------------------------------------------------
0 &brvbar; If the lower 8 bits are nonzero, bioskey returns the ASCII
&brvbar; character for the next keystroke waiting in the queue or the
&brvbar; next key pressed at the keyboard.
&brvbar; If the lower 8 bits are zero, the upper 8 bits are the extended
&brvbar; keyboard codes defined in the IBM PC Technical Reference manual.
1 &brvbar; Tests whether a keystroke is available to be read.
&brvbar; A return value of zero means no key is available.
&brvbar; The return value is 0xFFFFF (-1) if Ctrl-Brk has been pressed.
&brvbar; Otherwise, the value of the next keystroke is returned.
&brvbar; The keystroke itself is kept to be returned by the next call to
&brvbar; bioskey that has a cmd value of zero.
2 &brvbar; Requests the current shift key status.

The shift key status is obtained by ORing the following values together:
First &brvbar; Second &brvbar; Shift Key
Value &brvbar; Value &brvbar; Status
---------+--------+---------------------
Bit 7 &brvbar; 0x80 &brvbar; Insert on
Bit 6 &brvbar; 0x40 &brvbar; Caps on
Bit 5 &brvbar; 0x20 &brvbar; Num Lock on
Bit 4 &brvbar; 0x10 &brvbar; Scroll Lock on
Bit 3 &brvbar; 0x08 &brvbar; Alt pressed
Bit 2 &brvbar; 0x04 &brvbar; Ctrl pressed
Bit 1 &brvbar; 0x02 &brvbar; Left Shift pressed
Bit 0 &brvbar; 0x01 &brvbar; Right Shift pressed

Portability:
bioskey works with IBM PCs and compatibles only.

Example:
Code:

 #include <stdio.h>
 #include <bios.h>
 #include <ctype.h>

  #define RIGHT  0x01
  #define LEFT   0x02
  #define CTRL   0x04
  #define ALT    0x08

  int main(void)
  {
     int key, modifiers;

     /* function 1 returns 0 until a key is pressed */
     while (bioskey(1) == 0);

     /* function 0 returns the key that is waiting */
     key = bioskey(0);

     /* use function 2 to determine if shift keys were used */
     modifiers = bioskey(2);
     if (modifiers)
     {
        printf("[");
        if (modifiers & RIGHT) printf("RIGHT");
        if (modifiers & LEFT)  printf("LEFT");
        if (modifiers & CTRL)  printf("CTRL");
        if (modifiers & ALT)   printf("ALT");
        printf("]");
     }
     /* print out the character read */
     if (isalnum(key & 0xFF))
        printf("'%c\n", key);
     else
        printf("%#02x\n", key);
     return 0;
  }


poz.

PS. ako te zanima mogu da postujem jedan primer koji sam ja pisao.
[ kajla @ 16.08.2001. 20:15 ] @
Malo je necitak predhodni post ali sve to imas u help-u od Turbo C++ 1.00.

poz.
[ Milan Aksic @ 16.08.2001. 20:27 ] @
kajla napomeni coveku, da mu je to samo za DOS.
Pozdrav.

[Ovu poruku je menjao passanger dana 08-16-2001 u 08:27 PM GMT]
[ Ivan Tanasic @ 16.08.2001. 21:45 ] @
Citat:
passanger je napisao:
kajla napomeni coveku, da mu je to samo za DOS.
Pozdrav.

[Ovu poruku je menjao passanger dana 08-16-2001 u 08:27 PM GMT]


Vidis ti al bi me covek zezno :D... treba mi za neki unix prvenstveno, ali nebi smetalo da radi pod dosom :^)
[ Milan Aksic @ 16.08.2001. 22:03 ] @
Citat:
autoexes je napisao:
Citat:
passanger je napisao:
kajla napomeni coveku, da mu je to samo za DOS.
Pozdrav.

[Ovu poruku je menjao passanger dana 08-16-2001 u 08:27 PM GMT]


Vidis ti al bi me covek zezno :D... treba mi za neki unix prvenstveno, ali nebi smetalo da radi pod dosom :^)

Pa to sam ti rekao cisto da se ne bi mlatio, ako bi video da ti ne radi pod nekim drugim OS-om!
Pozdrav.
[ kajla @ 17.08.2001. 10:52 ] @
Sve je bilo napisano samo je trebalo procitati do kraja:
Code:

Portability: 
bioskey works with IBM PCs and compatibles only. 


poz.
[ Ivan Tanasic @ 17.08.2001. 17:34 ] @
Ea ovaj kako da kazem... nece da ga kompajlira ni turbo c++ 4.5 ni devc++

stim sto mi je ovaj prvi pronasao error:
12: poziv na nedefinisanu funkciju bioskey u funkciji main
a ovaj drugi ne moze da nadje bioskey.h


nisam jos probo pod gcc-om
[ Milan Aksic @ 17.08.2001. 18:01 ] @
Citat:
autoexes je napisao:
Ea ovaj kako da kazem... nece da ga kompajlira ni turbo c++ 4.5 ni devc++

stim sto mi je ovaj prvi pronasao error:
12: poziv na nedefinisanu funkciju bioskey u funkciji main
a ovaj drugi ne moze da nadje bioskey.h


nisam jos probo pod gcc-om


E ovaj ... zasto malo pazljivije ne gledas?
Drugo kljla ti je gore postovao example, pa proveri da li si sve uradio kao sto je postovano (ako se ceo kod uzimao), a ako nije to proveri da li si ukljucio zaglavlje bios.h, jer borlanodovi kompajleri obicno prijavljuju greske gde se na to misli, da nije definisana funkcija, odnosno nije ukljuceno zaglavlje gde je deklarisana funkcija. Znaci pokusaj samo #include <bios.h>, ako je imas (a zasto i nebi) u include direktorijumu. Ako si je ukljucio u program i ona postoji u include diru proveri path u kompajleru, gde bio trebao da trazi.
Pozdrav.
[ Ivan Tanasic @ 18.08.2001. 13:55 ] @
[qoote]
E ovaj ... zasto malo pazljivije ne gledas?
Drugo kljla ti je gore postovao example, pa proveri da li si sve uradio kao sto je postovano (ako se ceo kod uzimao), a ako nije to proveri da li si ukljucio zaglavlje bios.h, jer borlanodovi kompajleri obicno prijavljuju greske gde se na to misli, da nije definisana funkcija, odnosno nije ukljuceno zaglavlje gde je deklarisana funkcija. Znaci pokusaj samo #include <bios.h>, ako je imas (a zasto i nebi) u include direktorijumu. Ako si je ukljucio u program i ona postoji u include diru proveri path u kompajleru, gde bio trebao da trazi.
Pozdrav.
[/quote]

Pa uradio sam copy/paste ovog teksta, znaci nista nisam izostavio. A sto je bedak nemam bioskey.h na kompu, to sam tek posle provalio