From mboxrd@z Thu Jan 1 00:00:00 1970 Path: news.gmane.org!not-for-mail From: "Jose Martin" Newsgroups: gmane.lisp.guile.user Subject: Clean Guile code from C program Date: Fri, 7 Mar 2008 13:02:33 -0500 (EST) Message-ID: <20080307180233.4CC038B31C@xprdmxin.myway.com> Reply-To: maitai02@excite.com NNTP-Posting-Host: lo.gmane.org Mime-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit X-Trace: ger.gmane.org 1204913122 3093 80.91.229.12 (7 Mar 2008 18:05:22 GMT) X-Complaints-To: usenet@ger.gmane.org NNTP-Posting-Date: Fri, 7 Mar 2008 18:05:22 +0000 (UTC) To: guile-user@gnu.org Original-X-From: guile-user-bounces+guile-user=m.gmane.org@gnu.org Fri Mar 07 19:05:31 2008 Return-path: Envelope-to: guile-user@m.gmane.org Original-Received: from lists.gnu.org ([199.232.76.165]) by lo.gmane.org with esmtp (Exim 4.50) id 1JXgw2-0004Mb-4f for guile-user@m.gmane.org; Fri, 07 Mar 2008 19:04:46 +0100 Original-Received: from localhost ([127.0.0.1] helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1JXgvU-00086n-Db for guile-user@m.gmane.org; Fri, 07 Mar 2008 13:04:12 -0500 Original-Received: from mailman by lists.gnu.org with tmda-scanned (Exim 4.43) id 1JXgvP-00085v-SG for guile-user@gnu.org; Fri, 07 Mar 2008 13:04:08 -0500 Original-Received: from exim by lists.gnu.org with spam-scanned (Exim 4.43) id 1JXgvN-00084R-Fm for guile-user@gnu.org; Fri, 07 Mar 2008 13:04:07 -0500 Original-Received: from [199.232.76.173] (helo=monty-python.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1JXgvN-00084G-7D for guile-user@gnu.org; Fri, 07 Mar 2008 13:04:05 -0500 Original-Received: from nn4.excitenetwork.com ([207.159.120.58] helo=excite.com) by monty-python.gnu.org with esmtp (Exim 4.60) (envelope-from ) id 1JXgvM-0003sx-P6 for guile-user@gnu.org; Fri, 07 Mar 2008 13:04:04 -0500 Original-Received: by xprdmxin.myway.com (Postfix, from userid 110) id 4CC038B31C; Fri, 7 Mar 2008 13:02:33 -0500 (EST) Original-Received: from [86.135.150.218] by xprdmailfe23.nwk.excite.com via HTTP; Fri, 07 Mar 2008 13:02:33 EST X-AntiAbuse: This header was added to track abuse, please include it with any abuse report X-AntiAbuse: ID = fc2233aa9b281b125602891fa7a225fb X-Sender: maitai02@excite.com X-Mailer: PHP X-detected-kernel: by monty-python.gnu.org: Linux 2.6? (barebone, rare!) X-BeenThere: guile-user@gnu.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: General Guile related discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Original-Sender: guile-user-bounces+guile-user=m.gmane.org@gnu.org Errors-To: guile-user-bounces+guile-user=m.gmane.org@gnu.org Xref: news.gmane.org gmane.lisp.guile.user:6446 Archived-At: Hi all, I need to use a program in C that is designed to be used in Guile. I'm not a Guile user myself so I don't know well how to remove the Guile code from the C program, so that I can run it without Guile (Please, don't be ofended for that ;) ). I looked at the program's code and it looks a bit difficult to change it, and I must say I'm a beginner in C. Could anyone give me the steps of the changes I'd need to remove Guile-dependent code from C code? The program has about 10 files, so here I'm pasting only one of the files. The code is open-source so I could share it if anyone wants to see the other files. I'd massively appreciate any help. Thanks, Jose -- ATTACHED CODE -- #include ... #define INFO contain #define TEXTMGRP(x) (SCM_NIMP(x) && SCM_CAR(x) == (SCM)scm_tc16_textmgr) #define TEXTMGR(x) ((TextFile*) SCM_CDR(x)) long scm_tc16_textmgr; SCM mark_textmgr(SCM obj) { SCM_SETGC8MARK(obj); return SCM_BOOL_F; } size_t free_textmgr(SCM obj) { if (TEXTMGR(obj)) { TEXTMGR(obj)->foreach(markref); TEXTMGR(obj)->hashtable()->foreach(decref); delete TEXTMGR(obj); } return 0; } int print_textmgr(SCM obj, SCM port, scm_print_state * pstate) { scm_puts("#filename(), port); scm_puts(">", port); return 1; } SCM textmgr2scm(TextFile* text) { SCM result; SCM_NEWCELL(result); SCM_SETCAR(result, (SCM) scm_tc16_textmgr); SCM_SETCDR(result, (SCM) text); return result; } SCM_PROC(s_open_text, "open-text", 1, 0, 0, open_text); SCM open_text(SCM name) { SCM txt; if (scm_string_p(name) != SCM_BOOL_T) scm_wrong_type_arg(s_open_text, 1, name); txt = textmgr2scm(new TextFile(SCM_CHARS(name))); TEXTMGR(txt)->foreach(markref); TEXTMGR(txt)->hashtable()->foreach(incref); return txt; } SCM_PROC(s_append_text, "append-text", 2, 0, 0, append_text); SCM append_text(SCM obj, SCM name) { if (!TEXTMGRP(obj)) scm_wrong_type_arg(s_append_text, 1, obj); if (!TEXTMGR(obj)) scm_misc_error(s_append_text, "Text object is empty", SCM_EOL); if (scm_string_p(name) != SCM_BOOL_T) scm_wrong_type_arg(s_append_text, 2, name); TEXTMGR(obj)->foreach(markref); TEXTMGR(obj)->hashtable()->foreach(decref); TEXTMGR(obj)->append(SCM_CHARS(name)); TEXTMGR(obj)->foreach(markref); TEXTMGR(obj)->hashtable()->foreach(incref); return obj; } SCM_PROC(s_close_text, "close-text", 1, 0, 0, close_text); SCM close_text(SCM obj) { if (!TEXTMGRP(obj)) scm_wrong_type_arg(s_close_text, 1, obj); if (TEXTMGR(obj)) { scm_gc(); TEXTMGR(obj)->foreach(markref); TEXTMGR(obj)->hashtable()->foreach(decref); TEXTMGR(obj)->hashtable()->removeif(delrefp); delete TEXTMGR(obj); SCM_SETCDR(obj, 0); } return SCM_UNSPECIFIED; } SCM_PROC(s_rewind_text, "rewind-text", 1, 0, 0, rewind_text); SCM rewind_text(SCM obj) { if (!TEXTMGRP(obj)) scm_wrong_type_arg(s_rewind_text, 1, obj); if (!TEXTMGR(obj)) scm_misc_error(s_rewind_text, "Text object is empty", SCM_EOL); TEXTMGR(obj)->rewind(); return SCM_UNSPECIFIED; } SCM_PROC(s_get_next_word, "get-next-word", 1, 0, 0, get_next_word); SCM get_next_word(SCM obj) { contain* cn; if (!TEXTMGRP(obj)) scm_wrong_type_arg(s_get_next_word, 1, obj); if (!TEXTMGR(obj)) scm_misc_error(s_get_next_word, "Text object is empty", SCM_EOL); cn = TEXTMGR(obj)->getnext(); if (cn) return cn->content; else return SCM_BOOL_F; } SCM_PROC(s_get_word, "get-word", 2, 0, 0, get_word); SCM get_word(SCM obj, SCM n) { contain* cn; if (!TEXTMGRP(obj)) scm_wrong_type_arg(s_get_word, 1, obj); if (!TEXTMGR(obj)) scm_misc_error(s_get_word, "Text object is empty", SCM_EOL); if (scm_integer_p(n) != SCM_BOOL_T) scm_wrong_type_arg(s_get_word, 2, n); cn = TEXTMGR(obj)->get(gh_scm2int(n)); if (cn) return cn->content; else return SCM_BOOL_F; } SCM_PROC(s_scramble_text, "scramble-text", 1, 0, 0, scramble_text); SCM scramble_text(SCM obj) { if (!TEXTMGRP(obj)) scm_wrong_type_arg(s_scramble_text, 1, obj); if (!TEXTMGR(obj)) scm_misc_error(s_scramble_text, "Text object is empty", SCM_EOL); return textmgr2scm(TEXTMGR(obj)->scramble()); } static SCM currentproc = 0; void iterproc(contain* cn) { gh_call1(currentproc, cn->content); } SCM_PROC(s_for_each_word, "for-each-word", 2, 0, 0, for_each_word); SCM for_each_word(SCM obj, SCM proc) { SCM lastproc = currentproc; if (!TEXTMGRP(obj)) scm_wrong_type_arg(s_for_each_word, 1, obj); if (!TEXTMGR(obj)) scm_misc_error(s_for_each_word, "Text object is empty", SCM_EOL); currentproc = proc; TEXTMGR(obj)->foreach(iterproc); currentproc = lastproc; return SCM_UNSPECIFIED; } SCM_PROC(s_for_each_unique_word, "for-each-unique-word", 1, 0, 0, for_each_unique_word); SCM for_each_unique_word(SCM proc) { SCM lastproc = currentproc; currentproc = proc; TextFile::table.foreach(iterproc); currentproc = lastproc; return SCM_UNSPECIFIED; } SCM_PROC(s_lookup_word, "lookup-word", 1, 0, 0, lookup_word); SCM lookup_word(SCM obj) { contain* cn; if (scm_string_p(obj) != SCM_BOOL_T) scm_wrong_type_arg(s_lookup_word, 1, obj); cn = TextFile::table.get(SCM_CHARS(obj)); if (cn) return cn->content; else return SCM_BOOL_F; } SCM_PROC(s_create_word, "create-word", 0, 0, 1, create_word); SCM create_word(SCM args) { SCM obj; contain* cn; if (scm_ilength(args) < 1) scm_wrong_num_args(scm_makfrom0str(s_create_word)); obj = SCM_CAR(args); if (scm_string_p(obj) != SCM_BOOL_T) scm_wrong_type_arg(s_create_word, 1, obj); cn = TextFile::table.insert(SCM_CHARS(obj)); cn->refcount += 2; SCM_SETCDR(cn->content, SCM_CDR(args)); return cn->content; } SCM_PROC(s_check_text_sections, "check-text-sections", 1, 0, 0, check_text_sections); SCM check_text_sections(SCM tag) { if (tag == SCM_BOOL_F) { TextFile::CheckNewline = 0; } else if (tag == SCM_BOOL_F) { TextFile::CheckNewline = 1; } else if (scm_string_p(tag) == SCM_BOOL_T) { TextFile::CheckNewline = 1; TextFile::CheckNewlineResult = strcpy(new char[strlen(SCM_CHARS(tag))], SCM_CHARS(tag)); } else scm_wrong_type_arg(s_check_text_sections, 1, tag); return SCM_UNSPECIFIED; } static SCM globalport; void csave(contain* cn) { scm_write(cn->content, globalport); scm_newline(globalport); } SCM cread() { SCM res; res = scm_read(globalport); if (res == SCM_EOF_VAL || !SCM_CONSP(res) || scm_string_p(SCM_CAR(res)) != SCM_BOOL_T) return SCM_BOOL_F; else return res; } SCM_PROC(s_export_words, "export-words", 1, 0, 0, export_words); SCM export_words(SCM obj) { if (scm_string_p(obj) != SCM_BOOL_T) scm_wrong_type_arg(s_export_words, 1, obj); globalport = scm_open_file(obj, scm_makfrom0str("w")); scm_protect_object(globalport); TextFile::table.foreach(csave); scm_close_port(globalport); scm_unprotect_object(globalport); return SCM_UNSPECIFIED; } SCM_PROC(s_import_words, "import-words", 1, 0, 0, import_words); SCM import_words(SCM obj) { SCM ele; if (scm_string_p(obj) != SCM_BOOL_T) scm_wrong_type_arg(s_import_words, 1, obj); globalport = scm_open_file(obj, scm_makfrom0str("r")); scm_protect_object(globalport); while ((ele = cread()) != SCM_BOOL_F) SCM_SETCDR(TextFile::table.insert(SCM_CHARS(SCM_CAR(ele)))->content, SCM_CDR(ele)); scm_close_port(globalport); scm_unprotect_object(globalport); return SCM_UNSPECIFIED; } void init_gltext() { scm_tc16_textmgr = scm_make_smob_type("textmgr", 0); scm_set_smob_mark(scm_tc16_textmgr, mark_textmgr); scm_set_smob_free(scm_tc16_textmgr, free_textmgr); scm_set_smob_print(scm_tc16_textmgr, print_textmgr); #include "gltext.x" } ------------------------------------------------------------------------------------- #include ... void main2(int argc, char** argv) { ... scm_eval_0str("(define-module (guile) :use-module (ice-9 readline))"); scm_eval_0str("(define-module (guile-user) :use-module (ice-9 readline))"); scm_eval_0str("(activate-readline)"); scm_eval_0str("(set-repl-prompt! \"gsdm> \")"); scm_shell (argc, argv); } int main(int argc, char** argv) { gh_enter(argc, argv, main2); return 0; } _______________________________________________ Join Excite! - http://www.excite.com The most personalized portal on the Web!