This is grab_defs.c in view mode; [Download] [Up]
/* Copyright (C) 1994 W. Schelter This file is part of GNU Common Lisp, herein referred to as GCL GCL is free software; you can redistribute it and/or modify it under the terms of the GNU LIBRARY GENERAL PUBLIC LICENSE as published by the Free Software Foundation; either version 2, or (at your option) any later version. GCL 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 Library General Public License for more details. */ #include <stdio.h> /* recognize \nDEF ......... ") and output it to stdout [ie '")' is a two character sequence which ends the def recognize \nDO_ [^\n]\n and output it to stdout Thus the DEF's MUST contain a doc string as last component. */ int pos = 0; #define GETC(x) (pos++,getc(x)) read_some(buf,n,start_ch,copy) /* if copy is not 0 then copy characters to stdout while scanning to find start_ch. When you find it, read n characters into buf, return the number of characters read into buf, but these characters MUST be free of start_ch. */ char *buf; int n,start_ch,copy; { int ch; int prev = 0; while (1) { ch =GETC(stdin); if (ch == EOF) return -1; if (copy) {putc(ch,stdout); if (prev == '\n' && ch == '{') { fprintf(stderr,"Error(at char %d):found \\n{ inside section to copy\n",pos) ; exit(1);} prev = ch; } AGAIN: if (ch == start_ch) { int i = 0; while (i < n) { ch = GETC(stdin); if (ch == EOF) return i; if (copy) {putc(ch,stdout); if (prev == '\n' && ch == '{') { fprintf(stderr,"Error(at char %d):found \\n{ inside section to copy",pos) ; exit(1);} prev = ch; } if (ch == start_ch) goto AGAIN; buf[i++] = ch; } return i; }}} main() { int ch,ch1; char buf[20]; while (3==read_some(buf,3,'\n',0)) { buf[3] = 0; if (strcmp(buf,"DEF") ==0) { printf("\n%s",buf); while(1==read_some(buf,1,'\"',1)) { if (buf[0] == ')') break; }} if (strcmp(buf,"DO_") ==0) {printf("\n%s",buf); read_some(buf,0,'\n',1); ungetc('\n',stdin); } } exit(0); }
These are the contents of the former NiCE NeXT User Group NeXTSTEP/OpenStep software archive, currently hosted by Netfuture.ch.