Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
51 changes: 44 additions & 7 deletions concept1.cpc
Original file line number Diff line number Diff line change
Expand Up @@ -2,12 +2,11 @@
' les mots clef peuvent prendre des "flags" et des arguments
' un peu à la maniere de programme POSIX (les flags obligatoirements
' avant les arguments)

txt/ /#R "Hello "
txt/ "World"

' ${} aurait la meme comportement que les {} dans les f-strings en python
txt/ "il est ${sys/ /time}"
txt/ "il est ${SYS.TIME}"

' pour definir une fonction
' def/ name (args)
Expand All @@ -18,11 +17,6 @@ def/ hello (name)
txt/ "hello ${name}"
end/

' Une petite lambda:
goodby = lambda/ (name)
text/ "Goodbye ${name}"
end/

' et on les appeleraient comme ceci:
call/ hello "test de julien a nouveau"
' l'idée serait de séparer mot clef (finissant par / et reserver) et l'espace de nom utilisateur
Expand Down Expand Up @@ -121,3 +115,46 @@ PictureBox/
.image = "%user_path%/name.png"
end/

' Pour les variables modifiables par l'utilisateur :

let/ /input: "Entrez une valeur : ", x

txt/ "${x}"

' Pour les conditions

let/ y = 5

if/ x == y :
txt/ "x est egal a y"
elif/ x < y :
txt/ "x est inferieur a y"
else/
txt/ "x est superieur a y"
end/

' Pour les boucles type "tant que"

while/ x < y :
let/ x = x + 1
end/ while

' Pour les boucles type 'pour'

let/ tab = [3, 5, 4, 9, 14, 15, 21, 38]

for/ y in tab:
if/ tab[0] == y :
txt/ "y = ${tab[0]}"
end/
end/

' Pour les conditions types "switch" (comme en C++). Attention, ça peut piquer des yeux.

switch/ x :
case/ 1 : "Yes"
case/ 2 : "No"
case/ default : "None"
end/


113 changes: 113 additions & 0 deletions concept_ui.cpc
Original file line number Diff line number Diff line change
@@ -0,0 +1,113 @@
// Ce fichier, que j'ai fait à part du premier fichier, permet de conceptualiser une syntaxe pour la lib GUI de Cpcdos OS3.0

use/ "cpcgui" // D'après ce qui avait été défini, on importe la lib native pour ajouter les keywords spécifiques à l'interface graphique

// On conceptualisera les éléments graphiques comme suit :

let/ my_window = window/ ... end/

// (Je n'ai pas complété le code de la fenêtre)
// L'élément est déclaré dans une variable. Cela permettra de créer un parent pour les éléments enfants que nous allons intégrer plus tard

// Auparavant, une fenêtre se créait ainsi :

window/ my_old_window
...
...
@#my_old_window_handle create/
end/ window

// La ligne qui précède `end/ window` créait un handle permettant d'associer un parent lors de la création d'un élément enfant.
// Aujourd'hui, on passe par une simple déclaration de variable. Ce qui formalise également une seule façon de déclarer des variables.
// Code complet d'une fenêtre en CC+ 3.0 :

let/ my_window = window/
.title = "My window"
.px = 100
.py = 100
.sx = 300
.sy = 200
.opacity = 255 // L'oppacité est une valeur qui va de 0 à 255
.parameters = "TYPE:0" // Je définirais les paramètres ultérieurement dans ce document
.barcolor = (50,50,100)
.titlecolor = (255,255,255)
.windowcolor = (198,198,198)
.icon = ""
end/

// J'ai fait le choix délibéré de remplacer "windowcolor" qui change la couleur de la bar-titre par "barcolor" par question de logique.
// "windowcolor" va remplacer "backcolor".
// "titlecolor" reste inchangé.

// La création d'élément enfant se fait comme suit (ici, un bouton) :

let/ my_window_btn = button/
.parent = my_window
.px = 100
.py = 100
.sx = 30
.sy = 15
.opacity = 255
.parameters = "CLICKABLE:1 IMGAUTO:0"
.text = "Click me !"
.backcolor = (50,50,100)
.textcolor = (255,255,255)
.image = ""
.events = my_window_btn_events
end/

// Remplacement de l'attribut "handle" par "parent" (c'est un choix personnel. On débattera des keywords de toute façon).
// Création d'un nouveau paramètre : CLICKABLE (0 : le bouton n'est pas cliquable - 1 : le bouton est cliquable).
// Dans .events, on indique la fonction qui définira les événements provoqués par le bouton lors de son actionnement. Les fonctions sont stockées dans des variables.

// D'autres éléments enfants :

let/ my_picturebox = picturebox/
.parent = my_window
.px = 10
.py = 10
.sx = 16
.sy = 16
.opacity = 125
.parameters = "IMGAUTO:0
.image = ""
end/

let/ my_textblock = textblock/
.parent = my_window
.px = 200
.py = 200
.sx = 100
.sy = 15
.font-size = 13
.font-family = "sans-serif"
.parameters = "BOLD:1 ITALIC:1 UNDERLINE:1 ALIGN:0"
.textcolor = (255,255,255)
.backcolor = (0,0,0)
end/

// Ajout de deux nouveaux attributs inspirés du CSS : font-size et font-family
// Trois paramètres spécifiques : BOLD, ITALIC, UNDERLINE et ALIGN : 0 à gauche, 1 au centre, 2 à droite et 3 justifié

let/ my_textbox = textbox/
.parent = my_window
.px = 0
.py = 150
.sx = 100
.sy = 15
.font-size = 13
.font-family = "sans-serif"
.parameters = "BOLD:1 ITALIC:0 UNDERLINE:0 ALIGN:0"
.textcolor = (0,0,0)
.backcolor = (255,255,255)
end/

// Les mêmes paramètres que pour le textblock. Je rajouterais d'autres éléments plus tard. En attendant, on a déjà de quoi faire une très bonne base.