## Mtink

Mtink è un analizzatore di stato per le stampanti EPSON a getto d'inchiostro.
Con mtink è possibile mostrare la quantità d'inchiostro rimasto e lo stato della stampante.
Sono anche implementate altre operazioni, come controllo ugelli, pulizia ugelli e allineamento testine.
Alcune stampanti, come la Stylus Color 480 e la Stylus Color 580 richiedono una componente software per cambiare cartuccia. Mtink conosce i comandi per questo scopo e supporta queste stampanti.

### Requisiti

Mtink necessita della libreria openMotif, Motif o Lesstif. Per la compilazione accertarsi che i pacchetti di sviluppo X ed uno dei suddetti tool sia installato (in ambiente di sviluppo e di esecuzione).
Mtink usa una comunicazione bidirezionale con la stampante.

#### Linux

Se si usa la porta parallela bisogna accertarsi che il kernel o i moduli (partport*) siano configurati correttamente. Per la famiglia di kernel 2.2 il parametro "CONFIG_PRINTER_READBACK" (file /usr/src/linux/.config) dev'essere configurato a 'y'.
Il modulo per la porta stampante USB ha un errore per i kernel 2.2 e 2.4. Se si usa la porta USB bisogna usare un kernel più recente o modificare il file /usr/src/drivers/usb/printer.c.
Queste modifiche non sono complicate. Bisogna cambiare le linee seguenti :

    static ssize_t usblp_read(struct file *file, char *buffer, size_t count, loff_t *ppos)
    {
        struct usblp *usblp = file->private_data;
    ....
        if ((usblp->readcount += count) == usblp->readurb.actual_length)
            usb_submit_urb(&usblp->readurb);
        return count;
    }

to:

    static ssize_t usblp_read(struct file *file, char *buffer, size_t count, loff_t *ppos)
    {
        struct usblp *usblp = file->private_data;
    ....
        if ((usblp->readcount += count) == usblp->readurb.actual_length) {
              usblp->readcount = 0;
              usblp->readurb.dev = usblp->dev;
              usb_submit_urb(&usblp->readurb);
              return count;
        }
    }

Le modifiche sono in lettere rosse in grassetto.

#### Solaris

Non possiedo una postazione Sparc che permetta una comunicazione bidirezionale con la stampante, e non sono in grado di testare mtink con Sparc Solaris.
Postazioni più recenti sono dotate di una porta ecpp compliant e permettono una comunicazione bidirezionale. Nel caso si possieda una tale postazione ed una stampante EPSON a getto d'inchiostro, si prega di tenermi informato sui risultati ottenuti.

### Mtink ed il protocollo di comunicazione EPSON

Un nuovo protocollo di comunicazione è stato creato da EPSON quando i modelli Stylus Color 740 e Stylus Scan sono apparsi sul mercato. Questo protocollo (D4) è basato sul draft IEEE 1284.4 1.5 e permette una comunicazione su vari canali logici. Il vantaggio principale è che un programma può inviare richieste o comandi particolari relativi al canale di controllo anche se la stampante è occupata (stia effettuando una stampa).
Questo permette anche di condividere una porta per più dispositivi (stampante e scanner).
L'implementazione del protocollo D4 sembra essere molto parziale per stampanti più vecchie, e non è neppure priva di errori
per quelle nuove, come la Stylus Photo 890 (la mia stampante EPSON).
Il protocollo D4 richiede che la stampante conosca almeno una parte del linguaggio EJL (Epson Job Language). I comandi più importanti sono
Esci dalla modalità D4, conosciuto da tutte le stampanti che supportano il protocollo di comunicazione D4 e
Leggi l' ID che dice alla stampante di riportare alcune informazioni (modello, designazione, linguaggio supportato).
Il comando Leggi l' ID non è apparentemente supportato dalla Stylus Scan 2500 e probabilmente dalla Stylus Scan 2000 o dalla famiglia Stylus Cxxx
che usano D4 in dipendenza Leggi l'ID.
La vecchia modalità di ottenere informazioni sullo stato della stampante era di usare i comandi EPSON REMOTI. Questi comandi sono
implementati anche sulle nuove stampanti.
Mtink sa dei diversi protocolli, ma l'autore non conosce esattamente le possibilità di ogni stampante prodotta da EPSON.
Per questa mancanza di informazioni, qualche stampante potrà non fare ciò che mtink si aspetta, ad ogni modo le modifiche da apportare
possono essere realizzate facilmente.
La descrizione delle possibilità della stampante si trova all'inizio del file model.c. I campi più importanti sono il campo protocollo
ed il campo id. Il campo protocollo deve contenere una delle seguenti voci:

