This is an old version from the tos.hyp. The new is on GitHub!

HomeVDIAuskunftsfunktionenEscapefunktionen

7.7 Eingabefunktionen

Die Eingabefunktionen ermöglichen es einem Programm, unter Berücksichtigung der Eingabemodi, Tastatur und Maus abzufragen. Außerdem bieten sie Routinen zum einklinken in Timer- und Maus-Interrupts. Es stehen die folgenden Funktionen zur Verfügung:

v_hide_c Grafikcursor abschalten.
v_show_c Grafikcursor darstellen.
vex_butv Serviceroutine für Maustasteninterrupt verlegen.
vex_curv Mauszeiger selbst zeichnen.
vex_motv Serviceroutine für Mausbewegungsinterrupt verlegen.
vex_timv Serviceroutine des Timerinterrupts verlegen.
vex_wheelv Serviceroutine für Mausradereignisse.
vq_key_s Tastaturstatus abfragen.
vq_mouse Position des Grafikcursors ermitteln.
vrq_choice Tastendruck abwarten (REQUEST).
vrq_locator Position des Grafikcursor ermitteln (REQUEST).
vrq_string String von Tastatur einlesen (REQUEST).
vrq_valuator Überwachung von Eingabegeräten (REQUEST).
vsc_form Grafikcursor definieren.
vsin_mode Umschalten zwischen REQUEST- und SAMPLE-Modus.
vsm_choice Ermittelt die zuletzt gedrückte Taste (SAMPLE).
vsm_locator Position des Grafikcursor ermitteln (SAMPLE).
vsm_string String von Tastatur einlesen (SAMPLE).
vsm_valuator Ermittlung des Status von Eingabegeräten (SAMPLE).

Hinweis: Diese Funktionen sind in erster Linie für den Besitzer der physikalischen Workstation, d.h. für das AES gedacht. Programme sollten (sofern es keine zwingenden Gründe für ein anderes Vorgehen gibt) Maus- und Tastaturereignisse immer durch die Ereignisfunktionen des AES abfragen, da anderenfalls für andere Applikationen bestimmte Eingaben abgefangen werden.

Querverweis: Workstations des VDI   Style-Guidelines

7.7.1 vex_butv

Name: »Exchange Button Change Vector« - stellt den Interruptvektor für einen Maustastendruck um.
VDI-Nummer: 125
Deklaration: void vex_butv ( int16_t handle, int16_t (*pusrcode)(), int16_t (**psavcode)() );
Beschreibung: Die Funktion erlaubt es, eine eigene Routine in den Maustasten-Vektor zu hängen. Es gilt:
Parameter Bedeutung
   
handle Kennung der Workstation
pusrcode Adresse der neuen Routine
psavcode Adresse der alten Routine


Die neue Routine muß alle veränderten Register wiederherstellen und die alte Maustasten-Status Routine aufrufen.

Hinweis: Die Eingabefunktionen des VDI arbeiten nur auf der physikalischen Workstation, die im Normalfall von den AES benutzt wird.
Ergebnis: Die Funktion liefert kein Ergebnis.
Verfügbar: Supported by all screen drivers.
Gruppe: Eingabefunktionen
Querverweis: Binding   vex_timv   vex_motv   vex_curv

7.7.2 Bindings für vex_butv

C: void vex_butv ( int16_t handle, int16_t (*pusrcode)(), int16_t (**psavcode)() );
Umsetzung:
void vex_butv (int16_t handle, int16_t (*pusrcode)(),
               int16_t (**psavcode)())
{
   contrl[0] = 125;
   contrl[1] = 0;
   contrl[3] = 0;
   contrl[6] = handle;
   contrl[7..8] = pusrcode;

   vdi ();

   *psavcode = contrl[9..10];
}
GEM-Arrays:

Adresse Feldelement Belegung
contrl contrl[0] 125 # Opcode der Funktion
contrl+2 contrl[1] 0 # Einträge in ptsin
contrl+4 contrl[2] 0 # Einträge in ptsout
contrl+6 contrl[3] 0 # Einträge in intin
contrl+8 contrl[4] 0 # Einträge in intout
contrl+12 contrl[6] handle
contrl+14 contrl[7,8] pusrcode
contrl+18 contrl[9,10] psavcode

7.7.3 vex_curv

Name: »Exchange Cursor Change Vector« - stellt den Interruptvector für Cursorbewegungen um.
VDI-Nummer: 127
Deklaration: void vex_curv ( int16_t handle, int16_t (*pusrcode)(), int16_t (**psavcode)() );
Beschreibung: Die Funktion erlaubt es, eine eigene Routine in den Cursor-Change-Vektor zu hängen. Es gilt:
Parameter Bedeutung
   
handle Kennung der Workstation
pusrcode Adresse der neuen Routine
psavcode Adresse der alten Routine


Der Aufruf dieser Routine erfolgt, nachdem die über vex_motv eingetragene Routine aufgerufen und die Mauszeiger-Koordinaten, die man in d0.w und d1.w erhält, geclippt wurden. Alle veränderten Register müssen wiederhergestellt werden. Anschließend sollte die alte Routine aufgerufen werden.

Hinweis: Die Eingabefunktionen des VDI arbeiten nur auf der physikalischen Workstation, die im Normalfall von den AES benutzt wird.
Ergebnis: Die Funktion liefert kein Ergebnis.
Verfügbar: Supported by all screen drivers.
Gruppe: Eingabefunktionen
Querverweis: Binding   vex_timv   vex_butv   vex_motv

7.7.4 Bindings für vex_curv

C: void vex_curv ( int16_t handle, int16_t (*pusrcode)(), int16_t (**psavcode)() );
Umsetzung:
void vex_curv (int16_t handle, int16_t (*pusrcode)(),
               int16_t (**psavcode)())
{
   contrl[0] = 127;
   contrl[1] = 0;
   contrl[3] = 0;
   contrl[6] = handle;
   contrl[7..8] = pusrcode;

   vdi ();

   *psavcode = contrl[9..10];
}
GEM-Arrays:

