WordUtil Package Utility per la gestione di wordlist. Versione 1.11, 27 Giugno 1994 WordUtil Package 1.11 1 - GNU Disclaimer WordUtil Package 1.11 : Wordlist utilities. Copyright (C) 1994 Sbragion Denis This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. 2 - Introduzione Questo pacchetto contiene un' insieme di programmi utili per la gestione di wordlist. Nella realizzazione di questo pacchetto non si e` cercato di ottenere prestazioni elevate o funzionalita` particolari, ma, soprattutto, di assicurare la piu` ampia portabilita` del sistema, in modo da poter permettere la condivisione delle wordlist su tutti o quasi i sistemi operativi esistenti. Come conseguenza, buona parte dei programmi implementati risultano essere dei duplicati di funzioni gia` fornite come standard da molti sistemi operativi. Per ottenere la massima portabilita` tutti i programmi sono rigorosamente realizzati in ANSI C, senza sfruttare alcuna caratteristica che sia dipendente dal sistema operativo o dalla macchina. L' unica assunzione non portabile riguarda il tipo char del C, che si e` supposto coincidente con un byte fisico della macchina. Sebbene questo non sia assicurato dalle norme ANSI, una tale assunzione risulta verificata praticamente su tutte le macchine attualmente in circolazione e quindi non costituisce un problema. 2.1 - Contenuto del pacchetto Il pacchetto completo contiene i seguenti file: boolean.h Definizione tipo Boolean. copying GNU General Public License. error.h Definizione tipo ErrorType. issorted.c Verifica dell' ordinamento. msort.c Combinazione di due wordlist. split.c Divisione di una wordlist. strcomp.c Libreria compressione wordlist. strcomp.h Header per strcomp.c unique.c Eliminazione di parole duplicate. change.c Sostituzione di sequenze di caratteri. -1- 2.1 - Contenuto del pacchetto WordUtil Package 1.11 wlc.c Compressione di wordlist. wle.c Espansione di wordlist. wordutil.txt Breve manuale in formato ascii. In particolare e` importante leggere attentamente il file copying che contiene la GNU General Public License. Questa licenza spiega dettagliatamente sotto quali condizioni il pacchetto puo` essere redistribuito. 2.2 - Compilazione del pacchetto Il pacchetto non contiene file che effettuino una compilazione automatica dei vari programmi. Questo perche' una tale possibilita` risulta troppo legata al sistema operativo in cui ci si trova ad operare. La compilazione deve quindi essere effettuata a mano. L' operazione e` comunque molto semplice. E sufficiente tenere presente che tutti i programmi forniti si appoggiano sul piccolo file di libreria strcomp.c, che deve quindi essere incluso nella compilazione. Supponiamo quindi di avere posto tutti i file del pacchetto in una directory e di trovarci all' interno di tale directory. I programmi forniti possono essere compilati con una linea di comando del tipo seguente: cc -ansi filename.c strcomp.c In questa linea cc dovra` essere sostituito dal nome del compilatore C disponibile sulla macchina. L' opzione -ansi dovra` essere sostituita con l' opportuna opzione del compilatore per l' utilizzo della modalita` ANSI. Il nome di questa opzione varia da compilatore a compilatore. Filename.c indica il nome del programma che si intende compilare e potra` essere di volta in volta: issorted.c, msort.c, split.c, unique.c, change.c, wlc.c o wle.c. Su alcuni sistemi il compilatore funziona di default in modalita` ANSI e quindi l' opzione -ansi puo` essere omessa. Su altri puo` essere necessario aggiungere un opzione del tipo -ofilename per indicare il nome da dare all' eseguibile generato. In alcuni casi la presenza di caratteri di fine linea non corretti, dovuta ad un' errata conversione dei file da un sistema all' altro, puo` provocare un arresto della compilazione. In questo caso e` necessario convertire i sorgenti nel formato corretto. In ogni caso e` opportuno consultare i manuali del compilatore utilizzato. 3 - Funzionamento dei programmi Tutti i programmi forniti, se vengono eseguiti senza alcun parametro sulla linea di comando, forniscono una breve spiegazione sul loro utilizzo. Questa, data la semplicita` delle funzioni, e` generalmente piu` che sufficiente per il corretto utilizzo dei programmi. Si tenga comunque presente che non viene effettuato alcun controllo per prevenire eventuali sovrascritture di file gia` esistenti. E` quindi necessaria una certa prudenza. -2- 3 - Funzionamento dei programmi WordUtil Package 1.11 3.1 - IsSorted IsSorted controlla se una wordlist e` ordinata. L' unico parametro da fornire sulla linea di comando e` il nome del file da controllare. Se la wordlist risulta ordinata viene scritto su console un messaggio indicante il successo e il numero delle linee verificate. Altrimenti il programma si ferma riportando un messaggio di errore unitamente al numero di linea che ha provocato il fallimento. Esempio : issorted lista.txt 3.2 - MSort MSort combina insieme due liste ordinate generandone una terza e mantenendo l' ordinamento. Gli unici parametri da fornire sulla linea di comando sono i nomi dei due file contenenti le wordlist originarie e il nome del file destinazione in cui riporre la lista combinata. MSort non controlla se le due wordlist in ingresso sono ordinate. Nel caso non lo siano il file risultante risulta non ordinato. Esempio : msort lista1.txt lista2.txt lista.txt 3.3 - Split Split permette di spezzare una wordlist in piu` file contenenti ciascuno un numero selezionabile di linee. I parametri da fornire sulla linea di comando sono il numero di linee dei file che si vogliono generare e il nome del file contenente la wordlist da spezzare. Vengono generati una serie di file nella forma split.XXX dove XXX e` un numero decimale progressivo generato automaticamente. Opzionalmente puo` essere fornito un terzo parametro che indichi il nome da utilizzare per la generazione dei file di suddivisione. Al nome fornito sulla linea di comando viene aggiunto un numero progressivo per distinguere le varie parti della wordlist, analogamente a quanto viene fatto con il nome "split.". Esempio : split 5000 lista.txt split 5000 lista.txt parti. 3.4 - Unique Unique elimina le parole doppie da una wordlist. Affinche' il processo abbia successo e` assolutamente necessario che la wordlist sia ordinata. Gli unici parametri da fornire sono il nome del file in ingresso e il nome del file in cui riporre la wordlist senza parole doppie. Il numero di parole doppie eliminate viene indicato sulla console. Esempio : unique lista.txt singole.txt -3- 3.4 - Unique WordUtil Package 1.11 3.5 - Change Change permette di sostituire sequenze di caratteri all' interno di una wordlist. Lo scopo principale di questo programma e quello di permettere la sostituzione di opportune sequenze ascii con i corrispondenti caratteri accentati, in modo da poter adattare la wordlist alle proprie esigenze. Sulla linea di comando occorre fornire file di ingresso, file di uscita e sostituzioni, rappresentate da coppie di stringhe separate da uno spazio. Le sostituzioni vengono effettuate nell' ordine in cui sono inserite nella linea di comando. Quindi la linea: change lista.txt lista.sub \`a a` a` a e` equivalente alla linea: change lista.txt lista.sub \`a a a` a in quanto la prima sostituzione viene poi trasformata dalla seconda. Si possono fornire al massimo 20 sostituzioni ed ognuna di queste non deve contenere piu` di 16 caratteri per stringa. Si ricordi che i due apici `' sono interpretati in maniera particolare da molti sistemi operativi per cui e` necessario rappresentarli con qualche sequenza particolare, ovviamente dipendente dal sistema. Consultare i manuali del sistema per avere maggiori informazioni in proposito. Esempio : subst lista.txt noacc.txt a` a e' e subst lista.txt lista.asc \`a a` \`e e` \`i i` \`o o` \`u u` \e' e' 3.6 - Wlc (Word List Compressor) Wlc comprime una wordlist utilizzando una tecnica specifica. Affinche' il processo funzioni la wordlist deve essere ordinata. Le prestazioni fornite da wlc, in termini di compressione, non sono molto elevate (mediamente circa 3 a 1), ma diventano molto interessanti se si comprime ulteriormente il file risultante con uno qualunque dei compattatori piu` diffusi. In questo caso si raggiungono fattori di compressione dell' ordine di 10 a 1, fattori comunque piu` elevati di quelli che si possono ottenere utilizzando i soli compattatori. Inoltre, i file generati da wlc sono in formato binario, senza quindi problemi di conversione dei caratteri di fine linea da un sistema operativo all' altro. Questi vengono automaticamente ripristinati nel formato corretto al momento dell' espansione. Gli unici parametri da fornire sulla linea di comando sono il nome del file contenente la wordlist e il nome del file in cui riporre la wordlist compressa. Esempio : wlc lista.txt lista.wlc -4- 3.6 - Wlc (Word List Compressor) WordUtil Package 1.11 3.7 - Wle (Word List Expander) Wle espande una wordlist compressa con wlc. Anche in questo caso gli unici parametri da fornire sulla linea di comando sono il nome del file con la wordlist compressa e il nome del file in cui riporre la wordlist espansa. I caratteri di fine linea vengono automaticamente ripristinati nel formato corretto. Wle non effettua nessuna verifica per accertare il formato del file fornito in ingresso. Esempio : wle lista.wlc lista.txt 4 - Tecnica di compressione La tecnica di compressione usata e` molto semplice. Sostanzialmente per ogni parola della wordlist vengono conteggiate le lettere iniziali che sono in comune con la parola precedente. Dopodiche' la parola viene codificata scrivendo nel file compresso il conteggio delle lettere in comune e, di seguito inalterate, le lettere rimanenti. Se la wordlist e` ordinata questo comporta un notevole risparmio di spazio. Questa tecnica non e` ne nuova ne originale, ma permette buone prestazioni e semplicita` di implementazione. Chi fosse interessato e non riesca a decifrare i particolari dal semplicissimo codice fornito nel file strcomp.c si metta pure in contatto tramite gli indirizzi indicati nel seguito. 5 - Errori e suggerimenti Ogni errore o suggerimento puo` essere riportato via Internet ad uno dei seguenti indirizzi: sbragion@ghost.sm.dsi.unimi.it (preferito) denissbr@ipo.sm.dsi.unimi.it Questi indirizzi dovrebbero rimanere stabili fino a circa meta` dell' anno 1995. Tramite posta ordinaria mi si puo` rintracciare all' indirizzo: Sbragion Denis Via E. Fermi 18 20046 Biassono (MI) ITALY La posta elettronica e` ovviamente preferita. Nel riportare gli errori si prega di essere il piu` precisi possibile, riportando macchina e sistema operativo usati, condizione in cui si verifica l' errore, tecnica usata per la compilazione, descrizione dettagliata dell' errore e quant' altro possa essere utile all' individuazione delle cause. Ogni suggerimento e` benvenuto. Nel caso si effettuino delle modifiche o dei miglioramenti ai sorgenti, oppure nel caso in cui si includa parte dei miei sorgenti in altri programmi (mi riferisco qui in particolar modo alla parte di compressione) sarei felice se me ne venisse data comunicazione. -5- 5 - Errori e suggerimenti WordUtil Package 1.11 I programmi sono stati testati, per ora, solo su alcuni sistemi unix e dos. Sono particolarmente interessato ai problemi di portabilita` e quindi, se il pacchetto venisse testato con successo su altri sistemi, pregherei di darmene comunicazione. Indice Dei Contenuti 1 - GNU Disclaimer ............................................... 1 2 - Introduzione ................................................. 1 2.1 - Contenuto del pacchetto ................................. 1 2.2 - Compilazione del pacchetto ............................. 2 3 - Funzionamento dei programmi ................................. 2 3.1 - IsSorted ............................................... 3 3.2 - MSort ................................................... 3 3.3 - Split ................................................... 3 3.4 - Unique ................................................. 3 3.5 - Change ................................................. 4 3.6 - Wlc (Word List Compressor) ............................. 4 3.7 - Wle (Word List Expander) ............................... 5 4 - Tecnica di compressione ..................................... 5 5 - Errori e suggerimenti ....................................... 5 -6-