diff -uN -x TAGS -x *.map* -x *.o -x *~ ./Makefile /home/aloril/src/g/iso_edit/Makefile
--- ./Makefile	Fri Dec 18 05:47:10 1998
+++ /home/aloril/src/g/iso_edit/Makefile	Tue Dec 22 09:40:53 1998
@@ -20,19 +20,20 @@
 #  the Altima Web Site at http://www.altima.org.
 #
 
-CXXFLAGS=-Wall -pg -g -I$(QTDIR)/include -I. -I/home/yoho2/lavoie/include
-LDFLAGS= -L/home/yoho2/lavoie/lib -L/usr/openwin/lib -L$(QTDIR)/lib
+QWSPRITEDIR=/usr/local/src
+CXXFLAGS=-Wall -pg -g -I$(QTDIR)/include -I. -I$(QWSPRITEDIR) -I/usr/include/python1.5
+LDFLAGS= -L$(QWSPRITEDIR)/QwSprite -L/usr/openwin/lib -L$(QTDIR)/lib -L/usr/X11R6/lib -Xlinker -export-dynamic
 
 
 
-LDLIBS= -lpng -lQwSpriteField -lqimgio  -lqt -lX11 -lXt
+LDLIBS=/usr/lib/python1.5/config/libpython1.5.a -lz -ljpeg -lpng -lQwSpriteField -lqimgio  -lqt -lX11 -lXt -ldl
 
 all: main testpng
 
 testpng: testpng.o moc_testpng.o 
 	$(CXX) -pg -o testpng testpng.o moc_testpng.o $(LDFLAGS) $(LDLIBS)
 
-MAIN_OBJ = main.o moc_main.o GfxSetup.o moc_GfxSetup.o MapSetup.o moc_MapSetup.o sprite.o EditMap.o moc_EditMap.o tile.o
+MAIN_OBJ = main.o moc_main.o GfxSetup.o moc_GfxSetup.o MapSetup.o moc_MapSetup.o sprite.o EditMap.o moc_EditMap.o tile.o observe.o
 
 main: $(MAIN_OBJ) tile.hh
 	$(CXX) -pg -o main $(MAIN_OBJ)  $(LDFLAGS) $(LDLIBS)
@@ -42,4 +43,3 @@
 
 %.o: %.cc %.hh
 	$(COMPILE.cc) $< $(OUTPUT_OPTION)
-
diff -uN -x TAGS -x *.map* -x *.o -x *~ ./main.cc /home/aloril/src/g/iso_edit/main.cc
--- ./main.cc	Fri Dec 18 05:47:40 1998
+++ /home/aloril/src/g/iso_edit/main.cc	Tue Dec 22 08:46:10 1998
@@ -42,6 +42,7 @@
 
 #include "main.hh"
 #include "sprite.hh"
+#include "observe.hh"
 
 const int HEIGHT = 400 ; 
 const int WIDTH = 640 ; 
@@ -143,6 +144,22 @@
   frames++;
 }
 
+void IsoMapField::addTileGfx(int i, int j, TileGfx *tg){
+  if(i<0 || j<0 || i>=map->nX() || j>=map->nY()) return ;
+  map->at(i,j).pushTileGfx(tg) ;
+  emit newTile(&(map->at(i,j)));
+  field.update();
+  refresh();
+}
+
+void IsoMapField::deleteTileGfx(int i, int j, TileGfx *tg){
+  if(i<0 || j<0 || i>=map->nX() || j>=map->nY()) return ;
+  map->at(i,j).deleteTileGfx(tg) ;
+  emit newTile(&(map->at(i,j)));
+  field.update();
+  refresh();
+}
+
 void IsoMapField::mouseEvent(int x, int y, int button, int type, int state){
   static int old_i = -1;
   static int old_j = -1;
@@ -347,6 +364,10 @@
   tile->insertItem("Merge tile list", this, SLOT(mergeTileList()), CTRL+Key_M);
   tile->insertItem("Save tile list", this, SLOT(saveTileList()), CTRL+Key_S) ;
   menu->insertItem("&Tile",tile) ;
+
+  QPopupMenu* obs = new QPopupMenu ;
+  obs->insertItem("Run",this , SLOT(runWorld()), CTRL+Key_R) ;
+  menu->insertItem("&Observe",obs) ;
   
   bool scrollbars=FALSE;
 
@@ -427,6 +448,10 @@
   if(!fileName.isNull()){
     writeList(*listTG,fileName) ;
   }
+}
+
+void IsoEditor::runWorld(){
+    ::runWorld(map_field);
 }
 
 main(int argc, char** argv)
