Espero que os guste....


    Si le sacais provecho a esto, por favor comuncamelo a:
    cayetano@arrakis.es

    o mndame una postal a
        Cayetano Gomez
            Jose Maria de Mena,9 Bajo B
            41008 - Sevilla

    Naturalmenta, sujecencias o bugs que podais encontrar mandadmelos y
    veremos que se puede hacer

    En caso de emergencia --- 907 618 399



DOCUMENTACION PARA EL USO DE BARDOS
===================================

Realmente BARDOS es un subconjunto de las rutinas usadas en BARLIB, por
lo que necesita otra explicacin.

Esta librera apya la impresin de cdigos de barras en CUALLQUIER
inpresora, ya que provee la logstica necesaria para su diseo, PERO NO
CONTIENE LOS CDIGOS NECESARIOS PARA LA IMPRESION. por este motivo su
pequeo tamao.

Por un lado se describen las funciones, y por otro lass tcnicas
necesarias para la impresin del cdigo:

Importante: en las descripciones se habla de tramas, este concepto ( no
encuntr una palabra mejor ) se esplicar en la parte de definicin de
los cdigos.

Descripcion de funciones:
-------------------------

_EAN13( cCode )
---------------

    Genera la trama para imprimir un cdigo de barras del grupo EAN13,
    cCode slo necesita 12 dgitos, el digito de control es calculado
    por la rutina.

_UPC(cCode,nDigits)
-------------------

    Genera la trama del tipo UPC, segn el nmero de dgitos. Hay que
    tener en cuenta que son subtipos de EAN en su construccin

    UPCA -> cCode-> 11 digitos, valor en nDIgits 11 ( si se envia un
    valor en cCode de menos de 12 dgitos se completan co 0)

    EAN8 -> cCode de hasta 7,   nDigits= 7 ( como arriba )

_EAN13BL(nDigits)
-----------------

    Genera las "patitas" de los cdigos tipo EAn y UPC, siendo:

        12 -> para EAN 13 y  UPCA
        8  -> Para EAN 8

_C128(cCode, cModo)
-------------------


    cCode : caracteres a imprimir

    El code 128 permite la impresion de cdigos muy compactos con rango
    de caracteres entre 0 y 128, en tres sets
        Set A : caracteres entre chr(0) y 'Z'
        Set B : caracteres entre '0' y '_'
        Set C : modo Solo numrico ( entre '0' y '9' ), pero
        especialmente denso ( aproximadamente la mitad del anterior)

    Si se espicifica un modo 'A', 'B' o 'C' se usar ese modo, en caso
    contrario se determinar el modo automticamente, mezclando, si es
    necesario, los modos.

    Si no se especificica, se usa el modo automtico


_CODE3_9( cCode )
-----------------

    Genera las tramas para el Codigo del tipo COde 39 o 3 de 9 ( es lo
    mismo )

    cCode : caracteres a imprimir, en el rango :
         '1234567890ABCDEFGHIJKLMNOPQRSTUVWXYZ-. *$/+%'
        otros caracteres se ignorarn. no es necesario incluir caracter
        de inicio o fin ( el * ) por que es colocado por las rutinas de
        codificacin. Si se usa ChekDigit este ser aadido por las
        rutinas, no es necesario suministrarlo.


_CODABAR( cCode)
----------------

    Genera las tramas de Codabar

    cCode : caracteres a imprimir, en el conjunto
             0123456789-$:/.+ABCDTN*E
    si bien la rutina no chequea la existencia de los cdigos de
    arranque y parada, el usuario los ha de suministrar. estos son :

        Arranque        Parada
       Ŀ
           A          T      
       Ĵ
           B          N      
       Ĵ
           C          *      
       Ĵ
           D          E      
       

    as si un cdigo comienza por A ha de terminar con T, por ejemplo:

            A12345-34/34$3T
            ^             ^
        que al leerlo dara :
             12345-34/34$3

