Per motivi di origine legale, io Francesco Tapparo (cesco@goldnet.it), traduttore di questo HOWTO preferisco lasciare non tradotto il copyright originale dell'autore: Copyright Vincent Broman 1995. Permission granted to make and distribute copies of this HOWTO under the conditions of the GNU General Public License.
Questo HOWTO si può reperire in
ftp://archimedes.nosc.mil/pub/Mgr/MGR-HOWTO.sgml
,
oltre a trovarsi in
ftp://sunsite.unc.edu/pub/Linux/docs/HOWTO/MGR-HOWTO
.
In directory vicine potrebbero comparire gli stessi documenti in
formati alternativi, come MGR-HOWTO.txt
.
Le copie della distribuzione di MGR dovuta a Broman dovrebbero essere accompagnate da file di firma PGP, firmati da "Vincent Broman <broman@nosc.mil>".
Nonostante Vincent Broman abbia per primo composto questo HOWTO,
molte delle informazioni e del testo è stato ottenuto da FAQ,
README, etc. scritti da Stephen Uhler, Michael Haardt, e
altri generosi utenti della Rete.
Correzioni Email e suggerimenti di modifiche devono essere spedite a
broman@nosc.mil
.
Uhler è stato il principale artefice di MGR -- vedi la sezione Ringraziamenti più avanti.
MGR (ManaGeR) è un sistema grafico a finestre. Il server MGR fornisce nativamente un window manager e l'emulazione di terminali grafici a finestra su schermi a pixel, siano essi a colori o monocromatici. MGR è controllato selezionando dei menu a scomparsa con il mouse, interagendo con la tastiera, e attraverso sequenze di escape scritte su pseudo-terminali dal software client.
MGR fornisce ogni client di: funzioni di controllo terminale alla termcap; primitive grafiche come disegno di linee e cerchi; utility per manipolare bitmap, font, icone, e menu a scomparsa; comandi per il ridisegno e il posizionamento delle finestre; e una facility di inoltro messaggi che abilita i client a ritornare e scambiare messaggi. I programmi possono chiedere di venire informati quando avviene un cambiamento nel window system, come la modifica delle dimensioni di una finestra, la pressione di un tasto del mouse, o l'arrivo di un messaggio da parte di un altro client. Questi cambiamenti vengono detti eventi. MGR notifica un evento a un client inviandogli una stringa di caratteri ASCII in un formato da questi specificato. Le applicazioni preesistenti si possono facilmente integrare nell'ambiente window senza modifiche poiché MGR imita la pressione di tasti in risposta a selezioni da menu definiti dall'utente o altri eventi.
Allo stato attuale, MGR gira su Linux, FreeBSD, sulle workstation Sun 3/4 con SunOS, e su Coherent. Varie versioni precedenti di MGR girano su Macintosh, Atari ST MiNT, Xenix, 386-Minix, DEC 3100, e 3b1 Unix-pc. Molti piccoli sistemi industriali real-time sotto OS9 o Lynx in Europa usano (un altra variante di) MGR per la loro interfaccia utente. L'interfaccia di programmazione è scritta in C e in ELisp, quantunque sia abbastanza facile supportare client scritti in altri linguaggi. MGR richiede molte meno risorse di X, o addirittura di gcc. Non ha la base utenti, il repertorio software o le librerie di alto livello di X o MS-Windows, ad esempio, ma è abbastanza elegante ed accessibile.
È stato detto che MGR sta ad X come Unix sta a Multics.
MGR consiste di un server con window manager ed emulatore di terminale nativi, client che girano in questo emulatore usandolo per comunicare con il server. Non viene eseguito alcun multiplexing delle risorse.
X11 consiste di un server e di client, che usualmente si connettono al server usando un socket. Tutti i servizi visibili all'utente, come emulatori di terminale, window manager etc. sono forniti da client. Non viene eseguito alcun multiplexing delle risorse.
8.5, il sistema a finestre Plan 9, è un multiplexer di risorse,
in quanto ogni processo in una finestra può accedere a
/dev/bitblt
, /dev/mouse
e /dev/kbd
nel
proprio namespace. Questi sono multiplexati ai /dev/bitblit
,
/dev/mouse
e /dev/kbd
nel namespace di 8.5.
Questo approccio permette di girare 8.5 in una finestra di 8.5, un
design molto pulito. 8.5 inoltre ha un window manager e un emulatore
di terminale integrati.
L'ultima distribuzione dei sorgenti può essere prelevata tramite FTP
da ftp://bugs.nosc.mil/pub/Mgr/69
o tramite Mosaic da
http://archimedes.nosc.mil/Mgr/69
.
Essa si può trovare anche presso
ftp://sunsite.unc.edu/pub/Linux/apps/MGR
ed i suoi mirrors.
Versioni precedenti di questa distribuzione, curate da Haardt, si possono
trovare in tsx-11.mit.edu
, e probabilmente altrove.
Versioni di MGR precedenti al port per Linux, di Uhler ed altri
si trovavano in ftp://bellcore.com/pub/mgr
, ma penso che ora
non vi siano più.
Io ho salvato una copia di ogni cosa riguardante MGR vista su
Internet, ma non sono a conoscenza di nulla di una certa importanza che
manchi da questa distribuzione per Linux e Sun.
MGR è passato attraverso un bel po' di versioni e
releases, ma la corrente versione *per Linux* è la 0.69. Essa
passerà a 1.0 quando vi sarà del codice stabile per
supportare la VGA a 256 colori sotto Linux (per più di una scheda
grafica).
I numeri di versione RCS sono saliti dal 4.3 della Bellcore al 4.13
attuale.
Per costruire questa distribuzione di MGR sono necessari i seguenti tools: m4 (GNU, o forse anche altri dotati dell'opzione -D), make (GNU, o forse anche altri che supportino gli include) e *roff per la documentazione. Ed anche sh e POSIX install. Le distribuzioni binarie spesso non vengono assemblate, cosicché è necessario un compilatore ANSI C, come per esempio gcc.
Una installazione Linux richiede Linux 0.99.10 o meglio (quello che io
uso attualmente per il testing è la versione 1.2.13), una scheda
grafica HGC, EGA, VGA o SVGA, e un mouse.
Sono supportati i seguenti mouse:
mouse seriale Microsoft, mouse seriale MouseSystems a 3 e 5 byte
mouse seriale MMSeries, mouse seriale Logitech, mouse PS/2,
oppure un bus mouse. Con le combinazioni Buckey (Meta) da tastiera, anche
un sistema senza mouse potrebbe fare un po' di utile lavoro sotto
MGR. Il modo grafico monocromatico VGA 640x480 è
supportato senza bisogno di alcun intervento particolare, ed egualmente
quello 640x350 e 640x200.
Per supportare la modalità 800x600, o altre che il tuo BIOS
può inizializzare e che non richiedono bank-switching, è
necessario far girare sotto DOS, o un emulatore, un piccolo programma
(src/vgamisc/regs.exe
) per leggere i registri VGA e scrivere un
file header da piazzarsi nella directory src/libbitblit/linux
,
cosicché possa venire #incluso
dal file lì presente
vga.c
. Sono forniti anche degli esempi di tali file, ma per favore
creati quelli specifici della tua particolare scheda.
Alcune schede VGA possono usare modalità grafiche che richiedono 128k
di RAM, e queste potrebbero supportare risoluzioni monocromatiche
più elevate.
Il codice per la modalità a colori in Linux funziona senza problemi anche nella modalità policromatica VGA 320x200x256, poiché essa non richiede alcun bank-switching. Se pensi quanto pochi siano 64000 pixel, capirai che questa modalità è assai limitata. Nella versione 0.65 è stato aggiunto del codice per il bank-switching, non molto veloce, ma semplice: funziona con una scheda grafica Tseng ET4000 nelle modalità 640x480x256 e 800x600x256. Il codice per la S3 non funziona ancora nelle risoluzioni super VGA. Supportare nuove schede super VGA richiede la scrittura di una funzione per switchare i banchi, e quindi assicurare che la modalità desiderata possa venire inizializzata da un register dump, magari lavorandoci un po' sopra a mano. I servers a colori per Linux generalmente corrompono i font dello schermo, rendendo necessario l'uso di restorefont come in runx.
Sono supportati anche i Sun con SunOS 4.1.2+ e i frame buffer bwtwo
,
cgthree
, o cgsix
. La loro velocità lavorando nelle
modalità a colori è buona. Le installazioni Coherent
dovrebbero riferirsi al file README.Coh
nella distribuzione dei
sorgenti.
Il porting della versione più recente di MGR
ad un altro
sistema POSIX-like, che supporti select
, i pty e l'accesso
diretto ad un frame-buffer a mappa di bit dovrebbe essere immediato,
richiedendo solo l'implementazione della libreria libbitblt
basandosi, per esempio, sul codice sunmono
o colorport
.
Per una installazione completa, occorrono 7 Mb di spazio su disco per i file binari, i font, le man-page etc. I file sorgente occupano circa 4.5 Mb, cui vanno aggiunti i file oggetto durante la compilazione.
Normalmente, la directory dove installare i file che MGR usa a
runtime dovrebbe essere /usr/mgr
, o almeno dovrebbe venire
linkata ad essa. Scrivendo:
cd /usr/mgr; tar xvfz dovelohaimesso/mgrusr-0.69.tgz
e facoltativamente
cd /usr/mgr; tar xvfz dovelohaimesso/morefonts-0.69.tgz
si scomprimeranno questi file. I sorgenti possono venire installati
ovunque, ad esempio scrivendo
cd /usr/src/local/mgr; tar xvfz dovelohaimesso/mgrsrc-06.9.tgz
per scomprimere i sorgenti prelevati da archimedes.nosc.mil
.
L'albero dei sorgenti può venire compilato da un unico Makefile
nella directory principale che chiama quelli nelle secondarie, ognuno
dei quali "include" il file "Configfile"
nella directory base. Configfile
è creato dallo shell
script interattivo Configure
, che, tenendo conto delle tue
risposte ad alcune sue domande, fa processare Configfile.m4
ad m4.
Quindi si deve scrivere qualcosa di simile a questo:
chdir /usr/src/local/mgr
sh ./Configure
make first
make depend
make install
make clean
Potrebbe essere saggio, prima di far partire make, dare uno sguardo al
Configfile
generato dallo script Configure
,
controllando che sembri ragionevole.
(Come minimo un m4 (il /usr/bin/m4
dei Sun) si ferma subito
creando un Configfile
cortissimo.
Se accade questo, bisogna editare a mano una copia di
Configfile.sun
o Configfile.lx
)
Si può anche editare make all
in ogni directory in cui sia
stato creato un Makefile, non appena siano state compilate ed installate
le librerie.
Il server, le librerie, e alcuni client sono stati lintati, ma molti
client sono scritti in K&R C, e fanno generare molti warning
al compilatore.
Si possono aggiungere od omettere molti flag nella variabile MGRFGLAGS in Configfile per modificare alcune caratteristiche opzionali del server, ossia:
modifica il file utmp così da permettere il funzionamento di "who"
inserisce del codice che permette di muovere il cursore con il mouse in vi
abilita la possibilità di selezionare con l'opzione -d un output di debug
utilizza l'operazione XOR nel tracciamento del mouse
abilita i comandi da tastiera, senza l'utilizzo del mouse
usa uno scheduling diverso dal round-robin standard, dando una priorità più alta alla finestra attiva
abilita il supporto per il copia/incolla fra le finestre.
forza l'allineamento della finestra sul confine del byte, per una maggiore velocità di scrolling ( solo nelle modalità monocromatiche)
uccide le finestre nel caso che la tty riporti un errore di i/o
usa solo parte dello schermo ( pari al valore della variabile di ambiente $MGRSIZE)
non permette lo stacking degli eventi
attiva il beep
nei Sun legge l'input di MGR
dalla tastiera, invece che da
stdin. Questo permette la redirezione a una finestra dei messaggi
della console.
abilita il supporto per il movimento frazionale dei caratteri permettendo così l'uso di font proporzionali
supporto esteso per i menu ( sperimentale )
estensione per fare moviole: tutte le operazioni vengono salvate su di un file per un successivo replay -- non del tutto funzionante su Linux
nei mouse a due tasti, emula il bottone di mezzo premendo insieme gli altri 2.
La macro BITBLITFLAGS deve contenere -DBANKED
se si sta provando
il supporto per la SVGA a colori.
Un convertitore genera il codice C per le variabili statiche contenenti le icone e i font dai file corrispondenti.
Non tutti i client vengono compilati ed installati dai Makefile.
I client che si trovano sotto src/clients
e che hanno i nomi
capitalizzati, o che non vengono compilati dai Makefile forniti possono
presentare problemi durante la compilazione o l'esecuzione, ma
può essere interessante farci un po' di hacking.
Molti dei driver video nella directory libbitblit
sono di
interesse soprattutto archeologico. Qualche volta rovistando nelle tombe
può saltare fuori qualcosa di interessante.
A un certo punto controlla che i tuoi file /etc/termcap
e/o
terminfo
contengano le entrate per i terminali MGR
come quelli che si trovano nella directory misc
. Se tutto il
tuo software controlla $TERMCAP nell'ambiente , questo non
è più necessario, finché fai partire
eval `set_termcap`
in ogni finestra.
MGR funziona meglio se gira setuid root, poiché cerca di cambiare le proprietà dei pty e scrivere nel file utmp. Questo aiuta il gestore di icone ify a lavorare meglio e il meccanismo di trasmissione degli eventi ad essere più sicuro. Su Linux sono necessarie le permissioni del root per l'input/output sullo schermo. D'altra parte, tu decidi se fidarti o no.
Nelle versioni intorno alla 0.62 c'erano problemi sul Sun usando la csh come shell di default. I programmi sembravano girare in un gruppo di processi diverso da quello del gruppo di processi di primo piano del pty della finestra, in contrasto alle man-page e alle specifiche POSIX. Non c'era nessun problema con bash, sh o rc. Qualcuno ha un idea del perché ?
Il solo file richiesto in una installazione MGR è il server stesso. Questo ti darà finestre ad emulatore di terminale con shell giranti in esse e la possibilità di effettuare il cut/paste con il mouse ma, nessun bell'orologio, nessun font extra, nessun capriccio grafico, etc. A seconda delle opzioni, un server monocromatico necessita di circa 200K di RAM, oltre allo spazio allocato dinamicamente per window, bitmap, etc.
Se /usr/mgr/bin
è nel tuo PATH, digita semplicemente
"mgr
" per partire.
Dopo esserti goduto l'animazione di avvio, premi un tasto.
Quando compaiono lo sfondo tratteggiato e il puntatore del mouse,
mantieni premuto il pulsante sinistro del mouse, seleziona la voce
"new window" dal menu, e rilascia il pulsante. Quindi
definisci la finestra trascinando i suoi angoli con il mouse. Nella
finestra girerà la tua shell di default. Tieni premuto il pulsante
sinistro del mouse sopra un finestra per vedere un altro menu con
il quale eseguire azioni su quella finestra. Premendolo sopra una
finestra parzialmente coperta, essa viene riportata in primo piano.
Il menu che hai visto generarsi sullo sfondo vuoto comprende il comando
quit. Per le persone con un mouse a due pulsanti:
premete entrambi i pulsanti insieme per emulare il pulsante di mezzo
mancante, usato da alcuni programmi.
Il sottomenu quit comprende l'opzione "really quit", un'opzione di sospensione che sarà usata solo se stai facendo girare una shell supportante il job-control, ed una opzione per uno screen-saver/locker che aspetta che tu batta la password quando ritorni alla tua macchina.
Se ,provando a far partire MGR, ottieni:
accertati di avere un file /dev
per il tuo display, per
esempio /dev/bwtwo0
su un Sun. Se non lo hai, va come root
nella directory /dev
, e digita "MAKEDEV bwtwo0".
Altrimenti, potresti aver bisogno nella riga di comando dell'opzione
-S/dev/bwtwo0
o (su Linux) della opzione -S640x480
quando fai partire MGR
.
Su Linux dovresti anche assicurarti che /usr/mgr/bin/mgr
sia
stato installato setuid root.
accertati che esista /dev/mouse
, usualmente un link simbolico
al vero file di periferica del tuo mouse. Se non hai le permissioni per
scrivere in /dev
, puoi dare un'opzione come
-m/dev/cua0
quando fai partire MGR
. Inoltre sii sicuro
di aver fornito il giusto protocollo del mouse quando hai configurato
MGR
. Il mouse può può utilizzare quello Microsoft,
anche se questo non è il nome della marca.
accertati che tutti i /dev/[tp]ty[pq]?
siano posseduti da
root, con modo 666, e che tutti i programmi indicati con l'opzione
"shell" nel tuo file di avvio .mgrc
(se
c'è) esistano e siano eseguibili.
accertati che MGR stia cercando i font nella directory giusta.
Controlla Configfile
nei sorgenti o vedi se dare una
opzione -f/usr/mgr/font
a mgr
risolve il problema.
loginati alla tua macchina da un altro terminale (o usa rlogin) e
uccidi MGR
.
Se la tastiera funziona ancora, un tasto Buckey-Q può farti
uscire da MGR.
Ogni applicazione che giri in modalità tty può essere
fatta partire in una finestra MGR senza ulteriore pena. Le
applicazioni che girano in modalità testo usando termcap o
curses possono ottenere da sole il numero corretto di linee e colonne
della finestra usando shape(1)
per ridisegnare la finestra o
set_termcap(1)
per ottenere l'entrata termcap corretta.
converte dei font .bdf in font MGR
un browser di icone
nasconde questa finestra
costruisce menu dagli errori del compilatore C
orologio digitale
orologio analogico
chiude la finestra e la iconifica
setta i colori di primo piano e di sfondo del testo nella finestra.
legge o modifica la palette
cambia l'aspetto del cursore
ritaglia del testo dalla finestra e lo ricopia nel cut buffer
visualizza una serie di icone
primitivo previewer di file ditroff
fa sfumare uno script home movie da una scena all'altra
passa ad usare un nuovo font nella finestra
un driver che traduce dal formato roff al formato PBM, usando i font Hershey.
emulatore di terminale hp 2621
disegna un icosaedro, o altro poliedro, animato
notifica l'arrivo della posta
notifica l'arrivo dei messaggi
iconifica e deiconifica le finestre
carica un font dal disco
un gioco di labirinto
orologio micky mouse
crea o seleziona un menu a scomparsa
server e window manager del window system della Bellcore
il gioco boulder-dash
guarda se è arrivata posta nella mailbox e la notifica
disegna un grafico del load average del sistema
blocca la console
manager grafico di login
ingrandisce una parte dello schermo, salvandolo su file se si vuole
notifica l'arrivo della posta
attiva o disattiva i modi delle finestre
notifica l'arrivo dei messaggi
filtro grafico per Unix "plot"
clessidra
esamina i font MGR
un programma per fare schizzi/disegni
visore per i bitmap MGR
fa partire less o more in una finestra separata, con un menu aggiunto nel caso di less.
fa partire un qualunque programma in un finestra separata e indipendente.
visualizza la corrente fase lunare
fa partire vi in una finestra separata, con puntamento del mouse
(obsoleto) chiude una finestra
(obsoleto) notifica l'arrivo della posta
convertono i file di immagini in formato raw PBM, PGM, PPM.
legge un flusso di bitmap e fa partire un programma per ognuno di essi
produce output per stampante da un PBM
front-end per ghostscript (un visore postscript), con la patch necessaria per poterlo utilizzare.
un bitmap browser o visore di immagini.
risistema lo stato di una finestra dopo che il crash di un client lo ha rovinato
ruota un bitmap di 90 gradi
scrive una copia dello schermo grafico ad un file bitmap
ridirige alla finestra i messaggi destinati alla console
visualizza un appropriato settaggio di TERM e TERMCAP per la finestra attuale
da un nome ad una finestra, cosa utile per i messaggi e l'iconificazione
cambia le dimensioni di una finestra
quadra questa finestra
comprime un bitmap MGR usando l'algoritmo di compressione run-length encoding.
produce lo scheletro di un file di startup che produca il corrente layout di finestra
visore di file TeX dvi
per passare dal formato dei font per MGR al formato testo e viceversa
decomprime un bitmap MGR compresso con l'algoritmo run-length encoding
convertono i font dal formato VGA al formato MGR, e viceversa.
stampa un'immagine di una finestra
un editor di icone
demo grafici
calcolatrice su schermo
frontend a /usr/games/chess
editor con lisp/term/mgr.el
e supporto per
mouse & menu
programma universale per la rappresentazione di dati scientifici
programma per il progetto e la creazione di font
l'editor pieghevole
conversioni e manipolazioni per il formato pbm
programma per la veloce rappresentazione di dati scientifici
Il supporto Emacs in misc/mgr.el
e misc/mailcap
include un supporto MIME molto funzionale, attraverso Rmail e metamail.
Utilizzando pilot
e i filtri netPBM, si potrebbe costruire un
visore di immagini che sappia interpretare molti formati diversi, ma
non ho avuto il tempo per farlo.
Il manuale del programmatore di MGR, con l'interfaccia in linguaggio C alle applicazioni, si trova nella directory doc in formato troof/nroff. Esso copre i concetti generali, le chiamate alle funzioni/macro che controllano il server, una semplice applicazione, un indice e un glossario.
Il porting di programma client usato con versioni precedenti di MGR richiede qualche volta la sostituzione di
#include <mgr/mgr.h>
con
#include <term.h>
#include <dump.h>
e i client che usano le vecchio stile b_XOR, B_CLEAR, e simili
invece di BIT_XOR, BIT_CLR e simili possono venire sistemati scrivendo
#define OLDMGRBITOPS
#include <mgr/mgr.h>
Compilare codice per client richiede in genere opzioni di compilazione di questo tipo:
-I/usr/mgr/include -L/usr/mgr/lib -lmgr
Si può fare un po' di esperienza con le funzioni del server
MGR in modo interattivo leggendo e sperimentando con il driver di
terminale per GNU Emacs mgr.el
che implementa la libreria di
interfaccia a MGR in ELisp.
Il metodo usuale di procurarsi lo stato dal server può portare a dei problemi se il client si aspetta anche un grande volume di notifiche di eventi. Il problema sorge se una notifica (asincrona) arriva quando si aspetta la risposta ad una richiesta (sincrona). Se questo accade effettivamente (cosa inusuale) le funzioni di MGR per procurarsi lo stato dovranno essere integrate con il tuo loop per la gestione degli eventi.
Il solo servizio fondamentale di disegno mancante nel protocollo MGR sembra essere la colorazione di un area per aree diverse da rettangoli orizzontali. C'è del nuovo codice per la manipolazione della mappa globale dei colori, come per l'allocazione (suggerita) e deallocazione degli indici dei colori posseduti dalle finestre.
Se pensi di effettuare dell'hacking su server, puoi trovare il driver del
mouse in mouse.*
e mouse_get.*
, le parti grotty
dell'interfaccia alla tastiera in kbd.c
, e l'interfaccia al
display nelle directory src/libbitblit/*
. La procedura main,
la maggior parte delle inizializzazioni, e la parte di alto livello del
loop di input si trovano in mgr.c
, mentre l'interpretazione
delle sequenze di escape è in put_window.c
.
Il manuale del programmatore è indispensabile per i concetti generali.
Quasi tutti i client forniti sono dotati di una man page installata in
/usr/mgr/man/man1
o man6
.
Altre utili man page sono bitblit.3
, font.5
, e
bitmap.5
.
C'è un po' di ambiguità nella documentazione nel distinguere il
formato bitmap interno nel tuo frame-buffer e il formato bitmap nei file,
come per esempio le icone.
La man page mgr.1
copre le opzioni nella riga di comando, i
comandi nel file di startup ~/.mgrc
, l'interazione del mouse e
dei menu con il server, e i comandi da tastiera disponibili sui
sistemi con i tasti necessari.
Molti dei font in /usr/mgr/font/*
sono descritti almeno
parzialmente in /usr/mgr/font/*.txt
, ad esempio
/usr/mgr/font/FONTDIR.txt
da una descrizione analoga a quella fornita per X-Windows per i
font in formato .bdf. I nomi dei font finiscono in WxH
, dove
W
e H
sono la larghezza e l'altezza in pixel(espresse in base 10)
di ogni carattere.
Stephen Uhler, con altri che lavoravano alla Bellcore, è stato l'originale designer ed implementatore di MGR, cosicché la Bellcore ha protetto da copyright molto del codice e della documentazione di MGR ponendolo sotto i seguenti termini d'uso.
( N.d.T.: per motivi legali ho deciso di non tradurre il seguente copyright ) * Permission is granted to copy or use this program, EXCEPT that it * may not be sold for profit, the copyright notice must be reproduced * on copies, and credit should be given to Bellcore where it is due.
Si richiede di mostrare l'avviso di copyright nello schermo di startup.
Altri ringraziamenti a:
Tutti i font bitmap di qualunque provenienza sono rigorosamente di pubblico dominio negli USA. I 583 font a larghezza fissa forniti con MGR sono stati resi disponibili grazie a Uhler, la distribuzione X, YossiGil, e altri. I font vettoriali Hershey e il codice per disegnarli sono probabilmente liberamente ridistribuibili.