10 ' LABELMATIC / disc - AMSTRAD CPC 
20 ' Michel Archambault - juillet 1985
30 ' Copyright ARCHAMBAULT/SORACOM 1985
40 GOSUB 51000
50 OPENOUT "BIDON"
60 MEMORY HIMEM-1
70 CLOSEOUT
100 MODE 0:BORDER 16:INK 0,1:INK 1,24:PAPER 11:CLS
110 LOCATE 1,7:PEN 12:PRINT "L A B E L--M A T I C"
120 LOCATE 1,13:PEN 4:PRINT "Editeur d'Etiquettes
130 LOCATE 2,21:PEN 0:PRINT "M.Achambault-1985"
140 FOR I=1 TO 3000:NEXT
200 MODE 1:BORDER 2:PAPER 0:PEN 1:CLS
210 DIM AD$(200,5):DEFINT A-Z
1000 'MENU PRINCIPAL
1010 CLS:INK 0,1:INK 1,24
1020 LOCATE 17,2:PEN 3:PRINT "M E N U":PEN 2:LOCATE 29,2:PRINT NF;"fiches":PEN 1
1030 LOCATE 6,4:PRINT "N = Nouveau fichier"
1040 LOCATE 6,6:PRINT "C = Chargement-lecture d'un fichier"
1050 LOCATE 6,8:PRINT "S = Suite d'un fichier chargé"
1060 LOCATE 6,10:PRINT "M = Modification du fichier"
1070 LOCATE 6,12:PRINT "E = Enregistrement sur disquette"
1080 LOCATE 6,14:PRINT "V = Visionner ou rechercher"
1090 LOCATE 6,16:PRINT "L = impression en LABELS"
1100 LOCATE 6,18:PRINT "G = impression GLOBALE(en lignes)"
1105 LOCATE 6,20:PRINT "T = TRI du Fichier"
1110 LOCATE 6,22:PRINT "F = Fin"
1150 TEX$="NCSMEVLGTF":GOSUB 50000
1160 ON K GOTO 2000,3000,4000,5000,6000,7000,8000,9000,12000,1500
1170 GOTO 1000
1500 'FINAL
1510 CLS:LOCATE 10,12:PRINT "VOUS POUVEZ ETEINDRE.":PRINT:PRINT
1520 END
2000 ' NOUVEAU FICHIER
2010 CLS
2020 LOCATE 6,4:PRINT "CREATION D'UN NOUVEAU FICHIER:"
2030 LOCATE 12,7:PRINT "( 200 fiches maxi )"
2040 LOCATE 3,12:PRINT "Nous effaçons le Fichier en Mémoire."
2050 LOCATE 15,14:PRINT "D'ACCORD ?"
2060 TEX$="ON":GOSUB 50000
2070 IF K=2 THEN 1000
2080 N=1:NF=0:GOSUB 10000
2090 NF=N:GOTO 1000
3000 ' CHARGEMENT FICHIER
3010 CLS:LOCATE 3,3:PRINT "LECTURE D'UN FICHIER SUR DISQUETTE:"
3020 LOCATE 16,10:PRINT "D'ACCORD ?"
3030 TEX$="ON":GOSUB 50000
3040 IF K=2 THEN 1000
3050 CLS:LOCATE 12,5:INPUT "NOM DU FICHIER: ",FICH$
3055 IF LEN(FICH$) >8 THEN FICH$=LEFT$(FICH$,8) ELSE IF FICH$="" THEN 3050
3060 LOCATE 3,8:PRINT "Dés que la Disquette est positionnée"
3070 LOCATE 11,10:PRINT "Pressez une Touche."
3080 WHILE INKEY$="":WEND
3090 OPENIN FICH$
3100 INPUT #9,NF,FICH$:FOR I=1 TO NF:FOR J=0 TO 5:INPUT #9,AD$(I,J):NEXT:NEXT
3110 CLOSEIN
3120 LOCATE 12,15:PRINT "Il-y-a";nf;"Fiches."
3130 FOR I=1 TO 2500:NEXT
3140 GOTO 1000
4000 'SUITE DE SAISIE
4010 CLS
4020 LOCATE 2,4:PRINT "SUITE DE SAISIE DU FICHIER EN MEMOIRE."
4030 LOCATE 16,10:PRINT "D'ACCORD ?":TEX$="ON":GOSUB 50000
4040 IF K=2 THEN 1000
4050 N=NF+1:GOSUB 10000:NF=N
4060 GOTO 1000
5000 'MODIFICATION
5010 CLS
5020 LOCATE 10,5:PRINT "MODIFICATION DE FICHE:"
5030 LOCATE 12,11:PRINT "( Pour FIN --> 0 )"
5040 LOCATE 12,9:INPUT "QUEL NUMERO ?",NR$
5050 IF NR$="0" THEN 1000
5060 NR=VAL(NR$):IF NR=0 OR NR>NF THEN PRINT CHR$(7):GOTO 5040
5070 N=NR:GOSUB 10000:GOTO 5000
6000 'ENREGISTREMENT
6010 CLS:LOCATE 7,5:PRINT "ENREGISTREMENT SUR DISQUETTE"
6020 LOCATE 16,10:PRINT "D'ACCORD ?":TEX$="ON":GOSUB 50000
6030 IF K=2 THEN 1000
6040 LOCATE 1,24:PRINT CHR$(18):LOCATE 8,10:PRINT "Préparez une Disquette"
6050 LOCATE 13,12:PRINT "non protègée."
6070 LOCATE 12,15:INPUT"NOM DU FICHIER: ",FICH$
6075 IF LEN(FICH$) >8 THEN FICH$=LEFT$(FICH$,8) ELSE IF FICH$="" THEN 6070
6080 OPENOUT FICH$
6090 WRITE #9,NF,FICH$:FOR I=1 TO NF:FOR J=0 TO 5:WRITE #9,AD$(I,J):NEXT:NEXT
6100 CLOSEOUT
6200 GOTO 1000
7000 'VISIONNER,RECHERCHER
7010 CLS:LOCATE 12,4:PRINT "VISION ou RECHERCHE:"
7020 LOCATE 6,8:PRINT "T = TOUS,depuis le début."
7030 LOCATE 6,10:PRINT "N = Numéro."
7035 LOCATE 6,12:PRINT "R = Recherche d'un Nom" 
7040 LOCATE 6,14:PRINT "F = FIN."
7050 TEX$="TNRF":GOSUB 50000
7060 ON K GOTO 7100,7200,7300,7500
7100 N=1:GOSUB 11000:GOTO 7000
7200 LOCATE 12,16:INPUT "QUEL NUMERO ?",NR$
7210 NR=VAL(NR$):IF NR=0 OR NR>NF THEN PRINT CHR$(7):GOTO 7200
7220 N=NR:GOSUB 11000:GOTO 7000
7300 LOCATE 12,17:LINE INPUT "NOM cherché:",NM$
7310 FOR N=1 TO NF
7320 IF INSTR(3,AD$(N,0),NM$)>0 THEN GOSUB 11000
7330 NEXT
7500 GOTO 1000
8000 ' IMPRESSION 2 LABELS / 80 col.
8010 CLS:LOCATE 8,5:PRINT "IMPRESSION DES ETIQUETTES:":LOCATE 16,11:PRINT "D'ACCORD ?"
8020 TEX$="ON":GOSUB 50000:IF K=2 THEN 1000
8030 CLS:LOCATE 7,5:PRINT "Deux Etiquettes par Rangée."
8040 LOCATE 12,8:INPUT "NUMERO DEPART: ",ND$:ND=VAL(ND$):IF ND=0 OR ND>=NF THEN PRINT CHR$(7):GOTO 8040
8050 LOCATE 14,12:PRINT "( D pour dernier )"
8060 LOCATE 13,10:INPUT "NUMERO FINAL: ",NA$:IF UPPER$(NA$)="D" THEN NA=NF:GOTO 8080
8070 NA=VAL(NA$):IF NA<=ND OR NA>NF THEN 8060
8080 LOCATE 10,17:PRINT "Vérifiez l'Imprimante,":LOCATE 9,19:PRINT "puis pressez une Touche."
8090 WHILE INKEY$="":WEND
8100 PRINT #8,CHR$(27)"R"CHR$(1);
8120 FOR I=ND TO NA STEP 2
8130 PRINT #8,SPC((37-LEN(AD$(I,0)))/2);AD$(I,0);SPC((43-LEN(AD$(I,0)))/2);SPC((40-LEN(AD$(I+1,0)))/2);AD$(I+1,0)
8140 PRINT #8,SPC((37-LEN(AD$(I,1)))/2);AD$(I,1);SPC((43-LEN(AD$(I,1)))/2);SPC((40-LEN(AD$(I+1,1)))/2);AD$(I+1,1)
8150 PRINT #8,SPC((37-LEN(AD$(I,2)))/2);AD$(I,2);SPC((43-LEN(AD$(I,2)))/2);SPC((40-LEN(AD$(I+1,2)))/2);AD$(I+1,2) 
8160 PRINT #8,SPC((36-LEN(AD$(I,3))-LEN(AD$(I,4)))/2);AD$(I,3);" ";AD$(I,4);SPC((42-LEN(AD$(I,3))-LEN(AD$(I,4)))/2);SPC((41-LEN(AD$(I+1,3))-LEN(AD$(I+1,4)))/2);AD$(I+1,3);" ";AD$(I+1,4)  
8170 PRINT #8,SPC(17);AD$(I,5);SPC(42);AD$(I+1,5)
8180 FOR J=1 TO 4:PRINT #8:NEXT
8190 NEXT
8200 GOTO 1000
9000 ' IMPRESSION GLOBALE
9010 CLS:LOCATE 12,5:PRINT "IMPRESSION GLOBALE:"
9020 LOCATE 12,7:PRINT "( ligne à ligne )":LOCATE 16,11:PRINT "D'ACCORD ?"
9030 TEX$="ON":GOSUB 50000:IF K=2 THEN 1000
9040 CLS:LOCATE 10,5:PRINT "Préparez l'Imprimante,":LOCATE 9,10:PRINT "puis pressez une Touche."
9050 WHILE INKEY$="":WEND
9060 PRINT #8,CHR$(27)"R"CHR$(1);SPC((80-LEN(FICH$))/2);FICH$
9070 PRINT #8:FOR I=1 TO NF
9090 PRINT #8,USING "###";I;:PRINT#8,"-";AD$(I,0);":";AD$(I,1);" ";AD$(I,2);" ";AD$(I,3);" ";AD$(I,4);" *Secteur ";AD$(I,5):NEXT
9100 PRINT #8,STRING$(78,"_")
9110 GOTO 1000
10000 ' SAISIE
10010 CLS:INK 0,13:INK 1,0
10020 LOCATE 10,2:PRINT "SAISIE FICHE NUMERO";N
10030 LOCATE 13,5:PRINT STRING$(22,CHR$(144));CHR$(151)
10040 LOCATE 8,5:LINE INPUT "NOM: ",AD$(N,0)
10050 IF LEN(AD$(N,0))>22 THEN AD$(N,0)=LEFT$(AD$(N,0),22):PRINT CHR$(7)
10060 LOCATE 13,7:PRINT STRING$(22,CHR$(144));CHR$(151)
10070 LOCATE 2,7:LINE INPUT "ADRESSE 1: ",AD$(N,1)
10080 IF LEN(AD$(N,1))>22 THEN AD$(N,1)=LEFT$(AD$(N,1),22):PRINT CHR$(7) 
10090 LOCATE 13,9:PRINT STRING$(22,CHR$(144));CHR$(151)
10100 LOCATE 2,9:LINE INPUT "ADRESSE 2: ",AD$(N,2)
10110 IF LEN(AD$(N,2))>22 THEN AD$(N,2)=LEFT$(AD$(N,2),22):PRINT CHR$(7)
10120 LOCATE 13,11:PRINT STRING$(5,CHR$(144));CHR$(151)
10130 LOCATE 2,11:INPUT "CODE POST: ",AD$(N,3)
10140 LOCATE 13,13:PRINT STRING$(16,CHR$(144));CHR$(151)
10150 LOCATE 6,13:LINE INPUT "VILLE: ",AD$(N,4)
10160 IF LEN(AD$(N,4))>16 THEN AD$(N,4)=LEFT$(AD$(N,4),16):PRINT CHR$(7)
10170 LOCATE 13,15:PRINT STRING$(3,CHR$(144));CHR$(151)
10180 LOCATE 4,15:INPUT "SECTEUR: ",AD$(N,5)   
10190 LOCATE 2,19:PRINT "SUITE (S) , ERREUR (E) , FIN (F) ?"
10200 TEX$="SEF":GOSUB 50000
10210 IF K=1 THEN N=N+1:GOTO 10000
10220 IF K=2 THEN 10000
10230 RETURN
11000 'AFFICHAGE
11010 CLS:INK 0,13:INK 1,0
11020 LOCATE 10,2:PRINT "VISION FICHE NUMERO";N
11030 LOCATE 8,5:PRINT "NOM: ";AD$(N,0)
11040 LOCATE 2,7:PRINT "ADRESSE 1: ";AD$(N,1)
11050 LOCATE 2,9:PRINT "ADRESSE 2: ";AD$(N,2)
11060 LOCATE 2,11:PRINT "CODE POST: ";AD$(N,3)
11070 LOCATE 6,13:PRINT "VILLE: ";AD$(N,4)
11080 LOCATE 4,15:PRINT "SECTEUR: ";AD$(N,5)
11090 LOCATE 8,19:PRINT "Précèdent , Suivant , Fin"
11100 TEX$="PSF":GOSUB 50000:ON K GOTO 11200,11300,11400
11200 N=N-1:IF N=0 THEN PRINT CHR$(7):N=1
11210 GOTO 11010
11300 N=N+1:IF N>NF THEN PRINT CHR$(7):N=NF
11310 GOTO 11010
11400 RETURN
12000 'TRI
12010 CLS:LOCATE 13,4:PRINT "TRI DU FICHIER:":LOCATE 16,11:PRINT "D'ACCORD ?":TEX$="ON":GOSUB 50000:IF K=2 THEN 1000
12020 CLS:LOCATE 13,4:PRINT "CRITERE DU TRI:":LOCATE 9,8:PRINT "N = NOM"
12030 LOCATE 9,10:PRINT "A = ADRESSE 1":LOCATE 9,12:PRINT "L = Lieu-dit (adresse 2)":LOCATE 9,14:PRINT "C = Code postal"
12040 LOCATE 9,16:PRINT "V = VILLE":LOCATE 9,18:PRINT "S = SECTEUR"
12050 TEX$="NALCVS":GOSUB 50000:T=K-1:LOCATE 16,21:PRINT "Patience..."
12060 F=0:FOR J=1 TO NF
12070 IF AD$(J,T)>=AD$(J-1,T) THEN 12090
12080 FOR R=0 TO 5:AD$(0,R)=AD$(J,R):AD$(J,R)=AD$(J-1,R):AD$(J-1,R)=AD$(0,R):NEXT:F=1
12090 NEXT
12100 IF F=1 THEN 12060 
12110 GOTO 1000  
50000 'REPONSE A UN MENU
50010 LT=LEN(TEX$):R$=""
50020 LOCATE 15-LT,24:PRINT "Réponse (";
50030 FOR I=1 TO LT-1
50040 PRINT MID$(TEX$,I,1);",";:NEXT
50050 PRINT RIGHT$(TEX$,1);")";CHR$(154);CHR$(243);CHR$(207)
50060 TEX$=UPPER$(TEX$)
50070 WHILE R$="":R$=INKEY$:WEND
50080 R$=UPPER$(R$):K=INSTR(TEX$,R$)
50090 IF K=0 THEN R$="":PRINT CHR$(7);:GOTO 50070
50100 RETURN
51000 ' AZERTY ACCENTUE
51010 SYMBOL AFTER 8
51020 SYMBOL 64,96,48,120,12,124,204,118,0
51030 SYMBOL 91,0,56,108,56,0,0,0,0 
51040 SYMBOL 92,0,0,60,102,96,102,60,24
51050 SYMBOL 93,60,96,60,102,60,6,60,0
51060 SYMBOL 123,12,24,60,102,126,96,60,0
51070 SYMBOL 124,48,24,102,102,102,102,62,0   
51080 SYMBOL 125,48,24,60,102,126,96,60,0
51100 RETURN
65535 'FIN DE LISTING