ugBASIC 1.18
An isomorphic BASIC language compiler for retrocomputers
Loading...
Searching...
No Matches
new_image.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
49/* <usermanual>
50@keyword NEW IMAGE
51
52@english
53
54The ''NEW IMAGE'' command allows you to define a memory area where you can
55store an image coming from the screen (with the ''GET IMAGE'' command), or
56from another graphic resource.
57
58The area must be defined by (constant) width and (constant) height, expressed in pixels. The actual size,
59in terms of bytes of RAM, will depend on the graphics mode selected at the time. If it is not
60possible to define an image in that screen mode, a specific error will be issued.
61
62Generally speaking, it is not advisable to do a ''PUT IMAGE'' of a ''NEW IMAGE'' that has not
63been initialized, at least once, by a ''GET IMAGE''. Infact, the ''PUT IMAGE'' tries to draw
64the contents of an uninitialized frame (i.e.: all zeros), including the palette. So it
65could draw everything empty in terms of bitmap, and then overwrites the entire palette
66with zeros, giving rise to unexpected result. So you have to use a preliminary ''GET IMAGE''
67on any ''NEW IMAGE''.
68
69If you want to use the ''PUT IMAGE'' without
70side effects on palette, you can opt for the ''PUT BITMAP''. In this case, ugBASIC
71will draw only the component related to the pixels, leaving the palette component
72unchanged.
73
74@italian
75
76Il comando ''NEW IMAGE'' consente di definire un'area di memoria in cui è possibile
77memorizzare un'immagine dallo schermo (con il comando ''GET IMAGE'') o da un'altra
78risorsa grafica.
79
80L'area deve essere definita da una larghezza (costante) e un'altezza (costante),
81espresse in pixel. La dimensione effettiva, in termini di byte RAM, dipenderà
82dalla modalità grafica attualmente selezionata. Se non è possibile definire
83un'immagine in quella modalità schermo, verrà emesso un errore specifico.
84
85In generale, non è consigliabile eseguire un ''PUT IMAGE'' di una ''NEW IMAGE''
86che non sia stata inizializzata, almeno una volta, da un ''GET IMAGE''. Infatti,
87il ''PUT IMAGE'' tenta di disegnare il contenuto di un frame non inizializzato
88(ad esempio: tutti zeri), inclusa la palette. Quindi potrebbe disegnare tutto vuoto
89in termini di bitmap e quindi sovrascrivere l'intera palette con zeri, con un
90risultato inaspettato. Quindi devi usare un ''GET IMAGE'' preliminare su qualsiasi
91''NEW IMAGE''.
92
93Se vuoi usare ''PUT IMAGE'' senza effetti collaterali sulla palette, puoi optare
94per ''PUT BITMAP''. In questo caso, ugBASIC disegnerà solo il componente pixel,
95lasciando intatto il componente palette.
96
97@syntax = NEW IMAGE( width, height )
98
99@example background = NEW IMAGE(32,32)
100
101@usedInExample contrib_cube.bas
102@usedInExample contrib_cube2.bas
103@usedInExample images_get_01.bas
104@usedInExample images_get_02.bas
105@usedInExample images_get_03.bas
106
107</usermanual> */
108
109Variable * new_image( Environment * _environment, int _width, int _height, int _mode ) {
110
111 if ( _environment->emptyProcedure ) {
112 Variable * emptyImage = variable_temporary( _environment, VT_IMAGE, "(empty)");
113 return emptyImage;
114 }
115
116 Variable * result = vic2_new_image( _environment, _width, _height, _mode );
117
118 result->usedImage = 1;
119
120 return result;
121
122}
Variable * variable_temporary(Environment *_environment, VariableType _type, char *_meaning)
Define a temporary variable.
Variable * new_image(Environment *_environment, int _width, int _height, int _mode)
Emit code for NEW IMAGE(...).
Definition new_image.c:49
int emptyProcedure
Definition ugbc.h:2932
int usedImage
Definition ugbc.h:1220
struct _Variable Variable
Structure of a single variable.
struct _Environment Environment
Structure of compilation environment.
@ VT_IMAGE
Definition ugbc.h:489
Variable * vic2_new_image(Environment *_environment, int _width, int _height, int _mode)
Definition vic2.c:4100