Console
Clique sur « Exécuter » pour lancer le programme.
Aucune exécutionCtrl+Entrée : exécuter · Échap : arrêter
Code CoddyRun
// =====================================================================
// CODE-BARRES CODE 128 (Code Set B) en CoddyRun
// - 107 symboles (0..106) : 103 valeurs de donnees + Start B (104)
// + Stop (106).
// - Chaque symbole = 11 modules, sauf le Stop = 13 modules.
// - Checksum modulo 103 (ponderation croissante a partir du Start).
// - Encodage Code Set B : ASCII 32..126 -> valeur = code - 32.
// - Structure : quiet zone | Start B | data | checksum | Stop | quiet.
// =====================================================================
// Table globale des 108 motifs (chaine de 6 chiffres : barre/espace...)
// Index = valeur du symbole Code 128. Chaque motif = 6 largeurs.
patterns est un tableau
procedure initPatterns()
patterns[0] vaut "212222"
patterns[1] vaut "222122"
patterns[2] vaut "222221"
patterns[3] vaut "121223"
patterns[4] vaut "121322"
patterns[5] vaut "131222"
patterns[6] vaut "122213"
patterns[7] vaut "122312"
patterns[8] vaut "132212"
patterns[9] vaut "221213"
patterns[10] vaut "221312"
patterns[11] vaut "231212"
patterns[12] vaut "112232"
patterns[13] vaut "122132"
patterns[14] vaut "122231"
patterns[15] vaut "113222"
patterns[16] vaut "123122"
patterns[17] vaut "123221"
patterns[18] vaut "223211"
patterns[19] vaut "221132"
patterns[20] vaut "221231"
patterns[21] vaut "213212"
patterns[22] vaut "223112"
patterns[23] vaut "312131"
patterns[24] vaut "311222"
patterns[25] vaut "321122"
patterns[26] vaut "321221"
patterns[27] vaut "312212"
patterns[28] vaut "322112"
patterns[29] vaut "322211"
patterns[30] vaut "212123"
patterns[31] vaut "212321"
patterns[32] vaut "232121"
patterns[33] vaut "111323"
patterns[34] vaut "131123"
patterns[35] vaut "131321"
patterns[36] vaut "112313"
patterns[37] vaut "132113"
patterns[38] vaut "132311"
patterns[39] vaut "211313"
patterns[40] vaut "231113"
patterns[41] vaut "231311"
patterns[42] vaut "112133"
patterns[43] vaut "112331"
patterns[44] vaut "132131"
patterns[45] vaut "113123"
patterns[46] vaut "113321"
patterns[47] vaut "133121"
patterns[48] vaut "313121"
patterns[49] vaut "211331"
patterns[50] vaut "231131"
patterns[51] vaut "213113"
patterns[52] vaut "213311"
patterns[53] vaut "213131"
patterns[54] vaut "311123"
patterns[55] vaut "311321"
patterns[56] vaut "331121"
patterns[57] vaut "312113"
patterns[58] vaut "312311"
patterns[59] vaut "332111"
patterns[60] vaut "314111"
patterns[61] vaut "221411"
patterns[62] vaut "431111"
patterns[63] vaut "111224"
patterns[64] vaut "111422"
patterns[65] vaut "121124"
patterns[66] vaut "121421"
patterns[67] vaut "141122"
patterns[68] vaut "141221"
patterns[69] vaut "112214"
patterns[70] vaut "112412"
patterns[71] vaut "122114"
patterns[72] vaut "122411"
patterns[73] vaut "142112"
patterns[74] vaut "142211"
patterns[75] vaut "241211"
patterns[76] vaut "221114"
patterns[77] vaut "413111"
patterns[78] vaut "241112"
patterns[79] vaut "134111"
patterns[80] vaut "111242"
patterns[81] vaut "121142"
patterns[82] vaut "121241"
patterns[83] vaut "114212"
patterns[84] vaut "124112"
patterns[85] vaut "124211"
patterns[86] vaut "411212"
patterns[87] vaut "421112"
patterns[88] vaut "421211"
patterns[89] vaut "212141"
patterns[90] vaut "214121"
patterns[91] vaut "412121"
patterns[92] vaut "111143"
patterns[93] vaut "111341"
patterns[94] vaut "131141"
patterns[95] vaut "114113"
patterns[96] vaut "114311"
patterns[97] vaut "411113"
patterns[98] vaut "411311"
patterns[99] vaut "113141"
patterns[100] vaut "114131"
patterns[101] vaut "311141"
patterns[102] vaut "411131"
patterns[103] vaut "211412"
patterns[104] vaut "211214"
patterns[105] vaut "211232"
patterns[106] vaut "2331112"
fin procédure
// =====================================================================
// PROCEDURE PRINCIPALE
// =====================================================================
procedure code128(graph, txt)
appelle initPatterns()
startB vaut 104
stopSym vaut 106
nbCar vaut longueur(txt)
si nbCar < 1 alors
affiche "Code 128 : texte vide"
sinon
// ---------- 1) construction de la liste des valeurs ----------
// valeurs[] = suite des symboles a encoder (hors Stop final)
valeurs est un tableau
valeurs[0] vaut startB
// encodage Code Set B : ASCII 32..126 -> valeur = code - 32
texteOk vaut 1
i vaut 1
tant que i <= nbCar
cc vaut code(txt[i])
si cc < 32 ou cc > 126 alors
texteOk vaut 0
sinon
valeurs[longueur(valeurs)] vaut cc - 32
fin si
i vaut i + 1
fin tant que
si texteOk = 0 alors
affiche "Code 128 : caractere non imprimable (ASCII 32-126 requis)"
sinon
// ---------- 2) checksum modulo 103 ----------
// somme = valeur(Start) + valeur[k] * k (k a partir de 1)
sommeChk vaut valeurs[0]
k vaut 1
tant que k < longueur(valeurs)
sommeChk vaut sommeChk + valeurs[k] * k
k vaut k + 1
fin tant que
checkVal vaut sommeChk mod 103
valeurs[longueur(valeurs)] vaut checkVal
// symbole d'arret final
valeurs[longueur(valeurs)] vaut stopSym
// ---------- 3) construction de la sequence de modules ----------
// modules est un tableau de 0/1 (0 = espace blanc, 1 = barre noire)
// Chaque motif alterne barre, espace, barre, ... en commencant
// TOUJOURS par une barre.
modules est un tableau
s vaut 0
tant que s < longueur(valeurs)
motif vaut patterns[valeurs[s]]
nbLarg vaut longueur(motif)
estBarre vaut 1
p vaut 1
tant que p <= nbLarg
largeur vaut convertir_nombre(motif[p])
rep vaut 0
tant que rep < largeur
modules[longueur(modules)] vaut estBarre
rep vaut rep + 1
fin tant que
si estBarre = 1 alors
estBarre vaut 0
sinon
estBarre vaut 1
fin si
p vaut p + 1
fin tant que
s vaut s + 1
fin tant que
totalModules vaut longueur(modules)
// ---------- 4) dessin ----------
largeurT vaut graph.largeur
hauteurT vaut graph.hauteur
marge vaut 10
// largeur d'un module (au moins 1 pixel)
larDispo vaut largeurT - 2 * marge
larMod vaut arrondi_inferieur(larDispo / totalModules)
si larMod < 1 alors
larMod vaut 1
fin si
// hauteur des barres (laisse de la place en bas pour le texte)
hautBarre vaut hauteurT - 2 * marge - 24
si hautBarre < 10 alors
hautBarre vaut hauteurT - 2 * marge
fin si
// largeur reelle du code (pour centrer)
larCode vaut totalModules * larMod
decalX vaut arrondi_inferieur((largeurT - larCode) / 2)
si decalX < marge alors
decalX vaut marge
fin si
remplir(graph, #FFFFFF)
m vaut 0
tant que m < totalModules
si modules[m] = 1 alors
x vaut decalX + m * larMod
rectangle(graph, x, marge, larMod, hautBarre, #000000)
fin si
m vaut m + 1
fin tant que
// ---------- 5) texte lisible sous le code ----------
yTexte vaut marge + hautBarre + 18
posTexte vaut arrondi_inferieur(largeurT / 2 - longueur(txt) * 4)
si posTexte < marge alors
posTexte vaut marge
fin si
label(graph, posTexte, yTexte, txt, #000000, 16)
fin si
fin si
fin procédure
// =====================================================================
// PROGRAMME PRINCIPAL
// =====================================================================
ecran est une toile
dimension(ecran, 500, 200)
demande "Quel texte encoder dans le Code 128 ?" dans monTexte
appelle code128(ecran, monTexte)
affiche ecran