Guide du développeur
Les fonctionnalités décrites dans ce guide sont destinées aux développeurs Python uniquement. Ils sont expérimentaux, peuvent ne pas fonctionner comme prévu et peuvent être supprimés des versions futures sans avertissement. Vous ne pourrez peut-être pas obtenir d'aide si vous rencontrez des problèmes. Heureusement, aucune des fonctionnalités décrites ici n'est nécessaire au fonctionnement normal de PC-BASIC.
API de session
PC-BASIC
peut être chargé en tant que package depuis Python, ce qui permet d'appeler du
code BASIC directement depuis Python.
Session de classe (**kwargs)
Ouvrez une session
PC-BASIC. L'objet de session contient l'état de l'interpréteur, par ex. la
valeur des variables, le code de programme et les pointeurs, l'état de l'écran,
etc. Notez que Session peut être utilisé comme gestionnaire de contexte avec
l'instruction with.
Les arguments de mot-clé
sont en grande partie (mais pas entièrement) analogues aux options de ligne de
commande PC-BASIC.
Par défaut, l'objet
Session saisit l'entrée et la sortie standard comme clavier et écran.
Cela peut être
indésirable dans certaines applications ; dans de tels cas, définissez
explicitement les arguments des mots-clés input_streams et output_streams (par
exemple, sur None ).
exécuter (code_de_base)
Exécutez le code BASIC.
basic_code peut être des commandes ou des lignes de programme, séparées par \n
ou \r .
évaluer(basic_expr)
Evalue une expression BASIC et renvoie sa
valeur en tant que valeur Python. Pour les règles de conversion de type, voir
get_variable.
set_variable(nom, valeur)
Définissez la valeur d'un
scalaire ou d'un tableau sur une valeur Python.
name est un nom BASIC
valide, y compris le sigil, et n'est pas sensible à la casse. Si la cible est un
tableau, name doit se terminer par () .
value doit être d'un
type compatible : int , bool ou float pour les variables numériques et bytes ou
unicode pour les chaînes. Si la cible est un tableau, la valeur doit être une
liste de ces valeurs. Les tableaux multidimensionnels doivent être spécifiés
sous forme de listes imbriquées.
bool s sera représenté
comme en BASIC, avec -1 pour True . unicode sera converti en fonction de la page
de code active.
get_variable(nom)
Récupère la valeur d'un scalaire ou d'un tableau en tant que valeur Python.
name est un nom BASIC valide, y compris le sigil, et n'est pas sensible à la
casse. Si la cible est un tableau, name doit se terminer par () .
Les entiers seront
renvoyés sous la forme int , les valeurs simple et double précision sous la
forme float et la chaîne sous la forme bytes . Si la cible est un tableau, la
fonction renvoie une liste (imbriquée) de ces valeurs.
close()
Fermer
la session : ferme tous les fichiers ouverts et quitte PC-BASIC. S'il est
utilisé comme gestionnaire de contexte,
cette méthode est appelée
automatiquement.
Extensions
Il est possible
d'activer vos propres instructions BASIC à l'aide d'extensions. Une extension
est un objet ou un module Python chargé via l'option --extension ou via le
paramètre d'extension de l'objet Session.
Les fonctions Python et
autres objets appelables dans l'espace de noms de l'extension seront rendus
accessibles via des instructions d'extension de base ou des fonctions dont le
nom commence par un trait de soulignement _
Pour que cela fonctionne, la fonction doit avoir un nom qui est également un nom de variable BASIC valide : alphanumérique uniquement, pas de traits de soulignement, pas égal à un mot-clé BASIC.
Le nom ne sera pas sensible
à la casse en BASIC ; c'est-à-dire, def mytestfunc() : print 1 et def myTestFunc() :
print 2 mappe à la fois sur l'instruction d'extension ou la fonction _MYTESTFUNC
. Laquelle de ces fonctions serait choisie n'est pas définie, évitez donc cette
situation.
Tous les arguments
fournis à l'instruction ou à la fonction d'extension sont fournis à la fonction
Python en tant que type correspondant : les entiers BASIC deviennent des int s,
les nombres simple et double précision deviennent des float s et les chaînes
deviennent des octets (pas d'unicode et aucune conversion de page de code n'est
appliquée) .
Par exemple, un appel à _MYTESTFUNC 5, "test-string" s'attendrait à trouver une fonction Python mytestfunc(i, s) avec deux paramètres, et fournirait i=int(5) et a=bytes('test-string' ).
La même fonction Python
peut également être appelée en tant que fonction d'extension, par ex. A = _MYTESTFUNC(5,
"test-string") .
S'il est appelé en tant que fonction, mytestfunc(i, s) doit renvoyer une valeur parmi int , float , qui seront toutes deux converties en un float double précision BASIC ; bool , qui sera converti en un entier BASIC ; ou bytes ou unicode , qui sera converti en une chaîne BASIC.
Examples
import pcbasic
import
random
with pcbasic.Session(extension=random) as s:
s.execute('a=1')
print s.evaluate('string$(a+2, "@")')
s.set_variable('B$', 'abcd')
s.execute('''
10 a=5
20 print a
run
_seed(42)
b = _uniform(a, 25.6)
print a, b
''')