AGENDA. Un programma per la gestione degli appuntamenti C1991 Pagani Massimiliano 0 CONDIZIONI DI DISTRIBUZIONE E' possibile copiare liberamente questo programma e darne una copia a chiunque, basta che la transazione avvenga GRATUITAMENTE e con tutti i files relativi. E' possibile mettere a disposizione questi files su banca dati od in raccolte di programmi share-ware e pubblico dominio purchè non siano a fini di lucro. E' VIETATO modificare i files agenda.doc e agenda.c senza il consenso del sottoscritto. Ribadendo quanto detto sopra, l'unico mezzo di diffusione di questo programma deve essere la donazione gratuita. L'autore non può essere ritenuto responsabile di perdite o danneggiamento di dati derivati dall'uso diretto o indiretto, corretto o meno, di AGENDA. OK. Basta con le scartoffie legali e veniamo al sodo. 0.1 Files AGENDA deve essere distribuito con i seguenti files: AGENDA - l'eseguibile (12444 bytes) AGENDA.c - il sorgente (6867 bytes) AGENDA.doc - questo documento (9777 bytes) AGENDA.e.doc - la versione inglese di questo documento (8530 bytes) Se non trovate tutti questi files, potete contattarmi per avere la versione aggiornata e completa (il mio indirizzo è alla fine di questo file). 1 COSA FA AGENDA Ogni volta che viene invocato, AGENDA, mostra gli appuntamenti dei prossimi dieci giorni. Gli appuntamenti sono contenuti nel file "Grasso:etc/appuntamenti". Se non vi piace questo posto potete ricompilare AGENDA cambiando il valore della costante `NOME_AGENDA' (linea 41). É possibile altresì creare la directory `etc' dove risulta più comodo quindi assegnare al path il device logico di `Grasso'. Ad esempio creando `etc' nella s: occorrerà agire nel seguente modo: 1> makedir S:etc 1> assign Grasso: S: Non ho messo il file degli appuntamenti nella directory s: in quanto questa si trova sulla partizione di boot del mio hard disk, dove voglio accedere in scrittura il meno possibile. É possibile che da una prossima versione sia permessa un'opzione che consenta di specificare un path/name differente per il file degli appuntamenti. AGENDA può essere utilizzato esclusivamente da CLI. Ho abbastanza intenzione di fare un'estensione con gadgets e mouse, forse in futuro ci sarà anche una versione interamente Workbench. 2 IL FILE `APPUNTAMENTI' In questo file si trovano ordinati tutti gli appuntamenti e le scadenze che AGENDA dovrà mostrare con un massimo di dieci giorni d'anticipo. Per cambiare il periodo da 10 giorni è necessario ricompilare il programma (anche questo, in una versione futura...). Il file è organizzato per linee, ogni linea che inizia con un carattere diverso da 0,1,2,3,4,5,6,7,8,9,* viene ignorata, così come ogni linea vuota. 2.1 EVENTI FISSI Ogni linea non ignorata deve contenere un avvenimento espresso nella forma seguente: ggmmaa [hh:mm[:ss]] [descrizione (caratteri qualsiasi)] ggmmaa è la data dell'avvenimento, ad esempio 140991 indica il 14 settembre 1991. Suppongo che intorno all'anno 2000 ci saranno notevoli problemi con agenda, così come in tutti i sistemi in cui bastano le ultime due cifre per specificare l'anno, ma per il 2000 avremo senza dubbio già cambiato computer :). Se questo dovesse diventare un serio problema sarà sufficiente fare un controllo sull'anno, ad esempio gli anni minori di 78 farli diventare del nuovo secolo, oppure espandere l'anno a quattro cifre obbligatorie. Dopo la data è obbligatorio uno spazio, quindi l'ora è facoltativa. L'ora, se espressa deve essere sempre nel formato hh:mm o al più hh:mm:ss. Notare che ogni numero è formato da due cifre. Per indicare le 9:30 di mattino è necessario scrivere 09:30. Non vengono fatti controlli particolari sulla correttezza della sintassi della linea, un errore nel file appuntamenti può causare confusione al programma, che non dovrebbe (chi può essere sicuro di qualcosa nel software?) mai degenarare in un guru. Il commento è facoltativo, ma non ha molto senso omettere la descrizione dell'evento che ci siamo tanto preoccupati di farci ricordare. 2.2 EVENTI PERIODICI Per indicare un evento che accade ogni anno (ad esempio un compleanno o una ricorrenza) bisogna mettere '**' al posto delle due cifre dell'anno. Ad esempio 2908** compleanno di Massimiliano (Pagani) avviserà ogni anno del mio compleanno (se mi avvisate per tempo posso farvi avere una lista di cose che mi piacerebbe ricevere per regalo). Si può anche indicare qualcosa che avviene ogni mese: 18**91 comprare Nathan Never Segnala l'uscita del fumetto in edicola il 18 di ogni mese dell'anno 91, ovviamente è meglio indicare tale evento con: 18**** comprare Nathan Never in quanto è verosimile che voglia comprare Nathan Never ogni mese di tutti gli anni a venire (o, più verosimilmente, finchè durano i soldi). Si possono mettere gli asterischi anche sul giorno per indicare un evento che accade tutti i giorni, questa possibilità è un po' inutile (chi si dimentica di fare qualcosa che deve fare tutti i giorni? Io, ma questo è un caso particolare...) 2.3 STRUTTURAZIONE DEL FILE EVENTI Nel file eventi bisogna mettere prima tutti gli eventi periodici (con date che contengono asterischi), quindi tutti gli eventi fissi. I due gruppi di eventi devono essere ordinati dal più vicino nel futuro al più remoto. Se avete qualche problema di comprensione, caricatevi il file `appuntamenti', che è un esempio funzionante, quindi modificatelo ed utilizzatelo fino a capire il funzionamento. 2.4 MODIFICA DEL FILE EVENTI Per creare e modificare è sufficiente un qualsiasi editor ascii, può andare bene sia il comando ed nella directory C:, che il mEmacs sul dischetto Extras, sia il TxEd+ (pubblico dominio), che il Cygnus Ed (non pubblico dominio). 3 USO Basta impartire il comando AGENDA senza alcun parametro per ottenere l'elenco degli avvenimenti dei prossimi 10 giorni registrati nel file "Grasso:etc/appuntamenti". Io ho trovato molto utile inserirlo come comando nella procedura s:shell-startup, con il seguente algoritmo: (...) IF NOT EXISTS ENV:agenda agenda SETENV agenda fatto ENDIF (...) In questo modo agenda viene visualizzato solo nel primo shell aperto e non ci annoia più con i suoi messaggi se apriamo più di una shell per motivi nostri. Se invochiamo agenda con un numero qualsiasi di parametri, otteniamo il messaggio: 1> agenda ? Agenda v1.0 -------------------------- © 1991 Pagani Massimiliano read 'agenda.doc' or 'agenda.e.doc' to see how Agenda 1.0 works. Spiacente, ma non è facile spiegare come funziona agenda in due parole. 4 LIMITI Agenda da il massimo di se su un computer (non necessariamente Amiga) munito di orologio hardware e di hard disk. É accettabile anche su un sistema senza hard disk, ma è alquanto scomodo da utilizzare se ogni volta dobbiamo invocare il comando 'date' per sistemare l'ora e la data. L'algoritmo per il calcolo del giorno del mese funziona solo con il calendario Gregoriano, questo non dovrebbe costituire un problema, visto che agenda serve solo per appuntamenti futuri (non si sa mai...). Come accennato prima, potrà esserci qualche problema dall'anno 2000 in poi, ma non avevo voglia di vedere che tipo di problema potesse esserci e come eliminarlo. 5 PROSSIMAMENTE SU QUESTI SCHERMI Si potrebbe lavorare ancora un po' su AGENDA, ad esempio aggiungere opzioni per fargli leggere gli eventi da un file qualsiasi, per vedere gli appuntamenti con un anticipo generico e per farli visualizzare in modo ordinato. Con un lavoro abbastanza consistente si potrebbe permettere la modifica, l'inserimento e la cancellazione degli eventi con un'interfaccia intuition. Con un altro po' di lavoro sarebbe possibile renderlo completamente intuition in modo da poterlo utilizzare anche da WorkBench e mettere agenda nello 'startup drawer' del 2.0. Lavorandoci ancora lo si potrebbe integrare con una rubrica. Sempre sulla scala dell'evoluzione lo si potrebbe attaccare ad un programma di tetris, alla nuova versione di Eliza, ad un sistema esperto per la classificazione dei minerali e fargli leggere la posta e le news di internet :). Purtroppo ogni modifica di quelle sopra riportate occupa spazio. Già ora agenda è più lungo di 10k, quindi non è propriamente un programmino. Volendo si potrebbe riscriverlo in linguaggio macchina o compilarlo con l'ottimizzazione sullo spazio. Ma in ogni caso un'interfaccia intuition prende sempre i suoi 20-30k. Per quello che fa, AGENDA è già un pochino troppo lungo, ed allungarlo significa caricarlo in più tempo. Certo per chi ha l'hard disk come me, non c'è problema, ma per chi ha i dischetti e deve attendere qualche minuto per completare la startup-sequence... 6 NOTE FINALI Ho utilizzato AGENDA per 5 mesi consecutivi eseguendolo praticamente ogni giorno e non ho mai riscontrato problemi. Questo dato di fatto, insieme a tutte le regole di programmazione educata imparate a scuola e sul campo, dovrebbe fornire una buona garanzia anti-GURU. AGENDA NON è un programma puro, quindi non può essere reso residente ed invocato contemporaneamente da processi diversi. Se utilizzate AGENDA regolarmente e lo trovate utile, la vostra coscienza potrebbe insistere affinchè mi mandiate dei soldi. Non intendendo deludere la vostra coscienza ecco il mio indirizzo: Pagani Massimiliano via Mazzini 40 21052 Busto Arsizio (VA) ITALIA A tale indirizzo potete anche mandare suggerimenti, consigli, problemi incontrati, richieste per l'ultima versione di AGENDA (accompagnata da un dischetto vuoto), o descrizione di sistemi interessanti per mandare AGENDA in GURU, nonchè sw di pubblico dominio e share-ware. Inoltre è possibile contattarmi al seguente indirizzo di e-mail: ele0001@cdc835.cdc.polimi.it Non tratto sw piratato. Grazie e buon divertimento.