Exemples de programmes

Scriptol

Algorithme de Fibonacci itératif

int fibmax = 20
int fibonacci(int n) int u = 0
int v = 1 int t
for int i in 2 .. n
t = u + v
u = v
v = t
/for
return v
for int x in 1..fibmax echo "fib(", x , ") ", fibonacci(x), "\n" /for

Passer des arguments à un script

Usage: sol ex_main [paramètres]

for .. in, lit à la fois l'indice et la valeur du tableau.

int main(array arglist, int argnum) 
print argnum, "arguments" for int i, var v in arglist // scanne le tableau
print "$i)", v // affiche indice et valeur
/for
return 0
main($argv, $argc) // $argv et $argc sont des variables système.

fcomp - Comparer deux fichiers

die() affiche un message et termine le programme.

int main(int argnum, array arglist) 
if argnum <> 3 ? die("usage: php fcomp.php file1 file2") print "Comparing", arglist[1], arglist[2] array f1, f2
f1.load(arglist[1]) // tableau rempli avec un fichier
f2.load(arglist[2])
if f1.size() <> f2.size() ? die("sizes differ")
for int i in 0..f1.size() - 1 if f1[i] <> f2[i] ? die("files differ")
/for
print "No difference found."
return 0
main($argv) ` argv est une variable PHP.

Compter les occurences d'une chaîne

Text, array, dict, file, sont des classes virtuelles et chaque instance peut utiliser des méthodes virtuelles comme ici find méthode de text.

class String 
int count(text base, text sea)
int ctr = 0 int i = 0 while forever
i = base.find(sea, i)
if i = nil break
i + 1
ctr + 1
/while
return ctr
/class

String str
print str.count("somestring", "string")

Classe et héritage (ex_car.sol)

A partir de la classe de base "Car", on peut hériter d'autres classes utilisant ses méthodes, faire des instance de Car ou de ses classes dérivées.

class Car     
int power = 850 int getPower() return power
text color(int c)
text tc = "other" if c = 1: tc = "blue"
= 2: tc = "green" = 4: tc = "red" /if
return "color is " + tc
/class
class FormulaOne is Car
int speed
int getSpeed()
speed = getPower() * 2/ 4
return speed
/class
FormulaOne f1 // instance de FormulaOne
print f1.power // attribut de la superclasss
print f1.getPower() // méthode de la superclasss
print f1.getSpeed() // méthode de la classe elle-même
print FormulaOne.color(4) // méthode statique de la superclasss (Car.color() marche aussi).

Utiliser GTK (Scriptol C++)

include "gtk.sol"
include <gtk/gtk.h>
int main(int argc, array argv)
GtkWidget window = null
gtk_init(null, null) window = gtk_window_new($GTK_WINDOW_TOPLEVEL)
gtk_widget_show(window)
gtk_main()
return 0

Récursion

Algorithme de Fibonacci récursif. Calcul des nombres de Fibonacci.

const int fibmax = 16
int z = 0

int fib(int n)
  if n <= 1 :  z = n
  else
     z = 0 + fib(n - 1) + fib(n - 2)
  /if
return z

for int i in 0..fibmax
  print "fib($i)=" , fib(i)
/for

Fonctions intégrées

L'heure et la date courante ou dernière modification d'un fichier.

print "Example of date and time"
print "Format ISO 8601 (PHP 5/Scriptol C++)"
real d = time()
print "Current date and time:", date("c", d)
d = filetime("exdate.sol")
text filedate = date("c", d)
print "Date of this file:", filedate[ .. 9]

Ligne de commande

Hello You. Fonctions d'entrée-sorties de base en ligne de commande.

text name
input "What is you name? ", name
print "Hello", name

Graphismes utilisant GD (Scriptol PHP)

Dessiner un bouton. Créer un bouton avec un libellé, avec la bibliothèque Scriptol Image.

include "phpgd.h"
include "image.sol"

print "Program Button - Testing GD"

Image button
button.create(88,31)
int black = button.createColor(0, 0, 0)
int white = button.createColor(255,255,255)
int green = button.createColor(0, 192, 0)

# filling background and drawing borders
button.fill(green)
button.line(0,0,87,0, white)
button.line(0,0,0,30, white)
button.line(0,30,87,30, black)
button.line(87,0,87,30, black)

# now, writing a label
button.setFontSize(5)
button.write(26, 8, "Label", black)

text bname = "button.jpg"
button.saveJpeg(bname, 100)
print bname,"created"

XML facile

Vous avez un fichier XML et vous voulez accéder au contenu.

Il est possible en Scriptol 2 d'utiliser un dict et d'assigner les valeurs à des clés.

Pour charger le fichier XML en Scriptol 2, on écrit simplement:

dict d
d.load("article.xml")

Voici le contenu:

dict d = {
  "articles" : {
    "article": {
       "nom" : "Internet",
       "titee" : "Mon article",
       "data" : "Voici l'histoire que je vais raconter..."
     }
}

Il peut être stocké dans un fichier XML:

d.store("article.xml")

Le fichier XML créé:

<?xml version="1.0" ?>
<articles>
<article nom="Internet" titre="Mon article" >
Voici l'histoire que je vais raconter.
</article>
</articles>

Autres sources