diff -uN -x TAGS -x *.map* -x *.o -x *~ ./main.hh /home/aloril/src/g/iso_edit/main.hh
--- ./main.hh	Fri Dec 18 05:47:42 1998
+++ /home/aloril/src/g/iso_edit/main.hh	Wed Dec 23 10:19:58 1998
@@ -50,6 +50,10 @@
 
 public:
     IsoMapField(bool scrbars, QWidget* parent=0);
+    void addTileGfx(int i, int j, TileGfx *tg);
+    void deleteTileGfx(int i, int j, TileGfx *tg);
+    int getXSize() {return map->nX();}
+    int getYSize() {return map->nY();}
   
 signals:
   void status(const char*);
@@ -101,6 +105,7 @@
   void newTile() ;
   void mergeTileList();
   void saveTileList();
+  void runWorld();
 
 protected:
   void resizeEvent(QResizeEvent* event);
diff -uN -x TAGS -x *.map* -x *.o -x *~ ./observe.cc /home/aloril/src/g/iso_edit/observe.cc
--- ./observe.cc	Thu Jan  1 02:00:00 1970
+++ /home/aloril/src/g/iso_edit/observe.cc	Wed Dec 23 10:44:17 1998
@@ -0,0 +1,119 @@
+#include 
+#include 
+#include 
+#include "Python.h"
+#include "main.hh"
+#include "sprite.hh"
+#include "tile.hh"
+#include "observe.hh"
+
+struct TileInfo 
+{
+    char *name;
+    TileGfx *tg;
+    void addTileInfo(char *name, char *picture);
+};
+
+void TileInfo::addTileInfo(char *name, char *picture)
+{
+    this->name=strdup(name);
+    this->tg=new TileGfx;
+    this->tg->pixmaps=loadSprite(picture);
+}
+
+IsoMapField *last_map;
+TileInfo *ti;
+
+int scale(double n, double min, double max, double size)
+{
+    return (int)(size/(max-min)*(n-min));
+}
+
+
+enum {ADD,DEL};
+void modifyMap(int op, char *name0, double x, double y, double z)
+{
+    int ix,iy;
+    char *name=strdup(name0);
+    TileInfo *i;
+    int j;
+    for(j=0;name[j];j++) if(isdigit(name[j])) name[j]=0;
+    //cout<<"Try:"<name;i++) {
+        if(strcmp(name,i->name)==0) {
+            
+            ix=scale(x,-200.0,200.0, last_map->getXSize());
+            iy=scale(y,-200.0,200.0, last_map->getYSize());
+            //cout<name<<":"<addTileGfx(ix,iy,i->tg); break;
+            case DEL: last_map->deleteTileGfx(ix,iy,i->tg); break;
+            }
+        }
+    }
+}
+
+static PyObject *IsoObserverAdd(PyObject *self, PyObject *args)
+{
+    char *name;
+    double x,y,z;
+
+    if (!PyArg_ParseTuple(args, "sddd", &name,&x,&y,&z)) return NULL;
+    modifyMap(ADD,name,x,y,z);
+    return Py_None;
+}
+
+static PyObject *IsoObserverDel(PyObject *self, PyObject *args)
+{
+    char *name;
+    double x,y,z;
+
+    if (!PyArg_ParseTuple(args, "sddd", &name,&x,&y,&z)) return NULL;
+    modifyMap(DEL,name,x,y,z);
+    return Py_None;
+}
+
+
+static PyMethodDef IsoObserverMethods[] = {
+    {"map_add",  IsoObserverAdd, METH_VARARGS},
+    {"map_del",  IsoObserverDel, METH_VARARGS},
+    {NULL,      NULL}        /* Sentinel */
+};
+
+void initIsoObserver()
+{
+    (void) Py_InitModule("IsoObserver", IsoObserverMethods);
+}
+
+void runWorld(IsoMapField *map){
+    static int initDone=FALSE;
+//    static tmp=0;
+    last_map=map;
+    if(!initDone) {
+        ti=new TileInfo[6];
+        // House
+        ti[0].addTileInfo("house","gfx/objects/bedA.png");
+        ti[1].addTileInfo("smithy","gfx/client/mouse_pointer.png");
+        ti[2].addTileInfo("farmer","gfx/objects/penguinA.png");
+        ti[3].addTileInfo("smith","gfx/asian/warrior.0.png");
+        ti[4].addTileInfo("fire","gfx/cursor2.png");
+        ti[5].name=NULL;
+        
+        /* Initialize the Python interpreter. */
+        Py_Initialize();
+        // initialize Cyphesis
+        PyRun_SimpleString("from observe import observe\n");
+        initIsoObserver();
+        PyRun_SimpleString("from IsoObserver import *\n");
+        //Use remote CORBA
+        //PyRun_SimpleString("obs=observe(1,map_add=map_add,map_del=map_del)\n");
+        //Use local CORBA
+        PyRun_SimpleString("obs=observe(0,map_add=map_add,map_del=map_del)\n");
+        initDone=TRUE;
+    }
+    //Display events as text
+    //PyRun_SimpleString("obs.text(1)\n");
+    //Display text graphics
+    PyRun_SimpleString("obs.dsp(1)\n");
+}
diff -uN -x TAGS -x *.map* -x *.o -x *~ ./observe.hh /home/aloril/src/g/iso_edit/observe.hh
--- ./observe.hh	Thu Jan  1 02:00:00 1970
+++ /home/aloril/src/g/iso_edit/observe.hh	Tue Dec 22 06:54:19 1998
@@ -0,0 +1 @@
+void runWorld(IsoMapField *map);
diff -uN -x TAGS -x *.map* -x *.o -x *~ ./tile.cc /home/aloril/src/g/iso_edit/tile.cc
--- ./tile.cc	Fri Dec 18 05:48:30 1998
+++ /home/aloril/src/g/iso_edit/tile.cc	Tue Dec 22 07:15:31 1998
@@ -154,6 +154,21 @@
   gfxSprite.push_back(ts) ;
 }
 
