pam pour Sharp PC1500 ( pas de programme )
tir du magazine Hebdogiciel N42

	L'utilisateur de ce programme peut avoir une Mev CE151 mais il dimensionnera A$(39)*80 au lieu de 99.
	Ce programme est bas sur le fait que, pour obtenir un bon dessin anim il faut le crer image par image, et repasser ensuite le tout  la vitesse dsire. Ici, une image est reprsente par la variable A$ qui contient 40 caractres hexadcimaux, 7C 2B 7F 5A etc...
	Une image est donc une matrice de 7 points.
	Tout se fait en mode DEF et par 3 touches INKEY afin de ne pas perturber l'cran lorque l'on dessine. On utilise le principe abscisse/ordonne ( abs. de 1  40, ord. de 1  7 ).
	Dessiner point par point est long et fastidieux, mais le programme comprend 10 routines qui facilitent grandement le travail : monte ou descente du dessin en cours, totalement ou partiellement de la droite vers la gauche ou l'inverse. Matrice de contrle avec transfert total ou partiel, droite gauche ou l'inverse, talonnage 5 par 5 pour le repre d'ascisses sur la matrice de contrle, etc...
	Un tableau de ces routines est donn. La plupart des routines sont sonorises diffremment.
	Avec l'imprimante CE150, on peut faire des dessins de grande taille. Lorsque le programme PAM est entr, on merge le programme DES. C'est une sorte de HARDCOPY, voir l'exemple du dessin.
Important : bien que DES soit merg, on peut modifier n'importe quelle ligne des deux programmes sans aucun problme car ils n'ont aucun numro de ligne en commun.
	Le dessin peut tre d'abord fait  la main puis entr par PAM. Lorsque tout est termin on modifie la ligne 2140 en rajoutant GOSUB L avant NEXT I. DEF SPACE et la CE150 font le reste.
	B tant la variable, indice de A$, il convient de la mettre  la bonne valeur. Si un dessin comprend deux parties de 12 variables chacune, comme c'est le cas dans l'exemple fourni en mode RUN on fera B=11 pour la premire partie ( A$(0)  A$(11)=12 matrices ).
	Le dessin que je vous ai envoy est en deux parties. Mais pourquoi pas 3 ou plus ! N'oubliez pas de rajouter GOSUB L quand votre dessin est termin.
	Avec le programme PAM+DES, il y a des tas d'astuces que je ne citerai pas, ce serait trop long. Mais n'importe quel utilisateur peut les dcouvrir autant que moi.
	On appellera M la matrice initiale de dessin et m la matrice de contrle.
= : dessine point par point suivant abscisse et ordonne ( abs. de 1  40 et ord. de 1  7 ). Pour supprimer un point, entrer abs. normale mais ord. ngatif. Ex : abs=20 et ord=-3. Matrice M. Rem : les touches INKEY -> et <- ont leur attente sonorise par un cliquetis.
A : fait monter le dessin dans M. Demande un WAIT pour la rapidit -> : monte  partir de la gauche. <- : monte  partir de la droite. * : stop  la monte et retour  =.
V : idem DEF A mais descente. -> et <- : idem mais descente
M : transfert de m dans M. galement superposition
S : efface le contenu de M. demande abscisse -> efface de gauche  droite. <- efface de droite  gauche
B : efface totalement m
J : cre un repre d'abscisse 5 par 5 dans m
X : trace une droite dans M. demande les 2 abscisses et l'ordonne
D : trace une droite verticale dans M. demande les deux ordonnes et l'abscisse
Z : trace une droite verticale dans M. demande les deux ordonnes et l'abscisse
SPACE : gnre le dessin anim dans m. * : stoppe le dessin anim et retour  =.
Remarque : le nombre inscrit  droite de l'cran est la valeur de B, soit celle de l'indice A$ disponible.

