ftp.nice.ch/pub/next/unix/audio/cmusic.bs.N.tar.gz#/src/cmusic/m.getfield.c

This is m.getfield.c in view mode; [Download] [Up]

#include <stdio.h>
#include "mm.head.h"

getfield(infile, string, iglist,  brklist, listfile)
 FILE *infile; char *string, *iglist, *brklist; FILE *listfile;
{
    int leading, c, cc; static int clevel = 0, qlevel = 0;
    static char lastc, realc = '\n';
    leading = 1;
    *string = NULL;
    while( (lastc=realc, realc=c=getc(infile)) != EOF){
/* produce listing file or verbose output if needed (neatify, if needed) */
	if(listfile){ 
	    if(lastc == ';' && c != '\n')fputc('\n',listfile);
	    if(c != '\t')fputc(c,listfile); else fputc(' ',listfile);
	    fflush(listfile);
	}
	if(Verbose){ 
	    if(lastc == ';' && c != '\n')fputc('\n',stderr);
	    fputc(c,stderr); 
	}
/* ignore lines which START with # */
	if(c == '#') {
	    if(lastc=='\n')
		while( (realc = c = getc(infile)) != '\n');
	    continue ;
	}

/* process quoted strings literally */
	if(!clevel && c == '"'){qlevel ^= 1; continue;}
	if(!clevel && qlevel){*string++ = c; leading = 0; continue;}
/* turn tabs and newlines into blanks */
	if(c == '\t')c = ' ';
	if(c == '\n')c = ' ';
/* ignore (possibly nested) comments between curly braces */
	if(c == '{'){clevel++; continue;}
	if(c == '}'){clevel--; continue;}
	if(clevel < 0){PROUT("**Unbalanced {}'s**\n",c); clevel = 0;}
	if(clevel > 0)continue;
/* ignore leading blanks */
	if(leading && c==' ')continue;
/* ignore characters on the ignore list */
	if(index(iglist,c))continue;
/* check for break characters */
	if(!index(brklist,c)){
	    *string++ = c; leading = 0; continue;
	} else {
	    cc = *string = NULL; 
/* watch out for blanks, tabs, newlines before break characters */
	    while(c==' ' || c=='\t' || c=='\n'){
		cc = c; 
		c = getc(infile);
	    }
	    if(!index(brklist,c)){ungetc(c,infile); c = cc;}
	     else realc = c;
	    if(cc != NULL){
		if(listfile){ 
		    if(c != '\t')fputc(c,listfile); else fputc(' ',listfile);
		    fflush(listfile);
		}
		if(Verbose)fputc(c,stderr);
	    }
	    return(c);
	}
    }
    if(clevel)PROUT("**Unbalanced {}'s at EOF**\n",c);
    if(qlevel)PROUT("**Unbalanced quotes at EOF**\n",c);
    return(EOF);
}

These are the contents of the former NiCE NeXT User Group NeXTSTEP/OpenStep software archive, currently hosted by Netfuture.ch.