Adresse Feldelement Belegung
contrl contrl[0] 127 # Opcode der Funktion
contrl+2 contrl[1] 0 # Einträge in ptsin
contrl+4 contrl[2] 0 # Einträge in ptsout
contrl+6 contrl[3] 0 # Einträge in intin
contrl+8 contrl[4] 0 # Einträge in intout
contrl+12 contrl[6] handle
contrl+14 contrl[7..8] pusrcode
contrl+18 contrl[9..10] psavcode

7.7.5 vex_motv

Name: »Exchange Mouse Movement Vector« - stellt den Interruptvektor für Mausbewegungen um.
VDI-Nummer: 126
Deklaration: void vex_motv ( int16_t handle, int16_t (*pusrcode)(), int16_t (**psavcode)() );
Beschreibung: Die Funktion erlaubt es, eine eigene Routine in den Maus-Movement-Vektor zu hängen. Es gilt:
Parameter Bedeutung
   
handle Kennung der Workstation
pusrcode Adresse der neuen Routine
psavcode Adresse der alten Routine


Die neue Routine muß alle veränderten Register wiederherstellen und die alte Maus-Movement Routine aufrufen.

Hinweis: Die Eingabefunktionen des VDI arbeiten nur auf der physikalischen Workstation, die im Normalfall von den AES benutzt wird.
Ergebnis: Die Funktion liefert kein Ergebnis.
Verfügbar: Supported by all screen drivers.
Gruppe: Eingabefunktionen
Querverweis: Binding   vex_timv   vex_butv   vex_curv

7.7.6 Bindings für vex_motv

C: void vex_motv ( int16_t handle, int16_t (*pusrcode)(), int16_t (**psavcode)() );
Umsetzung:
void vex_motv (int16_t handle, int16_t (*pusrcode)(),
               int16_t (**psavcode)())
{
   contrl[0] = 126;
   contrl[1] = 0;
   contrl[3] = 0;
   contrl[6] = handle;
   contrl[7..8] = pusrcode;

   vdi ();

   *psavcode = contrl[9..10];
}
GEM-Arrays:

Adresse Feldelement Belegung
contrl contrl[0] 126 # Opcode der Funktion
contrl+2 contrl[1] 0 # Einträge in ptsin
contrl+4 contrl[2] 0 # Einträge in ptsout
contrl+6 contrl[3] 0 # Einträge in intin
contrl+8 contrl[4] 0 # Einträge in intout
contrl+12 contrl[6] handle
contrl+14 contrl[7..8] pusrcode
contrl+18 contrl[9..10] psavcode

7.7.7 vex_timv

Name: »Exchange Timer Interrupt Vector« - stellt den Interruptvektor für den Zeitgeber um.
VDI-Nummer: 118
Deklaration: void vex_timv ( int16_t handle, int16_t (*tim_addr)(), int16_t (**otim_addr)(), int16_t *tim_conv );
Beschreibung: Die Funktion ermöglicht es, eine eigene Routine in den Timer-Interrupt zu hängen. Es gilt:
Parameter Bedeutung
   
handle Kennung der Workstation
tim_addr Adresse der neuen Routine
otim_addr Adresse der alten Routine
tim_conv Intervall des Interrupts (msec).


Die neue Routine muß an ihrem Ende alle veränderten Register restaurieren und die alte Timerinterrupt-Routine anspringen.

Hinweis: Die Eingabefunktionen des VDI arbeiten nur auf der physikalischen Workstation, die im Normalfall von den AES benutzt wird.
Ergebnis: Die Funktion liefert kein Ergebnis.
Verfügbar: Supported by all screen drivers.
Gruppe: Eingabefunktionen
Querverweis: Binding   vex_butv   vex_motv   vex_curv

7.7.8 Bindings für vex_timv

C: void vex_timv ( int16_t handle, int16_t (*tim_addr)(), int16_t (**otim_addr)(), int16_t *tim_conv );
Umsetzung:
void vex_timv (int16_t handle, int16_t (*tim_addr)(),
               int16_t (**otim_addr)(), int16_t *tim_conv)
{
   contrl[0] = 118;
   contrl[1] = 0;
   contrl[3] = 0;
   contrl[6] = handle;
   contrl[7..8] = tim_addr;

   vdi ();

   *otim_addr = contrl[9..10];
   *tim_conv  = intout[0];
}
GEM-Arrays:

Adresse Feldelement Belegung
contrl contrl[0] 118 # Opcode der Funktion
contrl+2 contrl[1] 0 # Einträge in ptsin
contrl+4 contrl[2] 0 # Einträge in ptsout
contrl+6 contrl[3] 0 # Einträge in intin
contrl+8 contrl[4] 1 # Einträge in intout
contrl+12 contrl[6] handle
contrl+14 contrl[7..8] tim_addr
contrl+18 contrl[9..10] otim_addr
intout intout[0] tim_conv

7.7.9 vex_wheelv

Name: »Exchange wheel interrupt vector« - stellt den Interruptvektor für die Mausradbewegung um.
VDI-Nummer: 134
Deklaration: void vex_wheelv ( int16_t handle, void *new, void **old );
Beschreibung: The call vex_wheelv installs a routine which is called by the VDI every time a mouse wheel event occurs. d0.w contain the wheel_number, d1.w contain the wheel_amount of the wheel from the mouse. The subroutine must save and restore modified registers and call the old interrupt routine.
Parameter Bedeutung
   
handle Kennung der Workstation
new Adresse der neuen Routine
old Adresse der alten Routine
Ergebnis: Die Funktion liefert kein Ergebnis.
Verfügbar: Seit dem MilanTOS 4.08 Release 5.10.2002, not yet documented, internals may still change.
Gruppe: Eingabefunktionen
Querverweis: Binding   vex_butv   vex_motv   vex_curv   vex_timv

7.7.10 Bindings für vex_wheelv

