Enlightenment CVS committal

Author  : leviathan
Project : e17
Module  : proto

Dir     : e17/proto/etk-perl


Modified Files:
        Etk.xs EtkSignals.c EtkTypes.c EtkTypes.h typemap 


Log Message:
- object creation is now much simpler to maintain
- Etk_Widget is handled differently now and checks for object type, this makes 
it more transparent to the perl user
- removed unused code (object cache is no more)

===================================================================
RCS file: /cvs/e/e17/proto/etk-perl/Etk.xs,v
retrieving revision 1.47
retrieving revision 1.48
diff -u -3 -r1.47 -r1.48
--- Etk.xs      1 Sep 2006 18:34:36 -0000       1.47
+++ Etk.xs      4 Sep 2006 19:39:26 -0000       1.48
@@ -350,10 +350,10 @@
    cbd = data;
    
    PUSHMARK(SP);         
-   XPUSHs(sv_2mortal(newSVEtkTreePtr(tree)));
-   XPUSHs(sv_2mortal(newSVEtkTreeRowPtr(row1)));
-   XPUSHs(sv_2mortal(newSVEtkTreeRowPtr(row2)));
-   XPUSHs(sv_2mortal(newSVEtkTreeColPtr(col)));
+   XPUSHs(sv_2mortal(newSVObj(tree, getClass("Etk_Tree"))));
+   XPUSHs(sv_2mortal(newSVObj(row1, getClass("Etk_Tree_Row"))));
+   XPUSHs(sv_2mortal(newSVObj(row2, getClass("Etk_Tree_Row"))));
+   XPUSHs(sv_2mortal(newSVObj(col, getClass("Etk_Tree_Col"))));
    XPUSHs(sv_2mortal(newSVsv(cbd->perl_data)));
    PUTBACK;
 
@@ -855,7 +855,7 @@
              if(SvPOK(ST(i + 1)))
                   ptr[i] = SvPV_nolen(ST(i + 1));
              else 
