rev 626 - in trunk: . include/prothon src

SVN User <[email protected]> Tue, 15 Jun 2004 18:39:43 -0400
Newsgroups gmane.comp.lang.prothon.cvs
Message-ID <[email protected]>
Author: mark
Date: 2004-06-15 18:39:40 -0400 (Tue, 15 Jun 2004)
New Revision: 626

Modified:
   trunk/STATUS.txt
   trunk/include/prothon/prothon.h
   trunk/include/prothon/prothon_dll.h
   trunk/src/builtins-file.c
   trunk/src/builtins-list.c
   trunk/src/object.c
Log:
working on TextFile

Modified: trunk/STATUS.txt
===================================================================
--- trunk/STATUS.txt	2004-06-15 07:11:26 UTC (rev 625)
+++ trunk/STATUS.txt	2004-06-15 22:39:40 UTC (rev 626)
@@ -5,17 +5,20 @@
 		set times, get times, perms, attrs
 		use 'b' in all files
 		http://www.prothon.org/pipermail/prothon-user/2004-April/000955.html
---- TextFile object
+--- TempDir() should create new dir.  del_ should delete it.
+--- TextFile, TempFile, and TempTextFile objects
 		http://www.prothon.org/pipermail/prothon-user/2004-June/001863.html
 --- support any object that supports file methods in stdxxx (duck std)
 		http://www.prothon.org/pipermail/prothon-user/2004-June/001769.html	
 
+--- functions as commands
 --- Python regrets from Paul and print proposal
 	http://www.prothon.org/pipermail/prothon-user/2004-June/001970.html
-
+	http://www.prothon.org/pipermail/prothon-user/2004-June/001991.html
+	
 --- implement 1xc3fe ?
 
---- check immutable bit for default param values or make new default object each use
+--- check immutable bit for default param values or make new default object each use (using copy()??)
 --- remove all clr_immutable calls
 
 --- add vars_ flag to str.fmt() or implement taint bit and unTaint() method

Modified: trunk/include/prothon/prothon.h
===================================================================
--- trunk/include/prothon/prothon.h	2004-06-15 07:11:26 UTC (rev 625)
+++ trunk/include/prothon/prothon.h	2004-06-15 22:39:40 UTC (rev 626)
@@ -294,7 +294,7 @@
 //************************* WELL-KNOWN-OBJECTS ********************************
 // these are created at object system initialization
 typedef enum {
-// "identity" objects
+// "unique" objects
 	PR_FALSE=0,			// 0 False
 	PR_TRUE,			// 1 True
 	OBJECT,				// 2 Object
@@ -764,6 +764,9 @@
 			         obj_p item5, obj_p item6 );
 obj_p list8(isp ist, obj_p item1, obj_p item2, obj_p item3, obj_p item4, 
 			         obj_p item5, obj_p item6, obj_p item7, obj_p item8 );
+obj_p list10(isp ist,obj_p item1, obj_p item2, obj_p item3, obj_p item4, 
+			         obj_p item5, obj_p item6, obj_p item7, obj_p item8,
+					 obj_p item9, obj_p item10 );
 
 // DICT_ADD: Add a key/value pair to the dictionary.  Replace old one if key exists.
 // Key equality is determined by the eq__QUES function on the key objects.  The eq__QUES
