ugBASIC 1.18
An isomorphic BASIC language compiler for retrocomputers
Loading...
Searching...
No Matches
text_get_pen.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
48/* <usermanual>
49@keyword PEN (function)
50
51@english
52
53The ''PEN$'' command create a special control sequence (string) that define the foreground color of
54the screen. This means that, whenever the string is printed on the screen, the pre-set pen colour
55is automatically assigned to it. The format of the string returned by ''PEN$'' is not specific
56for the target. The parameter ''color'' is represented by a value in the available colors,
57from 0 to maximum (''PEN COLORS'').
58
59@italian
60
61Il comando ''PEN$'' crea una sequenza di controllo speciale (stringa) che definisce il colore di
62sfondo dello schermo. Ciò significa che, ogni volta che la stringa viene stampata sullo schermo,
63le viene automaticamente assegnato il colore della carta preimpostato. Il formato della stringa
64restituita da ''PEN$'' non è specifico per il target. Il parametro ''color'' è rappresentato
65da un valore nei colori disponibili, da 0 al massimo (''PEN COLORS'').
66
67@syntax = PEN$(expression)
68
69@example PRINT PEN$(RED)
70
71@UsedInExample texts_options_02.bas
72
73@seeAlso PEN (instruction)
74@seeAlso PAPER (function)
75
76@target all
77</usermanual> */
78Variable * get_pen( Environment * _environment, char * _color ) {
79
81
82 Variable * result = variable_temporary( _environment, VT_DSTRING, 0 );
83 Variable * address = variable_temporary( _environment, VT_ADDRESS, 0 );
84 Variable * size = variable_temporary( _environment, VT_BYTE, 0 );
85
86 char resultString[MAX_TEMPORARY_STORAGE]; sprintf( resultString, "\x1 " );
87
88 variable_store_string(_environment, result->name, resultString );
89
90 cpu_dswrite( _environment, result->realName );
91 cpu_dsdescriptor( _environment, result->realName, address->realName, size->realName );
92
93 cpu_move_8bit_indirect_with_offset(_environment, color->realName, address->realName, 1 );
94
95 return result;
96
97}
void cpu_dswrite(Environment *_environment, char *_index)
Definition 6309.c:5927
void cpu_move_8bit_indirect_with_offset(Environment *_environment, char *_source, char *_value, int _offset)
Definition 6309.c:5250
void cpu_dsdescriptor(Environment *_environment, char *_index, char *_address, char *_size)
Definition 6309.c:5977
#define COLOR_WHITE
Definition 6847.h:39
Variable * variable_retrieve_or_define(Environment *_environment, char *_name, VariableType _type, int _value)
Variable * variable_store_string(Environment *_environment, char *_destination, char *_value)
Store a string to a variable.
Variable * variable_temporary(Environment *_environment, VariableType _type, char *_meaning)
Define a temporary variable.
int size
Definition _optimizer.c:678
void color(Environment *_environment, int _index, int _shade)
Emit ASM code for instruction COLOR [int], [int].
Definition color.c:59
Variable * get_pen(Environment *_environment, char *_color)
Emit code for the PEN$(...).
char * name
Definition ugbc.h:979
char * realName
Definition ugbc.h:982
#define MAX_TEMPORARY_STORAGE
Definition ugbc.h:563
struct _Variable Variable
Structure of a single variable.
struct _Environment Environment
Structure of compilation environment.
@ VT_BYTE
Definition ugbc.h:450
@ VT_ADDRESS
Definition ugbc.h:465
@ VT_COLOR
Definition ugbc.h:471
@ VT_DSTRING
Definition ugbc.h:483