C: void vex_wheelv ( int16_t handle, void *new, void **old );
Umsetzung:
void vex_wheelv ( int16_t handle, void *new, void **old )
{
   contrl[0] = 134;
   contrl[1] = 0;
   contrl[3] = 0;
   contrl[6] = handle;
   contrl[7..8] = new;

   vdi ();

   *old = contrl[9..10];
}
GEM-Arrays:

Adresse Feldelement Belegung
contrl contrl[0] 134 # Opcode der Funktion
contrl+2 contrl[1] 0 # Einträge in ptsin
contrl+4 contrl[2] 0 # Einträge in ptsout
contrl+6 contrl[3] 0 # Einträge in intin
contrl+8 contrl[4] 0 # Einträge in intout
contrl+12 contrl[6] handle
contrl+14 contrl[7..8] new
contrl+18 contrl[9..10] old

7.7.11 vq_key_s

Name: »Sample Keyboard State Information« - ermittelt den Status der Kontrolltasten.
VDI-Nummer: 128
Deklaration: void vq_key_s ( int16_t handle, int16_t *pstatus );
Beschreibung: Die Funktion überprüft den Status der Tastatur. Es gilt:
Parameter Bedeutung
   
handle Kennung der Workstation
pstatus Status der Tastatur als Bitvektor:
Shift-rechts = 0x0001
Shift-links = 0x0002
Control = 0x0004
Alternate = 0x0008


In GEM-Programmen sollten die AES Event-Funktionen verwendet werden, um nur die für die eigene Applikation bestimmten Informationen über den Tastaturstatus zu erhalten.

Hinweis: Die Eingabefunktionen des VDI arbeiten nur auf der physikalischen Workstation, die im Normalfall von den AES benutzt wird. Deshalb sollte man besser auf graf_mkstate oder die Eventfunktionen zurückgreifen.
Ergebnis: Die Funktion liefert kein Ergebnis.
Verfügbar: Supported by all Atari computers.
Gruppe: Eingabefunktionen
Querverweis: Binding   evnt_button

7.7.12 Bindings für vq_key_s

C: void vq_key_s ( int16_t handle, int16_t *pstatus );
Umsetzung:
void vq_key_s (int16_t handle, int16_t *pstatus)
{
   contrl[0] = 128;
   contrl[1] = 0;
   contrl[3] = 0;
   contrl[6] = handle;

   vdi ();

   *pstatus = intout[0];
}
GEM-Arrays:

Adresse Feldelement Belegung
contrl contrl[0] 128 # Opcode der Funktion
contrl+2 contrl[1] 0 # Einträge in ptsin
contrl+4 contrl[2] 0 # Einträge in ptsout
contrl+6 contrl[3] 0 # Einträge in intin
contrl+8 contrl[4] 1 # Einträge in intout
contrl+12 contrl[6] handle
intout intout[0] pstatus

7.7.13 vq_mouse

Name: »Sample Mouse Button State« - ermittelt Position und Status der Maustasten.
VDI-Nummer: 124
Deklaration: void vq_mouse ( int16_t handle, int16_t *pstatus, int16_t *x, int16_t *y );
Beschreibung: Die Funktion ermittelt die Position und den Status der Maustasten. Es gilt:
Parameter Bedeutung
   
handle Kennung der Workstation
pstatus Status der Maustasten
Bit-0 = linke Taste
Bit-1 = Taste rechts daneben (etc.)
x x-Koordinate
y y-Koordinate des Grafikcursors


In GEM-Programmen sollte die AES-Funktion graf_mkstate verwendet werden, um nur die für die eigene Applikation bestimmten Informationen über Position und Status der Maustastenstatus zu erhalten.

Hinweis: Die Eingabefunktionen des VDI arbeiten nur auf der physikalischen Workstation, die im Normalfall von den AES benutzt wird. Deshalb sollte man besser auf graf_mkstate oder die Eventfunktionen zurückgreifen.
Ergebnis: Die Funktion liefert kein Ergebnis.
Verfügbar: Supported by all screen drivers.
Gruppe: Eingabefunktionen
Querverweis: Binding   graf_mkstate

7.7.14 Bindings für vq_mouse

C: void vq_mouse ( int16_t handle, int16_t *pstatus, int16_t *x, int16_t *y );
Umsetzung:
void vq_mouse (int16_t handle, int16_t *pstatus, int16_t *x,
               int16_t *y)
{
   contrl[0] = 124;
   contrl[1] = 0;
   contrl[3] = 0;
   contrl[6] = handle;

   vdi ();

   *pstatus = intout[0];
   *x = ptsout[0];
   *y = ptsout[1];
}
GEM-Arrays:

Adresse Feldelement Belegung
contrl contrl[0] 124 # Opcode der Funktion
contrl+2 contrl[1] 0 # Einträge in ptsin
contrl+4 contrl[2] 1 # Einträge in ptsout
contrl+6 contrl[3] 0 # Einträge in intin
contrl+8 contrl[4] 1 # Einträge in intout
contrl+12 contrl[6] handle
intout intout[0] pstatus
ptsout ptsout[0] x
ptsout+2 ptsout[1] y

7.7.15 vrq_choice

Name: »Input Choice, Request Mode« - liefert den Status der Funktionstasten, wenn eine gedrückt wurde.
VDI-Nummer: 30
Deklaration: void vrq_choice ( int16_t handle, int16_t ch_in, int16_t *ch_out );
Beschreibung: Die Funktion ermittelt die Betätigung einer Auswahltaste (z.B. Funktionstaste). Es gilt:
Parameter Bedeutung
   
handle Kennung der Workstation
ch_in initialisierende Auswahltaste
ch_out ausgewählte Taste bzw. Codenummer


Die Anzahl der Funktionstasten ist abhängig vom jeweiligen Gerät. Falls eine andere Taste gedrückt wird, wird die entsprechende Codenummer zurückgeliefert.
Ergebnis: Die Funktion liefert kein Ergebnis.
Verfügbar: Die Funktion ist zwar im ROM implementiert, scheint aber in keiner Weise zu funktionieren. Die Funktion wird nicht von allen Gerätetreibern unterstützt.

