home *** CD-ROM | disk | FTP | other *** search
- /*
- * Test file for the GNU regular expression package.
- * Edwin Hoogerbeets 18/07/89
- *
- * This file may be copied and distributed under the GNU Public
- * Licence. See the comment at the top of regex.c for details.
- *
- * Adapted from Elib by Jim Mackraz, mklib by Edwin Hoogerbeets, and the
- * GNU regular expression package by the Free Software Foundation.
- */
-
- #include "regex.h"
- #include <libraries/dos.h>
- #include <exec/memory.h>
-
- #define BUFSIZ 8*1024
-
- extern char *AllocMem();
- extern char *OpenLibrary();
-
- extern void searchfile();
-
- void puts(str)
- char *str;
- {
- Write(Output(),str,strlen(str));
- }
-
- char *inputbuffer;
- long inputcounter = -1, inputsize, eof;
-
- main (argc, argv)
- int argc;
- char **argv;
- {
- struct re_pattern_buffer buf;
- int index;
- long input;
-
- if ( argc < 2 || *argv[1] == '\0' ) {
- puts("Usage: ");
- puts(argv[0]);
- puts("regular_expression filename [...]\n");
- exit(1);
- }
-
- if ( (RegexBase =
- (struct RegexBase *) OpenLibrary("regex.library",0L)) == NULL) {
- puts("Could not open regex.library");
- exit(2);
- }
-
- inputbuffer = AllocMem(BUFSIZ,MEMF_PUBLIC|MEMF_CLEAR);
- re_initialize_buffer(&buf,__Upcase);
-
- re_compile_pattern(argv[1], strlen(argv[1]), &buf, RE_SYNTAX_GREP);
-
- if ( argc < 3 ) {
- input = Input();
- searchfile(input,&buf,"");
- } else {
- register int printnames = (argc - 2) > 1 ? 1 : 0;
- char name[256];
-
- index = 2;
-
- while ( index < argc ) {
- if ( !(input = Open(argv[index],MODE_OLDFILE)) ) {
- puts("Could not open ");
- puts(argv[index]);
- puts("\n");
- } else {
-
- if ( printnames ) {
- strcpy(name,argv[index]);
- strcat(name,": ");
- } else {
- name[0] = '\0';
- }
-
- inputcounter = -1;
- searchfile(input,&buf, name);
- Close(input);
- }
- ++index;
- }
- }
-
- FreeMem(inputbuffer,BUFSIZ);
-
- re_terminate_buffer(&buf);
- CloseLibrary(RegexBase);
- }
-
- long newbuffer(f)
- long f;
- {
- inputsize = Read(f,inputbuffer,BUFSIZ);
- inputcounter = 0;
-
- return( inputsize );
- }
-
- char
- getc(f)
- long f;
- {
- char result = inputbuffer[inputcounter++];
-
- if ( inputsize == 0 ) {
- return('\0');
- }
-
- if ( inputcounter >= inputsize ) {
- newbuffer(f);
- }
-
- return(result);
- }
-
- char *
- fgets(buf,len,f)
- char *buf;
- long len, f;
- {
- long counter = 0;
- char c;
-
- if ( inputcounter < 0 ) {
- if ( !newbuffer(f) ) {
- return(NULL);
- }
- }
-
- while ( (c = getc(f)) != '\0' && counter < len ) {
- buf[counter++] = c;
-
- if ( c == '\n' ) {
- if ( counter < len ) {
- buf[counter] = '\0';
- }
- return(buf);
- }
- }
-
- if ( c == '\0' ) {
- return(NULL);
- }
-
- if ( counter < len ) {
- buf[counter] = '\0';
- }
- return(buf);
- }
-
- void searchfile(f,buf,name)
- long f;
- struct re_pattern_buffer *buf;
- char *name;
- {
- char buffer[256];
- int result;
- /* struct re_registers foo; */
-
- while ( fgets(buffer,256L,f) != NULL ) {
- if ( (result = re_search(buf, buffer, strlen(buffer), 0L,
- strlen(buffer)-2, NULL)) >= 0 ) {
- puts(name);
- puts(buffer);
- }
- }
- }
-
- _abort()
- {
- puts("DON'T TOUCH THAT KEY, SILLY!");
- }
-
-
-
-
-
-