- PROT_OLD La stampante non sa nulla del protocollo D4.
- PROT_NEW La stampante ha un'implementazione minima del protocollo D4 , Esci dalla modalità D4 è necessaria.
- PROT_D4 La stampante supporta il protocollo D4 nelle sue linee principali.

Se il dispositivo non risponde al comando Leggi l'ID (versioni EJL e D4) vi saranno sicuramente problemi se questi comandi venissero inviati alla stampante. L'interrogazione della stampante sarà disabilitata se il campo id contiene False invece di True

    /*   name               colors prot      state exch.  e.sep  cl sep reset             id   */
       { "Stylus C20SX",         4,PROT_D4,  True, False, False, True,  PROT_D4,          True, 3, 15, 2, 9, NULL },
       { "Stylus Color",         4,PROT_OLD, True, False, False, False, PROT_OLD,         True, 1,  7, 0, 0, NULL },
       { "Stylus Photo 750",     6,PROT_NEW, True, False, False, False, PROT_NEW,         True, 3, 15, 0, 0, NULL },
       { "Stylus Scan 2500",     4,PROT_D4,  True, False, False, False, PROT_OLD|PROT_D4, False,3, 15, 0, 0, NULL },

Nei dati presi dal file model.c si può notare che la Stylus Scan 2500 non fornisce informazioni sulla sua identità, ma utilizza il protocollo D4. La Stylus Photo 750 fa parte della prima generazione di stampanti con D4: la comunicazione sarà OK solo se il comando Esci dalla modaità D4 viene dato prima del corrispondente comando REMOTE. La Stylus Color è una stampante molto vecchia, e non sa nulla del protocollo D4. Infine la Stylus C20SX usa il protocollo D4 (il vecchio Leggi l'ID non funziona).
La correzione dei campi indicati permette di rendere mtink funzionante con la tua stampante. Per favore, informami sui tuoi successi e modifiche al file model.c.
Vedi anche la documentazione gimp-print riguardante i comandi:
http://gimp-print.sourceforge.net

### Come funziona mtink

La prima volta che si lancia mtink verranno richiesti il file dispositivo e la stampante. Fatto questo, vengono caricati i dati relativi alla stampante ed il campo id è posto a True, mtink tenterà di rilevare se i dati siano corretti e caricherà i dati per un'altra stampante se la scelta non era giusta. Infine, la configurazione (porta e modello di stampante) viene scritta nel file $HOME/.mtink.
Invocando nuovamente mtink il file di configurazione viene letto e viene effettuato un controllo per la stampante collegata se è dichiarata
"id able".
La cancellazione del file $HOME/.mtink ripristinerà mtink al comportamento iniziale.
Mtink è diviso in due parti, che comunicano tramite memoria condivisa. Ciò permette di effettuare aggiornamenti per la parte X del programma ed evitare malfunzionamenti del codice relativo alla stampante dovuto all'ambiente X (timer, interruzioni,...).
La parte X non è costruita come un comune programma X. Mtink contiene vari cicli di eventi X per rendere il job più facile. Ogni sottofinestra ha un proprio ciclo e la funzione di ritorno, se chiamata, ritorna solo se il ciclo della sottofinestra ritorna. Questo permette il ritorno dei
valori al chiamante. La chiamata dell'interfaccia stampante usa un protocollo simile.

### Internazionalizzazione

Mtink può essere internazionalizzato molto facilmente. Attualmente mtink conosce l'inglese, il francese, l'italiano, il tedesco e qualche parola di turco. E' possibile aggiungere una lingua modificando il file Mtink.res e copiandolo nella tua home directory come EpsonUtil.
Il nome della lingua è preso dalle variabili LANG, LC_ALL and LC_MESSAGE. Se, per esempio, LANG contiene fr_FR, mtink si aspetta di trovare il file EpsonUtil.Fr (prima lettera maiuscola, e seconda come specificato nella variabile d'ambiente).
Se il file non viene trovato, il default usato è l'inglese.
Esempio:

    !!! Font di default per l'Inglese e le lingue europee
    EpsonUtil*title_LB.fontList:    *-helvetica-*-r-normal--14-*-*-*-*-*-iso8859-1
    EpsonUtil*fontList:       *-helvetica-medium-r-normal-*-12-*-*-*-*-*-iso8859-1
    !!! set the font required for turkish
    EpsonUtil.Tr*title_LB.fontList: *-helvetica-*-r-normal--14-*-*-*-*-*-iso8859-9
    EpsonUtil.Tr*fontList:    *-helvetica-medium-r-normal-*-12-*-*-*-*-*-iso8859-9
    ....
    !!! Il valore di default (inglese)
    EpsonUtil*previous_PB.labelString:    Previous
    !!! ed i testi per il tedesco, francese, italiano e turco
    EpsonUtil.De*previous_PB.labelString: Zurück
    EpsonUtil.Fr*previous_PB.labelString: Précédent
    EpsonUtil.It*previous_PB.labelString: Precedente
    EpsonUtil.Tr*previous_PB.labelString: Geri

Se volessi effettuare una traduzione, mandami il tuo lavoro. Inserisci anche il tuo nome, indirizzo e-mail, url, come preferisci.

### Le opzioni a riga di comando

Passare opzioni a mtink di solito non è necessario. Se mtink dev'essere lanciato su un computer diverso rispetto a queloo a cui è connessa la stampante bisogna indicare il nome del display, per es. mtink -display computerName:0.
In questo caso non è necessario che un server X sia attivato sul server della stampante.
Si può anche lanciare mtink tramite ssh o rsh, se disponibili:
ssh serverName /home/jj/mtink/mtink -display workStationName:0
E' anche possibile indicare quale lingua si debba usare
ssh serverName LANG=fr /home/jj/mtink/mtink -display workStationName:0
configura mtink per l'uso di testo in lingua francese.
Si tenga presente che non tutti i browser funzioneranno come previsto.
La rilevazione automatica della stampante può essere disabilitata lanciando mtink con l'opzione -noAutoDetect.

### La finestra principale

In cima alla finestra compare il modello di stampante rilevato o inserito al momento della configurazione, in questo caso la Stylus Scan 2500.
La quantità d'inchiostro rimasto viene indicata sia in forma grafica che testuale.
Lo stato della stampante può dare alcune informazioni sullo stato interno della stampante, ad es. stampa in corso (la stampante è occupata).
I pulsanti sollo alla linea di Stato permettono la scelta dell'operazione da effettuare, l'ultimo pulsante non è attivo se la stampante non supporta (richiede) la funzione per il cambio della cartuccia.
I pulsanti in fondo permettono di vedere alcune informazioni su mtink (Informazioni) o di terminare (Esci). Il pulsante Aiuto permette di vedere questo documento.

### La finestra di configurazione

Si può scegliere quale browser utilizzare per visualizzare il manuale, ed indicare ad mtink di effettuare un rilevamento automatico al lancio del programma (default).
Scelta di un browser:
Si può indicare il nome del browser nel campo appropriato o cliccare su [ ... ] e selezionare il browser tramite la finestra di selezione file.
Mtink conosce le opzioni dei comandi in linea richieste da alcuni browser (Netscape, Mozilla e galeon) e li lancia appropriatamente. Anche altri browser, come Konqueror, Gnome-help-browser o Opera, non necessitano di particolari opzioni e possono essere usati.
Alcuni browser non funzionano se il corrispondente desktop non è usato. La scelta migliore in questo caso è un browser come Netsvcape, Mozilla, Galeon o Opera, che sono indipendenti da un desktop particolare, come KDE (un OS sopra il OS che ha a tutt'oggi un grosso errore, non ci sono chermate blu).
Rilevamento automatico:
Il pulsante di controllo Permetti rilevamento automatico Può essere attivato. In Modalità rilevamento automatico, mtink cercherà di identificare la stampante connessa. Se la stampante risultasse essere un modello vecchio, come la Stylus Color 400 / 600, ... e non venisse riconosciuta dopo il primo tentativo, mtink tenterà di inviare un comando per la stampa di alcuni caratteri. Un vantaggio ulteriore della disabilitazione del rilevamento automatico è che l'avvio sarà un po' più veloce, ma se si connettesse un altra stampante EPSON al computer vi potrebbero essere problemi.
Dopo aver modificato la configurazione è necessario salvarla. I dati vengono scritti nel file $HOME/.mtinkrc.

### Allineamento testine

Mtink di allineare le testine. Questa caratteristica dipende dal modello di stampante e l'aspetto della finestra può essere leggermente diverso da modello a modello.
Alcune stampanti, come le Stylus Color 480 e 580 richiedono allineamenti separati per la testina del nero e del colore. Per questo motivo, la finestra principale mostrerà pulsanti per la selezione della testina. Un'altra differenza è che il numero di esempi di stampa varia (8 o 15). Il numero di passi può anche variare da modello a modello di stampante.
Non posso garantire che il codice inviato alla stampante sia sempre valido: se si usa questo tool bisogna considerare questo rischio.

mtink: prima finestra per l'allineamento | mtink: finestra principale per l'allineamento
mtink: finestra di configurazione per l'allineamento | mtink: ultima finestra per l'allineamento

La seconda e terza finestra mostrate sopra verranno mostrate fino a tre volte (dipende dal modello di stampante).

### Errori

Probabilmente un sacco.

### To do

- Documentazione migliore.
- Traduzioni della documentazione.
- Sperimentazioni con più stampanti.
- ....

### Autore

Jean-Jacques Sarton
jj.sarton@t-online.de
Xwtools Home Page