Die Eingabefunktionen des VDI arbeiten nur auf der physikalischen Workstation, die im Normalfall von den AES benutzt wird.
Gruppe: Eingabefunktionen
Querverweis: Binding   vsm_choice   vsin_mode

7.7.16 Bindings für vrq_choice

C: void vrq_choice ( int16_t handle, int16_t ch_in, int16_t *ch_out );
Umsetzung:
void vrq_choice (int16_t handle, int16_t ch_in, int16_t *ch_out)
{
   intin[0] = ch_in;

   contrl[0] = 30;
   contrl[1] = 0;
   contrl[3] = 1;
   contrl[6] = handle;

   vdi ();

   *ch_out = intout[0];
}
GEM-Arrays:

Adresse Feldelement Belegung
contrl contrl[0] 30 # Opcode der Funktion
contrl+2 contrl[1] 0 # Einträge in ptsin
contrl+4 contrl[2] 0 # Einträge in ptsout
contrl+6 contrl[3] 1 # Einträge in intin
contrl+8 contrl[4] 1 # Einträge in intout
contrl+12 contrl[6] handle
intin intin[0] ch_in
intout intout[0] ch_out

7.7.17 vrq_locator

Name: »Input Locator, Request Mode« - ermittel die Mausposition, wenn eine Taste gedrückt wurde.
VDI-Nummer: 28
Deklaration: void vrq_locator ( int16_t handle, int16_t x, int16_t y, int16_t *xout, int16_t *yout, int16_t *term );
Beschreibung: Die Funktion ermittelt bzw. setzt die Position des Grafik-Cursors. Es gilt:
Parameter Bedeutung
   
handle Kennung der Workstation
x x-Koordinate
y y-Koordinate des Grafikcursors
xout x-Koordinate
yout y-Koordinate des Grafikcursors bei der Rückgabe
term im Low-Byte wird der Code der Abbruch-Taste eingetragen. Dies ist normalerweise der ASCII-Code. Spezielle Werte wie z.B. die Maustasten erhalten jedoch Werte ab 32 und können so nicht direkt von Tasten der Tastatur unterschieden werden.


Das Ergebnis erhält der Benutzer erst, wenn eine Taste gedrückt wird. Der Grafikcursor wird stets an der angegebenen Position in der aktuellen Form auf dem Bildschirm sichtbar. Zu beachten ist, daß jede beliebige Taste (also auch die Maustasten) gedrückt werden darf.

Normalerweise erfolgt eine Bewegung des Grafikcursors in großen Schritten, wenn die Cursortasten gedrückt werden, bzw. in kleinen Schritten, wenn diese in Verbindung mit der Shift-Taste gedrückt werden. Auf dem Atari wird jedoch zusätzlich die Alternate-Taste benötigt.
Ergebnis: Die Funktion liefert kein Ergebnis.
Verfügbar: Die Funktion wird nicht von allen Gerätetreibern unterstützt. Die Eingabefunktionen des VDI arbeiten nur auf der physikalischen Workstation, die im Normalfall von den AES benutzt wird.
Gruppe: Eingabefunktionen
Querverweis: Binding   vsm_locator   vsin_mode

7.7.18 Bindings für vrq_locator

C: void vrq_locator ( int16_t handle, int16_t x, int16_t y, int16_t *xout, int16_t *yout, int16_t *term );
Umsetzung:
void vrq_locator (int16_t handle, int16_t x, int16_t y,
                  int16_t *xout, int16_t *yout, int16_t *term)
{
   ptsin[0] = x;
   ptsin[1] = y;

   contrl[0] = 28;
   contrl[1] = 1;
   contrl[3] = 0;
   contrl[6] = handle;

   vdi ();

   *xout = ptsout[0];
   *yout = ptsout[1];
   *term = intout[0];
}
GEM-Arrays:

Adresse Feldelement Belegung
contrl contrl[0] 28 # Opcode der Funktion
contrl+2 contrl[1] 1 # Einträge in ptsin
contrl+4 contrl[2] 1 # Einträge in ptsout
contrl+6 contrl[3] 0 # Einträge in intin
contrl+8 contrl[4] 1 # Einträge in intout
contrl+12 contrl[6] handle
ptsin ptsin[0] x
ptsin+2 ptsin[1] y
intout intout[0] term
ptsout ptsout[0] xout
ptsout+2 ptsout[1] yout

7.7.19 vrq_string

Name: »Input String, Request Mode« - liest einen String im REQUEST-Modus ein.
VDI-Nummer: 31
Deklaration: void vrq_string ( int16_t handle, int16_t max_length, int16_t echo_mode, int16_t *echo_xy, int8_t *string );
Beschreibung: Die Funktion liest einen String von der Tastatur ein, wobei optional ein Echo auf dem Bildschirm erfolgen kann. Es gilt:
Parameter Bedeutung
   
handle Kennung der Workstation
max_length maximale Länge des Strings
echo_mode Modus
0 = kein Echo
1 = Echo benutzen
echo_xy[0] x-Koordinate
echo_xy[1] y-Koordinate für den Startpunkt der Echoausgabe
string Adresse der Zeichenkette


Die Echoausgabe ist nicht auf allen Geräten verfübar; im Falle eines Echos werden die Text-Attribute jedoch berücksichtigt.

Ist max_length negativ, so wird der Absolutbetrag als Länge betrachtet, und statt der ASCII-Codes werden Scan-Codes übergeben.

Hinweis: Die Eingabefunktionen des VDI arbeiten nur auf der physikalischen Workstation, die im Normalfall von den AES benutzt wird.
Ergebnis: Die Funktion liefert kein Ergebnis.
Verfügbar: This call is not guaranteed to be available with any driver and its use should therefore be restricted.
Gruppe: Eingabefunktionen
Querverweis: Binding   vswr_mode   vs_color   vst_alignment   vst_height   vst_point   vst_rotation   vst_font   vst_color   vst_effects   vsm_string

