Changes On Branch tcl-argv-handling-v2
Not logged in

Many hyperlinks are disabled.
Use anonymous login to enable hyperlinks.

Changes In Branch tcl-argv-handling-v2 Excluding Merge-Ins

This is equivalent to a diff from 3709b1eaa2 to a7392129c0

2012-08-22
11:51
Merge the TCL argument handling patches into trunk. check-in: b6a7e52c93 user: drh tags: trunk
11:42
Always call Tcl_FindExecutable, even when the command line arguments are invalid. Closed-Leaf check-in: a7392129c0 user: mistachkin tags: tcl-argv-handling-v2
11:33
When there are no command line arguments, set the argv script variable to an empty list. check-in: b04d5ab4af user: mistachkin tags: tcl-argv-handling-v2
11:15
Modify the Tcl argument handling to deal with object reference counts and errors. check-in: 46864ac9cc user: mistachkin tags: tcl-argv-handling-v2
07:45
Pass argv arguments to Tcl Closed-Leaf check-in: 3709b1eaa2 user: jan.nijtmans tags: tcl-argv-handling
2012-08-21
23:45
Restore the previous Tcl argc/argv handling as all the arguments will be used for the Tcl argv script variable. check-in: c9bb320065 user: mistachkin tags: trunk

Changes to src/th_tcl.c.

   366    366     Th_Interp *th1Interp = (Th_Interp *)clientData;
   367    367     if( !th1Interp ) return;
   368    368     /* Remove the Tcl integration commands. */
   369    369     for(i=0; i<(sizeof(aCommand)/sizeof(aCommand[0])); i++){
   370    370       Th_RenameCommand(th1Interp, aCommand[i].zName, -1, NULL, 0);
   371    371     }
   372    372   }
          373  +
          374  +/*
          375  +** Sets the "argv0", "argc", and "argv" script variables in the Tcl interpreter
          376  +** based on the supplied command line arguments.
          377  + */
          378  +static int setTclArguments(
          379  +  Tcl_Interp *pInterp,
          380  +  int argc,
          381  +  char **argv
          382  +){
          383  +  Tcl_Obj *objPtr;
          384  +  Tcl_Obj *resultObjPtr;
          385  +  Tcl_Obj *listPtr;
          386  +  int rc = TCL_OK;
          387  +  if( argc<=0 || !argv ){
          388  +    return TCL_OK;
          389  +  }
          390  +  objPtr = Tcl_NewStringObj(argv[0], -1);
          391  +  Tcl_IncrRefCount(objPtr);
          392  +  resultObjPtr = Tcl_SetVar2Ex(pInterp, "argv0", NULL, objPtr,
          393  +      TCL_GLOBAL_ONLY|TCL_LEAVE_ERR_MSG);
          394  +  Tcl_DecrRefCount(objPtr);
          395  +  if( !resultObjPtr ){
          396  +    return TCL_ERROR;
          397  +  }
          398  +  objPtr = Tcl_NewIntObj(argc - 1);
          399  +  Tcl_IncrRefCount(objPtr);
          400  +  resultObjPtr = Tcl_SetVar2Ex(pInterp, "argc", NULL, objPtr,
          401  +      TCL_GLOBAL_ONLY|TCL_LEAVE_ERR_MSG);
          402  +  Tcl_DecrRefCount(objPtr);
          403  +  if( !resultObjPtr ){
          404  +    return TCL_ERROR;
          405  +  }
          406  +  listPtr = Tcl_NewListObj(0, NULL);
          407  +  Tcl_IncrRefCount(listPtr);
          408  +  if( argc>1 ){
          409  +    while( --argc ){
          410  +      objPtr = Tcl_NewStringObj(*++argv, -1);
          411  +      Tcl_IncrRefCount(objPtr);
          412  +      rc = Tcl_ListObjAppendElement(pInterp, listPtr, objPtr);
          413  +      Tcl_DecrRefCount(objPtr);
          414  +      if( rc!=TCL_OK ){
          415  +        break;
          416  +      }
          417  +    }
          418  +  }
          419  +  if( rc==TCL_OK ){
          420  +    resultObjPtr = Tcl_SetVar2Ex(pInterp, "argv", NULL, listPtr,
          421  +        TCL_GLOBAL_ONLY|TCL_LEAVE_ERR_MSG);
          422  +    if( !resultObjPtr ){
          423  +      rc = TCL_ERROR;
          424  +    }
          425  +  }
          426  +  Tcl_DecrRefCount(listPtr);
          427  +  return rc;
          428  +}
   373    429   
   374    430   /*
   375    431   ** Creates and initializes a Tcl interpreter for use with the specified TH1
   376    432   ** interpreter.  Stores the created Tcl interpreter in the Tcl context supplied
   377    433   ** by the caller.
   378    434    */
   379    435   static int createTclInterp(
   380    436     Th_Interp *interp,
   381    437     void *pContext
   382    438   ){
   383    439     struct TclContext *tclContext = (struct TclContext *)pContext;
          440  +  int argc;
          441  +  char **argv;
          442  +  char *argv0 = 0;
   384    443     Tcl_Interp *tclInterp;
   385    444   
   386    445     if ( !tclContext ){
   387    446       Th_ErrorMessage(interp,
   388    447           "Invalid Tcl context", (const char *)"", 0);
   389    448       return TH_ERROR;
   390    449     }
   391    450     if ( tclContext->interp ){
   392    451       return TH_OK;
   393    452     }
   394         -  Tcl_FindExecutable(tclContext->argv[0]);
          453  +  argc = tclContext->argc;
          454  +  argv = tclContext->argv;
          455  +  if( argc>0 && argv ){
          456  +    argv0 = argv[0];
          457  +  }
          458  +  Tcl_FindExecutable(argv0);
   395    459     tclInterp = tclContext->interp = Tcl_CreateInterp();
   396    460     if( !tclInterp || Tcl_InterpDeleted(tclInterp) ){
   397    461       Th_ErrorMessage(interp,
   398    462           "Could not create Tcl interpreter", (const char *)"", 0);
   399    463       return TH_ERROR;
   400    464     }
   401    465     if( Tcl_Init(tclInterp)!=TCL_OK ){
   402    466       Th_ErrorMessage(interp,
   403    467           "Tcl initialization error:", Tcl_GetStringResult(tclInterp), -1);
   404    468       Tcl_DeleteInterp(tclInterp);
   405    469       tclContext->interp = tclInterp = 0;
   406    470       return TH_ERROR;
   407    471     }
   408         -  if (tclContext->argc > 0) {
   409         -	int argc = tclContext->argc - 1;
   410         -	char **argv = tclContext->argv + 1;
   411         -    Tcl_Obj *argvPtr = Tcl_NewListObj(0, NULL);
   412         -    while (argc--) {
   413         -      Tcl_ListObjAppendElement(NULL, argvPtr, Tcl_NewStringObj(*argv++, -1));
   414         -    }
   415         -    Tcl_SetVar2Ex(tclContext->interp, "argv", NULL, argvPtr, TCL_GLOBAL_ONLY);
          472  +  if( setTclArguments(tclInterp, argc, argv)!=TCL_OK ){
          473  +    Th_ErrorMessage(interp,
          474  +        "Tcl error setting arguments:", Tcl_GetStringResult(tclInterp), -1);
          475  +    Tcl_DeleteInterp(tclInterp);
          476  +    tclContext->interp = tclInterp = 0;
          477  +    return TH_ERROR;
   416    478     }
   417         -
   418    479     /* Add the TH1 integration commands to Tcl. */
   419    480     Tcl_CallWhenDeleted(tclInterp, Th1DeleteProc, interp);
   420    481     Tcl_CreateObjCommand(tclInterp, "th1Eval", Th1EvalObjCmd, interp, NULL);
   421    482     Tcl_CreateObjCommand(tclInterp, "th1Expr", Th1ExprObjCmd, interp, NULL);
   422    483     return TH_OK;
   423    484   }
   424    485   

Changes to test/th1-tcl.test.

    96     96   fossil test-th-render [file nativename [file join $dir th1-tcl8.txt]]
    97     97   
    98     98   test th1-tcl-8 {$RESULT eq {<hr><p class="thmainError">ERROR:\
    99     99   Cannot invoke Tcl command: tailcall</p>} || $RESULT eq {<hr><p\
   100    100   class="thmainError">ERROR: tailcall can only be called from a proc or\
   101    101   lambda</p>}}
   102    102   
          103  +###############################################################################
          104  +
          105  +fossil test-th-render [file nativename [file join $dir th1-tcl9.txt]]
          106  +
          107  +test th1-tcl-9 {[string trim $RESULT] eq [list [file tail $fossilexe] 2 \
          108  +[list test-th-render [file nativename [file join $dir th1-tcl9.txt]]]]}

Added test/th1-tcl9.txt.

            1  +<th1>
            2  +  #
            3  +  # This is a "TH1 fragment" used to test the Tcl integration features of TH1.
            4  +  # The corresponding test file executes this file using the test-th-render
            5  +  # Fossil command.
            6  +  #
            7  +  set channel stdout; tclInvoke set channel $channel
            8  +  tclEval {puts $channel [list [file tail $argv0] $argc $argv]}
            9  +</th1>

Changes to win/Makefile.mingw.mistachkin.

   263    263     $(SRCDIR)/url.c \
   264    264     $(SRCDIR)/user.c \
   265    265     $(SRCDIR)/verify.c \
   266    266     $(SRCDIR)/vfile.c \
   267    267     $(SRCDIR)/wiki.c \
   268    268     $(SRCDIR)/wikiformat.c \
   269    269     $(SRCDIR)/winhttp.c \
          270  +  $(SRCDIR)/wysiwyg.c \
   270    271     $(SRCDIR)/xfer.c \
   271    272     $(SRCDIR)/xfersetup.c \
   272    273     $(SRCDIR)/zip.c
   273    274   
   274    275   TRANS_SRC = \
   275    276     $(OBJDIR)/add_.c \
   276    277     $(OBJDIR)/allrepo_.c \
................................................................................
   362    363     $(OBJDIR)/url_.c \
   363    364     $(OBJDIR)/user_.c \
   364    365     $(OBJDIR)/verify_.c \
   365    366     $(OBJDIR)/vfile_.c \
   366    367     $(OBJDIR)/wiki_.c \
   367    368     $(OBJDIR)/wikiformat_.c \
   368    369     $(OBJDIR)/winhttp_.c \
          370  +  $(OBJDIR)/wysiwyg_.c \
   369    371     $(OBJDIR)/xfer_.c \
   370    372     $(OBJDIR)/xfersetup_.c \
   371    373     $(OBJDIR)/zip_.c
   372    374   
   373    375   OBJ = \
   374    376    $(OBJDIR)/add.o \
   375    377    $(OBJDIR)/allrepo.o \
................................................................................
   461    463    $(OBJDIR)/url.o \
   462    464    $(OBJDIR)/user.o \
   463    465    $(OBJDIR)/verify.o \
   464    466    $(OBJDIR)/vfile.o \
   465    467    $(OBJDIR)/wiki.o \
   466    468    $(OBJDIR)/wikiformat.o \
   467    469    $(OBJDIR)/winhttp.o \
          470  + $(OBJDIR)/wysiwyg.o \
   468    471    $(OBJDIR)/xfer.o \
   469    472    $(OBJDIR)/xfersetup.o \
   470    473    $(OBJDIR)/zip.o
   471    474   
   472    475   APPNAME = fossil.exe
   473    476   TRANSLATE   = $(OBJDIR)/translate.exe
   474    477   MAKEHEADERS = $(OBJDIR)/makeheaders.exe
................................................................................
   479    482   all:	$(OBJDIR) $(APPNAME)
   480    483   
   481    484   $(OBJDIR)/icon.o:	$(SRCDIR)/../win/icon.rc
   482    485   	cp $(SRCDIR)/../win/icon.rc $(OBJDIR)
   483    486   	windres $(OBJDIR)/icon.rc -o $(OBJDIR)/icon.o
   484    487   
   485    488   install:	$(APPNAME)
          489  +	mkdir -p $(INSTALLDIR)
   486    490   	mv $(APPNAME) $(INSTALLDIR)
   487    491   
   488    492   $(OBJDIR):
   489    493   	mkdir $(OBJDIR)
   490    494   
   491    495   $(OBJDIR)/translate:	$(SRCDIR)/translate.c
   492    496   	$(BCC) -o $(OBJDIR)/translate $(SRCDIR)/translate.c
................................................................................
   534    538   setup: $(OBJDIR) $(APPNAME)
   535    539   	$(MAKENSIS) ./fossil.nsi
   536    540   
   537    541   
   538    542   $(OBJDIR)/page_index.h: $(TRANS_SRC) $(OBJDIR)/mkindex
   539    543   	$(MKINDEX) $(TRANS_SRC) >$@
   540    544   $(OBJDIR)/headers:	$(OBJDIR)/page_index.h $(OBJDIR)/makeheaders $(OBJDIR)/VERSION.h
   541         -	$(MAKEHEADERS)  $(OBJDIR)/add_.c:$(OBJDIR)/add.h $(OBJDIR)/allrepo_.c:$(OBJDIR)/allrepo.h $(OBJDIR)/attach_.c:$(OBJDIR)/attach.h $(OBJDIR)/bag_.c:$(OBJDIR)/bag.h $(OBJDIR)/bisect_.c:$(OBJDIR)/bisect.h $(OBJDIR)/blob_.c:$(OBJDIR)/blob.h $(OBJDIR)/branch_.c:$(OBJDIR)/branch.h $(OBJDIR)/browse_.c:$(OBJDIR)/browse.h $(OBJDIR)/captcha_.c:$(OBJDIR)/captcha.h $(OBJDIR)/cgi_.c:$(OBJDIR)/cgi.h $(OBJDIR)/checkin_.c:$(OBJDIR)/checkin.h $(OBJDIR)/checkout_.c:$(OBJDIR)/checkout.h $(OBJDIR)/clearsign_.c:$(OBJDIR)/clearsign.h $(OBJDIR)/clone_.c:$(OBJDIR)/clone.h $(OBJDIR)/comformat_.c:$(OBJDIR)/comformat.h $(OBJDIR)/configure_.c:$(OBJDIR)/configure.h $(OBJDIR)/content_.c:$(OBJDIR)/content.h $(OBJDIR)/db_.c:$(OBJDIR)/db.h $(OBJDIR)/delta_.c:$(OBJDIR)/delta.h $(OBJDIR)/deltacmd_.c:$(OBJDIR)/deltacmd.h $(OBJDIR)/descendants_.c:$(OBJDIR)/descendants.h $(OBJDIR)/diff_.c:$(OBJDIR)/diff.h $(OBJDIR)/diffcmd_.c:$(OBJDIR)/diffcmd.h $(OBJDIR)/doc_.c:$(OBJDIR)/doc.h $(OBJDIR)/encode_.c:$(OBJDIR)/encode.h $(OBJDIR)/event_.c:$(OBJDIR)/event.h $(OBJDIR)/export_.c:$(OBJDIR)/export.h $(OBJDIR)/file_.c:$(OBJDIR)/file.h $(OBJDIR)/finfo_.c:$(OBJDIR)/finfo.h $(OBJDIR)/glob_.c:$(OBJDIR)/glob.h $(OBJDIR)/graph_.c:$(OBJDIR)/graph.h $(OBJDIR)/gzip_.c:$(OBJDIR)/gzip.h $(OBJDIR)/http_.c:$(OBJDIR)/http.h $(OBJDIR)/http_socket_.c:$(OBJDIR)/http_socket.h $(OBJDIR)/http_ssl_.c:$(OBJDIR)/http_ssl.h $(OBJDIR)/http_transport_.c:$(OBJDIR)/http_transport.h $(OBJDIR)/import_.c:$(OBJDIR)/import.h $(OBJDIR)/info_.c:$(OBJDIR)/info.h $(OBJDIR)/json_.c:$(OBJDIR)/json.h $(OBJDIR)/json_artifact_.c:$(OBJDIR)/json_artifact.h $(OBJDIR)/json_branch_.c:$(OBJDIR)/json_branch.h $(OBJDIR)/json_config_.c:$(OBJDIR)/json_config.h $(OBJDIR)/json_diff_.c:$(OBJDIR)/json_diff.h $(OBJDIR)/json_dir_.c:$(OBJDIR)/json_dir.h $(OBJDIR)/json_finfo_.c:$(OBJDIR)/json_finfo.h $(OBJDIR)/json_login_.c:$(OBJDIR)/json_login.h $(OBJDIR)/json_query_.c:$(OBJDIR)/json_query.h $(OBJDIR)/json_report_.c:$(OBJDIR)/json_report.h $(OBJDIR)/json_tag_.c:$(OBJDIR)/json_tag.h $(OBJDIR)/json_timeline_.c:$(OBJDIR)/json_timeline.h $(OBJDIR)/json_user_.c:$(OBJDIR)/json_user.h $(OBJDIR)/json_wiki_.c:$(OBJDIR)/json_wiki.h $(OBJDIR)/leaf_.c:$(OBJDIR)/leaf.h $(OBJDIR)/login_.c:$(OBJDIR)/login.h $(OBJDIR)/main_.c:$(OBJDIR)/main.h $(OBJDIR)/manifest_.c:$(OBJDIR)/manifest.h $(OBJDIR)/md5_.c:$(OBJDIR)/md5.h $(OBJDIR)/merge_.c:$(OBJDIR)/merge.h $(OBJDIR)/merge3_.c:$(OBJDIR)/merge3.h $(OBJDIR)/name_.c:$(OBJDIR)/name.h $(OBJDIR)/path_.c:$(OBJDIR)/path.h $(OBJDIR)/pivot_.c:$(OBJDIR)/pivot.h $(OBJDIR)/popen_.c:$(OBJDIR)/popen.h $(OBJDIR)/pqueue_.c:$(OBJDIR)/pqueue.h $(OBJDIR)/printf_.c:$(OBJDIR)/printf.h $(OBJDIR)/rebuild_.c:$(OBJDIR)/rebuild.h $(OBJDIR)/report_.c:$(OBJDIR)/report.h $(OBJDIR)/rss_.c:$(OBJDIR)/rss.h $(OBJDIR)/schema_.c:$(OBJDIR)/schema.h $(OBJDIR)/search_.c:$(OBJDIR)/search.h $(OBJDIR)/setup_.c:$(OBJDIR)/setup.h $(OBJDIR)/sha1_.c:$(OBJDIR)/sha1.h $(OBJDIR)/shun_.c:$(OBJDIR)/shun.h $(OBJDIR)/skins_.c:$(OBJDIR)/skins.h $(OBJDIR)/sqlcmd_.c:$(OBJDIR)/sqlcmd.h $(OBJDIR)/stash_.c:$(OBJDIR)/stash.h $(OBJDIR)/stat_.c:$(OBJDIR)/stat.h $(OBJDIR)/style_.c:$(OBJDIR)/style.h $(OBJDIR)/sync_.c:$(OBJDIR)/sync.h $(OBJDIR)/tag_.c:$(OBJDIR)/tag.h $(OBJDIR)/tar_.c:$(OBJDIR)/tar.h $(OBJDIR)/th_main_.c:$(OBJDIR)/th_main.h $(OBJDIR)/timeline_.c:$(OBJDIR)/timeline.h $(OBJDIR)/tkt_.c:$(OBJDIR)/tkt.h $(OBJDIR)/tktsetup_.c:$(OBJDIR)/tktsetup.h $(OBJDIR)/undo_.c:$(OBJDIR)/undo.h $(OBJDIR)/update_.c:$(OBJDIR)/update.h $(OBJDIR)/url_.c:$(OBJDIR)/url.h $(OBJDIR)/user_.c:$(OBJDIR)/user.h $(OBJDIR)/verify_.c:$(OBJDIR)/verify.h $(OBJDIR)/vfile_.c:$(OBJDIR)/vfile.h $(OBJDIR)/wiki_.c:$(OBJDIR)/wiki.h $(OBJDIR)/wikiformat_.c:$(OBJDIR)/wikiformat.h $(OBJDIR)/winhttp_.c:$(OBJDIR)/winhttp.h $(OBJDIR)/xfer_.c:$(OBJDIR)/xfer.h $(OBJDIR)/xfersetup_.c:$(OBJDIR)/xfersetup.h $(OBJDIR)/zip_.c:$(OBJDIR)/zip.h $(SRCDIR)/sqlite3.h $(SRCDIR)/th.h $(OBJDIR)/VERSION.h
          545  +	$(MAKEHEADERS)  $(OBJDIR)/add_.c:$(OBJDIR)/add.h $(OBJDIR)/allrepo_.c:$(OBJDIR)/allrepo.h $(OBJDIR)/attach_.c:$(OBJDIR)/attach.h $(OBJDIR)/bag_.c:$(OBJDIR)/bag.h $(OBJDIR)/bisect_.c:$(OBJDIR)/bisect.h $(OBJDIR)/blob_.c:$(OBJDIR)/blob.h $(OBJDIR)/branch_.c:$(OBJDIR)/branch.h $(OBJDIR)/browse_.c:$(OBJDIR)/browse.h $(OBJDIR)/captcha_.c:$(OBJDIR)/captcha.h $(OBJDIR)/cgi_.c:$(OBJDIR)/cgi.h $(OBJDIR)/checkin_.c:$(OBJDIR)/checkin.h $(OBJDIR)/checkout_.c:$(OBJDIR)/checkout.h $(OBJDIR)/clearsign_.c:$(OBJDIR)/clearsign.h $(OBJDIR)/clone_.c:$(OBJDIR)/clone.h $(OBJDIR)/comformat_.c:$(OBJDIR)/comformat.h $(OBJDIR)/configure_.c:$(OBJDIR)/configure.h $(OBJDIR)/content_.c:$(OBJDIR)/content.h $(OBJDIR)/db_.c:$(OBJDIR)/db.h $(OBJDIR)/delta_.c:$(OBJDIR)/delta.h $(OBJDIR)/deltacmd_.c:$(OBJDIR)/deltacmd.h $(OBJDIR)/descendants_.c:$(OBJDIR)/descendants.h $(OBJDIR)/diff_.c:$(OBJDIR)/diff.h $(OBJDIR)/diffcmd_.c:$(OBJDIR)/diffcmd.h $(OBJDIR)/doc_.c:$(OBJDIR)/doc.h $(OBJDIR)/encode_.c:$(OBJDIR)/encode.h $(OBJDIR)/event_.c:$(OBJDIR)/event.h $(OBJDIR)/export_.c:$(OBJDIR)/export.h $(OBJDIR)/file_.c:$(OBJDIR)/file.h $(OBJDIR)/finfo_.c:$(OBJDIR)/finfo.h $(OBJDIR)/glob_.c:$(OBJDIR)/glob.h $(OBJDIR)/graph_.c:$(OBJDIR)/graph.h $(OBJDIR)/gzip_.c:$(OBJDIR)/gzip.h $(OBJDIR)/http_.c:$(OBJDIR)/http.h $(OBJDIR)/http_socket_.c:$(OBJDIR)/http_socket.h $(OBJDIR)/http_ssl_.c:$(OBJDIR)/http_ssl.h $(OBJDIR)/http_transport_.c:$(OBJDIR)/http_transport.h $(OBJDIR)/import_.c:$(OBJDIR)/import.h $(OBJDIR)/info_.c:$(OBJDIR)/info.h $(OBJDIR)/json_.c:$(OBJDIR)/json.h $(OBJDIR)/json_artifact_.c:$(OBJDIR)/json_artifact.h $(OBJDIR)/json_branch_.c:$(OBJDIR)/json_branch.h $(OBJDIR)/json_config_.c:$(OBJDIR)/json_config.h $(OBJDIR)/json_diff_.c:$(OBJDIR)/json_diff.h $(OBJDIR)/json_dir_.c:$(OBJDIR)/json_dir.h $(OBJDIR)/json_finfo_.c:$(OBJDIR)/json_finfo.h $(OBJDIR)/json_login_.c:$(OBJDIR)/json_login.h $(OBJDIR)/json_query_.c:$(OBJDIR)/json_query.h $(OBJDIR)/json_report_.c:$(OBJDIR)/json_report.h $(OBJDIR)/json_tag_.c:$(OBJDIR)/json_tag.h $(OBJDIR)/json_timeline_.c:$(OBJDIR)/json_timeline.h $(OBJDIR)/json_user_.c:$(OBJDIR)/json_user.h $(OBJDIR)/json_wiki_.c:$(OBJDIR)/json_wiki.h $(OBJDIR)/leaf_.c:$(OBJDIR)/leaf.h $(OBJDIR)/login_.c:$(OBJDIR)/login.h $(OBJDIR)/main_.c:$(OBJDIR)/main.h $(OBJDIR)/manifest_.c:$(OBJDIR)/manifest.h $(OBJDIR)/md5_.c:$(OBJDIR)/md5.h $(OBJDIR)/merge_.c:$(OBJDIR)/merge.h $(OBJDIR)/merge3_.c:$(OBJDIR)/merge3.h $(OBJDIR)/name_.c:$(OBJDIR)/name.h $(OBJDIR)/path_.c:$(OBJDIR)/path.h $(OBJDIR)/pivot_.c:$(OBJDIR)/pivot.h $(OBJDIR)/popen_.c:$(OBJDIR)/popen.h $(OBJDIR)/pqueue_.c:$(OBJDIR)/pqueue.h $(OBJDIR)/printf_.c:$(OBJDIR)/printf.h $(OBJDIR)/rebuild_.c:$(OBJDIR)/rebuild.h $(OBJDIR)/report_.c:$(OBJDIR)/report.h $(OBJDIR)/rss_.c:$(OBJDIR)/rss.h $(OBJDIR)/schema_.c:$(OBJDIR)/schema.h $(OBJDIR)/search_.c:$(OBJDIR)/search.h $(OBJDIR)/setup_.c:$(OBJDIR)/setup.h $(OBJDIR)/sha1_.c:$(OBJDIR)/sha1.h $(OBJDIR)/shun_.c:$(OBJDIR)/shun.h $(OBJDIR)/skins_.c:$(OBJDIR)/skins.h $(OBJDIR)/sqlcmd_.c:$(OBJDIR)/sqlcmd.h $(OBJDIR)/stash_.c:$(OBJDIR)/stash.h $(OBJDIR)/stat_.c:$(OBJDIR)/stat.h $(OBJDIR)/style_.c:$(OBJDIR)/style.h $(OBJDIR)/sync_.c:$(OBJDIR)/sync.h $(OBJDIR)/tag_.c:$(OBJDIR)/tag.h $(OBJDIR)/tar_.c:$(OBJDIR)/tar.h $(OBJDIR)/th_main_.c:$(OBJDIR)/th_main.h $(OBJDIR)/timeline_.c:$(OBJDIR)/timeline.h $(OBJDIR)/tkt_.c:$(OBJDIR)/tkt.h $(OBJDIR)/tktsetup_.c:$(OBJDIR)/tktsetup.h $(OBJDIR)/undo_.c:$(OBJDIR)/undo.h $(OBJDIR)/update_.c:$(OBJDIR)/update.h $(OBJDIR)/url_.c:$(OBJDIR)/url.h $(OBJDIR)/user_.c:$(OBJDIR)/user.h $(OBJDIR)/verify_.c:$(OBJDIR)/verify.h $(OBJDIR)/vfile_.c:$(OBJDIR)/vfile.h $(OBJDIR)/wiki_.c:$(OBJDIR)/wiki.h $(OBJDIR)/wikiformat_.c:$(OBJDIR)/wikiformat.h $(OBJDIR)/winhttp_.c:$(OBJDIR)/winhttp.h $(OBJDIR)/wysiwyg_.c:$(OBJDIR)/wysiwyg.h $(OBJDIR)/xfer_.c:$(OBJDIR)/xfer.h $(OBJDIR)/xfersetup_.c:$(OBJDIR)/xfersetup.h $(OBJDIR)/zip_.c:$(OBJDIR)/zip.h $(SRCDIR)/sqlite3.h $(SRCDIR)/th.h $(OBJDIR)/VERSION.h
   542    546   	echo Done >$(OBJDIR)/headers
   543    547   
   544    548   $(OBJDIR)/headers: Makefile
   545    549   Makefile:
   546    550   $(OBJDIR)/add_.c:	$(SRCDIR)/add.c $(OBJDIR)/translate
   547    551   	$(TRANSLATE) $(SRCDIR)/add.c >$(OBJDIR)/add_.c
   548    552   
................................................................................
  1197   1201   $(OBJDIR)/winhttp_.c:	$(SRCDIR)/winhttp.c $(OBJDIR)/translate
  1198   1202   	$(TRANSLATE) $(SRCDIR)/winhttp.c >$(OBJDIR)/winhttp_.c
  1199   1203   
  1200   1204   $(OBJDIR)/winhttp.o:	$(OBJDIR)/winhttp_.c $(OBJDIR)/winhttp.h  $(SRCDIR)/config.h
  1201   1205   	$(XTCC) -o $(OBJDIR)/winhttp.o -c $(OBJDIR)/winhttp_.c
  1202   1206   
  1203   1207   winhttp.h:	$(OBJDIR)/headers
         1208  +$(OBJDIR)/wysiwyg_.c:	$(SRCDIR)/wysiwyg.c $(OBJDIR)/translate
         1209  +	$(TRANSLATE) $(SRCDIR)/wysiwyg.c >$(OBJDIR)/wysiwyg_.c
         1210  +
         1211  +$(OBJDIR)/wysiwyg.o:	$(OBJDIR)/wysiwyg_.c $(OBJDIR)/wysiwyg.h  $(SRCDIR)/config.h
         1212  +	$(XTCC) -o $(OBJDIR)/wysiwyg.o -c $(OBJDIR)/wysiwyg_.c
         1213  +
         1214  +wysiwyg.h:	$(OBJDIR)/headers
  1204   1215   $(OBJDIR)/xfer_.c:	$(SRCDIR)/xfer.c $(OBJDIR)/translate
  1205   1216   	$(TRANSLATE) $(SRCDIR)/xfer.c >$(OBJDIR)/xfer_.c
  1206   1217   
  1207   1218   $(OBJDIR)/xfer.o:	$(OBJDIR)/xfer_.c $(OBJDIR)/xfer.h  $(SRCDIR)/config.h
  1208   1219   	$(XTCC) -o $(OBJDIR)/xfer.o -c $(OBJDIR)/xfer_.c
  1209   1220   
  1210   1221   xfer.h:	$(OBJDIR)/headers