00001
00002
00003 #include <stdio.h>
00004 #include <libicl.h>
00005 #include <liboaa.h>
00006
00007 #define AGENT_NAME "AddAgent_C"
00008
00009 int add_callback(ICLTerm* goal, ICLTerm* params, ICLTerm* solutions);
00010 int setup_oaa_connection(int argc, char *argv[]);
00011
00012 int main(int argc, char *argv[]) {
00013
00014
00015 oaa_Init(argc, argv);
00016
00017
00018
00019 if (!setup_oaa_connection(argc, argv)) {
00020 printf("Could not setup OAA connections...exiting.\n");
00021 return EXIT_FAILURE;
00022 }
00023
00024
00025
00026 oaa_MainLoop(TRUE);
00027
00028 return EXIT_SUCCESS;
00029 }
00030
00038 int setup_oaa_connection(int argc, char *argv[]) {
00039 ICLTerm* mySolvablesAsList = NULL;
00040
00041 if (!oaa_SetupCommunication(AGENT_NAME)) {
00042 printf("Could not connect\n");
00043 return FALSE;
00044 }
00045
00046
00047
00048
00049
00050
00051 mySolvablesAsList
00052 = icl_NewTermFromData(
00053 "[solvable(add(Addend1, Addend2, Sum), [callback(add)])]",
00054 55);
00055
00056
00057
00058 if (!oaa_Register("parent", AGENT_NAME, mySolvablesAsList)) {
00059 printf("Could not register\n");
00060 return FALSE;
00061 }
00062
00063
00064 if (!oaa_RegisterCallback("add", add_callback)) {
00065 printf("Could not register add callback\n");
00066 return FALSE;
00067 }
00068
00069
00070 icl_Free(mySolvablesAsList);
00071
00072 return TRUE;
00073 }
00074
00084 int add_callback(ICLTerm* goal,
00085 ICLTerm* params,
00086 ICLTerm* solutions) {
00087
00088
00089
00090
00091 ICLTerm *Addend1 = icl_CopyTerm(icl_NthTerm(goal, 1));
00092
00093
00094 ICLTerm *Addend2 = icl_CopyTerm(icl_NthTerm(goal, 2));
00095
00096
00097 int addend1 = icl_Int(Addend1);
00098 int addend2 = icl_Int(Addend2);
00099 int sum = addend1 + addend2;
00100
00101
00102 ICLTerm *Sum = icl_NewInt(sum);
00103
00104
00105 ICLTerm *solution = icl_NewStruct("add", 3, Addend1, Addend2, Sum);
00106
00107
00108
00109 return icl_AddToList(solutions, solution, TRUE);
00110 }
00111
00112
00113