7.7.20 Bindings für vrq_string

C: void vrq_string ( int16_t handle, int16_t max_length, int16_t echo_mode, int16_t *echo_xy, int8_t *string );
Umsetzung:
void vrq_string (int16_t handle, int16_t max_length,
                 int16_t echo_mode, int16_t *echo_xy,
                 int8_t *string)
{
   int16_t tmp;

   intin[0] = max_length;
   intin[1] = echo_mode;
   ptsin[0..1] = echo_xy[0..1];

   contrl[0] = 31;
   contrl[1] = 1;
   contrl[3] = 2;
   contrl[6] = handle;

   vdi ();

   for (tmp = 0; tmp < contrl[4]; tmp++)
      *string++ = intout[tmp];

   *string = 0;
}
GEM-Arrays:

Adresse Feldelement Belegung
contrl contrl[0] 31 # Opcode der Funktion
contrl+2 contrl[1] 1 # Einträge in ptsin
contrl+4 contrl[2] 0 # Einträge in ptsout
contrl+6 contrl[3] 2 # Einträge in intin
contrl+8 contrl[4] n # Einträge in intout
contrl+12 contrl[6] handle
intin intin[0] max_length
intin+2 intin[1] echo_mode
ptsin ptsin[0..1] echo_xy[0..1]
intout intout[0..n-1] string[0..n-1]

7.7.21 vrq_valuator

Name: »Input Valuator, Request Mode« - stellt Wertveränderungen im REQUEST-Modus fest.
VDI-Nummer: 29
Deklaration: void vrq_valuator ( int16_t handle, int16_t valuator_in, int16_t *valuator_out, int16_t *terminator );
Beschreibung: Die Funktion ermittelt eine Wertveränderung, die sich aus verschiedenen Tastenbetätigungen ergibt. Es gilt:
Parameter Bedeutung
   
handle Kennung der Workstation
valuator_in Anfangswert
valuator_out Ausgabewert
terminator betätigte Taste


Es werden immer Werte zwischen 1 und 100 zurückgegeben. Typische Tasten für Wertveränderung sind Cursor-hoch bzw. Cursor-runter. Hier erhält man folgende Wertveränderung zum jeweils aktuellen Wert:

Tastendruck Wert
Cursor hoch + 10
Cursor runter - 10
Shift + Cursor hoch + 01
Shift + Cursor runter - 01
Ergebnis: Die Funktion liefert kein Ergebnis.
Verfügbar: Die Funktion wird nicht von allen Gerätetreibern (auch nicht dem im ROM) unterstützt. Die Eingabefunktionen des VDI arbeiten nur auf der physikalischen Workstation, die im Normalfall von den AES benutzt wird.
Gruppe: Eingabefunktionen
Querverweis: Binding   vsm_valuator   vsin_mode

7.7.22 Bindings für vrq_valuator

C: void vrq_valuator ( int16_t handle, int16_t valuator_in, int16_t *valuator_out, int16_t *terminator );
Umsetzung:
void vrq_valuator (int16_t handle, int16_t valuator_in,
                   int16_t *valuator_out, int16_t *terminator)
{
   intin[0] = valuator_in;

   contrl[0] = 29;
   contrl[1] = 0;
   contrl[3] = 1;
   contrl[6] = handle;

   vdi ();

   *valuator_out = intout[0];
   *terminator   = intout[1];
}
GEM-Arrays:

Adresse Feldelement Belegung
contrl contrl[0] 29 # Opcode der Funktion
contrl+2 contrl[1] 0 # Einträge in ptsin
contrl+4 contrl[2] 0 # Einträge in ptsout
contrl+6 contrl[3] 1 # Einträge in intin
contrl+8 contrl[4] 2 # Einträge in intout
contrl+12 contrl[6] handle
intin intin[0] valuator_in
intout intout[0] valuator_out
intout+2 intout[1] terminator

7.7.23 vsc_form

Name: »Set Mouse Form« - setzt die Mauszeigerform.
VDI-Nummer: 111
Deklaration: void vsc_form ( int16_t handle, int16_t *pcur_form );
Beschreibung: Die Funktion erlaubt die Definition der Form des Mauszeigers. Es gilt:
Parameter Bedeutung
   
handle Kennung der Workstation
pcur_form[0] x-Koordinate
pcur_form[1] y-Koordinate des Hot-Spot
pcur_form[2] reserviert, sollte 1 sein
pcur_form[3] Farbindex der Hintergrundmaske
pcur_form[4] Farbindex der Vordergrundmaske
pcur_form[05..20] Definition der Hintergrundmaske
pcur_form[21..36] Definition der Vordergrundmaske


Jede Maske wird als Feld mit 16 Wörtern zu je 16 Bit festgelegt. Bit-15 des ersten Wortes ist hierbei die obere linke Ecke der Maske, und Bit 0 von Wort 16 ist ist die rechte untere Ecke.

Unter dem Hot-Spot versteht man die exakte Position des Grafikcursors. Bei einem Pfeil würde dies der Pfeilspitze, bei einem Kreuz der Mitte entsprechen. Die Koordinaten werden relativ zur oberen linken Ecke der Maske angegeben.

Zum Setzen der Mausform sollte in GEM-Programmen unbedingt die AES-Funktion graf_mouse verwendet werden. Andernfalls wird die Mausform-Verwaltung des AES nachhaltig verwirrt.

Hinweis: Die Eingabefunktionen des VDI arbeiten nur auf der physikalischen Workstation, die im Normalfall von den AES benutzt wird. Deshalb sollte man besser auf graf_mouse zurückgreifen.

Unter NVDI ist es auch möglich, die aktuelle Form der Maus zu ermitteln (vgl. Binding).
Ergebnis: Die Funktion liefert kein Ergebnis.
Verfügbar: Supported by all screen drivers.
Gruppe: Eingabefunktionen
Querverweis: Binding   graf_mouse   MFORM

7.7.24 Bindings für vsc_form

