Petite appli pour générer du code-barre en symbologie "Code 128" sous forme de bitmap;
J'ai implémenté l'algo d'optimisation de symbolisation (en longueur) tel que décrit dans la norme AFNOR EN 799, ça a l'air barbare, mais c'est un premier jet...
J'ai laissé l'interface un peu en plan, mais comme je compte rebosser dessus...
C'est pas encore commenté, (je me suis retapé ma (très) vieille source en QuickBasic 2 (si, si, ça a existé !!!, et que même je la tiens à dispo...) et l'ai remise au goût du jour...
Source / Exemple :
La source en QuickBasic 2 !!!
(La VB 2K5 est dans le zip)
'/**************************************************************************/
'/* */
'/* Module : CODE_128 Auteur : Eric DRAPIER */
'/* Version : 1.01 Date : 19 Septembre 1999 */
'/* */
'/* Edition de Codes-Barres en code 128 */
'/* */
'/* Materiel : IBM PC sous Windows */
'/* Imprimante OKI Microline 193 Elite */
'/* */
'/**************************************************************************/
'
'/* Définition des fonctions ==============================================*/
'
def fnVERT$(V%) = ESC$ + "J" + chr$(V%)
'
def fnGPRT$(V$, M%) = ESC$ + "L" + mki$(len(V$) * M%)
'
'/*------------------------------------------------------------------------*/
'
def fnFILTER$(V$)
'
static Z$, I%
'
Z$ = ""
for I% = 1 to len(V$)
if mid$(V$, I%, 1) < " " or mid$(V$, I%, 1) = chr$(&h7F) then
Z$ = Z$ + "ù"
else
Z$ = Z$ + mid$(V$, I%, 1)
end if
next
'
fnFILTER$ = Z$
'
end def
'
'/*------------------------------------------------------------------------*/
'
'/* COLORATR.CPY - Définition des attributs d'affichage ===================*/
'
BLK.LO% = 0 : BLK.HI% = 8 : BLK.LB% = 16 : BLK.HB% = 24
BLU.LO% = 1 : BLU.HI% = 9 : BLU.LB% = 17 : BLU.HB% = 25
GRN.LO% = 2 : GRN.HI% = 10 : GRN.LB% = 18 : GRN.HB% = 26
CYN.LO% = 3 : CYN.HI% = 11 : CYN.LB% = 19 : CYN.HB% = 27
RED.LO% = 4 : RED.HI% = 12 : RED.LB% = 20 : RED.HB% = 28
MGT.LO% = 5 : MGT.HI% = 13 : MGT.LB% = 21 : MGT.HB% = 29
YLW.LO% = 6 : YLW.HI% = 14 : YLW.LB% = 22 : YLW.HB% = 30
WHT.LO% = 7 : WHT.HI% = 15 : WHT.LB% = 23 : WHT.HB% = 31
'
BLINK.ATR% = 16
'
'/*========================================================================*/
'
'/* Chargement des tables =================================================*/
'
dim BAR.TBL$(106), CHR.TBL$(150)
'
ESC$ = chr$(&h1B)
'
GAP$ = string$(2, &h00) : BAR$ = string$(2, &hFF)
'
for I% = 0 to 106
BAR.TBL$(I%) = ""
read X.BAR$
for J% = 1 to len(X.BAR$)
if mid$(X.BAR$, J%, 1) = "0" then
BAR.TBL$(I%) = BAR.TBL$(I%) + GAP$
else
BAR.TBL$(I%) = BAR.TBL$(I%) + BAR$
end if
next
next
'
for I% = 0 to 150
CHR.TBL$(I%) = ""
if I% > 139 and I% < 150 then J.MAX% = 5 else J.MAX% = 11
for J% = 1 to J.MAX%
read X%
CHR.TBL$(I%) = CHR.TBL$(I%) + string$(2, X%)
next
if I% > 139 and I% < 150 then CHR.TBL$(I%) = CHR.TBL$(I%) + chr$(0)
next
'
'/* Initialisation ========================================================*/
'
CHR.START.A% = 128 : CHR.START.B% = 129 : CHR.START.C% = 130
CHR.STOP.X% = 131
CHR.TO.MODE.A% = 133 : CHR.TO.MODE.B% = 134 : CHR.TO.MODE.C% = 135
CHR.SHIFT% = 132
CHR.FNC1% = 136 : CHR.FNC2% = 137 : CHR.FNC3% = 138 : CHR.FNC4% = 139
'
BAR.START.A% = 103 : BAR.START.B% = 104 : BAR.START.C% = 105
BAR.STOP.X% = 106
BAR.TO.MODE.A% = 101 : BAR.TO.MODE.B% = 100 : BAR.TO.MODE.C% = 99
BAR.SHIFT% = 98
BAR.FNC1% = 102 : BAR.FNC2% = 97 : BAR.FNC3% = 96
'
INDEX.A$ = ""
for I% = 32 to 95 : INDEX.A$ = INDEX.A$ + chr$(I%) : next
for I% = 0 to 31 : INDEX.A$ = INDEX.A$ + chr$(I%) : next
'
INDEX.B$ = ""
for I% = 32 to 127 : INDEX.B$ = INDEX.B$ + chr$(I%) : next
'
FALSE = 0 : TRUE = not FALSE
BS$ = chr$(&h08) : HT$ = chr$(&h09) : FF$ = chr$(&h0C)
CR$ = chr$(&h0D) : ESC$ = chr$(&h1B)
'
open "R", #1, "LPT1:", 255
width #1, 255
print #1, ESC$ + "C" + chr$(03)
'
DSP.SCRN : '/* Affichage de l'écran =======================================*/
'
screen 9, 1
'
color CYN.HI%, BLU.LO% : cls
print "þÄÄÄÄÄÄÄÄÄÄÄ CODE_128 - Version 1.01 ÄÄÄÄÄÄÄÄÄÄÄþ"
print "þÄÄÄÄÄÄÄÄ (c) Eric Drapier, 1988-2002 ÄÄÄÄÄÄÄÄþ"
print "þÄÄÄÄÄ Impression de Code-barre (Code 128) ÄÄÄÄÄþ"
print "þÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄþ"
'
view print 5 to 18
'
CMD$ = command$ : LIN% = 4 : K$ = ""
'
MAIN.PROC : '/* Procédure principale ======================================*/
'
if CMD$ <> "" then
DTA$ = CMD$
color CYN.HI%, BLU.LO% : print "Code : >" ;
color YLW.HI%, BLU.LO% : print fnFILTER$(DTA$) ;
color CYN.HI%, BLU.LO% : print "<"
else
gosub INP.PARM
if K$ <> ESC$ then DTA$ = VAR$
end if
'
if K$ <> ESC$ then
gosub GEN.MASK
gosub GEN.STRT
gosub GEN.CODE
gosub VIEW.GRAPH
gosub PRT.CODE
if CMD$ = "" then goto MAIN.PROC
end if
'
close
'
end
'
GEN.MASK : '/* Génération du masque d'analyse pour l'encodage =============*/
'
MSK$ = ""
for I% = 1 to len(DTA$)
WRK% = asc(mid$(DTA$, I%, 1)) : T% = 0
if WRK% < 32 then MSK$ = MSK$ + "^" : T% = 1 '^ : CTLCHAR
if WRK% > 95 and WRK% < 128 then MSK$ = MSK$ + "x" : T% = 1 'x : lowercase
if WRK% > 47 and WRK% < 58 then MSK$ = MSK$ + "9" : T% = 1 '9 : NUMERIC
if T% <> 1 then MSK$ = MSK$ + "X" 'X : UPPERCASE
next
'
return
'
GEN.STRT : '/* Détermination du Start mode (A/B/C) ========================*/
'
MODE.A = FALSE : MODE.B = FALSE : MODE.C = FALSE
'
if left$(MSK$, 4) = "9999" then
CHR.START.X% = CHR.START.C%
BAR.START.X% = BAR.START.C%
MODE.C = TRUE
else
P.CTL% = instr(MSK$, "^")
P.MIN% = instr(MSK$, "x")
if P.CTL% > 0 and (P.MIN% = 0 or P.CTL% < P.MIN%) then
CHR.START.X% = CHR.START.A%
BAR.START.X% = BAR.START.A%
MODE.A = TRUE
else
CHR.START.X% = CHR.START.B%
BAR.START.X% = BAR.START.B%
MODE.B = TRUE
end if
end if
'
X.BAR$ = BAR.TBL$(BAR.START.X%)
X.CHR$ = CHR.TBL$(CHR.START.X%)
'
if MODE.A then BAR.FNC4% = 101 else BAR.FNC4% = 100
'
SUM! = BAR.START.X%
PND% = 1
'
return
'
GEN.CODE : '/* Encodage ===================================================*/
'
while len(MSK$) > 0
if MODE.C then
if left$(MSK$, 2) = "99" then
V% = val(left$(DTA$, 2))
X.BAR$ = X.BAR$ + BAR.TBL$(V%)
X.CHR$ = X.CHR$ + CHR.TBL$(140 + (V% \ 10)) + CHR.TBL$(140 + (V% mod 10))
SUM! = SUM! + (V% * PND%) : PND% = PND% + 1
DTA$ = mid$(DTA$, 3) : MSK$ = mid$(MSK$, 3)
else
P.CTL% = instr(MSK$, "^")
P.MIN% = instr(MSK$, "x")
if P.CTL% > 0 and (P.MIN% = 0 or P.CTL% < P.MIN%) then
X.BAR$ = X.BAR$ + BAR.TBL$(BAR.TO.MODE.A%)
X.CHR$ = X.CHR$ + CHR.TBL$(CHR.TO.MODE.A%)
SUM! = SUM! + (BAR.TO.MODE.A% * PND%) : PND% = PND% + 1
MODE.A = TRUE : MODE.B = FALSE : MODE.C = FALSE
else
X.BAR$ = X.BAR$ + BAR.TBL$(BAR.TO.MODE.B%)
X.CHR$ = X.CHR$ + CHR.TBL$(CHR.TO.MODE.B%)
MODE.A = FALSE : MODE.B = TRUE : MODE.C = FALSE
SUM! = SUM! + (BAR.TO.MODE.B% * PND%) : PND% = PND% + 1
end if
end if
else
if left$(MSK$, 4) = "9999" then
X.BAR$ = X.BAR$ + BAR.TBL$(BAR.TO.MODE.C%)
X.CHR$ = X.CHR$ + CHR.TBL$(CHR.TO.MODE.C%)
MODE.A = FALSE : MODE.B = FALSE : MODE.C = TRUE
SUM! = SUM! + (BAR.TO.MODE.C% * PND%) : PND% = PND% + 1
else
if MODE.B and left$(MSK$, 1) = "^" then
if left$(MSK$, 2) = "^x" then
X.BAR$ = X.BAR$ + BAR.TBL$(BAR.SHIFT%)
X.CHR$ = X.CHR$ + CHR.TBL$(CHR.SHIFT%)
SUM! = SUM! + (BAR.SHIFT% * PND%) : PND% = PND% + 1
P% = instr(INDEX.A$, left$(DTA$, 1))
X.BAR$ = X.BAR$ + BAR.TBL$(P% - 1)
X.CHR$ = X.CHR$ + CHR.TBL$(asc(left$(DTA$, 1)))
P% = instr(INDEX.B$, left$(DTA$, 1)) - 1
SUM! = SUM! + (P% * PND%) : PND% = PND% + 1
DTA$ = mid$(DTA$, 2) : MSK$ = mid$(MSK$, 2)
else
X.BAR$ = X.BAR$ + BAR.TBL$(BAR.TO.MODE.A%)
X.CHR$ = X.CHR$ + CHR.TBL$(CHR.TO.MODE.A%)
MODE.A = TRUE : MODE.B = FALSE : MODE.C = FALSE
SUM! = SUM! + (BAR.TO.MODE.A% * PND%) : PND% = PND% + 1
end if
end if
if MODE.A and left$(MSK$, 1) = "x" then
if left$(MSK$, 2) = "x^" then
X.BAR$ = X.BAR$ + BAR.TBL$(BAR.SHIFT%)
X.CHR$ = X.CHR$ + CHR.TBL$(CHR.SHIFT%)
SUM! = SUM! + (BAR.SHIFT% * PND%) : PND% = PND% + 1
P% = instr(INDEX.B$, left$(DTA$, 1))
X.BAR$ = X.BAR$ + BAR.TBL$(P% - 1)
X.CHR$ = X.CHR$ + CHR.TBL$(asc(left$(DTA$, 1)))
P% = instr(INDEX.A$, left$(DTA$, 1)) - 1
SUM! = SUM! + (P% * PND%) : PND% = PND% + 1
DTA$ = mid$(DTA$, 2) : MSK$ = mid$(MSK$, 2)
else
X.BAR$ = X.BAR$ + BAR.TBL$(BAR.TO.MODE.B%)
X.CHR$ = X.CHR$ + CHR.TBL$(CHR.TO.MODE.B%)
MODE.A = FALSE : MODE.B = TRUE : MODE.C = FALSE
SUM! = SUM! + (BAR.TO.MODE.B% * PND%) : PND% = PND% + 1
end if
end if
if MODE.A then P% = instr(INDEX.A$, left$(DTA$, 1))
if MODE.B then P% = instr(INDEX.B$, left$(DTA$, 1))
'********
if P% = 0 then stop :'/* Abort on error (chr not found) */
'********
X.BAR$ = X.BAR$ + BAR.TBL$(P% - 1)
X.CHR$ = X.CHR$ + CHR.TBL$(asc(left$(DTA$, 1)))
SUM! = SUM! + ((P%-1) * PND%) : PND% = PND% + 1
DTA$ = mid$(DTA$, 2) : MSK$ = mid$(MSK$, 2)
end if
end if
wend
'
'/* Calcul et ajout du check-digit ========================================*/
'
V% = SUM! - (int(SUM! / 103) * 103)
X.BAR$ = X.BAR$ + BAR.TBL$(V%)
X.CHR$ = X.CHR$ + CHR.TBL$(150)
'
'/* Ajout du <Stop> =======================================================*/
'
X.BAR$ = X.BAR$ + BAR.TBL$(BAR.STOP.X%)
X.CHR$ = X.CHR$ + CHR.TBL$(CHR.STOP.X%)
'
return
'
INP.PARM : '/* Entrée du Paramètre ========================================*/
'
LIN% = LIN% + 1 : if LIN% > 18 then LIN% = 18
COL% = 25 : LGR% = 24
MSG$ = "Code ? / <Esc> = Fin : [" + string$(LGR%, "þ") + "]"
'
locate LIN%, 1 : color CYN.HI%, BLU.LO% : print MSG$;
'
VAR$ = "" : K$ = "" : color WHT.HI%, BLU.LO%
locate LIN%, COL%, 0 : print string$(LGR%, "ù");
'
while (K$ <> HT$ and K$ <> CR$ and K$ <> ESC$ and len(VAR$) < LGR%)
locate LIN%, COL%, 1, 4, 5
K$ = "" : while K$ = "" : K$ = inkey$ : wend
if instr(ESC$ + BS$ + CR$ + HT$, K$) = 0 _
and asc(K$) < 32 or asc(K$) > 127 then
sound 1800, .5 : sound 1500, .5
else
if asc(K$) >= 32 then
VAR$ = VAR$ + K$
locate LIN%, COL%, 0 : print K$;
COL% = COL% + 1
end if
if K$ = BS$ then
if VAR$ > "" then
VAR$ = left$(VAR$, len(VAR$) - 1)
COL% = COL% - 1
locate LIN%, COL%, 0 : print "ù";
end if
end if
end if
wend
'
print
'
return
'
VIEW.GRAPH : '/* Affichage graphique ======================================*/
'
view (5, 260) - (635, 325), 1, 15
line (1, 1) - (628, 64), 15, BF
X0% = (635 - len(X.BAR$) - 5) \ 2
for I% = 1 to len(X.BAR$)
if mid$(X.BAR$, I%, 1) = chr$(&hFF) then
line (X0% + I%, 10) - (X0% + I%, 40), 0
end if
next
'
for I% = 1 to len(X.CHR$)
V% = asc(mid$(X.CHR$, I%, 1))
for J% = 7 to 0 step -1
P2% = 2 ^ J%
if V% >= P2% then
V% = V% - P2%
pset (X0% + I%, 42 + (15 - J%)), 0
end if
next
next
'
return
'
PRT.CODE : '/* Impression du code =========================================*/
'
'/* Impression des barres */
'
for I% = 1 to 3
print #1, fnVERT$(0);
print #1, fnGPRT$(X.BAR$, 1);
print #1, X.BAR$;
print #1, fnVERT$(24)
next
'
print #1, fnVERT$(10)
'
'/* Impression des caractères graphiques */
'
print #1, fnGPRT$(X.CHR$, 1);
print #1, X.CHR$;
'
print #1, FF$
'
return
'
'/*========================================================================*/
'
'/* Zone data pour les codes-barres ---------------------------------------*/
'
' Code Jeu A / Jeu B / Jeu C
'-------------------------------------------------
data "11011001100" : ' Space Space 00
data "11001101100" : ' ! ! 01
data "11001100110" : ' " " 02
data "10010011000" : ' # # 03
data "10010001100" : ' $ $ 04
data "10001001100" : ' % % 05
data "10011001000" : ' & & 06
data "10011000100" : ' ' ' 07
data "10001100100" : ' ( ( 08
data "11001001000" : ' ) ) 09
data "11001000100" : ' * * 10
data "11000100100" : ' + + 11
data "10110011100" : ' , , 12
data "10011011100" : ' - - 13
data "10011001110" : ' . . 14
data "10111001100" : ' / / 15
data "10011101100" : ' 0 0 16
data "10011100110" : ' 1 1 17
data "11001110010" : ' 2 2 18
data "11001011100" : ' 3 3 19
data "11001001110" : ' 4 4 20
data "11011100100" : ' 5 5 21
data "11001110100" : ' 6 6 22
data "11101101110" : ' 7 7 23
data "11101001100" : ' 8 8 24
data "11100101100" : ' 9 9 25
data "11100100110" : ' : : 26
data "11101100100" : ' ; ; 27
data "11100110100" : ' < < 28
data "11100110010" : ' = = 29
data "11011011000" : ' > > 30
data "11011000110" : ' ? ? 31
data "11000110110" : ' @ @ 32
data "10100011000" : ' A A 33
data "10001011000" : ' B B 34
data "10001000110" : ' C C 35
data "10110001000" : ' D D 36
data "10001101000" : ' E E 37
data "10001100010" : ' F F 38
data "11010001000" : ' G G 39
data "11000101000" : ' H H 40
data "11000100010" : ' I I 41
data "10110111000" : ' J J 42
data "10110001110" : ' K K 43
data "10001101110" : ' L L 44
data "10111011000" : ' M M 45
data "10111000110" : ' N N 46
data "10001110110" : ' O O 47
data "11101110110" : ' P P 48
data "11010001110" : ' Q Q 49
data "11000101110" : ' R R 50
data "11011101000" : ' S S 51
data "11011100010" : ' T T 52
data "11011101110" : ' U U 53
data "11101011000" : ' V V 54
data "11101000110" : ' W W 55
data "11100010110" : ' X X 56
data "11101101000" : ' Y Y 57
data "11101100010" : ' Z Z 58
data "11100011010" : ' [ [ 59
data "11101111010" : ' \ \ 60
data "11001000010" : ' ] ] 61
data "11110001010" : ' ^ ^ 62
data "10100110000" : ' _ _ 63
data "10100001100" : ' NUL ` 64
data "10010110000" : ' SOH a 65
data "10010000110" : ' STX b 66
data "10000101100" : ' ETX c 67
data "10000100110" : ' EOT d 68
data "10110010000" : ' ENQ e 69
data "10110000100" : ' ACK f 70
data "10011010000" : ' BEL g 71
data "10011000010" : ' BS h 72
data "10000110100" : ' HT i 73
data "10000110010" : ' LF j 74
data "11000010010" : ' VT k 75
data "11001010000" : ' FF l 76
data "11110111010" : ' CR m 77
data "11000010100" : ' SO n 78
data "10001111010" : ' SI o 79
data "10100111100" : ' DLE p 80
data "10010111100" : ' DC1 q 81
data "10010011110" : ' DC2 r 82
data "10111100100" : ' DC3 s 83
data "10011110100" : ' DC4 t 84
data "10011110010" : ' NAK u 85
data "11110100100" : ' SYN v 86
data "11110010100" : ' ETB w 87
data "11110010010" : ' CAN x 88
data "11011011110" : ' EM y 89
data "11011110110" : ' SUB z 90
data "11110110110" : ' ESC { 91
data "10101111000" : ' FS | 92
data "10100011110" : ' GS } 93
data "10001011110" : ' RS ~ 94
data "10111101000" : ' US DEL 95
data "10111100010" : ' FNC3 FNC3 96
data "11110101000" : ' FNC2 FNC2 97
data "11110100010" : ' SHIFT SHIFT 98
data "10111011110" : ' MODE C MODE C 99
data "10111101110" : ' MODE B FNC4 MODE B
data "11101011110" : ' FNC4 MODE A MODE A
data "11110101110" : ' FNC1 FNC1 FNC1
data "11010000100" : ' -----START MODE A-----
data "11010010000" : ' -----START MODE B-----
data "11010011100" : ' -----START MODE C-----
data "1100011101011": ' ---------STOP---------
'
'/* Zone data pour les caractères graphiques ------------------------------*/
'
data 248, 128, 120, 0, 124, 4, 124, 0, 62, 2, 2: ' <NUL>
data 72, 168, 144, 0, 60, 68, 120, 0, 62, 8, 62: ' <SOH>
data 72, 168, 144, 0, 64, 124, 64, 0, 54, 8, 54: ' <STX>
data 112, 168, 168, 0, 64, 124, 64, 0, 54, 8, 54: ' <ETX>
data 112, 168, 168, 0, 60, 68, 120, 0, 32, 62, 32: ' <EOT>
data 112, 168, 168, 0, 124, 64, 60, 0, 28, 38, 58: ' <ENQ>
data 120, 144, 120, 0, 56, 68, 68, 0, 62, 8, 54: ' <ACK>
data 248, 168, 80, 0, 56, 84, 84, 0, 62, 2, 2: ' <BEL>
data 0, 0, 248, 168, 80, 0, 18, 42, 36, 0, 0: ' <BS>
data 0, 0, 248, 32, 248, 0, 32, 62, 32, 0, 0: ' <HT>
data 0, 0, 248, 8, 8, 0, 30, 40, 40, 0, 0: ' <LF>
data 0, 0, 240, 8, 240, 0, 32, 62, 32, 0, 0: ' <VT>
data 0, 0, 120, 160, 160, 0, 30, 40, 40, 0, 0: ' <FF>
data 0, 0, 112, 136, 136, 0, 62, 40, 22, 0, 0: ' <CR>
data 0, 0, 72, 168, 144, 0, 30, 34, 60, 0, 0: ' <SO>
data 0, 0, 72, 168, 144, 0, 34, 62, 34, 0, 0: ' <SI>
data 248, 136, 112, 0, 124, 4, 4, 0, 28, 42, 42: ' <DLE>
data 248, 136, 112, 0, 56, 68, 68, 0, 34, 62, 2: ' <DC1>
data 248, 136, 112, 0, 56, 68, 68, 0, 38, 42, 18: ' <DC2>
data 248, 136, 112, 0, 56, 68, 68, 0, 34, 42, 20: ' <DC3>
data 248, 136, 112, 0, 56, 68, 68, 0, 28, 4, 62: ' <DC4>
data 248, 128, 120, 0, 60, 72, 60, 0, 62, 8, 54: ' <NAK>
data 72, 168, 144, 0, 96, 28, 96, 0, 62, 32, 30: ' <SYN>
data 112, 168, 168, 0, 64, 124, 64, 0, 62, 42, 20: ' <ETB>
data 112, 136, 136, 0, 60, 72, 60, 0, 62, 32, 30: ' <CAN>
data 0, 0, 112, 168, 168, 0, 62, 24, 62, 0, 0: ' <EM>
data 72, 168, 144, 0, 124, 4, 124, 0, 62, 42, 20: ' <SUB>
data 112, 168, 168, 0, 36, 84, 72, 0, 28, 34, 34: ' <ESC>
data 0, 0, 120, 160, 160, 0, 18, 42, 36, 0, 0: ' <FS>
data 0, 0, 112, 136, 184, 0, 18, 42, 36, 0, 0: ' <GS>
data 0, 0, 248, 160, 88, 0, 18, 42, 36, 0, 0: ' <RS>
data 0, 0, 248, 8, 248, 0, 18, 42, 36, 0, 0: ' <US>
'
data 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0: ' Space
data 0, 0, 0, 0, 0, 250, 250, 0, 0, 0, 0: ' !
data 0, 0, 192, 128, 0, 0, 0, 0, 192, 128, 0: ' "
data 0, 40, 40, 254, 254, 40, 40, 254, 254, 40, 40: ' #
data 0, 36, 84, 84, 254, 84, 84, 254, 84, 84, 72: ' $
data 0, 64, 226, 166, 236, 88, 52, 110, 202, 142, 4: ' %
data 0, 108, 254, 146, 146, 250, 110, 4, 14, 26, 18: ' &
data 0, 0, 0, 0, 160, 224, 192, 0, 0, 0, 0: ' '
data 0, 0, 0, 0, 56, 124, 198, 130, 0, 0, 0: ' (
data 0, 0, 0, 0, 130, 198, 124, 56, 0, 0, 0: ' )
data 0, 146, 214, 124, 56, 254, 254, 56, 124, 214, 146: ' *
data 0, 16, 16, 16, 16, 254, 254, 16, 16, 16, 16: ' +
data 0, 0, 0, 0, 10, 14, 12, 0, 0, 0, 0: ' ,
data 0, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16: ' -
data 0, 0, 0, 0, 0, 6, 6, 0, 0, 0, 0: ' .
data 0, 0, 2, 6, 12, 24, 48, 96, 192, 128, 0: ' /
data 0, 56, 124, 198, 130, 130, 130, 130, 198, 124, 56: ' 0
data 0, 0, 0, 66, 130, 254, 254, 2, 2, 14, 0: ' 1
data 0, 70, 206, 154, 146, 146, 146, 146, 146, 242, 102: ' 2
data 0, 196, 134, 130, 130, 130, 146, 178, 242, 222, 140: ' 3
data 0, 8, 24, 56, 104, 200, 136, 254, 254, 8, 8: ' 4
data 0, 228, 230, 162, 162, 162, 162, 162, 162, 190, 156: ' 5
data 0, 28, 62, 114, 210, 146, 146, 146, 146, 30, 12: ' 6
data 0, 128, 128, 130, 134, 140, 152, 176, 224, 192, 128: ' 7
data 0, 108, 254, 146, 146, 146, 146, 146, 146, 254, 108: ' 8
data 0, 100, 246, 146, 146, 146, 146, 146, 146, 254, 124: ' 9
data 0, 0, 0, 0, 0, 108, 108, 0, 0, 0, 0: ' :
data 0, 0, 0, 0, 10, 110, 108, 0, 0, 0, 0: ' ;
data 0, 0, 0, 16, 56, 108, 198, 130, 0, 0, 0: ' <
data 0, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40: ' =
data 0, 0, 0, 0, 130, 198, 108, 56, 16, 0, 0: ' >
data 0, 64, 192, 128, 128, 138, 154, 144, 144, 240, 96: ' ?
data 0, 124, 254, 130, 154, 170, 170, 178, 154, 250, 112: ' @
data 0, 30, 62, 104, 200, 136, 136, 200, 104, 62, 30: ' A
data 0, 130, 254, 254, 146, 146, 146, 146, 146, 254, 108: ' B
data 0, 124, 254, 130, 130, 130, 130, 130, 130, 198, 68: ' C
data 0, 130, 254, 254, 130, 130, 130, 130, 130, 254, 124: ' D
data 0, 254, 254, 146, 146, 146, 146, 130, 130, 130, 130: ' E
data 0, 254, 254, 144, 144, 144, 144, 128, 128, 128, 128: ' F
data 0, 124, 254, 130, 130, 130, 146, 146, 150, 220, 94: ' G
data 0, 254, 254, 16, 16, 16, 16, 16, 16, 254, 254: ' H
data 0, 0, 0, 0, 130, 254, 254, 130, 0, 0, 0: ' I
data 0, 12, 14, 2, 2, 2, 2, 130, 130, 254, 252: ' J
data 0, 130, 254, 254, 16, 16, 40, 108, 198, 130, 130: ' K
data 0, 254, 254, 2, 2, 2, 2, 2, 2, 2, 2: ' L
data 0, 254, 254, 96, 48, 24, 24, 48, 96, 254, 254: ' M
data 0, 254, 254, 192, 96, 48, 24, 12, 6, 254, 254: ' N
data 0, 124, 254, 130, 130, 130, 130, 130, 130, 254, 124: ' O
data 0, 254, 254, 144, 144, 144, 144, 144, 144, 240, 96: ' P
data 0, 124, 254, 130, 130, 146, 154, 142, 132, 254, 122: ' Q
data 0, 254, 254, 144, 144, 144, 144, 152, 156, 246, 98: ' R
data 0, 100, 246, 146, 146, 146, 146, 146, 146, 222, 76: ' S
data 0, 128, 128, 128, 128, 254, 254, 128, 128, 128, 128: ' T
data 0, 252, 254, 2, 2, 2, 2, 2, 2, 254, 252: ' U
data 0, 224, 240, 24, 12, 6, 6, 12, 24, 240, 224: ' V
data 0, 254, 254, 12, 24, 48, 48, 24, 12, 254, 254: ' W
data 0, 130, 198, 108, 56, 16, 16, 56, 108, 198, 130: ' X
data 0, 128, 192, 96, 48, 30, 30, 48, 96, 192, 128: ' Y
data 0, 134, 134, 138, 138, 146, 146, 162, 162, 194, 194: ' Z
data 0, 0, 0, 254, 254, 130, 130, 130, 0, 0, 0: ' [
data 0, 0, 128, 192, 96, 48, 24, 12, 6, 2, 0: ' \
data 0, 0, 0, 130, 130, 130, 254, 254, 0, 0, 0: ' ]
data 0, 32, 32, 64, 64, 128, 128, 64, 64, 32, 32: ' ^
data 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1: ' _
'
data 0, 0, 0, 0, 192, 224, 160, 0, 0, 0, 0: ' `
data 0, 4, 14, 42, 42, 42, 42, 42, 60, 30, 2: ' a
data 0, 130, 252, 254, 34, 34, 34, 34, 34, 62, 28: ' b
data 0, 28, 62, 34, 34, 34, 34, 34, 34, 38, 4: ' c
data 0, 28, 62, 34, 34, 34, 34, 34, 254, 252, 130: ' d
data 0, 28, 62, 42, 42, 42, 42, 42, 42, 56, 16: ' e
data 0, 0, 0, 18, 126, 254, 146, 144, 192, 64, 0: ' f
data 0, 24, 61, 37, 37, 37, 37, 37, 31, 62, 32: ' g
data 0, 130, 254, 254, 32, 32, 32, 32, 32, 62, 30: ' h
data 0, 0, 0, 0, 34, 190, 190, 2, 0, 0, 0: ' i
data 0, 0, 2, 3, 33, 191, 190, 0, 0, 0, 0: ' j
data 0, 130, 254, 254, 8, 8, 8, 28, 54, 34, 34: ' k
data 0, 0, 0, 0, 130, 254, 254, 2, 0, 0, 0: ' l
data 0, 62, 62, 16, 32, 62, 62, 32, 32, 62, 30: ' m
data 0, 62, 62, 16, 48, 32, 32, 32, 32, 62, 30: ' n
data 0, 28, 62, 34, 34, 34, 34, 34, 34, 62, 28: ' o
data 0, 33, 63, 31, 36, 36, 36, 36, 36, 60, 24: ' p
data 0, 24, 60, 36, 36, 36, 36, 36, 31, 63, 33: ' q
data 0, 34, 62, 30, 34, 32, 32, 32, 32, 48, 16: ' r
data 0, 16, 58, 42, 42, 42, 42, 42, 42, 46, 4: ' s
data 0, 0, 0, 252, 254, 34, 38, 4, 0, 0, 0: ' t
data 0, 60, 62, 2, 2, 2, 2, 2, 60, 62, 2: ' u
data 0, 32, 48, 24, 12, 6, 6, 12, 24, 48, 32: ' v
data 0, 60, 62, 2, 6, 12, 12, 6, 2, 62, 60: ' w
data 0, 34, 34, 20, 28, 8, 8, 28, 20, 34, 34: ' x
data 0, 56, 60, 5, 5, 5, 5, 5, 7, 62, 60: ' y
data 0, 34, 38, 38, 42, 42, 42, 42, 50, 50, 34: ' z
data 0, 0, 0, 16, 124, 238, 130, 130, 0, 0, 0: ' {
data 0, 0, 0, 0, 0, 238, 238, 0, 0, 0, 0: ' |
data 0, 0, 0, 0, 130, 130, 238, 124, 16, 0, 0: ' }
data 0, 64, 192, 128, 128, 192, 96, 32, 32, 96, 64: ' ~
data 248, 136, 112, 0, 56, 84, 84, 0, 62, 2, 2: ' <DEL>
'
data 255, 225, 203, 155, 203, 225, 255, 126, 60, 24, 0: ' Start A
data 255, 129, 173, 173, 129, 211, 255, 126, 60, 24, 0: ' Start B
data 255, 195, 153, 189, 153, 219, 255, 126, 60, 24, 0: ' Start C
data 0, 0, 8, 28, 62, 119, 99, 65, 127, 127, 0: ' Stop
data 0, 8, 24, 56, 127, 255, 127, 56, 24, 8, 0: ' Shift
data 0, 127, 62, 28, 8, 31, 36, 68, 36, 31, 0: ' to mode A
data 0, 127, 62, 28, 8, 65, 127, 73, 73, 54, 0: ' to mode B
data 0, 127, 62, 28, 8, 62, 65, 65, 65, 34, 0: ' to mode C
data 28, 34, 65, 18, 34, 62, 62, 2, 65, 34, 28: ' FNC1
data 28, 34, 65, 22, 62, 42, 58, 18, 65, 34, 28: ' FNC2
data 28, 34, 65, 34, 42, 42, 62, 20, 65, 34, 28: ' FNC3
data 28, 34, 65, 28, 28, 4, 62, 62, 65, 34, 28: ' FNC4
'
'/*----- Numériques pour les paires -----*/
'
data 126, 129, 129, 129, 126: ' 0
data 65, 129, 255, 1, 3: ' 1
data 67, 133, 137, 145, 99: ' 2
data 194, 129, 145, 169, 198: ' 3
data 60, 68, 132, 255, 4: ' 4
data 242, 145, 145, 145, 142: ' 5
data 62, 81, 145, 145, 14: ' 6
data 128, 128, 135, 152, 224: ' 7
data 110, 145, 145, 145, 110: ' 8
data 112, 137, 137, 137, 126: ' 9
'
data 0, 8, 28, 62, 127, 127, 127, 62, 28, 8, 0: ' ChkDgt
'
'/*========================================================================*/
Conclusion :
...
Encore du travail à faire...
- PETITES NOTES EN PASSANT* :
- Parmi les caractères graphiques inclus dans l'image générée, sont inclus des caractères "spéciaux" uniquement destinés aux tests, en effet, l'interprétation en clair des caractères "de service" tels que Start/Stop, FNCx, etc ne s'impriment normalement pas, ici je les ai inclus à des fins didactiques et de vérification; un "vrai" code 128 ne matérialise pas la "cuisine interne" des barres (alors qu'ici, si...)
- Promis, je vais rajouter des commentaires, surtout dans la partie "encodage" qui est un p'tit peu tordue bien que logique...
- A priori, pas de bugs, mais c'est un premier jet, donc nul n'est à l'abri....
a+
Mais dans le principe, ça marche impec'
Vous n'êtes pas encore membre ?
inscrivez-vous, c'est gratuit et ça prend moins d'une minute !
Les membres obtiennent plus de réponses que les utilisateurs anonymes.
Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.
Le fait d'être membre vous permet d'avoir des options supplémentaires.