ugBASIC 1.18
An isomorphic BASIC language compiler for retrocomputers
Loading...
Searching...
No Matches
scancode.c
Go to the documentation of this file.
1/*****************************************************************************
2 * ugBASIC - an isomorphic BASIC language compiler for retrocomputers *
3 *****************************************************************************
4 * Copyright 2021-2026 Marco Spedaletti (asimov@mclink.it)
5 *
6 * Licensed under the Apache License, Version 2.0 (the "License");
7 * you may not use this file except in compliance with the License.
8 * You may obtain a copy of the License at
9 *
10 * http://www.apache.org/licenses/LICENSE-2.0
11 *
12 * Unless required by applicable law or agreed to in writing, software
13 * distributed under the License is distributed on an "AS IS" BASIS,
14 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15 * See the License for the specific language governing permissions and
16 * limitations under the License.
17 *----------------------------------------------------------------------------
18 * Concesso in licenza secondo i termini della Licenza Apache, versione 2.0
19 * (la "Licenza"); è proibito usare questo file se non in conformità alla
20 * Licenza. Una copia della Licenza è disponibile all'indirizzo:
21 *
22 * http://www.apache.org/licenses/LICENSE-2.0
23 *
24 * Se non richiesto dalla legislazione vigente o concordato per iscritto,
25 * il software distribuito nei termini della Licenza è distribuito
26 * "COSÌ COM'È", SENZA GARANZIE O CONDIZIONI DI ALCUN TIPO, esplicite o
27 * implicite. Consultare la Licenza per il testo specifico che regola le
28 * autorizzazioni e le limitazioni previste dalla medesima.
29 ****************************************************************************/
30
31/****************************************************************************
32 * INCLUDE SECTION
33 ****************************************************************************/
34
35#include "../../../ugbc.h"
36
37/****************************************************************************
38 * CODE SECTION
39 ****************************************************************************/
40
41#if defined(__c128__) || defined(__c64__) || defined(__c64reu__)
42
43extern char DATATYPE_AS_STRING[][16];
44
45/* <usermanual>
46@keyword SCANCODE
47
48@english
49
50The ''SCANCODE' (or ''SCAN CODE'') capture a single character typed by the user
51without having to press enter. In other words, the program is "listening"
52to the keyboard and, as soon as a key is pressed, "captures" it and
53stores it in a variable.
54
55Like the ''INKEY'' command, it reads the character as soon as it is
56pressed. If no key has been pressed, it returns NONE. The captured
57character is stored in a ''BYTE'' variable, and it is in a target
58dependent encoding. You must use the various constants to compare
59the value returned with the key wanted.
60
61It is used to create interactive games where the user can control the
62character or objects by pressing specific keys, to create text menus
63where the user can select an option by pressing a letter or number
64or to create programs that respond to external events, such as
65pressing a key to start or stop an action.
66
67@italian
68
69''SCANCODE'' (o ''SCAN CODE'') cattura un singolo carattere
70digitato dall'utente senza dover premere Invio. In altre parole,
71il programma "ascolta" la tastiera e, non appena viene premuto un tasto,
72lo "cattura" e lo memorizza in una variabile.
73
74Come il comando ''INKEY'', legge il carattere non appena viene premuto.
75Se non è stato premuto alcun tasto, restituisce NONE. Il carattere
76catturato viene memorizzato in una variabile ''BYTE'' ed è in una codifica
77dipendente dal target. È necessario utilizzare le varie costanti per
78confrontare il valore restituito con il tasto desiderato.
79
80Viene utilizzato per creare giochi interattivi in ​​cui l'utente può
81controllare il personaggio o gli oggetti premendo tasti specifici,
82per creare menu di testo in cui l'utente può selezionare un'opzione
83premendo una lettera o un numero, o per creare programmi che rispondono
84a eventi esterni, come la pressione di un tasto per avviare o interrompere
85un'azione.
86
87@syntax = SCANCODE
88
89@example IF SCANCODE = KEY A THEN
90@example PRINT "A has been pressed!"
91@example ENDIF
92
93@seeAlso SCANCODE
94
95</usermanual> */
96
97Variable * scancode( Environment * _environment ) {
98
99 Variable * result = variable_temporary( _environment, VT_BYTE, "(result of SCANCODE)");
100
101 cia_scancode( _environment, result->realName );
102
103 return result;
104
105}
106
107#endif
Variable * variable_temporary(Environment *_environment, VariableType _type, char *_meaning)
Define a temporary variable.
Variable * scancode(Environment *_environment)
Definition scancode.c:43
void cia_scancode(Environment *_environment, char *_result)
Definition cia.c:155
char * realName
Definition ugbc.h:982
struct _Variable Variable
Structure of a single variable.
struct _Environment Environment
Structure of compilation environment.
@ VT_BYTE
Definition ugbc.h:450
char DATATYPE_AS_STRING[][16]