C: void vsc_form ( int16_t handle, int16_t *pcur_form );
Umsetzung:
void vsc_form (int16_t handle, int16_t *pcur_form)
{
   intin[0..36] = pcur_form[0..36];

   contrl[0] = 111;
   contrl[1] = 0;
   contrl[3] = 37;
   contrl[6] = handle;

   vdi ();
}
GEM-Arrays:

Adresse Feldelement Belegung
contrl contrl[0] 111 # Opcode der Funktion
contrl+2 contrl[1] 0 # Einträge in ptsin
contrl+4 contrl[2] 0 # Einträge in ptsout
contrl+6 contrl[3] 37 # Einträge in intin
contrl+8 contrl[4] 0 # Einträge in intout
contrl+12 contrl[6] handle
intin intin[0..36] pcur_form[0..36]


Hinweis: Unter NVDI ist auch möglich, die aktuelle Mausform zu ermitteln. Die dazu nötigen Belegungen der Ein-/Ausgabefelder lauten wie folgt:
contrl[0] = 111;
contrl[1] = 0;
contrl[2] = 0;
contrl[3] = 0;
contrl[4] = 37;
contrl[6] = handle;
intout[0..36] = pcur_form[0..36];

7.7.25 vsin_mode

Name: »Set Input Mode« - setzt den Eingabemodus
VDI-Nummer: 33
Deklaration: int16_t vsin_mode ( int16_t handle, int16_t dev_type, int16_t mode );
Beschreibung: Die Funktion setzt den Eingabemodus auf Request oder Sample. Es gilt:
Parameter Bedeutung
   
handle Kennung der Workstation
dev_type Art des Eingabegeräts
1 = Positionseingabe (Maus)
2 = wertändernde Einheiten (Cursor)
3 = auswählende Einheiten (Funktionstasten)
4 = alphanumerische Geräte (Tastatur)
mode gewünschter Modus
1 = Request
2 = Sample


Im Request-Modus wartet das Eingabegerät auf eine Eingabe, im Sample-Modus wird lediglich der Zustand oder die Position der Eingabeeinheit zurückgegeben.

Hinweis: Die Eingabefunktionen des VDI arbeiten nur auf der physikalischen Workstation, die im Normalfall von den AES benutzt wird.
Ergebnis: Die Funktion liefert den ausgewählten Eingabemodus zurück.
Verfügbar: Supported in ROM by all Atari computers.
Gruppe: Eingabefunktionen
Querverweis: Binding

7.7.26 Bindings für vsin_mode

C: int16_t vsin_mode ( int16_t handle, int16_t dev_type, int16_t mode );
Umsetzung:
int16_t vsin_mode (int16_t handle, int16_t dev_type, int16_t mode)
{
   intin[0] = dev_type;
   intin[1] = mode;

   contrl[0] = 33;
   contrl[1] = 2;
   contrl[3] = 2;
   contrl[6] = handle;

   vdi ();

   /* Vorsicht: Nicht alle Bindings liefern einen
      Return-Wert !!! */

   return ( intout[0] );
}
GEM-Arrays:

Adresse Feldelement Belegung
contrl contrl[0] 33 # Opcode der Funktion
contrl+2 contrl[1] 0 # Einträge in ptsin
contrl+4 contrl[2] 0 # Einträge in ptsout
contrl+6 contrl[3] 2 # Einträge in intin
contrl+8 contrl[4] 1 # Einträge in intout
contrl+12 contrl[6] handle
intin intin[0] dev_type
intin+2 intin[1] mode
intout intout[0] Return-Wert

7.7.27 vsm_choice

Name: »Input choice, Sample Mode« - ermittelt welche Funktionstaste zuletzt gedrückt wurde.
VDI-Nummer: 30
Deklaration: int16_t vsm_choice ( int16_t handle, int16_t *choice );
Beschreibung: Die Funktion ermittelt die Nummer der zuletzt betätigten Auswahltaste. Es gilt:
Parameter Bedeutung
   
handle Kennung der Workstation
choice betätigte Auswahltaste oder 0, falls keine solche gedrückt worden ist


Die Anzahl der Funktionstasten ist vom jeweiligen Gerät abhängig. Falls eine andere Taste betätigt worden ist, wird die zugehörige Codenummer zurückgeliefert.
Ergebnis: Die Funktion liefert den Auswahlstatus (0 = keine Taste betätigt, 1 = Taste betätigt) zurück.
Verfügbar: Die Funktion ist zwar im ROM implementiert, scheint aber nicht richtig zu funktionieren. Die Funktion wird nicht von allen Gerätetreibern unterstützt. Die Eingabefunktionen des VDI arbeiten nur auf der physikalischen Workstation, die im Normalfall von den AES benutzt wird.
Gruppe: Eingabefunktionen
Querverweis: Binding   vrq_choice   vsin_mode

7.7.28 Bindings für vsm_choice

C: int16_t vsm_choice ( int16_t handle, int16_t *choice );
Umsetzung:
int16_t vsm_choice ( int16_t handle, int16_t *choice )
{
   contrl[0] = 30;
   contrl[1] = 0;
   contrl[3] = 0;
   contrl[6] = handle;

   vdi ();

   *choice = intout[0];
   return ( contrl[4] );
}
GEM-Arrays:

Adresse Feldelement Belegung
contrl contrl[0] 30 # Opcode der Funktion
contrl+2 contrl[1] 0 # Einträge in ptsin
contrl+4 contrl[2] 0 # Einträge in ptsout
contrl+6 contrl[3] 0 # Einträge in intin
contrl+8 contrl[4] status # Einträge in intout
contrl+12 contrl[6] handle
intout intout[0] choice

7.7.29 vsm_locator

Name: »Input Locator, Sample Mode« - bestimmt die Position des Grafikcursors.
VDI-Nummer: 28
Deklaration: int16_t vsm_locator ( int16_t handle, int16_t x, int16_t y, int16_t *xout, int16_t *yout, int16_t *term );
Beschreibung: Die Funktion setzt bzw. ermittelt die Position des Grafikcursors. Es gilt:
Position Bedeutung
   
