Newsgroup: it.comp.lang.vo-clipper
Titolo: Clipper - controllo stampante HP PCL6

Un mio nuovo cliente ha una fotocopiatrice sharp (A3) che utilizza anche
come stampante per PC con le modalità
indicate in oggetto.
Dovendo installare il mio programma, per non costringerlo ad acquistare una
nuova stampante dovrei conoscere i
caratteri di controllo della stampante e più precisamente:
compressa/normale
10 cpi / 12 cpi
lunghezza pagina 11", 11"+2/3, 12"
corsivi/grafici (devo poter utilizzare i caratteri box)
Se qualcuno potesse inviarmeli mi farebbe un favore.
Saluti.
Imola, 22/10/2001                 Sauro

indicate in oggetto.
Le seguenti due funzioni consentono di modificare l'aspetto della pagina e dei font in stampa in
caso di stampante laser PCL5 (quindi va bene anche per PCL6), stampanti PCL3-4 (getto s'inchiostro
HP, con qualche limitazione) ed alcune dot printer (con molte limitazioni).
*** Funzione INI_STA
*** Serve per predisporre i diversi tipi di stampante per l'inizio della
*** stampa
*** stam = "E"  per stampanti EPSON
*** stam = "L"  per stampanti laser HP III compatibili
*** stam = "I"  per stampanti IBM compatibili
*** forma  = numero di righe da impostare sulla stampante (default 66)
*** set_car = set di caratteri da impostare (valido al momento solo per la 
***           laser. 
***           set_car = 'PC' set PC 8 code page 437 (PC) (DEFAULT)
***           set_car = 'PM' set PC 850 Multilingual (PM)
FUNCTION ini_sta(stam,forma,set_car)
DEFAULT stam TO "E",forma TO 66,set_car TO 'PC'
if stam='E'.or.stam="I"   && EPSON o IBM
  *** stabilisce il numero di righe nella pagina in 72 o 66
  ?? chr(27)+'C'+chr(forma)
  *** setta il margine sinistro a tre colonne
  if stam="E"
     ?? chr(27)+'l'+chr(3)
  elseif stam="I"
     ?? chr(27)+"C"+chr(72)
  endif
elseif stam="L"  && LASER e DeskJet 500
  *** resetta stampante
  ?? chr(27)+"E"
  if set_car='PC'
     *** setta il set di caratteri PC-8 (contenente tutti i simboli semigrafici)
     ??chr(27)+"(10U"
  elseif set_car='PM'
     ??chr(27)+"(12U"
  endif   
  *** setta il margine sinistro a tre colonne
  ??chr(27)+"&a3L"
  *** setta il margine alto a tre righe
  ??chr(27)+"&l3E"
endi
retu nil
*** Funzione I_CAR per impostare i caratteri in tutti i loro aspetti
*** la variabile stamp consente di selezionare il tipo di stampante da
*** utilizzare oltre a disattivare la funzione in caso di stampe su file
*** ascii richieste senza codici controllo. Tutte  le possibilita' sono
*** utilizzabili con la sola LASER.
*** Il programma individua delle alternative automatiche per gli atri tipi
*** di stampante.
*** STAM = tipo di stampante ("I"=IBM "L"=LASER "E"=EPSON)
*** SPAZ = seleziona il tipo di spaziatura ("P"=proporzionale "F"=fissa)
*** PASSO = seleziona la larghezza del carattere in caso di spaziatura FISSA
***         altrimenti viene impostato automaticamente dalla stampante LASER
***         Per spaz = F disponibili: "10" / "12" / "16.67" e' una var. caratt.
*** CORPO = Per spaz. fissa il corpo e' sempre 12 per spaz. proporzionale il
***         corpo e' variabile in continuita' da 6 a 999. E' una variabile di
***         tipo CARATTERE e rappresenta l'altezza del carattere.
*** TIPO = "N" = normale "C" = corsivo (Italico)
*** TRATTO = Varia lo spessore dei tratti dei caratteri. Per stampanti LASER
***          disponibili quattro tipi: "L"=Light "M"=medium "B"=bold
***          "E"=extrablack. Per le stampanti a matrice "L" ed "M" = normale
***          "M" ed "E" = neretto.
*** SOTTO = "S" - "N" sottolineatura Si - No
*** CAR = Anche il carattere ha funzione solo nel caso di stampanti LASER
***       In caso opposto puo' essere ignorato (anche se in teoria potremmo
***       variare il tipo del carattere, ma andremmo ad impiegare funzionalita'
***       troppo diverse da stampante a stampante).
***       Disponibili i seguenti caratteri per la laser: "CO"=courier (n.p.)
***       "LP"=Line Printer (n.p.) "UN"=univers (p.) "CG"=CGtimes (p.)
***       N.B. LI solo passo 16,67 CO solo passo 10/12.
***       N.B. maggiore la cifra della larghezza del carattere (PASSO) nei
***       caratteri N.P. e piu' piccolo e' il carattere (Caratteri Per Inch)
***       maggiore la cifra nell'altezza (CORPO) e piu' grande e' il carattere
***       (solo per i caratteri proporzionali).
#include "Commands.ch"
#include "Inkey.ch"
FUNCTION i_car(stam,spaz,passo,corpo,tipo,tratto,sotto,car)
DEFAULT stam TO "0",spaz TO "0",passo TO "00",corpo TO "00",tipo TO "0",;
        tratto TO "0",sotto TO "0",car TO "0"
