stratagus-cvs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Stratagus-CVS] stratagus doc/ChangeLog.html src/ai/new_ai.c sr...


From: Crestez Leonard
Subject: [Stratagus-CVS] stratagus doc/ChangeLog.html src/ai/new_ai.c sr...
Date: Sun, 17 Aug 2003 11:57:10 -0400

CVSROOT:        /cvsroot/stratagus
Module name:    stratagus
Branch:         
Changes by:     Crestez Leonard <address@hidden>        03/08/17 11:57:08

Modified files:
        doc            : ChangeLog.html 
        src/ai         : new_ai.c 
        src/clone      : ccl.c ccl_player.c construct.c groups.c iolib.c 
                         player.c pud.c selection.c unit.c unit_draw.c 
        src/editor     : editloop.c 
        src/game       : campaign.c intro.c savegame.c trigger.c 
        src/include    : ai.h campaign.h ccl.h construct.h cursor.h 
                         depend.h icons.h interface.h iolib.h map.h 
                         missile.h player.h settings.h siod.h tileset.h 
                         trigger.h ui.h unit.h unittype.h upgrade.h 
        src/map        : map_save.c tileset.c 
        src/missile    : missile.c 
        src/movie      : avi.c 
        src/siod       : slib.c 
        src/sound      : mad.c music.c ogg.c wav.c 
        src/ui         : botpanel.c icons.c interface.c mainscr.c 
                         menus.c ui.c 
        src/unit       : depend.c unittype.c upgrade.c 
        src/video      : cursor.c png.c video.c 

Log message:
        Can now save in gz format.
        Fix for draw order bug.

Patches:
Index: stratagus/doc/ChangeLog.html
diff -u stratagus/doc/ChangeLog.html:1.512 stratagus/doc/ChangeLog.html:1.513
--- stratagus/doc/ChangeLog.html:1.512  Sat Aug 16 20:26:31 2003
+++ stratagus/doc/ChangeLog.html        Sun Aug 17 11:57:05 2003
@@ -2,7 +2,7 @@
 <html>
 <head>
 <!--
-----   $Id: ChangeLog.html,v 1.512 2003/08/17 00:26:31 n0body Exp $
+----   $Id: ChangeLog.html,v 1.513 2003/08/17 15:57:05 n0body Exp $
 
 ----   (c) Copyright 1998-2003 by Lutz Sammer
 
@@ -36,6 +36,8 @@
 <li>Future 1.19 Release<p>
     <ul>
     <li>++
+    <li>You can now save in gz format (from Russel Smith and Crestez Leonard).
+    <li>Fixed drawing order for units on the same level (from Russel Smith).
     <li>Remove *ScreenMapPositon bloat (from Crestez Leonard).
     <li>Fixed MacOS X compilation problems (from Duncan McQueen).
     <li>Fixed middle-mouse scrolling, speed now configurable (from Martin 
Renold).
@@ -56,6 +58,9 @@
     <li>Compacted Unit::Rescued and Unit::Rescued from (from Crestez Dan 
Leonard).
     <li>Change Unit::Colors to a pointer(saves memory) (from Crestez Dan 
Leonard).
     <li>Renamed project to Stratagus and fixed most internal references to the 
Freecraft name (From Ingo Ruhnke).
+    </ul>
+<p><li>Freecraft renamed to Stratagus.<p>
+    <ul>
     <li>You can select two units on different land masses and they will both 
board (from Crestez Dan Leonard).
     <li>Set Harvest with right-click from a building (from Crestez Dan 
Leonard).
     <li>Fixed bug where transporter and unit follow each other (from Crestez 
Dan Leonard).
Index: stratagus/src/ai/new_ai.c
diff -u stratagus/src/ai/new_ai.c:1.68 stratagus/src/ai/new_ai.c:1.69
--- stratagus/src/ai/new_ai.c:1.68      Fri Aug  1 15:30:36 2003
+++ stratagus/src/ai/new_ai.c   Sun Aug 17 11:57:06 2003
@@ -26,7 +26,7 @@
 //      Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
 //      02111-1307, USA.
 //
-//      $Id: new_ai.c,v 1.68 2003/08/01 19:30:36 grumbel Exp $
+//      $Id: new_ai.c,v 1.69 2003/08/17 15:57:06 n0body Exp $
 
 #ifdef NEW_AI  // {
 
@@ -350,7 +350,7 @@
 **
 **     @param file     Output file.
 */
-local void SaveAiTypesWcName(FILE* file)
+local void SaveAiTypesWcName(CLFile *file)
 {
     char** cp;
     int i;
@@ -359,16 +359,16 @@
     // Dump table wc2 race numbers -> internal symbol.
     //
     if( (cp=AiTypeWcNames) ) {
-       fprintf(file,"(define-ai-wc-names");
+       CLprintf(file,"(define-ai-wc-names");
 
        i=90;
        while( *cp ) {
            if( i+strlen(*cp)>79 ) {
-               i=fprintf(file,"\n ");
+               i=CLprintf(file,"\n ");
            }
-           i+=fprintf(file," '%s",*cp++);
+           i+=CLprintf(file," '%s",*cp++);
        }
-       fprintf(file,")\n\n");
+       CLprintf(file,")\n\n");
     }
 }
 
@@ -381,7 +381,7 @@
 **     @param n        Number of elements in table
 **     @param table    unit-type table.
 */
-local void SaveAiHelperTable(FILE* file,const char* name,int upgrade,int n,
+local void SaveAiHelperTable(CLFile* file,const char* name,int upgrade,int n,
        AiUnitTypeTable*const * table)
 {
     int t;
@@ -396,27 +396,27 @@
                for( j=0; j<table[i]->Count; ++j ) {
                    if( table[i]->Table[j]->Type==t ) {
                        if( !f ) {
-                           fprintf(file,"\n  (list '%s '%s\n    ",name,
+                           CLprintf(file,"\n  (list '%s '%s\n    ",name,
                                    UnitTypes[t]->Ident);
                            f=4;
                        }
                        if( upgrade ) {
                            if( f+strlen(Upgrades[i].Ident)>78 ) {
-                               f=fprintf(file,"\n    ");
+                               f=CLprintf(file,"\n    ");
                            }
-                           f+=fprintf(file,"'%s ",Upgrades[i].Ident);
+                           f+=CLprintf(file,"'%s ",Upgrades[i].Ident);
                        } else {
                            if( f+strlen(UnitTypes[i]->Ident)>78 ) {
-                               f=fprintf(file,"\n    ");
+                               f=CLprintf(file,"\n    ");
                            }
-                           f+=fprintf(file,"'%s ",UnitTypes[i]->Ident);
+                           f+=CLprintf(file,"'%s ",UnitTypes[i]->Ident);
                        }
                    }
                }
            }
        }
        if( f ) {
-           fprintf(file,")");
+           CLprintf(file,")");
        }
     }
 }
@@ -429,7 +429,7 @@
 **     @param n        Number of elements in table
 **     @param table    unit-type table.
 */
-local void SaveAiEquivTable(FILE* file,const char* name,int n,
+local void SaveAiEquivTable(CLFile* file,const char* name,int n,
        AiUnitTypeTable*const * table)
 {
     int i;
@@ -438,16 +438,16 @@
 
     for( i=0; i<n; ++i ) {
        if( table[i] ) {
-           fprintf(file,"\n  (list '%s '%s\n    ",name,
+           CLprintf(file,"\n  (list '%s '%s\n    ",name,
                    UnitTypes[i]->Ident);
            f=4;
            for( j=0; j<table[i]->Count; ++j ) {
                if( f+strlen(table[i]->Table[j]->Ident)>78 ) {
-                   f=fprintf(file,"\n    ");
+                   f=CLprintf(file,"\n    ");
                }
-               f+=fprintf(file,"'%s ",table[i]->Table[j]->Ident);
+               f+=CLprintf(file,"'%s ",table[i]->Table[j]->Ident);
            }
-           fprintf(file,")");
+           CLprintf(file,")");
        }
     }
 }
@@ -460,7 +460,7 @@
 **     @param n        Number of elements in table
 **     @param table    unit-type table.
 */
-local void SaveAiCostTable(FILE* file,const char* name,int n,
+local void SaveAiCostTable(CLFile* file,const char* name,int n,
        AiUnitTypeTable*const * table)
 {
     int t;
@@ -475,20 +475,20 @@
                for( j=0; j<table[i]->Count; ++j ) {
                    if( table[i]->Table[j]->Type==t ) {
                        if( !f ) {
-                           fprintf(file,"\n  (list '%s '%s\n    ",name,
+                           CLprintf(file,"\n  (list '%s '%s\n    ",name,
                                    UnitTypes[t]->Ident);
                            f=4;
                        }
                        if( f+strlen(DefaultResourceNames[i])>78 ) {
-                           f=fprintf(file,"\n    ");
+                           f=CLprintf(file,"\n    ");
                        }
-                       f+=fprintf(file,"'%s ",DefaultResourceNames[i]);
+                       f+=CLprintf(file,"'%s ",DefaultResourceNames[i]);
                    }
                }
            }
        }
        if( f ) {
-           fprintf(file,")");
+           CLprintf(file,")");
        }
     }
 }
@@ -501,7 +501,7 @@
 **     @param n        Number of elements in table
 **     @param table    unit-type table.
 */
-local void SaveAiUnitLimitTable(FILE* file,const char* name,int n,
+local void SaveAiUnitLimitTable(CLFile* file,const char* name,int n,
        AiUnitTypeTable*const * table)
 {
     int t;
@@ -516,20 +516,20 @@
                for( j=0; j<table[i]->Count; ++j ) {
                    if( table[i]->Table[j]->Type==t ) {
                        if( !f ) {
-                           fprintf(file,"\n  (list '%s '%s\n    ",name,
+                           CLprintf(file,"\n  (list '%s '%s\n    ",name,
                                    UnitTypes[t]->Ident);
                            f=4;
                        }
                        if( f+strlen("food")>78 ) {
-                           f=fprintf(file,"\n    ");
+                           f=CLprintf(file,"\n    ");
                        }
-                       f+=fprintf(file,"'%s ","food");
+                       f+=CLprintf(file,"'%s ","food");
                    }
                }
            }
        }
        if( f ) {
-           fprintf(file,")");
+           CLprintf(file,")");
        }
     }
 }
@@ -538,9 +538,9 @@
 **
 **     @param file     Output file.
 */
-local void SaveAiHelper(FILE* file)
+local void SaveAiHelper(CLFile* file)
 {
-    fprintf(file,"(define-ai-helper");
+    CLprintf(file,"(define-ai-helper");
     //
     // Save build table
     //
@@ -592,7 +592,7 @@
     SaveAiEquivTable(file,"unit-equiv",AiHelpers.EquivCount,
            AiHelpers.Equiv);
 
-    fprintf(file," )\n\n");
+    CLprintf(file," )\n\n");
 }
 
 /**
@@ -601,7 +601,7 @@
 **     @param file     Output file.
 **     @param aitype   AI type to save.
 */
-local void SaveAiType(FILE* file,const AiType* aitype)
+local void SaveAiType(CLFile* file,const AiType* aitype)
 {
     SCM list;
 
@@ -609,18 +609,18 @@
        SaveAiType(file,aitype->Next);
     }
     DebugLevel3Fn("%s,%s,%s\n" _C_ aitype->Name _C_ aitype->Race _C_ 
aitype->Class);
-    fprintf(file,"(define-ai \"%s\" '%s '%s\n",
+    CLprintf(file,"(define-ai \"%s\" '%s '%s\n",
            aitype->Name,aitype->Race ? aitype->Race : "*",aitype->Class);
 
-    fprintf(file,"  '(");
+    CLprintf(file,"  '(");
     // Print the script a little formated
     list=aitype->Script;
     while( !gh_null_p(list) ) {
-       fprintf(file,"\n    ");
-       lprin1f(gh_car(list),file);
+       CLprintf(file,"\n    ");
+       lprin1CL(gh_car(list),file);
        list=gh_cdr(list);
     }
-    fprintf(file," ))\n\n");
+    CLprintf(file," ))\n\n");
 }
 
 /**
@@ -628,7 +628,7 @@
 **
 **     @param file     Output file.
 */
