Introduction |
Vous êtes nombreux a vouloir vous lancer dans la programmation,
c'est une bonne idée. D'ailleurs la programmation est plus facile
que vous ne pensez. Seulement voilà, quant on voit dans une boutique
le nombre de livres qui aborde ce thème, il y a rapidement de quoi
tomber les bras et abandonner. La multiplicité des langages, le niveau
pré requis ainsi que les univers ou environnement sur lesquels ces
langages tournent peut déconcerter les plus hardent. Voilà
pourquoi, je vais essayer pendant plusieurs chapitres de vous transmettre
les connaissances nécessaires pour que vous puissiez comme moi trouver
plaisir a écrire des petits programmes pour le Palm. Après
vous avoir présenté les notions théoriques et
élémentaires de programmation nous allons passer à des
cas concrets avec un langage. Pour que tout le monde en profite, le langage
retenu sera d'abord le basic, une prochaine version du cours traitera
également du C. Pourquoi le Basic, 1er parce qu'il ne nécessite
aucuns investissement pour vous (il existe 2 versions gratuites) 2eme parce
que le Basic est un langage de référence facile d'accès
y compris pour les débutant, certes sur Palm ce n'est pas un langage
très puissant pouvant rivaliser avec des programmes écrit en
C toutefois le nombre de fonctions accessibles est tout a fait satisfaisant
pour les Travaux Pratiques. Le cours est basé sur Hotpaw Basic,
www.hotpaw.com/rhn/hotpaw/
version shareware du basic Palm et plus étendue que la version gratuite
Cpaspad.
Les 2 langages sont aussi totalement indépendant de votre machine
de synchronisation puisqu'ils sont "onboard" c'est a dire que l'environnement
de travail est 100% sur le Palm, donc vous pouvez même programmer à
la plage, dans la salle d'attente du dentiste ou dans les transports en commun.
Pas besoin d'avoir le dernier PC ou le dernier Mac sortit pour
programmer.
Les langages basic directement
sur Palm
Langage: CbasPas
|
Editeur: Ronald Nicholson | Url: http://www.nicholson.com/ |
Prix:
$0
|
Niveau: Débutant | Applications: restreintes |
Description:
|
Programmez en Basic sur
votre directement sur votre Palm en saisisant le code directement dans le
programme mémo, donc depuis le Palm ou depuis le desktop de
l'ordinateur |
|
| Langage: HotPaw | Editeur: Ronald Nicholson | Url: http://www.hotpaw.com/ |
| Prix: $20 | Niveau: Débutant | Applications: restreintes |
| Description: | Aprés CbasPad, Ronald remet le couvert et sort une version plus puissante batisée "cbaspad pro" puis "HotPaw" et elle devient Shareware au passage.
Version shareware est
limité à 7 programmes
maxi. |
|
| Langage: SmallBasic | Editeur: ... | Url: http://smallbasic.sourceforge.net/ |
| Prix: libre (GPL) | Niveau: débutant | |
| Description: | SmallBasic et un autre basic directement utilisable sur le Palm. Cette version etant assez recente, que ne la connais pas bien. | |
Partie théorique |
A quoi peut
servir un programme ?
Un programme sur un ordinateur est essentiellement dédié a une
tache qui peut prendre n'importe quelles formes en fonction d'un cahier des
charges, et d'une partie imagination de son auteur. En fait un programme sert
a traiter des données pour les transformer en informations exploitables
pour les utilisateurs du programme.
Données Brutes
|
=>
|
Traitements
|
=>
|
Résultats
|
Entrées
|
Sorties
|
|||
Clavier / souris / Stylet
Scanneur / photo num. data |
calculs
|
Visualisation
Impression Transmission |
L'entrées des données sont souvent le fait qu'acquisition par
un clavier, un scanner, une liaison informatique, la souris ou tout autres périphériques.
Le résultat après traitement est lui donné par un écran,
une impression papier, ou encore une liaison vers une autre machine. On peut
préciser aussi que les traitements peuvent fonctionner en cascade et
donc le résultat d'un traitement peut devenir 'données" pour le
traitement suivant. Pour effectuer un traitement, l'ordinateur exécute
une liste d'instructions dans un ordre etabli, l'ordinateur peut indéfiniment
réaliser le traitement, sans " râler " jusqu'à ce que l'opérateur
lui ordonne d'arrêter. En fait l'ordinateur peut très bien réaliser
bcp de traitements en parallèle et consolider les résultats au
final. Parfois nous pouvons avoir l'impression que l'ordinateur fasse un choix,
ou prenne une décision mais en fait il n'en est rien, simplement dans
le traitement des instructions, le programmeur a introduit un test, et selon
le résultat du test, l'ordinateur "change de comportement" mais tout
était prévu à l'origine du programme. L'ordinateur ne devient
pas intelligent.
Pour pouvoir traiter des informations,
l'ordinateur a besoin de pouvoir stocker les informations soit celles des données
du départ, soit celles issues de ses calculs intermediaires, ou encore
celles des résultats. Ce stockage peut être physique sur un support
magnetique enregistrable appelé "Mémoire de Masse" comme le disque
dur ou une disquette, ou encore à la mode une carte d'extension mémoire.
Quant au stockage des calculs intermediaire il est souvent dans la mémoire
RAM dynamique de l'ordinateur, car cette dernière est trés rapide
en écriture et lecture (on parle de µs pour micro-seconde 10^-6s)
tandis que les accés au disque dur sont donné en ms (milli-seconde
10^-3s). Une fois l'ordinateur éteind, les informations en RAM sont éffacés
tandis que celle sur le disque dur reste stocké magnétiquement.
Pour le Palm les 2 types de support RAM et Disque Dur sont confondu dans les
rôles en un seul et même circuit de mémoire. Toutefois pendant
l'execution du programme le system d'exploitation utilise differentes partie
du circuit mémoire pour son usage (pour plus d'informations sur le sujet
se rapporter aux articles de Denis Faivre dans Team Palm Tops). Pour que le
Palm puisse stocker des informations on lui fourni des "cases" où il
range les données, les reprend, les modifie et range à nouveau.
Ces "cases" sont des espaces mémoires appelés "variable". Une
variable est donc un emplacement que le programme va utiliser pour y stocker
des valeurs qui peuvent être numérique, décimales ou entieres
mais également des suites de caractéres formant des "chaines".
L'importance du systeme d'exploitation. |
Dans la majorité
des cas, l'écriture d'un programme ne requiert pas de connaissance spécifique
du matériel pour le programmeur, et heureusement. Par exemple quant une
personne écrit un programme pour un PC elle ignore quelles seront les
ressources ou le matériel que vous utiliserez pour exploiter le programme;
si c'est un écran 15' , une souris sans fils ou un Pentium 700 ... et
cela pour une raison simple est que le programme qui est écrit ne s'adresse
pas directement à la machine pour excecution mais d'abord a son système
d'exploitation: l'O.S (Operating System) Il en est de même avec le Palm.
De nombreux langages pour cette machine passent par cette incontournable interprète
qu'est PalmOS pour que le device (la machine) le comprenne matériellement.
Prenons par exemple le cas du son, supposez que dans votre programme vous souhaitiez
que la machine fasse un bip continu, et bien le programme contiendra une instruction
spécifique et une fois en exécution, il transmettra l'ordre au
PalmOs qui va a son tour solliciter le circuit électronique sonore de
la machine pour émettre un bip avec le Buzzer si c'est un Palm ou un
Visor, un Sony ou le HP si c'est un TRGpro ou un Handera. Certes il faut
tout de même que l'auteur du programme choisir une famille de machine
pour cibler les caractéristiques générales mais aussi les
limites qui lui sont imposé par le matériel. Prenons le cas du
Palm, les écran sont de 160x160 (un peu plus pour Handera et Sony).
donc inutile de vouloir afficher d'avantage de pixels comme sur un PC... Toutefois
à l'interieur d'un programme, l'auteur peut lancer une serie de tests
qui indiqueront au programme que vous utilisez un ecran couleur, ou que votre
infrarouge est desactivé ou encore que vous n'avez pas la version de
PalmOS nécessaire est suffisante pour faire fonctionner le programme
parfaitement.
Aprés ces quelques notions théorique passont au langage proprement
dit.
Le langage Basic - installation de l'environnement. |
Télechargez HotPaw
depuis http://www.hotpaw.com/ et
installez-le sur votre machine.
|
exemple
de regroupement des |
|
Le lancement
de yBasic (HotPaw Basic) |
|
Le lancement du programme
Mémo (bloc-note du Palm) |
|
La modification
du programme au sein du Mémo, peut se faire avec le stylet, par
le clavier virtuelle, sur un vrai clavier mécanique comme le stowaway,
voir même directement sur l'ordinateur. |
|
| Remarquez que le source des programmes Basic ecris dans le mémo commence tous par # avec un nom suivi de .bas pour que HotPaw les identifie dans tout vos mémo quelques soit la catégorie où vous les placez. | |||
Le langage Basic HotPaw- les instructions. |
Au sein d'un programme quelque
soit le langage, nous retrouvons souvent les mêmes familles d'instructions:
- les variables ou l'on stocke les données.
- les opérateurs qui executent les opérations de calcul entre
variables et constantes.
- les tests qui dirigent le programme vers tel ou tel autre traitement en fonction
du résultat du test.
- les boucles qui s'executent un nombre de fois prédéfini ou qui
s'interomptent en fonction d'un test.
- les entrées de données (saisie-clavier, stylet ...)
- les sorties de résultats ( affichage, son ...)
- les fonctions programmable, procédures ou sous-programmes qui sont
des mini-programmes réutilisable plusieurs fois avec passage ou non de
paramêtres.
- les fonctions spécifiques bases de données, sonores, de convertion
de types, d'horodatage, de données system ou encore graphiques sont des
instructions particulieres avec passage de paramêtres pour execution des
taches définies ou récupération de valeurs systémes.
Particularité du HotPaw
* Toutes les instructions peuvent être écrite en minuscule.
* Une ligne de code ne dépasse pas 80 caractéres.
* les instructions peuvent être sur une même ligne et séparée
par le caractére de ponctuation " : "
* comme le code est écrit dans un mémo il ne peut dépassé
les 4000 caractéres, toutefois un programme peut lui même appeler
plusieurs mémo avec #include < #memo 2> , memo 2 etant le
titre du memo contenant la suite des instructions. Donc cette limitation
de 4000 caractère n'est pas vraiment un handicap.
|
#
|
Item/opérateur/instruction
|
Exemple
|
|
1
|
Les
variables: |
|
|
2
|
Les
opérateurs: |
a=3*x^2+2*x-(12/23) b=(a/2)*7 |
|
3
|
Les
tests: |
if a*2=25
then |
|
4
|
Les
boucles: |
for a=1
to 100 |
| while test action wend Cette boucle a de particularité de s'executer tant que le test d'entrée est vrais. |
n = 1 while (n < 100) n = n + 2 wend print n |
|
|
6
|
Le sous programme: gosub / return / end sub gosub execute un saut à l'adresse qui suit l'instruction, soit un numéro de ligne qui précede l'instruction d'arrivée , soit un nom avec en option un parametre, les exemples permettent de clarifier l'usage du code. |
Usage classique avec
n° de ligne:
100 gosub 500 Usage avec nom: gosub foo(5) |
|
7
|
Les entrées
de données: Sur Palm il y a plusieurs façon d'entrée des données, ce peut être une valeur à saisir au stylet, mais ce peut également être une position sur l'écran, de fait il y a plusieurs instructions à utiliser selon l'usage final. fn pen(0) récupére la position X courante fn pen(1) récupére la dernière position X fn pen(2) récupére la dernière position Y fn pen(3) durée depuis le dernier appuis du stylet fn pen(4) =1 si stylet appuyé sur l'écran fn pen(5) |
|
| inkey$() cet instruction recupére dans une mémoire le dernier caractére saisie dans la zone graffiti. |
||
|
input$(message$,[titre$[,defaut$]])
> message$ est le texte explicatif > titre$ est le titre [optionnel] dans la fenetre > defaut$ est la valeur par defaut [optionnel] > input$ retourne une chaine de caractère donc il faut la convertir avec val(input$...) pour obtenir une valeur numérique |
message$="
votre choix:" |
|
|
8
|
Les sorties
de résultat:
display ? |
a=5:b=7 |
|
Msgbox(message$[,titre$[,n]])
> message$ est le texte explicatif > titre$ est le titre [optionnel] dans la fenetre > si n=1 alors il y a un bouton "OK" > si n=2 alors il y a 2 bouton "OK" et "Cancel" |
a$=" voulez-vous
supprimer ce fichier" |
|
|
Fin de la première partie |
||
Partie 2a - 18/10/2001
Dans la première partie,
nous avions abordé la théorie sur la programmation et les premières
instructions du langage hotpaw. A présent nous allons voir ensemble quelques
exemples de code commentès pour mieux appréhender la richesse
des instructions.
|
#
|
L |
Exemple
|
Commentaire
|
- > -
|
pour tester les exemples, recopiez le code dans votre mémo tel qu'à l'écran, lancez Howpaw et selectionner le mémo à tester puis "run" | ||
|
1
|
1
2 3 4 5 6 |
# hello.bas
|
Le traditionnel "hello
world" qui consiste à afficher ces 2 mots sur l'écran
de la machine. |
|
2
|
1
2 3 4 5 6 7 8 |
# nombre_secret.bas
|
trouver
un nombre entre 1 et 10 le programme fonctionne en boucle fermé, tant que la réponse n'est pas trouvé le programme continu pour celà on fait appel à une boucle while - wend qui inclut les instructions. Ligne 1: le nom du programme L2, chargement d'une valeur initiale pour la variable X servant au stockage de la réponse. L3, secret est une variable qui va prendre la valeur d'un nombre aléatoire (au hazard) compris entre 1 et 10. En fait l'instruction basique RND(n) génére un chiffre décimal entre 0 et n-1, le fait de mettre RND(10) donne un nombre entre 0 et 9 donc on ajoute 1 pour obtenir un chiffre entre 0 et 10. L4, début de la boucle avec la condition pour y rester a savoir il faut que X (la réponse) soit différente du nombre secret. L5, on demande à l'opérateur d'introduire sa réponse qui se stock dans X. L6, wend ferme la boucle, en fait il indique au programme qu'il ne poura franchir cette limite si la condition est vrais L7 affichage du résultat suivi du message "exacte !" L8 fin du programme |
|
3
|
1
2 3 4 5 6 7 8 9 10 11 12 13 |
# nombre_secret.bas
|
meme
programme que le précédant mais cette fois on ajoute 1 test
qui permet de mettre sur la voie l'opérateur. Ligne 6 si X la reponse est plus grand que le nombre secret alors on affiche ligne 7 "trop grand" sinon (L8) on affiche la ligne 9 "trop petit" en fait vous constaterez à l'usage que le programme contient une erreur, Réponse: si x = secret alors le programme affiche d'abord la L9 " trop petit " puis la ligne 12 " exacte !" |
|
4
|
1
2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 |
# nombre_secret.bas |
encore
une autre variante du précedant programme avec la correction et un
découpage du code en différent bloc appelé sous programme.
(sub = subroutine en anglais) L3, le "gosub sec" appel le sous programme ligne 15 puis la ligne 17 le "end sub" indiques au programme de retourner de là ou il vient fin de ligne 3 pour executer la ligne 4. idem ligne 7 et 9. Le sous-programme n'a pas vraiment d'utilité dans le cas présent car il est toujours appelé depuis le même endroit mais dans un autre programme il pourrait grandement simplifier l'écriture en "factorisant" les instructions: dés qu'un traitement doit etre executé plus d'une fois au cours de la vie du programme, alors il peut etre intéréssant de confier la tache au sous-programme qui peut être appelé depuis n'importe quelle ligne avec un gosub. |
Partie 2b
- 20/10/2001
Voyons ensemble quelques nouvelles intructions pour completer nos programmes.
|
#
|
Item/opérateur/instruction
|
Exemple
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
9a
|
Les 3
boites de dialogue form:
form(9,n,titre$) affiche un formulaire de n lignes sur 2 colones avec un titre, il utilise des mémoires reservés a HotPaw qui vont de s$(0) à s$(63) dans le cas du form(9...) on se limite aux 16 premiers. les indices pairs correspondent aux libéllés, et les indices inpairs aux valeurs, exemple:
en bas du formulaire
apparait 4 boutons: [ok] [cancel] [A] [B]
L'exemple
ci contre, affiche un formulaire de 7 lignes avec les 5 première
remplies.
Aprés saisie des valeurs, en cliquant sur OK la variable s$(11) est calculée grâce à la récupération des valeurs saisie en 3,5,7,9 et intégré dans la fonction HotPaw: fn pmt(p,i,n) qui fait le calcul d'un loyer d'emprunt. |
# loan
payment .bas
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
9b
|
form(10,n,title$)
affiche un formulaire avec une seule colonne. les 4 boutons du bas réagisent pareils que dans form(9...) |
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
9c
|
form(12,0,title$) affiche un formulaire a 2 colonnes + un clavier de saisie numérie sur le coté droit. s$(0) and s$(1) affiche
le text en haut et bas ("nom:" dans l'exemple ci contre) |
![]() |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
9d
|
résumé
des 3 form
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
11
|
Les fonctions intégrés
a HotPaw:
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
12
|
Fonctions - chaine de caractères.
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
|||