rev 683 - in trunk: . pr/test src
SVN User <[email protected]> Wed, 30 Jun 2004 17:01:23 -0400
| Newsgroups | gmane.comp.lang.prothon.cvs |
|---|---|
| Message-ID | <[email protected]> |
Author: mark
Date: 2004-06-30 17:01:20 -0400 (Wed, 30 Jun 2004)
New Revision: 683
Modified:
trunk/STATUS.txt
trunk/pr/test/test.pr
trunk/src/builtins-file.c
Log:
added StdIn, StdOut, StdErr objects, untested
Modified: trunk/STATUS.txt
===================================================================
--- trunk/STATUS.txt 2004-06-30 08:34:37 UTC (rev 682)
+++ trunk/STATUS.txt 2004-06-30 21:01:20 UTC (rev 683)
@@ -4,6 +4,8 @@
--- stdin, stdout, stderr as text files
--- change file.setStdout to property
+--- getAttr(name), setAttr(name, value), delAttr(name)
+
--- thread keyword for param improvement?
--- OSThread, Thread, and Gate
http://www.prothon.org/pipermail/prothon-user/2004-June/002124.html
@@ -52,8 +54,6 @@
--- GNU message catalog _"abc" strings
--- change all strings to resource file
---- getAttr(name), setAttr(name, value), delAttr(name)
-
--- add conditional expression "if C then x else y"
--- pretty print
@@ -125,6 +125,8 @@
----------------------- NON_CODING TO-DO ------------------------
+--- preps
+
--- apt-get
http://www.prothon.org/pipermail/prothon-user/2004-June/002450.html
Modified: trunk/pr/test/test.pr
===================================================================
--- trunk/pr/test/test.pr 2004-06-30 08:34:37 UTC (rev 682)
+++ trunk/pr/test/test.pr 2004-06-30 21:01:20 UTC (rev 683)
@@ -1,3 +1,5 @@
#!/usr/bin/env prothon
+print StdOut
+
print File.stdin.read()
\ No newline at end of file
Modified: trunk/src/builtins-file.c
===================================================================
--- trunk/src/builtins-file.c 2004-06-30 08:34:37 UTC (rev 682)
+++ trunk/src/builtins-file.c 2004-06-30 21:01:20 UTC (rev 683)
@@ -86,6 +86,9 @@
MODULE_DECLARE(TextFile);
MODULE_DECLARE(TextFileGen);
MODULE_DECLARE(TempTextFile);
+MODULE_DECLARE(StdIn);
+MODULE_DECLARE(StdOut);
+MODULE_DECLARE(StdErr);
//*************************** set_file_obj_data *******************************
static void set_file_obj_data( isp ist, obj_p file_obj, obj_p filename, obj_p mode,
@@ -1179,45 +1182,7 @@
#define __STDOUT 1
#define __STDERR 2
-static obj_p __open_std_file(int type, apr_pool_t *subpool)
-{
- obj_p mode, file;
- apr_file_t *fp;
- apr_status_t aprerr;
- apr_int32_t flags;
- switch (type) {
- case __STDIN:
- aprerr = apr_file_open_stdin(&fp, subpool);
- mode = NEW_STRING("r");
- file = NEW_STRING("<stdin>");
- flags = APR_READ;
- break;
-
- case __STDOUT:
- aprerr = apr_file_open_stdout(&fp, subpool);
- file = NEW_STRING("<stdout>");
- mode = NEW_STRING("w");
- flags = APR_WRITE;
- break;
-
- case __STDERR:
- aprerr = apr_file_open_stderr(&fp, subpool);
- file = NEW_STRING("<stderr>");
- mode = NEW_STRING("w");
- flags = APR_WRITE;
- break;
-
- default:
- return NULL; /* XXX something stupid, do an error */
- }
-
- if (aprerr != APR_SUCCESS)
- return NULL;
-
- return new_file_obj(ist, file, mode, fp, MIN_BUFSIZE, flags);
-}
-
DEF(File, objList_, FORM_RPARAM) {
return parms[1];
}
@@ -1833,13 +1798,57 @@
return res;
}
+//*************************** StdIn StdOut StdErr *****************************
-//*************************** MAIN_MODULE_INIT *************************************
+MODULE_START(StdIn)
+{
+ apr_status_t aprerr;
+ apr_pool_t *subpool;
+ apr_file_t *fp;
+ /* Create base file objects for std{in,out,err} */
+ aprerr = apr_pool_create(&subpool, get_pr_head_pool());
+ if (aprerr != APR_SUCCESS) {
+ raise_exception(ist, OBJ(IO_EXC), "out of memory");
+ return;
+ }
+ StdIn_OBJ = NEW_OBJ(TextFile_OBJ);
+ set_obj_doc(StdIn_OBJ, "StdIn unique object");
+ MODULE_ADD_TO_OBJ(StdIn, OBJ(OBJECT), "StdIn");
+ aprerr = apr_file_open_stdin(&fp, subpool);
+ IF_APR_ERR("opening stdin") return;
+ set_file_obj_data(ist, StdIn_OBJ, NEW_STRING("<stdin>"), NEW_STRING("r"),
+ fp, 0, APR_READ);
+ StdIn_OBJ->unclonable = TRUE;
+
+ StdOut_OBJ = NEW_OBJ(TextFile_OBJ);
+ set_obj_doc(StdOut_OBJ, "StdOut unique object");
+ MODULE_ADD_TO_OBJ(StdOut, OBJ(OBJECT), "StdOut");
+ aprerr = apr_file_open_stdout(&fp, subpool);
+ IF_APR_ERR("opening stdout") return;
+ set_file_obj_data(ist, StdOut_OBJ, NEW_STRING("<stdout>"), NEW_STRING("w"),
+ fp, 0, APR_WRITE);
+ StdOut_OBJ->unclonable = TRUE;
+
+ StdErr_OBJ = NEW_OBJ(TextFile_OBJ);
+ set_obj_doc(StdErr_OBJ, "StdErr unique object");
+ MODULE_ADD_TO_OBJ(StdErr, OBJ(OBJECT), "StdErr");
+ StdErr_OBJ->unclonable = TRUE;
+ aprerr = apr_file_open_stderr(&fp, subpool);
+ IF_APR_ERR("opening stderr") return;
+ set_file_obj_data(ist, StdErr_OBJ, NEW_STRING("<stderr>"), NEW_STRING("w"),
+ fp, 0, APR_WRITE);
+
+ set_attr(ist, File_OBJ, sym(ist, "stdout"), StdOut_OBJ);
+}
+
+DEF(StdIn, call_, FORM_STAR3_PARAM) { return StdIn_OBJ; }
+DEF(StdOut, call_, FORM_STAR3_PARAM) { return StdOut_OBJ; }
+DEF(StdErr, call_, FORM_STAR3_PARAM) { return StdErr_OBJ; }
+
+//*************************** MAIN_MODULE_INIT ********************************
+
MAIN_MODULE_INIT(File) {
- apr_pool_t *std_pool;
- apr_status_t aprerr;
- obj_p file_obj;
MODULE_SUB_INIT(Dir);
MODULE_ADD_SYM(Dir, init_);
@@ -1918,18 +1927,10 @@
MODULE_SUB_INIT(TextFileGen);
MODULE_ADD_SYM(TextFileGen, next);
- /* Create base file objects for std{in,out,err} */
- aprerr = apr_pool_create(&std_pool, get_pr_head_pool());
- /* Need some kind of error return! */
- if (aprerr != APR_SUCCESS)
- return;
+ MODULE_SUB_INIT(StdIn);
+ MODULE_ADD_SYM(StdIn, call_);
+ MODULE_ADD_SYM(StdOut, call_);
+ MODULE_ADD_SYM(StdErr, call_);
- if ((file_obj = __open_std_file(__STDIN, std_pool)))
- set_attr(ist, File_OBJ, sym(ist, "stdin"), file_obj);
- if ((file_obj = __open_std_file(__STDOUT, std_pool)))
- set_attr(ist, File_OBJ, sym(ist, "stdout"), file_obj);
- if ((file_obj = __open_std_file(__STDERR, std_pool)))
- set_attr(ist, File_OBJ, sym(ist, "stderr"), file_obj);
-
check_exceptions(ist);
}