handle Kennung der Workstation
x x-Koordinate
y y-Koordinate des Grafikcursors
xout x-Koordinate
yout y-Koordinate des Grafikcursors bei Rückgabe
term im Low-Byte wird der Code der Abbruch-Taste eingegeben. Spezielle Tasten (Maustasten etc.) erhalten Werte ab 32 aufwärts, und können daher nicht direkt von Tasten der Tastatur unterschieden werden.


Der Grafikcursor wird durch diese Funktion nicht sichtbar; Tastenbetätigungen oder Cursorbewegungen werden nur dann gemeldet, wenn diese tatsächlich erfolgt sind.

Hinweis: Die Eingabefunktionen des VDI arbeiten nur auf der physikalischen Workstation, die im Normalfall von den AES benutzt wird.
Ergebnis: Die Funktion liefert kodiert Informationen darüber, ob sich die Position verändert hat (Bit 0 gesetzt) und ob eine Taste gedrückt wurde (Bit 1 gesetzt).
Verfügbar: Die Funktion wird nicht von allen Gerätetreibern unterstützt.
Gruppe: Eingabefunktionen
Querverweis: Binding   vrq_locator   vsin_mode

7.7.30 Bindings für vsm_locator

C: int16_t vsm_locator ( int16_t handle, int16_t x, int16_t y, int16_t *xout, int16_t *yout, int16_t *term );
Umsetzung:
int16_t vsm_locator (int16_t handle, int16_t x, int16_t y,
                     int16_t *xout, int16_t *yout,
                     int16_t *term)
{
   ptsin[0] = x;
   ptsin[1] = y;

   contrl[0] = 28;
   contrl[1] = 1;
   contrl[3] = 0;
   contrl[6] = handle;

   vdi ();

   *xout = ptsout[0];
   *yout = ptsout[1];
   *term = intout[0];

   return ( (contrl[4] << 1) | (contrl[2]) );
}
GEM-Arrays:

Adresse Feldelement Belegung
contrl contrl[0] 28 # Opcode der Funktion
contrl+2 contrl[1] 1 # Einträge in ptsin
contrl+4 contrl[2] 0 oder 1 # Einträge in ptsout
contrl+6 contrl[3] 0 # Einträge in intin
contrl+8 contrl[4] 0 oder 1 # Einträge in intout
contrl+12 contrl[6] handle
ptsin ptsin[0] x
ptsin+2 ptsin[1] y
intout intout[0] term
ptsout ptsout[0] xout
ptsout+2 ptsout[1] yout

7.7.31 vsm_string

Name: »Input String, Sample Mode« - liest einen String im SAMPLE-Modus ein.
VDI-Nummer: 31
Deklaration: int16_t vsm_string ( int16_t handle, int16_t max_length, int16_t echo_mode, int16_t *echo_xy, int8_t *string );
Beschreibung: Die Funktion gibt einen String von der Tastatur zurück. Es gilt:
Parameter Bedeutung
   
handle Kennung der Workstation
max_length maximale Länge des Strings
echo_mode Modus
0 = kein Echo
1 = Echo benutzen
echo_xy[0] x-Koordinate
echo_xy[1] y-Koordinate für den Startpunkt der Echoausgabe
string Adresse der Zeichenkette


Die Echoausgabe ist nicht auf allen Geräten verfübar; im Falle eines Echos werden die Text-Attribute jedoch berücksichtigt.

Ist max_length negativ, so wird der Absolut-Betrag als Länge benutzt und statt der ASCII-Codes werden Scan-Codes übergeben.

Die Eingabe der Zeichenkette wird abgebrochen durch:
  • Return
  • erreichen der maximalen Eingabelänge
  • nicht verfügbare Datenwerte


Falls die Zeichenkette grundsätzlich mit Return abgeschlossen werden soll, ist der Request-Modus per vrq_string zu wählen.

Hinweis: Die Eingabefunktionen des VDI arbeiten nur auf der physikalischen Workstation, die im Normalfall von den AES benutzt wird.
Ergebnis: Die Funktion liefert entweder die Anzahl der gelesen Zeichen oder Null, falls die Eingabe durch eine ungültige Taste abgebrochen wurde. Der eingegebene Text steht in string.
Verfügbar: Die Funktion wird nicht von allen Gerätetreibern unterstützt.
Gruppe: Eingabefunktionen
Querverweis: Binding   vswr_mode   vs_color   vst_alignment   vst_height   vst_point   vst_rotation   vst_font   vst_color   vst_effects   vrq_string

7.7.32 Bindings für vsm_string

C: int16_t vsm_string ( int16_t handle, int16_t max_length, int16_t echo_mode, int16_t *echo_xy, int8_t *string );
Umsetzung:
int16_t vsm_string (int16_t handle, int16_t max_length,
                    int16_t echo_mode, int16_t *echo_xy,
                    int8_t *string)
{
   int16_t tmp;

   intin[0] = max_length;
   intin[1] = echo_mode;
   ptsin[0..1] = echo_xy[0..1];

   contrl[0] = 31;
   contrl[1] = 1;
   contrl[3] = 2;
   contrl[6] = handle;

   vdi ();

   for (tmp = 0; tmp < contrl[4]; tmp++)
      *string++ = intout[tmp];

   *string = 0;
   return ( contrl[4] );
}
GEM-Arrays:

Adresse Feldelement Belegung
contrl contrl[0] 31 # Opcode der Funktion
contrl+2 contrl[1] 1 # Einträge in ptsin
contrl+4 contrl[2] 0 # Einträge in ptsout
contrl+6 contrl[3] 2 # Einträge in intin
contrl+8 contrl[4] max_length # Einträge in intout
contrl+12 contrl[6] handle
intin intin[0] max_length
intin+2 intin[1] echo_mode
ptsin ptsin[0..1] echo_xy[0..1]
intout intout[0..n-1] string[0..n-1]

7.7.33 vsm_valuator

