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 ''GET IMAGE'' instruction copies a portion of the screen into an image in memory,
59which must be defined in advance. The dimensions of the image to be captured are
60defined by the variable where the image will be stored. The image is also captured
61with color components.
62
63@italian
64L'istruzione ''GET IMAGE'' copia una porzione dello schermo in un'immagine in memoria,
65che deve essere definita in anticipo. Le dimensioni dell'immagine da catturare sono
66definite dalla variabile dove l'immagine sarà memorizzata. L'immagine viene catturata
67anche con le componenti colore.
68
69@syntax GET IMAGE var FROM [x], [y]
70@syntax GET (x1,y1) - (x2,y2), var[, G]
71
72@example background = NEW IMAGE(16, 16)
73@example GET IMAGE background FROM 0, 0
74
75@target pc1403
76</usermanual> */
77void get_image( Environment * _environment, char * _image, char * _x1, char * _y1, char * _x2, char * _y2, char * _frame, char * _sequence, int _palette ) {
78
79 Variable * image = variable_retrieve( _environment, _image );
80 Variable * x1 = variable_retrieve_or_define( _environment, _x1, VT_POSITION, 0 );
81 Variable * y1 = variable_retrieve_or_define( _environment, _y1, VT_POSITION, 0 );
82
83 if ( _x2 && _y2 ) {
84 get_image_overwrite_size( _environment, _image, _x1, _y1, _x2, _y2 );
85 }
86
87 Variable * frame = NULL;
88 if ( _frame) {
89 frame = variable_retrieve_or_define( _environment, _frame, VT_BYTE, 0 );
90 }
91 Variable * sequence = NULL;
92 if ( _sequence) {
93 sequence = variable_retrieve_or_define( _environment, _sequence, VT_BYTE, 0 );
94 }
95
96 switch( image->type ) {
97 case VT_SEQUENCE:
98 if ( !sequence ) {
99 if ( !frame ) {
100 // // tms9918_get_image( _environment, image->realName, x1->realName, y1->realName, "", "", image->frameSize, image->frameCount, _palette );
101 } else {
102 // // tms9918_get_image( _environment, image->realName, x1->realName, y1->realName, frame->realName, "", image->frameSize, image->frameCount, _palette );
103 }
104 } else {
105 if ( !frame ) {
106 // // tms9918_get_image( _environment, image->realName, x1->realName, y1->realName, "", sequence->realName, image->frameSize, image->frameCount, _palette );
107 } else {
108 // // tms9918_get_image( _environment, image->realName, x1->realName, y1->realName, frame->realName, sequence->realName, image->frameSize, image->frameCount, _palette );
109 }
110 }
111 break;
112 case VT_IMAGES:
113 if ( !frame ) {
114 // // tms9918_get_image( _environment, image->realName, x1->realName, y1->realName, "", NULL, image->frameSize, 0, _palette );
115 } else {
116 // // tms9918_get_image( _environment, image->realName, x1->realName, y1->realName, frame->realName, NULL, image->frameSize, 0, _palette );
117 }
118 break;
119 case VT_IMAGE:
120 case VT_TARRAY:
121 // // tms9918_get_image( _environment, image->realName, x1->realName, y1->realName, NULL, NULL, 0, 0, _palette );
122 break;
123 default:
125 }
126
127}
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
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]