10 ' ****************************
20 ' * AMSMOTS par NANNI SERGE  *
30 ' **                        **
40 ' ** SUR CPC 464 MONOCHROME **
50 ' **       le 13/02/86      **
60 ' ****************************
70 '
80 MODE 2:LG=0
90 LOCATE 25,2:PRINT"SELECTION DES COULEURS DE TRAVAIL"
100 LOCATE 10,5:INPUT "COULEUR DU PAPIER (0-26): ";CP
110 LOCATE 10,7:INPUT "COULEUR DU STYLO  (0-26): ";CS 
120 LOCATE 10,9:INPUT "COULEUR DU BORD   (0-26): ";CB
130 INK 0,CP:INK 1,CS:PEN 1:PAPER 0:BORDER CB
140 MODE 2
150 GOSUB 2690
160 PRINT:PRINT:PRINT" CHARGEMENT DU PROGRAMME MACHINE."
170 MEMORY &3FFF:LOAD "!AMSCOD.BIN"
180 MODE 2
190 POKE &A095,&C9
200 CALL &A060
210 A=1:B=1:DIM Z(200)
220 LOCATE A,B:PRINT CHR$(233)
230 Z$=INKEY$:IF Z$="" THEN 230
240 IF Z$=CHR$(240) THEN GOSUB 420
250 IF Z$=CHR$(241) THEN GOSUB 460
260 IF Z$=CHR$(242) THEN GOSUB 500
270 IF Z$=CHR$(243) THEN GOSUB 540
280 IF Z$=CHR$(13) THEN GOSUB 630
290 IF INKEY(16)=0 THEN GOSUB 700
300 IF INKEY(79)=0 THEN GOSUB 820
310 IF INKEY(9)=0 THEN GOSUB 1170
320 IF Z$=CHR$(2) THEN LO=LO+1:IF LO=1 THEN INS=1 ELSE INS=0:LO=0
330 IF Z$=CHR$(9) THEN GOSUB 1250
340 IF Z$=CHR$(5) THEN GOSUB 1350
350 IF Z$=CHR$(18) THEN GOSUB 1060:LOCATE A,B:PRINT CHR$(233)
360 IF Z$=CHR$(19) THEN GOSUB 960:LOCATE A,B:PRINT CHR$(233)
370 IF Z$=CHR$(1) THEN GOSUB 2020:LOCATE A,B:PRINT CHR$(233)
380 IF Z$=CHR$(3) THEN GOSUB 2470
390 IF ASC(Z$)=127 THEN 410
400 IF ASC(Z$)<32 OR ASC(Z$)>137 THEN 410 ELSE GOSUB 580
410 GOTO 230
420 IF PEEK(&4000+(A+(((B+P)-1)*80)))=0 THEN LOCATE A,B:PRINT " " ELSE LOCATE A,B:PRINT CHR$(PEEK(&4000+(A+(((B+P)-1)*80))))
430 B=B-1:IF B=0 THEN B=1:P=P-1:IF P<0 THEN P=0 ELSE LOCATE 1,1:GOSUB 1090
440 LOCATE A,B:PRINT CHR$(233)
450 RETURN
460 IF PEEK(&4000+(A+(((B+P)-1)*80)))=0 THEN LOCATE A,B:PRINT " " ELSE LOCATE A,B:PRINT CHR$(PEEK(&4000+(A+(((B+P)-1)*80))))
470 B=B+1:IF B=26 THEN B=25:P=P+1:IF (B+P)>200 THEN P=P-1 ELSE LOCATE 1,1:GOSUB 980
480 LOCATE A,B:PRINT CHR$(233)
490 RETURN
500 IF PEEK(&4000+(A+(((B+P+LG)-1)*80)))=0 THEN LOCATE A,B:PRINT " " ELSE LOCATE A,B:PRINT CHR$(PEEK(&4000+(A+(((B+P+LG)-1)*80))))
510 A=A-1:IF A=0 THEN A=1
520 LOCATE A,B:PRINT CHR$(233)
530 RETURN
540 IF PEEK(&4000+(A+(((B+P+LG)-1)*80)))=0 THEN LOCATE A,B:PRINT " " ELSE LOCATE A,B:PRINT CHR$(PEEK(&4000+(A+(((B+P+LG)-1)*80))))
550 A=A+1:IF A=SO THEN A=79
560 LOCATE A,B:PRINT CHR$(233)
570 RETURN
580 IF INS=1 THEN GOSUB 2100
590 LOCATE A,B:PRINT Z$:POKE(&4000+(A+(((B+P+LG)-1)*80))),ASC(Z$)
600 A=A+1:IF A=80 THEN A=79
610 LOCATE A,B:PRINT CHR$(233)
620 RETURN
630 IF PEEK(&4000+(A+(((B+P+LG)-1)*80)))=0 THEN LOCATE A,B:PRINT" " ELSE LOCATE A,B:PRINT CHR$(PEEK(&4000+(A+(((B+P+LG)-1)*80))))
640 IF B<25 THEN LOCATE 80,B:PRINT"<"
650 A=1:B=B+1:IF B=26 THEN B=25:P=P+1:IF (B+P)>199 THEN P=P-1 ELSE LOCATE 1,1:Z(B+P)=1:GOSUB 980
660 Z(B+P-1)=1
670 LOCATE A,B:PRINT CHR$(233)
680 RETURN
690 ' ----- TOUCHE [ CLR ] ----
700 XS$=HEX$(&4000+(A+((B+P+LC-1)*80)))
710 IF RIGHT$(XS$,2)="FF" THEN PRINT CHR$(7):RETURN
720 POKE &A06E,VAL("&"+RIGHT$(XS$,2)):POKE &A06F,VAL("&"+LEFT$(XS$,2))
730 POKE &A071,VAL("&"+RIGHT$(XS$,2))+1:POKE &A072,VAL("&"+LEFT$(XS$,2))
740 XS=VAL("&"+XS$)+(80-A):POKE &A078,VAL("&"+RIGHT$(HEX$(XS),2))
750 XA$=HEX$(&4000+(1+((B+P+LC-1)*80)))
760 POKE &A07F,VAL("&"+RIGHT$(XA$,2)):POKE &A080,VAL("&"+LEFT$(XA$,2))
770 LOCATE 1,B
780 CALL &A06D
790 LOCATE A,B:PRINT CHR$(233)
800 RETURN
810 ' ---- TOUCHE [ DEL ] -----
820 IF A=1 THEN RETURN
830 SX$=HEX$(&4000+((A+((B+P-1)*80))-1))
840 IF RIGHT$(SX$,2)="FF" THEN PRINT CHR$(7):RETURN
850 POKE &A06E,VAL("&"+RIGHT$(SX$,2)):POKE &A06F,VAL("&"+LEFT$(SX$,2))
860 POKE &A071,VAL("&"+RIGHT$(SX$,2))+1:POKE &A072,VAL("&"+LEFT$(SX$,2))
870 SX=VAL("&"+SX$)+(80-A):POKE &A078,VAL("&"+RIGHT$(HEX$(SX),2))
880 SA$=HEX$(&4000+(1+((B+P-1)*80)))
890 POKE &A07F,VAL("&"+RIGHT$(SA$,2)):POKE &A080,VAL("&"+LEFT$(SA$,2))
900 LOCATE 1,B
910 CALL &A06D
920 A=A-1:IF A=0 THEN A=1
930 LOCATE A,B:PRINT CHR$(233)
940 RETURN
950 ' ---- AUTRE ECRAN BAS----
960 P=P+25:IF P>175 THEN P=175:B=25:RETURN
970 LOCATE 1,1:IF CZ=0 THEN A=1:B=1
980 POKE &A031,VAL("&"+RIGHT$(HEX$(&4000+(1+(((1+P+LG)-1)*80))),2))
990 POKE &A032,VAL("&"+LEFT$(HEX$(&4000+(1+(((1+P+LG)-1)*80))),2))
1000 POKE &A041,VAL("&"+LEFT$(HEX$(&4000+(1+(((1+P+LG)-1)*80))+1999),2))
1010 POKE &A046,VAL("&"+RIGHT$(HEX$(&4000+(1+(((1+P+LG)-1)*80))+1999),2))
1020 CALL &A030
1030 FOR i=1 TO 24:IF Z(i+P+LG)=1 THEN LOCATE 80,i:PRINT"<":NEXT i
1040 RETURN
1050 ' --- AUTRE ECRAN HAUT ---
1060 P=P-25:IF P<0 THEN P=0:RETURN
1070 LOCATE 1,1:A=1:B=1
1080 LOCATE 1,1:IF CZ=0 THEN A=1:B=1
1090 POKE &A031,VAL("&"+RIGHT$(HEX$(&4000+(1+(((1+P+LG)-1)*80))),2))
1100 POKE &A032,VAL("&"+LEFT$(HEX$(&4000+(1+(((1+P+LG)-1)*80))),2))
1110 POKE &A041,VAL("&"+LEFT$(HEX$(&4000+(1+(((1+P+LG)-1)*80))+1999),2))
1120 POKE &A046,VAL("&"+RIGHT$(HEX$(&4000+(1+(((1+P+LG)-1)*80))+1999),2))
1130 CALL &A030
1140 FOR i=1 TO 24:IF Z(i+P+LG)=1 THEN LOCATE 80,i:PRINT"<":NEXT i
1150 RETURN
1160 ' ------- OPTIONS -------
1170 PAPER 1:PEN 0:LOCATE 1,1:PRINT" OPTION CHOISIE : ";
1180 W$=INKEY$:IF W$="" THEN 1180
1190 IF W$="S" OR W$="s" THEN 1410
1200 IF W$="C" OR W$="c" THEN 1610
1210 IF W$="Q" OR W$="q" THEN PAPER 0:PEN 1:MODE 2:END
1220 IF W$="L" OR W$="l" THEN 1830
1230 RETURN
1240 ' --- INSERTION LIGNE --- __
1250 CZ=1:BW$=HEX$(&4000+(1+(B+P+LG-1 )*80))
1260 IF RIGHT$(BW$,2)="00" THEN PRINT CHR$(7):RETURN
1270 POKE &A01B,VAL("&"+LEFT$(BW$,2)) :POKE &A020,VAL("&"+RIGHT$(BW$,2))-1
1280 CALL &A010
1290 FOR i=(&4000+(1+(B+P+LG-1)*80)) TO (&4000+((B+P+LG)*80)):POKE i,0:NEXT i
1300 GOSUB 1080
1310 A=1:LOCATE A,B:PRINT CHR$(233)
1320 CZ=0
1330 RETURN
1340 ' --- EFFACEMENT LIGNE ----
1350 CZ=1:AZ$=HEX$(&4000+(1+(B+P+LG-1)*80)):AW$=HEX$(&4000+(1+((B+P+LG)*80)))
1360 POKE &A001,VAL("&"+RIGHT$(AZ$,2)):POKE &A002,VAL("&"+LEFT$(AZ$,2))
1370 POKE &A004,VAL("&"+RIGHT$(AW$,2)):POKE &A005,VAL("&"+LEFT$(AW$,2))
1380 CALL &A000
1390 GOSUB 1080
1400 A=1:LOCATE A,B:PRINT CHR$(233):CZ=0:RETURN
1410 ' SAUVEGARDE NON DOCUMENT
1420 LOCATE 1,1:INPUT"QUEL EST LE NOM DU FICHIER : ";QW$
1430 LOCATE 1,1:PRINT"APPUYEZ SUR <PLAY> ET <REC> PUIS SUR UNE TOUCHE."
1440 X$=INKEY$:IF X$="" THEN 1440
1450 PAPER 0:PEN 1
1460 OPENOUT "!"+QW$
1470 FOR i=1 TO 199
1480 IF Z(I)=0 THEN 1540
1490 FOR N=1 TO 80
1500 FR$=CHR$(PEEK(&4000+(N+((I-1)*80))))
1510 IF PEEK(&4000+(N+(I-1)*80))=0 THEN R$=R$+" " ELSE R$=R$+FR$
1520 NEXT N:PRINT #9,R$
1530 R$=""
1540 NEXT I
1550 CLOSEOUT
1560 FOR N=1 TO 79
1570 IF PEEK(&4000+N)=0 THEN LOCATE N,1:PRINT" " ELSE LOCATE N,1:PRINT CHR$(PEEK(&4000+N))
1580 NEXT N
1590 LOCATE A,B:PRINT CHR$(233)
1600 RETURN
1610 ' -- CHARGEMENT DOCUMENT --
1620 PAPER 1:PEN 0:CALL &A060
1630 LOCATE 1,1:INPUT"QUEL EST LE NOM DU FICHIER : ";QW$
1640 LOCATE 1,1:PRINT"APPUYEZ SUR <PLAY> PUIS SUR UNE TOUCHE,"
1650 X$=INKEY$: IF X$="" THEN 1650
1660 PAPER 0:PEN 1
1670 OPENIN "!"+QW$
1680 LINE INPUT#9,T$
1690 Z=Z+1:Z(Z)=1
1700 FOR i=1 TO 79
1710 ER$=MID$(T$,i,1)
1720 IF ER$="" THEN 1770
1730 E=ASC(ER$)
1740 POKE (&4000+(I+((Z-1)*80))),E
1750 IF Z>25 THEN 1770
1760 LOCATE i,Z:PRINT CHR$(E)
1770 NEXT i
1780 T$="":IF EOF=-1 THEN 1800
1790 GOTO 1680
1800 LOCATE A,B:PRINT CHR$(233)
1810 RETURN
1820 ' - LISTING SUR IMPRIMANTE 
1830 LOCATE 1,1:PRINT"VOULEZ VOUS UNE PAUSE ENTRE CHAQUE PAGE (O/N)?"
1840 RE$=INKEY$: IF RE$="" THEN 1840 ELSE IF INSTR("ONon",RE$)=0 THEN 1840
1850 IF RE$="O" OR RE$="o" THEN PAU=1 ELSE PAU=0
1860 LOCATE 1,1:INPUT"COMBIEN DE LIGNE DEVRA AVOIR UNE PAGE     ";PW
1870 LOCATE 1,1:PRINT"SI L'IMPRIMANTE EST PRETE, APPUYEZ SUR UNE TOUCHE."
1880 PAPER 0:PEN 1
1890 X$=INKEY$:IF X$="" THEN 1890
1900 FOR i=1 TO 199
1910 IF Z(i)=0 THEN 1960
1920 IF Z(i)=PW THEN PW=PW+PW:LOCATE 1,1:PRINT"APPUYEZ SUR [ ESPACE ]";:SPACE$(20):WHILE INKEY(47)=0:WEND
1930 FOR N=1 TO 80
1940 IF PEEK(&4000+(N+((i-1)*80)))=0 THEN PRINT#8," "; ELSE PRINT#8,CHR$(PEEK(&4000+(N+((i-1)*80))));
1950 NEXT N:PRINT#8,CHR$(13)
1960 NEXT i
1970 FOR N=1 TO 79
1980 IF PEEK(&4000+N)=0 THEN LOCATE N,1:PRINT" " ELSE LOCATE N,1:PRINT CHR$(PEEK(&4000+N))
1990 NEXT N:lOCATE A,B:PRINT CHR$(233)
2000 RETURN
2010 ' *** LIGNE,COLONNE,MODE **
2020 PAPER 1:PEN 0
2030 LOCATE 1,1:PRINT"LIGNE : " ;B+P;" COLONNE: ";A;:IF INS=1 THEN PRINT"   MODE INSERTION"
2040 PAPER 0:PEN 1
2050 DD$=INKEY$:IF DD$= "" THEN 2050
2060 FOR N=1 TO 79
2070 IF PEEK(&4000+(N+(P*80)))=0 THEN LOCATE N,1:PRINT" " ELSE LoCATE N,1:PRINT CHR$(PEEK(&4000+(N+(P*80))))
2080 NEXT N:RETURN
2090 ' ***** mode insertion ***
2100 CX$=HEX$(&4000+(A+(((B+P)-1)*80)))
2110 IF RIGHT$(CX$,2)="00" THEN PRINT CHR$(7):RETURN
2120 CV=VAL("&"+CX$)+(80-A)
2130 IF RIGHT$(HEX$(CV),2)="00" THEN CV=CV-1
2140 POKE &A097, VAL("&"+RIGHT$(HEX$(CV),2)):POKE &A098,VAL("&"+LEFT$(HEX$(CV),2))
2150 POKE &A09A,VAL("&"+RIGHT$(HEX$(CV),2))-1:POKE &A09B,VAL("&"+LEFT$(HEX$(CV),2))
2160 POKE &A0A1,VAL("&"+RIGHT$(CX$,2)) -1
2170 CA$=HEX$(&4000+(1+((B+P-1)*80)))
2180 POKE &A07F,VAL("&"+RIGHT$(CA$,2)):POKE &A080,VAL("&"+LEFT$(CA$,2))
2190 LOCATE 1,B
2200 CALL &A096:CALL &A07C
2210 RETURN
2220 ' ***** ACCENTS *****
2230 SYMBOL AFTER 125
2240 SYMBOL 126,&60,&10,&3C,&66,&7E,&60,&3C
2250 KEY 135,CHR$(133)
2260 SYMBOL 133,&6,&8,&3C,&66,&7E,&60,&3C
2270 KEY 128,CHR$(126)
2280 SYMBOL 128,&60,&10,&78,&C,&7C,&CC,&76
2290 KEY 129,CHR$(128)
2300 SYMBOL 129,&0,&0,&3C,&66,&60,&3E,&18,&18
2310 KEY 132,CHR$(128)
2320 SYMBOL 130,&80,&8,&66,&66,&66,&66,&3E
2330 KEY 137,CHR$(130)
2340 SYMBOL 131,&18,&24,&3C,&66,&7C,&60,&3C
2350 KEY 134,CHR$(131)
2360 SYMBOL 132,&1C,&32,&38,&6C,&38,&10,&80,&60
2370 KEY 131,CHR$(132)
2380 SYMBOL 137,&18,&24,&3C,&66,&66,&66,&3C
2390 KEY 136,CHR$(137)
2400 SYMBOL 134,&18,&24,&66,&66,&66,&66,&3E
2410 KEY 133,CHR$(134)
2420 SYMBOL 135,&18,&24,&78,&c,&7C,&CC,&76
2430 KEY 130,CHR$(135)
2440 SYMBOL 136,&18,&24,&38,&18,&18,&18,&3C
2450 KEY 138,CHR$(136)
2460 RETURN
2470 ' PRESENTATION DES OPTIONS
2480 CLS
2490 PAPER 1:PEN 0
2500 PRINT" OPTIONS DISPONIBlES SUR LE LOGICIEL"
2510 PAPER 0:PEN 1
2520 PRINT:PRINT"              **** GESTION DES PEFIPHERIQUES ****"
2530 PRINT:PRINT"   --  [ COPY ]   Acces aux differentes options  --"
2540 PRINT"   --  [ C ]      Chargement d'un document       --"
2550 PRINT"   --  [ S ]      Sauvegarde d'un document       --"
2560 PRINT"   --  [ L ]      Listing sur imprimante         --"
2570 PRINT"   --  [ Q ]      Quitter le logiciel            --"
2580 PRINT:PRINT"              **** OPTIONS DE TRAVAIL (acces direct.) ****"
2590 PRINT:PRINT"   --  [ CTRL+A ] Position du curseur (Ligne,colonne) et Mode   --"
2600 PRINT"   --  [ CTRL+B ] Mode insertion                                --"
2610 PRINT"   --  [ CTRL+I ] Insertion ligne                               --"
2620 PRINT"   --  [ CTRL+E ] Effacement ligne                              --"
2630 PRINT"   --  [ CTRL+S ] Page suivante                                 --"
2640 PRINT"   --  [ CTRL+R ] Page precedente                               --"
2650 PRINT"   --  [ CTRL+C ] Affichage des options                         --"
2660 PRINT:PRINT:PRINT"                 APPUYEZ SUR [ ESPACE ] POUR CONTINUER"
2670 WHILE INKEY(47):WEND
2680 GOSUB 970:Z$=CHR$(255):RETURN
2690 ' **** CLAVIER ****
2700 PRINT:PRINT:PRINT"       -- VOULEZ VOUS AVOIR LES LETTRES AVEC ACCENTS (O/N) ? "
2710 f$=INKEY$:IF f$="" THEN 2710 ELSE IF INSTR("ONon",f$)=0 THEN 2710
2720 IF f$="N" OR f$="n" THEN MODE 2:RETURN
2730 GOSUB 2220:MoDE 2:RETURN
