ugBASIC 1.18
An isomorphic BASIC language compiler for retrocomputers
Loading...
Searching...
No Matches
pause.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
41/* <usermanual>
42@keyword PAUSE
43
44@english
45
46The ''PAUSE'' command will pause a running program in a time-controlled manner.
47In order to have an easy way of signaling such a pause to the user, ''PAUSE''
48offers the optional ''string'' parameter. The string is output at the current
49cursor position and does not append a line feed. After output, the cursor
50remains behind the output string, as with the ''PRINT'' command.
51
52@italian
53
54Il comando ''PAUSE'' metterà in pausa un programma in esecuzione in modo
55controllato nel tempo. Per avere un modo semplice per segnalare tale pausa
56all'utente, ''PAUSE'' offre il parametro facoltativo ''string''. La
57stringa viene emessa nella posizione corrente del cursore e non aggiunge
58un avanzamento di riga. Dopo l'emissione, il cursore rimane dietro la
59stringa di emissione, come con il comando ''PRINT''.
60
61@syntax PAUSE [string,] time
62
63@example PAUSE "Waiting...", 3
64
65</usermanual> */
66
67void pause_seconds( Environment * _environment, char * _string, char * _duration ) {
68
70
71 char loopLabel[MAX_TEMPORARY_STORAGE]; sprintf( loopLabel, "%sloop", label );
72
73 if ( _string ) {
74 print( _environment, _string, 0, _environment->printRaw );
75 }
76
77 Variable * duration = variable_retrieve_or_define( _environment, _duration, VT_BYTE, 0 );
78 Variable * count = variable_temporary( _environment, VT_BYTE, "(count)" );
79
80 variable_move( _environment, duration->name, count->name );
81
82 cpu_label( _environment, loopLabel );
83 cpu_compare_and_branch_8bit_const( _environment, count->realName, 0, label, 1 );
84 wait_milliseconds( _environment, 1000 );
85 cpu_dec( _environment, count->realName );
86 cpu_jump( _environment, loopLabel );
87
88 cpu_label( _environment, label );
89
90}
void cpu_label(Environment *_environment, char *_label)
Definition 6309.c:356
void cpu_dec(Environment *_environment, char *_variable)
Definition 6309.c:4630
void cpu_jump(Environment *_environment, char *_label)
Definition 6309.c:3739
void cpu_compare_and_branch_8bit_const(Environment *_environment, char *_source, int _destination, char *_label, int _positive)
CPU 6309: emit code to compare two 8 bit values and jump if they are equal/different
Definition 6309.c:876
Variable * variable_retrieve_or_define(Environment *_environment, char *_name, VariableType _type, int _value)
Variable * variable_move(Environment *_environment, char *_source, char *_destination)
Store the value of a variable inside another variable by converting it.
Variable * variable_temporary(Environment *_environment, VariableType _type, char *_meaning)
Define a temporary variable.
void pause_seconds(Environment *_environment, char *_string, char *_duration)
Definition pause.c:67
void print(Environment *_environment, char *_value, int _new_line, int _raw)
Emit code for PRINT... instruction.
Definition print.c:141
int printRaw
Definition ugbc.h:3274
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
#define MAKE_LABEL
Definition ugbc.h:3351
void wait_milliseconds(Environment *_environment, int _timing)
Emit ASM code for WAIT # [integer] MS.