if stam="L"         // laser
   **************************
   if car="LP"       // Line Printer (non prop.)
      ??CHR(27)+"(s0T"
   elseif car="CO"   // Courier (non prop.) ok deskjet
      ??CHR(27)+"(s3T"
   elseif car="UN"   // Univers (proporzionale)
      ??CHR(27)+"(s4148T"
   elseif car="CG"   // CGtimes (proporzionale) ok deskjet
      ??CHR(27)+"(s4101T"
   endif
   ***************************
   if spaz="P"       // proporzionale
      ??CHR(27)+"(s1P"
   elseif spaz="F"   // non proporzionale (fissa) ok deskjet
      ??CHR(27)+"(s0P"
   endif
   **************************** passo ok deskject
   if passo="10"         // 10 CPI (normale)
      ??CHR(27)+"(s10.00H"
   elseif passo="12"     // 12 CPI (elite)
      ??CHR(27)+"(s12.00H"
   elseif passo="16.67"  // 16.67 CPI (compresso)
      ??CHR(27)+"(s16.67H"
   endif
   ***************************** corpo ok deskject
   if corpo>"00"     // altezza carattere solo per caratteri non prop.
      ??CHR(27)+"(s"+corpo+"V"
   endif
   ***************************** stile ok deskject
   if tipo="N"       //normale
      ??CHR(27)+"(s0S"
   elseif tipo="C"   //corsivo
      ??CHR(27)+"(s1S"
   endif
   ***************************** sottolineatura ok deskject
   if sotto="S1"     // sottolineatura singola fissa
      ??CHR(27)+"&d1D"
   elseif sotto="S2" // sottolineatura singola mobile
      ??CHR(27)+"&d3D"
   elseif sotto="NO" // disabilita sottolineatura
      ??CHR(27)+"&d@"
   endif
   *****************************
   if tratto="L"     // tratto sottile 
      ??CHR(27)+"(s-3B"
   elseif tratto="M" // tratto medio ok deskject
      ??CHR(27)+"(s0B"
   elseif tratto="B" // tratto bold (neretto)   ok deskject
      ??CHR(27)+"(s3B"
   elseif tratto="E" // tratto ultrablack (neretto super)   ok deskject
      ??CHR(27)+"(s7B"
   endif
   ******************************
elseif stam="E"  // Epson
   if passo="10"         // 10 CPI (normale)
      ??CHR(27)+"P"+chr(18)  // sopprime l'elite e setta 10 CPI
   elseif passo="12"     // 12 CPI (elite)
      ??CHR(18)+chr(27)+"M"   // setta in 10 CPI (levando un eventuale compresso)
      ** e quindi imposta l'elite
   elseif passo="16.67"  // 16.67 CPI (compresso)
      ??CHR(27)+"P"+chr(15)  // sopprime il passo elite e setta il compresso
   endif
   *******************
   if tipo="C"       // corsivo (italico)
      ??chr(27)+"4"
   elseif tipo="N"
      ??chr(27)+"5"
   endif
   *******************
   if sotto="S1".or.sotto="S2"     // sottolineatura
      ??CHR(27)+"-"+CHR(1)
   elseif sotto="NO" // disabilita sottolineatura
      ??CHR(27)+"-"+CHR(0)
   endif
   *******************
   if tratto="L"     // tratto sottile
      ??chr(27)+"H"
      ??CHR(27)+"F"
   elseif tratto="M" // tratto medio
      ??chr(27)+"H"
      ??CHR(27)+"F"
   elseif tratto="B" // tratto bold (neretto)
      ??chr(27)+"H"
      ??CHR(27)+"E"
   elseif tratto="E" // tratto extrablack (neretto super)
      ??chr(27)+"F"+CHR(27)+"G"
   endif
elseif stam="I"  // IBM
   if passo="10"         // 10 CPI (normale)
      ??chr(18)  // sopprime l'elite e setta 10 CPI
   elseif passo="12"     // 12 CPI (elite)
      ??CHR(18)+chr(27)+":"   // setta in 10 CPI (levando un eventuale compresso)
      ** e quindi imposta l'elite
   elseif passo="16.67"  // 16.67 CPI (compresso)
      ??CHR(18)+chr(15)  // sopprime il passo elite e setta il compresso
   endif
   *******************
   if tratto="L"     // tratto sottile
      ??chr(27)+"H"
      ??CHR(27)+"F"
   elseif tratto="M" // tratto medio
      ??chr(27)+"H"
      ??CHR(27)+"F"
   elseif tratto="B" // tratto bold (neretto)
      ??chr(27)+"H"
      ??CHR(27)+"E"
   elseif tratto="E" // tratto extrablack (neretto super)
      ??chr(27)+"F"+CHR(27)+"G"
   endif
   *******************
   if sotto="S1".or.sotto="S2"     // sottolineatura
      ??CHR(27)+"-"+CHR(1)
   elseif sotto="NO" // disabilita sottolineatura
      ??CHR(27)+"-"+CHR(0)
   endif
elseif stam = "D"   // funzione disattivata
      ??""
endif
return NIL
Spero che questo "sovrabbondante" messaggio ti sia di aiuto
Marino Vignoli