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