ugBASIC 1.18
An isomorphic BASIC language compiler for retrocomputers
Loading...
Searching...
No Matches
suspend.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
47/* <usermanual>
48@keyword SUSPEND
49
50@english
51
52This statement can be used to temporarily suspend the execution of a
53thread. The thread will stop executing until it receives the ''RESUME''
54command. When queried with the ''RUNNING'' function, the thread will
55be reported as "not running".
56
57@italian
58
59Questa istruzione può essere utilizzata per sospendere temporaneamente
60l'esecuzione di un thread. Il thread interromperà la propria esecuzione
61fino al ricevimento del comando ''RESUME''. Se interrogato con la
62funzione ''RUNNING'', il thread risulterà "non in esecuzione".
63
64@syntax SUSPEND thread
65
66@example handle = SPAWN moveShip
67@example SUSPEND handle
68
69@target all
70</usermanual> */
71void suspend_vars( Environment * _environment, char * _thread ) {
72
74
75 Variable * threadId = variable_retrieve( _environment, _thread );
76
77 char doNothingLabel[MAX_TEMPORARY_STORAGE]; sprintf( doNothingLabel, "%snothing", label );
78
79 Variable * status = variable_temporary( _environment, VT_BYTE, "(status)" );
80
81 cpu_protothread_get_state( _environment, threadId->realName, status->realName );
82
83 cpu_compare_and_branch_8bit_const( _environment, status->realName, PROTOTHREAD_STATUS_YIELDED, doNothingLabel, 0 );
84
85 cpu_protothread_set_state( _environment, threadId->realName, PROTOTHREAD_STATUS_PAUSED );
86
87 cpu_label( _environment, doNothingLabel );
88
89}
90
void cpu_protothread_get_state(Environment *_environment, char *_index, char *_state)
Definition 6309.c:6237
void cpu_protothread_set_state(Environment *_environment, char *_index, int _state)
Definition 6309.c:6226
void cpu_label(Environment *_environment, char *_label)
Definition 6309.c:356
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(Environment *_environment, char *_name)
Variable * variable_temporary(Environment *_environment, VariableType _type, char *_meaning)
Define a temporary variable.
char * realName
Definition ugbc.h:982
void suspend_vars(Environment *_environment, char *_thread)
Emit code for SUSPEND ....
Definition suspend.c:71
#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 PROTOTHREAD_STATUS_YIELDED
Definition ugbc.h:4548
#define PROTOTHREAD_STATUS_PAUSED
Definition ugbc.h:4551
#define MAKE_LABEL
Definition ugbc.h:3351