develooper Front page | perl.cvs.parrot | Postings from December 2008

[svn:parrot] r33718 - trunk/src/pmc

From:
allison
Date:
December 9, 2008 10:23
Subject:
[svn:parrot] r33718 - trunk/src/pmc
Message ID:
20081209182315.68BEFCB9AF@x12.develooper.com
Author: allison
Date: Tue Dec  9 10:23:14 2008
New Revision: 33718

Modified:
   trunk/src/pmc/filehandle.pmc

Log:
[I/O] Adding an interactive readline method.


Modified: trunk/src/pmc/filehandle.pmc
==============================================================================
--- trunk/src/pmc/filehandle.pmc	(original)
+++ trunk/src/pmc/filehandle.pmc	Tue Dec  9 10:23:14 2008
@@ -21,6 +21,17 @@
 #include "parrot/parrot.h"
 #include "../src/io/io_private.h"
 
+#ifdef PARROT_HAS_READLINE
+#ifdef __cplusplus
+extern "C" {
+#endif
+    char *readline(const char *);
+    void add_history(const char*);
+#ifdef __cplusplus
+}
+#endif
+#endif
+
 
 pmclass FileHandle need_ext {
     ATTR INTVAL flags;                /* Filehandle flags             */
@@ -267,6 +278,36 @@
 
 /*
 
+=item C<METHOD readline_interactive(STRING *prompt)>
+
+Read a line from the filehandle and return it in a string.
+
+=cut
+
+*/
+
+    METHOD readline_interactive(STRING *prompt :optional, INTVAL got_prompt :opt_flag) {
+        STRING *string_result;
+#ifdef PARROT_HAS_READLINE
+        char * const r = readline(got_prompt ? prompt->strstart : NULL);
+
+        if (r) {
+            if (*r)
+                add_history(r);
+
+            string_result = string_from_cstring(INTERP, r, 0);
+            mem_sys_free(r);
+            RETURN(STRING *string_result);
+        }
+#endif
+
+        string_result = CONST_STRING(INTERP, "");
+
+        RETURN(STRING *string_result);
+    }
+
+/*
+
 =item METHOD readall(STRING *name);
 
 Read the entire contents of a file named I<name> into a Parrot string. On a



nntp.perl.org: Perl Programming lists via nntp and http.
Comments to Ask Bjørn Hansen at ask@perl.org | Group listing | About