Moderniser de vieux programmes Basic avec Aerbasic

Vote utilisateur: 4 / 5

Etoiles activesEtoiles activesEtoiles activesEtoiles activesEtoiles inactives
 

 

I.

 

En avons-nous fait, nous les Trsistes de la première (ou deuxième) heure, des conversions !

Nous étions partis d'un modèle I, 4 K, à lecteur de cassette CTR-41, avec Basic Level I. Nous avons dû convertir nos premiers essais sous Level II (grâce à la cassette "Data conversion Level 1 to Level 2" fournie par Tandy). Puis nous avons remisé le CTR-41, pour passer au double lecteur de disquettes. Ce fut la glorieuse époque du Newdos-80, et le transfert de nos programmes par LMOFFSET, par exemple. Et je passe sous silence le fameux Basicode, venu de Hollande, qui permettait en principe de faire tourner aisément les mêmes programmes sur Trs, Apple et autres Commodore.

Nous pensions avoir atteint le terme, lorsque nous avons abandonné le Modèle III pour son frère puîné, le IV, avec de nouveaux transferts, d'autres modifications à la clé... Grave erreur de jeunesse ! En même temps que le modèle IV, sortait le premier PC ; nous étions condamnés à terme, nous ne le savions pas, c'est pourquoi nous avons longtemps résisté. Et puis, devant l'évidence, nous nous sommes rendus ; et aujourd'hui, si nous n'avons pas complètement remisé nos TRS-80, nous travaillons beaucoup sur PC, vitesse d'horloge, entre autres, oblige.

 

 

II.

 

À nouveau des transferts, plus périlleux puisque nous ne bénéficions plus de la grande compatibilité au sein de la famille du Z-80, notre puce bien-aimée. Le bulletin de l'AUT* a très souvent décrit les façons de s'y prendre, par cable null-modem ou en créant sur TRS des disquettes lisibles sous PC. Supposons donc nos programmes préférés - et nous en possédons beaucoup , tant de fois remaniés et enrichis - transférés sur PC. Supposons également qu'ils soient écrits en Basic : la compatibilité est quasi-totale avec le GW-Basic, lorsque le logiciel TRSMSDOS.BAS a accompli son œuvre. Reste alors le problème des lignes numérotées que les programmateurs dits plus avancés dédaignent, profitant au passage pour nous traiter de pèquenots de la programmation, ou encore de pauvres bidouilleurs... Problème d'autant plus important que le DOS 5 nous donne le choix entre l'ancien GW-BASIC et un QBASIC que connaissaient déjà ceux qui avaient acquis le QUICK-BASIC 4.5 de Microsoft (lequel permet, en plus, la compilation).

Ce QBASIC supporte les programmes du type GWBASIC ou TRSBASIC, mais il est surtout écrit pour le travail en programmation (davantage) structurée. Mais comment passer, sans trop de peine, de nos anciens programmes venus du TRS et mille fois remis en chantier, à du QBASIC structuré ? La réponse semble être apportée par AERBASIC.

Il s'agit, comme l'écrit le concepteur, "d'un filtre pour fichier-source Basic ... qui réalise sept à onze opérations en une fois, toutes préliminaires à la reprise de vieux programmes Basic illisibles, pour modernisation. Ceci est notamment utile pour convertir du GwBasic ou du Basica vers le nouveau QBasic de Ms-Dos 5".

 

 

III. Aerbasic

 

Ce programme peut être obtenu (dans une version légèrement bridée) auprès d'une maison du Nord de la France (DP TOOL Club, B.P. 745, 59657 Villeneuve d'Ascq**), spécialisée dans la distribution de programmes free- et shareware. Soit dit en passant, je trouve ses animateurs à la hauteur, non dépourvus d'humour (dans leurs commentaires des programmes qu'ils proposent), et d'un rare sérieux. Réclame non payée, revenons à AERBASIC, et voyons ce qu'il fait, à partir d'un exemple très court et très trivial.

Soit un programme TRS appelé ZOOBUTOR/BAS. Je l'ai jadis utilisé pour expliquer à des enseignants débutants (en informatique) le fonctionnement de RND (ou de RANDOM, ou de RANDOMIZE TIMER), et de ce qu'on nomme le tirage avec ou sans remise, pour la création "à l'infini" de textes, à partir d'une structure répétitive. C'est une idée bête comme chou, et vous savez qu'elle est par exemple à l'origine de l'ouvrage de Raymond Queneau, Cent mille milliards de poèmes. Dans le cas qui nous occupe, on obtient un "poème" de seize "vers", dont seuls les deux premiers réapparaissent immanquablement, soit A(1) et A(2).

