add scratch

This commit is contained in:
Sunrim KIM (keen) 2014-08-07 16:35:33 +09:00
parent 13eb47046e
commit 6b9a7788e1
5 changed files with 108 additions and 7 deletions

View File

@ -0,0 +1,19 @@
# readline
set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${PROJECT_SOURCE_DIR}/contrib/10.readline/cmake/")
find_package(Libedit)
find_package(Libedit)
if (Libedit_FOUND)
add_definitions(${Libedit_DEFINITIONS} -DPIC_READLINE_FOUND=1)
include_directories(${Libedit_INCLUDE_DIR})
file(GLOB PICRIN_READLINE_SOURCES ${PROJECT_SOURCE_DIR}/contrib/10.readline/src/*.c)
list(APPEND PICRIN_CONTRIB_INITS readline)
list(APPEND PICRIN_CONTRIB_LIBRARIES ${Libedit_LIBRARIES})
list(APPEND PICRIN_CONTRIB_SOURCES ${PICRIN_READLINE_SOURCES})
# add_custom_target(test-readline for test in ${PROJECT_SOURCE_DIR}/contrib/10.regexp/t/*.scm \; do bin/picrin "$$test" \; done DEPENDS repl)
# set(CONTRIB_TESTS ${CONTRIB_TESTS} test-readline)
endif()

View File

@ -0,0 +1,74 @@
/*
cc -g test.c -o test -ledit -ltermcap
*/
/* This will include all our libedit functions. If you use C++ don't
forget to use the C++ extern "C" to get it to compile.
*/
#include <editline/readline.h>
#include <editline/history.h>
#include <histedit.h>
#include "picrin.h"
#include "picrin/string.h"
#include "picrin/port.h"
static pic_value
pic_rl_readline(pic_state *pic)
{
char *prompt, *result;
pic_get_args(pic, "z", &prompt);
result = readline(prompt);
if(result)
return pic_obj_value(pic_str_new_cstr(pic, result));
else
return pic_eof_object();
}
static pic_value
pic_rl_add_history(pic_state *pic)
{
char *line;
pic_get_args(pic, "z", &line);
add_history(line);
return pic_undef_value();
}
static pic_value
pic_rl_clear_history(pic_state *pic)
{
pic_get_args(pic, "");
clear_history();
return pic_undef_value();
}
static pic_value
pic_rl_remove_history(pic_state *pic)
{
int line;
pic_get_args(pic, "i", &line);
remove_history(line);
return pic_undef_value();
}
void
pic_init_readline(pic_state *pic){
using_history();
pic_deflibrary (pic, "(picrin readline)") {
pic_defun(pic, "readline", pic_rl_readline);
pic_defun(pic, "add-history", pic_rl_add_history);
pic_defun(pic, "clear-history", pic_rl_clear_history);
pic_defun(pic, "remove-history", pic_rl_remove_history);
}
}

View File

@ -0,0 +1,15 @@
(import (scheme base)
(scheme read)
(scheme eval)
(scheme write)
(picrin readline))
(let loop ((n 1))
(let ((input (readline "> ")))
(if (eof-object? input)
(newline)
(begin
(add-history input)
(write (eval (read (open-input-string input)) '(picrin user)))
(newline)
(loop 1)))))

View File

@ -1,12 +1,5 @@
list(APPEND REPL_LIBRARIES picrin)
find_package(Libedit)
if (Libedit_FOUND)
include_directories(${Libedit_INCLUDE_DIRS})
add_definitions(${Libedit_DEFINITIONS} -DPIC_READLINE_FOUND=1)
list(APPEND REPL_LIBRARIES ${Libedit_LIBRARIES})
endif()
# build
add_executable(repl tools/main.c)
set_target_properties(repl PROPERTIES OUTPUT_NAME picrin)