aboutsummaryrefslogtreecommitdiff
path: root/6.5/word.c
blob: 045eaf73398f291c45527c402e7b6c03021f0c64 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
// #include <stdio.h>
// #include <stdlib.h>
// #include <stdint.h>
#include <ctype.h>
// #include <string.h>
// #include <error.h>
// #include <errno.h>
#include "getch.h"
#include "word.h"

// #define MAXBUFF 100
//
// uint32_t top;
// char *wstack[MAXBUFF];

char getword(char *word, int lim)
{
	char *w = word;

	// if (top > 0)
	// 	return *wstack[--top];

	while (isblank(*w = getch()))
		;
	
	if (isalpha(*w)) {
		while ((isalnum(*++w = getch()) || *w == '_') && --lim > 0)
			;
		ungetch(*w--);
	} else if (*w == '#') {
		--lim;
		do {
			*++w = getch();
		} while (isalpha(*w) && --lim > 0);
		ungetch(*w--);
	}

	*++w = '\0';
	return word[0];
}
//
// void ungetword(char *word)
// {
// 	if (top < MAXBUFF) {
// 		if ((wstack[top++] = strdup(word)) == NULL)
// 			error(EXIT_FAILURE, ENOBUFS, "ungetword");
// 	} else {
// 		error(EXIT_FAILURE, ENOBUFS, "ungetword");
// 	}
// }
//
// void wordfree(void)
// {
// 	uint32_t i;
//
// 	for (i = 0; i < top; ++i)
// 		free(wstack[i]);
// }