Name: »Input Valuator, Sample Mode« - stellt Wertveränderungen im SAMPLE-Modus fest.
VDI-Nummer: 29
Deklaration: void vsm_valuator ( int16_t handle, int16_t val_in, int16_t *val_out, int16_t *term, int16_t *status );
Beschreibung: Die Funktion ermittelt Wertveränderungen im Sample-Modus. Es gilt:
Parameter Bedeutung
   
handle Kennung der Workstation
val_in Anfangswert
val_out Ausgabewert
term ASCII-Code der gedrückten Taste
status Auswertung
0 = keine Veränderung
1 = Wert verändert
2 = Taste betätigt


Es werden Werte zwischen 1 und 100 zurückgegeben, falls ein entsprechendes Ereignis aufgetreten ist; anderenfalls wird kein Wert zurückgeliefert.

Hinweis: Die Funktion wird nicht von allen Gerätetreibern (auch nicht dem im ROM) unterstützt. Die Eingabefunktionen des VDI arbeiten nur auf der physikalischen Workstation, die im Normalfall von den AES benutzt wird.
Ergebnis: Die Funktion liefert kein Ergebnis.
Verfügbar: Die Funktion wird nicht von allen Gerätetreibern unterstützt.
Gruppe: Eingabefunktionen
Querverweis: Binding   vrq_valuator   vsin_mode

7.7.34 Bindings für vsm_valuator

C: void vsm_valuator ( int16_t handle, int16_t val_in, int16_t *val_out, int16_t *term, int16_t *status );
Umsetzung:
void vsm_valuator (int16_t handle, int16_t val_in,
                   int16_t *val_out, int16_t *term,
                   int16_t *status)
{
   intin[0] = val_in;

   contrl[0] = 29;
   contrl[1] = 0;
   contrl[3] = 1;
   contrl[6] = handle;

   vdi ();

   *val_out = intout[0];
   *term    = intout[1];
   *status  = contrl[4];
}
GEM-Arrays:

Adresse Feldelement Belegung
contrl contrl[0] 29 # Opcode der Funktion
contrl+2 contrl[1] 0 # Einträge in ptsin
contrl+4 contrl[2] 0 # Einträge in ptsout
contrl+6 contrl[3] 1 # Einträge in intin
contrl+8 contrl[4] status # Einträge in intout
contrl+12 contrl[6] handle
intin intin[0] val_in
intout intout[0] val_out
intout+2 intout[1] term

7.7.35 v_hide_c

Name: »Hide Cursor« - schaltet den Grafikcursor aus.
VDI-Nummer: 123
Deklaration: void v_hide_c ( int16_t handle );
Beschreibung: Die Funktion schaltet den Grafikcursor auf dem Gerät mit der Kennung handle aus.

Zum Ein-/Ausschalten der Maus sollte in GEM-Programmen unbedingt die AES-Funktion graf_mouse verwendet werden.

Hinweis: Die Eingabefunktionen des VDI arbeiten nur auf der physikalischen Workstation, die im Normalfall von den AES benutzt wird. Deshalb sollte man besser auf graf_mouse zurückgreifen.
Ergebnis: Die Funktion liefert kein Ergebnis.
Verfügbar: Supported by all screen drivers.
Gruppe: Eingabefunktionen
Querverweis: Binding   v_show_c

7.7.36 Bindings für v_hide_c

C: void v_hide_c ( int16_t handle );
Umsetzung:
void v_hide_c (int16_t handle)
{
   contrl[0] = 123;
   contrl[1] = 0;
   contrl[3] = 0;
   contrl[6] = handle;

   vdi ();
}
GEM-Arrays:

Adresse Feldelement Belegung
contrl contrl[0] 123 # Opcode der Funktion
contrl+2 contrl[1] 0 # Einträge in ptsin
contrl+4 contrl[2] 0 # Einträge in ptsout
contrl+6 contrl[3] 0 # Einträge in intin
contrl+8 contrl[4] 0 # Einträge in intout
contrl+12 contrl[6] handle

7.7.37 v_show_c

Name: »Show Cursor« - schaltet den Grafikcursor ein.
VDI-Nummer: 122
Deklaration: void v_show_c ( int16_t handle, int16_t reset );
Beschreibung: Die Funktion zeigt den Grafikcursor, bzw. storniert einen Aufruf der Funktion v_hide_c. Es gilt:
Parameter Bedeutung
   
handle Kennung der Workstation
reset Flag
  0 = Anzahl der Hide-Cursor-Aufrufe ignorieren
<>0 = normale Anwendung, d.h. ein Hide-Cursor-Aufruf wird storniert


Zum Ein-/Ausschalten der Maus sollte in GEM Programmen unbedingt die AES-Funktion graf_mouse verwendet werden.

Hinweis: Die Eingabefunktionen des VDI arbeiten nur auf der physikalischen Workstation, die im Normalfall von den AES benutzt wird. Deshalb sollte man besser auf graf_mouse zurückgreifen.
Ergebnis: Die Funktion liefert kein Ergebnis.
Verfügbar: Supported by all screen drivers.
Gruppe: Eingabefunktionen
Querverweis: Binding   v_hide_c   graf_mouse

7.7.38 Bindings für v_show_c

C: void v_show_c ( int16_t handle, int16_t reset );
Umsetzung:
void v_show_c (int16_t handle, int16_t reset)
{
   intin[0] = reset;

   contrl[0] = 122;
   contrl[1] = 0;
   contrl[3] = 1;
   contrl[6] = handle;

   vdi ();
}
GEM-Arrays:

Adresse Feldelement Belegung
contrl contrl[0] 122 # Opcode der Funktion
contrl+2 contrl[1] 0 # Einträge in ptsin
contrl+4 contrl[2] 0 # Einträge in ptsout
contrl+6 contrl[3] 1 # Einträge in intin
contrl+8 contrl[4] 0 # Einträge in intout
contrl+12 contrl[6] handle
intin intin[0] reset

HomeVDIAuskunftsfunktionenEscapefunktionen