-                  ptr[i] = SvEtkWidgetPtr(ST(i + 1));
+                  ptr[i] = SvObj(ST(i + 1), getClass("Etk_Widget"));
           }
         switch(items)
         {         
@@ -927,7 +927,7 @@
              if(SvPOK(ST(i + 1)))
                   ptr[i] = SvPV_nolen(ST(i + 1));
              else 
-                  ptr[i] = SvEtkWidgetPtr(ST(i + 1));
+                  ptr[i] = SvObj(ST(i + 1), getClass("Etk_Widget"));
           }
         switch(items)
         {         
@@ -1003,7 +1003,7 @@
              if(SvPOK(ST(i + 1)))
                   ptr[i] = SvPV_nolen(ST(i + 1));
              else 
-                  ptr[i] = SvEtkWidgetPtr(ST(i + 1));
+                  ptr[i] = SvObj(ST(i + 1), getClass("Etk_Widget"));
           }
         switch(items)
         {         
@@ -1092,7 +1092,7 @@
              if(SvPOK(ST(i + 1)))
                   ptr[i] = SvPV_nolen(ST(i + 1));
              else 
-                  ptr[i] = SvEtkWidgetPtr(ST(i + 1));
+                  ptr[i] = SvObj(ST(i + 1), getClass("Etk_Widget"));
           }
         switch(items)
         {         
@@ -1457,17 +1457,17 @@
        RETVAL
 
 Etk_Bool
-etk_entry_password_get(entry)
+etk_entry_password_mode_get(entry)
        Etk_Entry *     entry
       ALIAS:
-       PasswordGet=1
+       PasswordModeGet=1
 
 void
-etk_entry_password_set(entry, on)
+etk_entry_password_mode_set(entry, on)
        Etk_Entry *     entry
        Etk_Bool        on
       ALIAS:
-       PasswordSet=1
+       PasswordModeSet=1
 
 const char *
 etk_entry_text_get(entry)
@@ -3963,7 +3963,7 @@
        modeldata = (Etk_Tree_Model *) SvObj(model, "Etk::Tree::Model");
 
        col = etk_tree_col_new(tree, title, modeldata, width);
-       RETVAL = newSVEtkTreeColPtr(col);
+       RETVAL = newSVObj(col, getClass("Etk_Tree_Col"));
 
        model_type = hv_fetch( (HV*)SvRV(model), "_model", 6, 0);
        if (model_type) {
@@ -4152,7 +4152,7 @@
        Etk_Tree_Model * model;
        SV * ret;
        model = etk_tree_model_checkbox_new(tree);
-       ret = newSVEtkTreeModelPtr(model);
+       ret = newSVObj(model, getClass("Etk_Tree_Model"));
        hv_store( (HV*)SvRV(ret), "_model", 6, newSViv(mCHECKBOX), 0);
        XPUSHs(sv_2mortal(ret));
 
@@ -4167,7 +4167,7 @@
        Etk_Tree_Model * model;
        SV * ret;
        model = etk_tree_model_double_new(tree);
-       ret = newSVEtkTreeModelPtr(model);
+       ret = newSVObj(model, getClass("Etk_Tree_Model"));
        hv_store( (HV*)SvRV(ret), "_model", 6, newSViv(mDOUBLE), 0);
        XPUSHs(sv_2mortal(ret));
 
@@ -4202,7 +4202,7 @@
                mod = newSViv(mICONTEXTE);
 
        model = etk_tree_model_icon_text_new(tree, type);
-       ret = newSVEtkTreeModelPtr(model);
+       ret = newSVObj(model, getClass("Etk_Tree_Model"));
        hv_store( (HV*)SvRV(ret), "_model", 6, mod, 0);
        XPUSHs(sv_2mortal(ret));
 
@@ -4223,7 +4223,7 @@
        else
                mod = newSViv(mIMAGEE);
        model = etk_tree_model_image_new(tree, type);
-       ret = newSVEtkTreeModelPtr(model);
+       ret = newSVObj(model, getClass("Etk_Tree_Model"));
        hv_store( (HV*)SvRV(ret), "_model", 6, mod, 0);
        XPUSHs(sv_2mortal(ret));
 
@@ -4237,7 +4237,7 @@
        Etk_Tree_Model * model;
        SV * ret;
        model = etk_tree_model_int_new(tree);
-       ret = newSVEtkTreeModelPtr(model);
+       ret = newSVObj(model, getClass("Etk_Tree_Model"));
        hv_store( (HV*)SvRV(ret), "_model", 6, newSViv(mINT), 0);
        XPUSHs(sv_2mortal(ret));
 
@@ -4253,7 +4253,7 @@
        Etk_Tree_Model * model;
        SV * ret;
        model = etk_tree_model_progress_bar_new(tree);
-       ret = newSVEtkTreeModelPtr(model);
+       ret = newSVObj(model, getClass("Etk_Tree_Model"));
        hv_store( (HV*)SvRV(ret), "_model", 6, newSViv(mPROGRESSBAR), 0);
        XPUSHs(sv_2mortal(ret));
 
@@ -4268,7 +4268,7 @@
        Etk_Tree_Model * model;
        SV * ret;
        model = etk_tree_model_text_new(tree);
-       ret = newSVEtkTreeModelPtr(model);
+       ret = newSVObj(model, getClass("Etk_Tree_Model"));
        hv_store( (HV*)SvRV(ret), "_model", 6, newSViv(mTEXT), 0);
        XPUSHs(sv_2mortal(ret));
 
===================================================================
RCS file: /cvs/e/e17/proto/etk-perl/EtkSignals.c,v
retrieving revision 1.4
retrieving revision 1.5
diff -u -3 -r1.4 -r1.5
--- EtkSignals.c        26 Aug 2006 16:03:43 -0000      1.4
+++ EtkSignals.c        4 Sep 2006 19:39:26 -0000       1.5
@@ -31,7 +31,7 @@
                   !strcmp(cbd->signal_name, "cell_value_changed")
                   )
      {
-       event_rv = newSVEtkTreeRowPtr((Etk_Tree_Row *)value);
+       event_rv = newSVObj(value, getClass("Etk_Tree_Row"));
      }
    else if(!strcmp(cbd->signal_name, "key_down"))
      {
===================================================================
RCS file: /cvs/e/e17/proto/etk-perl/EtkTypes.c,v
retrieving revision 1.13
retrieving revision 1.14
diff -u -3 -r1.13 -r1.14
--- EtkTypes.c  1 Sep 2006 18:34:36 -0000       1.13
+++ EtkTypes.c  4 Sep 2006 19:39:26 -0000       1.14
@@ -1,93 +1,7 @@
 #include "EtkTypes.h"
 
+static HV * NameTranslator = NULL;
 
-#if 0
-static HV * ObjectCache = NULL;
-
-static void SetEtkObject(SV * perl_object, Etk_Object * object)
-{
-       if (!object || !SvOK(perl_object))
-               return;
-       
-#ifdef DEBUG
-       printf(">> Adding object (%p) with perl object (%p)\n", object, 
perl_object);
-#endif
-
-       char * key;
-       int len = 10;
-       key = (char *)malloc(sizeof(char) * 10);
-       snprintf(key, 10, "%p", object);
-       printf("\tKEY: %s\n", key);
-
-       hv_store(ObjectCache, key, len, perl_object, 0);
-       
-}
-
-static SV * GetEtkObject(Etk_Object * object) 
-{
-
-       SV * s = NULL;
-#ifdef DEBUG
-       printf(">> Trying to find object (%p)\n", object);
-#endif
-
-       char * key;
-       int len = 10;
-       SV **sv;
-       key = (char *)malloc(sizeof(char) * 10);
-       snprintf(key, 10, "%p", object);
-       printf("\tKEY: %s\n", key);
-       
-       sv = hv_fetch(ObjectCache, key, len, 0);
-       if (sv && SvOK(*sv)) 
-               s = SvREFCNT_inc(*sv);
-
-       printf("  GOT: %p\n", s);
-
-       return s;
-}
-
-void FreeEtkObject(Etk_Object *object)
-{
-       return;
-
-       char * key;
-       int len = 10;
-#ifdef DEBUG
-       printf(">> Trying to free object (%p)\n", object);
-#endif
-       
-       key = (char *)malloc(sizeof(char) * 10);
-       snprintf(key, 10, "%p", object);
-       printf("\tKEY: %s\n", key);
-       if (hv_exists(ObjectCache, key, len)){
-               SV ** sv;
-               int ref = -1;
-               sv = hv_fetch(ObjectCache, key, len, 0);
-               if (sv) {
-                       SV * s;
-                       s = *sv;
-                       ref = SvREFCNT(s);
-                       printf(">\n");
-                       if (ref == 1)
-                               hv_delete(ObjectCache, key, len, G_DISCARD);
-                       else
-                               SvREFCNT_dec(s);
-                       printf(">\n");
-               }
-               printf("  DELETE ref(%i) (%p)\n", ref, *sv);
-                       
-       }
-
-}
-
-void FreeObjectCache()
-{
-       hv_undef(ObjectCache);
-       ObjectCache = NULL;
-}
-
-#endif
 
 void * SvObj(SV *o, char * classname)
 {
@@ -109,7 +23,19 @@
 }
 
 
-SV * newSVObj(void *object, char * classname, int * newref)
+SV * newSVObject(void * object) {
+
+       if (! ETK_IS_OBJECT((Etk_Object *)object) ) return  
newSVsv(&PL_sv_undef);
+
+       Etk_Type * type;
+       type = etk_object_object_type_get((Etk_Object *)object);
+       if (! type ) return newSVsv(&PL_sv_undef);
+       return newSVObj(object, getClass(type->name));
+
+}
+
+
+SV * newSVObj(void *object, char * classname)
 {
 #ifdef DEBUG
        printf(">> Creating new object from (%p) of class (%s)\n", object, 
classname);
@@ -120,32 +46,107 @@
        if (!object)
                return newSVsv(&PL_sv_undef);
 
-       //if (newref) *newref = 0;
-
-       //previous = GetEtkObject((Etk_Object *)object);
-       //if (previous)
-       //      return previous;
-       
        HV * h = newHV();
        hv_store(h, "ETK", 3, newSViv((long)object), 0);
        result = newRV((SV*)h);
        sv_bless(result, gv_stashpv(classname, FALSE));
        SvREFCNT_dec(h);
 
-       //SetEtkObject(result, object);
-
-       //if (newref) *newref = 1;
-       
-       //printf("\t(%p)\n", result);
        return result;
 
 }
 
+char * getClass(char *type) {
+       SV ** sv;
+       sv = hv_fetch(NameTranslator, type, strlen(type), 0);
+       if (!sv) return "Etk::Bug";
+       return SvPV_nolen(*sv); 
+}
 
 void __etk_perl_init() {
 
-//     ObjectCache = newHV();
+       NameTranslator = newHV();
+       
+#define __(A, B)\
+       hv_store(NameTranslator, A, strlen(A), newSVpv(B, strlen(B)), 0)
 
+       __("Etk_Alignment",             "Etk::Alignment");
+       __("Etk_Bin",           "Etk::Bin");
+       __("Etk_Box",           "Etk::Box");
+       __("Etk_HBox",          "Etk::HBox");
+       __("Etk_VBox",          "Etk::VBox");
+       __("Etk_Button",                "Etk::Button");
+       __("Etk_Canvas",                "Etk::Canvas");
+       __("Etk_Check_Button",          "Etk::CheckButton");
+       __("Etk_Colorpicker",           "Etk::Colorpicker");
+       __("Etk_Combobox",              "Etk::Combobox");
+       __("Etk_Combobox_Item",         "Etk::Combobox::Item");
+       __("Etk_Container",             "Etk::Container");
+       __("Etk_Dialog",                "Etk::Dialog");
+       __("Etk_Drag",          "Etk::Drag");
+       __("Etk_Embed",         "Etk::Embed");
+       __("Etk_Entry",         "Etk::Entry");
+       __("Etk_Filechooser_Widget",            "Etk::Filechooser");
+       __("Etk_Frame",         "Etk::Frame");
+       __("Etk_Iconbox",               "Etk::Iconbox");
+       __("Etk_Iconbox_Model",         "Etk::Iconbox::Model");
+       __("Etk_Iconbox_Icon",          "Etk::Iconbox::Icon");
+       __("Etk_Iconbox_Grid",          "Etk::Iconbox::Grid");
+       __("Etk_Image",         "Etk::Image");
+       __("Etk_Label",         "Etk::Label");
+       __("Etk_Menu",          "Etk::Menu");
+       __("Etk_Menu_Bar",              "Etk::Menu::Bar");
+       __("Etk_Menu_Item",             "Etk::Menu::Item");
+       __("Etk_Menu_Item_Separator",           "Etk::Menu::Item::Separator");
+       __("Etk_Menu_Item_Image",               "Etk::Menu::Item::Image");
+       __("Etk_Menu_Item_Check",               "Etk::Menu::Item::Check");
+       __("Etk_Menu_Item_Radio",               "Etk::Menu::Item::Radio");
+       __("Etk_Menu_Shell",            "Etk::Menu::Shell");
+       __("Etk_Message_Dialog",                "Etk::MessageDialog");
+       __("Etk_Notebook",              "Etk::Notebook");
+       __("Etk_Object",                "Etk::Object");
+       __("Etk_Paned",         "Etk::Paned");
+       __("Etk_HPaned",                "Etk::HPaned");
+       __("Etk_VPaned",                "Etk::VPaned");
+       __("Etk_Popup_Window",          "Etk::PopupWindow");
+       __("Etk_Progress_Bar",          "Etk::ProgressBar");
+       __("Etk_Radio_Button",          "Etk::RadioButton");
+       __("Etk_Range",         "Etk::Range");
+       __("Etk_Scrollbar",             "Etk::Scrollbar");
+       __("Etk_HScrollbar",            "Etk::HScrollbar");
+       __("Etk_VScrollbar",            "Etk::VScrollbar");
+       __("Etk_Scrolled_View",         "Etk::ScrolledView");
+       __("Etk_Separator",             "Etk::Separator");
+       __("Etk_HSeparator",            "Etk::HSeparator");
+       __("Etk_VSeparator",            "Etk::VSeparator");
+       __("Etk_Slider",                "Etk::Slider");
+       __("Etk_HSlider",               "Etk::HSlider");
+       __("Etk_VSlider",               "Etk::VSlider");
+       __("Etk_Statusbar",             "Etk::StatusBar");
+       __("Etk_String",                "Etk::String");
+       __("Etk_Table",         "Etk::Table");
+       __("Etk_Text_View",             "Etk::TextView");
+       __("Etk_Textblock",             "Etk::TextBlock");
+       __("Etk_Textblock_Iter",                "Etk::TextBlock::Iter");
+       __("Etk_Toggle_Button",         "Etk::ToggleButton");
+       __("Etk_Tool_Button",           "Etk::Tool::Button");
+       __("Etk_Tool_Toggle_Button",            "Etk::Tool::ToggleButton");
+       __("Etk_Toolbar",               "Etk::Toolbar");
+       __("Etk_Toplevel_Widget",               "Etk::ToplevelWidget");
+       __("Etk_Tree",          "Etk::Tree");
+       __("Etk_Tree_Col",              "Etk::Tree::Col");
+       __("Etk_Tree_Row",              "Etk::Tree::Row");
+       __("Etk_Tree_Model",            "Etk::Tree::Model");
+       __("Etk_Tree_Grid",             "Etk::Tree::Grid");
+       __("Etk_Viewport",              "Etk::Viewport");
+       __("Etk_Widget",                "Etk::Widget");
+       __("Etk_Window",                "Etk::Window");
+
+       __("Ecore_Timer",               "Etk::Timer");
+       __("Evas",              "Evas");
+       __("Evas_Object",               "Evas::Object");
+       
+#undef __
 #define __(A, B)\
        av_push(get_av("Etk::"A"::ISA", TRUE), newSVpv("Etk::"B, 
strlen("Etk::"B)));
 
@@ -389,7 +390,7 @@
 
        av = newAV();
        for (l = list; l; l = l->next) 
-               av_push(av, newSVEtkWidgetPtr((Etk_Widget *)(l->data)));
+               av_push(av, newSVObject(l->data));
 
        return newRV_noinc((SV*)av);
 
@@ -408,146 +409,6 @@
        return newRV_noinc((SV*)av);
 
 }
-
-SV * newSVEcoreTimerPtr(Ecore_Timer *o) { return newSVObj(o, "Etk::Timer", 0); 
} 
-Ecore_Timer * SvEcoreTimerPtr(SV *data) { return SvObj(data, "Etk::Timer"); }
-SV * newSVEtkAlignmentPtr(Etk_Alignment *o) { return newSVObj(o, 
"Etk::Alignment", 0); }
-Etk_Alignment * SvEtkAlignmentPtr(SV *data) { return SvObj(data, 
"Etk::Alignment"); }
-SV * newSVEtkBinPtr(Etk_Bin *o) { return newSVObj(o, "Etk::Bin", 0); }
-Etk_Bin * SvEtkBinPtr(SV *data) { return SvObj(data, "Etk::Bin"); }
-SV * newSVEtkBoxPtr(Etk_Box *o) { return newSVObj(o, "Etk::Box", 0); }
-Etk_Box * SvEtkBoxPtr(SV *data) { return SvObj(data, "Etk::Box"); }
-SV * newSVEtkButtonPtr(Etk_Button *o) { return newSVObj(o, "Etk::Button", 0); }
-Etk_Button * SvEtkButtonPtr(SV *data) { return SvObj(data, "Etk::Button"); }
-SV * newSVEtkCanvasPtr(Etk_Canvas *o) { return newSVObj(o, "Etk::Canvas", 0); }
-Etk_Canvas * SvEtkCanvasPtr(SV *data) { return SvObj(data, "Etk::Canvas"); }
-SV * newSVEtkCheckButtonPtr(Etk_Check_Button *o) { return newSVObj(o, 
"Etk::CheckButton", 0); }
-Etk_Check_Button * SvEtkCheckButtonPtr(SV *data) { return SvObj(data, 
"Etk::CheckButton"); }
-SV * newSVEtkColorpickerPtr(Etk_Colorpicker *o) { return newSVObj(o, 
"Etk::Colorpicker", 0); }
-Etk_Colorpicker * SvEtkColorpickerPtr(SV *data) { return SvObj(data, 
"Etk::Colorpicker"); }
-SV * newSVEtkComboboxPtr(Etk_Combobox *o) { return newSVObj(o, 
"Etk::Combobox", 0); }
-Etk_Combobox * SvEtkComboboxPtr(SV *data) { return SvObj(data, 
"Etk::Combobox"); }
-SV * newSVEtkContainerPtr(Etk_Container *o) { return newSVObj(o, 
"Etk::Container", 0); }
-Etk_Container * SvEtkContainerPtr(SV *data) { return SvObj(data, 
"Etk::Container"); }
-SV * newSVEtkDialogPtr(Etk_Dialog *o) { return newSVObj(o, "Etk::Dialog", 0); }
-Etk_Dialog * SvEtkDialogPtr(SV *data) { return SvObj(data, "Etk::Dialog"); }
-SV * newSVEtkDragPtr(Etk_Drag *o) { return newSVObj(o, "Etk::Drag", 0); }
-Etk_Drag * SvEtkDragPtr(SV *data) { return SvObj(data, "Etk::Drag"); }
-SV * newSVEtkEntryPtr(Etk_Entry *o) { return newSVObj(o, "Etk::Entry", 0); }
-Etk_Entry * SvEtkEntryPtr(SV *data) { return SvObj(data, "Etk::Entry"); }
-SV * newSVEtkFilechooserWidgetPtr(Etk_Filechooser_Widget *o) { return 
newSVObj(o, "Etk::Filechooser", 0); }
-Etk_Filechooser_Widget * SvEtkFilechooserWidgetPtr(SV *data) { return 
SvObj(data, "Etk::Filechooser"); }
-SV * newSVEtkFramePtr(Etk_Frame *o) { return newSVObj(o, "Etk::Frame", 0); }
-Etk_Frame * SvEtkFramePtr(SV *data) { return SvObj(data, "Etk::Frame"); }
-SV * newSVEtkHBoxPtr(Etk_HBox *o) { return newSVObj(o, "Etk::HBox", 0); }
-Etk_HBox * SvEtkHBoxPtr(SV *data) { return SvObj(data, "Etk::HBox"); }
-SV * newSVEtkHPanedPtr(Etk_HPaned *o) { return newSVObj(o, "Etk::HPaned", 0); }
-Etk_HPaned * SvEtkHPanedPtr(SV *data) { return SvObj(data, "Etk::HPaned"); }
-SV * newSVEtkHScrollbarPtr(Etk_HScrollbar *o) { return newSVObj(o, 
"Etk::HScrollbar", 0); }
-Etk_HScrollbar * SvEtkHScrollbarPtr(SV *data) { return SvObj(data, 
"Etk::HScrollbar"); }
-SV * newSVEtkHSeparatorPtr(Etk_HSeparator *o) { return newSVObj(o, 
"Etk::HSeparator", 0); }
-Etk_HSeparator * SvEtkHSeparatorPtr(SV *data) { return SvObj(data, 
"Etk::HSeparator"); }
-SV * newSVEtkHSliderPtr(Etk_HSlider *o) { return newSVObj(o, "Etk::HSlider", 
0); }
-Etk_HSlider * SvEtkHSliderPtr(SV *data) { return SvObj(data, "Etk::HSlider"); }
-SV * newSVEtkIconboxPtr(Etk_Iconbox *o) { return newSVObj(o, "Etk::Iconbox", 
0); }
-Etk_Iconbox * SvEtkIconboxPtr(SV *data) { return SvObj(data, "Etk::Iconbox"); }
-SV * newSVEtkImagePtr(Etk_Image *o) { return newSVObj(o, "Etk::Image", 0); }
-Etk_Image * SvEtkImagePtr(SV *data) { return SvObj(data, "Etk::Image"); }
-SV * newSVEtkLabelPtr(Etk_Label *o) { return newSVObj(o, "Etk::Label", 0); }
-Etk_Label * SvEtkLabelPtr(SV *data) { return SvObj(data, "Etk::Label"); }
-SV * newSVEtkMenuPtr(Etk_Menu *o) { return newSVObj(o, "Etk::Menu", 0); }
-Etk_Menu * SvEtkMenuPtr(SV *data) { return SvObj(data, "Etk::Menu"); }
-SV * newSVEtkMessageDialogPtr(Etk_Message_Dialog *o) { return newSVObj(o, 
"Etk::MessageDialog", 0); }
-Etk_Message_Dialog * SvEtkMessageDialogPtr(SV *data) { return SvObj(data, 
"Etk::MessageDialog"); }
-SV * newSVEtkNotebookPtr(Etk_Notebook *o) { return newSVObj(o, 
"Etk::Notebook", 0); }
-Etk_Notebook * SvEtkNotebookPtr(SV *data) { return SvObj(data, 
"Etk::Notebook"); }
-SV * newSVEtkObjectPtr(Etk_Object *o) { return newSVObj(o, "Etk::Object", 0); }
-Etk_Object * SvEtkObjectPtr(SV *data) { return SvObj(data, "Etk::Object"); }
-SV * newSVEtkPanedPtr(Etk_Paned *o) { return newSVObj(o, "Etk::Paned", 0); }
-Etk_Paned * SvEtkPanedPtr(SV *data) { return SvObj(data, "Etk::Paned"); }
-SV * newSVEtkPopupWindowPtr(Etk_Popup_Window *o) { return newSVObj(o, 
"Etk::PopupWindow", 0); }
-Etk_Popup_Window * SvEtkPopupWindowPtr(SV *data) { return SvObj(data, 
"Etk::PopupWindow"); }
-SV * newSVEtkProgressBarPtr(Etk_Progress_Bar *o) { return newSVObj(o, 
"Etk::ProgressBar", 0); }
-Etk_Progress_Bar * SvEtkProgressBarPtr(SV *data) { return SvObj(data, 
"Etk::ProgressBar"); }
-SV * newSVEtkRadioButtonPtr(Etk_Radio_Button *o) { return newSVObj(o, 
"Etk::RadioButton", 0); }
-Etk_Radio_Button * SvEtkRadioButtonPtr(SV *data) { return SvObj(data, 
"Etk::RadioButton"); }
-SV * newSVEtkRangePtr(Etk_Range *o) { return newSVObj(o, "Etk::Range", 0); }
-Etk_Range * SvEtkRangePtr(SV *data) { return SvObj(data, "Etk::Range"); }
-SV * newSVEtkScrolledViewPtr(Etk_Scrolled_View *o) { return newSVObj(o, 
"Etk::ScrolledView", 0); }
-Etk_Scrolled_View * SvEtkScrolledViewPtr(SV *data) { return SvObj(data, 
"Etk::ScrolledView"); }
-SV * newSVEtkSeparatorPtr(Etk_Separator *o) { return newSVObj(o, 
"Etk::Separator", 0); }
-Etk_Separator * SvEtkSeparatorPtr(SV *data) { return SvObj(data, 
"Etk::Separator"); }
-SV * newSVEtkStatusbarPtr(Etk_Statusbar *o) { return newSVObj(o, 
"Etk::StatusBar", 0); }
-Etk_Statusbar * SvEtkStatusbarPtr(SV *data) { return SvObj(data, 
"Etk::StatusBar"); }
-SV * newSVEtkTablePtr(Etk_Table *o) { return newSVObj(o, "Etk::Table", 0); }
-Etk_Table * SvEtkTablePtr(SV *data) { return SvObj(data, "Etk::Table"); }
-SV * newSVEtkToolbarPtr(Etk_Toolbar *o) { return newSVObj(o, "Etk::Toolbar", 
0);}
-Etk_Toolbar * SvEtkToolbarPtr(SV *data) { return SvObj(data, "Etk::Toolbar");}
-SV * newSVEtkTextblockPtr(Etk_Textblock *o) { return newSVObj(o, 
"Etk::TextBlock", 0); }
-Etk_Textblock * SvEtkTextblockPtr(SV *data) { return SvObj(data, 
"Etk::TextBlock"); }
-SV * newSVEtkTextblockIterPtr(Etk_Textblock_Iter *o) { return newSVObj(o, 
"Etk::TextBlock::Iter", 0); }
-Etk_Textblock_Iter * SvEtkTextblockIterPtr(SV *data) { return SvObj(data, 
"Etk::TextBlock::Iter"); }
-SV * newSVEtkTextViewPtr(Etk_Text_View *o) { return newSVObj(o, 
"Etk::TextView", 0); }
-Etk_Text_View * SvEtkTextViewPtr(SV *data) { return SvObj(data, 
"Etk::TextView"); }
-SV * newSVEtkToggleButtonPtr(Etk_Toggle_Button *o) { return newSVObj(o, 
"Etk::ToggleButton", 0); }
-Etk_Toggle_Button * SvEtkToggleButtonPtr(SV *data) { return SvObj(data, 
"Etk::ToggleButton"); }
-SV * newSVEtkToplevelWidgetPtr(Etk_Toplevel_Widget *o) { return newSVObj(o, 
"Etk::ToplevelWidget", 0); }
-Etk_Toplevel_Widget * SvEtkToplevelWidgetPtr(SV *data) { return SvObj(data, 
"Etk::ToplevelWidget"); }
-SV * newSVEtkTreePtr(Etk_Tree *o) { return newSVObj(o, "Etk::Tree", 0); }
-Etk_Tree * SvEtkTreePtr(SV *data) { return SvObj(data, "Etk::Tree"); }
-SV * newSVEtkVBoxPtr(Etk_VBox *o) { return newSVObj(o, "Etk::VBox", 0); }
-Etk_VBox * SvEtkVBoxPtr(SV *data) { return SvObj(data, "Etk::VBox"); }
-SV * newSVEtkVPanedPtr(Etk_VPaned *o) { return newSVObj(o, "Etk::VPaned", 0); }
-Etk_VPaned * SvEtkVPanedPtr(SV *data) { return SvObj(data, "Etk::VPaned"); }
-SV * newSVEtkVScrollbarPtr(Etk_VScrollbar *o) { return newSVObj(o, 
"Etk::VScrollbar", 0); }
-Etk_VScrollbar * SvEtkVScrollbarPtr(SV *data) { return SvObj(data, 
"Etk::VScrollbar"); }
-SV * newSVEtkVSeparatorPtr(Etk_VSeparator *o) { return newSVObj(o, 
"Etk::VSeparator", 0); }
-Etk_VSeparator * SvEtkVSeparatorPtr(SV *data) { return SvObj(data, 
"Etk::VSeparator"); }
-SV * newSVEtkVSliderPtr(Etk_VSlider *o) { return newSVObj(o, "Etk::VSlider", 
0); }
-Etk_VSlider * SvEtkVSliderPtr(SV *data) { return SvObj(data, "Etk::VSlider"); }
-SV * newSVEtkViewportPtr(Etk_Viewport *o) { return newSVObj(o, 
"Etk::Viewport", 0); }
-Etk_Viewport * SvEtkViewportPtr(SV *data) { return SvObj(data, 
"Etk::Viewport"); }
-SV * newSVEtkWidgetPtr(Etk_Widget *o) { return newSVObj(o, "Etk::Widget", 0); }
-Etk_Widget * SvEtkWidgetPtr(SV *data) { return SvObj(data, "Etk::Widget"); }
-SV * newSVEtkWindowPtr(Etk_Window *o) { return newSVObj(o, "Etk::Window", 0); }
-Etk_Window * SvEtkWindowPtr(SV *data) { return SvObj(data, "Etk::Window"); }
-
-
-SV * newSVEvasObjectPtr(Evas_Object *o) { return newSVObj(o, "Evas::Object", 
0); }
-Evas_Object * SvEvasObjectPtr(SV *data) { return SvObj(data, "Evas::Object"); }
-
-SV * newSVEvasPtr(Evas *o) { return newSVObj(o, "Evas", 0); }
-Evas * SvEvasPtr(SV *data) { return SvObj(data, "Evas"); }
-
-SV * newSVEtkComboboxItemPtr(Etk_Combobox_Item *o) { return newSVObj(o, 
"Etk::Combobox::Item", 0); }
-Etk_Combobox_Item * SvEtkComboboxItemPtr(SV *data) { return SvObj(data, 
"Etk::Combobox::Item"); }
-
-
-SV * newSVEtkIconboxIconPtr(Etk_Iconbox_Icon *o) { return newSVObj(o, 
"Etk::Iconbox::Icon", 0); }
-Etk_Iconbox_Icon * SvEtkIconboxIconPtr(SV *data) { return SvObj(data, 
"Etk::Iconbox::Icon"); }
-SV * newSVEtkIconboxModelPtr(Etk_Iconbox_Model *o) { return newSVObj(o, 
"Etk::Iconbox::Model", 0); }
-Etk_Iconbox_Model * SvEtkIconboxModelPtr(SV *data) { return SvObj(data, 
"Etk::Iconbox::Model"); }
-SV * newSVEtkMenuBarPtr(Etk_Menu_Bar *o) { return newSVObj(o, 
"Etk::Menu::Bar", 0); }
-Etk_Menu_Bar * SvEtkMenuBarPtr(SV *data) { return SvObj(data, 
"Etk::Menu::Bar"); }
-SV * newSVEtkMenuItemPtr(Etk_Menu_Item *o) { return newSVObj(o, 
"Etk::Menu::Item", 0); }
-Etk_Menu_Item * SvEtkMenuItemPtr(SV *data) { return SvObj(data, 
"Etk::Menu::Item"); }
-SV * newSVEtkMenuShellPtr(Etk_Menu_Shell *o) { return newSVObj(o, 
"Etk::Menu::Shell", 0); }
-Etk_Menu_Shell * SvEtkMenuShellPtr(SV *data) { return SvObj(data, 
"Etk::Menu::Shell"); }
-SV * newSVEtkTreeColPtr(Etk_Tree_Col *o) { return newSVObj(o, 
"Etk::Tree::Col", 0); }
-Etk_Tree_Col * SvEtkTreeColPtr(SV *data) { return SvObj(data, 
"Etk::Tree::Col"); }
-SV * newSVEtkTreeModelPtr(Etk_Tree_Model *o) { return newSVObj(o, 
"Etk::Tree::Model", 0); }
-Etk_Tree_Model * SvEtkTreeModelPtr(SV *data) { return SvObj(data, 
"Etk::Tree::Model"); }
-SV * newSVEtkTreeRowPtr(Etk_Tree_Row *o) { return newSVObj(o, 
"Etk::Tree::Row", 0); }
-Etk_Tree_Row * SvEtkTreeRowPtr(SV *data) { return SvObj(data, 
"Etk::Tree::Row"); }
-SV * newSVEtkMenuItemCheckPtr(Etk_Menu_Item_Check *o) { return newSVObj(o, 
"Etk::Menu::Item::Check", 0); }
-Etk_Menu_Item_Check * SvEtkMenuItemCheckPtr(SV *data) { return SvObj(data, 
"Etk::Menu::Item::Check"); }
-SV * newSVEtkMenuItemImagePtr(Etk_Menu_Item_Image *o) { return newSVObj(o, 
"Etk::Menu::Item::Image", 0); }
-Etk_Menu_Item_Image * SvEtkMenuItemImagePtr(SV *data) { return SvObj(data, 
"Etk::Menu::Item::Image"); }
-SV * newSVEtkMenuItemRadioPtr(Etk_Menu_Item_Radio *o) { return newSVObj(o, 
"Etk::Menu::Item::Radio", 0); }
-Etk_Menu_Item_Radio * SvEtkMenuItemRadioPtr(SV *data) { return SvObj(data, 
"Etk::Menu::Item::Radio"); }
-SV * newSVEtkMenuItemSeparatorPtr(Etk_Menu_Item_Separator *o) { return 
newSVObj(o, "Etk::Menu::Item::Separator", 0); }
-Etk_Menu_Item_Separator * SvEtkMenuItemSeparatorPtr(SV *data) { return 
SvObj(data, "Etk::Menu::Item::Separator"); }
-
 
 #define S_STORE(A, B)\
        if (B)\
===================================================================
RCS file: /cvs/e/e17/proto/etk-perl/EtkTypes.h,v
retrieving revision 1.9
retrieving revision 1.10
diff -u -3 -r1.9 -r1.10
--- EtkTypes.h  1 Sep 2006 18:34:36 -0000       1.9
+++ EtkTypes.h  4 Sep 2006 19:39:26 -0000       1.10
@@ -17,8 +17,13 @@
 void __etk_perl_init();
 void FreeEtkObject(Etk_Object *object);
 void FreeObjectCache();
+char * getClass(char *type);
 
 
+void * SvObj(SV *o, char * classname);
+SV * newSVObj(void *object, char * classname);
+SV * newSVObject(void * object);
+
 SV *                   newSVColor(Etk_Color col);
 Etk_Color              SvColor(SV *color);
 SV *                   newSVGeometry(Etk_Geometry geo);
@@ -31,139 +36,6 @@
 Evas_List *            SvEvasList(SV *sv);
 SV *                   newSVEvasList(Evas_List *list);
 SV *                   newSVCharEvasList(Evas_List *list);
-
-SV *                   newSVEcoreTimerPtr(Ecore_Timer *o); 
-Ecore_Timer *          SvEcoreTimerPtr(SV *data); 
-SV *                   newSVEtkAlignmentPtr(Etk_Alignment *o); 
-Etk_Alignment *                SvEtkAlignmentPtr(SV *data); 
-SV *                   newSVEtkBinPtr(Etk_Bin *o); 
-Etk_Bin *              SvEtkBinPtr(SV *data); 
-SV *                   newSVEtkBoxPtr(Etk_Box *o); 
-Etk_Box *              SvEtkBoxPtr(SV *data); 
-SV *                   newSVEtkButtonPtr(Etk_Button *o); 
-Etk_Button *           SvEtkButtonPtr(SV *data); 
-SV *                   newSVEtkCanvasPtr(Etk_Canvas *o); 
-Etk_Canvas *           SvEtkCanvasPtr(SV *data); 
-SV *                   newSVEtkCheckButtonPtr(Etk_Check_Button *o); 
-Etk_Check_Button *     SvEtkCheckButtonPtr(SV *data); 
-SV *                   newSVEtkColorpickerPtr(Etk_Colorpicker *o); 
-Etk_Colorpicker *      SvEtkColorpickerPtr(SV *data); 
-SV *                   newSVEtkComboboxPtr(Etk_Combobox *o); 
-Etk_Combobox *         SvEtkComboboxPtr(SV *data); 
-SV *                   newSVEtkContainerPtr(Etk_Container *o); 
-Etk_Container *                SvEtkContainerPtr(SV *data); 
-SV *                   newSVEtkDialogPtr(Etk_Dialog *o); 
-Etk_Dialog *           SvEtkDialogPtr(SV *data); 
-SV *                   newSVEtkDragPtr(Etk_Drag *o); 
-Etk_Drag *             SvEtkDragPtr(SV *data); 
-SV *                   newSVEtkEntryPtr(Etk_Entry *o); 
-Etk_Entry *            SvEtkEntryPtr(SV *data); 
-SV *                   newSVEtkFilechooserWidgetPtr(Etk_Filechooser_Widget 
*o); 
-Etk_Filechooser_Widget *SvEtkFilechooserWidgetPtr(SV *data); 
-SV *                   newSVEtkFramePtr(Etk_Frame *o); 
-Etk_Frame *            SvEtkFramePtr(SV *data); 
-SV *                   newSVEtkHBoxPtr(Etk_HBox *o); 
-Etk_HBox *             SvEtkHBoxPtr(SV *data); 
-SV *                   newSVEtkHPanedPtr(Etk_HPaned *o); 
-Etk_HPaned *           SvEtkHPanedPtr(SV *data); 
-SV *                   newSVEtkHScrollbarPtr(Etk_HScrollbar *o); 
-Etk_HScrollbar *       SvEtkHScrollbarPtr(SV *data); 
-SV *                   newSVEtkHSeparatorPtr(Etk_HSeparator *o); 
-Etk_HSeparator *       SvEtkHSeparatorPtr(SV *data); 
-SV *                   newSVEtkHSliderPtr(Etk_HSlider *o); 
-Etk_HSlider *          SvEtkHSliderPtr(SV *data); 
-SV *                   newSVEtkIconboxPtr(Etk_Iconbox *o); 
-Etk_Iconbox *          SvEtkIconboxPtr(SV *data); 
-SV *                   newSVEtkImagePtr(Etk_Image *o); 
-Etk_Image *            SvEtkImagePtr(SV *data); 
-SV *                   newSVEtkLabelPtr(Etk_Label *o); 
-Etk_Label *            SvEtkLabelPtr(SV *data); 
-SV *                   newSVEtkMenuPtr(Etk_Menu *o); 
-Etk_Menu *             SvEtkMenuPtr(SV *data); 
-SV *                   newSVEtkMessageDialogPtr(Etk_Message_Dialog *o); 
-Etk_Message_Dialog *   SvEtkMessageDialogPtr(SV *data); 
-SV *                   newSVEtkNotebookPtr(Etk_Notebook *o); 
-Etk_Notebook *         SvEtkNotebookPtr(SV *data); 
-SV *                   newSVEtkObjectPtr(Etk_Object *o); 
-Etk_Object *           SvEtkObjectPtr(SV *data); 
-SV *                   newSVEtkPanedPtr(Etk_Paned *o); 
-Etk_Paned *            SvEtkPanedPtr(SV *data); 
-SV *                   newSVEtkPopupWindowPtr(Etk_Popup_Window *o); 
-Etk_Popup_Window *     SvEtkPopupWindowPtr(SV *data); 
-SV *                   newSVEtkProgressBarPtr(Etk_Progress_Bar *o); 
-Etk_Progress_Bar *     SvEtkProgressBarPtr(SV *data); 
-SV *                   newSVEtkRadioButtonPtr(Etk_Radio_Button *o); 
-Etk_Radio_Button *     SvEtkRadioButtonPtr(SV *data); 
-SV *                   newSVEtkRangePtr(Etk_Range *o); 
-Etk_Range *            SvEtkRangePtr(SV *data); 
-SV *                   newSVEtkScrolledViewPtr(Etk_Scrolled_View *o); 
-Etk_Scrolled_View *    SvEtkScrolledViewPtr(SV *data); 
-SV *                   newSVEtkSeparatorPtr(Etk_Separator *o); 
-Etk_Separator *                SvEtkSeparatorPtr(SV *data); 
-SV *                   newSVEtkStatusbarPtr(Etk_Statusbar *o); 
-Etk_Statusbar *                SvEtkStatusbarPtr(SV *data); 
-SV *                   newSVEtkTablePtr(Etk_Table *o); 
-Etk_Table *            SvEtkTablePtr(SV *data); 
-SV *                   newSVEtkToolbarPtr(Etk_Toolbar *o); 
-Etk_Toolbar *          SvEtkToolbarPtr(SV *data); 
-SV *                   newSVEtkTextblockPtr(Etk_Textblock *o); 
-Etk_Textblock *                SvEtkTextblockPtr(SV *data); 
-SV *                   newSVEtkTextblockIterPtr(Etk_Textblock_Iter *o); 
-Etk_Textblock_Iter *   SvEtkTextblockIterPtr(SV *data); 
-SV *                   newSVEtkTextViewPtr(Etk_Text_View *o); 
-Etk_Text_View *                SvEtkTextViewPtr(SV *data); 
-SV *                   newSVEtkToggleButtonPtr(Etk_Toggle_Button *o); 
-Etk_Toggle_Button *    SvEtkToggleButtonPtr(SV *data); 
-SV *                   newSVEtkToplevelWidgetPtr(Etk_Toplevel_Widget *o); 
-Etk_Toplevel_Widget *  SvEtkToplevelWidgetPtr(SV *data); 
-SV *                   newSVEtkTreePtr(Etk_Tree *o); 
-Etk_Tree *             SvEtkTreePtr(SV *data); 
-SV *                   newSVEtkVBoxPtr(Etk_VBox *o); 
-Etk_VBox *             SvEtkVBoxPtr(SV *data); 
-SV *                   newSVEtkVPanedPtr(Etk_VPaned *o); 
-Etk_VPaned *           SvEtkVPanedPtr(SV *data); 
-SV *                   newSVEtkVScrollbarPtr(Etk_VScrollbar *o); 
-Etk_VScrollbar *       SvEtkVScrollbarPtr(SV *data); 
-SV *                   newSVEtkVSeparatorPtr(Etk_VSeparator *o); 
-Etk_VSeparator *       SvEtkVSeparatorPtr(SV *data); 
-SV *                   newSVEtkVSliderPtr(Etk_VSlider *o); 
-Etk_VSlider *          SvEtkVSliderPtr(SV *data); 
-SV *                   newSVEtkViewportPtr(Etk_Viewport *o); 
-Etk_Viewport *         SvEtkViewportPtr(SV *data); 
-SV *                   newSVEtkWidgetPtr(Etk_Widget *o); 
-Etk_Widget *           SvEtkWidgetPtr(SV *data); 
-SV *                   newSVEtkWindowPtr(Etk_Window *o); 
-Etk_Window *           SvEtkWindowPtr(SV *data); 
-SV *                   newSVEvasObjectPtr(Evas_Object *o);
-Evas_Object *          SvEvasObjectPtr(SV *data);
-SV *                   newSVEvasPtr(Evas *o);
-Evas *                 SvEvasPtr(SV *data);
-SV *                   newSVEtkComboboxItemPtr(Etk_Combobox_Item *o); 
-Etk_Combobox_Item *    SvEtkComboboxItemPtr(SV *data); 
-SV *                   newSVEtkIconboxIconPtr(Etk_Iconbox_Icon *o); 
-Etk_Iconbox_Icon *     SvEtkIconboxIconPtr(SV *data); 
-SV *                   newSVEtkIconboxModelPtr(Etk_Iconbox_Model *o); 
-Etk_Iconbox_Model *    SvEtkIconboxModelPtr(SV *data); 
-SV *                   newSVEtkMenuBarPtr(Etk_Menu_Bar *o); 
-Etk_Menu_Bar *         SvEtkMenuBarPtr(SV *data); 
-SV *                   newSVEtkMenuItemPtr(Etk_Menu_Item *o); 
-Etk_Menu_Item *                SvEtkMenuItemPtr(SV *data); 
-SV *                   newSVEtkMenuShellPtr(Etk_Menu_Shell *o); 
-Etk_Menu_Shell *       SvEtkMenuShellPtr(SV *data); 
-SV *                   newSVEtkTreeColPtr(Etk_Tree_Col *o); 
-Etk_Tree_Col *         SvEtkTreeColPtr(SV *data); 
-SV *                   newSVEtkTreeModelPtr(Etk_Tree_Model *o); 
-Etk_Tree_Model *       SvEtkTreeModelPtr(SV *data); 
-SV *                   newSVEtkTreeRowPtr(Etk_Tree_Row *o); 
-Etk_Tree_Row *         SvEtkTreeRowPtr(SV *data); 
-SV *                   newSVEtkMenuItemCheckPtr(Etk_Menu_Item_Check *o); 
-Etk_Menu_Item_Check *  SvEtkMenuItemCheckPtr(SV *data); 
-SV *                   newSVEtkMenuItemImagePtr(Etk_Menu_Item_Image *o); 
-Etk_Menu_Item_Image *  SvEtkMenuItemImagePtr(SV *data); 
-SV *                   newSVEtkMenuItemRadioPtr(Etk_Menu_Item_Radio *o); 
-Etk_Menu_Item_Radio *  SvEtkMenuItemRadioPtr(SV *data); 
-SV *                   newSVEtkMenuItemSeparatorPtr(Etk_Menu_Item_Separator 
*o); 
-Etk_Menu_Item_Separator *SvEtkMenuItemSeparatorPtr(SV *data); 
 
 SV *                   newSVEventKeyUp(Etk_Event_Key_Up *ev);
 SV *                   newSVEventKeyDown(Etk_Event_Key_Down *ev);
===================================================================
RCS file: /cvs/e/e17/proto/etk-perl/typemap,v
retrieving revision 1.14
retrieving revision 1.15
diff -u -3 -r1.14 -r1.15
--- typemap     1 Sep 2006 18:34:36 -0000       1.14
+++ typemap     4 Sep 2006 19:39:26 -0000       1.15
@@ -102,7 +102,7 @@
 Etk_Tree_Row *                                 T_PTROBJ_ETK
 Etk_Type *                                     T_PTROBJ
 Etk_Type **                                    T_PTROBJ
-Etk_Widget *                                   T_PTROBJ_ETK
+Etk_Widget *                                   T_PTR_WIDGET
 Etk_Window *                                   T_PTROBJ_ETK
 Evas *                                         T_PTROBJ_ETK
 Evas_List *                                    T_PTROBJ_EVAS_LIST
@@ -143,7 +143,12 @@
 T_PTROBJ_ETK
        if (!$arg || !SvOK($arg))
                croak(\"$var is not of type ${ntype}\");
-       $var = Sv" . ($foo=$ntype, $foo=~s/_//g, $foo) . "($arg);
+       $var = SvObj($arg, getClass(\"". ($foo=$ntype, $foo=~s/Ptr//,$foo). 
"\"));
+
+T_PTR_WIDGET
+       if (!$arg || !SvOK($arg))
+               croak(\"$var is not of type ${ntype}\");
+       $var = SvObj($arg, getClass(\"Etk_Widget\"));
 
 T_COLOR
        if (!$arg || !SvOK($arg))
@@ -178,7 +183,12 @@
 
 T_PTROBJ_ETK
        do { /* hack to redefine the stack and delete class */
-       $arg = sv_2mortal([EMAIL PROTECTED] {s/_//g,1} $ntype]}($var));
+       $arg = sv_2mortal(newSVObj($var, getClass(\"@{[grep {s/Ptr//,1} 
$ntype]}\")));
+       } while (0);
+
+T_PTR_WIDGET
+       do { /* hack to redefine the stack and delete class */
+       $arg = sv_2mortal(newSVObject($var));
        } while (0);
 
 T_COLOR



-------------------------------------------------------------------------
Using Tomcat but need to do more? Need to support web services, security?
Get stuff done quickly with pre-integrated technology to make your job easier
Download IBM WebSphere Application Server v.1.0.1 based on Apache Geronimo
http://sel.as-us.falkag.net/sel?cmd=lnk&kid=120709&bid=263057&dat=121642
_______________________________________________
enlightenment-cvs mailing list
enlightenment-cvs@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/enlightenment-cvs

Reply via email to