Una Chiave per il Desktop Publishing
Corso di PostScript
- Marco A. Calamari
Prima Puntata
Il Linguaggio PostScript.
Il linguaggio PostScript, ormai uno degli standard del mondo dei Personal Computer, appartiene alla classe dei linguaggi cosiddetti di descrizione della pagina. È un linguaggio interpretato, che possiede molti tipi specializzati di dati. Come il FORTH utilizza largamente gli stack e la RPN (Reverse Polish Notation - notazione polacca inversa). Come il Pascal ed il C è un linguaggio procedurale, cioè è possibile definire funzioni e procedure, e richiamarle poi per nome. Permette di scrivere procedure ricorsive, utilizza internamente puntatori in abbondanza, e consente trucchi di programmazione potenti quasi come quelli del C. È un linguaggio estremamente potente e specializzato per il trattamento della grafica e dei caratteri; si occupa invece solo per il minimo indispensabile della gestione dei file e delle normali funzioni proprie degli altri linguaggi di programmazione.
Introduzione
Il PostScript non è stato il primo linguaggio di
descrizione della pagina ad essere concepito; nato nel 1982 ha
avuto più di un predecessore; il suo stesso padre, John
Warnock, fondatore della Adobe System Incorporated,
aveva collaborato alla realizzazione di due di essi. Non è stato
nemmeno l'ultimo; altri linguaggi sono stati realizzati, come PDL, di
cui sono dotate le stampanti laser Hewlett-Packard, ed lnterpress
della Xerox. A differenza degli altri, è stato l'unico che si è
imposto fino a diventare uno standard industriale di fatto,
potendo vantare lo sviluppo di parecchie imitazioni (cloni
PostScript) del linguaggio da parte di ditte concorrenti, ed il
riconoscimento da parte della big Blue (l'IBM). È anche
stato il primo caso di linguaggio di alto livello nascosto; per
anni tutti hanno saputo che le LaserWriter erano più potenti
e flessibili delle altre stampanti, sia laser che ad impatto,
perché lavoravano in PostScript, ma nessuno sapeva esattamente
cosa fosse e come si potesse usarlo per programmare. La
situazione è simile a quella del Macintosh, che inizialmente era
una macchina chiusa, programmata solo da pochi guru delle
software house statunitensi, e sulla quale ora tutti (o quasi)
possono sviluppare il proprio software.
Alla scoperta del PostScript
Il PostScript è un prodotto della Adobe System Incorporated; per lungo tempo, anzi, è stato l'unico nel listino di questa prospera società. Il fatto che la Adobe abbia potuto basare il suo sviluppo e la sua attuale fortuna su di un unico prodotto la dice lunga sulla validità e sul successo commerciale di quest'ultimo.
Una importante differenza fra il PostScript e gli altri
linguaggi di alto livello è che non è possibile comprare un
compilatore o interprete PostScript (a meno che non siate uno
grossa software house o un fabbricante di stampanti laser, e
possiate fare un accordo commerciale con la Adobe); l'unico
sistema, per i comuni mortali, di programmare con un interprete PostScript,
è di usare una stampante PostScript, utilizzando quello
incorporato nelle ROM del suo controller. Quindi (ahimè)
condizione necessaria per programmare in PostScript è possedere
una qualunque stampante laser PostScript, o almeno averla a
disposizione per qualche ora ogni tanto. Questo è un elenco
delle principali stampanti PostScript in commercio:
La maggior parte di queste stampanti, con eccezione delle ultime tre, sono in bianconero, formato A4, con una risoluzione di 300 punti/pollice ed un costo compreso fra uno e 3 milioni di lire; risoluzioni o formati maggiori e soprattutto la presenza del colore possono far salire il costo anche fino a 10/20 milioni.
Data la diffusione molto diversa di queste stampanti, nel
seguito del corso supporremo di utilizzare la più comune, cioè
la Apple LaserWriter. Le differenze con tutti gli altri
modelli Apple sono, per i nostri scopi, nulle; quelli più
recenti (Plus/NT/NTX) hanno infatti solo prestazioni in
più rispetto alla LaserWriter. Le altre stampanti della lista
sono pressoché identiche dal punto di vista dei controlli e
delle possibilità di collegamento (sono sempre presenti prese AppleTalk
e RS232/422), e possono differire solo in dettagli del
pannello di controllo, per cui dovrebbe essere sufficiente
consultare il relativo manuale per risolvere gli eventuali dubbi.
Dal punto di vista software l'unica differenza è nella versione
dell'interprete PostScript adottato; la prima versione rilasciata
al pubblico, cioè la 23.0 del 1984, è quella della
Apple LaserWriter, e le versioni successive sono superset di
questa, per cui sarà garantita la compatibilità dei programmi e
degli esempi che forniremo durante il corso.
Tre modi di lavorare
Vi abbiamo già data la cattiva notizia che, per seguire
attivamente questo corso, è necessario avere accesso ad una stampante
laser PostScript, adesso eccone una buona; non avrete bisogno di
altro. È infatti possibile utilizzare praticamente qualunque
tipo di computer e di collegamento per poter accedere
all'interprete PostScript della stampante; i modi principali di
lavorare sono comunque questi:
- Utilizzare un computer dotato di porta seriale RS232 o
RS422 (praticamente tutti, ma in particolare MS-DOS compatibili
e Apple //), un qualunque editore di testo con la possibilità di
salvare file ASCII senza formattazione (Edit, Edlin, PE2, Brief,
oppure Access //, ASCII Express, ecc.) un programma di
comunicazione che supporti il downloading di file testo e la
gestione del protocollo XON/XOFF, ed un cavo seriale incrociato
(facile eventualmente anche da fare).
- Utilizzare un Macintosh con la connessione AppleTalk alla
stampante laser, un qualunque editore di testo con la possibilità
di salvare file ASCII senza formattazione (MacWrite, Word, QUED,
miniWriter, ecc.) ed un programma (o accessorio di scrivania) che
permetta di fare il downloading via AppleTalk (LaserStatus, della
CE Software, Font Downloader o SendPS della Adobe System, o una
delle varie applicazioni di pubblico dominio disponibili).
- Utilizzare un Macintosh con la connessione AppleTalk alla
stampante laser e l'ambiente di sviluppo PostScript LaserTalk,
della Emerald City Software, che consente di lavorare con un
debugger interattivo, mettere break point, interrogare
l'interprete PostScript per conoscere lo stato delle risorse di
sistema (memoria, stack, ecc.); è possibile inoltre consultare
una eccellente documentazione in linea (per inciso è una buona
parte del Language Reference Manual della Adobe - la bibbia del
settore), con la possibilità di eseguire ricerche di parole
chiave, ed addirittura vedere sullo schermo la pagina che è
nella memoria della stampante senza doverla stampare su carta.
Il modo più comodo e potente per lavorare è sicuramente l'uso di LaserTalk, che ha però l'handicap del costo, di vincolare all'uso di un Macintosh, e di una certa complessità di utilizzo; se potete affrontare la spesa, avete un Macintosh ed una certa confidenza con i debugger interattivi ve lo consiglio comunque caldamente.
Anche l'utilizzo di un Macintosh con il downloading via
AppleTalk è molto semplice, non richiedendo di realizzare nessuna
connessione hardware (a parte quella, già esistente, con la
LaserWriter); non permette però di lavorare in maniera interattiva
(vedremo fra poco di cosa si tratta) ma solo batch,
utilizzando il classico ciclo
Poiché il modo più alla portata di tutti, e che consente
l'uso interattivo dell'interprete PostScript, è quello che
utilizza la porta seriale, esso sarà il prescelto per
l'esposizione degli esempi di questo corso; chi volesse
utilizzare uno degli altri due potrà comunque facilmente
adattare le modalità operative all'ambiente scelto.
Cosa vi serve
Come abbiamo già detto, oltre al computer con porta seriale
ed all'editor di testo, saranno necessari un programma di comunicazione
ed un cavo seriale; alcuni dei programmi adatti sono:
- per sistemi MS-DOS e compatibili possono essere
utilizzati Crosstalk XVI della Microstuf, ProComm Plus della Datastorm
Technologies, e praticamente qualsiasi altro programma di
comunicazione che permetta di gestire la porta seriale a 9600
baud, con protocollo XON/XOFF, e tipo di connessione locale (non
con un modem).
- per sistemi Macintosh possono essere utilizzati Mac Terminal della Apple, Microphone della Software Ventures e tutti quelli (molti anche di public domain o shareware, come Red Ryder della FreeSoft), che soddisfano ai precedenti requisiti.
- per i sistemi Apple // possono essere utilizzati Access // della Apple o ASCII Express.
Il cavo da utilizzare potrà variare a secondo del tipo di
computer e di stampante laser che utilizzerete; è probabile che riusciate
a procurarvi già fatto quello che vi serve, cioè un cavo
seriale incrociato con gli opportuni connettori. Per agevolarvi
descriveremo come realizzare cinque tipi di cavi, che dovrebbero
coprire il 99,9% dei casi possibili; si veda la figura 1 per la disposizione dei
pin sui vari modelli di connettori.
- Cavo Macintosh SE/II/IIx/IIcx (gestione stampante XON/XOFF); ha tre fili collegati e deve avere dal lato computer un connettore minidin maschio, e dal lato stampante un connettore seriale DB25 maschio a 25 poli. Devono essere collegati, ordinatamente, il pin 3 lato computer col pin 3 lato stampante, il pin 4 lato computer col 7 lato stampante, ed infine il pin 5 lato computer col 2 lato stampante.
- Cavo Macintosh 128/512/Plus (gestione stampante XON/XOFF); ha tre fili collegati e deve avere dal lato computer un connettore DB9 maschio a 9 poli, e dal lato stampante un connettore seriale DB25 maschio a 25 poli. Devono essere collegati, ordinatamente, il pin 5 lato computer col pin 3 lato stampante, il pin 4 lato computer col 7 lato stampante, ed infine il pin 9 lato computer col 2 lato stampante.
- Cavo Apple II/IIc/IIe + Super Serial Card (gestione stampante XON/XOFF); ha tre fili collegati e deve avere dal lato computer un connettore seriale DB25 maschio a 25 poli, e dal lato stampante un connettore seriale DB25 maschio a 25 poli. Devono essere collegati, ordinatamente, il pin 2 lato computer, col pin 3 lato stampante, il pin 4 lato computer col 7 lato stampante, ed infine il pin 3 lato computer col 2 lato stampante. Il jumper block deve essere sulla posizione modem; può essere usato anche il cavo standard dell'Imagewriter, ed in questo caso il jumper block deve essere sulla posizione terminal.
- Cavo MS-DOS o compatibili (gestione stampante XON/XOFF); ha tre fili collegati e deve avere dal lato computer un connettore seriale DB25 femmina a 25 poli, e dal lato stampante un connettore seriale DB25 maschio a 25 poli. Devono essere collegati, ordinatamente, il pin 2 lato computer, col pin 3 lato stampante, il pin 7 lato computer col 7 lato stampante, ed infine il pin 3 lato computer col 2 lato stampante. Se reperibile, può essere utilizzato un qualunque cavo seriale femmina-maschio incrociato, oppure uno dritto insieme ad un null-modem.
- Cavo MS-DOS o compatibili (gestione stampante DTR/DTS); ha quattro fili collegati e deve avere dal lato computer un connettore seriale DB25 femmina a 25 poli, e dal lato stampante un connettore seriale DB25 maschio a 25 poli. Devono essere collegati, ordinatamente, il pin 2 lato computer col pin 3 lato stampante, il pin 3 lato computer col pin 2 lato stampante, il pin 5 lato computer col pin 20 lato stampante, il pin 7 lato computer col pin 7 lato stampante, ed infine il pin 5 lato computer col 20 ancora dal lato del computer (quest'ultimo è un ponticello nel corpo del connettore lato computer, e non un filo fra computer e stampante come gli altri).
Si consiglia, anche se non è indispensabile, di connettere la
calza schermante del cavo alla carcassa di uno solo dei connettori,
lasciandola staccata nell'altro. Nella maggior parte dei casi, la
gestione di default delle stampanti laser è XON/XOFF; più
avanti forniremo un metodo per commutare, via software, il modo
di funzionamento della stampante da XON/XOFF a DTR/DTS e
viceversa. Una stampante laser seriale che lavori in DTR/DTS
mentre il software che la controlla lavora in XON/XOFF può
portare alla perdita di una parte dei caratteri trasmessi, nel
caso di programmi molto lunghi e/o di alte velocità di
trasmissione.
Eppur si muove
Scegliete quindi il vostro sistema di lavoro fra i tre prima
elencati, procuratevi il materiale ed il software opportuno, ed eseguite
le opportune connessioni. Per provare la funzionalità del
collegamento, dovrete eseguire diverse operazioni; vediamole.
- Se utilizzate un Macintosh, il collegamento AppleTalk ed un programma di downloading, scrivete un file formato testo con l'editor, costituito da solo due righe, la prima contenente la parola showpage, scritta in lettere minuscole, e la seconda solo uno spazio bianco. Salvate il file, spegnete e riaccendete la LaserWriter, attendete che sia disponibile (se è fredda, anche un paio di minuti) ed eseguite il downloading; il risultato sarà l'espulsione di una pagina completamente bianca.
- Se utilizzate un Macintosh, il collegamento AppleTalk ed il sistema di sviluppo PostScript LaserTalk, lanciate il sistema, collegatevi con la LaserWriter, che deve essere già accesa e disponibile, generate lo stesso file utilizzando l'editor interno di LaserTalk, salvatelo ed eseguite il downloading; otterrete lo stesso risultato.
- Se utilizzate un computer con il collegamento seriale ed un programma di comunicazione, eseguite il collegamento con l'appropriato cavo seriale fra il computer e la prese femmina DB25 a 25 poli, che è situata sul pannello posteriore della stampante laser, regolate il selettore di input su comunicazione seriale a 9600 baud (sulla maggior parte delle stampanti, c'è un selettore rotante a 4 posizioni, quella che ci interessa è marcata 9600) e accendete la stampante. Scrivete lo stesso file dei casi precedenti con l'editor di vostra scelta, salvatelo in formato testo, lanciate il programma di comunicazione in emulazione di terminale (il tipo esatto di terminale emulato non importa, TTY o VT100 vanno benissimo) e regolatelo con i seguenti parametri:
e, se il programma lo consente, disabilitate il filtraggio dei caratteri di controllo sia in input che in output.
Adesso battete la sequenza di caratteri CONTROL-D + CONTROL-T
(cioè tenendo premuto il tasto CONTROL, battete il tasto D,
rilasciate ambedue i tasti, premete e mantenete premuto il tasto
CONTROL, battete il tasto T, ed infine rilasciate di nuovo i due
i tasti. Non battete nessun altro carattere, in particolare spazi
o RETURN. La stampante laser dovrà rispondervi con questa
sequenza di caratteri, che appariranno sullo schermo del vostro
computer
%%[Status: idle]%%
indicando cosi il buon funzionamento di tutto il sistema. Eseguite poi il downloading del file già preparato, che dovrà produrre, come nei casi precedenti, l'espulsione di una pagina bianca dalla stampante laser.
Se il risultato non appare, oppure è diverso, ripetete la
sequenza di caratteri CONTROL-D + CONTROL-T; se non ottenete
ancora il risultato, provate a battere la parola showpage
in lettere minuscole, senza fare correzioni e terminando con un
RETURN. Se stavolta ottenete subito la pagina bianca, avete
probabilmente un filo staccato (quello di ricezione lato
computer, che è quello collegato al pin 2 dal lato stampante).
Se invece non ottenete ancora nessun risultato, c'è probabilmente
un errore di cablaggio nel cavo, oppure nella regolazione del
programma di comunicazione che state utilizzando. Vi consigliamo,
in tal caso, di ricontrollare tutto dall'inizio, valendovi magari
dell'aiuto di un amico più esperto di voi nel maneggio del
saldatore e in problemi di comunicazione fra computer.
Executive, ovvero il PostScript interattivo
È chiaro che programmare in PostScript solo scrivendo il programma in un file ed eseguendone il downloading è possibile ma scomodo; d'altra parte battere comandi PostScript al terminale senza poter effettuare correzioni è un modo di lavorare praticamente inutilizzabile per programmi non brevissimi. Linguaggi molto più semplici, come il BASIC, possiedono una modalità interattiva, in cui si possono battere comandi su di una riga, effettuare eventuali correzioni, ed eseguire poi tutti i comandi insieme battendo RETURN; una tale modalità esiste anche nell'interprete PostScript, ma, prima di occuparcene, è necessario spendere due parole per descrivere cos'è esattamente un programma PostScript.
Un programma PostScript consiste in una sequenza (o file) di caratteri compresi nel subset stampabile dei caratteri ASCII, più i caratteri SPAZIO, TAB, LINEFEED e RETURN, che sono separatori; questi ultimi quattro caratteri vengono considerati equivalenti, ed inoltre ogni sequenza formata con essi viene considerata sintatticamente equivalente ad un singolo separatore. Questo permette una notevole libertà di formattazione del programma, con utilizzo libero di spazi, righe vuote e dell'indentazione effettuata con i TAB. Un programma consiste quindi in una sequenza di stringhe divise fra di loro da uno o più separatori.
Per maggior chiarezza è necessario inoltre spiegare lo scopo
dei caratteri di controllo che abbiamo usato nell'esempio precedente:
- CONTROL-T interroga la LaserWriter sul suo stato, e fa stampare in risposta un messaggio informativo che lo descrive;
- CONTROL-D dichiara che il programma corrente è terminato, resetta la stampante e la predispone ad accettare un nuovo programma.
Per entrare nella modalità interattiva dell'interprete
PostScript, digitare, usando solo caratteri minuscoli e senza
effettuare errori, i seguenti comandi (le parole in lettere
maiuscole indicano i tasti corrispondenti)
CONTROL-D
executive RETURN
otterrete in risposta un messaggio simile a questo
PostScript(tm) version 23.0
Copyright (c) 1984 Adobe System Incorporated.
PS>
La versione dell'interprete PostScript sarà 23.0 1984 nel caso della LaserWriter, 38.0 1985 nel caso della LaserWriter Plus e superiore nel caso di altre stampanti; la sequenza di caratteri PS> è il prompt dell'interprete PostScript in modalità interattiva; quando esso si trova in questo stato è necessario modificare la regolazione del programma di comunicazione da half-duplex a full-duplex, perché sarà la stampante laser a fare l'eco dei caratteri ricevuti. Se non venisse effettuato questo cambiamento, i caratteri battuti sulla tastiera apparirebbero doppi.
Utilizzando questa modalità interattiva potete battere il
vostro programma PostScript, o qualunque altro valido comando PostScript,
una riga alla volta, mantenendo la possibilità di correggere
nella riga corrente; essa viene infatti interpretata solo quando
battete il tasto RETURN. I tasti utilizzabili per l'editing della
riga sono:
La modalità interattiva termina quando viene eseguito il comando
PostScript quit o viene battuto un CONTROL-D.
Il primo programma
Eseguiamo ora il nostro primo programma PostScript. Decidete
con quale modalità volete operare, se batch o interattiva:
nel primo caso preparate un file contenente il programma seguente
ed eseguitene il downloading, nel secondo caso battete il
programma una riga per volta, facendo molta attenzione agli spazi
bianchi e alle lettere maiuscole e minuscole, terminando ogni
linea con RETURN:
newpath 72 72 moveto 432 0 rlineto 0 720 rlineto -432 0 rlineto closepath 12 setlinewidth stroke /Times-Bold findfont 72 scalefont setfont 144 432 moveto (PostScript) show showpage
La stampante laser produrrà una pagina (vedi figura 2), bordata con una linea spessa a circa un pollice dal margine carta e con al centro stampata la parola PostScript; si tenga presente che l'unità di misura che il PostScript usa per default è normalmente 1/72 di pollice (unità di misura detta punto, pari a circa 0.35 mm.) .
Complimenti! Avete appena eseguito il vostro primo programma PostScript. Abbiamo appena scalfito la punta dell'iceberg del PostScript, ma per essere la prima volta possiamo ritenerci soddisfatti; nella seconda parte di questo corso inizieremo a definire e spiegare i comandi PostScript, cominciando ovviamente da quelli di questo esempio.
Copyright © 1985: Marco A. Calamari