/* stwmaker - erzeugt eine Seite mit allen Stichworten aus dem Index * written 22./23.01.1994 by Dirk Haun, Public Domain * * Vorgehensweise: Die Indexdatei wird eingelesen (read_file), * ein Array mit Zeigern auf die einzelnen Zeilen * aufgebaut (init_pointers). Anschlieend werden * die Zeilen sortiert und nach Buchstaben getrennt * ausgegeben. That's all. * */ #include #include #include #include #ifndef TRUE # define TRUE (1) # define FALSE (0) #endif #define MORELINES 256 int read_file(char *filename); int cmp2(char **a,char **b); int init_pointers(void); unsigned char *mem, **array; size_t len; long maxlines, lines; int main(int argc,char *argv[]) { int ret, rest=FALSE; char chr, newchr; long i; if(argc>1) { if(read_file(argv[1])) { if(init_pointers()) { qsort(array,lines,sizeof(unsigned char*),cmp2); printf("Stichwortverzeichnis\n" "----------------------------------------------------------------------\n\n"); chr='A'; for(i=0;i=chr) break; if(i>0) rest=TRUE; if(i'Z' */ { printf("\n Sonstiges ...\n"); for(i=0;i'Z') printf(" %s\n",array[i]); } } } fprintf(stderr,"stwmaker: Operation erfolgreich abgeschlossen.\n\n"); ret=0; free(mem); free(array); } else { fprintf(stderr,"stwmaker: Nicht gengend Speicher vorhanden.\n\n"); ret=3; } } else { fprintf(stderr,"stwmaker: Fehler beim Lesen der Indexdatei.\n\n"); ret=2; } } else { fprintf(stderr,"usage: stwmaker [>ausgabedatei]\n\n"); ret=1; } return(ret); } int cmp2(char **a,char **b) { return(stricmp(*a,*b)); } int init_pointers(void) { int ret=FALSE; unsigned char *cp, *endadr; long currlines; maxlines=currlines=0L; array=0L; cp=mem; endadr=mem+len; while(cp=endadr) { ret=TRUE; lines=currlines; } return(ret); } int read_file(char *filename) { int fh, ret=FALSE; fh=open(filename,O_RDONLY); if(fh>0) { len=lseek(fh,0L,SEEK_END); lseek(fh,0L,SEEK_SET); if(len>0) { mem=malloc(len+2); if(mem) { if(read(fh,mem,len)==len) ret=TRUE; } } close(fh); } return(ret); }