Fossil SCM

Merge the TCL argument handling patches into trunk.

drh 2012-08-22 11:51 trunk merge
Commit b6a7e52c938fc223d7d97bed2402a9096addb640
+12 -15
--- src/main.c
+++ src/main.c
@@ -411,16 +411,10 @@
411411
const char *zCmdName = "unknown";
412412
int idx;
413413
int rc;
414414
int i;
415415
416
-#ifdef FOSSIL_ENABLE_TCL
417
- g.tcl.argc = argc;
418
- g.tcl.argv = argv;
419
- g.tcl.interp = 0;
420
-#endif
421
-
422416
sqlite3_config(SQLITE_CONFIG_LOG, fossil_sqlite_log, 0);
423417
memset(&g, 0, sizeof(g));
424418
g.now = time(0);
425419
g.argc = argc;
426420
g.argv = argv;
@@ -436,22 +430,25 @@
436430
g.json.outOpt = cson_output_opt_empty;
437431
g.json.outOpt.addNewline = 1;
438432
g.json.outOpt.indentation = 1 /* in CGI/server mode this can be configured */;
439433
#endif /* FOSSIL_ENABLE_JSON */
440434
expand_args_option();
441
- argc = g.argc;
442
- argv = g.argv;
443
- for(i=0; i<argc; i++) g.argv[i] = fossil_mbcs_to_utf8(argv[i]);
435
+ for(i=0; i<g.argc; i++) g.argv[i] = fossil_mbcs_to_utf8(g.argv[i]);
436
+#ifdef FOSSIL_ENABLE_TCL
437
+ g.tcl.argc = g.argc;
438
+ g.tcl.argv = g.argv;
439
+ g.tcl.interp = 0;
440
+#endif
444441
if( fossil_getenv("GATEWAY_INTERFACE")!=0 && !find_option("nocgi", 0, 0)){
445442
zCmdName = "cgi";
446443
g.isHTTP = 1;
447
- }else if( argc<2 ){
444
+ }else if( g.argc<2 ){
448445
fossil_print(
449446
"Usage: %s COMMAND ...\n"
450447
" or: %s help -- for a list of common commands\n"
451448
" or: %s help COMMMAND -- for help with the named command\n",
452
- argv[0], argv[0], argv[0]);
449
+ g.argv[0], g.argv[0], g.argv[0]);
453450
fossil_exit(1);
454451
}else{
455452
const char *zChdir = find_option("chdir",0,1);
456453
g.isHTTP = 0;
457454
g.fQuiet = find_option("quiet", 0, 0)!=0;
@@ -469,13 +466,13 @@
469466
if( find_option("help",0,0)!=0 ){
470467
/* --help anywhere on the command line is translated into
471468
** "fossil help argv[1] argv[2]..." */
472469
int i;
473470
char **zNewArgv = fossil_malloc( sizeof(char*)*(g.argc+2) );
474
- for(i=1; i<g.argc; i++) zNewArgv[i+1] = argv[i];
471
+ for(i=1; i<g.argc; i++) zNewArgv[i+1] = g.argv[i];
475472
zNewArgv[i+1] = 0;
476
- zNewArgv[0] = argv[0];
473
+ zNewArgv[0] = g.argv[0];
477474
zNewArgv[1] = "help";
478475
g.argc++;
479476
g.argv = zNewArgv;
480477
}
481478
zCmdName = g.argv[1];
@@ -482,11 +479,11 @@
482479
}
483480
rc = name_search(zCmdName, aCommand, count(aCommand), &idx);
484481
if( rc==1 ){
485482
fossil_fatal("%s: unknown command: %s\n"
486483
"%s: use \"help\" for more information\n",
487
- argv[0], zCmdName, argv[0]);
484
+ g.argv[0], zCmdName, g.argv[0]);
488485
}else if( rc==2 ){
489486
int i, n;
490487
Blob couldbe;
491488
blob_zero(&couldbe);
492489
n = strlen(zCmdName);
@@ -496,11 +493,11 @@
496493
}
497494
}
498495
fossil_print("%s: ambiguous command prefix: %s\n"
499496
"%s: could be any of:%s\n"
500497
"%s: use \"help\" for more information\n",
501
- argv[0], zCmdName, argv[0], blob_str(&couldbe), argv[0]);
498
+ g.argv[0], zCmdName, g.argv[0], blob_str(&couldbe), g.argv[0]);
502499
fossil_exit(1);
503500
}
504501
atexit( fossil_atexit );
505502
aCommand[idx].xFunc();
506503
fossil_exit(0);
507504
--- src/main.c
+++ src/main.c
@@ -411,16 +411,10 @@
411 const char *zCmdName = "unknown";
412 int idx;
413 int rc;
414 int i;
415
416 #ifdef FOSSIL_ENABLE_TCL
417 g.tcl.argc = argc;
418 g.tcl.argv = argv;
419 g.tcl.interp = 0;
420 #endif
421
422 sqlite3_config(SQLITE_CONFIG_LOG, fossil_sqlite_log, 0);
423 memset(&g, 0, sizeof(g));
424 g.now = time(0);
425 g.argc = argc;
426 g.argv = argv;
@@ -436,22 +430,25 @@
436 g.json.outOpt = cson_output_opt_empty;
437 g.json.outOpt.addNewline = 1;
438 g.json.outOpt.indentation = 1 /* in CGI/server mode this can be configured */;
439 #endif /* FOSSIL_ENABLE_JSON */
440 expand_args_option();
441 argc = g.argc;
442 argv = g.argv;
443 for(i=0; i<argc; i++) g.argv[i] = fossil_mbcs_to_utf8(argv[i]);
 
 
 
