This is search.m in view mode; [Download] [Up]
/* -*- objective-c -*- */ /* Webster Access, a program to use NeXT online Webster dictionary. Copyright (C) 1994 Benoit Grange, ben@fizz.fdn.org 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. */ #import <libc.h> #import "daemon.h" #import "utils.h" #import "commands.h" #import "search.h" #import "config.h" #import "WebsterVolume.h" #import "WebsterWord.h" static WebsterDictionary* dico = NULL; static WebsterThesaurus* thesaurus = NULL; static WebsterVolume* currentVolume = NULL; short whichVolume = useDictionary; int initSearch() { WebsterVolume** v = (whichVolume == useThesaurus)? (WebsterVolume**)&thesaurus: (WebsterVolume**)&dico; currentVolume = *v; if (!currentVolume) { if (whichVolume == useThesaurus) currentVolume = [[WebsterThesaurus alloc] initFromFile: (dictionaryFileName)?thesaurusFileName: "/NextLibrary/References/Webster-Thesaurus/Thesaurus"]; else currentVolume = [[WebsterDictionary alloc] initFromFile: (dictionaryFileName)?dictionaryFileName: "/NextLibrary/References/Webster-Dictionary/Dictionary"]; if (!currentVolume) return -1; *v = currentVolume; } return 0; } void processDefine(char* args) /* Define the following word */ { WebsterWord* word; initSearch(); word = [currentVolume defineWord: args]; if (word) { char* text; int length; if ([word outputDefinitionAs: "ascii" result: &text length: &length]) { fprintf(clientW, "DEFINITION 0\n"); fwrite(text, 1, length, clientW); vm_deallocate(task_self(), (vm_address_t)text, (vm_size_t)length); fputc(0200, clientW); } else { fprintf(clientW, "%sDEFINE FAILED\n", (mode==normalMode)?"":"590 "); } [word free]; } else { fprintf(clientW, "%sSPELLING 0\n", (mode==normalMode)?"":"590 "); } } void processSpell(char* args) /* Define the following word */ { WebsterWord* word; initSearch(); word = [currentVolume defineWord: args]; fprintf(clientW, "SPELLING %d\n", (word)?1:0); [word free]; } void processComplete(char* args) { List* l; initSearch(); // A maxCount is included for speed sake // This avoids going thru the most of the index to complete 'e' if (l = [currentVolume completeWord: args maxCount: 16]) { if ([l count] == 1) fprintf(clientW, "COMPLETION %s\n", [[l objectAt: 0] word]); else fprintf(clientW, "AMBIGUOUS %d\n", [l count]); [l freeObjects]; [l free]; } else fprintf(clientW, "AMBIGUOUS 0\n"); } void processEndings(char *args) { List* l; initSearch(); if (l = [currentVolume completeWord: args]) { int i; fprintf(clientW, "MATCHS %d\n", [l count]); for(i=0; i<[l count]; i++) { fprintf(clientW, "%s\n", [[l objectAt: i] word]); } fputc(0200, clientW); [l freeObjects]; [l free]; } else fprintf(clientW, "MATCHS 0\n"); }
These are the contents of the former NiCE NeXT User Group NeXTSTEP/OpenStep software archive, currently hosted by Netfuture.ch.