forked from VB6Hobbyst7/cgx
-
Notifications
You must be signed in to change notification settings - Fork 0
/
parser.c
88 lines (78 loc) · 1.76 KB
/
parser.c
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
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
#include <extUtil.h>
/* summiert keystrokes, wenn key= "RETURN" dann 1, sonst 0 */
/* record ist dann auszuwerten. */
int parser( char gkey, char *keystroke, int *curshft, int commandLineFlag)
{
int i,j,n;
char echo;
if (gkey == ( char )0xff0d) /* RETURN */
{
/* new-line, command ready */
if(!commandLineFlag) putchar('\n');
return(1);
}
else
{
i=strlen(keystroke)+*curshft;
if (gkey == ( char )0xff08) /* backspace */
{
if(!commandLineFlag) {
for(j=0; j<strlen(keystroke); j++)
{
/* go left */
echo=( char )0xff08;
putchar(echo);
}
for(j=0; j<strlen(keystroke); j++)
{
/* overwrite old command */
echo=' ';
putchar(echo);
}
for(j=0; j<strlen(keystroke); j++)
{
/* go left */
echo=( char )0xff08;
putchar(echo);
}
}
n=strlen(keystroke);
for (j=i-1; j<n; j++) keystroke[j]=keystroke[j+1];
if(!commandLineFlag) {
printf("%s",keystroke);
for(j=0; j<-*curshft; j++)
{
/* go left */
echo=( char )0xff08;
putchar(echo);
}
}
}
else
{
if(!commandLineFlag) {
for(j=0; j<strlen(keystroke); j++)
{
/* go left */
echo=( char )0xff08;
putchar(echo);
}
}
n=strlen(keystroke);
for (j=n; j>=i; j--) keystroke[j+1]=keystroke[j];
keystroke[i] = gkey;
if(!commandLineFlag) {
printf("%s",keystroke);
for(j=0; j<-*curshft; j++)
{
/* go left */
echo=( char )0xff08;
putchar(echo);
}
}
}
fflush(stdout);
}
DrawCommandLine(keystroke, strlen(keystroke)+*curshft);
return(0);
}