Programme principal ( pas de programme ) :
10 CLEAR:DIM A$(99)*80:B=0
100 "=":USING "****":WAIT 0:GCURSOR 45:GPRINT 127:GCURSOR 86:GPRINT 127:CURSOR 22:PRINT B:CURSOR 0:PRINT "       "
110 CURSOR 0:INPUT "abs=";A:A=A+45:PRINT "       "
120 CURSOR 0:INPUT "ord=";O:IF O>0 LET O=2^(O-1)
125 IF O<0 THEN 140
130 BEEP 1:GCURSOR A:GPRINT O OR POINT A:GOTO 100
140 BEEP 2:IF POINT A+O>=0 GCURSOR A:GPRINT POINT A-2^(ABS O-1)
150 GOTO 100
200 "A":BEEP 2,20,100:D=205:INPUT "wait";X
202 WAIT X:GOTO 1000
205 FOR I=46 TO 85:GOTO 210
206 FOR I=85 TO 46 STEP -1
210 GCURSOR I:GPRINT POINT I/2:IF INKEY$="*" THEN 100
220 NEXT I:GOTO 100
300 "V":BEEP 2,100,70:D=305:INPUT "wait";Y
302 WAIT Y:GOTO 1000
305 FOR I=46 TO 85:GOTO 310
306 FOR I=85 TO 46 STEP -1
310 P=POINT I*2:IF P>127 LET P=(P/2-64)*2
320 GCURSOR I:GPRINT P:IF INKEY$="*" THEN 100
340 NEXT I:GOTO 100
400 "M":D=410:GCURSOR 87:GPRINT 28;28;127:GCURSOR 130:GPRINT 127:CURSOR 0:INPUT "wait";W
405 WAIT W:GOTO 1000
410 FOR I=90 TO 129:GOTO 415
411 FOR I=129 TO 90 STEP -1
415 GCURSOR I:GPRINT POINT I OR POINT (I-44):IF INKEY$="*" THEN 100
520 NEXT I:GOTO 100
500 "N":FOR I=90 TO 129:GCURSOR I-44:GPRINT POINT I OR POINT(I-44):NEXT I:GOTO 100
600 "S":BEEP 1,180:D=620:INPUT "abs?";C
605 IF C>40 OR C<1 THEN 100
610 GOTO 1000
620 FOR I=46 TO 45+C:GOTO 630
621 FOR I=85 TO 45+C STEP -1
630 GCURSOR I:GPRINT 0:NEXT I:GOTO 100
650 "B":BEEP 5,9,40:FOR I=90 TO 129:GCURSOR I:GPRINT 0:NEXT I:GOTO 100
700 "J":BEEP 4:FOR I=94 TO 125 STEP 5:GCURSOR I:GPRINT 65 OR POINT I:NEXT I:GOTO 100
750 "X":BEEP 3,80:INPUT "ab1=";H,"ab2=";K,"ord=";J:J=2^(J-1)
760 FOR I=45+H TO 45+K:GCURSOR I:GPRINT J OR POINT I:NEXT I:GOTO 100
800 "D":BEEP 2,40:L=0:INPUT "or1=";H,"or2=";K
805 INPUT "abs=";J:J=J+45
810 FOR I=H-1 TO K-1:L=L+2:NEXT I:P=POINT J:GCURSOR J:GPRINT L OR P:GOTO 100
1000 L=ASC INKEY$:IF L<>8 AND L<>12 BEEP 1,10,9:GOTO 1000
1010 IF L=12 THEN D
1020 IF L=8 THEN D+1
2000 "Z":BEEP 1,150,30:BEEP 1,134,30:BEEP 1,120,30:BEEP 1,73,500
2010 FOR I=46 TO 85:H=POINT I:K=INT(H/16):H=H-16*K
2020 B$=CHR$(K+48+7*(K>9))+CHR$(H+48+7*(H>9))
2030 A$(B)=A$(B)+B$:NEXT I:B=B+1:BEEP 1,150:GOTO 100
2100 " ":INPUT "wait";W
2110 WAIT W:FOR I=0 TO B-1
2120 GCURSOR 0:GPRINT A$(I)
2130 IF INKEY$="*" THEN 100
2140 NEXT I:GOTO 2110

	Programme complmentaire  merger avec le programme principal pour crer des dessins de grande taille sur une ou plusieurs bandes papier.

Programme complmentaire ( pas de programme ) :
3000 "L":GRAPH:SORGN:E=1
3100 FOR X=0 TO 6:E=E*2:IF X=0 LET E=1
3200 FOR Y=0 TO 40:P=POINT Y AND E
3300 IF P<>0 LINE(Y*5,-X*5)-(Y*5+3,-X*5-4),0,0,B:LINE (Y*5,-X*5)-(Y*5+3,-X*5-4),0,0
3400 NEXT Y:NEXT X:GLCURSOR (0,-35)
3500 RETURN