Skip to content

Commit

Permalink
Initial portion of the code
Browse files Browse the repository at this point in the history
  • Loading branch information
Yurii Rashkovskii committed Apr 25, 2012
1 parent 34b487d commit 61d3465
Show file tree
Hide file tree
Showing 5 changed files with 105 additions and 0 deletions.
7 changes: 7 additions & 0 deletions .gitignore
@@ -0,0 +1,7 @@
CMakeCache.txt
CMakeFiles
Makefile
cmake_install.cmake
hypnotoad
clips
c_src/clp.*
19 changes: 19 additions & 0 deletions CMakeLists.txt
@@ -0,0 +1,19 @@
cmake_minimum_required (VERSION 2.8)
cmake_policy(SET CMP0015 OLD)
project (Hypnotoad)
aux_source_directory(c_src SRC)
aux_source_directory(deps/clips/core CLIPS_SRC)
set(MAIN_CLIPS_SRC ${CLIPS_SRC})
list(REMOVE_ITEM CLIPS_SRC deps/clips/core/main.c)
list(REMOVE_ITEM CLIPS_SRC deps/clips/core/userfunctions.c)
link_directories(deps/zeromq/src/.libs)
add_executable(clips ${MAIN_CLIPS_SRC})
add_executable(hypnotoad ${SRC} ${CLIPS_SRC})
target_link_libraries(hypnotoad libzmq.a)
include_directories("deps/clips/core" "deps/zeromq/include")

add_custom_command(OUTPUT deps/zeromq/src/.libs/libzmq.a
COMMAND ./autogen.sh
COMMAND ./configure
COMMAND make
WORKING_DIRECTORY deps/zeromq)
37 changes: 37 additions & 0 deletions c_src/main.c
@@ -0,0 +1,37 @@
#include <stdio.h>
#include "zmq.h"
#include "clips.h"

static void *zmq;

int main(int argc, char **argv) {
InitializeEnvironment();
IncrementGCLocks();
Load("src/main.clp");
void * module = FindDefmodule("Hypnotoad");
SetCurrentModule(module);

UserFunctions();

zmq = zmq_init(1);
void * sub = zmq_socket(zmq, ZMQ_SUB);
zmq_bind(sub, "tcp://*:5555");
zmq_setsockopt(sub, ZMQ_SUBSCRIBE, "", 0);

while (1) {
char * msg;
zmq_msg_t request;
zmq_msg_init (&request);
zmq_recv (sub, &request, 0);
msg = zmq_msg_data (&request);
LoadFactsFromString(msg, zmq_msg_size(&request));
Focus(module);
Run(-1);
zmq_msg_close (&request);
}


zmq_term(zmq);

DecrementGCLocks();
}
33 changes: 33 additions & 0 deletions c_src/user.c
@@ -0,0 +1,33 @@
#include "clips.h"

void UserFunctions(void);
void EnvUserFunctions(void *);

void * remote_retr_file()
{
DATA_OBJECT data;
RtnUnknown(1, &data);

char * filename = (char *) DOToString(data);

printf("Fetching %s\n", filename);

return filename;
}

void UserFunctions()
{
DefineFunction2("remote-retrieve-file",'s',PTIF remote_retr_file,"remote-retrieve-file","1s");
}

#if WIN_BTC
#pragma argsused
#endif
void EnvUserFunctions(
void *theEnv)
{
#if MAC_MCW || WIN_MCW || MAC_XCD
#pragma unused(theEnv)
#endif
}

9 changes: 9 additions & 0 deletions src/main.clp
@@ -0,0 +1,9 @@
(defmodule Hypnotoad)

(defrule load-constructs (require ?filename)
=>
(load (remote-retrieve-file ?filename)))

(defrule load-facts (include ?filename)
=>
(load-facts (remote-retrieve-file ?filename)))

0 comments on commit 61d3465

Please sign in to comment.