Te mando un programa completo de cuando hacíamos impresiones en programa de MS-Dos, este programa funcionaba en matriz de puntos, inyección de tinta y laser, saludos!
PROC IMPRIMEDOS
LETRA="FONT 'ARIAL NARROW', 12 STYLE 'C'"
LETRA1="FONT 'ARIAL NARROW', 10 STYLE 'C'"
LETRA2="FONT 'ARIAL NARROW', 8 STYLE 'CN'"
SET DEVICE TO PRINTER
conta=0
DO TITIMP
STORE 0 TO ST1, ST2, ST3, ST4, T1, T2, T3, T4
CAMBIO=0
SELE TEMP
DO WHILE .NOT. EOF()
@ CONTA,0 SAY FECHA &LETRA2
@ CONTA,10 SAY FOLIO PICT '999999' &LETRA2
LLAVE=(NUMCTE)
SELE CTES
SEEK (LLAVE)
SELE TEMP
@ CONTA,17 SAY NUMCTE PICT '99999' &LETRA2
@ CONTA,23 SAY SUBSTR(CTES.NOMBRE,1,39) &LETRA2
IF STATUS=1
@ CONTA,63 SAY TOTAL PICTU '99,999,999.99' &LETRA2
IF MONEDA=1
@ CONTA,77 SAY CARGOS-IVA PICTU '99,999,999.99' &LETRA2
@ CONTA,91 SAY IVA PICTU '99,999,999.99' &LETRA2
@ CONTA,105 SAY CARGOS PICTU '99,999,999.99' &LETRA2
T1=T1+TOTAL
T2=T2+(CARGOS-IVA)
T3=T3+IVA
T4=T4+CARGOS
ELSE
@ CONTA,77 SAY ROUND((CARGOS-IVA)*TIPOC,4) PICTU '99,999,999.99' &LETRA2
@ CONTA,91 SAY ROUND(IVA*TIPOC,4) PICTU '99,999,999.99' &LETRA2
@ CONTA,105 SAY ROUND(CARGOS*TIPOC,4) PICTU '99,999,999.99' &LETRA2
T1=T1+TOTAL
T2=T2+ROUND((CARGOS-IVA)*TIPOC,4)
T3=T3+ROUND(IVA*TIPOC,4)
T4=T4+ROUND(CARGOS*TIPOC,4)
ENDIF
@ CONTA,119 SAY AGENTE PICT '999' &LETRA2
@ CONTA,123 SAY TIPOC PICTU '99.9999' &LETRA2
IF TREP=2
LLAVE=ALLT(SERIE)+STR(FOLIO00,3)+STR(FOLIO0,3)+STR(FOLIO,8)
SELE AUXPAR
SEEK LLAVE
IF FOUND()
DO DETALLE
ENDIF
SELE TEMP
ENDIF
ELSE
@ CONTA,68 SAY 'FACTURA CANCELADA' &LETRA2
ENDIF
SELE TEMP
SKIP
CONTA=CONTA+1
IF CONTA>57
DO TITIMP
ENDIF
ENDDO
DO TOTEMP
SET DEVI TO SCREE
IF SALIDA=1
MODI COMM &DIREC\TEMP.TXT NOMO
ELSE
SET PRINT TO
ENDIF
SELE TEMP
USE
*DELETE FILE &DIREC\TEMP.*
SELE AUXENC
SET ORDER TO TAG AUXENC7
SET KEY TO RANGE ALLT(VSER)+STR(1,3)+STR(1,3)+STR(1,8), ALLT(VSER)+STR(1,3)+STR(1,3)+STR(99999999,8)
RETURN
PROC TITIMP
SELE 1
@ 0,40 SAY ALLT(CIA) &LETRA
HOJA=HOJA+1
HOJ=STR(HOJA,4)
@ 2,1 SAY 'Emision :'+DTOC(DATE())+' Hora:'+time() &LETRA2
@ 2,45 SAY TIT &LETRA1
@ 2,110 SAY 'HOJA No.'+TRIM(HOJ) &LETRA2
@ 3,0 SAY REPLI ('=',150) &LETRA2
@ 4,2 SAY 'Fecha' &LETRA2
@ 4,10 SAY 'Factura' &LETRA2
@ 4,19 SAY 'Cliente' &LETRA2
@ 4,63 SAY 'Unidades' &LETRA2
@ 4,79 SAY 'Neto' &LETRA2
@ 4,95 SAY 'I.V.A.' &LETRA2
@ 4,109 SAY 'Total' &LETRA2
@ 4,118 SAY 'Age.' &LETRA2
@ 4,123 SAY 'T.C.' &LETRA2
@ 5,0 SAY REPLI ('=',150) &LETRA2
CONTA=6
SELE TEMP
RETURN
PROC DETALLE
DO WHILE NOT EOF()
IF ALLT(SERIE)+STR(FOLIO00,3)+STR(FOLIO0,3)+STR(FOLIO,8)=LLAVE
CONTA=CONTA+1
LLAP=NUMPROD
SELE PROD
SEEK ALLTRIM(LLAP)
@ CONTA,5 SAY LLAP &LETRA2
@ CONTA,20 SAY NOMBRE &LETRA2
SELE AUXPAR
@ CONTA,61 SAY PIEZAS PICTU '999,999.99' &LETRA2
IF MONEDA=1
@ CONTA,85 SAY PRECIO PICTU '999,999.99' &LETRA2
@ CONTA,99 SAY PIEZAS*PRECIO PICTURE '999,999,999.99' &LETRA2
ELSE
@ CONTA,85 SAY ROUND(PRECIO*TEMP.TIPOC,2) PICTU '999,999.99' &LETRA2
@ CONTA,99 SAY ROUND((PIEZAS*PRECIO)*TEMP.TIPOC,2) PICTURE '999,999,999.99' &LETRA2
ENDIF
IF CONTA>57
DO TITIMP
SELE AUXPAR
ENDIF
ELSE
GO BOTT
ENDIF
SKIP
ENDDO
CONTA=CONTA+2
RETURN
PROC TOTEMP
@ CONTA,63 SAY REPLI('=',90) &LETRA2
CONTA=CONTA+1
@ CONTA,63 SAY T1 PICTU '999,999,999.99' &LETRA2
@ CONTA,77 SAY T2 PICTU '999,999,999.99' &LETRA2
@ CONTA,91 SAY T3 PICTU '999,999,999.99' &LETRA2
@ CONTA,105 SAY T4 PICTU '999,999,999.99' &LETRA2
CONTA=CONTA+1
@ CONTA,63 SAY REPLI('=',90) &LETRA2
RETURN