



doUTSPUL
GESTIONE DELLE STAMPANTI
| SCOPO |
Il programma
di utilita' UTSPUL gestisce tutte le chiamate alle stampanti
|
PRINCIPIO
DI FUNZIONAMENTO
|
Il meccanismo di
stampa e' spiegato nello schema allegato (vedi
schema)
|
|
CHIAMATA
|
da programma
- XX10
LOAD SUB 'UTSPUL'
- XX20
Printer$=FNSpool$ ( Mes$,Prt,Lun)
|
Tutti i
programmi
fanno una chiamata a questa funzione che permette di scegliere su quale
stampante inoltrare tutte le stampe del sistema.
Le modalita' di funzionamento delle stampe si possono riassumere in:
Stampa fisica
|
La stampa avvene direttamente
sulla stampante indicata
|
Stampa differita
|
La stampa non avviene subito, ma
viene lasciata (pronta alla stampa o ristampa) nel direttorio
/frako/spul
Con la funzione STAMPE DIFFERITE, del menu Utilita', si possono
ottenere quante copie si vuole e quando si vuole
|
Stampa a Video
|
La stampa viene dirottata a
video.
Se il terminale supporta 132 colonne viene attivato CRTCOL=132
|
Stampa Nulla
|
Il ciclo di programma e di
stampa avviene normalmente dirottando l'output sulla stampante $NULL
|
Stampa HTML/PDF
|
Viene attivata la possibilita'
di creare a programma un file HTML (anche a colori)
Il programma deve essere predisposto opportunamente.
|
Stampa PDF
|
E' una funzionalita' che
permette di stampare da qualsiasi programma (possibilmente senza
modifiche) su qualsiasi stampante di sistema
In pratica il programma UTPCL2HTML converte una qualsiasi stampa
differita prima in HTML e poi in PDF
Viene lanciato quindi Acrobat che permette la stampa fisica
|
Rinuncia
a Stampa
|
Il programma viene interrotto
bruscamente
|
Il programma
passa
alla funzione i seguenti parametri:
| Mess$ |
Il formato di Mess$ e' composto di due parti = [@V@] + Messaggio
@V@ = chiamato variante ed e' opzionale
(vedi sotto la descrizione di questa funzione)
Messaggio
= compare sulla barra superiore della finestra
Se la stampa e' differita, questo messaggio commenta il contenuto del
file da stampare nel file SP#xxx.
|
max 30
car. |
| Prt |
Numero
della stampante come definita in PRTxxx
|
xxx |
Vengono
proposte tutte le stampanti.
L'utente ne sceglie una. |
| 1xxx |
Viene
proposta per prima la stampante PRTxxx e poi le altre. L'utente
ne sceglie una. |
| -1xxx |
Stampante
forzata. Vengono solamente presi le caratteristiche ed i parameri
per la stampante PRTxxx senza possibilita' di scelta da parte
dell'utente |
|
numero
intero da
- 0 : 999
- 1001 : 1999
- -1001 : -1999
|
| Lun |
Indica come eseguire la stampa
- Se e' dispari l'orientamento
e' LANDSCAPE
- Se e' maggiore di 1000, le migliaia indicano quale
dimensione avra' il carattere in PDF
- La rimanenza e' la lunghezza pagina
|
66 =
pagina lunga 66 righe
67 = pagina di 66
landscape
2067= pagina di 66,
landscape, con font=2
|
Si supponga
che il
programma esegua la seguente chiamata:
Printer$=FNSpool$ ( "Libro GIORNALE",2,256)
Printer$=FNSpool$ ( "@F@Stampa Fattura",2,256) (Messaggio con Variante)
Sovrapposta
alla
schermata del programma viene visualizzata la maschera di scelta
stampante.
Viene proposta in prima riga la stampante predefinita per quell'utente come indicato da tabella KD (preferenze utente)
Cio' vale purche' non esista una forzatura da programma generalmente indicata dalle tabelle SWxx.
Vengono poi lette tutte le tabelle di tipo PRTxxx
Vengono visualizzate nella seguente forma:
| num |
Numero
logico della stampante come da tabella PRTxxxV
Alcuni programmi accodano al numero di stampante una variante V che indica dove destinare il file PDF (vedi sotto la descrizione di questa funzione) |
| stampante
|
Breve
descrizione della stampante e del suo settaggio da effettuare |
| tipo |
Classe a
cui appartiene la stampante come da tabella PRxx oppure PRxx-
|
| porta |
Porta
logica Eloquence ( su cui eseguire PRINTER IS (porta) )
Come definita in ../eloq.config |
| font |
Abilitazione
possibile di Font secondario con CHR$(14) (SI)
Deriva da tabella PRXnnn [15;6] |
| dettagli |
Una
stessa stampante fisica puo' essere definita piu' volte e descritta
su piu' righe.
Ogni riga viene definita stampante logica.
Piu' righe possono puntare alla stessa stampante ma
usando
caratteristiche diverse (font, orientamento, vassoio, ecc..)
Le informazioni sono prese dalle tabelle PRxxxx
/etc/printcap
Porta Fisica |
PRTxxx
Tipo stampante
Porta Eloquence |
PRnn
Font primari |
PRXxxx
Font Secondari | RRTxxx
Stampa PDF
|
|
Descrizione del flusso programma
Esempio : Printer$=FNSpool (
"Libro GIORNALE,2,256)
Si punta il cursore con il mouse o le frecce su/giu
sulla
linea contenente la stampante logica che si vuole utilizzare e si
preme invio/return per
confermare.
Viene
letta la tabella PRT002
Tabelle PRTxxx |
| 15;25 |
Descrizione stampante. Esempio LASER carta NORMALE
Compare nella maschera di scelta e nella descizione della stampa
differita
|
| 50;2 |
Tipo/Famiglia stampante meglio specificata in PRxx
(nell'esempio xx=10) = PR5
|
| 52;1 |
- L = Stampante con
lunghezza di pagina corta (landscape)
- ' ' = Stampante con lunghezza di pagina normale
|
| 60;8 |
Prt = Numero stampante logica Eloquence
- 8 = video
- 9 = nulla
- n = numero stampante (PRINTER IS n)
|
| 129;32 |
| reset |
Sequenza di reset (
tipico Ec&"E" )
Eventualmente si puo' aggiungere cassetto ed orientamento
Ha precedenza su quella di PRxx |
| stty |
sequenza controllo delle stampanti seriali
esempio: ! stty 9600 icanon icrnl
viene mandato il comando
COMMAND "! stty 9600 icanon icrnl <
"&MAPPNTR$(Porta) |
|
|
Viene
letta la tabella PR10
Tabelle PRxx
oppure
Tabella PRxx- se indicato carattere piccolo
|
Come indicato da
tabella PRT002 [50;2]
| 15;35 |
Descrizione
tipo stampante (non obbligatoria se non e' laser)
|
NOTA IMPORTANTE
Se la stampante e'
una Laser PCL5 e' obbligatorio nel primi 5
caratteri scrivere LASER
|
|
| |
Sequenze escape da passare al programma |
| 50;10 |
Sequenza
comando escape per carattere Compresso ( 16.67 cps )( 12 cps ) |
| 60;10 |
Sequenza
comando escape per carattere Espanso ( 5 cps ) |
| 70;10 |
Sequenza
comando escape per carattere Normale (10 cps) |
| 80;10 |
Sequenza
comando escape per carattere Inizio sottolineatura |
| 90;10 |
Sequenza
comando escape per carattere Fine sottolineatura |
| 100;16 |
Sequenza
Reset |
| 129;16 |
Sequenza
escape cassetto |
| 149;16 |
Sequenza
escape orientamento carta |
| 169;16 |
Sequenza
escape lunghezza pagina |
| 250;1 |
L
se Vista=0 ( per compatibilita') (non piu'
usato) |
|
| REQUEST
0 |
Viene
aperta una coda di stampa sul sistema |
|
eventuale
|
COMMAND
"! stty 9600 icanon icrnl < "&MAPPNTR$1(Prt) |
| PRINT
Reset$ |
Riporta
la stampante ai valori standard |
| PRINT
Cassetto$ |
Seleziona
il cassetto da cui prendere la carta
Questo comando puo' essere abbinato alla sequenza di Reset$ |
| PRINT
Orientamento$ |
Seleziona
l'orientamento della carta (solo stampanti Laser o InkJet)
Questo comando puo' essere abbinato alla sequenza di Reset$ |
| Lettura
tabella PRXnnn |
Tabella facoltativa che descrive
ed abilita il font secondario
| 15;6 |
Codice
font o mini descrizione (obbligatoria)
E' quella che compare nella maschera di scelta stampante. |
| 21;29 |
Descrizione
facoltativa a ggiuntiva
|
| 50;70 |
Sequenza
caratteri per font secondario. (Sequenza completa)
Esempio: Ec)8UEc)s0p5h0s3b4102T |
| 129;10 |
Variante
per passare in Compresso |
| 139;10 |
Variante
per Espanso |
| 149;10 |
Variante
per Normale |
| 159;10 |
Variante
per Italico |
| 169;10 |
Variante
per non Italico |
| 179;10 |
Variante
per Bold |
| 189;10 |
Variante
per Non Bold |
|
| PRINT
Escape$ |
PRINT
Sequenza escape font secondario base se esiste la tabella PRXxxx |
| PRINT
CHR$(15) |
Set
(predispone)
font primario |
La funzione rende al programma:
| PRONTA |
Stampante
resettata, inizializzata con i font, scelti i cassetti,
preparatol'orientamento.
Basta mandare dei PRINT
|
| Printer$ |
Nella variabile
Printer$ viene reso:
| Numero
|
Numero
logico Eloquence della stampante ( come da eloq.config) |
| Nome
|
Nome
del file in cui e' stata differita la stampa nel formato SPFxxxx |
File pdf
|
Nome
del file in cui e' stata differita la stampa nel formato SPFxxxx
In Key$[280;20] viene indicata al MENU la
stampa da convertire nel formato >nnnn<SPFxxx
|
|
| Buf $ |
Vengono rilasciate nel Buffer
(in common) i seguenti valori:
| 1;12 |
PRxx |
Famiglia stampante |
| 15;25 |
|
Descrizione stampante |
| 50;10 |
Comp$ |
sequenza Compresso |
| 60;10 |
Esp$ |
Espanso |
| 70;10 |
Norm$ |
Normale |
| 80;10 |
Und$ |
Underline |
| 90;10 |
Nound$ |
Stop Underline |
| 100;16 |
Rst$ |
Sequenza Reset |
| 129;16 |
Cst$ |
Sequenza escape cassetto |
| 149;16 |
Ori$ |
Sequenza escape orientamento
carta |
| 169;16 |
Plen$ |
Sequenza escape lunghezza
pagina |
| 250;1 |
|
L = vista =0 (
compatibilita' - non piu' usata ) |
| 260;1 |
"S " |
E' attivo e selezionabile il
font secondario |
| 261;70 |
seq.escape |
Sequenza completa per font
secondario che e' stato attivato |
| 331;10 |
Comp2$ |
Variante per Compresso |
| 341;10 |
Esp2$ |
Variante per Espanso |
| 351;10 |
Norm2$ |
Variante per Normale |
| 361;10 |
Italic2$ |
Variante per Italico |
| 371;10 |
Noitalic2$ |
Variante per non Italico |
| 381;10 |
Bold2$ |
Variante per Bold |
| 391;10 |
Nobold2$ |
Variante per non Bold |
|
Area di stampa
|
Se la stampa e' differita, la
stampa non avviene subito, ma viene lasciata nel direttorio
/frako/spul
Con la funzione STAMPE DIFFERITE, del menu Utilita', si potranno
ottenere quante copie si vuole e quando si vuole
Nel direttorio /frako/spul vengono creati due file
- SP#xxx File
delle caratteristiche di
stampa (ove
xxx=numero progressivo di stampa)
[1;30] Titolo della stampa
[31;26] Stampante a cui dovrebbe essere indirizzata la stampa
[57;6] Data di creazione
[64;5] Utente che l'ha creata
[69;1] L=Landscape(orizzontale) ' ' = Verticale
[70;1] n = <font size=n>
- SPFxxx Area in cui
il programma lasciera' la stampa con il comando PRINTER IS "SPFxxx"
|
A conferma della scelta della stampante, la riga
corrispondente viene evidenziata
A questo punto abbiamo le seguenti scelte
| OK |
Il
programma riceve i parametri sopra riportati e comincia a stampare
|
| VIDEO |
Il
programma riceve in Printer$ l'identificatore del video = 8
|
| DIFFERITA |
Viene
letta la tabella TTY , legge il numero progressivo della prossima
stampa differita in posizione [50;5]
Crea due file
- /frako/spul/SPFxxxx ove verranno
stampati i dati dal programma
- /frako/spul/SP#xxxx con Messaggio$+
Descrizione stampante + Data + Utente
Il programma riceve in Buf $ i parametri sopra
riportati
Riceve in Printer$ il nome del file SPFxxxx
Il programma deposita la stampa con le caratteristiche sopra scelte
Si puo' stampare in seguito il file Differito con la funzione STAMPE
DIFFERITE
|
| NULLA
|
Il
programma riceve in Printer$ l'identificatore di stampa nulla = 9
Il programma esegue il suo ciclo e la stampa viene buttata (
viene inviata al /dev/null )
|
| RINUNCIA |
Il
programma riceve in Printer$ l'identificatore = 0
Il programma puo' immediatamente terminare rinunciando al ciclo di
elaborazione e stampa
|
Stampa in Html / Pdf
Le stampe i Html-Pdf possono essere eseguite solmente sui terminali di
tipo Java-Net
I programmi (se predisposti) possono lasciare una immagine su un file
in formato Html e Pdf
Il meccanismo di scelta stampante e' identico a quanto descritto per le
stampanti standard.
- Si sceglie la stampante di tipo HTML (Tipo =
H)
oppure
Si sceglie una qualsiasi stampante e si preme il tasto HTML
- Se si sceglie stampante NULLA viene creato
normalmente il
file Html-Pdf ma non viene stampato.
- Se si sceglie OK viene creato il file Html-Pdf
- Alla fine della visualizzazione ( se PRTxxx [70;1]="P" ) il
programma
si ferma e permette di decidere
se stamparlo oppure no
- Dopo la eventuale stampa vengono depositati nel
direttorio
indicato in (PRTxxx [129;40]) i file Html e Pdf
- Se PRTxxx [71;1]="D" Il file Html viene cancellato
e rimane solo il file PDF
La tabella PRTxxx deve essere configurata nel modo seguente:
Viene
letta la tabella PRT000
Tabelle PRTxxx
|
| 15;25 |
Descrizione stampante. Esempio PDF FILE
Compare nella maschera di scelta e nella descizione della stampa
differita
|
| 50;1 |
"H"
= identifica una stampa
in Html-Pdf
"P" = identifica una stampante che stampa in PDF
|
| 52;1 |
- L = Stampante con
lunghezza di pagina corta (landscape)
- ' ' = Stampante con lunghezza di pagina normale
|
| 60;8 |
Prt = Numero stampante logica Eloquence su cui eventualmente
stampare il file PDF
- 8 = video
- 9 = nulla
- n = numero stampante (PRINTER IS n)
|
70;1
|
- P = Pausa il programma per
vedere a video la stampa e
decidere se stamparla
- ' ' = Non fermare il
programma, ma stampa sulla stampante predefinita
|
| 71;1 |
- D = Delete (Cancella) il file Html e
lascia
solanmente il file Pdf
- ' ' = Non cancellare il file Html
|
| 72;1 |
- L = Stampa in landscape
- ' ' = Stampa in verticale (portrait)
Il programma puo' forzare
pero' Landscape se il paramentro passato in Lun e' dispari (vedi sopra)
|
80;7
90;7
100;7
|
Col_b$ =
(background) es:Colore di fondo caselle intestazione (rgb)
es: #FF0000 = rosso
Col_f$ = (forground) es: Colore delle
colonne Es: #00FF00 = verde
Col_fw$ = (sfondo) es:Colore di sfondo pagina
es: # FFFFFF = bianco
|
129;40
|
Directory
dove lasciare i
file Html e Pdf |
|

|
La funzione rende al programma:
| NON
SCELTA |
Stampante non scelta in quanto il
file PDF verra' stampato con il comando lpr -P xy
|
| Printer$ |
Nella variabile
Printer$ viene reso:
<HTML-pd-n>xxx ove:
-
p P =
(pausa) oppure
" "= (no pausa)
-
d D= (cancella
html) " " = (non cancellare html)
-
n PRINTER IS n
-
xxx Stampante logica
scelta
|
| Buf $ |
Vengono
rilasciate nel Buffer
(in common) i seguenti valori:
| 1;80 |
Dir_html$ |
Direttorio dove lasciare i
file Html e Pdf |
| 128;80 |
Prt_html$ |
Comando da usare per stampa
es: lpr -P laserjet |
| 210;7 |
Col_b$ |
Col_b$ =
(background) es:Colore di fondo caselle intestazione
(rgb)
es: #FF0000 = rosso |
| 220;7 |
Col_f$ |
Col_f$ = (forground)
es: Colore delle
colonne Es: #00FF00 = verde |
| 230;7 |
Col_fw$ |
Col_fw$ = (sfondo)
es:Colore di sfondo pagina es: # FFFFFF = bianco |
|
Area
di stampa
|
E' il programma di stampa che si
occupa della creazione dei file di stampa nel direttorio Dir_html$
Anche il nome ed il numero di file creati dipendera' dal programma di
stampa
Normalmente il programma di stampa creera' un file xxxx.html ed
uno xxxx.pdf
|
.................esempio di programma
...................................
600
Printer$=FNSpul$("STAMPA
BOLLA/FATTURA",Prt,200)
610
DEL
FNSpul$
620
IF LEN(TRIM$(Printer$))=0 THEN
Fine
630
IF Printer$[1;1]="<"
THEN
640
Html=POS(Printer$,">")
650
Prtd$=Printer$[Html+1]
660
Html=1
670
Dir_html$=TRIM$(Buf$[1;80])
680
Prt_html$=TRIM$(Buf$[128;80])
690
Prt_html=VAL(Printer$[9])
700
Col_b$=Buf$[210;7]
710
Col_f$=Buf$[220;7]
720
Col_fw$=Buf$[230;7]
730
ELSE
740
Dir_html$="
"
750
Prt_html$="
"
760
Esp$=Buf$[60;10]
770
Nor$=Buf$[70;10]
780
Comp$=Buf$[50;10]
790
END IF
....................... fine esempio ............................
Stampa in Html / Pdf su
stampanti che non hanno PCL
La maggior parte dei programmi usano il linguaggio PCL 3 come
standard.
Pertanto le stampe sono ottimizzate per le stampanti di tipo
LASER.
Questa funzionalita' permette di stampare da qualsiasi programma
(possibilmente senza modifiche) su qualsiasi stampante di sistema
La funzionalita' si attiva in due modi
- Scegliendo una stampante Tipo='P'
e premendo il tasto OK
- Scegliendo una qualsiasi stampante (anche Laser) e premendo il
taso PDF
Il funzionamento del programma e' il seguente:
- Viene creata una stampa differita
in /frako/spul con le caratteristiche di una stampante PCL di Tipo='1' (stampante HP
protocollo ESC)
- Viene lasciata in COMMON Key$[280;20] il nome del file
differito nella forma >nnnn<SPFnnn
- Quando il programma finisce il programma MENU intercetta in Key$
la decisione di convertire la stampa
- Il MENU chiede come comportarsi
| Solo
File |
Lascia come risultato un file
HTML ed uno PDF in /frako/html/varie |
| Pdf
a Video |
Il programma Acrobat visualizza
il file /frako/html/varie/SPPxxx.pdf. E' possibile stamparlo
|
| Html
a Video |
Il programma visualizza in un
Browser il file /frako/html/varie/SPHxxx.html. E' possibile
stamparlo ma, si sa, le stampe da browser non sono mai uguali.
|
| Stampa |
Alla fine del processo
viene
stampato direttamente il file sulla stmpante indicata |
RINUNCIA
|
Non stampare e cestina la
richiesta di stampa
|
- Viene caricato la funzione UTPCL2HTML che converte il file
differito in HTML e poi in PDF nel direttorio /frako/html/varie
- Il MENU chiede se la stampa dovra' essere orizzontale o
verticale ( viene proposta una scelta consigliata)
- Viene chiesto quale dimensione di font usare
- Se si deve stampare direttamente viene usata la Porta indicata
nella stampante con il comando indicato il eloq.config
Uso delle Varianti
Durante la scelta della stampante vengono proposte tutte le stampanti presenti nelle tabelle PRTxxx
Se una installazione ha, per esempio, 6 stampanti ed ognuna
di queste puo' stampare anche in PDF bolle + fatture + Ordini cli e
forn + Preventivi le combinazioni possibili sono 6*5=30 stampanti.
Per ovviare a qusto inconveniente le stampanti di tipo H possono venire dichiarate usando le tabelle RRT (anziche' PRT)
Con questo sistema verranno proposte solamente le poche stampanti di
tipo PRT ma la variante passata dal programma indirizzera' la stampa su
quella indicata dalla tabella RRTxxxV
Esempio: Printer$=FNSpool$ ( "@F@Stampa Fattura",0,256)
- Il programma presentera' la scelta di stampante puntando sulla preferita di quell' utente ( stampante PRT000 )
- La variante @F@ fara' leggere la tabella RRT000F da dove verranno ricavate le caratteristiche del direttorio di stampa PDF
- Se si desidera stampare su quella stampante basta premere OK
- Se si desidera cambiare stampante (es:005) ci si posiziona sulla 005 e dopo avere dato ok verra' letta la tabella RRT005F
Se questa non esiste verra' usata la PRT005
variante
|
Uso
|
B
|
DDT - BOLLE
|
F
|
FATTURE
|
C
|
ORDINI CLIENTI
|
D
|
ORDINI FORNITORI
|
P
|
PREVENTIVI
|
Esempio di tabella con variante F