444 if( fossil_getenv("GATEWAY_INTERFACE")!=0 && !find_option("nocgi", 0, 0)){
445 zCmdName = "cgi";
446 g.isHTTP = 1;
447 }else if( argc<2 ){
448 fossil_print(
449 "Usage: %s COMMAND ...\n"
450 " or: %s help -- for a list of common commands\n"
451 " or: %s help COMMMAND -- for help with the named command\n",
452 argv[0], argv[0], argv[0]);
453 fossil_exit(1);
454 }else{
455 const char *zChdir = find_option("chdir",0,1);
456 g.isHTTP = 0;
457 g.fQuiet = find_option("quiet", 0, 0)!=0;
@@ -469,13 +466,13 @@
469 if( find_option("help",0,0)!=0 ){
470 /* --help anywhere on the command line is translated into
471 ** "fossil help argv[1] argv[2]..." */
472 int i;
473 char **zNewArgv = fossil_malloc( sizeof(char*)*(g.argc+2) );
474 for(i=1; i<g.argc; i++) zNewArgv[i+1] = argv[i];
475 zNewArgv[i+1] = 0;
476 zNewArgv[0] = argv[0];
477 zNewArgv[1] = "help";
478 g.argc++;
479 g.argv = zNewArgv;
480 }
481 zCmdName = g.argv[1];
@@ -482,11 +479,11 @@
482 }
483 rc = name_search(zCmdName, aCommand, count(aCommand), &idx);
484 if( rc==1 ){
485 fossil_fatal("%s: unknown command: %s\n"
486 "%s: use \"help\" for more information\n",
487 argv[0], zCmdName, argv[0]);
488 }else if( rc==2 ){
489 int i, n;
490 Blob couldbe;
491 blob_zero(&couldbe);
492 n = strlen(zCmdName);
@@ -496,11 +493,11 @@
496 }
497 }
498 fossil_print("%s: ambiguous command prefix: %s\n"
499 "%s: could be any of:%s\n"
500 "%s: use \"help\" for more information\n",
501 argv[0], zCmdName, argv[0], blob_str(&couldbe), argv[0]);
502 fossil_exit(1);
503 }
504 atexit( fossil_atexit );
505 aCommand[idx].xFunc();
506 fossil_exit(0);
507
--- src/main.c
+++ src/main.c
@@ -411,16 +411,10 @@
411 const char *zCmdName = "unknown";
412 int idx;
413 int rc;
414 int i;
415
 
 
 
 
 
 
416 sqlite3_config(SQLITE_CONFIG_LOG, fossil_sqlite_log, 0);
417 memset(&g, 0, sizeof(g));
418 g.now = time(0);
419 g.argc = argc;
420 g.argv = argv;
@@ -436,22 +430,25 @@
430 g.json.outOpt = cson_output_opt_empty;
431 g.json.outOpt.addNewline = 1;
432 g.json.outOpt.indentation = 1 /* in CGI/server mode this can be configured */;
433 #endif /* FOSSIL_ENABLE_JSON */
434 expand_args_option();
435 for(i=0; i<g.argc; i++) g.argv[i] = fossil_mbcs_to_utf8(g.argv[i]);
436 #ifdef FOSSIL_ENABLE_TCL
437 g.tcl.argc = g.argc;
438 g.tcl.argv = g.argv;
439 g.tcl.interp = 0;
440 #endif
441 if( fossil_getenv("GATEWAY_INTERFACE")!=0 && !find_option("nocgi", 0, 0)){
442 zCmdName = "cgi";
443 g.isHTTP = 1;
444 }else if( g.argc<2 ){
445 fossil_print(
446 "Usage: %s COMMAND ...\n"
447 " or: %s help -- for a list of common commands\n"
448 " or: %s help COMMMAND -- for help with the named command\n",
449 g.argv[0], g.argv[0], g.argv[0]);
450 fossil_exit(1);
451 }else{
452 const char *zChdir = find_option("chdir",0,1);
453 g.isHTTP = 0;
454 g.fQuiet = find_option("quiet", 0, 0)!=0;
@@ -469,13 +466,13 @@
466 if( find_option("help",0,0)!=0 ){
467 /* --help anywhere on the command line is translated into
468 ** "fossil help argv[1] argv[2]..." */
469 int i;
470 char **zNewArgv = fossil_malloc( sizeof(char*)*(g.argc+2) );
471 for(i=1; i<g.argc; i++) zNewArgv[i+1] = g.argv[i];
472 zNewArgv[i+1] = 0;
473 zNewArgv[0] = g.argv[0];
474 zNewArgv[1] = "help";
475 g.argc++;
476 g.argv = zNewArgv;
477 }
478 zCmdName = g.argv[1];
@@ -482,11 +479,11 @@
479 }
480 rc = name_search(zCmdName, aCommand, count(aCommand), &idx);
481 if( rc==1 ){
482 fossil_fatal("%s: unknown command: %s\n"
483 "%s: use \"help\" for more information\n",
484 g.argv[0], zCmdName, g.argv[0]);
485 }else if( rc==2 ){
486 int i, n;
487 Blob couldbe;
488 blob_zero(&couldbe);
489 n = strlen(zCmdName);
@@ -496,11 +493,11 @@
493 }
494 }
495 fossil_print("%s: ambiguous command prefix: %s\n"
496 "%s: could be any of:%s\n"
497 "%s: use \"help\" for more information\n",
498 g.argv[0], zCmdName, g.argv[0], blob_str(&couldbe), g.argv[0]);
499 fossil_exit(1);
500 }
501 atexit( fossil_atexit );
502 aCommand[idx].xFunc();
503 fossil_exit(0);
504
+71 -2
--- src/th_tcl.c
+++ src/th_tcl.c
@@ -368,10 +368,66 @@
368368
/* Remove the Tcl integration commands. */
369369
for(i=0; i<(sizeof(aCommand)/sizeof(aCommand[0])); i++){
370370
Th_RenameCommand(th1Interp, aCommand[i].zName, -1, NULL, 0);
371371
}
372372
}
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
+}
373429
374430
/*
375431
** Creates and initializes a Tcl interpreter for use with the specified TH1
376432
** interpreter. Stores the created Tcl interpreter in the Tcl context supplied
377433
** by the caller.
@@ -379,10 +435,13 @@
379435
static int createTclInterp(
380436
Th_Interp *interp,
381437
void *pContext
382438
){
383439
struct TclContext *tclContext = (struct TclContext *)pContext;
440
+ int argc;
441
+ char **argv;
442
+ char *argv0 = 0;
384443
Tcl_Interp *tclInterp;
385444
386445
if ( !tclContext ){
387446
Th_ErrorMessage(interp,
388447
"Invalid Tcl context", (const char *)"", 0);
@@ -389,13 +448,16 @@
389448
return TH_ERROR;
390449
}
391450
if ( tclContext->interp ){
392451
return TH_OK;
393452
}
394
- if ( tclContext->argc>0 && tclContext->argv ) {
395
- Tcl_FindExecutable(tclContext->argv[0]);
453
+ argc = tclContext->argc;
454
+ argv = tclContext->argv;
455
+ if( argc>0 && argv ){
456
+ argv0 = argv[0];
396457
}
458
+ Tcl_FindExecutable(argv0);
397459
tclInterp = tclContext->interp = Tcl_CreateInterp();
398460
if( !tclInterp || Tcl_InterpDeleted(tclInterp) ){
399461
Th_ErrorMessage(interp,
400462
"Could not create Tcl interpreter", (const char *)"", 0);
401463
return TH_ERROR;
@@ -404,10 +466,17 @@
404466
Th_ErrorMessage(interp,
405467
"Tcl initialization error:", Tcl_GetStringResult(tclInterp), -1);
406468
Tcl_DeleteInterp(tclInterp);
407469
tclContext->interp = tclInterp = 0;
408470
return TH_ERROR;
471
+ }
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;
409478
}
410479
/* Add the TH1 integration commands to Tcl. */
411480
Tcl_CallWhenDeleted(tclInterp, Th1DeleteProc, interp);
412481
Tcl_CreateObjCommand(tclInterp, "th1Eval", Th1EvalObjCmd, interp, NULL);
413482
Tcl_CreateObjCommand(tclInterp, "th1Expr", Th1ExprObjCmd, interp, NULL);
414483
--- src/th_tcl.c
+++ src/th_tcl.c
@@ -368,10 +368,66 @@
368 /* Remove the Tcl integration commands. */
369 for(i=0; i<(sizeof(aCommand)/sizeof(aCommand[0])); i++){
370 Th_RenameCommand(th1Interp, aCommand[i].zName, -1, NULL, 0);
371 }
372 }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
373
374 /*
375 ** Creates and initializes a Tcl interpreter for use with the specified TH1
376 ** interpreter. Stores the created Tcl interpreter in the Tcl context supplied
377 ** by the caller.
@@ -379,10 +435,13 @@
379 static int createTclInterp(
380 Th_Interp *interp,
381 void *pContext
382 ){
383 struct TclContext *tclContext = (struct TclContext *)pContext;
 
 
 
384 Tcl_Interp *tclInterp;
385
386 if ( !tclContext ){
387 Th_ErrorMessage(interp,
388 "Invalid Tcl context", (const char *)"", 0);
@@ -389,13 +448,16 @@
389 return TH_ERROR;
390 }
391 if ( tclContext->interp ){
392 return TH_OK;
393 }
394 if ( tclContext->argc>0 && tclContext->argv ) {
395 Tcl_FindExecutable(tclContext->argv[0]);
 
 
396 }
 
397 tclInterp = tclContext->interp = Tcl_CreateInterp();
398 if( !tclInterp || Tcl_InterpDeleted(tclInterp) ){
399 Th_ErrorMessage(interp,
400 "Could not create Tcl interpreter", (const char *)"", 0);
401 return TH_ERROR;
@@ -404,10 +466,17 @@
404 Th_ErrorMessage(interp,
405 "Tcl initialization error:", Tcl_GetStringResult(tclInterp), -1);
406 Tcl_DeleteInterp(tclInterp);
407 tclContext->interp = tclInterp = 0;
408 return TH_ERROR;
 
 
 
 
 
 
 
409 }
410 /* Add the TH1 integration commands to Tcl. */
411 Tcl_CallWhenDeleted(tclInterp, Th1DeleteProc, interp);
412 Tcl_CreateObjCommand(tclInterp, "th1Eval", Th1EvalObjCmd, interp, NULL);
413 Tcl_CreateObjCommand(tclInterp, "th1Expr", Th1ExprObjCmd, interp, NULL);
414
--- src/th_tcl.c
+++ src/th_tcl.c
@@ -368,10 +368,66 @@
368 /* Remove the Tcl integration commands. */
369 for(i=0; i<(sizeof(aCommand)/sizeof(aCommand[0])); i++){
370 Th_RenameCommand(th1Interp, aCommand[i].zName, -1, NULL, 0);
371 }
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 }
429
430 /*
431 ** Creates and initializes a Tcl interpreter for use with the specified TH1
432 ** interpreter. Stores the created Tcl interpreter in the Tcl context supplied
433 ** by the caller.
@@ -379,10 +435,13 @@
435 static int createTclInterp(
436 Th_Interp *interp,
437 void *pContext
438 ){
439 struct TclContext *tclContext = (struct TclContext *)pContext;
440 int argc;
441 char **argv;
442 char *argv0 = 0;
443 Tcl_Interp *tclInterp;
444
445 if ( !tclContext ){
446 Th_ErrorMessage(interp,
447 "Invalid Tcl context", (const char *)"", 0);
@@ -389,13 +448,16 @@
448 return TH_ERROR;
449 }
450 if ( tclContext->interp ){
451 return TH_OK;
452 }
453 argc = tclContext->argc;
454 argv = tclContext->argv;
455 if( argc>0 && argv ){
456 argv0 = argv[0];
457 }
458 Tcl_FindExecutable(argv0);
459 tclInterp = tclContext->interp = Tcl_CreateInterp();
460 if( !tclInterp || Tcl_InterpDeleted(tclInterp) ){
461 Th_ErrorMessage(interp,
462 "Could not create Tcl interpreter", (const char *)"", 0);
463 return TH_ERROR;
@@ -404,10 +466,17 @@
466 Th_ErrorMessage(interp,
467 "Tcl initialization error:", Tcl_GetStringResult(tclInterp), -1);
468 Tcl_DeleteInterp(tclInterp);
469 tclContext->interp = tclInterp = 0;
470 return TH_ERROR;
471 }
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;
478 }
479 /* Add the TH1 integration commands to Tcl. */
480 Tcl_CallWhenDeleted(tclInterp, Th1DeleteProc, interp);
481 Tcl_CreateObjCommand(tclInterp, "th1Eval", Th1EvalObjCmd, interp, NULL);
482 Tcl_CreateObjCommand(tclInterp, "th1Expr", Th1ExprObjCmd, interp, NULL);
483
--- test/th1-tcl.test
+++ test/th1-tcl.test
@@ -98,5 +98,11 @@
9898
test th1-tcl-8 {$RESULT eq {<hr><p class="thmainError">ERROR:\
9999
Cannot invoke Tcl command: tailcall</p>} || $RESULT eq {<hr><p\
100100
class="thmainError">ERROR: tailcall can only be called from a proc or\
101101
lambda</p>}}
102102
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]]]]}
103109
104110
ADDED test/th1-tcl9.txt
--- test/th1-tcl.test
+++ test/th1-tcl.test
@@ -98,5 +98,11 @@
98 test th1-tcl-8 {$RESULT eq {<hr><p class="thmainError">ERROR:\
99 Cannot invoke Tcl command: tailcall</p>} || $RESULT eq {<hr><p\
100 class="thmainError">ERROR: tailcall can only be called from a proc or\
101 lambda</p>}}
102
 
 
 
 
 
 
103
104 DDED test/th1-tcl9.txt
--- test/th1-tcl.test
+++ test/th1-tcl.test
@@ -98,5 +98,11 @@
98 test th1-tcl-8 {$RESULT eq {<hr><p class="thmainError">ERROR:\
99 Cannot invoke Tcl command: tailcall</p>} || $RESULT eq {<hr><p\
100 class="thmainError">ERROR: tailcall can only be called from a proc or\
101 lambda</p>}}
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]]]]}
109
110 DDED test/th1-tcl9.txt
--- a/test/th1-tcl9.txt
+++ b/test/th1-tcl9.txt
@@ -0,0 +1,9 @@
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>
--- a/test/th1-tcl9.txt
+++ b/test/th1-tcl9.txt
@@ -0,0 +1,9 @@
 
 
 
 
 
 
 
 
 
