ugBASIC 1.18
An isomorphic BASIC language compiler for retrocomputers
Loading...
Searching...
No Matches
new_sequence.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 SEQUENCE
51
52@english
53
54The ''NEW SEQUENCE'' command allows you to define a memory area where you can
55store a set of images coming from the screen (with the ''GET IMAGE'' command), or
56from another graphic resource.
57
58The area must be defined by (constant) number of ''STRIP''s, (constant) number of frames per strip,
59(constant) width and (constant) height, expressed in pixels. The actual size,
60in terms of bytes of RAM, will depend on the graphics mode selected at the time. If it is not
61possible to define an image in that screen mode, a specific error will be issued.
62
63Generally speaking, it is not advisable to do a ''PUT IMAGE'' of a ''NEW SEQUENCE'' that has not
64been initialized, at least once, by a ''GET IMAGE''. Infact, the ''PUT IMAGE'' tries to draw
65the contents of an uninitialized frame (i.e.: all zeros), including the palette. So it
66could draw everything empty in terms of bitmap, and then overwrites the entire palette
67with zeros, giving rise to unexpected result. So you have to use a preliminary ''GET IMAGE''
68on any ''NEW SEQUENCE''.
69
70If you want to use the ''PUT IMAGE'' without
71side effects on palette, you can opt for the ''PUT BITMAP''. In this case, ugBASIC
72will draw only the component related to the pixels, leaving the palette component
73unchanged.
74
75@italian
76
77Il comando ''NEW SEQUENCE'' permette di definire un'area di memoria dove poter
78memorizzare un insieme di immagini provenienti dallo schermo (con il comando ''GET IMAGE''),
79oppure da un'altra risorsa grafica.
80
81L'area deve essere definita per mezzo del numero di ''STRIP'' (costante), fotogrammi per ''STRIP'' (costante),
82della larghezza (costante) e dell'altezza (costante), espressa in pixel.
83
84La dimensione effettiva, in termini di bytes in memoria, dipenderà dalla modalità grafica
85selezionata in quel momento. Se non è possibile definire una immagine in quella modalità,
86sarà emesso uno specifico errore.
87
88In generale, non è consigliabile eseguire un ''PUT IMAGE'' di una ''NEW SEQUENCE'' che
89non sia stata inizializzata, almeno una volta, da un ''GET IMAGE''. Infatti, il
90''PUT IMAGE'' tenta di disegnare il contenuto di un frame non inizializzato (ad esempio:
91tutti zeri), inclusa la palette. Quindi potrebbe disegnare tutto vuoto in termini di
92bitmap e quindi sovrascrivere l'intera palette con zeri, con un risultato inaspettato.
93Quindi devi usare un ''GET IMAGE'' preliminare su qualsiasi ''NEW SEQUENCE''.
94
95Se vuoi usare ''PUT IMAGE'' senza effetti collaterali sulla palette, puoi optare per
96''PUT BITMAP''. In questo caso, ugBASIC disegnerà solo il componente pixel, lasciando
97intatto il componente palette.
98
99@syntax = NEW SEQUENCE( strips, frames, width, height )
100
101@example background = NEW SEQUENCE(2, 16, 32,32)
102
103</usermanual> */
104
105Variable * new_sequence( Environment * _environment, int _sequences, int _frames, int _width, int _height, int _mode ) {
106
107 Variable * result = vic2_new_sequence( _environment, _sequences, _frames, _width, _height, _mode );
108
109 result->offsettingFrames = offsetting_size_count( _environment, result->frameSize, _frames );
110 offsetting_add_variable_reference( _environment, result->offsettingFrames, result, 0 );
111
112 result->offsettingSequences = offsetting_size_count( _environment, _frames*result->frameSize, _sequences );
113 offsetting_add_variable_reference( _environment, result->offsettingSequences, result, 1 );
114
115 return result;
116
117}
void offsetting_add_variable_reference(Environment *_environment, Offsetting *_first, Variable *_var, int _sequence)
Offsetting * offsetting_size_count(Environment *_environment, int _size, int _count)
Variable * new_sequence(Environment *_environment, int _sequences, int _frames, int _width, int _height, int _mode)
Emit code for NEW SEQUENCE(...).
Offsetting * offsettingFrames
Definition ugbc.h:1206
Offsetting * offsettingSequences
Definition ugbc.h:1211
int frameSize
Definition ugbc.h:1134
struct _Variable Variable
Structure of a single variable.
struct _Environment Environment
Structure of compilation environment.
Variable * vic2_new_sequence(Environment *_environment, int _sequences, int _frames, int _width, int _height, int _mode)
Definition vic2.c:4160