OSDN Git Service

現在までのソースをコミット。
[chnosproject/CHNOSProject.git] / CHNOSProject / AI002 / AI002 / think.c
1 //
2 //  think.c
3 //  AI002
4 //
5 //  Created by 西田 耀 on 13/01/01.
6 //  Copyright (c) 2013年 Hikaru Nishida. All rights reserved.
7 //
8
9 #include "core.h"
10
11 void AI_ThinkMain(void)
12 {
13     char line[AI_MAX_STRINGLENGTH];
14     int i, j, k;
15     AI_Array *separated, *meanlist;
16     int passthink;
17     
18     line[0] = '\0';
19     separated = AI_Array_Initialize();
20
21     
22     for(;;){
23         passthink = False;
24         AI_ReadInput(line, sizeof(line), stdin);
25         
26         if(line[0] == ':' && line[1] == ':'){
27             //システムコマンド解釈
28             passthink = True;
29             AI_Array_GetSeparatedStringByArray(&separated, &AI_SystemStringList, &line[2]);
30             if(AI_String_CompareString_Strict((const char *)AI_Array_GetPointerByIndex(separated, 0), "info")){
31                 AI_Command_System_info(separated);
32             } else if(AI_String_CompareString_Strict((const char *)AI_Array_GetPointerByIndex(separated, 0), "setmode")){
33                 AI_Command_System_setmode(separated);
34             } else if(AI_String_CompareString_Strict((const char *)AI_Array_GetPointerByIndex(separated, 0), "exit")){
35                 return;
36             } else if(AI_String_CompareString_Strict((const char *)AI_Array_GetPointerByIndex(separated, 0), "save")){
37                 AI_Memory_SaveMemory((const char *)AI_Array_GetPointerByIndex(separated, 2));
38             } else{
39                 passthink = False;
40             }
41             AI_Array_FreePointer(separated);
42             AI_Array_Free(&separated);
43         }
44         if(!passthink){
45             AI_Think_GetSeparatedStringByMemory(&separated, line);
46             switch(AI_MainMemory.mode){
47                 case 0:
48                     AI_Speak("mode 0\nInput:");
49                     j = AI_Array_GetNumberOfTags(separated);
50                     for(i = 0; i < j; i++){
51                         printf("%s(0x%08X) ", AI_Array_GetPointerByIndex(separated, i), AI_Array_GetDataIDByIndex(separated, i));
52                     }
53                     printf("\n");
54                     meanlist = AI_Memory_Expression_GetMeanFromSeparatedString(separated);
55                     if(AI_Array_GetIndexByDataID(meanlist, AI_SYSDATAID_M_DEFINE) != AI_ARRAY_INDEX_NOTFOUND){
56                         AI_Speak("OK.\n");
57                     } else{
58                         AI_Speak("BAD.\n");
59                     }
60                     AI_Array_Free(&meanlist);
61                     break;
62                 case 1:
63                     k = (AI_String_GetLength(line) % 10) + 1;
64                     AI_Speak("");
65                     for(j = 0; j < k; j++){
66                         i = rand() % AI_Array_GetNumberOfTags(AI_MainMemory.list_word);
67                         printf("%s ", AI_Array_GetPointerByIndex(AI_MainMemory.list_word, i));
68                     }
69                     printf("\n");
70                     break;
71                 default:
72                     AI_Speak("default\n");
73                     break;
74             }
75             AI_Array_FreePointer(separated);
76             AI_Array_Free(&separated);
77         }
78     }
79     
80     return;
81 }
82
83 int AI_Think_GetSeparatedStringByMemory(AI_Array **separated, const char s[])
84 {
85     return AI_Array_GetSeparatedStringByArray(separated, AI_MainMemory.list_word, s);
86 }
87
88