home *** CD-ROM | disk | FTP | other *** search
- /*
- * lemalpha.c - text control
- *
- * copyright (c) by Alan W. Paeth, 1987. All rights reserved.
- */
-
- #include "lem.h"
-
- charadd(s, ch)
- char *s, ch;
- {
- int end;
- char str[2];
- str[0] = ch;
- str[1] = '\0';
- charshow(str);
- end = strlen(s);
- if (end < MAXCHAR-1)
- {
- s[end] = ch;
- s[end+1] = '\0';
- }
- }
-
- chardel(s,n)
- char *s;
- {
- int end;
- end = strlen(s)-n;
- if (end >= 0)
- {
- charunshow(n);
- s[end] = '\0';
- }
- }
-
- chardelall(s)
- char *s;
- {
- if (s) chardel(s, strlen(s));
- }
-
- char getstroke()
- {
- int ev, t;
- char ch;
- /*
- * get next alpha keystroke (null on other event)
- */
- do {
- ev = getevent(&t, &t, &t, &t, &ch);
- } while ((ev == NOEVT) || ((ev == CNTRL) && (ch == '\0')));
- if ((ev == ALPHA) || (ev == CNTRL)) return(ch);
- return('\0');
- }
-
- char *prompt(pstr)
- char *pstr;
- {
- char ch, pout[MAXCHAR], *rstr;
- pout[0] = '\0';
- strncpy(prompttext, pstr, MAXCHAR);
- msgclear();
- chardelall(line);
- charshow(prompttext);
- ch = '\0';
- while((ch != C(M)) && (ch != C(J)))
- {
- ch = getstroke();
- if (ch >= ' ') charadd(pout, ch);
- else if (ch == '\b') chardel(pout,1);
- }
- rstr = salloc(pout);
- chardelall(pout);
- chardelall(prompttext);
- return(rstr);
- }
-
- msgpost(s)
- char *s;
- {
- msgclear();
- strncpy(msgtext, s, MAXCHAR);
- charshow(msgtext);
- }
-
- msgclear()
- {
- chardelall(msgtext);
- }
-
- stringadd()
- {
- textadd(markx, marky, line);
- if (line && strlen(line))
- {
- int hgt;
- hgt = fontleading(gsize);
- markupdate(markx, MAX(marky-hgt, hgt));
- }
- chardelall(line);
- }
-
- fontheight(f)
- {
- return(lemfont[(f >= rclen) ? 1 : f].psize);
- }
-
- fontleading(f)
- {
- return((fontheight(f)*6+2)/5);
- }
-