@@ -946,9 +949,15 @@
 #define FPARM2(lab1, val1, lab2, val2)							\
 	list4(ist, sym(ist, #lab1), val1, sym(ist, #lab2), val2)	
 #define FPARM3(lab1, val1, lab2, val2, lab3, val3)				\
-	list6(ist, sym(ist, #lab1), val1, sym(ist, #lab2), val2, sym(ist, #lab3), val3)
+	list6(ist, sym(ist, #lab1), val1, sym(ist, #lab2), val2,    \
+               sym(ist, #lab3), val3 )
 #define FPARM4(lab1, val1, lab2, val2, lab3, val3, lab4, val4)	\
-	list8(ist, sym(ist, #lab1), val1, sym(ist, #lab2), val2, sym(ist, #lab3), val3, sym(ist, #lab4), val4)
+	list8(ist, sym(ist, #lab1), val1, sym(ist, #lab2), val2,    \
+               sym(ist, #lab3), val3, sym(ist, #lab4), val4 )
+#define FPARM5(lab1, val1, lab2, val2, lab3, val3, lab4, val4,lab5, val5) \
+	list10(ist, sym(ist, #lab1), val1, sym(ist, #lab2), val2,	          \
+                sym(ist, #lab3), val3, sym(ist, #lab4), val4,             \
+			    sym(ist, #lab5), val5 )
 
 // xxx_PARAM: Convenience macro for validation and assignment of params
 // index is 1..n where 1 is first parameter and n is last

Modified: trunk/include/prothon/prothon_dll.h
===================================================================
--- trunk/include/prothon/prothon_dll.h	2004-06-15 07:11:26 UTC (rev 625)
+++ trunk/include/prothon/prothon_dll.h	2004-06-15 22:39:40 UTC (rev 626)
@@ -87,6 +87,9 @@
 		                          obj_p p5, obj_p p6);
 	obj_p		(*list8)(isp ist, obj_p p1, obj_p p2, obj_p p3, obj_p p4, 
 		                          obj_p p5, obj_p p6, obj_p p7, obj_p p8);
+	obj_p		(*list10)(isp ist, obj_p p1, obj_p p2, obj_p p3, obj_p p4, 
+		                           obj_p p5, obj_p p6, obj_p p7, obj_p p8,
+								   obj_p p9, obj_p p10);
 	obj_p		(*new_hash_obj)(isp ist, i32_t num);
 	obj_p		(*new_int_obj)(isp ist, i64_t num);
 	obj_p		(*new_float_obj)(isp ist, double num);
@@ -310,6 +313,7 @@
 #define list4				(*services->list4)
 #define list6				(*services->list6)
 #define list8				(*services->list8)
+#define list10				(*services->list10)
 #define raise_exception		(*services->raise_exception)
 #define new_object			(*services->new_object)
 #define copy_object_data	(*services->copy_object_data)

Modified: trunk/src/builtins-file.c
===================================================================
--- trunk/src/builtins-file.c	2004-06-15 07:11:26 UTC (rev 625)
+++ trunk/src/builtins-file.c	2004-06-15 22:39:40 UTC (rev 626)
@@ -679,7 +679,7 @@
 	filep = self->data.ptr;
 	aprerr = apr_file_rename(path, name, filep->pool);
 	IF_APR_ERR("renaming a file") return NULL;
-	return new_file_obj(ist, name);
+	return new_file_obj(ist, NEW_STRING(name), NULL, NULL, 0, 0);
 }
 
 DEF(File, move, FPARM1(dir, NULL)) {
@@ -701,7 +701,7 @@
 	strcpy(dstfilepath, dstpath);  strcat(dstfilepath, filename);
 	aprerr = apr_file_rename(srcfilepath, dstfilepath, filep->pool);
 	IF_APR_ERR("moving a file") return NULL;
-	res = new_file_obj(ist, dstfilepath, NULL, NULL, 0, 0);
+	res = new_file_obj(ist, NEW_STRING(dstfilepath), NULL, NULL, 0, 0);
 	pr_free(dstfilepath);
 	return res;
 }
@@ -709,7 +709,7 @@
 DEF(File, copy, FPARM2(file, NULL, uperms, NEW_INT(APR_UREAD|APR_UWRITE|APR_UEXECUTE))) {
 	apr_status_t aprerr;
 	i32_t uperms;
-	char* path1, path2;
+	char *path1, *path2;
 	file_p filep;
 	BIN_CONTENT_CHK(File);
 	CHECK_TYPE_EXC(parms[1], File_OBJ, File);
@@ -1137,22 +1137,28 @@
 	TextFile_OBJ->unclonable = TRUE;
 }
 
-DEF(TextFile, init_, FPARM3( path,    NULL, 
-	                         mode,    NEW_STRING(""),
-                             bufsize, NEW_INT(-1)   ) ) {
+DEF(TextFile, init_, FPARM5( path,		NULL, 
+	                         mode,		NEW_STRING(""),
+							 encoding,	NEW_STRING("ASCII"),
+							 magic,		OBJ(PR_FALSE),
+                             bufsize,	NEW_INT(-1)   ) ) {
 	apr_file_t *f;
 	apr_status_t aprerr;
 	apr_pool_t *subpool;
 	apr_int32_t flags = 0;
 	char err_buf[1024];
-	char *path, *mode;
-	int bufsize;
-	
+	char *path, *mode, *encoding;
+	int magic, bufsize;
+
 	BIN_EMPTY_CHK();
 	STRING_PARAM(1, path);
 	STRING_PARAM(2, mode);
-	INT_32_PARAM(3, bufsize);
+	STRING_PARAM(3, encoding);
+	magic = (parms[7] == OBJ(PR_TRUE));
+	INT_32_PARAM(5, bufsize);
 
+	read_unlock(ist, self);
+
 	if (strlen(mode) == 0) {
 		read_unlock(ist, self);
 		SET_TYPE_IF_EXC(TextFile_OBJ, self, DATA_TYPE_DATAPTR) return NULL;
Modified: trunk/src/builtins-list.c
===================================================================
--- trunk/src/builtins-list.c	2004-06-15 07:11:26 UTC (rev 625)
+++ trunk/src/builtins-list.c	2004-06-15 22:39:40 UTC (rev 626)
@@ -235,6 +235,19 @@
 	return list_obj;
 }
 
+//********************************* list10 ************************************
+obj_p list10(isp ist, obj_p item1, obj_p item2, obj_p item3, obj_p item4, 
+			          obj_p item5, obj_p item6, obj_p item7, obj_p item8,
+					  obj_p item9, obj_p item10 ){
+	obj_p list_obj = NEW_LIST(10);
+	list_append_no_lock(list_obj, item1); list_append_no_lock(list_obj, item2);
+	list_append_no_lock(list_obj, item3); list_append_no_lock(list_obj, item4);
+	list_append_no_lock(list_obj, item5); list_append_no_lock(list_obj, item6);
+	list_append_no_lock(list_obj, item7); list_append_no_lock(list_obj, item8);
+	list_append_no_lock(list_obj, item9); list_append_no_lock(list_obj, item10);
+	return list_obj;
+}
+
 //********************************* quicksort *********************************
 int obj_lt(obj_p a, obj_p b, isp ist, obj_p cmp_func) {
 	obj_p res, arr[4];

Modified: trunk/src/object.c
===================================================================
--- trunk/src/object.c	2004-06-15 07:11:26 UTC (rev 625)
+++ trunk/src/object.c	2004-06-15 22:39:40 UTC (rev 626)
@@ -157,6 +157,7 @@
 	dll_services.list4			  = list4;		
 	dll_services.list6			  = list6;		
 	dll_services.list8			  = list8;		
+	dll_services.list10			  = list10;		
 	dll_services.raise_exception  = raise_exception;
 	dll_services.new_object       = new_object;
 	dll_services.copy_object_data = copy_object_data;