ugBASIC 1.18
An isomorphic BASIC language compiler for retrocomputers
Loading...
Searching...
No Matches
get_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
41extern char DATATYPE_AS_STRING[][16];
42
53/* <usermanual>
54@keyword GET IMAGE
55
56@english
57
58The purpose of the ''GET IMAGE'' command is to store the contents of the screen
59in a variable. The first syntax is where the programmer provides the coordinates
60of the rectangle to be stored. This syntax will store only the bitmap of the
61image. You need to give the ''G'' option if you want to store color component,
62too.
63
64The second, instead, only requires the point from which to start storing the image,
65whose dimensions are implicitly obtained from the variable. The color component
66is acquired implictly. The ''GET IMAGE'' syntax is the only one that supports
67''ATLAS'' and ''SEQUENCE'' version, so you can acquire a single frame from the screen.
68
69@italian
70
71Lo scopo del comando ''GET IMAGE'' è di memorizzare il contenuto dello schermo in una
72variabile. La prima sintassi è quella in cui il programmatore fornisce le coordinate
73del rettangolo da memorizzare. Questa sintassi memorizzerà solo la bitmap dell'immagine.
74Devi dare l'opzione ''G'' se vuoi memorizzare anche la componente colore.
75
76La seconda, invece, richiede solo il punto da cui iniziare a memorizzare l'immagine,
77le cui dimensioni sono ricavate implicitamente dalla variabile. La componente colore
78è acquisita implicitamente. La sintassi ''GET IMAGE'' è l'unica che supporta la
79versione ''ATLAS'' e ''SEQUENCE'', quindi puoi acquisire un singolo fotogramma
80dallo schermo.
81
82@syntax GET IMAGE var FROM [x], [y]
83@syntax GET (x1,y1) - (x2,y2), var[, G]
84
85@example background = NEW IMAGE(16, 16)
86@example GET IMAGE background FROM 0, 0
87
88@seeAlso GET BITMAP
89
90</usermanual> */
91/* <usermanual>
92@keyword GET BITMAP
93
94@english
95
96The purpose of the ''GET BITMAP'' command is to store the contents of the screen
97in a variable, just the bitmap component so without color component. The syntax
98requires the point from which to start storing the image, whose dimensions are
99implicitly obtained from the variable. This command ssupports ''ATLAS'' and
100''SEQUENCE'' version, so you can acquire a single frame from the screen.
101
102@italian
103
104Lo scopo del comando ''GET BITMAP'' è di memorizzare il contenuto dello schermo
105in una variabile, solo la componente bitmap quindi senza componente colore. La sintassi
106richiede il punto da cui iniziare a memorizzare l'immagine, le cui dimensioni sono
107implicitamente ottenute dalla variabile. Questo comando supporta la versione ''ATLAS'' e
108''SEQUENCE'', quindi è possibile acquisire un singolo fotogramma dallo schermo.
109
110@syntax GET BITMAP var FROM [x], [y]
111
112@example background = NEW IMAGE(16, 16)
113@example GET BITMAP background FROM 0, 0
114
115@seeAlso GET IMAGE
116
117</usermanual> */
118void get_image( Environment * _environment, char * _image, char * _x1, char * _y1, char * _x2, char * _y2, char * _frame, char * _sequence, int _palette ) {
119
120 Variable * image = variable_retrieve( _environment, _image );
121 Variable * x1 = variable_retrieve_or_define( _environment, _x1, VT_POSITION, 0 );
122 Variable * y1 = variable_retrieve_or_define( _environment, _y1, VT_POSITION, 0 );
123
124 if ( _x2 && _y2 ) {
125 get_image_overwrite_size( _environment, _image, _x1, _y1, _x2, _y2 );
126 }
127
128 Variable * frame = NULL;
129 if ( _frame) {
130 frame = variable_retrieve_or_define( _environment, _frame, VT_BYTE, 0 );
131 }
132 Variable * sequence = NULL;
133 if ( _sequence) {
134 sequence = variable_retrieve_or_define( _environment, _sequence, VT_BYTE, 0 );
135 }
136
137 switch( image->type ) {
138 case VT_SEQUENCE:
139 if ( !sequence ) {
140 if ( !frame ) {
141 tms9918_get_image( _environment, image->realName, x1->realName, y1->realName, "", "", image->frameSize, image->frameCount, _palette );
142 } else {
143 tms9918_get_image( _environment, image->realName, x1->realName, y1->realName, frame->realName, "", image->frameSize, image->frameCount, _palette );
144 }
145 } else {
146 if ( !frame ) {
147 tms9918_get_image( _environment, image->realName, x1->realName, y1->realName, "", sequence->realName, image->frameSize, image->frameCount, _palette );
148 } else {
149 tms9918_get_image( _environment, image->realName, x1->realName, y1->realName, frame->realName, sequence->realName, image->frameSize, image->frameCount, _palette );
150 }
151 }
152 break;
153 case VT_IMAGES:
154 if ( !frame ) {
155 tms9918_get_image( _environment, image->realName, x1->realName, y1->realName, "", NULL, image->frameSize, 0, _palette );
156 } else {
157 tms9918_get_image( _environment, image->realName, x1->realName, y1->realName, frame->realName, NULL, image->frameSize, 0, _palette );
158 }
159 break;
160 case VT_IMAGE:
161 case VT_TARRAY:
162 tms9918_get_image( _environment, image->realName, x1->realName, y1->realName, NULL, NULL, 0, 0, _palette );
163 break;
164 default:
166 }
167
168}
Variable * variable_retrieve(Environment *_environment, char *_name)
Variable * variable_retrieve_or_define(Environment *_environment, char *_name, VariableType _type, int _value)
void get_image_overwrite_size(Environment *_environment, char *_image, char *_x1, char *_y1, char *_x2, char *_y2)
void get_image(Environment *_environment, char *_image, char *_x1, char *_y1, char *_x2, char *_y2, char *_frame, char *_sequence, int _palette)
Emit ASM code for GET IMAGE [image] AT [int],[int].
Definition get_image.c:57
VariableType type
Definition ugbc.h:988
int frameSize
Definition ugbc.h:1134
int frameCount
Definition ugbc.h:1137
char * realName
Definition ugbc.h:982
void tms9918_get_image(Environment *_environment, char *_image, char *_x, char *_y, char *_frame, char *_sequence, int _frame_size, int _frame_count, int _palette)
Definition tms9918.c:2446
struct _Variable Variable
Structure of a single variable.
struct _Environment Environment
Structure of compilation environment.
@ VT_TARRAY
Definition ugbc.h:480
@ VT_POSITION
Definition ugbc.h:468
@ VT_BYTE
Definition ugbc.h:450
@ VT_IMAGES
Definition ugbc.h:495
@ VT_IMAGE
Definition ugbc.h:489
@ VT_SEQUENCE
Definition ugbc.h:513
#define CRITICAL_PUT_IMAGE_UNSUPPORTED(v, t)
Definition ugbc.h:3532
char DATATYPE_AS_STRING[][16]