--- a/test/th1-tcl9.txt
+++ b/test/th1-tcl9.txt
@@ -0,0 +1,9 @@
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>
--- win/Makefile.mingw.mistachkin
+++ win/Makefile.mingw.mistachkin
@@ -265,10 +265,11 @@
265265
$(SRCDIR)/verify.c \
266266
$(SRCDIR)/vfile.c \
267267
$(SRCDIR)/wiki.c \
268268
$(SRCDIR)/wikiformat.c \
269269
$(SRCDIR)/winhttp.c \
270
+ $(SRCDIR)/wysiwyg.c \
270271
$(SRCDIR)/xfer.c \
271272
$(SRCDIR)/xfersetup.c \
272273
$(SRCDIR)/zip.c
273274
274275
TRANS_SRC = \
@@ -364,10 +365,11 @@
364365
$(OBJDIR)/verify_.c \
365366
$(OBJDIR)/vfile_.c \
366367
$(OBJDIR)/wiki_.c \
367368
$(OBJDIR)/wikiformat_.c \
368369
$(OBJDIR)/winhttp_.c \
370
+ $(OBJDIR)/wysiwyg_.c \
369371
$(OBJDIR)/xfer_.c \
370372
$(OBJDIR)/xfersetup_.c \
371373
$(OBJDIR)/zip_.c
372374
373375
OBJ = \
@@ -463,10 +465,11 @@
463465
$(OBJDIR)/verify.o \
464466
$(OBJDIR)/vfile.o \
465467
$(OBJDIR)/wiki.o \
466468
$(OBJDIR)/wikiformat.o \
467469
$(OBJDIR)/winhttp.o \
470
+ $(OBJDIR)/wysiwyg.o \
468471
$(OBJDIR)/xfer.o \
469472
$(OBJDIR)/xfersetup.o \
470473
$(OBJDIR)/zip.o
471474
472475
APPNAME = fossil.exe
@@ -481,10 +484,11 @@
481484
$(OBJDIR)/icon.o: $(SRCDIR)/../win/icon.rc
482485
cp $(SRCDIR)/../win/icon.rc $(OBJDIR)
483486
windres $(OBJDIR)/icon.rc -o $(OBJDIR)/icon.o
484487
485488
install: $(APPNAME)
489
+ mkdir -p $(INSTALLDIR)
486490
mv $(APPNAME) $(INSTALLDIR)
487491
488492
$(OBJDIR):
489493
mkdir $(OBJDIR)
490494
@@ -536,11 +540,11 @@
536540
537541
538542
$(OBJDIR)/page_index.h: $(TRANS_SRC) $(OBJDIR)/mkindex
539543
$(MKINDEX) $(TRANS_SRC) >$@
540544
$(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
542546
echo Done >$(OBJDIR)/headers
543547
544548
$(OBJDIR)/headers: Makefile
545549
Makefile:
546550
$(OBJDIR)/add_.c: $(SRCDIR)/add.c $(OBJDIR)/translate
@@ -1199,10 +1203,17 @@
11991203
12001204
$(OBJDIR)/winhttp.o: $(OBJDIR)/winhttp_.c $(OBJDIR)/winhttp.h $(SRCDIR)/config.h
12011205
$(XTCC) -o $(OBJDIR)/winhttp.o -c $(OBJDIR)/winhttp_.c
12021206
12031207
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
12041215
$(OBJDIR)/xfer_.c: $(SRCDIR)/xfer.c $(OBJDIR)/translate
12051216
$(TRANSLATE) $(SRCDIR)/xfer.c >$(OBJDIR)/xfer_.c
12061217
12071218
$(OBJDIR)/xfer.o: $(OBJDIR)/xfer_.c $(OBJDIR)/xfer.h $(SRCDIR)/config.h
12081219
$(XTCC) -o $(OBJDIR)/xfer.o -c $(OBJDIR)/xfer_.c
12091220
--- win/Makefile.mingw.mistachkin
+++ win/Makefile.mingw.mistachkin
@@ -265,10 +265,11 @@
265 $(SRCDIR)/verify.c \
266 $(SRCDIR)/vfile.c \
267 $(SRCDIR)/wiki.c \
268 $(SRCDIR)/wikiformat.c \
269 $(SRCDIR)/winhttp.c \
 
270 $(SRCDIR)/xfer.c \
271 $(SRCDIR)/xfersetup.c \
272 $(SRCDIR)/zip.c
273
274 TRANS_SRC = \
@@ -364,10 +365,11 @@
364 $(OBJDIR)/verify_.c \
365 $(OBJDIR)/vfile_.c \
366 $(OBJDIR)/wiki_.c \
367 $(OBJDIR)/wikiformat_.c \
368 $(OBJDIR)/winhttp_.c \
 
369 $(OBJDIR)/xfer_.c \
370 $(OBJDIR)/xfersetup_.c \
371 $(OBJDIR)/zip_.c
372
373 OBJ = \
@@ -463,10 +465,11 @@
463 $(OBJDIR)/verify.o \
464 $(OBJDIR)/vfile.o \
465 $(OBJDIR)/wiki.o \
466 $(OBJDIR)/wikiformat.o \
467 $(OBJDIR)/winhttp.o \
 
468 $(OBJDIR)/xfer.o \
469 $(OBJDIR)/xfersetup.o \
470 $(OBJDIR)/zip.o
471
472 APPNAME = fossil.exe
@@ -481,10 +484,11 @@
481 $(OBJDIR)/icon.o: $(SRCDIR)/../win/icon.rc
482 cp $(SRCDIR)/../win/icon.rc $(OBJDIR)
483 windres $(OBJDIR)/icon.rc -o $(OBJDIR)/icon.o
484
485 install: $(APPNAME)
 
486 mv $(APPNAME) $(INSTALLDIR)
487
488 $(OBJDIR):
489 mkdir $(OBJDIR)
490
@@ -536,11 +540,11 @@
536
537
538 $(OBJDIR)/page_index.h: $(TRANS_SRC) $(OBJDIR)/mkindex
539 $(MKINDEX) $(TRANS_SRC) >$@
540 $(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
542 echo Done >$(OBJDIR)/headers
543
544 $(OBJDIR)/headers: Makefile
545 Makefile:
546 $(OBJDIR)/add_.c: $(SRCDIR)/add.c $(OBJDIR)/translate
@@ -1199,10 +1203,17 @@
1199
1200 $(OBJDIR)/winhttp.o: $(OBJDIR)/winhttp_.c $(OBJDIR)/winhttp.h $(SRCDIR)/config.h
1201 $(XTCC) -o $(OBJDIR)/winhttp.o -c $(OBJDIR)/winhttp_.c
1202
1203 winhttp.h: $(OBJDIR)/headers
 
 
 
 
 
 
 
1204 $(OBJDIR)/xfer_.c: $(SRCDIR)/xfer.c $(OBJDIR)/translate
1205 $(TRANSLATE) $(SRCDIR)/xfer.c >$(OBJDIR)/xfer_.c
1206
1207 $(OBJDIR)/xfer.o: $(OBJDIR)/xfer_.c $(OBJDIR)/xfer.h $(SRCDIR)/config.h
1208 $(XTCC) -o $(OBJDIR)/xfer.o -c $(OBJDIR)/xfer_.c
1209
--- win/Makefile.mingw.mistachkin
+++ win/Makefile.mingw.mistachkin
@@ -265,10 +265,11 @@
265 $(SRCDIR)/verify.c \
266 $(SRCDIR)/vfile.c \
267 $(SRCDIR)/wiki.c \
268 $(SRCDIR)/wikiformat.c \
269 $(SRCDIR)/winhttp.c \
270 $(SRCDIR)/wysiwyg.c \
271 $(SRCDIR)/xfer.c \
272 $(SRCDIR)/xfersetup.c \
273 $(SRCDIR)/zip.c
274
275 TRANS_SRC = \
@@ -364,10 +365,11 @@
365 $(OBJDIR)/verify_.c \
366 $(OBJDIR)/vfile_.c \
367 $(OBJDIR)/wiki_.c \
368 $(OBJDIR)/wikiformat_.c \
369 $(OBJDIR)/winhttp_.c \
370 $(OBJDIR)/wysiwyg_.c \
371 $(OBJDIR)/xfer_.c \
372 $(OBJDIR)/xfersetup_.c \
373 $(OBJDIR)/zip_.c
374
375 OBJ = \
@@ -463,10 +465,11 @@
465 $(OBJDIR)/verify.o \
466 $(OBJDIR)/vfile.o \
467 $(OBJDIR)/wiki.o \
468 $(OBJDIR)/wikiformat.o \
469 $(OBJDIR)/winhttp.o \
470 $(OBJDIR)/wysiwyg.o \
471 $(OBJDIR)/xfer.o \
472 $(OBJDIR)/xfersetup.o \
473 $(OBJDIR)/zip.o
474
475 APPNAME = fossil.exe
@@ -481,10 +484,11 @@
484 $(OBJDIR)/icon.o: $(SRCDIR)/../win/icon.rc
485 cp $(SRCDIR)/../win/icon.rc $(OBJDIR)
486 windres $(OBJDIR)/icon.rc -o $(OBJDIR)/icon.o
487
488 install: $(APPNAME)
489 mkdir -p $(INSTALLDIR)
490 mv $(APPNAME) $(INSTALLDIR)
491
492 $(OBJDIR):
493 mkdir $(OBJDIR)
494
@@ -536,11 +540,11 @@
540
541
542 $(OBJDIR)/page_index.h: $(TRANS_SRC) $(OBJDIR)/mkindex
543 $(MKINDEX) $(TRANS_SRC) >$@
544 $(OBJDIR)/headers: $(OBJDIR)/page_index.h $(OBJDIR)/makeheaders $(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
546 echo Done >$(OBJDIR)/headers
547
548 $(OBJDIR)/headers: Makefile
549 Makefile:
550 $(OBJDIR)/add_.c: $(SRCDIR)/add.c $(OBJDIR)/translate
@@ -1199,10 +1203,17 @@
1203
1204 $(OBJDIR)/winhttp.o: $(OBJDIR)/winhttp_.c $(OBJDIR)/winhttp.h $(SRCDIR)/config.h
1205 $(XTCC) -o $(OBJDIR)/winhttp.o -c $(OBJDIR)/winhttp_.c
1206
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
1215 $(OBJDIR)/xfer_.c: $(SRCDIR)/xfer.c $(OBJDIR)/translate
1216 $(TRANSLATE) $(SRCDIR)/xfer.c >$(OBJDIR)/xfer_.c
1217
1218 $(OBJDIR)/xfer.o: $(OBJDIR)/xfer_.c $(OBJDIR)/xfer.h $(SRCDIR)/config.h
1219 $(XTCC) -o $(OBJDIR)/xfer.o -c $(OBJDIR)/xfer_.c
1220

Keyboard Shortcuts

Open search /
Next entry (timeline) j
Previous entry (timeline) k
Open focused entry Enter
Show this help ?
Toggle theme Top nav button