_Sup5( cCode )
--------------

    Genera las tramas para los suplementos del 5 digitos para EAN 13

    ( Si, el de las numeraciones de las revistas, los que van junto a los
    EAN 13 de las revistas con el numero de volumen )


    cCode : caracteres a imprimir, en el rango '0' a '9'.
        han de ser hasta 5 digitos, si se expresan menos se completarn
        con '0'. No se ha de incluir el checkdigit, que es calculado por
        las rutinas.



_IND25( cCode, lCheck)
----------------------

    Genera las tramas del Industrial 2 de 5
    cCode : caracteres a imprimir, en el rango :
                         '1234567890'
        otros caracteres se ignorarn. Si se usa ChekDigit este ser
        aadido por las rutinas, no es necesario suministrarlo.


    lCkeck : .t. Aadir CheckDigit, .f. No aadir. Por defecto .f. el
        CheckDigit no est contemplado originalmente por las
        definiciones del cdigo, pero est soportado por la mayora de
        los lectores.


_MAT25( cCode, lCheck)
----------------------

    Genera las tramas del MATRIZ 2 de 5

    cCode : caracteres a imprimir, en el rango :
                         '1234567890'
        otros caracteres se ignorarn. Si se usa ChekDigit este ser
        aadido por las rutinas, no es necesario suministrarlo.


    lCkeck : .t. Aadir CheckDigit, .f. No aadir. Por defecto .f. el
        CheckDigit no est contemplado originalmente por las
        definiciones del cdigo, pero est soportado por la mayora de
        los lectores.


_INT25( cCode, lCheck)
----------------------

    Genera las tramas del entrelazado 2 de 5 ( posiblemente el ms denso )
    cCode : caracteres a imprimir, en el rango :
                         '1234567890'
        otros caracteres se ignorarn. Si se usa ChekDigit este ser
        aadido por las rutinas, no es necesario suministrarlo.


    lCkeck : .t. Aadir CheckDigit, .f. No aadir. Por defecto .f. el
        CheckDigit no est contemplado originalmente por las
        definiciones del cdigo, pero est soportado por la mayora de
        los lectores.



Tnicas de Generacin de Cdigos
--------------------------------

    Las tramas son secuencias de '1' y '0', representando los 1 a las
    barras y los 0 a los espacios, siendo las barras y los espacios del
    mismo tamao.

    No se incuyen cdigos de control de ninguna impresora, pero con un
    manual de esta es muy fcil hacerlo...

    p. ej.

    para emulacin IBM 9 agujas  y Codigo 3_9

    FUnction Print_Code( cCode )
        Local cTrama, n1,n2

        cTrama:=_code3_9(cCode)
        n1:=int(len(cCode)/256)
        n2:=(len(cCode)-n1*256)
        set console off
        set printer on
        ? CHR(27)+'L' // modo grfico
        ?? chr(n2)+chr(n1) // Numero de datos
        cTrama:=strtran(cTrama,'1',chr(255)) // las barras son 11111111
        cTrama:=strtran(cTrama,'0',chr(0))  // los espacios son 00000000
        ?? cTrama
        ? 'Ya est hecho'+chr(12)

        set console on
        set printer off
    return nil ...


    Otra manera muy fcil, y de impresin ms rpida ( aunque no de
    clculo); con la ventaja adicional de que con lo anterior hay que
    cambiar el interlineado de la impresora de 1/6 a 1/8, lo que
    complica la vida mucho ....

    Las nuevas impresoras permiten usar pasos de 20 cps o ms, y por
    otro lado el ASCII cuenta con los caracteres '','','' y ' '.
    Estos caractres, si bien en la VGA no se ven de igual ancho, si lo
    sn en las impresoras.

    Function Print_Code( cCode )
    local cCar, n,cTemp:='',cBarras:=''
    // por ejemplo para una epson esc/p2
    cCar:=_code128( cCode )+'0'
    // me aseguro que entran tdos las barras
    for n:=to len(cCar) step  2
        cTemp:=subatr(cCar,n,2)
        do case
            case cTemp='11'
                cBarras +=''
            case cTemp='01'
                cBarras+=''
            case cTemp='10'
                cBarras+=''
            case cTemp='00'
                cBarras:=' '
        endcase
    next
    set console off
    Set printer on
    ? cBarras
    set console on
    set printer off

    return nil



