L'HOWTO sul sistema a finestre MGR Vincent Broman Bozza, 30 Maggio 1996 ____________________________________________________________ Indice Generale 1. Questo HOWTO 1.1 Dove trovare questo HOWTO 1.2 Autenticazione 1.3 Ringraziamenti per l'HOWTO 2. Cos'e l'MGR Window System? 2.1 Funzionalità 2.2 Requisiti 2.3 Come comparare MGR, X11 e 8.5? 3. Installazione di MGR 4. Usare MGR 4.1 Applicazioni che supportano MGR in modo trasparente 4.2 Applicazioni MGR (client) distribuite con il server 4.3 client predisposti per MGR distribuiti a parte, vedi il file "SUPPORT" 5. Programmazione in MGR 6. Documentazione ulteriore 7. Ringraziamenti per MGR ______________________________________________________________________ 11.. QQuueessttoo HHOOWWTTOO 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. 11..11.. DDoovvee ttrroovvaarree qquueessttoo HHOOWWTTOO 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. 11..22.. AAuutteennttiiccaazziioonnee Le copie della distribuzione di MGR dovuta a Broman dovrebbero essere accompagnate da file di firma PGP, firmati da "Vincent Broman ". 11..33.. RRiinnggrraazziiaammeennttii ppeerr ll''HHOOWWTTOO 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 MMGGRR -- vedi la sezione Ringraziamenti più avanti. 22.. CCooss''ee ll''MMGGRR WWiinnddooww SSyysstteemm?? 22..11.. FFuunnzziioonnaalliittàà MMGGRR (ManaGeR) è un sistema grafico a finestre. Il server MMGGRR fornisce nativamente un window manager e l'emulazione di terminali grafici a finestra su schermi a pixel, siano essi a colori o monocromatici. MMGGRR è 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. MMGGRR 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. MMGGRR 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é MMGGRR imita la pressione di tasti in risposta a selezioni da menu definiti dall'utente o altri eventi. 22..22.. RReeqquuiissiittii Allo stato attuale, MMGGRR gira su Linux, FreeBSD, sulle workstation Sun 3/4 con SunOS, e su Coherent. Varie versioni precedenti di MMGGRR 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. MMGGRR 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 MMGGRR sta ad X come Unix sta a Multics. 22..33.. CCoommee ccoommppaarraarree MMGGRR,, XX1111 ee 88..55?? MMGGRR 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. 33.. IInnssttaallllaazziioonnee ddii MMGGRR 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 MMGGRR 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 MMGGRR vista su Internet, ma non sono a conoscenza di nulla di una certa importanza che manchi da questa distribuzione per Linux e Sun. MMGGRR è 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 MMGGRR 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 MMGGRR. 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 MMGGRR 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: --DDWWHHOO modifica il file utmp così da permettere il funzionamento di "who" --DDVVII inserisce del codice che permette di muovere il cursore con il mouse in vi --DDDDEEBBUUGG abilita la possibilità di selezionare con l'opzione -d un output di debug --DDFFAASSTTMMOOUUSSEE utilizza l'operazione XOR nel tracciamento del mouse --DDBBUUCCKKEEYY abilita i comandi da tastiera, senza l'utilizzo del mouse --DDPPRRIIOORRIITTYY usa uno scheduling diverso dal round-robin standard, dando una priorità più alta alla finestra attiva --DDCCUUTT abilita il supporto per il copia/incolla fra le finestre. --DDMMGGRR__AALLIIGGNN forza l'allineamento della finestra sul confine del byte, per una maggiore velocità di scrolling ( solo nelle modalità monocromatiche) --DDKKIILLLL uccide le finestre nel caso che la tty riporti un errore di i/o --DDSSHHRRIINNKK usa solo parte dello schermo ( pari al valore della variabile di ambiente $MGRSIZE) --DDNNOOSSTTAACCKK non permette lo stacking degli eventi --DDBBEELLLL attiva il beep --DDKKBBDD nei Sun legge l'input di MGR dalla tastiera, invece che da stdin. Questo permette la redirezione a una finestra dei messaggi della console. --DDFFRRAACCCCHHAARR abilita il supporto per il movimento frazionale dei caratteri permettendo così l'uso di font proporzionali --DDXXMMEENNUU supporto esteso per i menu ( sperimentale ) --DDMMOOVVIIEE estensione per fare moviole: tutte le operazioni vengono salvate su di un file per un successivo replay -- non del tutto funzionante su Linux --DDEEMMUUMMIIDDMMSSBBUUTT nei mouse a due tasti, emula il bottone di mezzo premendo insieme gli altri 2. Non tutte le combinazioni di queste opzioni sono state testate su tutti i sistemi. 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 MMGGRR 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. MMGGRR 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 _n_e_c_e_s_s_a_r_i_e 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é ? 44.. UUssaarree MMGGRR Il solo file _r_i_c_h_i_e_s_t_o in una installazione MMGGRR è 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 MMGGRR, ottieni: ccaann''tt ffiinndd tthhee ssccrreeeenn 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. ccaann''tt ffiinndd tthhee mmoouussee 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. ccaann''tt ggeett aa ppttyy 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. nnoonnee bbuutt tthhee ddeeffaauulltt ffoonntt accertati che MMGGRR 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. ccoommpplleettaammeennttee bbllooccccaattoo ((nnoonn ssii mmuuoovvee nneemmmmeennoo iill ccuurrssoorree ddeell mmoouussee)) 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 MMGGRR. 44..11.. AApppplliiccaazziioonnii cchhee ssuuppppoorrttaannoo MMGGRR iinn mmooddoo ttrraassppaarreennttee Ogni applicazione che giri in modalità tty può essere fatta partire in una finestra MMGGRR 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. 44..22.. AApppplliiccaazziioonnii MMGGRR ((cclliieenntt)) ddiissttrriibbuuiittee ccoonn iill sseerrvveerr bbddffttoommggrr converte dei font .bdf in font MGR bbrroowwssee un browser di icone bbuurryy nasconde questa finestra cc__mmeennuu costruisce menu dagli errori del compilatore C cclloocckk orologio digitale cclloocckk22 orologio analogico cclloossee chiude la finestra e la iconifica ccoolloorr setta i colori di primo piano e di sfondo del testo nella finestra. ccoolloorrmmaapp legge o modifica la palette ccuurrssoorr cambia l'aspetto del cursore ccuutt ritaglia del testo dalla finestra e lo ricopia nel cut buffer ccyyccllee visualizza una serie di icone ddmmggrr primitivo previewer di file ditroff ffaaddee fa sfumare uno script home movie da una scena all'altra ffoonntt passa ad usare un nuovo font nella finestra ggrrooppbbmm un driver che traduce dal formato roff al formato PBM, usando i font Hershey. hhppmmggrr emulatore di terminale hp 2621 iiccoo disegna un icosaedro, o altro poliedro, animato iiccoonnmmaaiill notifica l'arrivo della posta iiccoonnmmssggss notifica l'arrivo dei messaggi iiffyy iconifica e deiconifica le finestre llooaaddffoonntt carica un font dal disco mmaazzee un gioco di labirinto mmcclloocckk orologio micky mouse mmeennuu crea o seleziona un menu a scomparsa mmggrr server e window manager del window system della Bellcore mmggrrbbdd il gioco boulder-dash mmggrrbbiiffff guarda se è arrivata posta nella mailbox e la notifica mmggrrllooaadd disegna un grafico del load average del sistema mmggrrlloocckk blocca la console mmggrrllooggiinn manager grafico di login mmggrrmmaagg ingrandisce una parte dello schermo, salvandolo su file se si vuole mmggrrmmaaiill notifica l'arrivo della posta mmggrrmmooddee attiva o disattiva i modi delle finestre mmggrrmmssggss notifica l'arrivo dei messaggi mmggrrpplloott filtro grafico per Unix "plot" mmggrrsscclloocckk clessidra mmggrrsshhoowwffoonntt esamina i font MGR mmggrrsskkeettcchh un programma per fare schizzi/disegni mmggrrvviieeww visore per i bitmap MGR mmlleessss fa partire less o more in una finestra separata, con un menu aggiunto nel caso di less. mmnneeww fa partire un qualunque programma in un finestra separata e indipendente. mmpphhoooonn visualizza la corrente fase lunare mmvvii fa partire vi in una finestra separata, con puntamento del mouse oocclloossee (obsoleto) chiude una finestra oommggrrmmaaiill (obsoleto) notifica l'arrivo della posta ppbbmmrraawwttoommggrr,, ppggmmrraawwttoommggrr,, ppppmmrraawwttoommggrr convertono i file di immagini in formato raw PBM, PGM, PPM. ppbbmmssttrreeaamm legge un flusso di bitmap e fa partire un programma per ognuno di essi ppbbmmttoopprrtt produce output per stampante da un PBM ppggss front-end per ghostscript (un visore postscript), con la patch necessaria per poterlo utilizzare. ppiilloott un bitmap browser o visore di immagini. rreesseettwwiinn risistema lo stato di una finestra dopo che il crash di un client lo ha rovinato rroottaattee ruota un bitmap di 90 gradi ssccrreeeenndduummpp scrive una copia dello schermo grafico ad un file bitmap sseett__ccoonnssoollee ridirige alla finestra i messaggi destinati alla console sseett__tteerrmmccaapp visualizza un appropriato settaggio di TERM e TERMCAP per la finestra attuale sseettnnaammee da un nome ad una finestra, cosa utile per i messaggi e l'iconificazione sshhaappee cambia le dimensioni di una finestra ssqquuaarree quadra questa finestra ssqquueeeezzee comprime un bitmap MGR usando l'algoritmo di compressione run- length encoding. ssttaarrttuupp produce lo scheletro di un file di startup che produca il corrente layout di finestra tteexxmmggrr visore di file TeX dvi tteexxtt22ffoonntt,, ffoonntt22tteexxtt per passare dal formato dei font per MGR al formato testo e viceversa uunnssqquueeeezzee decomprime un bitmap MGR compresso con l'algoritmo run-length encoding vvggaaffoonntt22mmggrr,, mmggrrffoonntt22vvggaa convertono i font dal formato VGA al formato MGR, e viceversa. wwiinnddooww__pprriinntt stampa un'immagine di una finestra zzoooomm un editor di icone bboouunnccee,, ggrraavv,, ggrriidd,, hhiillbbeerrtt,, mmggrreeyyeess,, ssttrriinnggaarrtt,, wwaallkk demo grafici 44..33.. cclliieenntt pprreeddiissppoossttii ppeerr MMGGRR ddiissttrriibbuuiittii aa ppaarrttee,, vveeddii iill ffiillee ""SSUUPPPPOORRTT"" ccaallccttooooll calcolatrice su schermo cchheessss frontend a /usr/games/chess ggnnuu eemmaaccss editor con lisp/term/mgr.el e supporto per mouse & menu ggnnuupplloott programma universale per la rappresentazione di dati scientifici mmeettaaffoonntt programma per il progetto e la creazione di font oorriiggaammii l'editor pieghevole ppbbmmpplluuss conversioni e manipolazioni per il formato pbm ppllpplloott 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. 55.. PPrrooggrraammmmaazziioonnee iinn MMGGRR Il manuale del programmatore di MMGGRR, 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 MMGGRR richiede qualche volta la sostituzione di #include con #include #include 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 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 MMGGRR in modo interattivo leggendo e sperimentando con il driver di terminale per GNU Emacs mgr.el che implementa la libreria di interfaccia a MMGGRR 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 MMGGRR 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 MMGGRR 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. 66.. DDooccuummeennttaazziioonnee uulltteerriioorree 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. 77.. RRiinnggrraazziiaammeennttii ppeerr MMGGRR Stephen Uhler, con altri che lavoravano alla Bellcore, è stato l'originale designer ed implementatore di MMGGRR, cosicché la Bellcore ha protetto da copyright molto del codice e della documentazione di MMGGRR 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: · Stephen Hawley per le sue stupende icone. · Tommy Frandsen per la libreria VGA per Linux. · Tom Heller per la sua libreria Gasblit. · Andrew Haylett per il driver del mouse. · Dan McCrackin per le sue patch Gasblit->Linux. · Dave Gymer, dgymer@gdcarc.co.uk, per il fix dell'effetto Startrek. · Alex Liu per aver rilasciato per primo una versione funzionante di MMGGRR per Linux. · Lars Aronsson (aronsson@lysator.liu.se) per text2font e un font ISO8859-1 a 8 bit. · Harry Pulley (hcpiv@grumpy.cis.uoguelph.ca, hcpiv@snowhite.cis.uoguelph.ca) per il port a Coherent. · Vance Petree & Grant Edwards & Udo Munk per il loro lavoro sulla Hercules. · Udo Munk per il suo lavoro sulla inizializzazione del mouse seriale & select. · Norman Bartek & Hal Snyder e Mark Williams Co. per il loro aiuto con alcuni bug & con i device driver per Coherent. · Ringraziamenti ulteriori a Zeyd Ben Halim per le molte utilissime patch, in particolare l'adattamento della selezione. · a Bradley Bosch, brad@lachman.com, per molte patch del suo port per 3b1, che fissano errori ed implementano nuove e desiderabili caratteristiche. · Andrew Morton, applix@runxtsa.runx.oz.au, che ha per primo scritto il codice cut-word. · Kapil Paranjape, kapil@motive.math.tifr.res.in, per il supporto alla EGA. · Michael Haardt per i fix al supporto MOVIE, le correzioni dei bug, la separazione del codice della libbitblt nei driver di output, l'espansione della libmgr, e la formattazione del codice per la navigazione con origami. · a Yossi Gil per i molti font. · a Carsten Emde, carsten@thlmak.pr.net.ch, per mphoon. · a Vincent Broman per l'emulazione del bottone di mezzo del mouse, l'opera di linting, il supporto per il cgsix Sun, l'accesso alla tavola dei colori VGA, l'integrazione del codice per il port a Sun nella struttura software a strati disegnata da Haardt, la raccolta dei font, il salva schermo, e la manutenzione continua. Tutti i font bitmap di qualunque provenienza sono rigorosamente di pubblico dominio negli USA. I 583 font a larghezza fissa forniti con MMGGRR 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.