+void Tile::deleteTileGfx(TileGfx* tg)
+{
+  for(list::iterator it = gfxSprite.begin(); it != gfxSprite.end() ; ){
+    if(tg == (*it)->gfx){
+      list::iterator nit = it ;
+      ++nit;
+      gfxSprite.remove(*it);
+      it = nit ; 
+    }
+    else{
+      ++it ; 
+    }
+  }
+}
+
 void Tile::deleteTileType(TileGfxType t){
   for(list::iterator it = gfxSprite.begin(); it != gfxSprite.end() ; ){
     if(t == (*it)->gfx->type){
diff -uN -x TAGS -x *.map* -x *.o -x *~ ./tile.hh /home/aloril/src/g/iso_edit/tile.hh
--- ./tile.hh	Fri Dec 18 05:48:39 1998
+++ /home/aloril/src/g/iso_edit/tile.hh	Tue Dec 22 06:44:33 1998
@@ -99,6 +99,7 @@
 
   void pushTileGfx(TileGfx* tg);
   void pushTileGfx(TileGfx* tg,int z,int dx, int dy);
+  void deleteTileGfx(TileGfx* tg);
   void deleteTileType(TileGfxType) ;
   void updateSprites() ;
   int read(ifstream& is) ;

    Source: geocities.com/siliconvalley/station/4279/src

               ( geocities.com/siliconvalley/station/4279)                   ( geocities.com/siliconvalley/station)                   ( geocities.com/siliconvalley)