-local void SaveAiTypes(FILE* file)
+local void SaveAiTypes(CLFile*file)
 {
     SaveAiType(file,AiTypes);
 
@@ -643,14 +643,14 @@
 **     @param plynr    Player number.
 **     @param ai       Player AI.
 */
-local void SaveAiPlayer(FILE* file,unsigned plynr,const PlayerAi* ai)
+local void SaveAiPlayer(CLFile* file,unsigned plynr,const PlayerAi* ai)
 {
     SCM script;
     int i;
     const AiBuildQueue* queue;
 
-    fprintf(file,"(define-ai-player %u\n",plynr);
-    fprintf(file,"  'ai-type '%s\n",ai->AiType->Name);
+    CLprintf(file,"(define-ai-player %u\n",plynr);
+    CLprintf(file,"  'ai-type '%s\n",ai->AiType->Name);
     //
     // Find the script.
     //
@@ -659,7 +659,7 @@
        script=ai->AiType->Script;
        do {
            if( ai->Script==script ) {
-               fprintf(file,"  'script '(aitypes %d)\n",i);
+               CLprintf(file,"  'script '(aitypes %d)\n",i);
                break;
            }
            script=gh_cdr(script);
@@ -668,12 +668,12 @@
 
        if( gh_null_p(script) ) {       // Not found in ai-types.
            DebugLevel0Fn("FIXME: not written\n");
-           fprintf(file,"  'script '(FIXME: %d)\n",i);
+           CLprintf(file,"  'script '(FIXME: %d)\n",i);
        }
 
     }
-    fprintf(file,"  'script-debug #%s\n",ai->ScriptDebug ? "t" : "f");
-    fprintf(file,"  'sleep-cycles %lu\n",ai->SleepCycles);
+    CLprintf(file,"  'script-debug #%s\n",ai->ScriptDebug ? "t" : "f");
+    CLprintf(file,"  'sleep-cycles %lu\n",ai->SleepCycles);
 
     //
     // All forces
@@ -682,114 +682,114 @@
        const AiUnitType* aut;
        const AiUnit* aiunit;
 
-       fprintf(file,"  'force '(%d %s%s%s",i,
+       CLprintf(file,"  'force '(%d %s%s%s",i,
                ai->Force[i].Completed ? "complete" : "recruit",
                ai->Force[i].Attacking ? " attack" : "",
                ai->Force[i].Defending ? " defend" : "");
 
-       fprintf(file," role ");
+       CLprintf(file," role ");
        switch( ai->Force[i].Role ) {
            case AiForceRoleAttack:
-               fprintf(file,"attack");
+               CLprintf(file,"attack");
                break;
            case AiForceRoleDefend:
-               fprintf(file,"defend");
+               CLprintf(file,"defend");
                break;
            default:
-               fprintf(file,"unknown");
+               CLprintf(file,"unknown");
                break;
        }
 
-       fprintf(file,"\n    types ( ");
+       CLprintf(file,"\n    types ( ");
        for( aut=ai->Force[i].UnitTypes; aut; aut=aut->Next ) {
-           fprintf(file,"%d %s ",aut->Want,aut->Type->Ident);
+           CLprintf(file,"%d %s ",aut->Want,aut->Type->Ident);
        }
-       fprintf(file,")\n    units (");
+       CLprintf(file,")\n    units (");
        for( aiunit=ai->Force[i].Units; aiunit; aiunit=aiunit->Next ) {
-           fprintf(file," %d %s",UnitNumber(aiunit->Unit),
+           CLprintf(file," %d %s",UnitNumber(aiunit->Unit),
                    aiunit->Unit->Type->Ident);
        }
-       fprintf(file," ))\n");
+       CLprintf(file," ))\n");
     }
 
-    fprintf(file,"  'reserve '(");
+    CLprintf(file,"  'reserve '(");
     for( i=0; i<MaxCosts; ++i ) {
-       fprintf(file,"%s %d ",DefaultResourceNames[i],ai->Reserve[i]);
+       CLprintf(file,"%s %d ",DefaultResourceNames[i],ai->Reserve[i]);
     }
-    fprintf(file,")\n");
+    CLprintf(file,")\n");
 
-    fprintf(file,"  'used '(");
+    CLprintf(file,"  'used '(");
     for( i=0; i<MaxCosts; ++i ) {
-       fprintf(file,"%s %d ",DefaultResourceNames[i],ai->Used[i]);
+       CLprintf(file,"%s %d ",DefaultResourceNames[i],ai->Used[i]);
     }
-    fprintf(file,")\n");
+    CLprintf(file,")\n");
 
-    fprintf(file,"  'needed '(");
+    CLprintf(file,"  'needed '(");
     for( i=0; i<MaxCosts; ++i ) {
-       fprintf(file,"%s %d ",DefaultResourceNames[i],ai->Needed[i]);
+       CLprintf(file,"%s %d ",DefaultResourceNames[i],ai->Needed[i]);
     }
-    fprintf(file,")\n");
+    CLprintf(file,")\n");
 
-    fprintf(file,"  'collect '(");
+    CLprintf(file,"  'collect '(");
     for( i=0; i<MaxCosts; ++i ) {
-       fprintf(file,"%s %d ",DefaultResourceNames[i],ai->Collect[i]);
+       CLprintf(file,"%s %d ",DefaultResourceNames[i],ai->Collect[i]);
     }
-    fprintf(file,")\n");
+    CLprintf(file,")\n");
 
-    fprintf(file,"  'need-mask '(");
+    CLprintf(file,"  'need-mask '(");
     for( i=0; i<MaxCosts; ++i ) {
        if( ai->NeededMask&(1<<i) ) {
-           fprintf(file,"%s ",DefaultResourceNames[i]);
+           CLprintf(file,"%s ",DefaultResourceNames[i]);
        }
     }
-    fprintf(file,")\n");
+    CLprintf(file,")\n");
 
     if( ai->NeedFood ) {
-       fprintf(file,"  'need-food\n");
+       CLprintf(file,"  'need-food\n");
     }
 
     //
     // Requests
     //
-    fprintf(file,"  'unit-type '(");
+    CLprintf(file,"  'unit-type '(");
     for( i=0; i<ai->UnitTypeRequestsCount; ++i ) {
-       fprintf(file,"%s ",ai->UnitTypeRequests[i].Table[0]->Ident);
-       fprintf(file,"%d ",ai->UnitTypeRequests[i].Count);
+       CLprintf(file,"%s ",ai->UnitTypeRequests[i].Table[0]->Ident);
+       CLprintf(file,"%d ",ai->UnitTypeRequests[i].Count);
     }
-    fprintf(file,")\n");
+    CLprintf(file,")\n");
 
-    fprintf(file,"  'upgrade '(");
+    CLprintf(file,"  'upgrade '(");
     for( i=0; i<ai->UpgradeToRequestsCount; ++i ) {
-       fprintf(file,"%s ",ai->UpgradeToRequests[i]->Ident);
+       CLprintf(file,"%s ",ai->UpgradeToRequests[i]->Ident);
     }
-    fprintf(file,")\n");
+    CLprintf(file,")\n");
 
-    fprintf(file,"  'research '(");
+    CLprintf(file,"  'research '(");
     for( i=0; i<ai->ResearchRequestsCount; ++i ) {
-       fprintf(file,"%s ",ai->ResearchRequests[i]->Ident);
+       CLprintf(file,"%s ",ai->ResearchRequests[i]->Ident);
     }
-    fprintf(file,")\n");
+    CLprintf(file,")\n");
 
     //
     // Building queue
     //
-    fprintf(file,"  'building '(");
+    CLprintf(file,"  'building '(");
     for( queue=ai->UnitTypeBuilded; queue; queue=queue->Next ) {
-       fprintf(file,"%s %d %d ",queue->Type->Ident,queue->Made,queue->Want);
+       CLprintf(file,"%s %d %d ",queue->Type->Ident,queue->Made,queue->Want);
     }
-    fprintf(file,")\n");
+    CLprintf(file,")\n");
 
-    fprintf(file,"  'repair-building %u\n",ai->LastRepairBuilding);
+    CLprintf(file,"  'repair-building %u\n",ai->LastRepairBuilding);
 
-    fprintf(file,"  'repair-workers '(");
+    CLprintf(file,"  'repair-workers '(");
     for( i=0; i<UnitMax; ++i ) {
        if( ai->TriedRepairWorkers[i] ) {
-           fprintf(file,"%d %d ",i,ai->TriedRepairWorkers[i]);
+           CLprintf(file,"%d %d ",i,ai->TriedRepairWorkers[i]);
        }
     }
-    fprintf(file,")");
+    CLprintf(file,")");
 
-    fprintf(file,")\n\n");
+    CLprintf(file,")\n\n");
 }
 
 /**
@@ -797,7 +797,7 @@
 **
 **     @param file     Output file.
 */
-local void SaveAiPlayers(FILE* file)
+local void SaveAiPlayers(CLFile*file)
 {
     unsigned p;
 
@@ -813,10 +813,10 @@
 **
 **     @param file     Output file.
 */
-global void SaveAi(FILE* file)
+global void SaveAi(CLFile* file)
 {
-    fprintf(file,"\n;;; -----------------------------------------\n");
-    fprintf(file,";;; MODULE: AI $Id: new_ai.c,v 1.68 2003/08/01 19:30:36 
grumbel Exp $\n\n");
+    CLprintf(file,"\n;;; -----------------------------------------\n");
+    CLprintf(file,";;; MODULE: AI $Id: new_ai.c,v 1.69 2003/08/17 15:57:06 
n0body Exp $\n\n");
 
     SaveAiTypesWcName(file);
     SaveAiHelper(file);
Index: stratagus/src/clone/ccl.c
diff -u stratagus/src/clone/ccl.c:1.107 stratagus/src/clone/ccl.c:1.108
--- stratagus/src/clone/ccl.c:1.107     Sat Aug  2 09:34:24 2003
+++ stratagus/src/clone/ccl.c   Sun Aug 17 11:57:06 2003
@@ -26,7 +26,7 @@
 //      Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
 //      02111-1307, USA.
 //
-//     $Id: ccl.c,v 1.107 2003/08/02 13:34:24 grumbel Exp $
+//     $Id: ccl.c,v 1.108 2003/08/17 15:57:06 n0body Exp $
 
 //@{
 
@@ -1023,7 +1023,7 @@
     }
 
     fprintf(fd,";;; -----------------------------------------\n");
-    fprintf(fd,";;; $Id: ccl.c,v 1.107 2003/08/02 13:34:24 grumbel Exp $\n");
+    fprintf(fd,";;; $Id: ccl.c,v 1.108 2003/08/17 15:57:06 n0body Exp $\n");
 
     fprintf(fd,"(set-video-resolution! %d %d)\n", VideoWidth, VideoHeight);
     
@@ -1047,7 +1047,7 @@
     }
 
     fprintf(fd,";;; -----------------------------------------\n");
-    fprintf(fd,";;; $Id: ccl.c,v 1.107 2003/08/02 13:34:24 grumbel Exp $\n");
+    fprintf(fd,";;; $Id: ccl.c,v 1.108 2003/08/17 15:57:06 n0body Exp $\n");
 
     // Global options
     if( OriginalFogOfWar ) {
@@ -1149,15 +1149,15 @@
 **
 **     @param file     Save file.
 */
-global void SaveCcl(FILE* file)
+global void SaveCcl(CLFile* file)
 {
 #ifdef USE_GUILE
 #else
     SCM list;
     extern SCM oblistvar;
 
-    fprintf(file,"\n;;; -----------------------------------------\n");
-    fprintf(file,";;; MODULE: CCL $Id: ccl.c,v 1.107 2003/08/02 13:34:24 
grumbel Exp $\n\n");
+    CLprintf(file,"\n;;; -----------------------------------------\n");
+    CLprintf(file,";;; MODULE: CCL $Id: ccl.c,v 1.108 2003/08/17 15:57:06 
n0body Exp $\n\n");
 
     for(list = oblistvar; gh_list_p(list); list = gh_cdr(list) ) {
        SCM sym;
@@ -1166,14 +1166,14 @@
        if(symbol_boundp(sym, NIL)) {
            SCM value;
 
-           fprintf(file,";;(define %s\n",get_c_string(sym));
+           CLprintf(file,";;(define %s\n",get_c_string(sym));
            value = symbol_value(sym, NIL);
-           fprintf(file,";;");
-           lprin1f(value,file);
-           fprintf(file,"\n");
+           CLprintf(file,";;");
+           lprin1CL(value,file);
+           CLprintf(file,"\n");
 #ifdef DEBUG
        } else {
-           fprintf(file,";;%s unbound\n",get_c_string(sym));
+           CLprintf(file,";;%s unbound\n",get_c_string(sym));
 #endif
        }
     }
Index: stratagus/src/clone/ccl_player.c
diff -u stratagus/src/clone/ccl_player.c:1.38 
stratagus/src/clone/ccl_player.c:1.39
--- stratagus/src/clone/ccl_player.c:1.38       Fri Aug  8 06:16:43 2003
+++ stratagus/src/clone/ccl_player.c    Sun Aug 17 11:57:06 2003
@@ -26,7 +26,7 @@
 //      Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
 //      02111-1307, USA.
 //
-//     $Id: ccl_player.c,v 1.38 2003/08/08 10:16:43 martinxyz Exp $
+//     $Id: ccl_player.c,v 1.39 2003/08/17 15:57:06 n0body Exp $
 
 //@{
 
@@ -508,6 +508,7 @@
     SCM value;
     int i;
 
+    PlayerRaces.Count=0;
     while( !gh_null_p(list) ) {
        value=gh_car(list);
        list=gh_cdr(list);
Index: stratagus/src/clone/construct.c
diff -u stratagus/src/clone/construct.c:1.33 
stratagus/src/clone/construct.c:1.34
--- stratagus/src/clone/construct.c:1.33        Sat Aug  9 16:08:38 2003
+++ stratagus/src/clone/construct.c     Sun Aug 17 11:57:06 2003
@@ -26,7 +26,7 @@
 //      Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
 //      02111-1307, USA.
 //
-//     $Id: construct.c,v 1.33 2003/08/09 20:08:38 martinxyz Exp $
+//     $Id: construct.c,v 1.34 2003/08/17 15:57:06 n0body Exp $
 
 //@{
 
@@ -138,7 +138,7 @@
 **
 **     @param file     Output file.
 */
-global void SaveConstructions(FILE* file)
+global void SaveConstructions(CLFile* file)
 {
     int j;
     int i;
@@ -146,8 +146,8 @@
     Construction** cop;
     ConstructionFrame* cframe;
 
-    fprintf(file,"\n;;; -----------------------------------------\n");
-    fprintf(file,";;; MODULE: constructions $Id: construct.c,v 1.33 2003/08/09 
20:08:38 martinxyz Exp $\n\n");
+    CLprintf(file,"\n;;; -----------------------------------------\n");
+    CLprintf(file,";;; MODULE: constructions $Id: construct.c,v 1.34 
2003/08/17 15:57:06 n0body Exp $\n\n");
 
     // FIXME: needed?
     
@@ -155,16 +155,16 @@
     // Dump table wc2 construction numbers -> internal symbol.
     //
     if( (cp=ConstructionWcNames) ) {
-       fprintf(file,"(define-construction-wc-names");
+       CLprintf(file,"(define-construction-wc-names");
 
        i=90;
        while( *cp ) {
            if( i+strlen(*cp)>79 ) {
-               i=fprintf(file,"\n ");
+               i=CLprintf(file,"\n ");
            }
-           i+=fprintf(file," '%s",*cp++);
+           i+=CLprintf(file," '%s",*cp++);
        }
-       fprintf(file,")\n\n");
+       CLprintf(file,")\n\n");
     }
 
     //
@@ -175,43 +175,43 @@
            if( !(*cop)->Ident ) {
                continue;
            }
-           fprintf(file,"(define-construction '%s\n",(*cop)->Ident);
+           CLprintf(file,"(define-construction '%s\n",(*cop)->Ident);
            for( j=0; j<TilesetMax; ++j ) {
                if( !(*cop)->File[j].File ) {
                    continue;
                }
-               fprintf(file,"  'file '(\n");
-               fprintf(file,"    tileset %s\n",Tilesets[j]->Class);
-               fprintf(file,"    file  \"%s\"\n",(*cop)->File[j].File);
-               fprintf(file,"    size (%d %d))\n",(*cop)->File[j].Width,
+               CLprintf(file,"  'file '(\n");
+               CLprintf(file,"    tileset %s\n",Tilesets[j]->Class);
+               CLprintf(file,"    file  \"%s\"\n",(*cop)->File[j].File);
+               CLprintf(file,"    size (%d %d))\n",(*cop)->File[j].Width,
                        (*cop)->File[j].Height);
            }
            for( j=0; j<TilesetMax; ++j ) {
                if( !(*cop)->ShadowFile[j].File ) {
                    continue;
                }
-               fprintf(file,"  'shadow-file '(\n");
-               fprintf(file,"    tileset %s\n",Tilesets[j]->Class);
-               fprintf(file,"    file  \"%s\"\n",(*cop)->ShadowFile[j].File);
-               fprintf(file,"    size (%d %d))\n",(*cop)->ShadowFile[j].Width,
+               CLprintf(file,"  'shadow-file '(\n");
+               CLprintf(file,"    tileset %s\n",Tilesets[j]->Class);
+               CLprintf(file,"    file  \"%s\"\n",(*cop)->ShadowFile[j].File);
+               CLprintf(file,"    size (%d %d))\n",(*cop)->ShadowFile[j].Width,
                        (*cop)->ShadowFile[j].Height);
            }
            cframe=(*cop)->Frames;
            if( cframe ) {
-               fprintf(file,"  'constructions (list");
+               CLprintf(file,"  'constructions (list");
                while( cframe ) {
-                   fprintf(file,"\n    '(percent %d\n",cframe->Percent);
+                   CLprintf(file,"\n    '(percent %d\n",cframe->Percent);
                    if( cframe->File==ConstructionFileConstruction ) {
-                       fprintf(file,"      file construction\n");
+                       CLprintf(file,"      file construction\n");
                    } else {
-                       fprintf(file,"      file main\n");
+                       CLprintf(file,"      file main\n");
                    }
-                   fprintf(file,"      frame %d)",cframe->Frame);
+                   CLprintf(file,"      frame %d)",cframe->Frame);
                    cframe=cframe->Next;
                }
-               fprintf(file,")\n");
+               CLprintf(file,")\n");
            }
-           fprintf(file,")\n\n");
+           CLprintf(file,")\n\n");
            ++cop;
        }
     }
Index: stratagus/src/clone/groups.c
diff -u stratagus/src/clone/groups.c:1.20 stratagus/src/clone/groups.c:1.21
--- stratagus/src/clone/groups.c:1.20   Fri Jul 11 10:35:30 2003
+++ stratagus/src/clone/groups.c        Sun Aug 17 11:57:06 2003
@@ -26,7 +26,7 @@
 //      Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
 //      02111-1307, USA.
 //
-//     $Id: groups.c,v 1.20 2003/07/11 14:35:30 n0body Exp $
+//     $Id: groups.c,v 1.21 2003/08/17 15:57:06 n0body Exp $
 
 //@{
 
@@ -86,23 +86,23 @@
 **
 **     @param file     Output file.
 */
-global void SaveGroups(FILE* file)
+global void SaveGroups(CLFile* file)
 {
     int i;
     int g;
     char* ref;
 
-    fprintf(file,"\n;;; -----------------------------------------\n");
-    fprintf(file,";;; MODULE: groups $Id: groups.c,v 1.20 2003/07/11 14:35:30 
n0body Exp $\n\n");
+    CLprintf(file,"\n;;; -----------------------------------------\n");
+    CLprintf(file,";;; MODULE: groups $Id: groups.c,v 1.21 2003/08/17 15:57:06 
n0body Exp $\n\n");
 
     for( g=0; g<NUM_GROUPS; g++ ) {
-       fprintf(file,"(group %d %d '(",g,Groups[g].NumUnits);
+       CLprintf(file,"(group %d %d '(",g,Groups[g].NumUnits);
        for( i=0; i<Groups[g].NumUnits; ++i ) {
            ref=UnitReference(Groups[g].Units[i]);
-           fprintf(file,"%s ",ref);
+           CLprintf(file,"%s ",ref);
            free(ref);
        }
-       fprintf(file,"))\n");
+       CLprintf(file,"))\n");
     }
 }
 
Index: stratagus/src/clone/iolib.c
diff -u stratagus/src/clone/iolib.c:1.50 stratagus/src/clone/iolib.c:1.51
--- stratagus/src/clone/iolib.c:1.50    Fri Jul 11 10:35:30 2003
+++ stratagus/src/clone/iolib.c Sun Aug 17 11:57:06 2003
@@ -26,7 +26,7 @@
 //      Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
 //      02111-1307, USA.
 //
-//     $Id: iolib.c,v 1.50 2003/07/11 14:35:30 n0body Exp $
+//     $Id: iolib.c,v 1.51 2003/08/17 15:57:06 n0body Exp $
 
 //@{
 
@@ -36,6 +36,7 @@
 
 #include <stdio.h>
 #include <stdlib.h>
+#include <stdarg.h>
 
 #ifndef _MSC_VER
 #include <fcntl.h>
@@ -95,6 +96,7 @@
 #define bzread BZ2_bzread
 #define bzopen BZ2_bzopen
 #define bzclose BZ2_bzclose
+#define bzwrite BZ2_bzwrite
 #endif // } LIBBZIP2_VERSION >= "1.0"
 
 /**
@@ -148,76 +150,107 @@
 **
 **     @param fn       File name.
 */
-global CLFile *CLopen(const char *fn)
+global CLFile *CLopen(const char *fn,long openflags)
 {
-    CLFile input;
-    CLFile *clf;
+    CLFile clf;
+    CLFile *result;
     char buf[512];
+    char openstring[5];
+    if ( (openflags&CL_OPEN_READ) && (openflags&CL_OPEN_WRITE) ) {
+       strcpy(openstring,"rwb");
+    } else if (openflags&CL_OPEN_READ) {
+       strcpy(openstring,"rb");
+    } else if (openflags&CL_OPEN_WRITE) {
+       strcpy(openstring,"wb");
+    } else {
+       DebugLevel0("Bad CLopen flags");
+       DebugCheck(1);
+       return NULL;
+    }
+
+    clf.cl_type = CLF_TYPE_INVALID;
 
-    input.cl_type = CLF_TYPE_INVALID;
-    if (!(input.cl_plain = fopen(fn, "rb"))) {         // try plain first
+    if (openflags&CL_OPEN_WRITE) {
+#ifdef USE_BZ2LIB
+       if ( (openflags&CL_WRITE_BZ2) &&
+               ( clf.cl_bz = bzopen(strcat(strcpy(buf,fn),".bz2"), 
openstring)) ) {
+           clf.cl_type = CLF_TYPE_BZIP2;
+       } else
+#endif
 #ifdef USE_ZLIB
-       if ((input.cl_gz = gzopen(strcat(strcpy(buf,fn),".gz"), "rb"))) {
-           input.cl_type = CLF_TYPE_GZIP;
+       if ( (openflags&CL_WRITE_GZ) &&
+               ( clf.cl_gz = gzopen(strcat(strcpy(buf,fn),".gz"), openstring)) 
) {
+           clf.cl_type = CLF_TYPE_GZIP;                
        } else
 #endif
+       if  ((clf.cl_plain = fopen(fn,openstring))) {
+           clf.cl_type = CLF_TYPE_PLAIN;
+       }
+    } else {
+       if (!(clf.cl_plain = fopen(fn, openstring))) {          // try plain 
first
+#ifdef USE_ZLIB
+           if ((clf.cl_gz = gzopen(strcat(strcpy(buf,fn),".gz"), "rb"))) {
+               clf.cl_type = CLF_TYPE_GZIP;
+           } else
+#endif
 #ifdef USE_BZ2LIB
-       if ((input.cl_bz = bzopen(strcat(strcpy(buf,fn),".bz2"), "rb"))) {
-           input.cl_type = CLF_TYPE_BZIP2;
-       } else
+           if ((clf.cl_bz = bzopen(strcat(strcpy(buf,fn),".bz2"), "rb"))) {
+               clf.cl_type = CLF_TYPE_BZIP2;
+           } else
 #endif
 #ifdef USE_ZZIPLIB
-       if ((input.cl_zz = zzip_open(strcpy(buf,fn),O_RDONLY|O_BINARY) )) {
-           input.cl_type = CLF_TYPE_ZZIP;
-       } else
+           if ((clf.cl_zz = zzip_open(strcpy(buf,fn),O_RDONLY|O_BINARY) )) {
+               clf.cl_type = CLF_TYPE_ZZIP;
+           } else
 #endif
-       { }
+           { }
 
-    } else {
-       input.cl_type = CLF_TYPE_PLAIN;
-       // Hmm, plain worked, but nevertheless the file may be compressed!
-       if (fread(buf, 2, 1, input.cl_plain) == 1) {
+       } else {
+           clf.cl_type = CLF_TYPE_PLAIN;
+           // Hmm, plain worked, but nevertheless the file may be compressed!
+           if (fread(buf, 2, 1, clf.cl_plain) == 1) {
 #ifdef USE_BZ2LIB
-           if (buf[0] == 'B' && buf[1] == 'Z') {
-               fclose(input.cl_plain);
-               if ((input.cl_bz = bzopen(fn, "rb"))) {
-                   input.cl_type = CLF_TYPE_BZIP2;
-               } else {
-                   if(!(input.cl_plain = fopen(fn, "rb"))) {
-                       input.cl_type = CLF_TYPE_INVALID;
+               if (buf[0] == 'B' && buf[1] == 'Z') {
+                   fclose(clf.cl_plain);
+                   if ((clf.cl_bz = bzopen(fn, "rb"))) {
+                       clf.cl_type = CLF_TYPE_BZIP2;
+                   } else {
+                       if(!(clf.cl_plain = fopen(fn, "rb"))) {
+                           clf.cl_type = CLF_TYPE_INVALID;
+                       }
                    }
                }
-           }
 #endif // USE_BZ2LIB
 #ifdef USE_ZLIB
-           if (buf[0] == 0x1f) {       // don't check for buf[1] == 0x8b, so 
that old compress also works!
-               fclose(input.cl_plain);
-               if ((input.cl_gz = gzopen(fn, "rb"))) {
-                   input.cl_type = CLF_TYPE_GZIP;
-               } else {
-                   if(!(input.cl_plain = fopen(fn, "rb"))) {
-                       input.cl_type = CLF_TYPE_INVALID;
+               if (buf[0] == 0x1f) {   // don't check for buf[1] == 0x8b, so 
that old compress also works!
+                   fclose(clf.cl_plain);
+                   if ((clf.cl_gz = gzopen(fn, "rb"))) {
+                       clf.cl_type = CLF_TYPE_GZIP;
+                   } else {
+                       if(!(clf.cl_plain = fopen(fn, "rb"))) {
+                           clf.cl_type = CLF_TYPE_INVALID;
+                       }
                    }
                }
-           }
 #endif // USE_ZLIB
-       }
-       if (input.cl_type == CLF_TYPE_PLAIN) {  // ok, it is not compressed
-           rewind(input.cl_plain);
+           }
+           if (clf.cl_type == CLF_TYPE_PLAIN) {        // ok, it is not 
compressed
+               rewind(clf.cl_plain);
+           }
        }
     }
 
-    if (input.cl_type == CLF_TYPE_INVALID) {
+    if (clf.cl_type == CLF_TYPE_INVALID) {
        //fprintf(stderr,"%s in ", buf);
        return NULL;
     }
 
     // ok, here we go
-    clf = (CLFile *)malloc(sizeof(CLFile));
-    if (clf) {
-       *clf = input;
+    result = (CLFile *)malloc(sizeof(CLFile));
+    if (result) {
+       *result = clf;
     }
-    return clf;
+    return result;
 }
 
 /**
@@ -296,6 +329,78 @@
     } else {
        errno = EBADF;
     }
+    return ret;
+}
+
+/**
+**     CLprintf        Library file write
+**
+**     @param file     CLFile pointer.
+**     @param format   String Format.
+**     @param ...      Parameter List.
+*/
+global int CLprintf(CLFile *file, char *format, ...)
+{
+    int n;
+    int size;
+    int ret;
+    int tp;
+    char *p;
+    va_list ap;
+
+    size=100;
+    ret=-1;
+    if ((p = malloc (size)) == NULL) {
+       return -1;
+    }
+    while (1) {
+       /* Try to print in the allocated space. */
+       va_start(ap, format);
+       n = vsnprintf (p, size, format, ap);
+       va_end(ap);
+       /* If that worked, string was processed. */
+       if (n > -1 && n < size) {
+           break;
+       }
+       /* Else try again with more space. */
+       if (n > -1) { /* glibc 2.1 */
+           size = n+1; /* precisely what is needed */
+       } else {           /* glibc 2.0 */
+           size *= 2;  /* twice the old size */
+       }
+       if ((p = realloc (p, size)) == NULL) {
+           return -1;
+       }
+    }
+
+    // Allocate the correct size
+    size = strlen(p);
+
+    if (file && (tp = file->cl_type) != CLF_TYPE_INVALID) {
+       if (tp == CLF_TYPE_PLAIN) {
+           ret = fwrite(p,size,1,file->cl_plain);
+       }
+#ifdef USE_ZLIB
+       if (tp == CLF_TYPE_GZIP) {
+           ret = gzwrite(file->cl_gz, p, size);
+       }
+#endif // USE_ZLIB
+#ifdef USE_BZ2LIB
+       if (tp == CLF_TYPE_BZIP2) {
+           ret = bzwrite(file->cl_bz, p, size);
+       }
+#endif // USE_BZ2LIB
+#if defined(USE_ZZIPLIB) && 0
+       // FIXME: Support Unknown and Unsupported
+       if (tp == CLF_TYPE_ZZIP) {
+           zzip_write(file->cl_zz, p, size);
+           ret = 0;
+       }
+#endif // USE_ZZIPLIB
+    } else {
+       errno = EBADF;
+    }
+    free(p);
     return ret;
 }
 
Index: stratagus/src/clone/player.c
diff -u stratagus/src/clone/player.c:1.88 stratagus/src/clone/player.c:1.89
--- stratagus/src/clone/player.c:1.88   Sat Aug  9 16:08:38 2003
+++ stratagus/src/clone/player.c        Sun Aug 17 11:57:06 2003
@@ -26,7 +26,7 @@
 //      Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
 //      02111-1307, USA.
 //
-//     $Id: player.c,v 1.88 2003/08/09 20:08:38 martinxyz Exp $
+//     $Id: player.c,v 1.89 2003/08/17 15:57:06 n0body Exp $
 
 //@{
 
@@ -183,31 +183,31 @@
 **
 **     @note FIXME: Not complete saved.
 */
-global void SavePlayers(FILE* file)
+global void SavePlayers(CLFile* file)
 {
     int i;
     int j;
 
-    fprintf(file,"\n;;; -----------------------------------------\n");
-    fprintf(file,";;; MODULE: players $Id: player.c,v 1.88 2003/08/09 20:08:38 
martinxyz Exp $\n\n");
+    CLprintf(file,"\n;;; -----------------------------------------\n");
+    CLprintf(file,";;; MODULE: players $Id: player.c,v 1.89 2003/08/17 
15:57:06 n0body Exp $\n\n");
 
 #ifndef NEW_UI
     //
     // Dump table wc2 race numbers -> internal symbol.
     //
     if( PlayerRaces.Count ) {
-       fprintf(file,"(define-race-names");
+       CLprintf(file,"(define-race-names");
        for( i=0; i<PlayerRaces.Count; ++i ) {
-           fprintf(file,"\n  'race '(");
-           fprintf(file,"\n    race %d",PlayerRaces.Race[i]);
-           fprintf(file,"\n    name %s",PlayerRaces.Name[i]);
-           fprintf(file,"\n    display %s",PlayerRaces.Display[i]);
+           CLprintf(file,"\n  'race '(");
+           CLprintf(file,"\n    race %d",PlayerRaces.Race[i]);
+           CLprintf(file,"\n    name %s",PlayerRaces.Name[i]);
+           CLprintf(file,"\n    display %s",PlayerRaces.Display[i]);
            if( PlayerRaces.Visible[i] ) {
-               fprintf(file,"\n    visible");
+               CLprintf(file,"\n    visible");
            }
-           fprintf(file,")");
+           CLprintf(file,")");
        }
-       fprintf(file,")\n\n");
+       CLprintf(file,")\n\n");
     }
 #endif
 
@@ -215,118 +215,118 @@
     // Dump table wc2 race numbers -> internal symbol.
     //
     if( PlayerRaces.Count ) {
-       fprintf(file,"(define-race-names");
+       CLprintf(file,"(define-race-names");
        for( i=0; i<PlayerRaces.Count; ++i ) {
-           fprintf(file,"\n  'race '(");
-           fprintf(file,"\n    race %d",PlayerRaces.Race[i]);
-           fprintf(file,"\n    name %s",PlayerRaces.Name[i]);
-           fprintf(file,"\n    display %s",PlayerRaces.Display[i]);
+           CLprintf(file,"\n  'race '(");
+           CLprintf(file,"\n    race %d",PlayerRaces.Race[i]);
+           CLprintf(file,"\n    name %s",PlayerRaces.Name[i]);
+           CLprintf(file,"\n    display %s",PlayerRaces.Display[i]);
            if( PlayerRaces.Visible[i] ) {
-               fprintf(file,"\n    visible");
+               CLprintf(file,"\n    visible");
            }
-           fprintf(file,")");
+           CLprintf(file,")");
        }
-       fprintf(file,")\n\n");
+       CLprintf(file,")\n\n");
     }
 
     //
     // Dump all players
     //
     for( i=0; i<NumPlayers; ++i ) {
-       fprintf(file,"(player %d\n",i);
-       fprintf(file,"  'name \"%s\"\n",Players[i].Name);
-       fprintf(file,"  'type ");
+       CLprintf(file,"(player %d\n",i);
+       CLprintf(file,"  'name \"%s\"\n",Players[i].Name);
+       CLprintf(file,"  'type ");
        switch( Players[i].Type ) {
-           case PlayerNeutral:       fprintf(file,"'neutral");         break;
-           case PlayerNobody:        fprintf(file,"'nobody");          break;
-           case PlayerComputer:      fprintf(file,"'computer");        break;
-           case PlayerPerson:        fprintf(file,"'person");          break;
-           case PlayerRescuePassive: fprintf(file,"'rescue-passive");  break;
-           case PlayerRescueActive:  fprintf(file,"'rescue-active");   break;
-           default:                  fprintf(file,"%d",Players[i].Type); break;
-       }
-       fprintf(file," 'race \"%s\"",Players[i].RaceName);
-       fprintf(file," 'ai %d\n",Players[i].AiNum);
-       fprintf(file,"  'team %d",Players[i].Team);
+           case PlayerNeutral:       CLprintf(file,"'neutral");                
break;
+           case PlayerNobody:        CLprintf(file,"'nobody");         break;
+           case PlayerComputer:      CLprintf(file,"'computer");       break;
+           case PlayerPerson:        CLprintf(file,"'person");         break;
+           case PlayerRescuePassive: CLprintf(file,"'rescue-passive"); break;
+           case PlayerRescueActive:  CLprintf(file,"'rescue-active");  break;
+           default:                  CLprintf(file,"%d",Players[i].Type); 
break;
+       }
+       CLprintf(file," 'race \"%s\"",Players[i].RaceName);
+       CLprintf(file," 'ai %d\n",Players[i].AiNum);
+       CLprintf(file,"  'team %d",Players[i].Team);
 
-       fprintf(file," 'enemy \"");
+       CLprintf(file," 'enemy \"");
        for( j=0; j<PlayerMax; ++j ) {
-           fputc((Players[i].Enemy&(1<<j)) ? 'X' : '_',file);
+           CLprintf(file,"%c",(Players[i].Enemy&(1<<j)) ? 'X' : '_');
        }
-       fprintf(file,"\" 'allied \"");
+       CLprintf(file,"\" 'allied \"");
        for( j=0; j<PlayerMax; ++j ) {
-           fputc((Players[i].Allied&(1<<j)) ? 'X' : '_',file);
+           CLprintf(file,"%c",(Players[i].Allied&(1<<j)) ? 'X' : '_');
        }
-       fprintf(file,"\" 'shared-vision \"");
+       CLprintf(file,"\" 'shared-vision \"");
        for( j=0; j<PlayerMax; ++j ) {
-           fputc((Players[i].SharedVision&(1<<j)) ? 'X' : '_',file);
+           CLprintf(file,"%c",(Players[i].SharedVision&(1<<j)) ? 'X' : '_');
        }
-       fprintf(file,"\"\n  'start '(%d %d)\n",Players[i].StartX,
+       CLprintf(file,"\"\n  'start '(%d %d)\n",Players[i].StartX,
                Players[i].StartY);
 
        // Resources
-       fprintf(file,"  'resources '(");
+       CLprintf(file,"  'resources '(");
        for( j=0; j<MaxCosts; ++j ) {
            if( j ) {
                if( j==MaxCosts/2 ) {
-                   fputs("\n    ",file);
+                   CLprintf(file,"\n    ");
                } else {
-                   fputc(' ',file);
+                   CLprintf(file," ");
                }
            }
-           fprintf(file,"%s 
%d",DefaultResourceNames[j],Players[i].Resources[j]);
+           CLprintf(file,"%s 
%d",DefaultResourceNames[j],Players[i].Resources[j]);
        }
        // Incomes
-       fprintf(file,")\n  'incomes '(");
+       CLprintf(file,")\n  'incomes '(");
        for( j=0; j<MaxCosts; ++j ) {
            if( j ) {
                if( j==MaxCosts/2 ) {
-                   fputs("\n    ",file);
+                   CLprintf(file,"\n    ");
                } else {
-                   fputc(' ',file);
+                   CLprintf(file," ");
                }
            }
-           fprintf(file,"%s %d",DefaultResourceNames[j],Players[i].Incomes[j]);
+           CLprintf(file,"%s 
%d",DefaultResourceNames[j],Players[i].Incomes[j]);
        }
-       fprintf(file,";;FIXME: new members must be saved\n");
+       CLprintf(file,";;FIXME: new members must be saved\n");
 
        // UnitTypesCount done by load units.
 
-       fprintf(file,")\n  '%s\n",Players[i].AiEnabled ?
+       CLprintf(file,")\n  '%s\n",Players[i].AiEnabled ?
                "ai-enabled" : "ai-disabled");
 
        // Ai done by load ais.
 
-       fprintf (file, "  'food %d", Players[i].Food);
-       fprintf(file," 'food-unit-limit %d",Players[i].FoodUnitLimit);
-       fprintf(file," 'building-limit %d",Players[i].BuildingLimit);
-       fprintf(file," 'total-unit-limit %d",Players[i].TotalUnitLimit);
-
-       fprintf(file,"\n  'score %d",Players[i].Score);
-       fprintf(file,"\n  'total-units %d",Players[i].TotalUnits);
-       fprintf(file,"\n  'total-buildings %d",Players[i].TotalBuildings);
-       fprintf(file,"\n  'total-razings %d",Players[i].TotalRazings);
-       fprintf(file,"\n  'total-kills %d",Players[i].TotalKills);
-       fprintf(file,"\n  'total-resources '(");
+       CLprintf (file, "  'food %d", Players[i].Food);
+       CLprintf(file," 'food-unit-limit %d",Players[i].FoodUnitLimit);
+       CLprintf(file," 'building-limit %d",Players[i].BuildingLimit);
+       CLprintf(file," 'total-unit-limit %d",Players[i].TotalUnitLimit);
+
+       CLprintf(file,"\n  'score %d",Players[i].Score);
+       CLprintf(file,"\n  'total-units %d",Players[i].TotalUnits);
+       CLprintf(file,"\n  'total-buildings %d",Players[i].TotalBuildings);
+       CLprintf(file,"\n  'total-razings %d",Players[i].TotalRazings);
+       CLprintf(file,"\n  'total-kills %d",Players[i].TotalKills);
+       CLprintf(file,"\n  'total-resources '(");
        for( j=0; j<MaxCosts; ++j ) {
-           fprintf(file,"%d ",Players[i].TotalResources[j]);
+           CLprintf(file,"%d ",Players[i].TotalResources[j]);
        }
-       fprintf(file,")");
+       CLprintf(file,")");
 
        // Colors done by init code.
 
        // Allow saved by allow.
 
-       fprintf(file,"\n  'timers '(");
+       CLprintf(file,"\n  'timers '(");
        for( j=0; j<UpgradeMax; ++j ) {
            if( j ) {
-               fputc(' ',file);
+               CLprintf(file," ");
            }
-           fprintf(file,"%d",Players[i].UpgradeTimers.Upgrades[j]);
+           CLprintf(file,"%d",Players[i].UpgradeTimers.Upgrades[j]);
        }
-       fprintf(file,")");
+       CLprintf(file,")");
 
-       fprintf(file,")\n\n");
+       CLprintf(file,")\n\n");
     }
 
     DebugLevel0Fn("FIXME: must unit-stats?\n");
@@ -334,7 +334,7 @@
     //
     // Dump local variables
     //
-    fprintf(file,"(set-this-player! %d)\n\n",ThisPlayer->Player);
+    CLprintf(file,"(set-this-player! %d)\n\n",ThisPlayer->Player);
 }
 
 /**
Index: stratagus/src/clone/pud.c
diff -u stratagus/src/clone/pud.c:1.107 stratagus/src/clone/pud.c:1.108
--- stratagus/src/clone/pud.c:1.107     Tue Jul 22 10:32:21 2003
+++ stratagus/src/clone/pud.c   Sun Aug 17 11:57:06 2003
@@ -26,7 +26,7 @@
 //      Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
 //      02111-1307, USA.
 //
-//     $Id: pud.c,v 1.107 2003/07/22 14:32:21 n0body Exp $
+//     $Id: pud.c,v 1.108 2003/08/17 15:57:06 n0body Exp $
 
 //@{
 
@@ -360,7 +360,7 @@
     unsigned short temp_short;
     // FIXME: Reuse the temporary alloca buffer...
 
-    if( !(input=CLopen(pud)) ) {
+    if( !(input=CLopen(pud,CL_OPEN_READ)) ) {
        fprintf(stderr,"Try ./path/name\n");
        fprintf(stderr,"pud: CLopen(%s): %s\n", pud, strerror(errno));
        return NULL;
@@ -813,7 +813,7 @@
     if (!map->Info) {
        map->Info = GetPudInfo(pud);
     }
-    if( !(input=CLopen(pud)) ) {
+    if( !(input=CLopen(pud,CL_OPEN_READ)) ) {
        fprintf(stderr,"Try ./path/name\n");
        fprintf(stderr,"pud: CLopen(%s): %s\n", pud, strerror(errno));
        ExitFatal(-1);
Index: stratagus/src/clone/selection.c
diff -u stratagus/src/clone/selection.c:1.47 
stratagus/src/clone/selection.c:1.48
--- stratagus/src/clone/selection.c:1.47        Thu Jul 24 15:27:32 2003
+++ stratagus/src/clone/selection.c     Sun Aug 17 11:57:06 2003
@@ -26,7 +26,7 @@
 //      Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
 //      02111-1307, USA.
 //
-//     $Id: selection.c,v 1.47 2003/07/24 19:27:32 n0body Exp $
+//     $Id: selection.c,v 1.48 2003/08/17 15:57:06 n0body Exp $
 
 //@{
 
@@ -969,22 +969,22 @@
 **
 **     @param file     Output file.
 */
-global void SaveSelections(FILE* file)
+global void SaveSelections(CLFile* file)
 {
     int i;
     char *ref;
 
-    fprintf(file,"\n;;; -----------------------------------------\n");
-    fprintf(file,";;; MODULE: selection $Id: selection.c,v 1.47 2003/07/24 
19:27:32 n0body Exp $\n\n");
+    CLprintf(file,"\n;;; -----------------------------------------\n");
+    CLprintf(file,";;; MODULE: selection $Id: selection.c,v 1.48 2003/08/17 
15:57:06 n0body Exp $\n\n");
 
-    fprintf(file,"(set-group-id! %d)\n",GroupId);
-    fprintf(file,"(selection %d '(",NumSelected);
+    CLprintf(file,"(set-group-id! %d)\n",GroupId);
+    CLprintf(file,"(selection %d '(",NumSelected);
     for( i=0; i<NumSelected; ++i ) {
        ref=UnitReference(Selected[i]);
-       fprintf(file,"%s ",ref);
+       CLprintf(file,"%s ",ref);
        free(ref);
     }
-    fprintf(file,"))\n");
+    CLprintf(file,"))\n");
 }
 
 /**
Index: stratagus/src/clone/unit.c
diff -u stratagus/src/clone/unit.c:1.286 stratagus/src/clone/unit.c:1.287
--- stratagus/src/clone/unit.c:1.286    Sun Aug 10 22:14:46 2003
+++ stratagus/src/clone/unit.c  Sun Aug 17 11:57:06 2003
@@ -26,7 +26,7 @@
 //      Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
 //      02111-1307, USA.
 //
-//     $Id: unit.c,v 1.286 2003/08/11 02:14:46 n0body Exp $
+//     $Id: unit.c,v 1.287 2003/08/17 15:57:06 n0body Exp $
 
 //@{
 
@@ -3506,122 +3506,122 @@
  **    @param order    Order who should be saved.
  **    @param file     Output file.
  */
-local void SaveOrder(const Order* order,FILE* file)
+local void SaveOrder(const Order* order,CLFile* file)
 {
     char* ref;
 
-    fprintf(file,"(");
+    CLprintf(file,"(");
     switch( order->Action ) {
        case UnitActionNone:
-           fprintf(file,"action-none");
+           CLprintf(file,"action-none");
            break;
 
        case UnitActionStill:
-           fprintf(file,"action-still");
+           CLprintf(file,"action-still");
            break;
        case UnitActionStandGround:
-           fprintf(file,"action-stand-ground");
+           CLprintf(file,"action-stand-ground");
            break;
        case UnitActionFollow:
-           fprintf(file,"action-follow");
+           CLprintf(file,"action-follow");
            break;
        case UnitActionMove:
-           fprintf(file,"action-move");
+           CLprintf(file,"action-move");
            break;
        case UnitActionAttack:
-           fprintf(file,"action-attack");
+           CLprintf(file,"action-attack");
            break;
        case UnitActionAttackGround:
-           fprintf(file,"action-attack-ground");
+           CLprintf(file,"action-attack-ground");
            break;
        case UnitActionDie:
-           fprintf(file,"action-die");
+           CLprintf(file,"action-die");
            break;
 
        case UnitActionSpellCast:
-           fprintf(file,"action-spell-cast");
+           CLprintf(file,"action-spell-cast");
            break;
 
        case UnitActionTrain:
-           fprintf(file,"action-train");
+           CLprintf(file,"action-train");
            break;
        case UnitActionUpgradeTo:
-           fprintf(file,"action-upgrade-to");
+           CLprintf(file,"action-upgrade-to");
            break;
        case UnitActionResearch:
-           fprintf(file,"action-research");
+           CLprintf(file,"action-research");
            break;
        case UnitActionBuilded:
-           fprintf(file,"action-builded");
+           CLprintf(file,"action-builded");
            break;
 
        case UnitActionBoard:
-           fprintf(file,"action-board");
+           CLprintf(file,"action-board");
            break;
        case UnitActionUnload:
-           fprintf(file,"action-unload");
+           CLprintf(file,"action-unload");
            break;
        case UnitActionPatrol:
-           fprintf(file,"action-patrol");
+           CLprintf(file,"action-patrol");
            break;
        case UnitActionBuild:
-           fprintf(file,"action-build");
+           CLprintf(file,"action-build");
            break;
 
        case UnitActionRepair:
-           fprintf(file,"action-repair");
+           CLprintf(file,"action-repair");
            break;
        case UnitActionHarvest:
-           fprintf(file,"action-harvest");
+           CLprintf(file,"action-harvest");
            break;
        case UnitActionResource:
-           fprintf(file,"action-resource");
+           CLprintf(file,"action-resource");
            break;
        case UnitActionReturnGoods:
-           fprintf(file,"action-return-goods");
+           CLprintf(file,"action-return-goods");
            break;
 
        case UnitActionDemolish:
-           fprintf(file,"action-demolish");
+           CLprintf(file,"action-demolish");
            break;
 
        default:
            DebugLevel0Fn("Unknown action in order\n");
     }
-    fprintf(file," flags %d",order->Flags);
-    fprintf(file," range (%d %d)",order->RangeX,order->RangeY);
+    CLprintf(file," flags %d",order->Flags);
+    CLprintf(file," range (%d %d)",order->RangeX,order->RangeY);
     if( order->Goal ) {
        if (order->Goal->Destroyed) {
            /* this unit is destroyed so it's not in the global unit
             * array - this means it won't be saved!!! */
            printf ("FIXME: storing destroyed Goal - loading will fail.\n");
        }
-       fprintf(file," goal %s",ref=UnitReference(order->Goal));
+       CLprintf(file," goal %s",ref=UnitReference(order->Goal));
        free(ref);
     }
-    fprintf(file," tile (%d %d)",order->X,order->Y);
+    CLprintf(file," tile (%d %d)",order->X,order->Y);
     if( order->Type ) {
-       fprintf(file," type %s",order->Type->Ident);
+       CLprintf(file," type %s",order->Type->Ident);
     }
     if( order->Arg1 ) {
        // patrol=pos, research=upgrade, spell=spell
        switch( order->Action ) {
            case UnitActionPatrol:
-               fprintf(file," patrol (%d %d)",
+               CLprintf(file," patrol (%d %d)",
                        (int)order->Arg1>>16,(int)order->Arg1&0xFFFF);
                break;
            case UnitActionSpellCast:
-               fprintf(file," spell %s",((SpellType*)order->Arg1)->Ident);
+               CLprintf(file," spell %s",((SpellType*)order->Arg1)->Ident);
                break;
            case UnitActionResearch:
-               fprintf(file," upgrade %s",((Upgrade*)order->Arg1)->Ident);
+               CLprintf(file," upgrade %s",((Upgrade*)order->Arg1)->Ident);
                break;
            default:
-               fprintf(file," arg1 %d",(int)order->Arg1);
+               CLprintf(file," arg1 %d",(int)order->Arg1);
                break;
        }
     }
-    fprintf(file,")");
+    CLprintf(file,")");
 }
 
 /**
@@ -3630,148 +3630,148 @@
  **    @param unit     Unit pointer to be saved.
  **    @param file     Output file.
  */
-global void SaveUnit(const Unit* unit,FILE* file)
+global void SaveUnit(const Unit* unit,CLFile* file)
 {
     char* ref;
     Unit* uins;
     int i;
 
-    fprintf(file,"\n(unit %d ",UnitNumber(unit));
+    CLprintf(file,"\n(unit %d ",UnitNumber(unit));
 
     // 'type and 'player must be first, needed to create the unit slot
-    fprintf(file,"'type '%s ",unit->Type->Ident);
+    CLprintf(file,"'type '%s ",unit->Type->Ident);
     if( unit->SeenType ) {
-       fprintf(file,"'seen-type '%s ",unit->SeenType->Ident);
+       CLprintf(file,"'seen-type '%s ",unit->SeenType->Ident);
     }
 
-    fprintf(file,"'player %d\n  ",unit->Player->Player);
+    CLprintf(file,"'player %d\n  ",unit->Player->Player);
 
     if( unit->Name ) {
-       fprintf(file,"'name \"%s\" ",unit->Name);
+       CLprintf(file,"'name \"%s\" ",unit->Name);
     }
 
     if( unit->Next ) {
-       fprintf(file,"'next '%d ",UnitNumber(unit->Next));
+       CLprintf(file,"'next '%d ",UnitNumber(unit->Next));
     }
 
-    fprintf(file,"'tile '(%d %d) ",unit->X,unit->Y);
+    CLprintf(file,"'tile '(%d %d) ",unit->X,unit->Y);
 #if 0
     /* latimerius: why is this so complex? */
     // JOHNS: An unit can be owned by a new player and have still the old stats
     for( i=0; i<PlayerMax; ++i ) {
        if( &unit->Type->Stats[i]==unit->Stats ) {
-           fprintf(file,"'stats %d\n  ",i);
+           CLprintf(file,"'stats %d\n  ",i);
            break;
        }
     }
     /* latimerius: what's the point of storing a pointer value anyway? */
     if( i==PlayerMax ) {
-       fprintf(file,"'stats 'S%08X\n  ",(int)unit->Stats);
+       CLprintf(file,"'stats 'S%08X\n  ",(int)unit->Stats);
     }
 #else
-    fprintf(file, "'stats %d\n  " ,unit->Player->Player);
+    CLprintf(file, "'stats %d\n  " ,unit->Player->Player);
 #endif
-    fprintf(file,"'pixel '(%d %d) ",unit->IX,unit->IY);
-    fprintf(file,"'seen-pixel '(%d %d) ",unit->SeenIX,unit->SeenIY);
-    fprintf(file,"'%sframe %d ",
+    CLprintf(file,"'pixel '(%d %d) ",unit->IX,unit->IY);
+    CLprintf(file,"'seen-pixel '(%d %d) ",unit->SeenIX,unit->SeenIY);
+    CLprintf(file,"'%sframe %d ",
            unit->Frame<0 ? "flipped-" : "" 
,unit->Frame<0?-unit->Frame:unit->Frame);
     if( unit->SeenFrame!=UnitNotSeen ) {
-       fprintf(file,"'%sseen %d ",
+       CLprintf(file,"'%sseen %d ",
                unit->SeenFrame<0 ? "flipped-" : "" 
,unit->SeenFrame<0?-unit->SeenFrame:unit->SeenFrame);
     } else {
-       fprintf(file,"'not-seen ");
+       CLprintf(file,"'not-seen ");
     }
-    fprintf(file,"'direction %d\n  ",unit->Direction);
-    fprintf(file,"'attacked %d\n ",unit->Attacked);
-    fprintf(file," 'current-sight-range %d",unit->CurrentSightRange);
+    CLprintf(file,"'direction %d\n  ",unit->Direction);
+    CLprintf(file,"'attacked %d\n ",unit->Attacked);
+    CLprintf(file," 'current-sight-range %d",unit->CurrentSightRange);
     if( unit->Burning ) {
-       fprintf(file," 'burning");
+       CLprintf(file," 'burning");
     }
     if( unit->Destroyed ) {
-       fprintf(file," 'destroyed");
+       CLprintf(file," 'destroyed");
     }
     if( unit->SeenDestroyed ) {
-       fprintf(file," 'seen-destroyed");
+       CLprintf(file," 'seen-destroyed");
     }
     if( unit->Removed ) {
-       fprintf(file," 'removed");
+       CLprintf(file," 'removed");
     }
     if( unit->Selected ) {
-       fprintf(file," 'selected");
+       CLprintf(file," 'selected");
     }
     if( unit->RescuedFrom ) {
-       fprintf(file," 'rescued-from %d",unit->RescuedFrom->Player);
+       CLprintf(file," 'rescued-from %d",unit->RescuedFrom->Player);
     }
     // n0b0dy: How is this usefull?
     if( unit->Container && unit->Removed ) {
-       fprintf(file," 'host-tile '(%d %d) ",
+       CLprintf(file," 'host-tile '(%d %d) ",
                unit->Container->X+unit->Container->Type->TileWidth/2,
                unit->Container->Y+unit->Container->Type->TileHeight/2);
     }
-    fprintf(file," 'visible \"");
+    CLprintf(file," 'visible \"");
     for( i=0; i<PlayerMax; ++i ) {
-       fputc((unit->Visible&(1<<i)) ? 'X' : '_',file);
+       CLprintf(file,"%c",(unit->Visible&(1<<i)) ? 'X' : '_');
     }
-    fprintf(file,"\"\n ");
+    CLprintf(file,"\"\n ");
     if( unit->Constructed ) {
-       fprintf(file," 'constructed");
+       CLprintf(file," 'constructed");
     }
     if( unit->SeenConstructed ) {
-       fprintf(file," 'seen-constructed");
+       CLprintf(file," 'seen-constructed");
     }
-    fprintf(file," 'seen-state %d ",unit->SeenState);
+    CLprintf(file," 'seen-state %d ",unit->SeenState);
     if( unit->Active ) {
-       fprintf(file," 'active");
+       CLprintf(file," 'active");
     }
-    fprintf(file," 'mana %d",unit->Mana);
-    fprintf(file," 'hp %d",unit->HP);
-    fprintf(file," 'xp %d",unit->XP);
-    fprintf(file," 'kills %d\n  ",unit->Kills);
-
-    fprintf(file,"'ttl %lu ",unit->TTL);
-    fprintf(file,"'bloodlust %d ",unit->Bloodlust);
-    fprintf(file,"'haste %d ",unit->Haste);
-    fprintf(file,"'slow %d\n  ",unit->Slow);
-    fprintf(file,"'invisible %d ",unit->Invisible);
-    fprintf(file,"'flame-shield %d ",unit->FlameShield);
-    fprintf(file,"'unholy-armor %d\n  ",unit->UnholyArmor);
-
-    fprintf(file,"'group-id %d\n  ",unit->GroupId);
-    fprintf(file,"'last-group %d\n  ",unit->LastGroup);
-
-    fprintf(file,"'value %d\n  ",unit->Value);
-
-    fprintf(file,"'sub-action %d ",unit->SubAction);
-    fprintf(file,"'wait %d ",unit->Wait);
-    fprintf(file,"'state %d",unit->State);
+    CLprintf(file," 'mana %d",unit->Mana);
+    CLprintf(file," 'hp %d",unit->HP);
+    CLprintf(file," 'xp %d",unit->XP);
+    CLprintf(file," 'kills %d\n  ",unit->Kills);
+
+    CLprintf(file,"'ttl %lu ",unit->TTL);
+    CLprintf(file,"'bloodlust %d ",unit->Bloodlust);
+    CLprintf(file,"'haste %d ",unit->Haste);
+    CLprintf(file,"'slow %d\n  ",unit->Slow);
+    CLprintf(file,"'invisible %d ",unit->Invisible);
+    CLprintf(file,"'flame-shield %d ",unit->FlameShield);
+    CLprintf(file,"'unholy-armor %d\n  ",unit->UnholyArmor);
+
+    CLprintf(file,"'group-id %d\n  ",unit->GroupId);
+    CLprintf(file,"'last-group %d\n  ",unit->LastGroup);
+
+    CLprintf(file,"'value %d\n  ",unit->Value);
+
+    CLprintf(file,"'sub-action %d ",unit->SubAction);
+    CLprintf(file,"'wait %d ",unit->Wait);
+    CLprintf(file,"'state %d",unit->State);
     if( unit->Reset ) {
-       fprintf(file," 'reset");
+       CLprintf(file," 'reset");
     }
-    fprintf(file,"\n  'blink %d",unit->Blink);
+    CLprintf(file,"\n  'blink %d",unit->Blink);
     if( unit->Moving ) {
-       fprintf(file," 'moving");
+       CLprintf(file," 'moving");
     }
-    fprintf(file," 'rs %d",unit->Rs);
-    fprintf(file," 'units-contained-count %d",unit->InsideCount);
-    fprintf(file,"\n  'units-contained #(");
+    CLprintf(file," 'rs %d",unit->Rs);
+    CLprintf(file," 'units-contained-count %d",unit->InsideCount);
+    CLprintf(file,"\n  'units-contained #(");
     uins=unit->UnitInside;
     for( i=unit->InsideCount; i; --i,uins=uins->NextContained ) {
-       fprintf(file,"%s",ref=UnitReference(uins));
+       CLprintf(file,"%s",ref=UnitReference(uins));
        if( i>1 ) {
-           fputc(' ',file);
+           CLprintf(file," ");
        }
     }
-    fprintf(file,")\n  ");
-    fprintf(file,"'order-count %d\n  ",unit->OrderCount);
-    fprintf(file,"'order-flush %d\n  ",unit->OrderFlush);
-    fprintf(file,"'orders #(");
+    CLprintf(file,")\n  ");
+    CLprintf(file,"'order-count %d\n  ",unit->OrderCount);
+    CLprintf(file,"'order-flush %d\n  ",unit->OrderFlush);
+    CLprintf(file,"'orders #(");
     for( i=0; i<MAX_ORDERS; ++i ) {
-       fprintf(file,"\n    ");
+       CLprintf(file,"\n    ");
        SaveOrder(&unit->Orders[i],file);
     }
-    fprintf(file,")\n  'saved-order '");
+    CLprintf(file,")\n  'saved-order '");
     SaveOrder(&unit->SavedOrder,file);
-    fprintf(file,"\n  'new-order '");
+    CLprintf(file,"\n  'new-order '");
     SaveOrder(&unit->NewOrder,file);
 
     //
@@ -3781,7 +3781,7 @@
        case UnitActionStill:
            // FIXME: support other resource types
            if( unit->Type->GivesResource ) {
-               fprintf(file," 'resource-active %d",unit->Data.Resource.Active);
+               CLprintf(file," 'resource-active 
%d",unit->Data.Resource.Active);
            }
            break;
        case UnitActionBuilded:
@@ -3795,68 +3795,68 @@
                    cframe=cframe->Next;
                    ++frame;
                }
-               fprintf(file,"\n  'data-builded '(worker %s",
+               CLprintf(file,"\n  'data-builded '(worker %s",
                        ref=UnitReference(unit->Data.Builded.Worker));
                free(ref);
-               fprintf(file," sum %d add %d val %d sub %d frame %d",
+               CLprintf(file," sum %d add %d val %d sub %d frame %d",
                        unit->Data.Builded.Sum,unit->Data.Builded.Add,
                        unit->Data.Builded.Val,unit->Data.Builded.Sub,
                        frame);
                if( unit->Data.Builded.Cancel ) {
-                   fprintf(file," cancel");
+                   CLprintf(file," cancel");
                }
-               fprintf(file,")");
+               CLprintf(file,")");
                break;
            }
        case UnitActionResearch:
-           fprintf(file,"\n  'data-research '(");
-           fprintf(file,"ident %s", unit->Data.Research.Upgrade->Ident);
-           fprintf(file,")");
+           CLprintf(file,"\n  'data-research '(");
+           CLprintf(file,"ident %s", unit->Data.Research.Upgrade->Ident);
+           CLprintf(file,")");
            break;
        case UnitActionUpgradeTo:
-           fprintf(file,"\n  'data-upgrade-to '(");
-           fprintf(file,"ticks %d",unit->Data.UpgradeTo.Ticks);
-           fprintf(file,")");
+           CLprintf(file,"\n  'data-upgrade-to '(");
+           CLprintf(file,"ticks %d",unit->Data.UpgradeTo.Ticks);
+           CLprintf(file,")");
            break;
        case UnitActionTrain:
-           fprintf(file,"\n  'data-train '(");
-           fprintf(file,"ticks %d ",unit->Data.Train.Ticks);
-           fprintf(file,"count %d ",unit->Data.Train.Count);
-           fprintf(file,"queue #(");
+           CLprintf(file,"\n  'data-train '(");
+           CLprintf(file,"ticks %d ",unit->Data.Train.Ticks);
+           CLprintf(file,"count %d ",unit->Data.Train.Count);
+           CLprintf(file,"queue #(");
            for (i=0; i<MAX_UNIT_TRAIN; i++) {
                if (i<unit->Data.Train.Count) {
-                   fprintf(file,"%s ",unit->Data.Train.What[i]->Ident);
+                   CLprintf(file,"%s ",unit->Data.Train.What[i]->Ident);
                } else {
                    /* this slot is currently unused */
-                   fprintf(file,"unit-none ");
+                   CLprintf(file,"unit-none ");
                }
            }
-           fprintf(file, "))");
+           CLprintf(file, "))");
            break;
        default:
-           fprintf(file,"\n  'data-move '(");
+           CLprintf(file,"\n  'data-move '(");
            if( unit->Data.Move.Fast ) {
-               fprintf(file,"fast ");
+               CLprintf(file,"fast ");
            }
            if( unit->Data.Move.Length ) {
-               fprintf(file,"path #(");
+               CLprintf(file,"path #(");
                for( i=0; i<unit->Data.Move.Length; ++i ) {
-                   fprintf(file,"%d ", unit->Data.Move.Path[i]);
+                   CLprintf(file,"%d ", unit->Data.Move.Path[i]);
                }
-               fprintf(file,")");
+               CLprintf(file,")");
            }
-           fprintf(file,")");
+           CLprintf(file,")");
            break;
     }
 
     if( unit->Goal ) {
-       fprintf(file,"\n  'goal %d",UnitNumber(unit->Goal));
+       CLprintf(file,"\n  'goal %d",UnitNumber(unit->Goal));
     }
     if( unit->AutoCastSpell ) {
-       fprintf(file,"\n  'auto-cast '%s",unit->AutoCastSpell->Ident);
+       CLprintf(file,"\n  'auto-cast '%s",unit->AutoCastSpell->Ident);
     }
 
-    fprintf(file,")\n");
+    CLprintf(file,")\n");
 }
 
 /**
@@ -3864,30 +3864,30 @@
  **
  **    @param file     Output file.
  */
-global void SaveUnits(FILE* file)
+global void SaveUnits(CLFile* file)
 {
     Unit** table;
     int i;
     unsigned char SlotUsage[MAX_UNIT_SLOTS/8 + 1];
     int InRun, RunStart;
 
-    fprintf(file,"\n;;; -----------------------------------------\n");
-    fprintf(file,";;; MODULE: units $Id: unit.c,v 1.286 2003/08/11 02:14:46 
n0body Exp $\n\n");
+    CLprintf(file,"\n;;; -----------------------------------------\n");
+    CLprintf(file,";;; MODULE: units $Id: unit.c,v 1.287 2003/08/17 15:57:06 
n0body Exp $\n\n");
 
     //
     // Local variables
     //
-    fprintf(file,"(set-hitpoint-regeneration! #%s)\n",
+    CLprintf(file,"(set-hitpoint-regeneration! #%s)\n",
            HitPointRegeneration ? "t" : "f");
-    fprintf(file,"(set-xp-damage! #%s)\n",
+    CLprintf(file,"(set-xp-damage! #%s)\n",
            XpDamage ? "t" : "f");
-    fprintf(file,"(set-fancy-buildings! #%s)\n",
+    CLprintf(file,"(set-fancy-buildings! #%s)\n",
            FancyBuildings ? "t" : "f");
-    fprintf(file,"(set-training-queue! #%s)\n",
+    CLprintf(file,"(set-training-queue! #%s)\n",
            EnableTrainingQueue ? "t" : "f");
 
-    fprintf (file, "; Unit slot usage bitmap\n");
-    fprintf (file, "(slot-usage '(");
+    CLprintf (file, "; Unit slot usage bitmap\n");
+    CLprintf (file, "(slot-usage '(");
 
     memset (SlotUsage, 0, MAX_UNIT_SLOTS/8 + 1);
     for (i=0; i<NumUnits; i++) {
@@ -3897,9 +3897,9 @@
 #if 0
     /* the old way */
     for (i=0; i<MAX_UNIT_SLOTS/8 + 1; i++) {
-       fprintf (file, " %d", SlotUsage[i]);
+       CLprintf (file, " %d", SlotUsage[i]);
        if ( (i+1) % 16 == 0 )          // 16 numbers per line
-           fprintf (file, "\n");
+           CLprintf (file, "\n");
     }
 
 #else
@@ -3913,15 +3913,15 @@
        if ( !SlotUsed (i) && InRun) {
            InRun = 0;
            if (i-1 == RunStart) {
-               fprintf (file, "%d ", i-1);
+               CLprintf (file, "%d ", i-1);
            } else {
-               fprintf (file, "%d - %d ", RunStart, i-1);
+               CLprintf (file, "%d - %d ", RunStart, i-1);
            }
        }
     }
 #endif
 
-    fprintf (file, "))\n");
+    CLprintf (file, "))\n");
 
     for( table=Units; table<&Units[NumUnits]; ++table ) {
        SaveUnit(*table,file);
Index: stratagus/src/clone/unit_draw.c
diff -u stratagus/src/clone/unit_draw.c:1.150 
stratagus/src/clone/unit_draw.c:1.151
--- stratagus/src/clone/unit_draw.c:1.150       Sun Aug 10 22:14:46 2003
+++ stratagus/src/clone/unit_draw.c     Sun Aug 17 11:57:07 2003
@@ -26,7 +26,7 @@
 //      Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
 //      02111-1307, USA.
 //
-//     $Id: unit_draw.c,v 1.150 2003/08/11 02:14:46 n0body Exp $
+//     $Id: unit_draw.c,v 1.151 2003/08/17 15:57:07 n0body Exp $
 
 //@{
 
@@ -646,63 +646,63 @@
 /**
 **     Save decorations.
 */
-global void SaveDecorations(FILE* file)
+global void SaveDecorations(CLFile* file)
 {
-    fprintf(file,"\n;;; -----------------------------------------\n");
-    fprintf(file,";;; MODULE: decorations $Id: unit_draw.c,v 1.150 2003/08/11 
02:14:46 n0body Exp $\n\n");
+    CLprintf(file,"\n;;; -----------------------------------------\n");
+    CLprintf(file,";;; MODULE: decorations $Id: unit_draw.c,v 1.151 2003/08/17 
15:57:07 n0body Exp $\n\n");
 
-    fprintf(file,"(mana-sprite \"%s\"  %d %d  %d %d)\n",
+    CLprintf(file,"(mana-sprite \"%s\"  %d %d  %d %d)\n",
        ManaSprite.File,ManaSprite.HotX,ManaSprite.HotY,
        ManaSprite.Width,ManaSprite.Height);
-    fprintf(file,"(health-sprite \"%s\"  %d %d  %d %d)\n",
+    CLprintf(file,"(health-sprite \"%s\"  %d %d  %d %d)\n",
        HealthSprite.File,HealthSprite.HotX,HealthSprite.HotY,
        HealthSprite.Width,HealthSprite.Height);
-    fprintf(file,"(shadow-sprite \"%s\"  %d %d  %d %d)\n",
+    CLprintf(file,"(shadow-sprite \"%s\"  %d %d  %d %d)\n",
        ShadowSprite.File,ShadowSprite.HotX,ShadowSprite.HotY,
        ShadowSprite.Width,ShadowSprite.Height);
-    fprintf(file,"(spell-sprite \"%s\"  %d %d  %d %d)\n",
+    CLprintf(file,"(spell-sprite \"%s\"  %d %d  %d %d)\n",
        SpellSprite.File,SpellSprite.HotX,SpellSprite.HotY,
        SpellSprite.Width,SpellSprite.Height);
 
     // This belongs to the config and not save file
     if( ShowHealthBar ) {
-       fprintf(file,";(show-health-bar)\n");
+       CLprintf(file,";(show-health-bar)\n");
     }
     if( ShowHealthDot ) {
-       fprintf(file,";(show-health-dot)\n");
+       CLprintf(file,";(show-health-dot)\n");
     }
     if( ShowHealthHorizontal ) {
-       fprintf(file,";(show-health-horizontal)\n");
+       CLprintf(file,";(show-health-horizontal)\n");
     } else {
-       fprintf(file,";(show-health-vertical)\n");
+       CLprintf(file,";(show-health-vertical)\n");
     }
     if( ShowHealthBackgroundLong ) {
-       fprintf(file,";(show-health-blackground-long)\n");
+       CLprintf(file,";(show-health-blackground-long)\n");
     }
     if( ShowManaBar ) {
-       fprintf(file,";(show-mana-bar)\n");
+       CLprintf(file,";(show-mana-bar)\n");
     }
     if( ShowManaDot ) {
-       fprintf(file,";(show-mana-dot)\n");
+       CLprintf(file,";(show-mana-dot)\n");
     }
     if( ShowManaHorizontal ) {
-       fprintf(file,";(show-mana-horizontal)\n");
+       CLprintf(file,";(show-mana-horizontal)\n");
     } else {
-       fprintf(file,";(show-mana-vertical)\n");
+       CLprintf(file,";(show-mana-vertical)\n");
     }
     if( ShowManaBackgroundLong ) {
-       fprintf(file,";(show-mana-blackground-long)\n");
+       CLprintf(file,";(show-mana-blackground-long)\n");
     }
     if( ShowEnergySelectedOnly ) {
-       fprintf(file,";(show-energy-selected-only)\n");
+       CLprintf(file,";(show-energy-selected-only)\n");
     }
     if( ShowNoFull ) {
-       fprintf(file,";(show-no-full)\n");
+       CLprintf(file,";(show-no-full)\n");
     } else {
-       fprintf(file,";(show-full)\n");
+       CLprintf(file,";(show-full)\n");
     }
     if( DecorationOnTop ) {
-       fprintf(file,";(decoration-on-top)\n");
+       CLprintf(file,";(decoration-on-top)\n");
     }
 }
 
@@ -1914,7 +1914,7 @@
        drawlevel2 = c2->Type->DrawLevel;
     }
     if( drawlevel1 == drawlevel2 ) {
-       return c1->Slot < c2->Slot ? -1 : 1;
+        return c1->Y*MaxMapWidth+c1->X < c2->Y*MaxMapWidth+c2->X ? -1 : 1;
     } else {
        return drawlevel1 <= drawlevel2 ? -1 : 1;
     }
Index: stratagus/src/editor/editloop.c
diff -u stratagus/src/editor/editloop.c:1.126 
stratagus/src/editor/editloop.c:1.127
--- stratagus/src/editor/editloop.c:1.126       Wed Aug 13 10:55:45 2003
+++ stratagus/src/editor/editloop.c     Sun Aug 17 11:57:07 2003
@@ -26,7 +26,7 @@
 //      Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
 //      02111-1307, USA.
 //
-//     $Id: editloop.c,v 1.126 2003/08/13 14:55:45 martinxyz Exp $
+//     $Id: editloop.c,v 1.127 2003/08/17 15:57:07 n0body Exp $
 
 //@{
 
@@ -1811,7 +1811,7 @@
     //  FIXME: the CLopen is very slow and repeats the work of LibraryFileName.
     //
     file = LibraryFileName(EditorStartFile, buf);
-    if ((clf = CLopen(file))) {
+    if ((clf = CLopen(file,CL_OPEN_READ))) {
        CLclose(clf);
        ShowLoadProgress("Script %s", file);
        if ((s = strrchr(file, '.')) && s[1] == 'C') {
Index: stratagus/src/game/campaign.c
diff -u stratagus/src/game/campaign.c:1.32 stratagus/src/game/campaign.c:1.33
--- stratagus/src/game/campaign.c:1.32  Sat Aug  2 09:34:24 2003
+++ stratagus/src/game/campaign.c       Sun Aug 17 11:57:07 2003
@@ -26,7 +26,7 @@
 //      Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
 //      02111-1307, USA.
 //
-//     $Id: campaign.c,v 1.32 2003/08/02 13:34:24 grumbel Exp $
+//     $Id: campaign.c,v 1.33 2003/08/17 15:57:07 n0body Exp $
 
 //@{
 
@@ -522,59 +522,59 @@
 /**
 **     Save the campaign module.
 */
-global void SaveCampaign(FILE* file)
+global void SaveCampaign(CLFile* file)
 {
     CampaignChapter *ch;
     ChapterPictureText *text;
     int i;
 
-    fprintf(file,"\n;;; -----------------------------------------\n");
-    fprintf(file,";;; MODULE: campaign $Id: campaign.c,v 1.32 2003/08/02 
13:34:24 grumbel Exp $\n\n");
+    CLprintf(file,"\n;;; -----------------------------------------\n");
+    CLprintf(file,";;; MODULE: campaign $Id: campaign.c,v 1.33 2003/08/17 
15:57:07 n0body Exp $\n\n");
     if( !CurrentCampaign ) {
        return;
     }
 
-    fprintf(file,"(define-campaign 'current");
+    CLprintf(file,"(define-campaign 'current");
     if( CurrentCampaign->Name ) {
-       fprintf(file," 'name \"%s\"",CurrentCampaign->Name);
+       CLprintf(file," 'name \"%s\"",CurrentCampaign->Name);
     }
-    fprintf(file," 'players %d",CurrentCampaign->Players);
-    fprintf(file,"\n");
+    CLprintf(file," 'players %d",CurrentCampaign->Players);
+    CLprintf(file,"\n");
 
-    fprintf(file,"  'campaign (list\n");
+    CLprintf(file,"  'campaign (list\n");
     for( ch=CurrentCampaign->Chapters; ch; ch=ch->Next ) {
        if( ch->Type == ChapterShowPicture ) {
-           fprintf(file,"    'show-picture (list\n");
-           fprintf(file,"      'image \"%s\"\n",ch->Data.Picture.Image);
-           fprintf(file,"      'fade-in %d\n",ch->Data.Picture.FadeIn);
-           fprintf(file,"      'fade-out %d\n",ch->Data.Picture.FadeOut);
-           fprintf(file,"      'display-time %d\n",
+           CLprintf(file,"    'show-picture (list\n");
+           CLprintf(file,"      'image \"%s\"\n",ch->Data.Picture.Image);
+           CLprintf(file,"      'fade-in %d\n",ch->Data.Picture.FadeIn);
+           CLprintf(file,"      'fade-out %d\n",ch->Data.Picture.FadeOut);
+           CLprintf(file,"      'display-time %d\n",
                ch->Data.Picture.DisplayTime);
            for( text=ch->Data.Picture.Text; text; text=text->Next ) {
-               fprintf(file,"      'text (list\n");
-               fprintf(file,"        'font '%s\n",FontNames[text->Font]);
-               fprintf(file,"        'x %d\n",text->X);
-               fprintf(file,"        'y %d\n",text->Y);
-               fprintf(file,"        'width %d\n",text->Width);
-               fprintf(file,"        'height %d\n",text->Height);
+               CLprintf(file,"      'text (list\n");
+               CLprintf(file,"        'font '%s\n",FontNames[text->Font]);
+               CLprintf(file,"        'x %d\n",text->X);
+               CLprintf(file,"        'y %d\n",text->Y);
+               CLprintf(file,"        'width %d\n",text->Width);
+               CLprintf(file,"        'height %d\n",text->Height);
                if (text->Align == PictureTextAlignLeft) {
-                   fprintf(file,"        'align 'left\n");
+                   CLprintf(file,"        'align 'left\n");
                } else {
-                   fprintf(file,"        'align 'center\n");
+                   CLprintf(file,"        'align 'center\n");
                }
-               fprintf(file,"        'text \"%s\"\n",text->Text);
-               fprintf(file,"      )\n");
+               CLprintf(file,"        'text \"%s\"\n",text->Text);
+               CLprintf(file,"      )\n");
            }
-           fprintf(file,"    )\n");
+           CLprintf(file,"    )\n");
        } else if( ch->Type == ChapterPlayLevel ) {
-           fprintf(file,"    'play-level \"%s\"\n",ch->Data.Level.Name);
+           CLprintf(file,"    'play-level \"%s\"\n",ch->Data.Level.Name);
        } else if( ch->Type == ChapterPlayVideo ) {
-           fprintf(file,"    'play-movie \"%s\" %d\n",
+           CLprintf(file,"    'play-movie \"%s\" %d\n",
                ch->Data.Movie.PathName,ch->Data.Movie.Flags);
        }
     }
-    fprintf(file,"  )\n");
-    fprintf(file,")\n");
+    CLprintf(file,"  )\n");
+    CLprintf(file,")\n");
 
     ch=CurrentCampaign->Chapters;
     i=0;
@@ -588,7 +588,7 @@
     if( !ch ) {
        i=0;
     }
-    fprintf(file,"(set-current-chapter! %d)\n", i);
+    CLprintf(file,"(set-current-chapter! %d)\n", i);
 }
 
 /**
Index: stratagus/src/game/intro.c
diff -u stratagus/src/game/intro.c:1.97 stratagus/src/game/intro.c:1.98
--- stratagus/src/game/intro.c:1.97     Fri Jul 11 10:35:30 2003
+++ stratagus/src/game/intro.c  Sun Aug 17 11:57:07 2003
@@ -26,7 +26,7 @@
 //      Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
 //      02111-1307, USA.
 //
-//     $Id: intro.c,v 1.97 2003/07/11 14:35:30 n0body Exp $
+//     $Id: intro.c,v 1.98 2003/08/17 15:57:07 n0body Exp $
 
 //@{
 
@@ -427,7 +427,7 @@
 #endif
 
     LibraryFileName(intro->TextFile,buf);
-    if( !(file=CLopen(buf)) ) {
+    if( !(file=CLopen(buf,CL_OPEN_READ)) ) {
        fprintf(stderr,"Can't open file `%s'\n",intro->TextFile);
        ExitFatal(-1);
     }
@@ -1582,16 +1582,16 @@
 /**
 **     Save the objectives.
 */
-global void SaveObjectives(FILE *file)
+global void SaveObjectives(CLFile *file)
 {
     int i;
 
     if( GameIntro.Objectives[0] ) {
-       fprintf(file,"(set-objectives!");
+       CLprintf(file,"(set-objectives!");
        for( i=0; i<MAX_OBJECTIVES && GameIntro.Objectives[i]; ++i ) {
-           fprintf(file,"\n  \"%s\"",GameIntro.Objectives[i]);
+           CLprintf(file,"\n  \"%s\"",GameIntro.Objectives[i]);
        }
-       fprintf(file,")\n");
+       CLprintf(file,")\n");
     }
 }
 
Index: stratagus/src/game/savegame.c
diff -u stratagus/src/game/savegame.c:1.30 stratagus/src/game/savegame.c:1.31
--- stratagus/src/game/savegame.c:1.30  Sat Aug  9 16:08:38 2003
+++ stratagus/src/game/savegame.c       Sun Aug 17 11:57:07 2003
@@ -26,7 +26,7 @@
 //      Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
 //      02111-1307, USA.
 //
-//     $Id: savegame.c,v 1.30 2003/08/09 20:08:38 martinxyz Exp $
+//     $Id: savegame.c,v 1.31 2003/08/17 15:57:07 n0body Exp $
 
 //@{
 
@@ -58,6 +58,7 @@
 #include "campaign.h"
 #include "trigger.h"
 #include "settings.h"
+#include "iolib.h"
 
 #include "ccl.h"
 
@@ -79,11 +80,11 @@
 global void SaveGame(const char* filename)
 {
     time_t now;
-    FILE* file;
+    CLFile* file;
     char* s;
     char* s1;
 
-    file=fopen(filename,"wb");
+    file=CLopen(filename,CL_WRITE_GZ | CL_OPEN_WRITE);
     if( !file ) {
        fprintf(stderr,"Can't save to `%s'\n",filename);
        return;
@@ -98,33 +99,33 @@
     //
     // Parseable header
     //
-    fprintf(file,";;;(save-game\n");
-    fprintf(file,";;;  'comment\t\"Generated by Stratagus Version " VERSION 
"\"\n");
-    fprintf(file,";;;  'comment\t\"Visit http://Stratagus.Org for more 
informations\"\n");
-    fprintf(file,";;;  'comment\t\"$Id: savegame.c,v 1.30 2003/08/09 20:08:38 
martinxyz Exp $\"\n");
-    fprintf(file,";;;  'type\t\"%s\"\n","single-player");
-    fprintf(file,";;;  'date\t\"%s\"\n",s);
-    fprintf(file,";;;  'map\t\"%s\"\n",TheMap.Description);
-    fprintf(file,";;;  'engine\t'(%d %d %d)\n",
+    CLprintf(file,";;;(save-game\n");
+    CLprintf(file,";;;  'comment\t\"Generated by Stratagus Version " VERSION 
"\"\n");
+    CLprintf(file,";;;  'comment\t\"Visit http://Stratagus.Org for more 
informations\"\n");
+    CLprintf(file,";;;  'comment\t\"$Id: savegame.c,v 1.31 2003/08/17 15:57:07 
n0body Exp $\"\n");
+    CLprintf(file,";;;  'type\t\"%s\"\n","single-player");
+    CLprintf(file,";;;  'date\t\"%s\"\n",s);
+    CLprintf(file,";;;  'map\t\"%s\"\n",TheMap.Description);
+    CLprintf(file,";;;  'engine\t'(%d %d %d)\n",
        StratagusMajorVersion,StratagusMinorVersion,StratagusPatchLevel);
-    fprintf(file,";;;  'savefile\t'(%d %d %d)\n",
+    CLprintf(file,";;;  'savefile\t'(%d %d %d)\n",
        StratagusMajorVersion,StratagusMinorVersion,StratagusPatchLevel);
     // Save media type
     { SCM var;
-       fprintf(file,";;;  'media\t'");
+       CLprintf(file,";;;  'media\t'");
        var=gh_symbol2scm("media-version");
        if (symbol_boundp(var, NIL)) {
            var=symbol_value(var,NIL);
-           lprin1f(var,file);
+           lprin1CL(var,file);
        } else {
-           fprintf(file,"nil");
+           CLprintf(file,"nil");
        }
     }
-    fprintf(file,"\n;;;  'preview\t\"%s.pam\"\n",filename);
-    fprintf(file,";;;  )\n");
+    CLprintf(file,"\n;;;  'preview\t\"%s.pam\"\n",filename);
+    CLprintf(file,";;;  )\n");
 
     // FIXME: probably not the right place for this
-    fprintf(file,"(set-game-cycle! %lu)\n",GameCycle);
+    CLprintf(file,"(set-game-cycle! %lu)\n",GameCycle);
 
     SaveCcl(file);
     SaveIcons(file);
@@ -148,10 +149,9 @@
     SaveTriggers(file);
     SaveCampaign(file);
     SaveObjectives(file);
-
     // FIXME: find all state information which must be saved.
 
-    fclose(file);
+    CLclose(file);
 }
 
 //@}
Index: stratagus/src/game/trigger.c
diff -u stratagus/src/game/trigger.c:1.41 stratagus/src/game/trigger.c:1.42
--- stratagus/src/game/trigger.c:1.41   Sat Aug  2 09:34:25 2003
+++ stratagus/src/game/trigger.c        Sun Aug 17 11:57:07 2003
@@ -26,7 +26,7 @@
 //      Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
 //      02111-1307, USA.
 //
-//     $Id: trigger.c,v 1.41 2003/08/02 13:34:25 grumbel Exp $
+//     $Id: trigger.c,v 1.42 2003/08/17 15:57:07 n0body Exp $
 
 //@{
 
@@ -1100,7 +1100,7 @@
 **     @param exp      Expression
 **     @param f        File to print to
 */
-local void PrintTrigger(SCM exp, FILE *f)
+local void PrintTrigger(SCM exp, CLFile *f)
 {
 #ifdef USE_GUILE
 #else
@@ -1113,20 +1113,20 @@
     INTERRUPT_CHECK();
     switch TYPE(exp) {
     case tc_nil:
-       fprintf(f,"()");
+       CLprintf(f,"()");
        break;
     case tc_cons:
-       fprintf(f,"(");
+       CLprintf(f,"(");
        PrintTrigger(car(exp),f);
        for(tmp=cdr(exp);CONSP(tmp);tmp=cdr(tmp)) {
-           fprintf(f," ");
+           CLprintf(f," ");
            PrintTrigger(car(tmp),f);
        }
        if NNULLP(tmp) {
-           fprintf(f," . ");
+           CLprintf(f," . ");
            PrintTrigger(tmp,f);
        }
-       fprintf(f,")");
+       CLprintf(f,")");
        break;
     case tc_flonum:
        n = (long) FLONM(exp);
@@ -1135,10 +1135,10 @@
        } else {
            sprintf(tkbuffer,"%g",FLONM(exp));
        }
-       fprintf(f,tkbuffer);
+       CLprintf(f,tkbuffer);
        break;
     case tc_symbol:
-       fprintf(f,PNAME(exp));
+       CLprintf(f,PNAME(exp));
        break;
     case tc_subr_0:
     case tc_subr_1:
@@ -1151,22 +1151,22 @@
     case tc_fsubr:
     case tc_msubr:
        sprintf(tkbuffer,"#<%s ",subr_kind_str(TYPE(exp)));
-       fprintf(f,tkbuffer);
-       fprintf(f,(*exp).storage_as.subr.name);
-       fprintf(f,">");
+       CLprintf(f,tkbuffer);
+       CLprintf(f,(*exp).storage_as.subr.name);
+       CLprintf(f,">");
        break;
     case tc_string:
-       fprintf(f,"\"%s\"",(*exp).storage_as.string.data);
+       CLprintf(f,"\"%s\"",(*exp).storage_as.string.data);
        break;
     case tc_closure:
-       fprintf(f,"(lambda ");
+       CLprintf(f,"(lambda ");
        if CONSP((*exp).storage_as.closure.code) {
            PrintTrigger(car((*exp).storage_as.closure.code),f);
-           fprintf(f," ");
+           CLprintf(f," ");
            PrintTrigger(cdr((*exp).storage_as.closure.code),f);
        } else
            PrintTrigger((*exp).storage_as.closure.code,f);
-       fprintf(f,")");
+       CLprintf(f,")");
        break;
     default:
        break;
@@ -1176,7 +1176,7 @@
            (*p->prin1)(exp,f);
        else {
            sprintf(tkbuffer,"#<UNKNOWN %d %p>",TYPE(exp),exp);
-           fprintf(f,tkbuffer);
+           CLprintf(f,tkbuffer);
        }
 #endif
     }
@@ -1188,14 +1188,14 @@
 **
 **     @param file     Open file to print to
 */
-global void SaveTriggers(FILE* file)
+global void SaveTriggers(CLFile* file)
 {
     SCM list;
     int i;
     int trigger;
 
-    fprintf(file,"\n;;; -----------------------------------------\n");
-    fprintf(file,";;; MODULE: trigger $Id: trigger.c,v 1.41 2003/08/02 
13:34:25 grumbel Exp $\n\n");
+    CLprintf(file,"\n;;; -----------------------------------------\n");
+    CLprintf(file,";;; MODULE: trigger $Id: trigger.c,v 1.42 2003/08/17 
15:57:07 n0body Exp $\n\n");
 
     i=0;
     trigger=-1;
@@ -1204,21 +1204,21 @@
        if( gh_eq_p(Trigger,list) ) {
            trigger=i;
        }
-       fprintf(file,"(add-trigger '");
+       CLprintf(file,"(add-trigger '");
        PrintTrigger(gh_car(gh_car(list)),file);
-       fprintf(file," '");
+       CLprintf(file," '");
        PrintTrigger(gh_cdr(gh_car(list)),file);
-       fprintf(file,")\n");
+       CLprintf(file,")\n");
        list=gh_cdr(list);
        ++i;
     }
-    fprintf(file,"(set-trigger-number! %d)\n",trigger);
+    CLprintf(file,"(set-trigger-number! %d)\n",trigger);
 
     if( GameTimer.Init ) {
-       fprintf(file,"(action-set-timer %ld %d)\n",
+       CLprintf(file,"(action-set-timer %ld %d)\n",
            GameTimer.Cycles,GameTimer.Increasing);
        if( GameTimer.Running ) {
-           fprintf(file,"(action-start-timer)\n");
+           CLprintf(file,"(action-start-timer)\n");
        }
     }
 }
Index: stratagus/src/include/ai.h
diff -u stratagus/src/include/ai.h:1.28 stratagus/src/include/ai.h:1.29
--- stratagus/src/include/ai.h:1.28     Fri Jul 11 10:35:30 2003
+++ stratagus/src/include/ai.h  Sun Aug 17 11:57:07 2003
@@ -26,7 +26,7 @@
 //      Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
 //      02111-1307, USA.
 //
-//     $Id: ai.h,v 1.28 2003/07/11 14:35:30 n0body Exp $
+//     $Id: ai.h,v 1.29 2003/08/17 15:57:07 n0body Exp $
 
 #ifndef __AI_H__
 #define __AI_H__
@@ -43,20 +43,20 @@
 --     Variables
 ----------------------------------------------------------------------------*/
 
-extern int AiSleepCycles;              /// Ai sleeps # cycles
-extern int AiTimeFactor;               /// Adjust the AI build times
-extern int AiCostFactor;               /// Adjust the AI costs
+extern int AiSleepCycles;                      /// Ai sleeps # cycles
+extern int AiTimeFactor;                       /// Adjust the AI build times
+extern int AiCostFactor;                       /// Adjust the AI costs
 
 /*----------------------------------------------------------------------------
 --     Functions
 ----------------------------------------------------------------------------*/
 
-extern void AiEachCycle(Player* player);/// Called each game cycle
-extern void AiEachSecond(Player* player);/// Called each second
+extern void AiEachCycle(Player* player);       /// Called each game cycle
+extern void AiEachSecond(Player* player);      /// Called each second
 
-extern void AiInit(Player* player);    /// Init AI for this player
-extern void CleanAi(void);             /// Cleanup the AI module
-extern void SaveAi(FILE* file);                /// Save the AI state
+extern void AiInit(Player* player);            /// Init AI for this player
+extern void CleanAi(void);                     /// Cleanup the AI module
+extern void SaveAi(CLFile*file);               /// Save the AI state
 
 extern void AiCclRegister(void);       /// Register ccl features
 
Index: stratagus/src/include/campaign.h
diff -u stratagus/src/include/campaign.h:1.12 
stratagus/src/include/campaign.h:1.13
--- stratagus/src/include/campaign.h:1.12       Fri Jul 11 10:35:30 2003
+++ stratagus/src/include/campaign.h    Sun Aug 17 11:57:07 2003
@@ -26,7 +26,7 @@
 //      Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
 //      02111-1307, USA.
 //
-//     $Id: campaign.h,v 1.12 2003/07/11 14:35:30 n0body Exp $
+//     $Id: campaign.h,v 1.13 2003/08/17 15:57:07 n0body Exp $
 
 #ifndef __CAMPAIGN_H__
 #define __CAMPAIGN_H__
@@ -37,6 +37,8 @@
 --     Includes
 ----------------------------------------------------------------------------*/
 
+#include "iolib.h"
+
 /*----------------------------------------------------------------------------
 --     Declaration
 ----------------------------------------------------------------------------*/
@@ -157,7 +159,7 @@
 extern char* NextChapter(void);
 
 extern void CampaignCclRegister(void); /// Register ccl features
-extern void SaveCampaign(FILE*);       /// Save the campaign module
+extern void SaveCampaign(CLFile*);     /// Save the campaign module
 extern void CleanCampaign(void);       /// Cleanup the campaign module
 
 //@}
Index: stratagus/src/include/ccl.h
diff -u stratagus/src/include/ccl.h:1.37 stratagus/src/include/ccl.h:1.38
--- stratagus/src/include/ccl.h:1.37    Sat Aug  2 09:34:25 2003
+++ stratagus/src/include/ccl.h Sun Aug 17 11:57:07 2003
@@ -26,7 +26,7 @@
 //      Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
 //      02111-1307, USA.
 //
-//     $Id: ccl.h,v 1.37 2003/08/02 13:34:25 grumbel Exp $
+//     $Id: ccl.h,v 1.38 2003/08/17 15:57:07 n0body Exp $
 
 #ifndef __CCL_H__
 #define __CCL_H__
@@ -148,6 +148,8 @@
 
 #endif // !USE_GUILE
 
+#include "iolib.h"
+
 //extern SCM CclEachSecond;            /// Scheme function called each second
 
 /*----------------------------------------------------------------------------
@@ -171,7 +173,7 @@
 extern void CclGcUnprotect(SCM obj);   /// Unprotect scm object for GC
 extern void InitCcl(void);             /// Initialise ccl
 extern void LoadCcl(void);             /// Load ccl config file
-extern void SaveCcl(FILE* file);       /// Save CCL module
+extern void SaveCcl(CLFile* file);     /// Save CCL module
 extern void SavePreferences(void);     /// Save user preferences
 extern void CclCommand(const char*);   /// Execute a ccl command
 extern void CclFree(void*);            /// Save free
Index: stratagus/src/include/construct.h
diff -u stratagus/src/include/construct.h:1.21 
stratagus/src/include/construct.h:1.22
--- stratagus/src/include/construct.h:1.21      Fri Jul 11 10:35:30 2003
+++ stratagus/src/include/construct.h   Sun Aug 17 11:57:07 2003
@@ -26,7 +26,7 @@
 //      Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
 //      02111-1307, USA.
 //
-//     $Id: construct.h,v 1.21 2003/07/11 14:35:30 n0body Exp $
+//     $Id: construct.h,v 1.22 2003/08/17 15:57:07 n0body Exp $
 
 #ifndef __CONSTRUCT_H__
 #define __CONSTRUCT_H__
@@ -169,7 +169,7 @@
     ///        Load the graphics for constructions
 extern void LoadConstructions(void);
     /// Save current construction state
-extern void SaveConstructions(FILE* file);
+extern void SaveConstructions(CLFile* file);
     ///        Clean up the constructions module
 extern void CleanConstructions(void);
     /// Get construction by wc number
Index: stratagus/src/include/cursor.h
diff -u stratagus/src/include/cursor.h:1.34 stratagus/src/include/cursor.h:1.35
--- stratagus/src/include/cursor.h:1.34 Wed Aug 13 10:55:45 2003
+++ stratagus/src/include/cursor.h      Sun Aug 17 11:57:07 2003
@@ -26,7 +26,7 @@
 //      Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
 //      02111-1307, USA.
 //
-//     $Id: cursor.h,v 1.34 2003/08/13 14:55:45 martinxyz Exp $
+//     $Id: cursor.h,v 1.35 2003/08/17 15:57:07 n0body Exp $
 
 #ifndef __CURSOR_H__
 #define __CURSOR_H__
@@ -227,7 +227,7 @@
     /// Initialize the cursor module
 extern void InitVideoCursors(void);
     /// Save the cursor definitions
-extern void SaveCursors(FILE*);
+extern void SaveCursors(CLFile*);
     /// Cleanup the cursor module
 extern void CleanCursors(void);
     /// Destroy image behind cursor.
Index: stratagus/src/include/depend.h
diff -u stratagus/src/include/depend.h:1.16 stratagus/src/include/depend.h:1.17
--- stratagus/src/include/depend.h:1.16 Sat Aug  9 16:08:38 2003
+++ stratagus/src/include/depend.h      Sun Aug 17 11:57:07 2003
@@ -26,7 +26,7 @@
 //      Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
 //      02111-1307, USA.
 //
-//     $Id: depend.h,v 1.16 2003/08/09 20:08:38 martinxyz Exp $
+//     $Id: depend.h,v 1.17 2003/08/17 15:57:07 n0body Exp $
 
 #ifndef __DEPEND_H__
 #define __DEPEND_H__
@@ -138,7 +138,7 @@
     /// Load the dependencies
 extern void LoadDependencies(FILE* file);
     /// Save the dependencies
-extern void SaveDependencies(FILE* file);
+extern void SaveDependencies(CLFile* file);
     /// Cleanup dependencies module
 extern void CleanDependencies();
 
Index: stratagus/src/include/icons.h
diff -u stratagus/src/include/icons.h:1.37 stratagus/src/include/icons.h:1.38
--- stratagus/src/include/icons.h:1.37  Sat Aug  9 16:08:38 2003
+++ stratagus/src/include/icons.h       Sun Aug 17 11:57:07 2003
@@ -26,7 +26,7 @@
 //      Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
 //      02111-1307, USA.
 //
-//     $Id: icons.h,v 1.37 2003/08/09 20:08:38 martinxyz Exp $
+//     $Id: icons.h,v 1.38 2003/08/17 15:57:07 n0body Exp $
 
 #ifndef __ICONS_H__
 #define __ICONS_H__
@@ -132,6 +132,7 @@
 ----------------------------------------------------------------------------*/
 
 #include "video.h"
+#include "iolib.h"
 
 /*----------------------------------------------------------------------------
 --     Defines
@@ -219,7 +220,7 @@
     /// Draw icon of an unit
 extern void DrawUnitIcon(const Player*,Icon*,unsigned,int,int);
 
-extern void SaveIcons(FILE*);          /// Save icons
+extern void SaveIcons(CLFile*);                /// Save icons
 extern void IconCclRegister(void);     /// Register CCL features
 
 //@}
Index: stratagus/src/include/interface.h
diff -u stratagus/src/include/interface.h:1.80 
stratagus/src/include/interface.h:1.81
--- stratagus/src/include/interface.h:1.80      Fri Aug  8 06:16:44 2003
+++ stratagus/src/include/interface.h   Sun Aug 17 11:57:07 2003
@@ -26,7 +26,7 @@
 //      Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
 //      02111-1307, USA.
 //
-//     $Id: interface.h,v 1.80 2003/08/08 10:16:44 martinxyz Exp $
+//     $Id: interface.h,v 1.81 2003/08/17 15:57:07 n0body Exp $
 
 #ifndef __INTERFACE_H__
 #define __INTERFACE_H__
@@ -322,7 +322,7 @@
 #endif
 
     /// Save all buttons
-extern void SaveButtons(FILE* file);
+extern void SaveButtons(CLFile* file);
 
 //
 //     in mouse.c
Index: stratagus/src/include/iolib.h
diff -u stratagus/src/include/iolib.h:1.17 stratagus/src/include/iolib.h:1.18
--- stratagus/src/include/iolib.h:1.17  Fri Jul 11 10:35:30 2003
+++ stratagus/src/include/iolib.h       Sun Aug 17 11:57:07 2003
@@ -26,7 +26,7 @@
 //      Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
 //      02111-1307, USA.
 //
-//     $Id: iolib.h,v 1.17 2003/07/11 14:35:30 n0body Exp $
+//     $Id: iolib.h,v 1.18 2003/08/17 15:57:07 n0body Exp $
 
 #ifndef __IOLIB_H__
 #define __IOLIB_H__
@@ -106,18 +106,25 @@
     CLF_TYPE_ZZIP,                     /// zzip file handle
 };
 
+#define CL_OPEN_READ 0x1
+#define CL_OPEN_WRITE 0x2
+#define CL_WRITE_GZ 0x4
+#define CL_WRITE_BZ2 0x8
+
 /*----------------------------------------------------------------------------
 --     Functions
 ----------------------------------------------------------------------------*/
 
     ///  Library file open
-extern CLFile *CLopen(const char *fn);
+extern CLFile *CLopen(const char *fn,long flags);
     ///  Library file close
 extern int CLclose(CLFile *file);
     ///  Library file read
 extern int CLread(CLFile *file, void *buf, size_t len);
     ///  Library file seek
 extern int CLseek(CLFile *file, long offset, int whence);
+    ///  Library file write
+extern int CLprintf(CLFile *file, char *format, ...);
 
 
 #endif // USE_ZLIB || USE_BZ2LIB || USE_ZZIPLIB
Index: stratagus/src/include/map.h
diff -u stratagus/src/include/map.h:1.96 stratagus/src/include/map.h:1.97
--- stratagus/src/include/map.h:1.96    Fri Jul 11 10:35:30 2003
+++ stratagus/src/include/map.h Sun Aug 17 11:57:07 2003
@@ -27,7 +27,7 @@
 //      Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
 //      02111-1307, USA.
 //
-//     $Id: map.h,v 1.96 2003/07/11 14:35:30 n0body Exp $
+//     $Id: map.h,v 1.97 2003/08/17 15:57:07 n0body Exp $
 
 #ifndef __MAP_H__
 #define __MAP_H__
@@ -474,7 +474,7 @@
     /// Load a map
 //extern void LoadMap(const char* file,WorldMap* map);
     /// Save the map
-extern void SaveMap(FILE* file);
+extern void SaveMap(CLFile* file);
     /// Clean the map
 extern void CleanMap(void);
 
Index: stratagus/src/include/missile.h
diff -u stratagus/src/include/missile.h:1.61 
stratagus/src/include/missile.h:1.62
--- stratagus/src/include/missile.h:1.61        Sat Aug  9 16:08:38 2003
+++ stratagus/src/include/missile.h     Sun Aug 17 11:57:07 2003
@@ -26,7 +26,7 @@
 //      Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
 //      02111-1307, USA.
 //
-//     $Id: missile.h,v 1.61 2003/08/09 20:08:38 martinxyz Exp $
+//     $Id: missile.h,v 1.62 2003/08/17 15:57:07 n0body Exp $
 
 #ifndef __MISSILE_H__
 #define __MISSILE_H__
@@ -530,9 +530,9 @@
 extern int ViewPointDistanceToMissile(const Missile*);
 
     /// Save missile-types
-extern void SaveMissileTypes(FILE*);
+extern void SaveMissileTypes(CLFile *);
     /// Save missiles
-extern void SaveMissiles(FILE*);
+extern void SaveMissiles(CLFile*);
 
     /// Initialize missile-types
 extern void InitMissileTypes(void);
Index: stratagus/src/include/player.h
diff -u stratagus/src/include/player.h:1.71 stratagus/src/include/player.h:1.72
--- stratagus/src/include/player.h:1.71 Fri Jul 11 10:35:30 2003
+++ stratagus/src/include/player.h      Sun Aug 17 11:57:07 2003
@@ -26,7 +26,7 @@
 //      Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
 //      02111-1307, USA.
 //
-//     $Id: player.h,v 1.71 2003/07/11 14:35:30 n0body Exp $
+//     $Id: player.h,v 1.72 2003/08/17 15:57:07 n0body Exp $
 
 #ifndef __PLAYER_H__
 #define __PLAYER_H__
@@ -479,7 +479,7 @@
     /// Clean up players
 extern void CleanPlayers(void);
     /// Save players
-extern void SavePlayers(FILE*);
+extern void SavePlayers(CLFile*);
 
     /// Create a new player
 extern void CreatePlayer(int type);
Index: stratagus/src/include/settings.h
diff -u stratagus/src/include/settings.h:1.26 
stratagus/src/include/settings.h:1.27
--- stratagus/src/include/settings.h:1.26       Fri Jul 11 10:35:30 2003
+++ stratagus/src/include/settings.h    Sun Aug 17 11:57:07 2003
@@ -26,7 +26,7 @@
 //      Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
 //      02111-1307, USA.
 //
-//     $Id: settings.h,v 1.26 2003/07/11 14:35:30 n0body Exp $
+//     $Id: settings.h,v 1.27 2003/08/17 15:57:07 n0body Exp $
 
 #ifndef __SETTINGS_H__
 #define __SETTINGS_H__
@@ -172,7 +172,7 @@
     /// Register CCL functions for objectives
 extern void ObjectivesCclRegister(void);
     /// Save the objectives
-extern void SaveObjectives(FILE *file);
+extern void SaveObjectives(CLFile *file);
     /// Create a game
 extern void CreateGame(char* filename,WorldMap* map);
     /// Init Setting to default values
Index: stratagus/src/include/siod.h
diff -u stratagus/src/include/siod.h:1.7 stratagus/src/include/siod.h:1.8
--- stratagus/src/include/siod.h:1.7    Wed Jun 20 20:02:39 2001
+++ stratagus/src/include/siod.h        Sun Aug 17 11:57:07 2003
@@ -4,13 +4,15 @@
  *        PARADIGM ASSOCIATES INCORPORATED, CAMBRIDGE, MASSACHUSETTS.       *
  *        See the source file SLIB.C for more information.                  *
 
- $Id: siod.h,v 1.7 2001/06/21 00:02:39 johns Exp $
+ $Id: siod.h,v 1.8 2003/08/17 15:57:07 n0body Exp $
 
 */
 
 #ifndef __SIOD_H__
 #define __SIOD_H__
 
+#include "iolib.h"
+
 struct obj
 {short gc_mark;
  short type;
@@ -239,6 +241,7 @@
 void set_print_hooks(long type,void (*fcn)(LISP, struct gen_printio *));
 LISP lprin1g(LISP exp,struct gen_printio *f);
 LISP lprin1f(LISP exp,FILE *f);
+LISP lprin1CL(LISP exp,CLFile *f);
 LISP lprint(LISP exp,LISP);
 LISP lread(LISP);
 LISP lreadtk(char *,long j);
Index: stratagus/src/include/tileset.h
diff -u stratagus/src/include/tileset.h:1.44 
stratagus/src/include/tileset.h:1.45
--- stratagus/src/include/tileset.h:1.44        Sat Aug  9 16:08:38 2003
+++ stratagus/src/include/tileset.h     Sun Aug 17 11:57:07 2003
@@ -26,7 +26,7 @@
 //      Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
 //      02111-1307, USA.
 //
-//     $Id: tileset.h,v 1.44 2003/08/09 20:08:38 martinxyz Exp $
+//     $Id: tileset.h,v 1.45 2003/08/17 15:57:07 n0body Exp $
 
 #ifndef __TILESET_H__
 #define __TILESET_H__
@@ -38,6 +38,7 @@
 ----------------------------------------------------------------------------*/
 
 #include "etlib/hash.h"
+#include "iolib.h"
 
 /*----------------------------------------------------------------------------
 --     Documentation
@@ -334,7 +335,7 @@
 ----------------------------------------------------------------------------*/
 
 extern void LoadTileset(void);         /// Load tileset definition
-extern void SaveTilesets(FILE*);       /// Save the tileset configuration
+extern void SaveTilesets(CLFile*file); /// Save the tileset configuration
 extern void CleanTilesets(void);       /// Cleanup the tileset module
 
 extern void TilesetCclRegister(void);  /// Register CCL features for tileset
Index: stratagus/src/include/trigger.h
diff -u stratagus/src/include/trigger.h:1.13 
stratagus/src/include/trigger.h:1.14
--- stratagus/src/include/trigger.h:1.13        Fri Jul 11 10:35:30 2003
+++ stratagus/src/include/trigger.h     Sun Aug 17 11:57:07 2003
@@ -26,7 +26,7 @@
 //      Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
 //      02111-1307, USA.
 //
-//     $Id: trigger.h,v 1.13 2003/07/11 14:35:30 n0body Exp $
+//     $Id: trigger.h,v 1.14 2003/08/17 15:57:07 n0body Exp $
 
 #ifndef __TRIGGER_H__
 #define __TRIGGER_H__
@@ -74,7 +74,7 @@
 extern void TriggersEachCycle(void);   /// test triggers
 
 extern void TriggerCclRegister(void);  /// Register ccl features
-extern void SaveTriggers(FILE*);       /// Save the trigger module
+extern void SaveTriggers(CLFile*);     /// Save the trigger module
 extern void InitTriggers(void);                /// Setup triggers
 extern void CleanTriggers(void);       /// Cleanup the trigger module
 
Index: stratagus/src/include/ui.h
diff -u stratagus/src/include/ui.h:1.64 stratagus/src/include/ui.h:1.65
--- stratagus/src/include/ui.h:1.64     Wed Aug 13 10:55:45 2003
+++ stratagus/src/include/ui.h  Sun Aug 17 11:57:07 2003
@@ -26,7 +26,7 @@
 //      Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
 //      02111-1307, USA.
 //
-//     $Id: ui.h,v 1.64 2003/08/13 14:55:45 martinxyz Exp $
+//     $Id: ui.h,v 1.65 2003/08/17 15:57:07 n0body Exp $
 
 #ifndef __UI_H__
 #define __UI_H__
@@ -335,7 +335,7 @@
 
 extern void InitUserInterface(const char*);    /// initialize the ui
 extern void LoadUserInterface(void);           /// load ui graphics
-extern void SaveUserInterface(FILE*);          /// save the ui state
+extern void SaveUserInterface(CLFile*);                /// save the ui state
 extern void CleanUI(UI*);                      /// clean up a ui
 extern void CleanUserInterface(void);          /// clean up the ui module
 extern void UserInterfaceCclRegister(void);    /// register ccl features
Index: stratagus/src/include/unit.h
diff -u stratagus/src/include/unit.h:1.205 stratagus/src/include/unit.h:1.206
--- stratagus/src/include/unit.h:1.205  Sat Aug 16 20:26:31 2003
+++ stratagus/src/include/unit.h        Sun Aug 17 11:57:07 2003
@@ -26,7 +26,7 @@
 //      Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
 //      02111-1307, USA.
 //
-//     $Id: unit.h,v 1.205 2003/08/17 00:26:31 n0body Exp $
+//     $Id: unit.h,v 1.206 2003/08/17 15:57:07 n0body Exp $
 
 #ifndef __UNIT_H__
 #define __UNIT_H__
@@ -863,9 +863,9 @@
     /// Generate a unit reference, a printable unique string for unit
 extern char* UnitReference(const Unit*);
     /// save unit-structure
-extern void SaveUnit(const Unit* unit,FILE* file);
+extern void SaveUnit(const Unit* unit,CLFile* file);
     /// save all units
-extern void SaveUnits(FILE* file);
+extern void SaveUnits(CLFile* file);
 
     /// Initialize unit module
 extern void InitUnits(void);
@@ -932,7 +932,7 @@
     /// Load the decorations (health,mana) of units
 extern void LoadDecorations(void);
     /// Save the decorations (health,mana) of units
-extern void SaveDecorations(FILE* file);
+extern void SaveDecorations(CLFile* file);
     /// Clean the decorations (health,mana) of units
 extern void CleanDecorations(void);
 
@@ -979,7 +979,7 @@
     /// Initialize data structures for groups
 extern void InitGroups(void);
     /// Save groups
-extern void SaveGroups(FILE* file);
+extern void SaveGroups(CLFile* file);
     /// Cleanup groups
 extern void CleanGroups(void);
 
@@ -1043,7 +1043,7 @@
     /// Init selections
 extern void InitSelections(void);
     /// Save current selection state
-extern void SaveSelections(FILE* file);
+extern void SaveSelections(CLFile* file);
     /// Clean up selections
 extern void CleanSelections(void);
     /// Register CCL selection features
Index: stratagus/src/include/unittype.h
diff -u stratagus/src/include/unittype.h:1.95 
stratagus/src/include/unittype.h:1.96
--- stratagus/src/include/unittype.h:1.95       Sun Aug 10 22:14:46 2003
+++ stratagus/src/include/unittype.h    Sun Aug 17 11:57:07 2003
@@ -26,7 +26,7 @@
 //      Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
 //      02111-1307, USA.
 //
-//     $Id: unittype.h,v 1.95 2003/08/11 02:14:46 n0body Exp $
+//     $Id: unittype.h,v 1.96 2003/08/17 15:57:07 n0body Exp $
 
 #ifndef __UNITTYPE_H__
 #define __UNITTYPE_H__
@@ -658,30 +658,30 @@
 extern UnitType*UnitTypeCritter;               /// Critter unit-type pointer
 extern UnitType*UnitTypeBerserker;             /// Berserker for berserker 
regeneration
 
-extern char** UnitTypeWcNames;         /// Mapping wc-number 2 symbol
+extern char** UnitTypeWcNames;                 /// Mapping wc-number 2 symbol
 
 /*----------------------------------------------------------------------------
 --     Functions
 ----------------------------------------------------------------------------*/
 
-extern void UnitTypeCclRegister(void); /// Register ccl features
+extern void UnitTypeCclRegister(void);         /// Register ccl features
 
 extern void UpdateStats(int reset_to_default);         /// Update unit stats
-extern void ParsePudUDTA(const char*,int); /// Parse pud udta table
-extern UnitType* UnitTypeByIdent(const char*); /// Get unit-type by ident
-extern UnitType* UnitTypeByWcNum(unsigned);    /// Get unit-type by wc number
+extern void ParsePudUDTA(const char*,int);             /// Parse pud udta table
+extern UnitType* UnitTypeByIdent(const char*);         /// Get unit-type by 
ident
+extern UnitType* UnitTypeByWcNum(unsigned);            /// Get unit-type by wc 
number
 
     /// Get the animations structure by ident
 extern Animations* AnimationsByIdent(const char* ident);
 
-extern void SaveUnitTypes(FILE* file); /// Save the unit-type table
-extern UnitType* NewUnitTypeSlot(char*);/// Allocate an empty unit-type slot
+extern void SaveUnitTypes(CLFile* file);               /// Save the unit-type 
table
+extern UnitType* NewUnitTypeSlot(char*);               /// Allocate an empty 
unit-type slot
     /// Draw the sprite frame of unit-type
 extern void DrawUnitType(const UnitType* type,int frame,int x,int y);
 
 extern void InitUnitTypes(int reset_player_stats);     /// Init unit-type table
-extern void LoadUnitTypes(void);       /// Load the unit-type data
-extern void CleanUnitTypes(void);      /// Cleanup unit-type module
+extern void LoadUnitTypes(void);                       /// Load the unit-type 
data
+extern void CleanUnitTypes(void);                      /// Cleanup unit-type 
module
 
 //@}
 
Index: stratagus/src/include/upgrade.h
diff -u stratagus/src/include/upgrade.h:1.28 
stratagus/src/include/upgrade.h:1.29
--- stratagus/src/include/upgrade.h:1.28        Fri Jul 11 10:35:30 2003
+++ stratagus/src/include/upgrade.h     Sun Aug 17 11:57:07 2003
@@ -26,7 +26,7 @@
 //      Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
 //      02111-1307, USA.
 //
-//     $Id: upgrade.h,v 1.28 2003/07/11 14:35:30 n0body Exp $
+//     $Id: upgrade.h,v 1.29 2003/08/17 15:57:07 n0body Exp $
 
 #ifndef __UPGRADE_H__
 #define __UPGRADE_H__
@@ -57,7 +57,7 @@
     /// init upgrade/allow structures
 extern void InitUpgrades(void);
     /// save the upgrades
-extern void SaveUpgrades(FILE*);
+extern void SaveUpgrades(CLFile*);
     /// cleanup upgrade module
 extern void CleanUpgrades();
 
Index: stratagus/src/map/map_save.c
diff -u stratagus/src/map/map_save.c:1.18 stratagus/src/map/map_save.c:1.19
--- stratagus/src/map/map_save.c:1.18   Fri Jul 11 10:35:32 2003
+++ stratagus/src/map/map_save.c        Sun Aug 17 11:57:07 2003
@@ -26,7 +26,7 @@
 //      Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
 //      02111-1307, USA.
 //
-//     $Id: map_save.c,v 1.18 2003/07/11 14:35:32 n0body Exp $
+//     $Id: map_save.c,v 1.19 2003/08/17 15:57:07 n0body Exp $
 
 //@{
 
@@ -61,98 +61,98 @@
 **
 **     @param file     Output file.
 */
-global void SaveMap(FILE* file)
+global void SaveMap(CLFile* file)
 {
     int w;
     int h;
     int i;
 
-    fprintf(file,"\n;;; -----------------------------------------\n");
-    fprintf(file,";;; MODULE: map $Id: map_save.c,v 1.18 2003/07/11 14:35:32 
n0body Exp $\n");
+    CLprintf(file,"\n;;; -----------------------------------------\n");
+    CLprintf(file,";;; MODULE: map $Id: map_save.c,v 1.19 2003/08/17 15:57:07 
n0body Exp $\n");
 
-    fprintf(file,"(stratagus-map\n");
+    CLprintf(file,"(stratagus-map\n");
 
-    fprintf(file,"  'version \"" StratagusFormatString "\"\n",
+    CLprintf(file,"  'version \"" StratagusFormatString "\"\n",
            StratagusFormatArgs(StratagusVersion));
-    fprintf(file,"  'description \"%s\"\n",TheMap.Description);
+    CLprintf(file,"  'description \"%s\"\n",TheMap.Description);
 
-    fprintf(file,"  'the-map '(\n");
+    CLprintf(file,"  'the-map '(\n");
 
     // FIXME: Why terrain? TheMap->Tileset->Class should be correct
-    fprintf(file,"  terrain (%s \"%s\")\n"
+    CLprintf(file,"  terrain (%s \"%s\")\n"
            ,TheMap.TerrainName,Tilesets[TheMap.Terrain]->Class);
 
-    fprintf(file,"  size (%d %d)\n",TheMap.Width,TheMap.Height);
-    fprintf(file,"  %s\n",TheMap.NoFogOfWar ? "no-fog-of-war" : "fog-of-war");
+    CLprintf(file,"  size (%d %d)\n",TheMap.Width,TheMap.Height);
+    CLprintf(file,"  %s\n",TheMap.NoFogOfWar ? "no-fog-of-war" : "fog-of-war");
 
-    fprintf(file,"  map-fields (\n");
+    CLprintf(file,"  map-fields (\n");
     for( h=0; h<TheMap.Height; ++h ) {
-       fprintf(file,"  ; %d\n",h);
+       CLprintf(file,"  ; %d\n",h);
        for( w=0; w<TheMap.Width; ++w ) {
            MapField* mf;
 
            mf=&TheMap.Fields[h*TheMap.Width+w];
-           fprintf(file,"  (%3d %3d",mf->Tile,mf->SeenTile);
+           CLprintf(file,"  (%3d %3d",mf->Tile,mf->SeenTile);
            if( mf->Value ) {
-               fprintf(file," %d",mf->Value);
+               CLprintf(file," %d",mf->Value);
            }
            for( i=0; i < PlayerMax; ++i ) {
                if( mf->Visible[i] == 1) {
-                   fprintf(file," explored %d",i);
+                   CLprintf(file," explored %d",i);
                }
            }
            if( mf->Flags&MapFieldHuman ) {
-               fprintf(file," human");
+               CLprintf(file," human");
            }
            if( mf->Flags&MapFieldLandAllowed ) {
-               fprintf(file," land");
+               CLprintf(file," land");
            }
            if( mf->Flags&MapFieldCoastAllowed ) {
-               fprintf(file," coast");
+               CLprintf(file," coast");
            }
            if( mf->Flags&MapFieldWaterAllowed ) {
-               fprintf(file," water");
+               CLprintf(file," water");
            }
            if( mf->Flags&MapFieldNoBuilding ) {
-               fprintf(file," mud");
+               CLprintf(file," mud");
            }
            if( mf->Flags&MapFieldUnpassable ) {
-               fprintf(file," block");
+               CLprintf(file," block");
            }
            if( mf->Flags&MapFieldWall ) {
-               fprintf(file," wall");
+               CLprintf(file," wall");
            }
            if( mf->Flags&MapFieldRocks ) {
-               fprintf(file," rock");
+               CLprintf(file," rock");
            }
            if( mf->Flags&MapFieldForest ) {
-               fprintf(file," wood");
+               CLprintf(file," wood");
            }
 #if 1
            // Not Required for save
            // These are required for now, UnitType::FieldFlags is 0 until
            // UpdateStats is called which is after the game is loaded
            if( mf->Flags&MapFieldLandUnit ) {
-               fprintf(file," ground");
+               CLprintf(file," ground");
            }
            if( mf->Flags&MapFieldAirUnit ) {
-               fprintf(file," air");
+               CLprintf(file," air");
            }
            if( mf->Flags&MapFieldSeaUnit ) {
-               fprintf(file," sea");
+               CLprintf(file," sea");
            }
            if( mf->Flags&MapFieldBuilding ) {
-               fprintf(file," building");
+               CLprintf(file," building");
            }
 #endif
            if( w&1 ) {
-               fprintf(file,")\n");
+               CLprintf(file,")\n");
            } else {
-               fprintf(file,")\t");
+               CLprintf(file,")\t");
            }
        }
     }
-    fprintf(file,")))\n");
+    CLprintf(file,")))\n");
 }
 
 //@}
Index: stratagus/src/map/tileset.c
diff -u stratagus/src/map/tileset.c:1.49 stratagus/src/map/tileset.c:1.50
--- stratagus/src/map/tileset.c:1.49    Sat Aug  9 16:08:38 2003
+++ stratagus/src/map/tileset.c Sun Aug 17 11:57:07 2003
@@ -26,7 +26,7 @@
 //      Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
 //      02111-1307, USA.
 //
-//     $Id: tileset.c,v 1.49 2003/08/09 20:08:38 martinxyz Exp $
+//     $Id: tileset.c,v 1.50 2003/08/17 15:57:07 n0body Exp $
 
 //@{
 
@@ -524,46 +524,46 @@
 **     @param file     File handle for the saved flags.
 **     @param flags    Bit field of the flags.
 */
-local void SaveTilesetFlags(FILE* file, unsigned flags)
+local void SaveTilesetFlags(CLFile* file, unsigned flags)
 {
     if (flags & MapFieldWaterAllowed) {
-       fprintf(file, " 'water");
+       CLprintf(file, " 'water");
     }
     if (flags & MapFieldLandAllowed) {
-       fprintf(file, " 'land");
+       CLprintf(file, " 'land");
     }
     if (flags & MapFieldCoastAllowed) {
-       fprintf(file, " 'coast");
+       CLprintf(file, " 'coast");
     }
     if (flags & MapFieldNoBuilding) {
-       fprintf(file, " 'no-building");
+       CLprintf(file, " 'no-building");
     }
     if (flags & MapFieldUnpassable) {
-       fprintf(file, " 'unpassable");
+       CLprintf(file, " 'unpassable");
     }
     if (flags & MapFieldWall) {
-       fprintf(file, " 'wall");
+       CLprintf(file, " 'wall");
     }
     if (flags & MapFieldRocks) {
-       fprintf(file, " 'rock");
+       CLprintf(file, " 'rock");
     }
     if (flags & MapFieldForest) {
-       fprintf(file, " 'forest");
+       CLprintf(file, " 'forest");
     }
     if (flags & MapFieldLandUnit) {
-       fprintf(file, " 'land-unit");
+       CLprintf(file, " 'land-unit");
     }
     if (flags & MapFieldAirUnit) {
-       fprintf(file, " 'air-unit");
+       CLprintf(file, " 'air-unit");
     }
     if (flags & MapFieldSeaUnit) {
-       fprintf(file, " 'sea-unit");
+       CLprintf(file, " 'sea-unit");
     }
     if (flags & MapFieldBuilding) {
-       fprintf(file, " 'building");
+       CLprintf(file, " 'building");
     }
     if (flags & MapFieldHuman) {
-       fprintf(file, " 'human");
+       CLprintf(file, " 'human");
     }
 }
 
@@ -576,28 +576,28 @@
 **     @param flags    Tile attributes.
 **     @param start    Start index into table.
 */
-local void SaveTilesetSolid(FILE* file, const unsigned short* table,
+local void SaveTilesetSolid(CLFile* file, const unsigned short* table,
     const char* name, unsigned flags, int start)
 {
     int i;
     int j;
     int n;
 
-    fprintf(file, "  'solid (list \"%s\"", name);
+    CLprintf(file, "  'solid (list \"%s\"", name);
     SaveTilesetFlags(file, flags);
     // Remove empty tiles at end of block
     for (n = 15; n >= 0 && !table[start + n]; n--) {
     }
-    i = fprintf(file, "\n    #(");
+    i = CLprintf(file, "\n    #(");
     for (j = 0; j <= n; ++j) {
-       i += fprintf(file, " %3d", table[start + j]);
+       i += CLprintf(file, " %3d", table[start + j]);
     }
-    i += fprintf(file, "))");
+    i += CLprintf(file, "))");
 
     while ((i += 8) < 80) {
-       fprintf(file, "\t");
+       CLprintf(file, "\t");
     }
-    fprintf(file, "; %03X\n", start);
+    CLprintf(file, "; %03X\n", start);
 }
 
 /**
@@ -611,7 +611,7 @@
 **     @param start    Start index into table.
 **     @param end      End of tiles.
 */
-local void SaveTilesetMixed(FILE* file, const unsigned short* table,
+local void SaveTilesetMixed(CLFile* file, const unsigned short* table,
     const char* name1, const char* name2, unsigned flags, int start, int end)
 {
     int x;
@@ -619,31 +619,31 @@
     int j;
     int n;
 
-    fprintf(file, "  'mixed (list \"%s\" \"%s\"", name1, name2);
+    CLprintf(file, "  'mixed (list \"%s\" \"%s\"", name1, name2);
     SaveTilesetFlags(file, flags);
-    fprintf(file,"\n");
+    CLprintf(file,"\n");
     for (x = 0; x < 0x100; x += 0x10) {
        if (start + x >= end) {         // Check end must be 0x10 aligned
            break;
        }
-       fprintf(file, "    #(");
+       CLprintf(file, "    #(");
        // Remove empty slots at end of table
        for (n = 15; n >= 0 && !table[start + x + n]; n--) {
        }
        i = 6;
        for (j = 0; j <= n; ++j) {
-           i += fprintf(file, " %3d", table[start + x + j]);
+           i += CLprintf(file, " %3d", table[start + x + j]);
        }
        if (x == 0xF0 ) {
-           i += fprintf(file, "))");
+           i += CLprintf(file, "))");
        } else {
-           i += fprintf(file, ")");
+           i += CLprintf(file, ")");
        }
 
        while ((i += 8) < 80) {
-           fprintf(file, "\t");
+           CLprintf(file, "\t");
        }
-       fprintf(file, "; %03X\n", start + x);
+       CLprintf(file, "; %03X\n", start + x);
     }
 }
 
@@ -653,36 +653,36 @@
 **     @param file     Output file.
 **     @param tileset  Save the content of this tileset.
 */
-local void SaveTileset(FILE* file, const Tileset* tileset)
+local void SaveTileset(CLFile*file, const Tileset* tileset)
 {
     const unsigned short* table;
     int i;
     int n;
 
-    fprintf(file, "\n(define-tileset\n  '%s 'class '%s", tileset->Ident,
+    CLprintf(file, "\n(define-tileset\n  '%s 'class '%s", tileset->Ident,
        tileset->Class);
-    fprintf(file, "\n  'name \"%s\"", tileset->Name);
-    fprintf(file, "\n  'image \"%s\"", tileset->ImageFile);
-    fprintf(file, "\n  'palette \"%s\"", tileset->PaletteFile);
-    fprintf(file, "\n  ;; Slots descriptions");
-    fprintf(file,
+    CLprintf(file, "\n  'name \"%s\"", tileset->Name);
+    CLprintf(file, "\n  'image \"%s\"", tileset->ImageFile);
+    CLprintf(file, "\n  'palette \"%s\"", tileset->PaletteFile);
+    CLprintf(file, "\n  ;; Slots descriptions");
+    CLprintf(file,
        "\n  'slots (list\n  'special (list\t\t;; Can't be in pud\n");
-    fprintf(file, "    'extra-trees #( %d %d %d %d %d %d )\n",
+    CLprintf(file, "    'extra-trees #( %d %d %d %d %d %d )\n",
        tileset->ExtraTrees[0], tileset->ExtraTrees[1]
        , tileset->ExtraTrees[2], tileset->ExtraTrees[3]
        , tileset->ExtraTrees[4], tileset->ExtraTrees[5]);
-    fprintf(file, "    'top-one-tree %d 'mid-one-tree %d 'bot-one-tree %d\n",
+    CLprintf(file, "    'top-one-tree %d 'mid-one-tree %d 'bot-one-tree %d\n",
        tileset->TopOneTree, tileset->MidOneTree, tileset->BotOneTree);
-    fprintf(file, "    'removed-tree %d\n", tileset->RemovedTree);
-    fprintf(file, "    'growing-tree #( %d %d )\n", tileset->GrowingTree[0],
+    CLprintf(file, "    'removed-tree %d\n", tileset->RemovedTree);
+    CLprintf(file, "    'growing-tree #( %d %d )\n", tileset->GrowingTree[0],
        tileset->GrowingTree[1]);
-    fprintf(file, "    'extra-rocks #( %d %d %d %d %d %d )\n",
+    CLprintf(file, "    'extra-rocks #( %d %d %d %d %d %d )\n",
        tileset->ExtraRocks[0], tileset->ExtraRocks[1]
        , tileset->ExtraRocks[2], tileset->ExtraRocks[3]
        , tileset->ExtraRocks[4], tileset->ExtraRocks[5]);
-    fprintf(file, "    'top-one-rock %d 'mid-one-rock %d 'bot-one-rock %d\n",
+    CLprintf(file, "    'top-one-rock %d 'mid-one-rock %d 'bot-one-rock %d\n",
        tileset->TopOneRock, tileset->MidOneRock, tileset->BotOneRock);
-    fprintf(file, "    'removed-rock %d )\n", tileset->RemovedRock);
+    CLprintf(file, "    'removed-rock %d )\n", tileset->RemovedRock);
 
     table = tileset->Table;
     n = tileset->NumTiles;
@@ -707,10 +707,10 @@
            i += 16;
        }
     }
-    fprintf(file, "  )\n");
-    fprintf(file, "  ;; Animated tiles\n");
-    fprintf(file, "  'animations (list #( ) )\n");
-    fprintf(file, "  'objects (list #( ) ))\n");
+    CLprintf(file, "  )\n");
+    CLprintf(file, "  ;; Animated tiles\n");
+    CLprintf(file, "  'animations (list #( ) )\n");
+    CLprintf(file, "  'objects (list #( ) ))\n");
 }
 
 /**
@@ -718,25 +718,25 @@
 **
 **     @param file     Output file.
 */
-global void SaveTilesets(FILE* file)
+global void SaveTilesets(CLFile* file)
 {
     int i;
     char** sp;
 
-    fprintf(file, "\n;;; -----------------------------------------\n");
-    fprintf(file,
-       ";;; MODULE: tileset $Id: tileset.c,v 1.49 2003/08/09 20:08:38 
martinxyz Exp $\n\n");
+    CLprintf(file, "\n;;; -----------------------------------------\n");
+    CLprintf(file,
+       ";;; MODULE: tileset $Id: tileset.c,v 1.50 2003/08/17 15:57:07 n0body 
Exp $\n\n");
 
     //  Original number to internal tileset name
 
-    i = fprintf(file, "(define-tileset-wc-names");
+    i = CLprintf(file, "(define-tileset-wc-names");
     for (sp = TilesetWcNames; *sp; ++sp) {
        if (i + strlen(*sp) > 79) {
-           i = fprintf(file, "\n ");
+           i = CLprintf(file, "\n ");
        }
-       i += fprintf(file, " '%s", *sp);
+       i += CLprintf(file, " '%s", *sp);
     }
-    fprintf(file, ")\n");
+    CLprintf(file, ")\n");
 
     //         Save all loaded tilesets
 
Index: stratagus/src/missile/missile.c
diff -u stratagus/src/missile/missile.c:1.75 
stratagus/src/missile/missile.c:1.76
--- stratagus/src/missile/missile.c:1.75        Sat Aug  9 16:08:38 2003
+++ stratagus/src/missile/missile.c     Sun Aug 17 11:57:07 2003
@@ -26,7 +26,7 @@
 //      Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
 //      02111-1307, USA.
 //
-//     $Id: missile.c,v 1.75 2003/08/09 20:08:38 martinxyz Exp $
+//     $Id: missile.c,v 1.76 2003/08/17 15:57:07 n0body Exp $
 
 //@{
 
@@ -1517,96 +1517,96 @@
 **
 **     @todo FIXME: CanHitOwner and FriendlyFire not supported!
 */
-global void SaveMissileTypes(FILE* file)
+global void SaveMissileTypes(CLFile * file)
 {
     MissileType* mtype;
     char** sp;
     int i;
 
-    fprintf(file,"\n;;; -----------------------------------------\n");
-    fprintf(file,";;; MODULE: missile-types $Id: missile.c,v 1.75 2003/08/09 
20:08:38 martinxyz Exp $\n\n");
+    CLprintf(file,"\n;;; -----------------------------------------\n");
+    CLprintf(file,";;; MODULE: missile-types $Id: missile.c,v 1.76 2003/08/17 
15:57:07 n0body Exp $\n\n");
 
     //
     // Original number to internal missile-type name.
     //
-    i=fprintf(file,"(define-missiletype-wc-names");
+    i=CLprintf(file,"(define-missiletype-wc-names");
     for( sp=MissileTypeWcNames; *sp; ++sp ) {
        if( i+strlen(*sp)>79 ) {
-           i=fprintf(file,"\n ");
+           i=CLprintf(file,"\n ");
        }
-       i+=fprintf(file," '%s",*sp);
+       i+=CLprintf(file," '%s",*sp);
     }
-    fprintf(file,")\n\n");
+    CLprintf(file,")\n\n");
 
     //
     // Missile types
     //
     for( mtype=MissileTypes; mtype<&MissileTypes[NumMissileTypes]; ++mtype ) {
-       fprintf(file,"(define-missile-type '%s\n ",mtype->Ident);
+       CLprintf(file,"(define-missile-type '%s\n ",mtype->Ident);
        if( mtype->File ) {
-           fprintf(file," 'file \"%s\"",mtype->File);
+           CLprintf(file," 'file \"%s\"",mtype->File);
        }
-       fprintf(file," 'size '(%d %d)",mtype->Width,mtype->Height);
+       CLprintf(file," 'size '(%d %d)",mtype->Width,mtype->Height);
        if( mtype->Sprite ) {
-           fprintf(file," 'frames %d",mtype->SpriteFrames);
+           CLprintf(file," 'frames %d",mtype->SpriteFrames);
        }
-       fprintf(file,"\n  'num-directions %d",mtype->NumDirections);
-       fprintf(file,"\n ");
+       CLprintf(file,"\n  'num-directions %d",mtype->NumDirections);
+       CLprintf(file,"\n ");
        if( mtype->FiredSound.Name ) {
-           fprintf(file," 'fired-sound \"%s\"",mtype->FiredSound.Name);
+           CLprintf(file," 'fired-sound \"%s\"",mtype->FiredSound.Name);
        }
        if( mtype->ImpactSound.Name ) {
-           fprintf(file," 'impact-sound \"%s\"",mtype->ImpactSound.Name);
+           CLprintf(file," 'impact-sound \"%s\"",mtype->ImpactSound.Name);
        }
        if( mtype->FiredSound.Name || mtype->ImpactSound.Name ) {
-           fprintf(file,"\n ");
+           CLprintf(file,"\n ");
        }
-       fprintf(file," 'class '%s",MissileClassNames[mtype->Class]);
-       fprintf(file," 'draw-level %d ",mtype->DrawLevel);
+       CLprintf(file," 'class '%s",MissileClassNames[mtype->Class]);
+       CLprintf(file," 'draw-level %d ",mtype->DrawLevel);
        if( mtype->StartDelay ) {
-           fprintf(file," 'delay %d",mtype->StartDelay);
+           CLprintf(file," 'delay %d",mtype->StartDelay);
        }
-       fprintf(file," 'sleep %d",mtype->Sleep);
-       fprintf(file," 'speed %d",mtype->Speed);
-       fprintf(file," 'range %d",mtype->Range);
+       CLprintf(file," 'sleep %d",mtype->Sleep);
+       CLprintf(file," 'speed %d",mtype->Speed);
+       CLprintf(file," 'range %d",mtype->Range);
        if( mtype->ImpactMissile ) {
-           fprintf(file,"\n  'impact-missile '%s",mtype->ImpactMissile->Ident);
+           CLprintf(file,"\n  'impact-missile 
'%s",mtype->ImpactMissile->Ident);
        }
-       fprintf(file,"\n ");
-       fprintf(file," 'can-hit-owner #%c",mtype->CanHitOwner ? 't' : 'f');
-       fprintf(file," 'friendly-fire #%c",mtype->FriendlyFire ? 't' : 'f');
-       fprintf(file,")\n");
+       CLprintf(file,"\n ");
+       CLprintf(file," 'can-hit-owner #%c",mtype->CanHitOwner ? 't' : 'f');
+       CLprintf(file," 'friendly-fire #%c",mtype->FriendlyFire ? 't' : 'f');
+       CLprintf(file,")\n");
     }
 }
 
 /**
 **     Save the state of a missile to file.
 */
-local void SaveMissile(const Missile* missile,FILE* file)
+local void SaveMissile(const Missile* missile,CLFile* file)
 {
     char* s1;
 
-    fprintf(file,"(missile 'type '%s",missile->Type->Ident);
-    fprintf(file," 'pos '(%d %d) 'goal '(%d %d)",
+    CLprintf(file,"(missile 'type '%s",missile->Type->Ident);
+    CLprintf(file," 'pos '(%d %d) 'goal '(%d %d)",
        missile->X,missile->Y,missile->DX,missile->DY);
-    fprintf(file," '%s", missile->Local ? "local" : "global");
-    fprintf(file,"\n  'frame %d 'state %d 'wait %d 'delay %d\n ",
+    CLprintf(file," '%s", missile->Local ? "local" : "global");
+    CLprintf(file,"\n  'frame %d 'state %d 'wait %d 'delay %d\n ",
        missile->SpriteFrame,missile->State,missile->Wait,missile->Delay);
     if( missile->SourceUnit ) {
-       fprintf(file," 'source '%s",s1=UnitReference(missile->SourceUnit));
+       CLprintf(file," 'source '%s",s1=UnitReference(missile->SourceUnit));
        free(s1);
     }
     if( missile->TargetUnit ) {
-       fprintf(file," 'target '%s",s1=UnitReference(missile->TargetUnit));
+       CLprintf(file," 'target '%s",s1=UnitReference(missile->TargetUnit));
        free(s1);
     }
-    fprintf(file," 'damage %d",missile->Damage);
+    CLprintf(file," 'damage %d",missile->Damage);
     // FIXME: need symbolic names for controller
-    fprintf(file," 'ttl %d 'controller %ld",
+    CLprintf(file," 'ttl %d 'controller %ld",
        missile->TTL,(long)missile->Controller);
-    fprintf(file," 'data '(%d %d %d %d %d)",
+    CLprintf(file," 'data '(%d %d %d %d %d)",
        missile->D,missile->Dx,missile->Dy,missile->Xstep,missile->Ystep);
-    fprintf(file,")\n");
+    CLprintf(file,")\n");
 }
 
 /**
@@ -1614,12 +1614,12 @@
 **
 **     @param file     Output file.
 */
-global void SaveMissiles(FILE* file)
+global void SaveMissiles(CLFile* file)
 {
     Missile* const* missiles;
 
-    fprintf(file,"\n;;; -----------------------------------------\n");
-    fprintf(file,";;; MODULE: missiles $Id: missile.c,v 1.75 2003/08/09 
20:08:38 martinxyz Exp $\n\n");
+    CLprintf(file,"\n;;; -----------------------------------------\n");
+    CLprintf(file,";;; MODULE: missiles $Id: missile.c,v 1.76 2003/08/17 
15:57:07 n0body Exp $\n\n");
 
     for( missiles=GlobalMissiles; *missiles; ++missiles ) {
        SaveMissile(*missiles,file);
Index: stratagus/src/movie/avi.c
diff -u stratagus/src/movie/avi.c:1.10 stratagus/src/movie/avi.c:1.11
--- stratagus/src/movie/avi.c:1.10      Fri Jul 11 10:35:33 2003
+++ stratagus/src/movie/avi.c   Sun Aug 17 11:57:07 2003
@@ -26,7 +26,7 @@
 //      Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
 //      02111-1307, USA.
 //
-//     $Id: avi.c,v 1.10 2003/07/11 14:35:33 n0body Exp $
+//     $Id: avi.c,v 1.11 2003/08/17 15:57:07 n0body Exp $
 
 //@{
 
@@ -73,7 +73,7 @@
     //
     // Open and check if it is an avi file.
     //
-    if (!(f = CLopen(name))) {
+    if (!(f = CLopen(name,CL_OPEN_READ))) {
        fprintf(stderr, "Can't open `%s'\n", name);
        return NULL;
     }
Index: stratagus/src/siod/slib.c
diff -u stratagus/src/siod/slib.c:1.24 stratagus/src/siod/slib.c:1.25
--- stratagus/src/siod/slib.c:1.24      Fri Jul 25 13:11:58 2003
+++ stratagus/src/siod/slib.c   Sun Aug 17 11:57:07 2003
@@ -93,7 +93,7 @@
 
 static void init_slib_version(void)
 {setvar(cintern("*slib-version*"),
-       cintern("$Id: slib.c,v 1.24 2003/07/25 17:11:58 martinxyz Exp $"),
+       cintern("$Id: slib.c,v 1.25 2003/08/17 15:57:07 n0body Exp $"),
        NIL);}
 
 char * __stdcall siod_version(void)
@@ -564,6 +564,10 @@
  fprintf(f,"%s",st);
  no_interrupt(flag);}
 
+int CLputs_fcn(char *st,void *cb)
+{CLprintf((CLFile*)cb,st);
+ return(1);}
+
 int fputs_fcn(char *st,void *cb)
 {fput_st((FILE *)cb,st);
  return(1);}
@@ -2078,6 +2082,14 @@
  lprin1f(exp,f);
  return(NIL);}
 
+LISP lprin1CL(LISP exp,CLFile *f)
+{struct gen_printio s;
+ s.putc_fcn = NULL;
+ s.puts_fcn = CLputs_fcn;
+ s.cb_argument = f;
+ lprin1g(exp,&s);
+ return(NIL);}
+
 LISP lprin1f(LISP exp,FILE *f)
 {struct gen_printio s;
  s.putc_fcn = NULL;
@@ -2379,14 +2391,14 @@
  if (rflag)
    {int iflag;
     iflag = no_interrupt(1);
-    if (!(clf = CLopen(fname)))
+    if (!(clf = CLopen(fname,CL_OPEN_READ)))
       {if ((fname[0] != '/') &&
           ((strlen(siod_lib) + strlen(fname) + 1)
            < sizeof(buffer)))
        {strcpy(buffer,siod_lib);
         strcat(buffer,"/");
         strcat(buffer,fname);
-        if ((clf = CLopen(buffer)))
+        if ((clf = CLopen(buffer,CL_OPEN_READ)))
           {fname = buffer;}}}
     no_interrupt(iflag);}
  if (siod_verbose_level >= 3)
@@ -2395,7 +2407,7 @@
     put_st("\n");}
 
  if( !clf )
-   {clf = CLopen(fname);}
+   {clf = CLopen(fname,CL_OPEN_READ);}
  if( !clf )
    {SAFE_STRCPY(errmsg,"could not open ");
     SAFE_STRCAT(errmsg,fname);
Index: stratagus/src/sound/mad.c
diff -u stratagus/src/sound/mad.c:1.23 stratagus/src/sound/mad.c:1.24
--- stratagus/src/sound/mad.c:1.23      Fri Jul 11 10:35:33 2003
+++ stratagus/src/sound/mad.c   Sun Aug 17 11:57:07 2003
@@ -26,7 +26,7 @@
 //      Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
 //      02111-1307, USA.
 //
-//     $Id: mad.c,v 1.23 2003/07/11 14:35:33 n0body Exp $
+//     $Id: mad.c,v 1.24 2003/08/17 15:57:07 n0body Exp $
 
 //     FIXME: JOHNS: MP3 streaming did not yet work.
 
@@ -422,7 +422,7 @@
     unsigned char magic[2];
     Sample* sample;
 
-    if (!(f = CLopen(name))) {
+    if (!(f = CLopen(name,CL_OPEN_READ))) {
        fprintf(stderr, "Can't open file `%s'\n", name);
        return NULL;
     }
@@ -435,7 +435,7 @@
 
     // FIXME: ugly way to rewind.
     CLclose(f);
-    if (!(f = CLopen(name))) {
+    if (!(f = CLopen(name,CL_OPEN_READ))) {
        fprintf(stderr, "Can't open file `%s'\n", name);
        return NULL;
     }
Index: stratagus/src/sound/music.c
diff -u stratagus/src/sound/music.c:1.80 stratagus/src/sound/music.c:1.81
--- stratagus/src/sound/music.c:1.80    Fri Jul 11 10:35:33 2003
+++ stratagus/src/sound/music.c Sun Aug 17 11:57:07 2003
@@ -26,7 +26,7 @@
 //      Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
 //      02111-1307, USA.
 //
-//     $Id: music.c,v 1.80 2003/07/11 14:35:33 n0body Exp $
+//     $Id: music.c,v 1.81 2003/08/17 15:57:07 n0body Exp $
 
 //@{
 
@@ -168,7 +168,7 @@
 
     ticks=GetTicks();
     DebugLevel0Fn("Trying `%s'\n" _C_ name);
-    if (!(f = CLopen(name))) {
+    if (!(f = CLopen(name,CL_OPEN_READ))) {
        printf("Can't open file `%s'\n", name);
        return NULL;
     }
Index: stratagus/src/sound/ogg.c
diff -u stratagus/src/sound/ogg.c:1.30 stratagus/src/sound/ogg.c:1.31
--- stratagus/src/sound/ogg.c:1.30      Fri Jul 11 10:35:33 2003
+++ stratagus/src/sound/ogg.c   Sun Aug 17 11:57:08 2003
@@ -26,7 +26,7 @@
 //      Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
 //      02111-1307, USA.
 //
-//     $Id: ogg.c,v 1.30 2003/07/11 14:35:33 n0body Exp $
+//     $Id: ogg.c,v 1.31 2003/08/17 15:57:08 n0body Exp $
 
 //@{
 
@@ -292,7 +292,7 @@
     unsigned int magic[1];
     vorbis_info* info;
 
-    if (!(f = CLopen(name))) {
+    if (!(f = CLopen(name,CL_OPEN_READ))) {
        fprintf(stderr, "Can't open file `%s'\n", name);
        return NULL;
     }
Index: stratagus/src/sound/wav.c
diff -u stratagus/src/sound/wav.c:1.30 stratagus/src/sound/wav.c:1.31
--- stratagus/src/sound/wav.c:1.30      Fri Jul 11 10:35:33 2003
+++ stratagus/src/sound/wav.c   Sun Aug 17 11:57:08 2003
@@ -26,7 +26,7 @@
 //      Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
 //      02111-1307, USA.
 //
-//     $Id: wav.c,v 1.30 2003/07/11 14:35:33 n0body Exp $
+//     $Id: wav.c,v 1.31 2003/08/17 15:57:08 n0body Exp $
 
 //@{
 
@@ -153,7 +153,7 @@
     int i;
     Sample* sample;
 
-    if (!(f = CLopen(name))) {
+    if (!(f = CLopen(name,CL_OPEN_READ))) {
        printf("Can't open file `%s'\n", name);
        return NULL;
     }
Index: stratagus/src/ui/botpanel.c
diff -u stratagus/src/ui/botpanel.c:1.83 stratagus/src/ui/botpanel.c:1.84
--- stratagus/src/ui/botpanel.c:1.83    Sun Aug 10 22:14:46 2003
+++ stratagus/src/ui/botpanel.c Sun Aug 17 11:57:08 2003
@@ -27,7 +27,7 @@
 //      Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
 //      02111-1307, USA.
 //
-//     $Id: botpanel.c,v 1.83 2003/08/11 02:14:46 n0body Exp $
+//     $Id: botpanel.c,v 1.84 2003/08/17 15:57:08 n0body Exp $
 
 //@{
 
@@ -105,7 +105,7 @@
 /**
 **     Save all buttons.
 */
-global void SaveButtons(FILE* file)
+global void SaveButtons(CLFile* file)
 {
 #ifndef NEW_UI
     int i;
@@ -113,147 +113,147 @@
     char* cp;
 #endif
 
-    fprintf(file,"\n;;; -----------------------------------------\n");
-    fprintf(file,";;; MODULE: buttons $Id: botpanel.c,v 1.83 2003/08/11 
02:14:46 n0body Exp $\n\n");
+    CLprintf(file,"\n;;; -----------------------------------------\n");
+    CLprintf(file,";;; MODULE: buttons $Id: botpanel.c,v 1.84 2003/08/17 
15:57:08 n0body Exp $\n\n");
 
 #ifndef NEW_UI
     for( i=0; i<NumUnitButtons; ++i ) {
-       fprintf(file,"(define-button 'pos %d 'level %d 'icon '%s\n",
+       CLprintf(file,"(define-button 'pos %d 'level %d 'icon '%s\n",
                UnitButtonTable[i]->Pos,
                UnitButtonTable[i]->Level,
                IdentOfIcon(UnitButtonTable[i]->Icon.Icon));
-       fprintf(file,"  'action ");
+       CLprintf(file,"  'action ");
        switch( UnitButtonTable[i]->Action ) {
            case ButtonMove:
-               fprintf(file,"'move"); break;
+               CLprintf(file,"'move"); break;
            case ButtonStop:
-               fprintf(file,"'stop"); break;
+               CLprintf(file,"'stop"); break;
            case ButtonAttack:
-               fprintf(file,"'attack"); break;
+               CLprintf(file,"'attack"); break;
            case ButtonRepair:
-               fprintf(file,"'repair"); break;
+               CLprintf(file,"'repair"); break;
            case ButtonHarvest:
-               fprintf(file,"'harvest"); break;
+               CLprintf(file,"'harvest"); break;
            case ButtonButton:
-               fprintf(file,"'button"); break;
+               CLprintf(file,"'button"); break;
            case ButtonBuild:
-               fprintf(file,"'build"); break;
+               CLprintf(file,"'build"); break;
            case ButtonTrain:
-               fprintf(file,"'train-unit"); break;
+               CLprintf(file,"'train-unit"); break;
            case ButtonPatrol:
-               fprintf(file,"'patrol"); break;
+               CLprintf(file,"'patrol"); break;
            case ButtonStandGround:
-               fprintf(file,"'stand-ground"); break;
+               CLprintf(file,"'stand-ground"); break;
            case ButtonAttackGround:
-               fprintf(file,"'attack-ground"); break;
+               CLprintf(file,"'attack-ground"); break;
            case ButtonReturn:
-               fprintf(file,"'return-goods"); break;
+               CLprintf(file,"'return-goods"); break;
            case ButtonDemolish:
-               fprintf(file,"'demolish"); break;
+               CLprintf(file,"'demolish"); break;
            case ButtonSpellCast:
-               fprintf(file,"'cast-spell"); break;
+               CLprintf(file,"'cast-spell"); break;
            case ButtonResearch:
-               fprintf(file,"'research"); break;
+               CLprintf(file,"'research"); break;
            case ButtonUpgradeTo:
-               fprintf(file,"'upgrade-to"); break;
+               CLprintf(file,"'upgrade-to"); break;
            case ButtonUnload:
-               fprintf(file,"'unload"); break;
+               CLprintf(file,"'unload"); break;
            case ButtonCancel:
-               fprintf(file,"'cancel"); break;
+               CLprintf(file,"'cancel"); break;
            case ButtonCancelUpgrade:
-               fprintf(file,"'cancel-upgrade"); break;
+               CLprintf(file,"'cancel-upgrade"); break;
            case ButtonCancelTrain:
-               fprintf(file,"'cancel-train-unit"); break;
+               CLprintf(file,"'cancel-train-unit"); break;
            case ButtonCancelBuild:
-               fprintf(file,"'cancel-build"); break;
+               CLprintf(file,"'cancel-build"); break;
        }
        if( UnitButtonTable[i]->ValueStr ) {
            if( isdigit(UnitButtonTable[i]->ValueStr[0]) ) {
-               fprintf(file," 'value %s\n",UnitButtonTable[i]->ValueStr);
+               CLprintf(file," 'value %s\n",UnitButtonTable[i]->ValueStr);
            } else {
-               fprintf(file," 'value '%s\n",UnitButtonTable[i]->ValueStr);
+               CLprintf(file," 'value '%s\n",UnitButtonTable[i]->ValueStr);
            }
        } else {
-           fprintf(file,"\n");
+           CLprintf(file,"\n");
        }
        if( UnitButtonTable[i]->Allowed ) {
-           fprintf(file,"  'allowed ");
+           CLprintf(file,"  'allowed ");
            if( UnitButtonTable[i]->Allowed == ButtonCheckTrue ) {
-               fprintf(file,"'check-true");
+               CLprintf(file,"'check-true");
            } else if( UnitButtonTable[i]->Allowed == ButtonCheckFalse ) {
-               fprintf(file,"'check-false");
+               CLprintf(file,"'check-false");
            } else if( UnitButtonTable[i]->Allowed == ButtonCheckUpgrade ) {
-               fprintf(file,"'check-upgrade");
+               CLprintf(file,"'check-upgrade");
            } else if( UnitButtonTable[i]->Allowed == ButtonCheckUnitsOr ) {
-               fprintf(file,"'check-units-or");
+               CLprintf(file,"'check-units-or");
            } else if( UnitButtonTable[i]->Allowed == ButtonCheckUnitsAnd ) {
-               fprintf(file,"'check-units-and");
+               CLprintf(file,"'check-units-and");
            } else if( UnitButtonTable[i]->Allowed == ButtonCheckNetwork ) {
-               fprintf(file,"'check-network");
+               CLprintf(file,"'check-network");
            } else if( UnitButtonTable[i]->Allowed == ButtonCheckNoNetwork ) {
-               fprintf(file,"'check-no-network");
+               CLprintf(file,"'check-no-network");
            } else if( UnitButtonTable[i]->Allowed == ButtonCheckNoWork ) {
-               fprintf(file,"'check-no-work");
+               CLprintf(file,"'check-no-work");
            } else if( UnitButtonTable[i]->Allowed == ButtonCheckNoResearch ) {
-               fprintf(file,"'check-no-research");
+               CLprintf(file,"'check-no-research");
            } else if( UnitButtonTable[i]->Allowed == ButtonCheckAttack ) {
-               fprintf(file,"'check-attack");
+               CLprintf(file,"'check-attack");
            } else if( UnitButtonTable[i]->Allowed == ButtonCheckUpgradeTo ) {
-               fprintf(file,"'check-upgrade-to");
+               CLprintf(file,"'check-upgrade-to");
            } else if( UnitButtonTable[i]->Allowed == ButtonCheckResearch ) {
-               fprintf(file,"'check-research");
+               CLprintf(file,"'check-research");
            } else if( UnitButtonTable[i]->Allowed == ButtonCheckSingleResearch 
) {
-               fprintf(file,"'check-single-research");
+               CLprintf(file,"'check-single-research");
            } else {
                DebugLevel0Fn("Unsupported check function %p\n" _C_
                        UnitButtonTable[i]->Allowed);
-               fprintf(file,"%p",UnitButtonTable[i]->Allowed);
+               CLprintf(file,"%p",UnitButtonTable[i]->Allowed);
            }
            if( UnitButtonTable[i]->AllowStr ) {
-               fprintf(file," 'allow-arg '(");
+               CLprintf(file," 'allow-arg '(");
                cp=alloca(strlen(UnitButtonTable[i]->AllowStr));
                strcpy(cp,UnitButtonTable[i]->AllowStr);
                cp=strtok(cp,",");
                while( cp ) {
-                   fprintf(file,"%s",cp);
+                   CLprintf(file,"%s",cp);
                    cp=strtok(NULL,",");
                    if( cp ) {
-                       fprintf(file," ");
+                       CLprintf(file," ");
                    }
                }
-               fprintf(file,")");
+               CLprintf(file,")");
            }
-           fprintf(file,"\n");
+           CLprintf(file,"\n");
        }
-       fprintf(file,"  'key \"");
+       CLprintf(file,"  'key \"");
        switch( UnitButtonTable[i]->Key ) {
            case '\033':
-               fprintf(file,"\\%03o",UnitButtonTable[i]->Key);
+               CLprintf(file,"\\%03o",UnitButtonTable[i]->Key);
                break;
            default:
-               fprintf(file,"%c",UnitButtonTable[i]->Key);
+               CLprintf(file,"%c",UnitButtonTable[i]->Key);
                break;
        }
-       fprintf(file,"\" 'hint \"%s\"\n",UnitButtonTable[i]->Hint);
-       n=fprintf(file,"  'for-unit '(");
+       CLprintf(file,"\" 'hint \"%s\"\n",UnitButtonTable[i]->Hint);
+       n=CLprintf(file,"  'for-unit '(");
        cp=alloca(strlen(UnitButtonTable[i]->UnitMask));
        strcpy(cp,UnitButtonTable[i]->UnitMask);
        cp=strtok(cp,",");
        while( cp ) {
            if( n+strlen(cp)>78 ) {
-               n=fprintf(file,"\n    ");
+               n=CLprintf(file,"\n    ");
            }
-           n+=fprintf(file,"%s",cp);
+           n+=CLprintf(file,"%s",cp);
            cp=strtok(NULL,",");
            if( cp ) {
-               n+=fprintf(file," ");
+               n+=CLprintf(file," ");
            }
        }
-       fprintf(file,"))\n\n");
+       CLprintf(file,"))\n\n");
     }
 #endif
 
-    fprintf(file,"(set-show-command-key! %s)\n\n",
+    CLprintf(file,"(set-show-command-key! %s)\n\n",
            ShowCommandKey ? "#t" : "#f");
 }
 
Index: stratagus/src/ui/icons.c
diff -u stratagus/src/ui/icons.c:1.44 stratagus/src/ui/icons.c:1.45
--- stratagus/src/ui/icons.c:1.44       Sat Aug  9 16:08:39 2003
+++ stratagus/src/ui/icons.c    Sun Aug 17 11:57:08 2003
@@ -26,7 +26,7 @@
 //      Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
 //      02111-1307, USA.
 //
-//     $Id: icons.c,v 1.44 2003/08/09 20:08:39 martinxyz Exp $
+//     $Id: icons.c,v 1.45 2003/08/17 15:57:08 n0body Exp $
 
 //@{
 
@@ -423,49 +423,49 @@
 **
 **     @param file     Output file.
 */
-global void SaveIcons(FILE* file)
+global void SaveIcons(CLFile* file)
 {
     char* const* cp;
     int i;
 
-    fprintf(file, "\n;;; -----------------------------------------\n");
-    fprintf(file, ";;; MODULE: icons $Id: icons.c,v 1.44 2003/08/09 20:08:39 
martinxyz Exp $\n\n");
+    CLprintf(file, "\n;;; -----------------------------------------\n");
+    CLprintf(file, ";;; MODULE: icons $Id: icons.c,v 1.45 2003/08/17 15:57:08 
n0body Exp $\n\n");
 
     //
     //  Mapping the original icon numbers in puds to our internal strings
     //
     if ((cp = IconWcNames)) {
-       fprintf(file, "(define-icon-wc-names");
+       CLprintf(file, "(define-icon-wc-names");
 
        i = 90;
        while (*cp) {
            if (i + strlen(*cp) > 79) {
-               i = fprintf(file, "\n ");
+               i = CLprintf(file, "\n ");
            }
-           i += fprintf(file, " '%s", *cp++);
+           i += CLprintf(file, " '%s", *cp++);
        }
-       fprintf(file, ")\n\n");
+       CLprintf(file, ")\n\n");
     }
 
     //
     //  Icons
     //
     for (i = 0; i < NumIcons; ++i) {
-       fprintf(file, "(define-icon '%s", Icons[i]->Ident);
+       CLprintf(file, "(define-icon '%s", Icons[i]->Ident);
        if (Icons[i]->Tileset) {
-           fprintf(file, " 'tileset '%s", Icons[i]->Tileset);
+           CLprintf(file, " 'tileset '%s", Icons[i]->Tileset);
        }
-       fprintf(file, "\n  'size '(%d %d) 'normal '(%d \"%s\"))\n",
+       CLprintf(file, "\n  'size '(%d %d) 'normal '(%d \"%s\"))\n",
            Icons[i]->Width, Icons[i]->Height,
            Icons[i]->Index, Icons[i]->File->FileName);
     }
-    fprintf(file, "\n");
+    CLprintf(file, "\n");
 
     //
     //  Icons aliases
     //
     for (i = 0; i < NumIconAliases; ++i) {
-       fprintf(file, "(define-icon-alias '%s '%s)\n",
+       CLprintf(file, "(define-icon-alias '%s '%s)\n",
            IconAliases[i * 2 + 0], IconAliases[i * 2 + 1]);
     }
 }
Index: stratagus/src/ui/interface.c
diff -u stratagus/src/ui/interface.c:1.134 stratagus/src/ui/interface.c:1.135
--- stratagus/src/ui/interface.c:1.134  Sun Aug 10 22:14:46 2003
+++ stratagus/src/ui/interface.c        Sun Aug 17 11:57:08 2003
@@ -26,7 +26,7 @@
 //      Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
 //      02111-1307, USA.
 //
-//     $Id: interface.c,v 1.134 2003/08/11 02:14:46 n0body Exp $
+//     $Id: interface.c,v 1.135 2003/08/17 15:57:08 n0body Exp $
 
 //@{
 
@@ -1230,7 +1230,7 @@
     for( i=1; i<99; ++i ) {
        // FIXME: what if we can't write to this directory?
        sprintf(filename, "screen%02d.png", i);
-       if( !(fd = CLopen(filename)) ) {
+       if( !(fd = CLopen(filename,CL_OPEN_READ)) ) {
            break;
        }
        CLclose(fd);
Index: stratagus/src/ui/mainscr.c
diff -u stratagus/src/ui/mainscr.c:1.115 stratagus/src/ui/mainscr.c:1.116
--- stratagus/src/ui/mainscr.c:1.115    Fri Aug  8 15:31:37 2003
+++ stratagus/src/ui/mainscr.c  Sun Aug 17 11:57:08 2003
@@ -27,7 +27,7 @@
 //      Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
 //      02111-1307, USA.
 //
-//     $Id: mainscr.c,v 1.115 2003/08/08 19:31:37 n0body Exp $
+//     $Id: mainscr.c,v 1.116 2003/08/17 15:57:08 n0body Exp $
 
 //@{
 
@@ -368,38 +368,7 @@
        }
     }
 
-    if( type->CanStore[WoodCost] ) {
-       VideoDrawText(x+20,y+8+78,GameFont,"Production");
-       VideoDrawText(x+22,y+8+93,GameFont,"Lumber:");
-       // I'm assuming that it will be short enough to fit in the space
-       // I'm also assuming that it won't be 100 - x
-       // and since the default is used for comparison we might as well
-       // use that in the printing too.
-       VideoDrawNumber(x+78,y+8+93,GameFont,DefaultIncomes[WoodCost]);
-
-       if( unit->Player->Incomes[WoodCost] != DefaultIncomes[WoodCost] ) {
-           sprintf(buf, "~<+%i~>",
-                   unit->Player->Incomes[WoodCost]-DefaultIncomes[WoodCost]);
-           VideoDrawText(x+96,y+8+93,GameFont,buf);
-       }
-       sprintf(buf, "(%+.1f)", unit->Player->Revenue[WoodCost] / 1000.0);
-        VideoDrawText(x+120,y+8+93,GameFont,buf);
-       return;
-
-    } else if( type->CanStore[OilCost] ) {
-       VideoDrawText(x+20,y+8+78,GameFont,"Production");
-       VideoDrawText(x+54,y+8+93,GameFont,"Oil:");
-       VideoDrawNumber(x+78,y+8+93,GameFont,DefaultIncomes[OilCost]);
-       if( unit->Player->Incomes[OilCost]!=DefaultIncomes[OilCost] ) {
-           sprintf(buf, "~<+%i~>",
-                   unit->Player->Incomes[OilCost]-DefaultIncomes[OilCost]);
-           VideoDrawText(x+96,y+8+93,GameFont,buf);
-       }
-       sprintf(buf, "(%+.1f)", unit->Player->Revenue[OilCost] / 1000.0);
-        VideoDrawText(x+120,y+8+93,GameFont,buf);
-       return;
-
-    } else if( type->CanStore[GoldCost] ) {
+    if( type->CanStore[GoldCost] ) {
        VideoDrawText(x+20,y+8+61,GameFont,"Production");
        VideoDrawText(x+43,y+8+77,GameFont,"Gold:");
        VideoDrawNumber(x+78,y+8+77,GameFont,DefaultIncomes[GoldCost]);
@@ -432,6 +401,37 @@
        }
        sprintf(buf, "(%+.1f)", unit->Player->Revenue[OilCost] / 1000.0);
         VideoDrawText(x+120,y+8+109,GameFont,buf);
+       return;
+
+   } else if (type->CanStore[WoodCost] ) {
+       VideoDrawText(x+20,y+8+78,GameFont,"Production");
+       VideoDrawText(x+22,y+8+93,GameFont,"Lumber:");
+       // I'm assuming that it will be short enough to fit in the space
+       // I'm also assuming that it won't be 100 - x
+       // and since the default is used for comparison we might as well
+       // use that in the printing too.
+       VideoDrawNumber(x+78,y+8+93,GameFont,DefaultIncomes[WoodCost]);
+
+       if( unit->Player->Incomes[WoodCost] != DefaultIncomes[WoodCost] ) {
+           sprintf(buf, "~<+%i~>",
+                   unit->Player->Incomes[WoodCost]-DefaultIncomes[WoodCost]);
+           VideoDrawText(x+96,y+8+93,GameFont,buf);
+       }
+       sprintf(buf, "(%+.1f)", unit->Player->Revenue[WoodCost] / 1000.0);
+        VideoDrawText(x+120,y+8+93,GameFont,buf);
+       return;
+
+    } else if( type->CanStore[OilCost] ) {
+       VideoDrawText(x+20,y+8+78,GameFont,"Production");
+       VideoDrawText(x+54,y+8+93,GameFont,"Oil:");
+       VideoDrawNumber(x+78,y+8+93,GameFont,DefaultIncomes[OilCost]);
+       if( unit->Player->Incomes[OilCost]!=DefaultIncomes[OilCost] ) {
+           sprintf(buf, "~<+%i~>",
+                   unit->Player->Incomes[OilCost]-DefaultIncomes[OilCost]);
+           VideoDrawText(x+96,y+8+93,GameFont,buf);
+       }
+       sprintf(buf, "(%+.1f)", unit->Player->Revenue[OilCost] / 1000.0);
+        VideoDrawText(x+120,y+8+93,GameFont,buf);
        return;
 
     } else if( type->Transporter && unit->InsideCount ) {
Index: stratagus/src/ui/menus.c
diff -u stratagus/src/ui/menus.c:1.554 stratagus/src/ui/menus.c:1.555
--- stratagus/src/ui/menus.c:1.554      Sat Aug  2 09:34:25 2003
+++ stratagus/src/ui/menus.c    Sun Aug 17 11:57:08 2003
@@ -26,7 +26,7 @@
 //      Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
 //      02111-1307, USA.
 //
-//     $Id: menus.c,v 1.554 2003/08/02 13:34:25 grumbel Exp $
+//     $Id: menus.c,v 1.555 2003/08/17 15:57:08 n0body Exp $
 
 //@{
 
@@ -896,7 +896,17 @@
        strcpy(TempPathBuf, SaveDir);
        strcat(TempPathBuf, "/");
        strncat(TempPathBuf, name, nameLength);
-       if (strstr(TempPathBuf, ".sav") == NULL) {
+
+       // Strip .gz extension.
+       if (!strcmp(TempPathBuf+strlen(TempPathBuf)-3,".gz")) {
+           TempPathBuf[strlen(TempPathBuf)-3]=0;
+       }
+       // Strip .bz2 extension.
+       if (!strcmp(TempPathBuf+strlen(TempPathBuf)-4,".bz2")) {
+           TempPathBuf[strlen(TempPathBuf)-4]=0;
+       }
+       // Add .sav if not already there.
+       if (strcmp(TempPathBuf+strlen(TempPathBuf)-4,".sav")) {
            strcat(TempPathBuf, ".sav");
        }
 
Index: stratagus/src/ui/ui.c
diff -u stratagus/src/ui/ui.c:1.72 stratagus/src/ui/ui.c:1.73
--- stratagus/src/ui/ui.c:1.72  Wed Aug 13 10:55:45 2003
+++ stratagus/src/ui/ui.c       Sun Aug 17 11:57:08 2003
@@ -27,7 +27,7 @@
 //      Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
 //      02111-1307, USA.
 //
-//     $Id: ui.c,v 1.72 2003/08/13 14:55:45 martinxyz Exp $
+//     $Id: ui.c,v 1.73 2003/08/17 15:57:08 n0body Exp $
 
 //@{
 
@@ -300,180 +300,180 @@
 **     @param file     Save file handle
 **     @param ui       User interface to save
 */
-local void SaveUi(FILE* file,const UI* ui)
+local void SaveUi(CLFile* file,const UI* ui)
 {
     int i;
     MenuPanel* menupanel;
 
-    fprintf(file,"(define-ui '%s %d %d\t; Selector",
+    CLprintf(file,"(define-ui '%s %d %d\t; Selector",
            ui->Name,ui->Width,ui->Height);
 
-    fprintf(file,"\n  'normal-font-color '%s"
+    CLprintf(file,"\n  'normal-font-color '%s"
                  "\n  'reverse-font-color '%s",
            ui->NormalFontColor, ui->ReverseFontColor);
-    fprintf(file,"\n");
+    CLprintf(file,"\n");
 
-    fprintf(file,"\n  'filler (list");
-    fprintf(file,"\n    'file \"%s\"",ui->Filler[0].File);
-    fprintf(file,"\n    'pos '(%3d %3d)",ui->FillerX[0],ui->FillerY[0]);
-    fprintf(file,")\n");
+    CLprintf(file,"\n  'filler (list");
+    CLprintf(file,"\n    'file \"%s\"",ui->Filler[0].File);
+    CLprintf(file,"\n    'pos '(%3d %3d)",ui->FillerX[0],ui->FillerY[0]);
+    CLprintf(file,")\n");
 
-    fprintf(file,"\n  ; Resource line");
-    fprintf(file,"\n  'resource-line (list \"%s\" %d %d)",
+    CLprintf(file,"\n  ; Resource line");
+    CLprintf(file,"\n  'resource-line (list \"%s\" %d %d)",
            ui->Resource.File,ui->ResourceX,ui->ResourceY);
 
-    fprintf(file,"\n  'resources (list");
+    CLprintf(file,"\n  'resources (list");
     for( i=1; i<MaxCosts+2; ++i ) {
        if( !ui->Resources[i].Icon.File ) {
            continue;
        }
-       fprintf(file,"\n    '%s",
+       CLprintf(file,"\n    '%s",
                i<MaxCosts ? DefaultResourceNames[i] :
                    i==FoodCost ? "food" : "score");
-       fprintf(file," (list 'file \"%s\" 'row %d\n"
+       CLprintf(file," (list 'file \"%s\" 'row %d\n"
                     "      'pos '(%d %d) 'size '(%d %d) 'text-pos '(%d %d))",
                ui->Resources[i].Icon.File,ui->Resources[i].IconRow,
                ui->Resources[i].IconX,ui->Resources[i].IconY,
                ui->Resources[i].IconW,ui->Resources[i].IconH,
                ui->Resources[i].TextX,ui->Resources[i].TextY);
     }
-    fprintf(file,")\n");
+    CLprintf(file,")\n");
 
-    fprintf(file,"  'info-panel (list \"%s\" %d %d %d %d)\n",
+    CLprintf(file,"  'info-panel (list \"%s\" %d %d %d %d)\n",
            ui->InfoPanel.File,
            ui->InfoPanelX,ui->InfoPanelY,
            ui->InfoPanelW,ui->InfoPanelH);
 
-    fprintf(file,"\n  'completed-bar '(");
-    fprintf(file,"\n    color %d",ui->CompleteBarColor);
-    fprintf(file,"\n    pos (%3d %3d)",ui->CompleteBarX,ui->CompleteBarY);
-    fprintf(file,"\n    size (%d %d)",ui->CompleteBarW,ui->CompleteBarH);
-    fprintf(file,"\n    text \"%s\"",ui->CompleteBarText);
-    fprintf(file,"\n    font %s",FontNames[ui->CompleteBarFont]);
-    fprintf(file,"\n    text-pos (%3d %3d)",
+    CLprintf(file,"\n  'completed-bar '(");
+    CLprintf(file,"\n    color %d",ui->CompleteBarColor);
+    CLprintf(file,"\n    pos (%3d %3d)",ui->CompleteBarX,ui->CompleteBarY);
+    CLprintf(file,"\n    size (%d %d)",ui->CompleteBarW,ui->CompleteBarH);
+    CLprintf(file,"\n    text \"%s\"",ui->CompleteBarText);
+    CLprintf(file,"\n    font %s",FontNames[ui->CompleteBarFont]);
+    CLprintf(file,"\n    text-pos (%3d %3d)",
            ui->CompleteTextX,ui->CompleteTextY);
-    fprintf(file,")\n\n");
+    CLprintf(file,")\n\n");
 
-    fprintf(file,"  'button-panel (list \"%s\" %d %d)\n",
+    CLprintf(file,"  'button-panel (list \"%s\" %d %d)\n",
            ui->ButtonPanel.File,ui->ButtonPanelX,ui->ButtonPanelY);
 
-    fprintf(file,"\n  'map-area (list");
-    fprintf(file,"\n    'pos '(%3d %3d)",
+    CLprintf(file,"\n  'map-area (list");
+    CLprintf(file,"\n    'pos '(%3d %3d)",
            ui->MapArea.X, ui->MapArea.Y);
-    fprintf(file,"\n    'size '(%d %d)",
+    CLprintf(file,"\n    'size '(%d %d)",
            ui->MapArea.EndX-ui->MapArea.X+1,
            ui->MapArea.EndY-ui->MapArea.Y+1);
-    fprintf(file,")\n\n");
+    CLprintf(file,")\n\n");
 
-    fprintf(file,"  ; Menu button background\n");
-    fprintf(file,"  'menu-panel (list \"%s\" %d %d)\n",
+    CLprintf(file,"  ; Menu button background\n");
+    CLprintf(file,"  'menu-panel (list \"%s\" %d %d)\n",
            ui->MenuButtonGraphic.File,ui->MenuButtonGraphicX,
            ui->MenuButtonGraphicY);
 
-    fprintf(file,"  ; Minimap background\n");
-    fprintf(file,"  'minimap-panel (list \"%s\" %d %d)\n",
+    CLprintf(file,"  ; Minimap background\n");
+    CLprintf(file,"  'minimap-panel (list \"%s\" %d %d)\n",
            ui->MinimapPanel.File,ui->MinimapPanelX,ui->MinimapPanelY);
-    fprintf(file,"  ; Minimap position\n");
-    fprintf(file,"  'minimap-pos (list %d %d)\n",
+    CLprintf(file,"  ; Minimap position\n");
+    CLprintf(file,"  'minimap-pos (list %d %d)\n",
            ui->MinimapPosX,ui->MinimapPosY);
 
-    fprintf(file,"\n  'status-line '(");
-    fprintf(file,"\n    file \"%s\"",ui->StatusLine.File);
-    fprintf(file,"\n    pos (%d %d)",ui->StatusLineX,ui->StatusLineY);
-    fprintf(file,"\n    text-pos (%d %d)",
+    CLprintf(file,"\n  'status-line '(");
+    CLprintf(file,"\n    file \"%s\"",ui->StatusLine.File);
+    CLprintf(file,"\n    pos (%d %d)",ui->StatusLineX,ui->StatusLineY);
+    CLprintf(file,"\n    text-pos (%d %d)",
            ui->StatusLineTextX,ui->StatusLineTextY);
-    fprintf(file,"\n    font %s",FontNames[ui->StatusLineFont]);
-    fprintf(file,")\n");
+    CLprintf(file,"\n    font %s",FontNames[ui->StatusLineFont]);
+    CLprintf(file,")\n");
 
-    fprintf(file,"\n  'menu-button '(");
-    fprintf(file,"\n    pos (%d %d)",
+    CLprintf(file,"\n  'menu-button '(");
+    CLprintf(file,"\n    pos (%d %d)",
            ui->MenuButton.X,ui->MenuButton.Y);
-    fprintf(file,"\n    size (%d %d)",
+    CLprintf(file,"\n    size (%d %d)",
            ui->MenuButton.Width,ui->MenuButton.Height);
-    fprintf(file,"\n    caption \"%s\"",
+    CLprintf(file,"\n    caption \"%s\"",
            ui->MenuButton.Text);
-    fprintf(file,"\n    style %s",
+    CLprintf(file,"\n    style %s",
            MenuButtonStyle(ui->MenuButton.Button));
-    fprintf(file,")");
+    CLprintf(file,")");
 
-    fprintf(file,"\n  'network-menu-button '(");
-    fprintf(file,"\n    pos (%d %d)",
+    CLprintf(file,"\n  'network-menu-button '(");
+    CLprintf(file,"\n    pos (%d %d)",
            ui->NetworkMenuButton.X,ui->NetworkMenuButton.Y);
-    fprintf(file,"\n    size (%d %d)",
+    CLprintf(file,"\n    size (%d %d)",
            ui->NetworkMenuButton.Width,ui->NetworkMenuButton.Height);
-    fprintf(file,"\n    caption \"%s\"",
+    CLprintf(file,"\n    caption \"%s\"",
            ui->NetworkMenuButton.Text);
-    fprintf(file,"\n    style %s",
+    CLprintf(file,"\n    style %s",
            MenuButtonStyle(ui->NetworkMenuButton.Button));
-    fprintf(file,")");
+    CLprintf(file,")");
 
-    fprintf(file,"\n  'network-diplomacy-button '(");
-    fprintf(file,"\n    pos (%d %d)",
+    CLprintf(file,"\n  'network-diplomacy-button '(");
+    CLprintf(file,"\n    pos (%d %d)",
            ui->NetworkDiplomacyButton.X,ui->NetworkDiplomacyButton.Y);
-    fprintf(file,"\n    size (%d %d)",
+    CLprintf(file,"\n    size (%d %d)",
            ui->NetworkDiplomacyButton.Width,ui->NetworkDiplomacyButton.Height);
-    fprintf(file,"\n    caption \"%s\"",
+    CLprintf(file,"\n    caption \"%s\"",
            ui->NetworkDiplomacyButton.Text);
-    fprintf(file,"\n    style %s",
+    CLprintf(file,"\n    style %s",
            MenuButtonStyle(ui->NetworkDiplomacyButton.Button));
-    fprintf(file,")");
+    CLprintf(file,")");
 
-    fprintf(file,"\n\n  'info-buttons '(");
+    CLprintf(file,"\n\n  'info-buttons '(");
     for( i=0; i<ui->NumInfoButtons; ++i ) {
-       fprintf(file,"\n    (pos (%3d %3d) size (%d %d))",
+       CLprintf(file,"\n    (pos (%3d %3d) size (%d %d))",
                ui->InfoButtons[i].X,ui->InfoButtons[i].Y,
                ui->InfoButtons[i].Width,ui->InfoButtons[i].Height);
     }
-    fprintf(file,")");
-    fprintf(file,"\n  'training-buttons '(");
+    CLprintf(file,")");
+    CLprintf(file,"\n  'training-buttons '(");
     for( i=0; i<ui->NumTrainingButtons; ++i ) {
-       fprintf(file,"\n    (pos (%3d %3d) size (%d %d))",
+       CLprintf(file,"\n    (pos (%3d %3d) size (%d %d))",
                ui->TrainingButtons[i].X,ui->TrainingButtons[i].Y,
                ui->TrainingButtons[i].Width,ui->TrainingButtons[i].Height);
     }
-    fprintf(file,")");
-    fprintf(file,"\n  'button-buttons '(");
+    CLprintf(file,")");
+    CLprintf(file,"\n  'button-buttons '(");
     for( i=0; i<ui->NumButtonButtons; ++i ) {
-       fprintf(file,"\n    (pos (%3d %3d) size (%d %d))",
+       CLprintf(file,"\n    (pos (%3d %3d) size (%d %d))",
                ui->ButtonButtons[i].X,ui->ButtonButtons[i].Y,
                ui->ButtonButtons[i].Width,ui->ButtonButtons[i].Height);
     }
-    fprintf(file,")");
+    CLprintf(file,")");
 
-    fprintf(file,"\n\n  'cursors '(");
-    fprintf(file,"\n    point %s", ui->Point.Name);
-    fprintf(file,"\n    glass %s", ui->Glass.Name);
-    fprintf(file,"\n    cross %s", ui->Cross.Name);
-    fprintf(file,"\n    yellow %s", ui->YellowHair.Name);
-    fprintf(file,"\n    green %s", ui->GreenHair.Name);
-    fprintf(file,"\n    red %s", ui->RedHair.Name);
-    fprintf(file,"\n    scroll %s", ui->Scroll.Name);
-
-    fprintf(file,"\n    arrow-e %s", ui->ArrowE.Name);
-    fprintf(file,"\n    arrow-ne %s", ui->ArrowNE.Name);
-    fprintf(file,"\n    arrow-n %s", ui->ArrowN.Name);
-    fprintf(file,"\n    arrow-nw %s", ui->ArrowNW.Name);
-    fprintf(file,"\n    arrow-w %s", ui->ArrowW.Name);
-    fprintf(file,"\n    arrow-sw %s", ui->ArrowSW.Name);
-    fprintf(file,"\n    arrow-s %s", ui->ArrowS.Name);
-    fprintf(file,"\n    arrow-se %s", ui->ArrowSE.Name);
-    fprintf(file,")\n");
+    CLprintf(file,"\n\n  'cursors '(");
+    CLprintf(file,"\n    point %s", ui->Point.Name);
+    CLprintf(file,"\n    glass %s", ui->Glass.Name);
+    CLprintf(file,"\n    cross %s", ui->Cross.Name);
+    CLprintf(file,"\n    yellow %s", ui->YellowHair.Name);
+    CLprintf(file,"\n    green %s", ui->GreenHair.Name);
+    CLprintf(file,"\n    red %s", ui->RedHair.Name);
+    CLprintf(file,"\n    scroll %s", ui->Scroll.Name);
+
+    CLprintf(file,"\n    arrow-e %s", ui->ArrowE.Name);
+    CLprintf(file,"\n    arrow-ne %s", ui->ArrowNE.Name);
+    CLprintf(file,"\n    arrow-n %s", ui->ArrowN.Name);
+    CLprintf(file,"\n    arrow-nw %s", ui->ArrowNW.Name);
+    CLprintf(file,"\n    arrow-w %s", ui->ArrowW.Name);
+    CLprintf(file,"\n    arrow-sw %s", ui->ArrowSW.Name);
+    CLprintf(file,"\n    arrow-s %s", ui->ArrowS.Name);
+    CLprintf(file,"\n    arrow-se %s", ui->ArrowSE.Name);
+    CLprintf(file,")\n");
 
-    fprintf(file,"\n  'menu-panels '(");
+    CLprintf(file,"\n  'menu-panels '(");
     menupanel=ui->MenuPanels;
     while( menupanel ) {
-       fprintf(file,"\n    %s \"%s\"",
+       CLprintf(file,"\n    %s \"%s\"",
                menupanel->Ident,menupanel->Panel.File);
        menupanel=menupanel->Next;
     }
-    fprintf(file,")\n");
+    CLprintf(file,")\n");
 
-    fprintf(file,"\n  'victory-background \"%s\"",
+    CLprintf(file,"\n  'victory-background \"%s\"",
            ui->VictoryBackground.File);
-    fprintf(file,"\n  'defeat-background \"%s\"",
+    CLprintf(file,"\n  'defeat-background \"%s\"",
            ui->DefeatBackground.File);
 
-    fprintf(file," )\n\n");
+    CLprintf(file," )\n\n");
 }
 
 /**
@@ -482,17 +482,17 @@
 **     @param file     Save file handle
 **     @param ui       User interface to save
 */
-local void SaveViewports(FILE* file,const UI* ui)
+local void SaveViewports(CLFile* file,const UI* ui)
 {
     int i;
     const Viewport* vp;
 
-    fprintf(file, "(define-viewports 'mode %d",ui->ViewportMode);
+    CLprintf(file, "(define-viewports 'mode %d",ui->ViewportMode);
     for (i = 0; i < ui->NumViewports; ++i) {
        vp = &ui->Viewports[i];
-       fprintf(file, "\n  'viewport '(%d %d)",vp->MapX,vp->MapY);
+       CLprintf(file, "\n  'viewport '(%d %d)",vp->MapX,vp->MapY);
     }
-    fprintf(file, ")\n\n");
+    CLprintf(file, ")\n\n");
 }
 
 /**
@@ -500,29 +500,29 @@
 **
 **     @param file     Save file handle
 */
-global void SaveUserInterface(FILE* file)
+global void SaveUserInterface(CLFile* file)
 {
     int i;
 
-    fprintf(file,"\n;;; -----------------------------------------\n");
-    fprintf(file,";;; MODULE: ui $Id: ui.c,v 1.72 2003/08/13 14:55:45 
martinxyz Exp $\n\n");
+    CLprintf(file,"\n;;; -----------------------------------------\n");
+    CLprintf(file,";;; MODULE: ui $Id: ui.c,v 1.73 2003/08/17 15:57:08 n0body 
Exp $\n\n");
 
     // Contrast, Brightness, Saturation
-    fprintf(file,"(set-contrast! %d)\n",TheUI.Contrast);
-    fprintf(file,"(set-brightness! %d)\n",TheUI.Brightness);
-    fprintf(file,"(set-saturation! %d)\n\n",TheUI.Saturation);
+    CLprintf(file,"(set-contrast! %d)\n",TheUI.Contrast);
+    CLprintf(file,"(set-brightness! %d)\n",TheUI.Brightness);
+    CLprintf(file,"(set-saturation! %d)\n\n",TheUI.Saturation);
     // Scrolling
-    fprintf(file,"(set-mouse-scroll! %s)\n",TheUI.MouseScroll ? "#t" : "#f");
-    fprintf(file,"(set-mouse-scroll-speed! %d)\n",SpeedMouseScroll);
-    fprintf(file,"(set-key-scroll! %s)\n",TheUI.KeyScroll ? "#t" : "#f");
-    fprintf(file,"(set-key-scroll-speed! %d)\n",SpeedKeyScroll);
-    fprintf(file,"(set-mouse-scroll-speed-default! 
%d)\n",TheUI.MouseScrollSpeedDefault);
-    fprintf(file,"(set-mouse-scroll-speed-control! 
%d)\n",TheUI.MouseScrollSpeedControl);
+    CLprintf(file,"(set-mouse-scroll! %s)\n",TheUI.MouseScroll ? "#t" : "#f");
+    CLprintf(file,"(set-mouse-scroll-speed! %d)\n",SpeedMouseScroll);
+    CLprintf(file,"(set-key-scroll! %s)\n",TheUI.KeyScroll ? "#t" : "#f");
+    CLprintf(file,"(set-key-scroll-speed! %d)\n",SpeedKeyScroll);
+    CLprintf(file,"(set-mouse-scroll-speed-default! 
%d)\n",TheUI.MouseScrollSpeedDefault);
+    CLprintf(file,"(set-mouse-scroll-speed-control! 
%d)\n",TheUI.MouseScrollSpeedControl);
 
-    fprintf(file,"(set-mouse-adjust! %d)\n",TheUI.MouseAdjust);
-    fprintf(file,"(set-mouse-scale! %d)\n\n",TheUI.MouseScale);
+    CLprintf(file,"(set-mouse-adjust! %d)\n",TheUI.MouseAdjust);
+    CLprintf(file,"(set-mouse-scale! %d)\n\n",TheUI.MouseScale);
 
-    fprintf(file,"(set-original-resources! %s)\n\n",
+    CLprintf(file,"(set-original-resources! %s)\n\n",
            TheUI.OriginalResources ? "#t" : "#f");
 
     // Save the UIs for all resolutions
Index: stratagus/src/unit/depend.c
diff -u stratagus/src/unit/depend.c:1.28 stratagus/src/unit/depend.c:1.29
--- stratagus/src/unit/depend.c:1.28    Sat Aug  9 16:08:39 2003
+++ stratagus/src/unit/depend.c Sun Aug 17 11:57:08 2003
@@ -26,7 +26,7 @@
 //      Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
 //      02111-1307, USA.
 //
-//     $Id: depend.c,v 1.28 2003/08/09 20:08:39 martinxyz Exp $
+//     $Id: depend.c,v 1.29 2003/08/17 15:57:08 n0body Exp $
 
 //@{
 
@@ -276,58 +276,58 @@
 **
 **     @param file     Output file.
 */
-global void SaveDependencies(FILE* file)
+global void SaveDependencies(CLFile* file)
 {
     unsigned u;
     const DependRule* node;
     const DependRule* rule;
     const DependRule* temp;
 
-    fprintf(file,"\n;;; -----------------------------------------\n");
-    fprintf(file,";;; MODULE: dependencies $Id: depend.c,v 1.28 2003/08/09 
20:08:39 martinxyz Exp $\n\n");
+    CLprintf(file,"\n;;; -----------------------------------------\n");
+    CLprintf(file,";;; MODULE: dependencies $Id: depend.c,v 1.29 2003/08/17 
15:57:08 n0body Exp $\n\n");
 
     // Save all dependencies
 
     for( u=0; u<sizeof(DependHash)/sizeof(*DependHash); ++u ) {
        node=DependHash[u];
        while( node ) {                 // all hash links
-           fprintf(file,"(define-dependency '");
+           CLprintf(file,"(define-dependency '");
            switch( node->Type ) {
                case DependRuleUnitType:
-                   fprintf(file,"%s",node->Kind.UnitType->Ident);
+                   CLprintf(file,"%s",node->Kind.UnitType->Ident);
                    break;
                case DependRuleUpgrade:
-                   fprintf(file,"%s",node->Kind.Upgrade->Ident);
+                   CLprintf(file,"%s",node->Kind.Upgrade->Ident);
                    break;
            }
            // All or cases
 
-           fprintf(file,"\n  '(");
+           CLprintf(file,"\n  '(");
            rule=node->Rule;
            for( ;; ) {
                temp=rule;
                while( temp ) {
                    switch( temp->Type ) {
                    case DependRuleUnitType:
-                       fprintf(file,"%s",temp->Kind.UnitType->Ident);
+                       CLprintf(file,"%s",temp->Kind.UnitType->Ident);
                        break;
                    case DependRuleUpgrade:
-                       fprintf(file,"%s",temp->Kind.Upgrade->Ident);
+                       CLprintf(file,"%s",temp->Kind.Upgrade->Ident);
                        break;
                    }
                    temp=temp->Rule;
                    if( temp ) {
-                       fprintf(file," ");
+                       CLprintf(file," ");
                    }
                }
-               fprintf(file,")");
+               CLprintf(file,")");
                if( !(rule=rule->Next) ) {
                    break;
                }
-               fprintf(file,"\n  'or '( ");
+               CLprintf(file,"\n  'or '( ");
            }
 
-           fprintf(file,")\n");
+           CLprintf(file,")\n");
 
            node=node->Next;
        }
Index: stratagus/src/unit/unittype.c
diff -u stratagus/src/unit/unittype.c:1.84 stratagus/src/unit/unittype.c:1.85
--- stratagus/src/unit/unittype.c:1.84  Sun Aug 10 22:14:46 2003
+++ stratagus/src/unit/unittype.c       Sun Aug 17 11:57:08 2003
@@ -26,7 +26,7 @@
 //      Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
 //      02111-1307, USA.
 //
-//     $Id: unittype.c,v 1.84 2003/08/11 02:14:46 n0body Exp $
+//     $Id: unittype.c,v 1.85 2003/08/17 15:57:08 n0body Exp $
 
 //@{
 
@@ -76,12 +76,6 @@
 **
 **     FIXME: find a way to make it configurable!
 */
-#if 0
-global UnitType*UnitTypeOrcTanker;             /// Orc tanker unit type pointer
-global UnitType*UnitTypeHumanTanker;           /// Human tanker unit type 
pointer
-global UnitType*UnitTypeOrcTankerFull;         /// Orc tanker full unit type 
pointer
-global UnitType*UnitTypeHumanTankerFull;       /// Human tanker full unit type 
pointer
-#endif
 global UnitType*UnitTypeHumanWorker;           /// Human worker
 global UnitType*UnitTypeOrcWorker;             /// Orc worker
 global UnitType*UnitTypeHumanWorkerWithWood;   /// Human worker with wood
@@ -535,7 +529,7 @@
 **     @param anim     Save this animation.
 **     @param file     Output file.
 */
-local void SaveAnimation(const char* name,const Animation* anim,FILE* file)
+local void SaveAnimation(const char* name,const Animation* anim,CLFile* file)
 {
     int i;
     int p;
@@ -558,27 +552,27 @@
            }
        }
 
-       fprintf(file,"\n  '%s '(\t; #%d",name,i);
+       CLprintf(file,"\n  '%s '(\t; #%d",name,i);
        if( p ) {
-           fprintf(file," P%d",p);
+           CLprintf(file," P%d",p);
        }
 
        temp=anim;
        frame=0;
        for( ;; ) {
-           fprintf(file,"\n    ");
+           CLprintf(file,"\n    ");
            for( i=0; i<4; ++i ) {
                if( i ) {
-                   fputc(' ',file);
+                   CLprintf(file," ");
                }
                frame+=temp->Frame;
-               fprintf(file,"#(%2d %d %3d %3d)",
+               CLprintf(file,"#(%2d %d %3d %3d)",
                        temp->Flags&0x7F,temp->Pixel,temp->Sleep&0xFF,frame);
                if( temp->Flags&AnimationRestart ) {
                    frame=0;
                }
                if( temp->Flags&AnimationEnd ) {
-                   fprintf(file,")");
+                   CLprintf(file,")");
                    return;
                }
                ++temp;
@@ -595,7 +589,7 @@
 **     @param type     Save animations of this unit-type.
 **     @param file     Output file.
 */
-local void SaveAnimations(const UnitType* type,FILE* file)
+local void SaveAnimations(const UnitType* type,CLFile* file)
 {
     const Animations* anims;
     int i;
@@ -614,7 +608,7 @@
        }
     }
 
-    fprintf(file,"\n;;------\n;;\t");
+    CLprintf(file,"\n;;------\n;;\t");
     //
     // Print all units that use this animation.
     //
@@ -622,20 +616,20 @@
     for( i=0 ; i<NumUnitTypes ; ++i ) {
        if( UnitTypes[i]->Animations==anims ) {
            if( q ) {
-               fprintf(file,", ");
+               CLprintf(file,", ");
            }
-           fprintf(file,"%s",UnitTypes[i]->Name);
+           CLprintf(file,"%s",UnitTypes[i]->Name);
            q=1;
        }
     }
-    fprintf(file,"\n(define-animations 'animations-%s",type->Ident+5);
+    CLprintf(file,"\n(define-animations 'animations-%s",type->Ident+5);
 
     SaveAnimation("still",anims->Still,file);
     SaveAnimation("move",anims->Move,file);
     SaveAnimation("attack",anims->Attack,file);
     SaveAnimation("die",anims->Die,file);
 
-    fprintf(file,")\n");
+    CLprintf(file,")\n");
 }
 
 /**
@@ -647,32 +641,32 @@
 **
 **     @todo   Arrange the variables more logical
 */
-local void SaveUnitType(FILE* file,const UnitType* type,int all)
+local void SaveUnitType(CLFile* file,const UnitType* type,int all)
 {
     int i;
     int flag;
 
-    fprintf(file,"(define-unit-type '%s",type->Ident);
-    fprintf(file," 'name \"%s\"\n  ",type->Name);
+    CLprintf(file,"(define-unit-type '%s",type->Ident);
+    CLprintf(file," 'name \"%s\"\n  ",type->Name);
     // Graphic files
     if( type->SameSprite ) {
-       fprintf(file,"'use '%s",type->SameSprite);
+       CLprintf(file,"'use '%s",type->SameSprite);
     } else {
-       fputs("'files '(",file);
+       CLprintf(file,"'files '(");
        for( flag=i=0; i<TilesetMax; ++i ) {
            if( type->File[i] ) {
                if( flag ) {
-                   fputs("\n    ",file);
+                   CLprintf(file,"\n    ");
                }
-               fprintf(file,"%s \"%s\"",Tilesets[i]->Ident,type->File[i]);
+               CLprintf(file,"%s \"%s\"",Tilesets[i]->Ident,type->File[i]);
                flag=1;
            }
        }
-       fputs(")",file);
+       CLprintf(file,")");
     }
-    fprintf(file,"\n  'size '(%d %d)\n",type->Width,type->Height);
+    CLprintf(file,"\n  'size '(%d %d)\n",type->Width,type->Height);
     if( type->ShadowFile ) {
-       fprintf(file,"  'shadow '(file \"%s\" width %d height %d)\n",
+       CLprintf(file,"  'shadow '(file \"%s\" width %d height %d)\n",
                type->ShadowFile, type->ShadowWidth, type->ShadowHeight);
     }
 
@@ -684,222 +678,222 @@
            break;
        }
     }
-    fprintf(file,"  'animations 'animations-%s",UnitTypes[i]->Ident+5);
-    fprintf(file,"  'icon '%s\n",IdentOfIcon(type->Icon.Icon));
+    CLprintf(file,"  'animations 'animations-%s",UnitTypes[i]->Ident+5);
+    CLprintf(file,"  'icon '%s\n",IdentOfIcon(type->Icon.Icon));
     for( i=flag=0; i<MaxCosts; ++i ) {
        if( all || type->_Costs[i] ) {
            if( !flag ) {
-               fputs("  'costs '(",file);
+               CLprintf(file,"  'costs '(");
                flag=1;
            } else {
-               fputs(" ",file);
+               CLprintf(file," ");
            }
-           fprintf(file,"%s %d",DefaultResourceNames[i],type->_Costs[i]);
+           CLprintf(file,"%s %d",DefaultResourceNames[i],type->_Costs[i]);
        }
     }
     if( flag ) {
-       fputs(")\n",file);
+       CLprintf(file,")\n");
     }
 
     if( type->Construction ) {
-       fprintf(file,"  'construction '%s\n",type->Construction->Ident);
+       CLprintf(file,"  'construction '%s\n",type->Construction->Ident);
     }
-    fprintf(file,"  'speed %d\n",type->_Speed);
-    fprintf(file,"  'hit-points %d\n",type->_HitPoints);
+    CLprintf(file,"  'speed %d\n",type->_Speed);
+    CLprintf(file,"  'hit-points %d\n",type->_HitPoints);
     if( all || type->_MaxMana ) {
-       fprintf(file,"  'max-mana %d\n",type->_MaxMana);
+       CLprintf(file,"  'max-mana %d\n",type->_MaxMana);
     }
     if( all || type->Magic ) {
-       fprintf(file,"  'magic %d\n",type->Magic);
+       CLprintf(file,"  'magic %d\n",type->Magic);
     }
-    fprintf(file,"  'tile-size '(%d %d)",type->TileWidth,type->TileHeight);
-    fprintf(file,"  'box-size '(%d %d)\n",type->BoxWidth,type->BoxHeight);
-    fprintf(file,"  'sight-range %d",type->_SightRange);
+    CLprintf(file,"  'tile-size '(%d %d)",type->TileWidth,type->TileHeight);
+    CLprintf(file,"  'box-size '(%d %d)\n",type->BoxWidth,type->BoxHeight);
+    CLprintf(file,"  'sight-range %d",type->_SightRange);
     if( all || type->ReactRangeComputer ) {
-       fprintf(file,"  'computer-reaction-range %d",type->ReactRangeComputer);
+       CLprintf(file,"  'computer-reaction-range %d",type->ReactRangeComputer);
     }
     if( all || type->ReactRangePerson ) {
-       fprintf(file,"  'person-reaction-range %d",type->ReactRangePerson);
+       CLprintf(file,"  'person-reaction-range %d",type->ReactRangePerson);
     }
-    fputs("\n",file);
+    CLprintf(file,"\n");
 
     if( all || type->_Armor ) {
-       fprintf(file,"  'armor %d",type->_Armor);
+       CLprintf(file,"  'armor %d",type->_Armor);
     } else {
-       fputs(" ",file);
+       CLprintf(file," ");
     }
-    fprintf(file,"  'basic-damage %d",type->_BasicDamage);
-    fprintf(file,"  'piercing-damage %d",type->_PiercingDamage);
-    fprintf(file,"  'missile '%s\n",type->Missile.Name);
-    fprintf(file,"  'draw-level %d",type->DrawLevel);
+    CLprintf(file,"  'basic-damage %d",type->_BasicDamage);
+    CLprintf(file,"  'piercing-damage %d",type->_PiercingDamage);
+    CLprintf(file,"  'missile '%s\n",type->Missile.Name);
+    CLprintf(file,"  'draw-level %d",type->DrawLevel);
     if( all || type->MinAttackRange ) {
-       fprintf(file,"  'min-attack-range %d",type->MinAttackRange);
-       fprintf(file,"  'max-attack-range %d\n",type->_AttackRange);
+       CLprintf(file,"  'min-attack-range %d",type->MinAttackRange);
+       CLprintf(file,"  'max-attack-range %d\n",type->_AttackRange);
     } else if( type->_AttackRange ) {
-       fprintf(file,"  'max-attack-range %d\n",type->_AttackRange);
+       CLprintf(file,"  'max-attack-range %d\n",type->_AttackRange);
     }
     if( all || type->WeaponsUpgradable ) {
-       fprintf(file,"  'weapons-upgradable %d",type->WeaponsUpgradable);
+       CLprintf(file,"  'weapons-upgradable %d",type->WeaponsUpgradable);
        if( all || type->ArmorUpgradable ) {
-           fprintf(file," 'armor-upgradable %d\n",type->ArmorUpgradable);
+           CLprintf(file," 'armor-upgradable %d\n",type->ArmorUpgradable);
        } else {
-           fputs("\n",file);
+           CLprintf(file,"\n");
        }
     } else if( type->ArmorUpgradable ) {
-       fprintf(file,"  'armor-upgradable %d\n",type->ArmorUpgradable);
+       CLprintf(file,"  'armor-upgradable %d\n",type->ArmorUpgradable);
     }
-    fprintf(file,"  'priority %d",type->Priority);
+    CLprintf(file,"  'priority %d",type->Priority);
     if( all || type->AnnoyComputerFactor ) {
-       fprintf(file,"  'annoy-computer-factor %d",type->AnnoyComputerFactor);
+       CLprintf(file,"  'annoy-computer-factor %d",type->AnnoyComputerFactor);
     }
-    fputs("\n",file);
+    CLprintf(file,"\n");
     if( all || type->DecayRate ) {
-       fprintf(file,"  'decay-rate %d\n",type->DecayRate);
+       CLprintf(file,"  'decay-rate %d\n",type->DecayRate);
     }
     if( all || type->Points ) {
-       fprintf(file,"  'points %d\n",type->Points);
+       CLprintf(file,"  'points %d\n",type->Points);
     }
     if( all || type->Demand ) {
-       fprintf(file,"  'demand %d\n",type->Demand);
+       CLprintf(file,"  'demand %d\n",type->Demand);
     }
     if( all || type->Supply ) {
-       fprintf(file,"  'supply %d\n",type->Supply);
+       CLprintf(file,"  'supply %d\n",type->Supply);
     }
 
     if( type->CorpseName ) {
-       fprintf(file,"  'corpse '(%s %d)\n",
+       CLprintf(file,"  'corpse '(%s %d)\n",
                type->CorpseName,type->CorpseScript);
     }
     if( type->ExplodeWhenKilled ) {
-       fprintf(file,"  'explode-when-killed\n");
+       CLprintf(file,"  'explode-when-killed\n");
     }
 
-    fprintf(file,"  ");
+    CLprintf(file,"  ");
     switch( type->UnitType ) {
        case UnitTypeLand:
-           fputs("'type-land",file);
+           CLprintf(file,"'type-land");
            break;
        case UnitTypeFly:
-           fputs("'type-fly",file);
+           CLprintf(file,"'type-fly");
            break;
        case UnitTypeNaval:
-           fputs("'type-naval",file);
+           CLprintf(file,"'type-naval");
            break;
        default:
-           fputs("'type-unknown",file);
+           CLprintf(file,"'type-unknown");
            break;
     }
-    fprintf(file,"\n");
+    CLprintf(file,"\n");
 
-    fprintf(file,"  ");
+    CLprintf(file,"  ");
     switch( type->MouseAction ) {
        case MouseActionNone:
            if( all ) {
-               fprintf(file,"'right-none");
+               CLprintf(file,"'right-none");
            }
            break;
        case MouseActionAttack:
-           fprintf(file,"'right-attack");
+           CLprintf(file,"'right-attack");
            break;
        case MouseActionMove:
-           fprintf(file,"'right-move");
+           CLprintf(file,"'right-move");
            break;
        case MouseActionHarvest:
-           fprintf(file,"'right-harvest");
+           CLprintf(file,"'right-harvest");
            break;
        case MouseActionDemolish:
-           fprintf(file,"'right-demolish");
+           CLprintf(file,"'right-demolish");
            break;
        case MouseActionSail:
-           fprintf(file,"'right-sail");
+           CLprintf(file,"'right-sail");
            break;
        default:
-           fprintf(file,"'right-unknown");
+           CLprintf(file,"'right-unknown");
            break;
     }
-    fprintf(file,"\n");
+    CLprintf(file,"\n");
 
     if( type->GroundAttack ) {
-       fprintf(file,"  'can-ground-attack\n");
+       CLprintf(file,"  'can-ground-attack\n");
     }
     if( type->CanAttack ) {
-       fprintf(file,"  'can-attack\n");
+       CLprintf(file,"  'can-attack\n");
     }
     if( type->CanRepair ) {
-       fprintf(file,"  'can-repair\n");
+       CLprintf(file,"  'can-repair\n");
     }
     if( type->CanTarget ) {
-       fprintf(file,"  ");
+       CLprintf(file,"  ");
        if( type->CanTarget&CanTargetLand ) {
-           fprintf(file,"'can-target-land ");
+           CLprintf(file,"'can-target-land ");
        }
        if( type->CanTarget&CanTargetSea ) {
-           fprintf(file,"'can-target-sea ");
+           CLprintf(file,"'can-target-sea ");
        }
        if( type->CanTarget&CanTargetAir ) {
-           fprintf(file,"'can-target-air ");
+           CLprintf(file,"'can-target-air ");
        }
        if( type->CanTarget&~7 ) {
-           fprintf(file,"'can-target-other ");
+           CLprintf(file,"'can-target-other ");
        }
-       fprintf(file,"\n");
+       CLprintf(file,"\n");
     }
 
     if( type->Building ) {
-       fprintf(file,"  'building\n");
+       CLprintf(file,"  'building\n");
     }
     if( type->ShoreBuilding ) {
-       fprintf(file,"  'shore-building\n");
+       CLprintf(file,"  'shore-building\n");
     }
     if( type->LandUnit ) {
-       fprintf(file,"  'land-unit\n");
+       CLprintf(file,"  'land-unit\n");
     }
     if( type->AirUnit ) {
-       fprintf(file,"  'air-unit\n");
+       CLprintf(file,"  'air-unit\n");
     }
     if( type->SeaUnit ) {
-       fprintf(file,"  'sea-unit\n");
+       CLprintf(file,"  'sea-unit\n");
     }
 
     if( type->Critter ) {
-       fprintf(file,"  'critter\n");
+       CLprintf(file,"  'critter\n");
     }
     if( type->Revealer ) {
-       fprintf(file,"  'revealer\n");
+       CLprintf(file,"  'revealer\n");
     }
     if( type->Submarine ) {
-       fprintf(file,"  'submarine\n");
+       CLprintf(file,"  'submarine\n");
     }
     if( type->CanSeeSubmarine ) {
-       fprintf(file,"  'can-see-submarine\n");
+       CLprintf(file,"  'can-see-submarine\n");
     }
     if( type->Transporter ) {
-       fprintf(file,"  'transporter\n");
+       CLprintf(file,"  'transporter\n");
     }
 
     if( type->CowerWorker ) {
-       fprintf(file,"  'cower-worker\n");
+       CLprintf(file,"  'cower-worker\n");
     }
     if( type->Harvester ) {
-       fprintf(file,"  'harvester 'resource-harvested 
'%s",DefaultResourceNames[type->ResourceHarvested]);
+       CLprintf(file,"  'harvester 'resource-harvested 
'%s",DefaultResourceNames[type->ResourceHarvested]);
     }
     if ( type->WaitAtResource ) {
-       fprintf(file,"  'wait-at-resource %d\n",type->WaitAtResource);
+       CLprintf(file,"  'wait-at-resource %d\n",type->WaitAtResource);
     }
     if ( type->WaitAtDepot ) {
-       fprintf(file,"  'wait-at-depot %d\n",type->WaitAtDepot);
+       CLprintf(file,"  'wait-at-depot %d\n",type->WaitAtDepot);
     }
     if ( type->ResourceCapacity ) {
-        fprintf(file,"  'resource-capacity %d\n",type->ResourceCapacity);
+        CLprintf(file,"  'resource-capacity %d\n",type->ResourceCapacity);
     }
     if ( type->TransformWhenEmpty ) {
-       fprintf(file,"  'transform-when-empty 
'%s\n",type->TransformWhenEmpty->Ident);
+       CLprintf(file,"  'transform-when-empty 
'%s\n",type->TransformWhenEmpty->Ident);
     }
     if ( type->TransformWhenLoaded ) {
-       fprintf(file,"  'transform-when-loaded 
'%s\n",type->TransformWhenLoaded->Ident);
+       CLprintf(file,"  'transform-when-loaded 
'%s\n",type->TransformWhenLoaded->Ident);
     }
     if( type->GivesResource ) {
-       fprintf(file,"  'gives-resource 
'%s\n",DefaultResourceNames[type->GivesResource]);
+       CLprintf(file,"  'gives-resource 
'%s\n",DefaultResourceNames[type->GivesResource]);
     }
     
     // Save store info.
@@ -907,75 +901,75 @@
        if (type->CanStore[i]) {
            if (!flag) {
                flag=1;
-               fprintf(file,"  'can-store '(%s",DefaultResourceNames[i]);
+               CLprintf(file,"  'can-store '(%s",DefaultResourceNames[i]);
            } else {
-               fprintf(file," %s",DefaultResourceNames[i]);
+               CLprintf(file," %s",DefaultResourceNames[i]);
            }
        }
     if (flag)
-       fprintf(file,")");
+       CLprintf(file,")");
     
     if( type->MustBuildOnTop ) {
-       fprintf(file,"  'must-build-on-top '%s\n",type->MustBuildOnTop->Ident);
+       CLprintf(file,"  'must-build-on-top '%s\n",type->MustBuildOnTop->Ident);
     }
     if( type->CanHarvest ) {
-       fprintf(file,"  'can-harvest\n");
+       CLprintf(file,"  'can-harvest\n");
     }
 
     if( type->Vanishes ) {
-       fprintf(file,"  'vanishes\n");
+       CLprintf(file,"  'vanishes\n");
     }
     if( type->Tower ) {
-       fprintf(file,"  'tower\n");
+       CLprintf(file,"  'tower\n");
     }
     if( type->Hero ) {
-       fprintf(file,"  'hero\n");
+       CLprintf(file,"  'hero\n");
     }
     if( type->Volatile ) {
-       fprintf(file,"  'volatile\n");
+       CLprintf(file,"  'volatile\n");
     }
     if( type->CowerMage ) {
-       fprintf(file,"  'cower-mage\n");
+       CLprintf(file,"  'cower-mage\n");
     }
     if( type->IsUndead ) {
-       fprintf(file,"  'isundead\n");
+       CLprintf(file,"  'isundead\n");
     }
     if( type->CanCastSpell ) {
-       fprintf(file,"  'can-cast-spell\n");
+       CLprintf(file,"  'can-cast-spell\n");
     }
     if( type->Organic ) {
-       fprintf(file,"  'organic\n");
+       CLprintf(file,"  'organic\n");
     }
     if( type->SelectableByRectangle ) {
-       fprintf(file,"  'selectable-by-rectangle\n");
+       CLprintf(file,"  'selectable-by-rectangle\n");
     }
     if( type->Teleporter ) {
-       fprintf(file,"  'teleporter\n");
+       CLprintf(file,"  'teleporter\n");
     }
 
-    fprintf(file,"  'sounds '(");
+    CLprintf(file,"  'sounds '(");
     if( type->Sound.Selected.Name ) {
-       fprintf(file,"\n    selected \"%s\"",type->Sound.Selected.Name);
+       CLprintf(file,"\n    selected \"%s\"",type->Sound.Selected.Name);
     }
     if( type->Sound.Acknowledgement.Name ) {
-       fprintf(file,"\n    acknowledge \"%s\"",
+       CLprintf(file,"\n    acknowledge \"%s\"",
                type->Sound.Acknowledgement.Name);
     }
     if( type->Sound.Ready.Name ) {
-       fprintf(file,"\n    ready \"%s\"",type->Sound.Ready.Name);
+       CLprintf(file,"\n    ready \"%s\"",type->Sound.Ready.Name);
     }
     if( type->Sound.Help.Name ) {
-       fprintf(file,"\n    help \"%s\"",type->Sound.Help.Name);
+       CLprintf(file,"\n    help \"%s\"",type->Sound.Help.Name);
     }
     if( type->Sound.Dead.Name ) {
-       fprintf(file,"\n    dead \"%s\"",type->Sound.Dead.Name);
+       CLprintf(file,"\n    dead \"%s\"",type->Sound.Dead.Name);
     }
     // FIXME: Attack should be removed!
     if( type->Weapon.Attack.Name ) {
-       fprintf(file,"\n    attack \"%s\"",type->Weapon.Attack.Name);
+       CLprintf(file,"\n    attack \"%s\"",type->Weapon.Attack.Name);
     }
-    fprintf(file,")");
-    fprintf(file,")\n\n");
+    CLprintf(file,")");
+    CLprintf(file,")\n\n");
 }
 
 /**
@@ -987,33 +981,33 @@
 **     @param file     Output file.
 */
 local void SaveUnitStats(const UnitStats* stats,const char* ident,int plynr,
-       FILE* file)
+       CLFile* file)
 {
     DebugCheck(plynr>=PlayerMax);
     int j;
 
-    fprintf(file,"(define-unit-stats '%s %d\n  ",ident,plynr);
-    fprintf(file,"'level %d ",stats->Level);
-    fprintf(file,"'speed %d ",stats->Speed);
-    fprintf(file,"'attack-range %d ",stats->AttackRange);
-    fprintf(file,"'sight-range %d\n  ",stats->SightRange);
-    fprintf(file,"'armor %d ",stats->Armor);
-    fprintf(file,"'basic-damage %d ",stats->BasicDamage);
-    fprintf(file,"'piercing-damage %d ",stats->PiercingDamage);
-    fprintf(file,"'hit-points %d\n  ",stats->HitPoints);
-    fprintf(file,"'costs '(");
+    CLprintf(file,"(define-unit-stats '%s %d\n  ",ident,plynr);
+    CLprintf(file,"'level %d ",stats->Level);
+    CLprintf(file,"'speed %d ",stats->Speed);
+    CLprintf(file,"'attack-range %d ",stats->AttackRange);
+    CLprintf(file,"'sight-range %d\n  ",stats->SightRange);
+    CLprintf(file,"'armor %d ",stats->Armor);
+    CLprintf(file,"'basic-damage %d ",stats->BasicDamage);
+    CLprintf(file,"'piercing-damage %d ",stats->PiercingDamage);
+    CLprintf(file,"'hit-points %d\n  ",stats->HitPoints);
+    CLprintf(file,"'costs '(");
     for( j=0; j<MaxCosts; ++j ) {
        if( j ) {
 //         if( j==MaxCosts/2 ) {
 //             fputs("\n    ",file);
 //         } else {
-               fputc(' ',file);
+               CLprintf(file," ");
 //         }
        }
-       fprintf(file,"%s %d",DefaultResourceNames[j],stats->Costs[j]);
+       CLprintf(file,"%s %d",DefaultResourceNames[j],stats->Costs[j]);
     }
 
-    fprintf(file,") )\n");
+    CLprintf(file,") )\n");
 }
 
 /**
@@ -1021,25 +1015,25 @@
 **
 **     @param file     Output file.
 */
-global void SaveUnitTypes(FILE* file)
+global void SaveUnitTypes(CLFile* file)
 {
     int i;
     int j;
     char **sp;
 
-    fprintf(file,"\n;;; -----------------------------------------\n");
-    fprintf(file,";;; MODULE: unittypes $Id: unittype.c,v 1.84 2003/08/11 
02:14:46 n0body Exp $\n\n");
+    CLprintf(file,"\n;;; -----------------------------------------\n");
+    CLprintf(file,";;; MODULE: unittypes $Id: unittype.c,v 1.85 2003/08/17 
15:57:08 n0body Exp $\n\n");
 
     // Original number to internal unit-type name.
 
-    i=fprintf(file,"(define-unittype-wc-names");
+    i=CLprintf(file,"(define-unittype-wc-names");
     for( sp=UnitTypeWcNames; *sp; ++sp ) {
        if( i+strlen(*sp)>79 ) {
-           i=fprintf(file,"\n ");
+           i=CLprintf(file,"\n ");
        }
-       i+=fprintf(file," '%s",*sp);
+       i+=CLprintf(file," '%s",*sp);
     }
-    fprintf(file,")\n");
+    CLprintf(file,")\n");
 
     // Save all animations.
 
@@ -1047,24 +1041,24 @@
        SaveAnimations(UnitTypes[i],file);
     }
 
-    fprintf(file,"\n;;; Declare all unit types in advance.\n");
+    CLprintf(file,"\n;;; Declare all unit types in advance.\n");
     //  Define all types in advance to avoid undefined unit problems.
     for ( i=0; i<NumUnitTypes; ++i ) {
-       fprintf(file,"(define-unit-type '%s)\n",UnitTypes[i]->Ident);
+       CLprintf(file,"(define-unit-type '%s)\n",UnitTypes[i]->Ident);
     }
-    fprintf(file,"\n");
+    CLprintf(file,"\n");
 
     // Save all types
 
     for( i=0; i<NumUnitTypes; ++i ) {
-       fputc('\n',file);
+       CLprintf(file,"\n");
        SaveUnitType(file,UnitTypes[i],0);
     }
 
     // Save all stats
 
     for( i=0; i<NumUnitTypes; ++i ) {
-       fputc('\n',file);
+       CLprintf(file,"\n");
        for( j=0; j<PlayerMax; ++j ) {
            SaveUnitStats(&UnitTypes[i]->Stats[j],UnitTypes[i]->Ident,j,file);
        }
Index: stratagus/src/unit/upgrade.c
diff -u stratagus/src/unit/upgrade.c:1.57 stratagus/src/unit/upgrade.c:1.58
--- stratagus/src/unit/upgrade.c:1.57   Sat Aug  9 16:08:39 2003
+++ stratagus/src/unit/upgrade.c        Sun Aug 17 11:57:08 2003
@@ -26,7 +26,7 @@
 //      Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
 //      02111-1307, USA.
 //
-//     $Id: upgrade.c,v 1.57 2003/08/09 20:08:39 martinxyz Exp $
+//     $Id: upgrade.c,v 1.58 2003/08/17 15:57:08 n0body Exp $
 
 //@{
 
@@ -543,92 +543,92 @@
 **
 **     @param file     Output file.
 */
-global void SaveUpgrades(FILE* file)
+global void SaveUpgrades(CLFile* file)
 {
     int i;
     int j;
     int p;
 
-    fprintf(file,"\n;;; -----------------------------------------\n");
-    fprintf(file,";;; MODULE: upgrades $Id: upgrade.c,v 1.57 2003/08/09 
20:08:39 martinxyz Exp $\n\n");
+    CLprintf(file,"\n;;; -----------------------------------------\n");
+    CLprintf(file,";;; MODULE: upgrades $Id: upgrade.c,v 1.58 2003/08/17 
15:57:08 n0body Exp $\n\n");
 
     /* remove?
     //
     // Save all upgrades
     //
     for( i=0; i<NumUpgrades; ++i ) {
-       fprintf(file,"(define-upgrade '%s 'icon '%s\n"
+       CLprintf(file,"(define-upgrade '%s 'icon '%s\n"
                ,Upgrades[i].Ident,Upgrades[i].Icon.Name);
-       fprintf(file,"  'costs #(");
+       CLprintf(file,"  'costs #(");
        for( j=0; j<MaxCosts; ++j ) {
-           fprintf(file," %5d",Upgrades[i].Costs[j]);
+           CLprintf(file," %5d",Upgrades[i].Costs[j]);
        }
-       fprintf(file,"))\n");
+       CLprintf(file,"))\n");
     }
-    fprintf(file,"\n");
+    CLprintf(file,"\n");
     */
 
     //
     // Save all upgrades
     //
     for( i=0; i<NumUpgrades; ++i ) {
-       fprintf(file,"(define-upgrade '%s 'icon '%s\n"
+       CLprintf(file,"(define-upgrade '%s 'icon '%s\n"
                ,Upgrades[i].Ident,Upgrades[i].Icon.Name);
-       fprintf(file,"  'costs #(");
+       CLprintf(file,"  'costs #(");
        for( j=0; j<MaxCosts; ++j ) {
-           fprintf(file," %5d",Upgrades[i].Costs[j]);
+           CLprintf(file," %5d",Upgrades[i].Costs[j]);
        }
 
-       fprintf(file,"))\n");
+       CLprintf(file,"))\n");
     }
-    fprintf(file,"\n");
+    CLprintf(file,"\n");
 
     //
     // Save all upgrade modifiers.
     //
     for( i=0; i<NumUpgradeModifiers; ++i ) {
-       fprintf(file,"(define-modifier '%s",
+       CLprintf(file,"(define-modifier '%s",
                Upgrades[UpgradeModifiers[i]->UpgradeId].Ident);
 
        if( UpgradeModifiers[i]->Modifier.AttackRange ) {
-           fprintf(file,"\n  '(attack-range %d)"
+           CLprintf(file,"\n  '(attack-range %d)"
                    ,UpgradeModifiers[i]->Modifier.AttackRange );
        }
        if( UpgradeModifiers[i]->Modifier.SightRange ) {
-           fprintf(file,"\n  '(sight-range %d)"
+           CLprintf(file,"\n  '(sight-range %d)"
                    ,UpgradeModifiers[i]->Modifier.SightRange );
        }
        if( UpgradeModifiers[i]->Modifier.BasicDamage ) {
-           fprintf(file,"\n  '(basic-damage %d)"
+           CLprintf(file,"\n  '(basic-damage %d)"
                    ,UpgradeModifiers[i]->Modifier.BasicDamage );
        }
        if( UpgradeModifiers[i]->Modifier.PiercingDamage ) {
-           fprintf(file,"\n  '(piercing-damage %d)"
+           CLprintf(file,"\n  '(piercing-damage %d)"
                    ,UpgradeModifiers[i]->Modifier.PiercingDamage );
        }
        if( UpgradeModifiers[i]->Modifier.Armor ) {
-           fprintf(file,"\n  '(armor %d)"
+           CLprintf(file,"\n  '(armor %d)"
                    ,UpgradeModifiers[i]->Modifier.Armor );
        }
        if( UpgradeModifiers[i]->Modifier.Speed ) {
-           fprintf(file,"\n  '(speed %d)"
+           CLprintf(file,"\n  '(speed %d)"
                    ,UpgradeModifiers[i]->Modifier.Speed );
        }
        if( UpgradeModifiers[i]->Modifier.HitPoints ) {
-           fprintf(file,"\n  '(hit-points %d)"
+           CLprintf(file,"\n  '(hit-points %d)"
                    ,UpgradeModifiers[i]->Modifier.HitPoints );
        }
 
        for( j=0; j<MaxCosts; ++j ) {
            if( UpgradeModifiers[i]->Modifier.Costs[j] ) {
-               fprintf(file,"\n  '(%s-cost %d)"
+               CLprintf(file,"\n  '(%s-cost %d)"
                    
,DefaultResourceNames[j],UpgradeModifiers[i]->Modifier.Costs[j]);
            }
        }
 
        for( j=0; j<UnitTypeMax; ++j ) {        // allow/forbid units
            if( UpgradeModifiers[i]->ChangeUnits[j]!='?' ) {
-               fprintf(file,"\n  '(allow %s %d)",
+               CLprintf(file,"\n  '(allow %s %d)",
                        UnitTypes[j]->Ident,
                        UpgradeModifiers[i]->ChangeUnits[j]);
            }
@@ -636,65 +636,65 @@
 
        for( j=0; j<UpgradeMax; ++j ) {         // allow/forbid upgrades
            if( UpgradeModifiers[i]->ChangeUpgrades[j]!='?' ) {
-               fprintf(file,"\n  '(allow %s %c)",Upgrades[j].Ident,
+               CLprintf(file,"\n  '(allow %s %c)",Upgrades[j].Ident,
                        UpgradeModifiers[i]->ChangeUpgrades[j]);
            }
        }
 
        for( j=0; j<UnitTypeMax; ++j ) {        // apply to units
            if( UpgradeModifiers[i]->ApplyTo[j]!='?' ) {
-               fprintf(file,"\n  '(apply-to %s)",UnitTypes[j]->Ident);
+               CLprintf(file,"\n  '(apply-to %s)",UnitTypes[j]->Ident);
            }
        }
 
        if( UpgradeModifiers[i]->ConvertTo ) {
-           fprintf(file,"\n  '(convert-to %s)",
+           CLprintf(file,"\n  '(convert-to %s)",
                    ((UnitType*)UpgradeModifiers[i]->ConvertTo)->Ident);
        }
 
-       fprintf(file,")\n\n");
+       CLprintf(file,")\n\n");
     }
 
     //
     // Save the allow
     //
     for( i=0; i<NumUnitTypes; ++i ) {
-       fprintf(file,"(define-allow '%s\t",UnitTypes[i]->Ident);
+       CLprintf(file,"(define-allow '%s\t",UnitTypes[i]->Ident);
        if( strlen(UnitTypes[i]->Ident)<9 ) {
-           fprintf(file,"\t\t\t\"");
+           CLprintf(file,"\t\t\t\"");
        } else if( strlen(UnitTypes[i]->Ident)<17 ) {
-           fprintf(file,"\t\t\"");
+           CLprintf(file,"\t\t\"");
        } else if( strlen(UnitTypes[i]->Ident)<25 ) {
-           fprintf(file,"\t\"");
+           CLprintf(file,"\t\"");
        } else {
-           fprintf(file,"\"");
+           CLprintf(file,"\"");
        }
        for( p=0; p<PlayerMax; ++p ) {
-           fprintf(file,"%c",Players[p].Allow.Units[i]);
+           CLprintf(file,"%c",Players[p].Allow.Units[i]);
        }
-       fprintf(file,"\")\n");
+       CLprintf(file,"\")\n");
     }
-    fprintf(file,"\n");
+    CLprintf(file,"\n");
 
     //
     // Save the upgrades
     //
     for( i=0; i<NumUpgrades; ++i ) {
-       fprintf(file,"(define-allow '%s\t",Upgrades[i].Ident);
+       CLprintf(file,"(define-allow '%s\t",Upgrades[i].Ident);
        if( strlen(Upgrades[i].Ident)<9 ) {
-           fprintf(file,"\t\t\t\"");
+           CLprintf(file,"\t\t\t\"");
        } else if( strlen(Upgrades[i].Ident)<17 ) {
-           fprintf(file,"\t\t\"");
+           CLprintf(file,"\t\t\"");
        } else if( strlen(Upgrades[i].Ident)<25 ) {
-           fprintf(file,"\t\"");
+           CLprintf(file,"\t\"");
        } else {
-           fprintf(file,"\"");
+           CLprintf(file,"\"");
        }
        for( p=0; p<PlayerMax; ++p ) {
-           fprintf(file,"%c",Players[p].Allow.Upgrades[i]);
+           CLprintf(file,"%c",Players[p].Allow.Upgrades[i]);
        }
-       fprintf(file,"\"");
-       fprintf(file,")\n");
+       CLprintf(file,"\"");
+       CLprintf(file,")\n");
     }
 }
 
Index: stratagus/src/video/cursor.c
diff -u stratagus/src/video/cursor.c:1.63 stratagus/src/video/cursor.c:1.64
--- stratagus/src/video/cursor.c:1.63   Wed Aug 13 10:55:45 2003
+++ stratagus/src/video/cursor.c        Sun Aug 17 11:57:08 2003
@@ -26,7 +26,7 @@
 //      Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
 //      02111-1307, USA.
 //
-//     $Id: cursor.c,v 1.63 2003/08/13 14:55:45 martinxyz Exp $
+//     $Id: cursor.c,v 1.64 2003/08/17 15:57:08 n0body Exp $
 
 //@{
 
@@ -1110,47 +1110,47 @@
 /**
 **     Save cursor state.
 */
-global void SaveCursors(FILE* file)
+global void SaveCursors(CLFile* file)
 {
     int i;
 
-    fprintf(file,"\n;;; -----------------------------------------\n");
-    fprintf(file,";;; MODULE: cursors $Id: cursor.c,v 1.63 2003/08/13 14:55:45 
martinxyz Exp $\n\n");
+    CLprintf(file,"\n;;; -----------------------------------------\n");
+    CLprintf(file,";;; MODULE: cursors $Id: cursor.c,v 1.64 2003/08/17 
15:57:08 n0body Exp $\n\n");
 
     for( i=0; Cursors[i].OType; ++i ) {
-       fprintf(file,"(define-cursor '%s '%s\n",
+       CLprintf(file,"(define-cursor '%s '%s\n",
                Cursors[i].Ident, Cursors[i].Race ? Cursors[i].Race : "any");
-       fprintf(file,"  'image \"%s\"\n",Cursors[i].File);
-       fprintf(file,"  'hot-spot '(%d %d) ",Cursors[i].HotX,Cursors[i].HotY);
-       fprintf(file,"'size '(%d %d) ",Cursors[i].Width,Cursors[i].Height);
-       fprintf(file,")\n\n");
+       CLprintf(file,"  'image \"%s\"\n",Cursors[i].File);
+       CLprintf(file,"  'hot-spot '(%d %d) ",Cursors[i].HotX,Cursors[i].HotY);
+       CLprintf(file,"'size '(%d %d) ",Cursors[i].Width,Cursors[i].Height);
+       CLprintf(file,")\n\n");
     }
 
     // Not ready:
-    fprintf(file,";;(set-game-cursor! '%s)\n",GameCursor->Ident);
+    CLprintf(file,";;(set-game-cursor! '%s)\n",GameCursor->Ident);
     // FIXME: what about the other variables???
     switch( CursorState ) {
        case CursorStatePoint:
-           fprintf(file,";;(cursor-state 'point)\n");
+           CLprintf(file,";;(cursor-state 'point)\n");
            break;
        case CursorStateSelect:
-           fprintf(file,";;(cursor-state 'select)\n");
+           CLprintf(file,";;(cursor-state 'select)\n");
            break;
        case CursorStateRectangle:
-           fprintf(file,";;(cursor-state 'rectangle)\n");
+           CLprintf(file,";;(cursor-state 'rectangle)\n");
            break;
     }
-    fprintf(file,";;(cursor-action %d)\n",CursorAction);
+    CLprintf(file,";;(cursor-action %d)\n",CursorAction);
 #ifndef NEW_UI
-    fprintf(file,";;(cursor-value %d)\n",CursorValue);
+    CLprintf(file,";;(cursor-value %d)\n",CursorValue);
 #else
-    fprintf(file,";;(cursor-spell %d)\n",CursorSpell);
+    CLprintf(file,";;(cursor-spell %d)\n",CursorSpell);
 #endif
-    fprintf(file,";;(cursor-building '%s)\n",
+    CLprintf(file,";;(cursor-building '%s)\n",
            CursorBuilding ? CursorBuilding->Ident : "()");
-    fprintf(file,";;(cursor-position '(%d %d)\n",CursorX,CursorY);
-    fprintf(file,";;(cursor-start '(%d %d)\n",CursorStartX,CursorStartY);
-    fprintf(file,";;(unit-under-cursor %s\n",
+    CLprintf(file,";;(cursor-position '(%d %d)\n",CursorX,CursorY);
+    CLprintf(file,";;(cursor-start '(%d %d)\n",CursorStartX,CursorStartY);
+    CLprintf(file,";;(unit-under-cursor %s\n",
            UnitUnderCursor ? UnitReference(UnitUnderCursor) : "()");
 }
 
Index: stratagus/src/video/png.c
diff -u stratagus/src/video/png.c:1.22 stratagus/src/video/png.c:1.23
--- stratagus/src/video/png.c:1.22      Fri Jul 11 10:35:34 2003
+++ stratagus/src/video/png.c   Sun Aug 17 11:57:08 2003
@@ -26,7 +26,7 @@
 //      Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
 //      02111-1307, USA.
 //
-//     $Id: png.c,v 1.22 2003/07/11 14:35:34 n0body Exp $
+//     $Id: png.c,v 1.23 2003/08/17 15:57:08 n0body Exp $
 
 //@{
 
@@ -93,7 +93,7 @@
     //
     // open + prepare
     //
-    if( !(fp=CLopen(name)) ) {
+    if( !(fp=CLopen(name,CL_OPEN_READ)) ) {
        perror("Can't open file");
        return NULL;
     }
Index: stratagus/src/video/video.c
diff -u stratagus/src/video/video.c:1.62 stratagus/src/video/video.c:1.63
--- stratagus/src/video/video.c:1.62    Fri Jul 11 10:35:34 2003
+++ stratagus/src/video/video.c Sun Aug 17 11:57:08 2003
@@ -26,7 +26,7 @@
 //      Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
 //      02111-1307, USA.
 //
-//     $Id: video.c,v 1.62 2003/07/11 14:35:34 n0body Exp $
+//     $Id: video.c,v 1.63 2003/08/17 15:57:08 n0body Exp $
 
 //@{
 
@@ -557,7 +557,7 @@
     unsigned char *p;
     unsigned char buffer[256*3];
 
-    if( !(fp=CLopen(name)) || CLread(fp,buffer,256*3)!=256*3 ) {
+    if( !(fp=CLopen(name,CL_OPEN_READ)) || CLread(fp,buffer,256*3)!=256*3 ) {
        fprintf(stderr,"Can't load palette %s\n",name);
        ExitFatal(-1);
     }




reply via email to

[Prev in Thread] Current Thread [Next in Thread]