-
Notifications
You must be signed in to change notification settings - Fork 2
/
Copy pathkeyPerintah.h
76 lines (55 loc) · 1.94 KB
/
keyPerintah.h
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
// Bahasa Anak Indonesia untuk Komputer - BAIK
// Copyright Haris Hasanudin - 2005 - 2011
//
// Kupersembahkan untuk istriku tercinta Masako, anakku tersayang Takumi
// dan Tomoki serta seluruh putra putri Indonesia
//2010/12/13
void keyPerintah ()
{
char ident[MAX_IDENT_LEN];
VAL_LABEL valdat;
// var list for class params
struct node_list tmpnode;
char class_tmpvar[MAX_STRING_LEN];
memset(&valdat, '\0', sizeof(valdat));
memset(&ident, '\0', sizeof(ident));
memset(&tmpnode, '\0', sizeof(tmpnode));
memset(&class_tmpvar, '\0', sizeof(class_tmpvar));
getlex();
// printf(" DEBUG: PERINTAH lex.type %d\n", lex.type);
switch( lex.type )
{
case TYPE_STR:
system( lex.detail.string );
break;
case TYPE_OBJECT:
checkObjectValidation(lex.detail.object_str);
case TYPE_IDENT:
case TYPE_NUM:
//printf("curr class : %s\n", currentClass);
//printf("datatype : %d\n", valdat.datatype);
//printf("\nval : %d\n", valdat.val);
//printf("str : %s\n", valdat.str);
if(currentClass != NULL && strlen(currentClass) > 0) {
sprintf(class_tmpvar, "%s->%s", currentClass, lex.detail.string);
//printf("construct class var: %s\n", class_tmpvar);
valdat = ValLabel( class_tmpvar, sub_deep, valdat, VAL_FLAG_SEARCH_R );
} else {
ungetlex();
valdat = expression();
}
if(valdat.str != '\0' && strlen(valdat.str) > 0) {
#ifdef WINDOWS
WinExec((const char*)valdat.str,SW_HIDE);
#else
system( valdat.str );
#endif
}
break;
default:
Error("kode perintah PERINTAH salah");
}
getlex();
fflush( stdout );
ungetlex();
}