/* Autoconf patching by David Hedbor, neotron@lysator.liu.se */
/*********************************************************************/
/* file: files.c - funtions for logfile and reading/writing comfiles */
/*                             TINTIN + +                            */
/*          (T)he K(I)cki(N) (T)ickin D(I)kumud Clie(N)t             */
/*                     coded by peter unold 1992                     */
/*                    New code by Bill Reiss 1993                    */
/*********************************************************************/

/* file @@@added -- perry */

#ifdef HAVE_STRING_H
#include <string.h>
#else
#ifdef HAVE_STRINGS_H
#include <strings.h>
#endif
#endif
#include "tintin.h"

int mygets(buf, size, fp)
    char *buf;
    int size;
    FILE *fp;
{
	char *ptr = buf;
	char c;
	int cmt, brace;

	cmt = FALSE;
	brace = 0;

	do {
		c = getc(fp);
	} while (isspace(c));

	if (c == EOF)
		return 0;

	while (1) {
		switch (c) {
		case '{':
			*ptr++ = c;
			brace++;
			break;
		case '}':
			*ptr++ = c;
			brace--;
			break;
		case '/':
			if ((c = getc(fp)) == '*') {
				while (1) {
					if ((c = getc(fp)) == '*') {
						if ((c = getc(fp)) == '/')
							break;
					}
					if (c == EOF) {
						*ptr++ = '\0';
						return 1;
					}
				}
			}
			else {
				*ptr++ = '/';
				ungetc(c, fp);
			}
			break;
		case '\\':
			switch ((c = getc(fp))) {
			case '[':
				*ptr++ = '\033';
				break;
			default:
				*ptr++ = '\\';
				ungetc(c, fp);
				break;
			}
			break;
		case '\n':
		case '\r':
			if (brace <= 0) {
				*ptr++ = '\0';
				return 1;
			}
			do {
				c = getc(fp);
			} while(isspace(c));
			ungetc(c, fp);
			break;
		case '\0':
			*ptr++ = c;
			return 1;
		case EOF:
			*ptr++ = '\0';
			return 1;
		default:
			*ptr++ = c;
			break;
		}
		if (ptr - buf >= size)
			return 1;
		c = getc(fp);
	}

	return 0;
}