This is dump.c in view mode; [Download] [Up]
#ifndef lint static char Rcs_Id[] = "$Id: dump.c,v 1.14 1994/01/25 07:11:27 geoff Exp $"; #endif /* * dump.c - Ispell's dump mode * * This code originally resided in ispell.c, but was moved here to keep * file sizes smaller. * * Copyright 1992, 1993, Geoff Kuenning, Granada Hills, CA * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * 3. All modifications to the source code must be clearly marked as * such. Binary redistributions based on modified source code * must be clearly marked as modified versions in the documentation * and/or other materials provided with the distribution. * 4. All advertising materials mentioning features or use of this software * must display the following acknowledgment: * This product includes software developed by Geoff Kuenning and * other unpaid contributors. * 5. The name of Geoff Kuenning may not be used to endorse or promote * products derived from this software without specific prior * written permission. * * THIS SOFTWARE IS PROVIDED BY GEOFF KUENNING AND CONTRIBUTORS ``AS IS'' AND * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE * ARE DISCLAIMED. IN NO EVENT SHALL GEOFF KUENNING OR CONTRIBUTORS BE LIABLE * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. */ /* * $Log: dump.c,v $ * Revision 1.14 1994/01/25 07:11:27 geoff * Get rid of all old RCS log lines in preparation for the 3.1 release. * */ #include "config.h" #include "ispell.h" #include "proto.h" void dumpmode P ((void)); static void tbldump P ((struct flagent * flagp, int numflags)); static void entdump P ((struct flagent * flagp)); static void setdump P ((char * setp, int mask)); static void subsetdump P ((char * setp, int mask, int dumpval)); void dumpmode () { if (hashheader.flagmarker == '\\' || hashheader.flagmarker == '#' || hashheader.flagmarker == '>' || hashheader.flagmarker == ':' || hashheader.flagmarker == '-' || hashheader.flagmarker == ',' || hashheader.flagmarker == '[') /* ] */ (void) printf ("flagmarker \\%c\n", hashheader.flagmarker); else if (hashheader.flagmarker < ' ' || hashheader.flagmarker >= 0177) (void) printf ("flagmarker \\%3.3o\n", (unsigned int) hashheader.flagmarker & 0xFF); else (void) printf ("flagmarker %c\n", hashheader.flagmarker); if (numpflags) { (void) printf ("prefixes\n"); tbldump (pflaglist, numpflags); } if (numsflags) { (void) printf ("suffixes\n"); tbldump (sflaglist, numsflags); } } static void tbldump (flagp, numflags) /* Dump a flag table */ register struct flagent * flagp; /* First flag entry to dump */ register int numflags; /* Number of flags to dump */ { while (--numflags >= 0) entdump (flagp++); } static void entdump (flagp) /* Dump one flag entry */ register struct flagent * flagp; /* Flag entry to dump */ { register int cond; /* Condition number */ (void) printf (" flag %s%c: ", (flagp->flagflags & FF_CROSSPRODUCT) ? "*" : " ", BITTOCHAR (flagp->flagbit)); for (cond = 0; cond < flagp->numconds; cond++) { setdump (flagp->conds, 1 << cond); if (cond < flagp->numconds - 1) (void) putc (' ', stdout); } if (cond == 0) /* No conditions at all? */ (void) putc ('.', stdout); (void) printf ("\t> "); (void) putc ('\t', stdout); if (flagp->stripl) (void) printf ("-%s,", ichartosstr (flagp->strip, 1)); (void) printf ("%s\n", flagp->affl ? ichartosstr (flagp->affix, 1) : "-"); } static void setdump (setp, mask) /* Dump a set specification */ register char * setp; /* Set to be dumped */ register int mask; /* Mask for bit to be dumped */ { register int cnum; /* Next character's number */ register int firstnz; /* Number of first NZ character */ register int numnz; /* Number of NZ characters */ firstnz = numnz = 0; for (cnum = SET_SIZE; --cnum >= 0; ) { if (setp[cnum] & mask) { numnz++; firstnz = cnum; } } if (numnz == 1) (void) putc (firstnz, stdout); else if (numnz == SET_SIZE) (void) putc ('.', stdout); else if (numnz > SET_SIZE / 2) { (void) printf ("[^"); subsetdump (setp, mask, 0); (void) putc (']', stdout); } else { (void) putc ('[', stdout); subsetdump (setp, mask, mask); (void) putc (']', stdout); } } static void subsetdump (setp, mask, dumpval) /* Dump part of a set spec */ register char * setp; /* Set to be dumped */ register int mask; /* Mask for bit to be dumped */ register int dumpval; /* Value to be printed */ { register int cnum; /* Next character's number */ register int rangestart; /* Value starting a range */ for (cnum = 0; cnum < SET_SIZE; setp++, cnum++) { if (((*setp ^ dumpval) & mask) == 0) { for (rangestart = cnum; cnum < SET_SIZE; setp++, cnum++) { if ((*setp ^ dumpval) & mask) break; } if (cnum == rangestart + 1) (void) putc (rangestart, stdout); else if (cnum <= rangestart + 3) { while (rangestart < cnum) { (void) putc (rangestart, stdout); rangestart++; } } else (void) printf ("%c-%c", rangestart, cnum - 1); } } }
These are the contents of the former NiCE NeXT User Group NeXTSTEP/OpenStep software archive, currently hosted by Netfuture.ch.