Transférons ce programme sur PC. Avant le passage à la moulinette de $ASCTOPC.COM***, on obtient quelque chose comme ceci (je ne donne qu'un petit morceau) :

 

 

IV. Programme "brut"

 


10 REM ZOO CrÜation alÜatoire, sur poïme de M. Butor 07/24/86
30 CLS :CLEAR :DEFSTR A-H:DEFINT I-T
40 DIM A(2),B(14),C(14),L(14),M(14)
50 A(1)="A la tombÜe de la nuit":A(2)="Quand se sont refermÜes les grilles"
60 FOR I=1 TO 14:READ B(I):NEXT
70 FOR I=1 TO 14:READ C(I):NEXT
80 FOR J1=1 TO 14:L(J1)=J1:NEXT
90 FOR J2=1 TO 14:M(J2)=J2:NEXT
100 PRINT TAB(30)"ZOO":PRINT TAB(30) STRING$(9,"="):PRINT
110 PRINT A(1):PRINT A(2)
120 FOR I=1 TO 14
130 J1= RND(14):IF L(J1)<1 THEN 130
140 J2= RND(14):IF M(J2)<1 THEN 140
150 IF J1=14 THEN D1="rßvent " ELSE D1="rßve "
160 IF J2=13 THEN D2="aux " ELSE D2="Ù "
170 PRINT B(J1);" ";D1;D2;C(J2)
180 L(J1)=0:M(J2)=0
190 NEXT I
200 PRINT :PRINT TAB(40)"Autre crÜation ?": GOSUB 10000
210 IF H<>"O" THEN 220 ELSE CLS : GOTO 80
220 CLS :END
10000 IF INKEY$ <>"" THEN 10010
10010 H= INKEY$ :IF H="" THEN 10010 ELSE IF ASC(H)>95 THEN H= CHR$( ASC(H)-32)
10020 RETURN
10100 GOSUB 10000:IF ASC(H)>57 THEN S= ASC(H)-55 ELSE S= ASC(H)-48 10110 RETURN

[ Ne pas s'inquiéter, le programme $ASCTOPC.COM rétablira toutes les lettres accentuées dans leur dignité !]

Voici alors le moment venu de soumettre ZOOBUTOR (au préalable sauvé sous forme ASCII) à AERBASIC, qui va ôter tous les numéros de ligne dont on peut se passer, signalant au passage les erreurs de programmation, s'il y en a (ici encore, je ne reproduis que des fragments).

 

 

V. Passage par Aerbasic

 

REM ZOO Création aléatoire, sur poème de M. Butor 07/24/86

 

CLS CLEAR DEFSTR A-H DEFINT I-T

DIM A(2),B(14),C(14),L(14),M(14)

FOR I=1 TO 14 READ B(I) NEXT

FOR I=1 TO 14 READ C(I) NEXT

'<-- 210: GOTO; 80 FOR J1=1 TO 14 L(J1)=J1 NEXT FOR J2=1 TO 14 M(J2)=J2 NEXT

'<-- 130: GOTO; 130 J1= RND(14) IF L(J1)<1 THEN GOTO 130 END IF

'<-- 140: GOTO; 140 J2= RND(14) GOSUB 10000 IF H<>"O" THEN GOTO 220 ELSE CLS GOTO 80 END IF

'<-- 210: GOTO; 220 CLS END [Aerbasic signale des erreurs]

'<-- 200: GOSUB; 10100: GOSUB; 10000 IF INKEY$ <>"" THEN GOTO 10010 END IF '<-- 10000: GOTO; 10010: GOTO; 10010 H= INKEY$ IF H="" THEN GOTO 10010 ELSE IF ASC(H)>95 THEN H= CHR$( ASC(H)-32) END IF END IF

RETURN 'Clot la subOUINON: 10000 GOSUB 10000 IF ASC(H)>57 THEN S= ASC(H)-55 ELSE S= ASC(H)-48 END IF RETURN 'Clôt la subOUINON: 10000

 

 

VI. Dernier toilettage : Butor.Bas

 

Il reste à remplacer un certain nombre de numéros de lignes qui demeurent obligatoires pour le bon fonctionnement du programme, par des étiquettes autant que faire se peut parlantes : ce dernier toilettage demande une dizaine de minutes. Le résultat final peut être celui-ci, par exemple :

 

REM ZOO Création aléatoire, sur poème de M. Butor 07/24/86

 

CLS : DEFSTR A-H: DEFINT I-T

DIM A(2), B(14), C(14), L(14), M(14)

RANDOMIZE TIMER

A(1) = "A la tombée de la nuit" A(2) = "Quand se sont refermées les grilles"

FOR I = 1 TO 14 : READ B(I) : NEXT

FOR I = 1 TO 14 : READ C(I) : NEXT

LABOUCLE:

FOR J1 = 1 TO 14 : L(J1) = J1 : NEXT

FOR J2 = 1 TO 14 : M(J2) = J2 : NEXT

PRINT TAB(30); "ZOO": PRINT TAB(30); STRING$(9, "=")

PRINT : PRINT A(1): PRINT A(2) FOR I = 1 TO 14

NOUVEAUTRI: J1 = INT(RND * 14) + 1 IF L(J1) < 1 THEN GOTO NOUVEAUTRI

END IF

TRI2:

J2 = INT(RND * 14) + 1

IF M(J2) < 1 THEN GOTO TRI2

END IF

IF J1 = 14 THEN D1 = "rêvent " ELSE D1 = "rêve "

END IF

IF J2 = 13 THEN D2 = "aux " ELSE D2 = "à "

END IF

PRINT B(J1); " "; D1; D2;

IF I = 14 THEN PRINT C(J2) + "." ELSE PRINT C(J2)

END IF

L(J1) = 0: M(J2) = 0 NEXT I

PRINT : PRINT TAB(60); "Autre création ?" GOSUB OUINON

IF H <> "O" THEN GOTO CESTLAFIN ELSE CLS : GOTO LABOUCLE

END IF

CESTLAFIN:

CLS : END

DATA L'éléphant,Le rhinocéros,L'hippopotame,La girafe,Le dromadaire,Le bison,Le lion,Le tigre de Sibérie,L'ours polaire,La panthère,Le gorille,L'aigle,Le phoque,Les enfants

DATA son grand troupeau,ses troncs d'arbre,des lacs clairs,des frondaisons de fougères,des oasis tintants,un océan d'herbes,des craquements dans les feuilles,des traces dans la neige

DATA des cascades poissonneuses,des pelages passant dans les rayons de lune,des bananiers croulant de leurs fleurs violettes,des coups de vent dans des canyons de nuages,archipels mouvants de la banquise distinguée,la plage

OUINON:

IF INKEY$ <> "" THEN GOTO ATTENTECLAVIER

END IF

ATTENTECLAVIER:

H = INKEY$ IF H = "" THEN GOTO ATTENTECLAVIER ELSE IF ASC(H) > 95 THEN H = CHR$(ASC(H) - 32)

END IF

END IF

RETURN

 

 

VII.

 

Le lecteur attentif aura remarqué que ce programme ne gère pas toutes les situations susceptibles de se présenter. Ainsi du groupe nominal sujet "Les enfants", qui n'entraîne pas le passage au pluriel du groupe complément indirect "son grand troupeau", lorsque C(1) est aléatoirement choisi pour accompagner B(14). Rectifier le tir peut constituer, d'ailleurs, un petit exercice de programmation dont je vous laisse le soin. Mon objectif était ici de montrer ce que peut faire AerBasic pour redonner une nouvelle jeunesse à nos vieux programmes : je souhaite ainsi avoir rendu quelques services, en leur donnant des idées pour meubler leurs loisirs d'hiver, à ceux qui avaient définitivement rangé leurs disquettes (voire cassettes) TRS !

* AUT : Association des Utilisateurs Tandy. Association dissoute.

** DPTool : a fermé boutique. Ne manquait pas d'intérêt, pourtant. Mais voilà, Internet pour tous l'a tué(e).

*** Je puis fournir tous les programmes dont il est question, ici.

Depuis Windows 98, Microsoft ne livre plus QBasic. Qu'à cela ne tienne, vous pouvez le charger (en PJ)

Pour télécharger TRS-Cross, qui permet les transferts (données/programmes) du TRS-80 au PC (et inversement), voir PJ.

 

 

Pièce(s) jointe(s):
Télécharger ce fichier (qbasic.zip)QBasic[ ]295 Ko8 Téléchargements
Télécharger ce fichier (trscross.zip)TRS-CROSS[ ]33 Ko5 Téléchargements