por Waldemar Vigo
[Números en letras][División de un texto en renglones][Lectura y grabación binaria][Preguntas de Gente Amiga][Uso del Mouse][Impresoras a Chorro de Tinta][Correo al autor]
Mi tarea es programar, específicamente en el entorno
PC y más precisamente aún, con Clipper 5.01. Ante el embate de
Bill Gates, la atracción del entorno gráfico, la popularidad de
los sistemas operativos de 32 bits, la tendencia es dejar de lado este lenguaje
por Visual Basic o algun otro afín. Sin embargo, la obsolescencia de un
lenguaje de programación no tira por la borda la concepción de
rutinas. Los conceptos de las rutinas pueden pasarse de un lenguaje a otros, a
veces con cambios mínimos. Las que presento a continuación están
destinadas a dos fines:

Si Ud halla alguna otra solución o una
optimización de las presentes, sería de mi agrado conocerlas.
Si
Ud va a hacer uso de esta rutina en sus programas -lo cual vería yo con
mucho placer- simplemente hágamelo saber por e-mail. Esto es e-mailware,
es decir de libre uso, pero be polite!.
Conversión de números en texto
La rutina NTOL que convierte números en letras hace uso de matrices en memoria para almacenar las palabras que compondrán el texto final. Con un pequeño esfuerzo es posible usar archivos.dbf en lugar de esas matrices. El límite superior de mil millones es harto suficiente para la mayoría de las aplicaciones comerciales y también, con un pequeño esfuerzo, es posible ampliar este margen superior si fuere necesario.
Uso:
NTOL(nImporte) -> cImportEnLetras
nImporte es el total numérico que hay que representar con letras. El máximo es de mil millones. Si se suministra un número mayor, NTOL devuelve una cadena vacía.
cImportEnLetras es una cadena de caracteres que contiene el número expresado en letras, en idioma español.
Ejemplo:
? NTOL(2132,50) // Devuelve: "DOS MIL CIENTO TREINTA Y DOS CON 50/100"
* IMPORLET.PRG Rutinas que convierten números con dos decimales en letras
*
********** Rutina válida para números menores de mil millones
FUNC NTOL(nNumero)
LOCAL nCentavos := (nNumero - INT(nNumero)) * 100
LOCAL cCadena := ''
LOCAL nMillon := 0
LOCAL nCienMil := 0
nNumero := INT(nNumero)
IF nNumero < 1000000000 // Mil millones!!!
IF nNumero > 999999 // es un millón o más, hasta 999 millones
nMillon := INT(nNumero/1000000)
nNumero := nNumero - nMillon*1000000
cCadena += BASE(nMillon, .T.) + IF(nMillon>1, ' MILLONES ', 'MILLON ')
ENDIF
IF nNumero > 999 // Son más de mil
nCienMil := INT(nNumero/1000)
nNumero := nNumero - nCienMil*1000
cCadena += BASE(nCienMil, .F.) + ' MIL '
ENDIF
cCadena += BASE(nNumero, .T.)
IF .NOT.EMPTY(cCadena)
cCadena += ' CON '
ENDIF
cCadena += STRZERO(nCentavos, 2) + '/100'
ENDIF
RETURN (STRTRAN(cCadena, ' ', ' '))
********** Se pasa el número <= 999 sin decimales
STATIC FUNC BASE(nNumero, lFin)
LOCAL cCadena := ''
LOCAL nUnidad := 0
LOCAL nDecena := 0
LOCAL nCentena := 0
IF nNumero < 1000
IF nNumero > 99
nCentena := INT(nNumero/100)
nNumero := nNumero - nCentena*100
IF nCentena == 1 .AND. nNumero == 0
cCadena += 'CIEN '
ELSE
cCadena += CENTENAS(nCentena) + ' '
ENDIF
ENDIF
IF nNumero > 29
nDecena := INT(nNumero/10)
nNumero := nNumero - nDecena*10
IF nNumero > 0
cCadena += DECENAS(nDecena) + ' Y ' + UNIDAD(nNumero, F.) + ' '
ELSE
cCadena += DECENAS(nDecena) + ' '
ENDIF
ELSE
cCadena += UNIDAD(nNumero, lFin)
ENDIF
ENDIF
RETURN (cCadena)
********** lFin indica si debe tomarse UNO en lugar de UN
STATIC FUNC UNIDAD(nNumero, lFin)
LOCAL aUnidades := {'UN','DOS','TRES','CUATRO','CINCO','SEIS','SIETE', ;
'OCHO','NUEVE','DIEZ','ONCE','DOCE','TRECE','CATORCE', ;'QUINCE','DIECISEIS', ;
'DIECISIETE','DIECIOCHO','DIECINUEVE','VEINTE',;
'VEINTIUNO','VEINTIDOS', ;
'VEINTITRES','VEINTICUATRO','VEINTICINCO','VEINTISEIS',;
'VEINTISIETE', ;
'VEINTIOCHO','VEINTINUEVE'}
LOCAL cCadena := ''
IF nNumero > 0
IF nNumero == 1 .AND. lFin
cCadena := 'UNO'
ELSE
cCadena := aUnidades[nNumero]
ENDIF
ENDIF
RETURN (cCadena)
**********
STATIC FUNC DECENAS(nNumero)
LOCAL aDecenas := {'DIEZ','VEINTE','TREINTA','CUARENTA','CINCUENTA', ;
'SESENTA','SETENTA','OCHENTA','NOVENTA'}
RETURN (IF(nNumero==0, '', aDecenas[nNumero]))
**********
STATIC FUNC CENTENAS(nNumero)
LOCAL aCentenas := {'CIENTO','DOSCIENTOS','TRESCIENTOS','CUATROCIENTOS', ;
'QUINIENTOS','SEISCIENTOS','SETECIENTOS','OCHOCIENTOS','NOVECIENTOS' }
RETURN (IF(nNumero==0, '', aCentenas[nNumero]))
Distribuir un texto en renglones
La rutina GRAPPA ha sido probada para que suministre una matriz donde cada elemento corresponde a un renglón, de modo que cada uno contenga palabras enteras, salvo que haya alguna cuyo largo sea mayor que el indicado en nCaracteres; en ese caso se trunca la palabra larga. Si hay retornos de carro intercalados -chr(13)+chr(10)- se los toma como un renglón más, en blanco.
Uso:
GRAPPA(cTexto, nCarac) -> aTexto
cTexto es la cadena de caracteres que hay que poner en renglones.
nCarac es el número de caracteres que tendrá como máximo cada renglón.
aTexto es una matriz de caracteres, donde cada elemento mide nCarac, el texto de cada renglón está recostado sobre la izquierda y está rellenado a la derecha con blancos.
********** Devuelve una matriz con elementos/renglones de nCaracteres cada uno.
FUNC GRAPPA(cCadena, nCaracteres)
LOCAL aTexto := {}
LOCAL nCont := 0
LOCAL lMuyLarga := .F.
cCadena := IF(cCadena == NIL, '', LTRIM(cCadena))
nCaracteres := IF(nCaracteres == NIL, 0, nCaracteres)
IF nCaracteres > 0
IF LEN(cCadena) > nCaracteres
WHILE LEN(cCadena) > 0
WHILE chr(13)+chr(10) $ LEFT(cCadena, nCaracteres)
IF LEFT(cCadena,2) == chr(13) + chr(10)
AADD(aTexto, SPACE(nCaracteres))
ELSE
AADD(aTexto, PADR(LEFT(cCadena,AT(chr(13)+chr(10),cCadena)-1), nCaracteres))
ENDIF
cCadena := SUBSTR(cCadena, AT(chr(13)+chr(10),cCadena)+2)
ENDDO
IF LEN(cCadena) <= nCaracteres
AADD(aTexto, PADR(cCadena, nCaracteres))
EXIT
ELSE
IF SUBSTR(cCadena, nCaracteres, 1) == ' ' .OR. ;
SUBSTR(cCadena, nCaracteres+1, 1) == ' ' .OR. ;
SUBSTR(cCadena, nCaracteres, 1) == CHR(13) .OR. ;
SUBSTR(cCadena, nCaracteres+1, 1) == CHR(13)
* El último carácter o el primero del siguiente es justo
* un espacio en blanco o un retorno de carro
IF SUBSTR(cCadena, nCaracteres, 1) == CHR(13)
AADD(aTexto, PADR(LEFT(cCadena, nCaracteres-1), nCaracteres))
cCadena := LTRIM(SUBSTR(cCadena, nCaracteres))
ELSE
AADD(aTexto, PADR(LEFT(cCadena, nCaracteres), nCaracteres))
cCadena := LTRIM(SUBSTR(cCadena, nCaracteres + 1))
ENDIF
ELSE
nCont := nCaracteres
lMuyLarga := .T.
WHILE --nCont > 0
IF SUBSTR(cCadena, nCont, 1 ) == ' ' .OR. ;
SUBSTR(cCadena, nCont, 1 ) == CHR(13)
IF nCont == 1
IF SUBSTR(cCadena, nCont, 1) == CHR(13)
AADD(aTexto, SPACE(nCaracteres))
cCadena := LTRIM(SUBSTR(cCadena, 3))
ELSE
cCadena := LTRIM(SUBSTR(cCadena, 2))
ENDIF
ELSE
IF SUBSTR(cCadena, nCont, 1 ) == CHR(13)
AADD(aTexto, PADR(LEFT(cCadena, nCont-1), nCaracteres))
cCadena := LTRIM(SUBSTR(cCadena, nCont))
ELSE
AADD(aTexto, PADR(LEFT(cCadena, nCont), nCaracteres))
cCadena := LTRIM(SUBSTR(cCadena, nCont + 1))
ENDIF
lMuyLarga := .F.
ENDIF
EXIT
ENDIF
ENDDO
IF lMuyLarga
AADD(aTexto, PADR(LEFT(cCadena, nCaracteres), nCaracteres))
cCadena := LTRIM(SUBSTR(cCadena, nCaracteres + 1))
ENDIF
ENDIF
ENDIF
ENDDO
ELSE
AADD(aTexto, cCadena)
ENDIF
ELSE
AADD(aTexto, '')
ENDIF
RETURN(aTexto)
**********
El presente código no es propiamente una rutina
independiente. Por otra parte es muy específica de Clipper5.0x pero como
usa funciones muy parecidas a las de C/C++ la cito por si quiere traspolarla.
Esta
rutina fue desarrollada para "limpiar" un log compilado: había
que eliminar la parte final del archivo sin tocar el comienzo.
nManejOut y nManejIn son los manejadores de los
archivos NUEVO.LOG y VIEJO.LOG respectivamente.
Lee de a 50 caracteres
(podría ser otra cantidad, pero debemos aseguramos que pueda caber la
cadena buscada en ella), busca esa cadena (cConstante) y si la halla,
graba los caracteres anteriores a la misma y finaliza.
cVariable debe tener 50 caracteres como mínimo,
en el caso mencionado.
cVari es transitoria para no ejecutar dos
veces un complejo de funciones y no escribirlas.
lBien es una
variable lógica que es inicializada en .F. al crearla.
nLeidos
es una variable numérica para detectar si se leyeron datos del archivo.
Por
supuesto, todas las variables son locales.
IF (nManejOut := FCREATE('NUEVO.LOG')) # -1
IF (nManejIn := FOPEN('VIEJO.LOG')) # 0
WHILE .T.
IF (nLeidos := FREAD(nManejIn, @cVariable, 50)) > 0
IF cConstante $ cVariable
cVari := LEFT(cVariable, AT(cConstante, cVariable)-1)
IF FWRITE(nManejOut, cVari, LEN(cVari)) # LEN(cVari)
?'Error al grabar NUEVO.LOG'
ELSE
lBien := .T.
ENDIF
EXIT
ELSE
IF FWRITE(nManejOut, cVariable, nLeidos) # nLeidos
?'Error al grabar NUEVO.LOG'
ENDIF
ENDIF
ELSE
EXIT
ENDIF
ENDDO
FCLOSE(nManejIn)
ENDIF
FCLOSE(nManejOut)
ENDIF
IF lBien
FERASE('VIEJO.LOG')
RUN COPY NUEVO.LOG VIEJO.LOG
FERASE('NUEVO.LOG')
ENDIF
Uso del Ratón con Clipper 5.01/5.02
Aunque
parezca extemporáneo, varios amigos han preguntado por una rutina que
permita el uso del mouse con Clipper 5.01/5.02.
Luego de revisar muchos cajones (la verdad es que nunca hice una aplicación real que las utilizara) las pongo a vuestra disposición.
Las rutinas siguientes fueron suministradas por el maestro Gustavo Gretter.
Sería de buena educación, en caso de usarlas, enviarle un e-mail agradeciéndoselo.
include macros.mac
CODE SEGMENT
ASSUME CS:CODE
public ResetMouse
public MouseOn
public MouseOff
public GetMouseX
public GetMouseY
public GetLeft
public GetRight
;
ResetMouse PROC FAR
xor ax,ax
int 33h
ret
ResetMouse ENDP
;
MouseOn PROC FAR
mov ax,1
int 33h
ret
MouseOn ENDP
;
MouseOff PROC FAR
mov ax,2
int 33h
ret
MouseOff ENDP
;
GetMouseX PROC FAR
mov ax,3
int 33h
push cx
call __retni
add sp,2
ret
GetMouseX ENDP
;
GetMouseY PROC FAR
mov ax,3
int 33h
push dx
call __retni
add sp,2
ret
GetMouseY ENDP
;
GetLeft PROC FAR
mov ax,3
int 33h
and bx,1
push bx
call __retni
add sp,2
ret
GetLeft ENDP
;
GetRight PROC FAR
mov ax,3
int 33h
and bx,2
push bx
call __retni
add sp,2
ret
GetRight ENDP
;
CODE ENDS
END
Una vez compiladas (puede ser con MASM5), se obtendrá el .OBJ que luego será linkeditado con el fuente.PRG que hayan construido y serán invocadas así:
cls
MouseOn()
WHILE .T.
@ 10,10 SAY GetMouseX()/8
@ 11,10 SAY GetMOuseY()/8
IF GetLeft()!=0
? chr(7)
ENDIF
IF GetRight()!=0
? chr(7)
? chr(7)
ENDIF
ENDDO
MouseOff()
Cayó en nuestras manos, luego de ingentes esfuerzos, unas tablas de caracteres de control que deben enviarse a las impresoras de Chorro de tinta para que acepten compresión, letra cursiva, etc. pudiéndose aplicar desde una rutina DOS incluso.
Como el texto es muy largo irá apareciendo de a poco, a medida que el ánimo me contagie.
Este documento lista los comandos de impresora HP DEskJet PCL para formato básico de página y selección de fuentes. Si necesita más información acerca de los comandos PCL, por favor use el Manual de Referencia Técnica (part number 2170-90099).
|
Algunas indicaciones sobre el uso de los comandos PCL |
Puede usar la siguiente tabla para convertir valores ASCII a valores decimales o hexadecimales:
| ASCII value |
Hex | Dec | Descripción |
| 0 | 30 | 48 | Cero |
| 1 | 31 | 49 | Uno |
| 2 | 32 | 50 | Dos |
| 3 | 33 | 51 | Tres |
| 4 | 34 | 52 | Cuatro |
| 5 | 35 | 53 | Cinco |
| 6 | 36 | 54 | Seis |
| 7 | 37 | 55 | Siete |
| 8 | 38 | 56 | Ocho |
| 9 | 39 | 57 | Nueve |
| . | 2E | 46 | Punto |
|
Comandos de impresión Principios básicos de los comandos de impresión
El carácter "l" no aparece en la pantalla.
Cómo combinar los comandos de impresión |
||||||||||||||||||||||||||||||||||||
Ejemplo:
|
||||||||||||||||||||||||||||||||||||
|
Algunas reglas para combinar los comandos de impresión:
|
||||||||||||||||||||||||||||||||||||
|
Cómo usar los equivalente decimales o hexadecimales
|
||||||||||||||||||||||||||||||||||||
|
Cómo usar comandos de impresión para seleccionar tipos
Cuando se selecciona un tipo con los comandos de impresión, debe enviarse el comando correcto para cada característica. Use la lista de prioridades de la impresora para asegurarse de que se imprimirán los tipos correctos. Envíe el comando para el pitch para seleccionar Letter Gothic de pitch 12, de 12 puntos. El valor por omisión de la característica del pitch es 10. Si no se envía el
comando para pitch 12, se imprimirá el tipo por omisión Courier de pitch 10 debido a que la característica del pitch prevalece sobre la del tipo de letra. Para seleccionar el
tipo Courier, cursiva, de pitch 10, de 12 puntos, envíe el siguiente comando de impresión: O, para elegir el tipo CG Times (PS, 12 puntos), envíe: |
||||||||||||||||||||||||||||||||||||
| Característica | Comando | Equivalente Decimal | Equivalente Hexad. | |||
| Control de la Impresora | ||||||
| Reinicializar | EcE | 027 069 | 1B 45 | |||
| Autoverificación | Ecz | 027 122 | 1B 7A | |||
| Control de la entrada del papel (fuente del medio) | ||||||
| Expulsar medio | Ec & l 0 H | 027 038 108 048 072 | 1B 26 6C 30 48 | |||
| Alimentar desde bandeja | Ec & l 1 H | 027 038 108 049 072 | 1B 26 6C 31 48 | |||
| Alimentar sobre | Ec & l 3 H | 027 038 108 051 072 | 1B 26 6C 33 48 | |||
| Modalidad de impresión (texto) | ||||||
| Unidireccional izq. a der. | Ec & k 0 W | 027 038 107 048 087 | 1B 26 6B 30 57 | |||
| Bidireccional | Ec & k 1 W | 027 038 107 049 087 | 1B 26 6B 31 57 | |||
| Unidireccional der. a izq. | Ec & k 2 W | 027 038 107 050 087 | 1B 26 6B 32 57 | |||
| Subrayado | ||||||
| Simple fijo | Ec & d 1 D | 027 038 100 049 068 | 1B 26 64 31 44 | |||
| Doble fijo | Ec & d 2 D | 027 038 100 050 068 | 1B 26 64 32 44 | |||
| Simple flotante | Ec & d 3 D | 027 038 100 051 068 | 1B 26 64 33 44 | |||
| Doble flotante | Ec & d 4 D | 027 038 100 052 068 | 1B 26 64 34 44 | |||
| Apagar | Ec & d @ | 027 038 100 064 | 1B 26 64 40 | |||
| Fin de avance de línea | ||||||
| Activado | Ec & s 0 C | 027 038 115 048 067 | 1B 26 73 30 43 | |||
| Desactivado | Ec & s 1 C | 027 038 115 049 067 | 1B 26 73 31 43 | |||
| Datos transparentes de la impresora | ||||||
| Nro. de bytes | Ec & p # X [data] | 027 038 112 # 088 [data] | 1B 26 70 # 58 [data] | |||
| Funciones de representación | ||||||
| Activado | EcY | 027 089 | 1B 59 | |||
| Desactivado | EcZ | 027 090 | 1B 5A | |||
| Control del Subrayado | ||||||
| Activar línea por línea | Ec & k 0 E | 027 038 107 048 069 | 1B 26 6B 30 45 | |||
| Desactivar línea por línea | Ec & k 1 E | 027 038 107 049 069 | 1B 26 6B 31 45 | |||
| Control de cambio (SI/SO) | ||||||
| Activar línea por línea | Ec & k 0 F | 027 038 107 048 070 | 1B 26 6B 30 46 | |||
| Desactivar línea por línea | Ec & k 1 F | 027 038 107 049 070 | 1B 26 6B 31 46 | |||
| Control de la Página | ||||||
| Orientación de la página* | ||||||
| Apaisada | Ec & l 1 O | 027 038 108 049 079 | 1B 26 6C 31 4F | |||
| Vertical | Ec & l 0 O | 027 038 108 048 079 | 1B 26 6C 30 4F | |||
| Tamaño del papel* | ||||||
| Tamaño por omisión | Ec & l 0 A | 027 038 108 048 065 | 1B 26 6C 30 41 | |||
| Carta EE.UU. | Ec & l 2 A | 027 038 108 050 065 | 1B 26 6C 32 41 | |||
| Legal EE.UU. | Ec & l 3 A | 027 038 108 051 065 | 1B 26 6C 33 41 | |||
| A4 | Ec & l 26 A | 027 038 108 050 054 065 | 1B 26 6C 32 36 41 | |||
| Sobre Nro. 10 (apaisada) | Ec & l -81 A | 027 038 108 045 056 049 065 | 1B 26 6C 2D 38 31 41 | |||
| Espaciado de línea | ||||||
| Líneas por pulgada por número de líneas | Ec & l # D | 027 038 108 # 068 | 1B 26 6C # 44 | |||
| Longitud de la página* | ||||||
| Número de líneas | Ec & l # P | 027 038 108 # 080 | 1B 26 6C # 50 | |||
| Fin de línea | ||||||
| RC => RC, LF => LF, FF => FF | Ec & k 0 G | 027 038 107 048 071 | 1B 26 6B 30 47 | |||
| RC => CR+LF, LF => LF, FF => FF | Ec & k 1 G | 027 038 107 049 071 | 1B 26 6B 31 47 | |||
| RC => RC+LF, LF => RC+LF, FF => RC+FF | Ec & k 3 G | 027 038 107 051 071 | 1B 26 6B 33 47 | |||
| Salto de la perforación | ||||||
| Activado | Ec & l 1 L | 027 038 108 049 076 | 1B 26 6C 31 4C | |||
| Desactivado | Ec & l 0 L | 027 038 108 048 076 | 1B 26 6C 30 4C | |||
| Margen superior* | ||||||
| Número de líneas | Ec & l # E | 027 038 108 # 069 | 1B 26 6C # 45 | |||
| Longitud del texto* | ||||||
| Número de líneas | Ec & l # F | 027 038 108 # 070 | 1B 26 6C # 46 | |||
| Márgenes laterales* | ||||||
| Izquierdo (columna número) | Ec & L | 027 038 097 # 076 | 1B 26 61 # 4C | |||
| Derecho (columna número) | Ec & M | 027 038 097 # 077 | 1B 26 61 # 4D | |||
| Escalar el Texto | ||||||
| Desactivada | Ec & k 5 W | 027 038 107 053 087 | 1B 26 6B 35 57 | |||
| Activada | Ec & k 6 W | 027 038 107 054 087 | 1B 26 6B 36 57 | |||
| Colocación del cursor | ||||||
| Número del índice del movimiento horizontal en incrementos de 1/120avos de pulgada | Ec & k # H | 027 038 107 # 072 | 1B 26 6B # 48 | |||
| Moverse a la columna número | Ec & a # C | 027 038 097 # 067 | 1B 26 61 # 43 | |||
| Número horizontal (decipuntos) | Ec & a # H | 027 038 097 # 072 | 1B 26 61 # 48 | |||
| Número horizontal (puntos) | Ec * p # X | 027 042 112 # 088 | 1B 2A 70 # 58 | |||
| Número del índice del movimiento vertical en incrementos de 1/48avos de pulgada | Ec & l # C | 027 038 108 # 067 | 1B 26 6C # 43 | |||
| Moverse a la fila número | Ec & a # R | 027 038 097 # 082 | 1B 26 61 # 52 | |||
| Número vertical (decipuntos) | Ec & a # V | 027 038 097 # 086 | 1B 26 61 # 56 | |||
| Número vertical (puntos) | Ec * p # Y | 027 042 112 # 089 | 1B 2A 70 # 59 | |||
| Selección del Tipo | ||||||
| Conjunto de caracteres | ||||||
| PC-8 | Ec( 10 U | 027 040 049 048 085 | 1B 28 31 30 55 | |||
| HP Roman8 | Ec( 8 U | 027 040 056 085 | 1B 28 31 38 55 | |||
| PC-8 Danés/Noruego | Ec( 11 U | 027 040 049 049 085 | 1B 28 31 31 55 | |||
| PC-850 | Ec( 12 U | 027 040 049 050 085 | 1B 28 31 32 55 | |||
| ECMA-94 Latín 1 | Ec( 0 N | 027 040 048 078 | 1B 28 30 4E | |||
| Alemán ISO 21 | Ec( 1 G | 027 040 049 071 | 1B 28 31 46 | |||
| Francés ISO 69 | Ec( 1 F | 027 040 049 070 | 1B 28 31 46 | |||
| Italiano ISO 15 | Ec( 0 I | 027 040 048 073 | 1B 28 30 49 | |||
| Español ISO 17 | Ec( 2 S | 027 040 050 083 | 1B 28 32 53 | |||
| Sueco ISO 11 | Ec( 0 S | 027 040 048 083 | 1B 28 30 53 | |||
| Sueco ISO 10 | Ec( 3 S | 027 040 051 083 | 1B 28 33 53 | |||
| Noruego ISO 60 | Ec( 0 D | 027 040 048 068 | 1B 28 30 44 | |||
| Noruego ISO 61 | Ec( 1 D | 027 040 049 068 | 1B 28 31 44 | |||
| Noruego ISO 61 | Ec( 1 D | 027 040 049 068 | 1B 28 31 44 | |||
| Portugués ISO 16 | Ec( 4 S | 027 040 052 083 | 1B 28 34 53 | |||
| Reino Unido ISO 4 | Ec( 1 E | 027 040 049 069 | 1B 28 31 45 | |||
| ANSI ASCII ISO 6 | Ec( 0 U | 027 040 048 085 | 1B 28 30 55 | |||
| JIS ASCII | Ec( 0 K | 027 040 048 075 | 1B 28 30 4B | |||
| Legal HP | Ec( 1 U | 027 040 049 085 | 1B 28 31 55 | |||
| ISO IRV | Ec( 1 U | 027 040 049 085 | 1B 28 31 55 | |||
| Line Draw (opcional) | Ec( 0 L | 027 040 048 076 | 1B 28 30 4C | |||
| Matemáticas 7 (opcional) | Ec( 0 M | 027 040 048 077 | 1B 28 30 4D | |||
| Matemáticas 8 (opcional) | Ec( 8 M | 027 040 056 077 | 1B 28 38 4D | |||
| Matemáticas 8a (opcional) | Ec( 0 Q | 027 040 048 081 | 1B 28 30 51 | |||
| Matemáticas 8b (opcional) | Ec( 1 Q | 027 040 049 081 | 1B 28 31 51 | |||
| PIFont (opcional) | Ec( 15 U | 027 040 049 053 085 | 1B 28 31 35 55 | |||
| PIFonta (opcional) | Ec( 2 Q | 027 040 050 081 | 1B 28 32 51 | |||
| ... | ... | ... | ... | |||
| Espaciado* | ||||||
| Proporcional | Ec( s 1 P | 027 040 115 049 080 | 1B 28 73 31 50 | |||
| Fijo | Ec( s 0 P | 027 040 115 048 080 | 1B 28 73 30 50 | |||
| Pitch de impresión* | ||||||
| Nro. de caracteres por pulgada | Ec(s # H | 027 040 115 # 072 | 1B 28 73 # 48 | |||
| Tamaño del punto (Altura del carácter)* | ||||||
| Nro. de 1/72 avos de pulgada | Ec( s # V | 027 040 115 # 086 | 1B 28 73 # 56 | |||
| Estilo* | ||||||
| Vertical | Ec( s 0 S | 027 040 115 048 083 | 1B 28 73 30 53 | |||
| Cursiva | Ec( s 1 S | 027 040 115 049 083 | 1B 28 73 31 53 | |||
| Impacto* | ||||||
| Negrita | Ec( s 3 B | 027 040 115 051 066 | 1B 28 73 33 42 | |||
| Normal | Ec(s 0 B | 027 040 115 048 066 | 1B 28 73 30 42 | |||
| Extra Negrita (opcional) | Ec(s 7 B | 027 040 115 055 066 | 1B 28 73 37 42 | |||
| Tipo de letra* | ||||||
| Courier | Ec(s 3 T | 027 040 115 051 084 | 1B 28 73 33 54 | |||
| CG Times | Ec(s 4101 T | 027 040 115 052 049 048 049 084 | 1B 28 73 34 31 30 31 54 | |||
| Letter Gothic | Ec(s 6 T | 027 040 115 054 084 | 1B 28 73 36 54 | |||
| Univers (opcional) | Ec(s 52 T | 027 040 115 053 050 084 | 1B 28 73 35 32 54 | |||
| Pica (opcional) | Ec(s 1 T | 027 040 115 049 084 | 1B 28 73 31 54 | |||
| Prestige (opcional) | Ec(s 8 T | 027 040 115 056 084 | 1B 28 73 38 54 | |||
| Elite (opcional) | Ec(s 2 T | 027 040 115 050 084 | 1B 28 73 32 54 | |||
| Script (opcional) | Ec(s 7 T | 027 040 115 055 084 | 1B 28 73 37 54 | |||
| Helvetica (opcional) | Ec(s 4 T | 027 040 115 052 084 | 1B 28 73 34 54 | |||
| Presentations (opcional) | Ec(s 11 T | 027 040 115 049 049 084 | 1B 28 73 31 31 54 | |||
| Times Roman (opcional) | Ec(s 5 T | 027 040 115 053 084 | 1B 28 73 35 54 | |||
| CG Century Schoolbook (opcional) | Ec(s 23 T | 027 040 115 050 051 084 | 1B 28 73 32 33 54 | |||
| Brush (opcional) | Ec(s 32 T | 027 040 115 051 050 084 | 1B 28 73 33 32 54 | |||
| Dom Casual (opcional) | Ec(s 61 T | 027 040 115 054 049 084 | 1B 28 73 36 31 54 | |||
| Univers Condensed (opcional) | Ec(s 85 T | 027 040 115 056 053 084 | 1B 28 73 38 35 54 | |||
| Garamond (opcional) | Ec(s 101 T | 027 040 115 049 048 049 084 | 1B 28 73 31 30 31 54 | |||
| CG Triunvirate (opcional) | Ec(s 4 T | 027 040 115 052 084 | 1B 28 73 34 54 | |||
| Calidad de Impresión | ||||||
| Correspondencia | Ec(s 2 Q | 027 040 115 050 081 | 1B 28 73 32 51 | |||
| Borrador | Ec(s 1 Q | 027 040 115 049 081 | 1B 28 73 31 51 | |||
| Manejo de la carga de los tipos | ||||||
| Nro. de ID del Tipo | Ec * c # D | 027 042 099 # 068 | 1B 2A 63 # 44 | |||
| Nro. del código ASCII | Ec * c # E | 027 042 099 # 069 | 1B 2A 63 # 45 | |||
| Borrar todo | Ec c 0 F | 027 042 099 048 070 | 1B 2A 63 30 46 | |||
| Borrar último | Ec c 2 F | 027 042 099 050 070 | 1B 2A 63 32 46 | |||
| Hacer temporales | Ec c 4 F | 027 042 099 052 070 | 1B 2A 63 34 46 | |||
| Hacer temporales | Ec c 5 F | 027 042 099 053 070 | 1B 2A 63 35 46 | |||
| Crear número de bytes del tipo | Ec ) s # W [data] | 027 041 115 # 087 [data] | 1B 29 73 # 57 [data] | |||
| Crear número de bytes del caract. | Ec(s # W [data] | 027 040 115 # 087 [data] | 1B 28 73 # 57 [data] | |||
| Selec. nro. primario de ID | Ec( # X | 027 040 # 088 | 1B 28 # 58 | |||
| Selec. nro. secundario de ID | Ec) # X | 027 041 # 088 | 1B 29 # 58 | |||
| Gráficos de Barrido | ||||||
| Comenzar gráficos de barrido | ||||||
| Extremo izquierdo | Ec* r 0 A | 027 042 114 048 065 | 1B 2A 72 30 41 | |||
| Posición actual del cursor | Ec* r 1 A | 027 042 114 049 065 | 1B 2A 72 31 41 | |||
| Terminar gráficos de barrido | ||||||
| Terminar gráficos | Ec* r b C | 027 042 114 098 067 | 1B 2A 72 62 43 | |||
| Resolución | ||||||
| 75 puntos por pulgada | Ec* t 75 R | 027 042 116 055 053 082 | 1B 2A 74 37 35 52 | |||
| 100 puntos por pulgada | Ec* t 100 R | 027 042 116 049 048 048 082 | 1B 2A 74 31 30 30 52 | |||
| 150 puntos por pulgada | Ec * t 150 R | 027 042 116 049 053 048 082 | 1B 2A 74 31 35 30 52 | |||
| 300 puntos por pulgada | Ec * t 300 R | 027 042 116 051 048 048 082 | 1B 2A 74 33 30 30 52 | |||
| Configurar datos de barrido | Ec * g # W | 027 042 103 # 087 | 1B 2A 67 # 57 | |||
| Fijar ancho de gráficos de barrido | ||||||
| Número de píxeles | Ec * r # S | 027 042 114 # 083 | 1B 2A 72 # 53 | |||
| Modalidad de impresión (gráficos) | ||||||
| Gráficos por omisión (sin quiebre) | Ec * p 0 N | 027 042 116 055 053 082 | 1B 2A 74 37 35 52 | |||
| Bidireccional | Ec * p 1 N | 027 042 116 049 048 048 082 | 1B 2A 74 31 30 30 52 | |||
| Izquierda a derecha | Ec * p 2 N | 027 042 116 049 053 048 082 | 1B 2A 74 31 35 30 52 | |||
| Derecha a izquierda | Ec * p 3 N | 027 042 116 051 048 048 082 | 1B 2A 74 33 30 30 52 | |||
| Bidireccional condicional | Ec * p 4 N | 027 042 103 # 087 | 1B 2A 67 # 57 | |||
| Fijar compresión de gráficos de barrido | ||||||
| Método 0 | Ec * b 0 M | 027 042 098 048 077 | 1B 2A 62 30 4D | |||
| Método 1 | Ec * b 1 M | 027 042 098 049 077 | 1B 2A 62 31 4D | |||
| Método 2 | Ec * b 2 M | 027 042 098 050 077 | 1B 2A 62 32 4D | |||
| Método 3 | Ec * b 3 M | 027 042 098 051 077 | 1B 2A 62 33 4D | |||
| Método 9 | Ec * b 9 M | 027 042 098 057 077 | 1B 2A 62 39 4D | |||
| Seed Row Source | Ec * b # S | 027 042 098 # 083 | 1B 2A 62 # 53 | |||
| Transferir gráficos de barrido | ||||||
| Número de bytes | Ec * b # W [data] | 027 042 098 # 087 [data] | 1B 2A 62 # 57 [data] | |||
| Transfer graphics data by plane | Ec * b # V data | 027 042 098 #...# 086 data | 1B 2A 62 #...# 56 data | |||
| Movimiento vertical relativo del pixel (previamente llamado gráficos Y Offset) | ||||||
| Número de puntos | Ec * b # Y | 027 042 098 # 089 | 1B 2A 62 # 59 | |||
| Configurar la calidad de gráficos | ||||||
| Calidad Borrador | Ec * r 1 Q | 027 042 114 049 081 | 1B 2A 72 31 51 | |||
| Calidad similar a Correspondencia | Ec * r 2 Q | 027 042 114 050 081 | 1B 2A 72 32 51 | |||
| Fijar número de planos de barrido por línea | ||||||
| Color del primer plano | Ec * r 1 U | 027 042 114 049 085 | 1B 2A 72 31 55 | |||
| 3 planos, paleta CYM | Ec * r - 3 U | 027 042 114 045 051 055 | 1B 2A 72 2D 33 37 | |||
| 3 planos, paleta RGB | Ec * r 3 U | 027 042 114 051 055 | 1B 2A 72 33 37 | |||
| Comandos misceláneos de gráficos de barrido | ||||||
| Entrelazado-gráficos de barrido | Ec * o # Q | 027 042 111 # 081 | 1B 2A 6F # 51 | |||
| Reducción-gráficos de barrido | Ec * o # D | 027 042 111 # 068 | 1B 2A 6F # 44 | |||
| * Los comandos de impresión se muestran en el orden en que deben ser enviados. # indica el valor numérico | ||||||
El código de control es un cáracter que inicia una función de la impresora. Para generar CTRL, presione la tecla de control en el teclado de la computadora al escribir el carácter. Esta tecla podría rotularse: CTRL, CNTL o CTL. La siguiente tabla enumera los códigos HP PCL que la impresora reconoce. La columna "Pulsación" indica la letra que deben presionarse con la tecla CTRL para enviar un código de control. La posición "Posición actual de impresión" en la columna "Descripción" es la posición donde la impresora imrpime el siguiente carácter.
| Nombres de código | Símbolo | Descripción | Valor Dec. | Valor Hex. | Pulsación |
| Retroceso | BS | Mueve la posición de impresión un carácter a la izquierda. | 08 | 08 | Ctl H |
| Tab. Horizontal | HT | Hace que la impresora se mueva a la siguiente posición predefinida del tabulador. (Los tabuladores se han fijado cada octava posición de carácter, empezando en el margen izquierdo.) | 09 | 09 | Ctl I |
| Salto de Línea | LF | Avanza los medios una línea según el espaciado actual que se haya fijado. | 10 | 0A | Ctl J |
| Salto de hoja | FF | Avanza el medio al siguiente tope del papel. El tope del papel es la primera línea de impresión en la siguiente página. | 12 | 0C | Ctl L |
| Retorno del carro | CR | Mueve la posición de impresión actual un carácter hacia la izquierda. No avanza el papel. | 13 | 0D | Ctl M |
| Desactivar cambio | S0 | Selecciona el uso del conjunto secundario de caracgteres. | 14 | 0E | Ctl N |
| Activar cambio | S1 | Selecciona el uso del conjunto primario de caracteres. | 15 | 0F | Ctl O |
| Control de dispositivo 1 | <D1> | Se usa sólo para el protocolo RS-232-C. Se usa como el carácter XON para el protocolo RS-232-C XON/XOFF. Se usa también para activar la petición del estado. | 17 | 11 | Ctl Q |
| Control de dispositivo 3 | <D3> | Se usa sólo para el protocolo RS-232-C. Se usa como el carácter XON para el protocolo RS-232-C XON/XOFF. | 19 | 13 | Ctl S |
| Escape | EC | Le indica a la impresora que los caracteres que siguen forman parte del comando de impresión. | 27 | 1B | Ctl [ |
| Método de impresión Impresión termal por rocío de tinta sobre papel corriente. Velocidad de impresión con tinta negra* Velocidad de impresión, tinta negra, en MSWindows Modalidad Presentación: 1 página por minutos. Modalidad Normal: 2 páginas por minutos Modalidad Borrador: 3 páginas por minuto Velocidad de impresión, tinta a color, en MSWindows Modalidad Presentación: 7 minutos por página Modalidad Normal: 4 minutos por página Modalidad Borrador: 3 minutos por página Velocidad del mecanismo DOS (tinta negra) Modalidad correspondencia: 167 cps a 10 cpp Modalidad Borrador: 240 cps a 10 cpp Velocidad del mecanismo DOS a color La velocidad de impresión depende del contenido del documento, la aplicación de software y la configuración del sistema. Estructura de la celda Modalidad Correspondencia: 300 x 300 dpi Modalidad Borrador: 300 x 150 dpi Resolución de los gráficos Página entera 75, 100, 150, 300 dpi Lenguaje de los comandos de la impresora HP PCL Level 3 Soporte para los conjuntos de caracteres HP Roman8, PC-8 (D/N), ISO 7 bit languages (Alemán, Francés, Italiano, Noruego, Portugués, Sueco, Español, R.U.) JIS ASCII, ASCII, ECMA-94 Latín 1, HP Legal, HP Line Draw, Math y Pl. Tipos incorporados (internos) Vertical: Courier Pitch: 5, 10, 16.67, 20. Tamaño de pt: 6, 12 pt. Estilo: Vertical, Cursiva, Impacto: Normal, Negrita. |
CG Times Pitch: Proporcional. Tamaño del pt.: 6, 12. Estilo: Vertical, Cursiva. Impacto: NOrmal, Negrita. Letter Gothic Pitch: 6, 12, 24. Tamaño del pt.: 6, 12. Estilo: Vertical, Cursiva. Impacto: Normal, Negrita. Otras características de impresión: expandido, subrayado, **subrayado doble,**sub/superíndice.. Apaisada: Courier Pitch: 10, 16.67, 20. Tamaño de pt.: 6, 12, 24. Estilo: Vertical. Impacto: Normal, Negrita. Peso del medio de impresión Papel: 60 a 90 g/m2 (16 a 24 lbs.) Tamaño de los medios de impresión Carta EE.UU. (216 x 279 mm - 8.5 x 11") A4 Europeo (210 x 297 mm) Legal EE.UU. (216 x 356 mm - 8.5 x 14") Transparencia EE.UU. (216 x 279 m - 8.5 x 11") Transparencia A4 Europea (210 x 297 mm) Sobre Nro.10 EE.UU. (104.7 x 241.3 - 4,12 x 9,5") Manejo del medio de impresión Alimentador automático (hasta 100 hojas) Papel corriente, papel suelto HP CX JetSeries CutSheet, película para transparencias HP LX JetSeries Alimentación manual de sobres Panel de control Teclas Quality (calidad), Status (estado), Busy (ocupada), Load/Eject Papel (cargar/expulsar el papel), Print Cartridge (cartucho de impresión), Clean (limpiar), Envelope (sobre), Reset (reiniciar). Luces Draft (borrador), Ready (lista), Busy (ocupada), Portrait (vertical), Compress (comprimida). Interfaz doble E/S Paralela Centronics RS-232-C en serie |
Por más información sobre PCL Printer Commands ... haga una búsqueda en www.google.com o www.altavista.com con "PCL Printer Commands" ... y suerte!
Por si no encuentra nada, aquí hay algunos sitios con indicaciones pertinentes:
http://www.hp.com/cposupport/printers/support_doc/bpl02705.html
http://web.1asphost.com/agostinho/kb/content_by_cat.asp?catid=104
http://rabbit.eng.miami.edu/info/hp-pcl.html
http://techref.massmind.org/techref/language/pcls.htm
[Números en letras][División de un texto en renglones][Lectura y grabación binaria][Preguntas de Gente Amiga][Uso del Mouse][Impresoras a Chorro de Tinta][Correo al autor]
|
Última actualización de esta página: 12/IV/1998 |