Fossil SCM

Move the "looks_like" functions out of diff.c and into a source file of their own: "lookslike.c".

drh 2013-07-11 20:04 UTC sbsreloaded
Commit b4c97d76a7ec6ad34e26a55ce96bbea28f93a5ef
+2
--- src/blob.c
+++ src/blob.c
@@ -1096,11 +1096,13 @@
10961096
** to be UTF-8 already, so no conversion is done.
10971097
*/
10981098
void blob_to_utf8_no_bom(Blob *pBlob, int useMbcs){
10991099
char *zUtf8;
11001100
int bomSize = 0;
1101
+#if defined(_WIN32) || defined(__CYGWIN__)
11011102
int bomReverse = 0;
1103
+#endif
11021104
if( starts_with_utf8_bom(pBlob, &bomSize) ){
11031105
struct Blob temp;
11041106
zUtf8 = blob_str(pBlob) + bomSize;
11051107
blob_zero(&temp);
11061108
blob_append(&temp, zUtf8, -1);
11071109
--- src/blob.c
+++ src/blob.c
@@ -1096,11 +1096,13 @@
1096 ** to be UTF-8 already, so no conversion is done.
1097 */
1098 void blob_to_utf8_no_bom(Blob *pBlob, int useMbcs){
1099 char *zUtf8;
1100 int bomSize = 0;
 
1101 int bomReverse = 0;
 
1102 if( starts_with_utf8_bom(pBlob, &bomSize) ){
1103 struct Blob temp;
1104 zUtf8 = blob_str(pBlob) + bomSize;
1105 blob_zero(&temp);
1106 blob_append(&temp, zUtf8, -1);
1107
--- src/blob.c
+++ src/blob.c
@@ -1096,11 +1096,13 @@
1096 ** to be UTF-8 already, so no conversion is done.
1097 */
1098 void blob_to_utf8_no_bom(Blob *pBlob, int useMbcs){
1099 char *zUtf8;
1100 int bomSize = 0;
1101 #if defined(_WIN32) || defined(__CYGWIN__)
1102 int bomReverse = 0;
1103 #endif
1104 if( starts_with_utf8_bom(pBlob, &bomSize) ){
1105 struct Blob temp;
1106 zUtf8 = blob_str(pBlob) + bomSize;
1107 blob_zero(&temp);
1108 blob_append(&temp, zUtf8, -1);
1109
+2 -353
--- src/diff.c
+++ src/diff.c
@@ -54,41 +54,17 @@
5454
"cannot compute difference between symlink and regular file\n"
5555
5656
#define DIFF_TOO_MANY_CHANGES \
5757
"more than 10,000 changes\n"
5858
59
-/*
60
-** This macro is designed to return non-zero if the specified blob contains
61
-** data that MAY be binary in nature; otherwise, zero will be returned.
62
-*/
63
-#define looks_like_binary(blob) \
64
- ((looks_like_utf8((blob), LOOK_BINARY) & LOOK_BINARY) != LOOK_NONE)
65
-
66
-/*
67
-** Output flags for the looks_like_utf8() and looks_like_utf16() routines used
68
-** to convey status information about the blob content.
69
-*/
70
-#define LOOK_NONE ((int)0x00000000) /* Nothing special was found. */
71
-#define LOOK_NUL ((int)0x00000001) /* One or more NUL chars were found. */
72
-#define LOOK_CR ((int)0x00000002) /* One or more CR chars were found. */
73
-#define LOOK_LONE_CR ((int)0x00000004) /* An unpaired CR char was found. */
74
-#define LOOK_LF ((int)0x00000008) /* One or more LF chars were found. */
75
-#define LOOK_LONE_LF ((int)0x00000010) /* An unpaired LF char was found. */
76
-#define LOOK_CRLF ((int)0x00000020) /* One or more CR/LF pairs were found. */
77
-#define LOOK_LONG ((int)0x00000040) /* An over length line was found. */
78
-#define LOOK_ODD ((int)0x00000080) /* An odd number of bytes was found. */
79
-#define LOOK_SHORT ((int)0x00000100) /* Unable to perform full check. */
80
-#define LOOK_INVALID ((int)0x00000200) /* Invalid sequence was found. */
81
-#define LOOK_BINARY (LOOK_NUL | LOOK_LONG | LOOK_SHORT) /* May be binary. */
82
-#define LOOK_EOL (LOOK_LONE_CR | LOOK_LONE_LF | LOOK_CRLF) /* Line seps. */
83
-#endif /* INTERFACE */
84
-
8559
/*
8660
** Maximum length of a line in a text file, in bytes. (2**13 = 8192 bytes)
8761
*/
8862
#define LENGTH_MASK_SZ 13
8963
#define LENGTH_MASK ((1<<LENGTH_MASK_SZ)-1)
64
+
65
+#endif /* INTERFACE */
9066
9167
/*
9268
** Information about each line of a file being diffed.
9369
**
9470
** The lower LENGTH_MASK_SZ bits of the hash (DLine.h) are the length
@@ -201,282 +177,10 @@
201177
/* Return results */
202178
*pnLine = nLine;
203179
return a;
204180
}
205181
206
-/*
207
-** This function attempts to scan each logical line within the blob to
208
-** determine the type of content it appears to contain. The return value
209
-** is a combination of one or more of the LOOK_XXX flags (see above):
210
-**
211
-** !LOOK_BINARY -- The content appears to consist entirely of text; however,
212
-** the encoding may not be UTF-8.
213
-**
214
-** LOOK_BINARY -- The content appears to be binary because it contains one
215
-** or more embedded NUL characters or an extremely long line.
216
-** Since this function does not understand UTF-16, it may
217
-** falsely consider UTF-16 text to be binary.
218
-**
219
-** Additional flags (i.e. those other than the ones included in LOOK_BINARY)
220
-** may be present in the result as well; however, they should not impact the
221
-** determination of text versus binary content.
222
-**
223
-************************************ WARNING **********************************
224
-**
225
-** This function does not validate that the blob content is properly formed
226
-** UTF-8. It assumes that all code points are the same size. It does not
227
-** validate any code points. It makes no attempt to detect if any [invalid]
228
-** switches between UTF-8 and other encodings occur.
229
-**
230
-** The only code points that this function cares about are the NUL character,
231
-** carriage-return, and line-feed.
232
-**
233
-** This function examines the contents of the blob until one of the flags
234
-** specified in "stopFlags" is set.
235
-**
236
-************************************ WARNING **********************************
237
-*/
238
-int looks_like_utf8(const Blob *pContent, int stopFlags){
239
- const char *z = blob_buffer(pContent);
240
- unsigned int n = blob_size(pContent);
241
- int j, c, flags = LOOK_NONE; /* Assume UTF-8 text, prove otherwise */
242
-
243
- if( n==0 ) return flags; /* Empty file -> text */
244
- c = *z;
245
- if( c==0 ){
246
- flags |= LOOK_NUL; /* NUL character in a file -> binary */
247
- }else if( c=='\r' ){
248
- flags |= LOOK_CR;
249
- if( n<=1 || z[1]!='\n' ){
250
- flags |= LOOK_LONE_CR; /* More chars, next char is not LF */
251
- }
252
- }
253
- j = (c!='\n');
254
- if( !j ) flags |= (LOOK_LF | LOOK_LONE_LF); /* Found LF as first char */
255
- while( !(flags&stopFlags) && --n>0 ){
256
- int c2 = c;
257
- c = *++z; ++j;
258
- if( c==0 ){
259
- flags |= LOOK_NUL; /* NUL character in a file -> binary */
260
- }else if( c=='\n' ){
261
- flags |= LOOK_LF;
262
- if( c2=='\r' ){
263
- flags |= (LOOK_CR | LOOK_CRLF); /* Found LF preceded by CR */
264
- }else{
265
- flags |= LOOK_LONE_LF;
266
- }
267
- if( j>LENGTH_MASK ){
268
- flags |= LOOK_LONG; /* Very long line -> binary */
269
- }
270
- j = 0;
271
- }else if( c=='\r' ){
272
- flags |= LOOK_CR;
273
- if( n<=1 || z[1]!='\n' ){
274
- flags |= LOOK_LONE_CR; /* More chars, next char is not LF */
275
- }
276
- }
277
- }
278
- if( n ){
279
- flags |= LOOK_SHORT; /* The whole blob was not examined */
280
- }
281
- if( j>LENGTH_MASK ){
282
- flags |= LOOK_LONG; /* Very long line -> binary */
283
- }
284
- return flags;
285
-}
286
-
287
-/*
288
-** Define the type needed to represent a Unicode (UTF-16) character.
289
-*/
290
-#ifndef WCHAR_T
291
-# ifdef _WIN32
292
-# define WCHAR_T wchar_t
293
-# else
294
-# define WCHAR_T unsigned short
295
-# endif
296
-#endif
297
-
298
-/*
299
-** Maximum length of a line in a text file, in UTF-16 characters. (4096)
300
-** The number of bytes represented by this value cannot exceed LENGTH_MASK
301
-** bytes, because that is the line buffer size used by the diff engine.
302
-*/
303
-#define UTF16_LENGTH_MASK_SZ (LENGTH_MASK_SZ-(sizeof(WCHAR_T)-sizeof(char)))
304
-#define UTF16_LENGTH_MASK ((1<<UTF16_LENGTH_MASK_SZ)-1)
305
-
306
-/*
307
-** This macro is used to swap the byte order of a UTF-16 character in the
308
-** looks_like_utf16() function.
309
-*/
310
-#define UTF16_SWAP(ch) ((((ch) << 8) & 0xFF00) | (((ch) >> 8) & 0xFF))
311
-#define UTF16_SWAP_IF(expr,ch) ((expr) ? UTF16_SWAP((ch)) : (ch))
312
-
313
-/*
314
-** This function attempts to scan each logical line within the blob to
315
-** determine the type of content it appears to contain. The return value
316
-** is a combination of one or more of the LOOK_XXX flags (see above):
317
-**
318
-** !LOOK_BINARY -- The content appears to consist entirely of text; however,
319
-** the encoding may not be UTF-16.
320
-**
321
-** LOOK_BINARY -- The content appears to be binary because it contains one
322
-** or more embedded NUL characters or an extremely long line.
323
-** Since this function does not understand UTF-8, it may
324
-** falsely consider UTF-8 text to be binary.
325
-**
326
-** Additional flags (i.e. those other than the ones included in LOOK_BINARY)
327
-** may be present in the result as well; however, they should not impact the
328
-** determination of text versus binary content.
329
-**
330
-************************************ WARNING **********************************
331
-**
332
-** This function does not validate that the blob content is properly formed
333
-** UTF-16. It assumes that all code points are the same size. It does not
334
-** validate any code points. It makes no attempt to detect if any [invalid]
335
-** switches between the UTF-16be and UTF-16le encodings occur.
336
-**
337
-** The only code points that this function cares about are the NUL character,
338
-** carriage-return, and line-feed.
339
-**
340
-** This function examines the contents of the blob until one of the flags
341
-** specified in "stopFlags" is set.
342
-**
343
-************************************ WARNING **********************************
344
-*/
345
-int looks_like_utf16(const Blob *pContent, int bReverse, int stopFlags){
346
- const WCHAR_T *z = (WCHAR_T *)blob_buffer(pContent);
347
- unsigned int n = blob_size(pContent);
348
- int j, c, flags = LOOK_NONE; /* Assume UTF-16 text, prove otherwise */
349
-
350
- if( n==0 ) return flags; /* Empty file -> text */
351
- if( n%sizeof(WCHAR_T) ){
352
- flags |= LOOK_ODD; /* Odd number of bytes -> binary (UTF-8?) */
353
- if( n<sizeof(WCHAR_T) ) return flags; /* One byte -> binary (UTF-8?) */
354
- }
355
- c = *z;
356
- if( bReverse ){
357
- c = UTF16_SWAP(c);
358
- }
359
- if( c==0 ){
360
- flags |= LOOK_NUL; /* NUL character in a file -> binary */
361
- }else if( c=='\r' ){
362
- flags |= LOOK_CR;
363
- if( n<(2*sizeof(WCHAR_T)) || UTF16_SWAP_IF(bReverse, z[1])!='\n' ){
364
- flags |= LOOK_LONE_CR; /* More chars, next char is not LF */
365
- }
366
- }
367
- j = (c!='\n');
368
- if( !j ) flags |= (LOOK_LF | LOOK_LONE_LF); /* Found LF as first char */
369
- while( 1 ){
370
- int c2 = c;
371
- if( flags&stopFlags ) break;
372
- n -= sizeof(WCHAR_T);
373
- if( n<sizeof(WCHAR_T) ) break;
374
- c = *++z;
375
- if( bReverse ){
376
- c = UTF16_SWAP(c);
377
- }
378
- ++j;
379
- if( c==0 ){
380
- flags |= LOOK_NUL; /* NUL character in a file -> binary */
381
- }else if( c=='\n' ){
382
- flags |= LOOK_LF;
383
- if( c2=='\r' ){
384
- flags |= (LOOK_CR | LOOK_CRLF); /* Found LF preceded by CR */
385
- }else{
386
- flags |= LOOK_LONE_LF;
387
- }
388
- if( j>UTF16_LENGTH_MASK ){
389
- flags |= LOOK_LONG; /* Very long line -> binary */
390
- }
391
- j = 0;
392
- }else if( c=='\r' ){
393
- flags |= LOOK_CR;
394
- if( n<(2*sizeof(WCHAR_T)) || UTF16_SWAP_IF(bReverse, z[1])!='\n' ){
395
- flags |= LOOK_LONE_CR; /* More chars, next char is not LF */
396
- }
397
- }
398
- }
399
- if( n ){
400
- flags |= LOOK_SHORT; /* The whole blob was not examined */
401
- }
402
- if( j>UTF16_LENGTH_MASK ){
403
- flags |= LOOK_LONG; /* Very long line -> binary */
404
- }
405
- return flags;
406
-}
407
-
408
-/*
409
-** This function returns an array of bytes representing the byte-order-mark
410
-** for UTF-8.
411
-*/
412
-const unsigned char *get_utf8_bom(int *pnByte){
413
- static const unsigned char bom[] = {
414
- 0xEF, 0xBB, 0xBF, 0x00, 0x00, 0x00
415
- };
416
- if( pnByte ) *pnByte = 3;
417
- return bom;
418
-}
419
-
420
-/*
421
-** This function returns non-zero if the blob starts with a UTF-8
422
-** byte-order-mark (BOM).
423
-*/
424
-int starts_with_utf8_bom(const Blob *pContent, int *pnByte){
425
- const char *z = blob_buffer(pContent);
426
- int bomSize = 0;
427
- const unsigned char *bom = get_utf8_bom(&bomSize);
428
-
429
- if( pnByte ) *pnByte = bomSize;
430
- if( blob_size(pContent)<bomSize ) return 0;
431
- return memcmp(z, bom, bomSize)==0;
432
-}
433
-
434
-/*
435
-** This function returns non-zero if the blob starts with a UTF-16
436
-** byte-order-mark (BOM), either in the endianness of the machine
437
-** or in reversed byte order. The UTF-32 BOM is ruled out by checking
438
-** if the UTF-16 BOM is not immediately followed by (utf16) 0.
439
-** pnByte is only set when the function returns 1.
440
-**
441
-** pbReverse is always set, even when no BOM is found. Without a BOM,
442
-** it is set to 1 on little-endian and 0 on big-endian platforms. See
443
-** clause D98 of conformance (section 3.10) of the Unicode standard.
444
-*/
445
-int starts_with_utf16_bom(
446
- const Blob *pContent, /* IN: Blob content to perform BOM detection on. */
447
- int *pnByte, /* OUT: The number of bytes used for the BOM. */
448
- int *pbReverse /* OUT: Non-zero for BOM in reverse byte-order. */
449
-){
450
- const unsigned short *z = (unsigned short *)blob_buffer(pContent);
451
- int bomSize = sizeof(unsigned short);
452
- int size = blob_size(pContent);
453
-
454
- if( size<bomSize ) goto noBom; /* No: cannot read BOM. */
455
- if( size>=(2*bomSize) && z[1]==0 ) goto noBom; /* No: possible UTF-32. */
456
- if( z[0]==0xfeff ){
457
- if( pbReverse ) *pbReverse = 0;
458
- }else if( z[0]==0xfffe ){
459
- if( pbReverse ) *pbReverse = 1;
460
- }else{
461
- static const int one = 1;
462
- noBom:
463
- if( pbReverse ) *pbReverse = *(char *) &one;
464
- return 0; /* No: UTF-16 byte-order-mark not found. */
465
- }
466
- if( pnByte ) *pnByte = bomSize;
467
- return 1; /* Yes. */
468
-}
469
-
470
-/*
471
-** Returns non-zero if the specified content could be valid UTF-16.
472
-*/
473
-int could_be_utf16(const Blob *pContent, int *pbReverse){
474
- return (blob_size(pContent) % sizeof(WCHAR_T) == 0) ?
475
- starts_with_utf16_bom(pContent, 0, pbReverse) : 0;
476
-}
477
-
478182
/*
479183
** Return true if two DLine elements are identical.
480184
*/
481185
static int same_dline(DLine *pA, DLine *pB){
482186
return pA->h==pB->h && memcmp(pA->z,pB->z,pA->h & LENGTH_MASK)==0;
@@ -2653,60 +2357,5 @@
26532357
zPrefix[0] = 0;
26542358
}
26552359
fossil_print("%21s %4d: %.*s\n", zPrefix, i+1, n, z);
26562360
}
26572361
}
2658
-
2659
-/*
2660
-** COMMAND: test-looks-like-utf
2661
-**
2662
-** Usage: %fossil test-looks-like-utf FILENAME
2663
-**
2664
-** Options:
2665
-** --utf8 Ignoring BOM and file size, force UTF-8 checking
2666
-** --utf16 Ignoring BOM and file size, force UTF-16 checking
2667
-**
2668
-** FILENAME is the name of a file to check for textual content in the UTF-8
2669
-** and/or UTF-16 encodings.
2670
-*/
2671
-void looks_like_utf_test_cmd(void){
2672
- Blob blob; /* the contents of the specified file */
2673
- int fUtf8; /* return value of starts_with_utf8_bom() */
2674
- int fUtf16; /* return value of starts_with_utf16_bom() */
2675
- int fUnicode; /* return value of could_be_utf16() */
2676
- int lookFlags; /* output flags from looks_like_utf8/utf16() */
2677
- int bRevUtf16 = 0; /* non-zero -> UTF-16 byte order reversed */
2678
- int bRevUnicode = 0; /* non-zero -> UTF-16 byte order reversed */
2679
- int fForceUtf8 = find_option("utf8",0,0)!=0;
2680
- int fForceUtf16 = find_option("utf16",0,0)!=0;
2681
- if( g.argc!=3 ) usage("FILENAME");
2682
- blob_read_from_file(&blob, g.argv[2]);
2683
- fUtf8 = starts_with_utf8_bom(&blob, 0);
2684
- fUtf16 = starts_with_utf16_bom(&blob, 0, &bRevUtf16);
2685
- if( fForceUtf8 ){
2686
- fUnicode = 0;
2687
- }else{
2688
- fUnicode = could_be_utf16(&blob, &bRevUnicode) || fForceUtf16;
2689
- }
2690
- lookFlags = fUnicode ? looks_like_utf16(&blob, bRevUnicode, 0) :
2691
- looks_like_utf8(&blob, 0);
2692
- fossil_print("File \"%s\" has %d bytes.\n",g.argv[2],blob_size(&blob));
2693
- fossil_print("Starts with UTF-8 BOM: %s\n",fUtf8?"yes":"no");
2694
- fossil_print("Starts with UTF-16 BOM: %s\n",
2695
- fUtf16?(bRevUtf16?"reversed":"yes"):"no");
2696
- fossil_print("Looks like UTF-%s: %s\n",fUnicode?"16":"8",
2697
- (lookFlags&LOOK_BINARY)?"no":"yes");
2698
- fossil_print("Has flag LOOK_NUL: %s\n",(lookFlags&LOOK_NUL)?"yes":"no");
2699
- fossil_print("Has flag LOOK_CR: %s\n",(lookFlags&LOOK_CR)?"yes":"no");
2700
- fossil_print("Has flag LOOK_LONE_CR: %s\n",
2701
- (lookFlags&LOOK_LONE_CR)?"yes":"no");
2702
- fossil_print("Has flag LOOK_LF: %s\n",(lookFlags&LOOK_LF)?"yes":"no");
2703
- fossil_print("Has flag LOOK_LONE_LF: %s\n",
2704
- (lookFlags&LOOK_LONE_LF)?"yes":"no");
2705
- fossil_print("Has flag LOOK_CRLF: %s\n",(lookFlags&LOOK_CRLF)?"yes":"no");
2706
- fossil_print("Has flag LOOK_LONG: %s\n",(lookFlags&LOOK_LONG)?"yes":"no");
2707
- fossil_print("Has flag LOOK_INVALID: %s\n",
2708
- (lookFlags&LOOK_INVALID)?"yes":"no");
2709
- fossil_print("Has flag LOOK_ODD: %s\n",(lookFlags&LOOK_ODD)?"yes":"no");
2710
- fossil_print("Has flag LOOK_SHORT: %s\n",(lookFlags&LOOK_SHORT)?"yes":"no");
2711
- blob_reset(&blob);
2712
-}
27132362
27142363
ADDED src/lookslike.c
--- src/diff.c
+++ src/diff.c
@@ -54,41 +54,17 @@
54 "cannot compute difference between symlink and regular file\n"
55
56 #define DIFF_TOO_MANY_CHANGES \
57 "more than 10,000 changes\n"
58
59 /*
60 ** This macro is designed to return non-zero if the specified blob contains
61 ** data that MAY be binary in nature; otherwise, zero will be returned.
62 */
63 #define looks_like_binary(blob) \
64 ((looks_like_utf8((blob), LOOK_BINARY) & LOOK_BINARY) != LOOK_NONE)
65
66 /*
67 ** Output flags for the looks_like_utf8() and looks_like_utf16() routines used
68 ** to convey status information about the blob content.
69 */
70 #define LOOK_NONE ((int)0x00000000) /* Nothing special was found. */
71 #define LOOK_NUL ((int)0x00000001) /* One or more NUL chars were found. */
72 #define LOOK_CR ((int)0x00000002) /* One or more CR chars were found. */
73 #define LOOK_LONE_CR ((int)0x00000004) /* An unpaired CR char was found. */
74 #define LOOK_LF ((int)0x00000008) /* One or more LF chars were found. */
75 #define LOOK_LONE_LF ((int)0x00000010) /* An unpaired LF char was found. */
76 #define LOOK_CRLF ((int)0x00000020) /* One or more CR/LF pairs were found. */
77 #define LOOK_LONG ((int)0x00000040) /* An over length line was found. */
78 #define LOOK_ODD ((int)0x00000080) /* An odd number of bytes was found. */
79 #define LOOK_SHORT ((int)0x00000100) /* Unable to perform full check. */
80 #define LOOK_INVALID ((int)0x00000200) /* Invalid sequence was found. */
81 #define LOOK_BINARY (LOOK_NUL | LOOK_LONG | LOOK_SHORT) /* May be binary. */
82 #define LOOK_EOL (LOOK_LONE_CR | LOOK_LONE_LF | LOOK_CRLF) /* Line seps. */
83 #endif /* INTERFACE */
84
85 /*
86 ** Maximum length of a line in a text file, in bytes. (2**13 = 8192 bytes)
87 */
88 #define LENGTH_MASK_SZ 13
89 #define LENGTH_MASK ((1<<LENGTH_MASK_SZ)-1)
 
 
90
91 /*
92 ** Information about each line of a file being diffed.
93 **
94 ** The lower LENGTH_MASK_SZ bits of the hash (DLine.h) are the length
@@ -201,282 +177,10 @@
201 /* Return results */
202 *pnLine = nLine;
203 return a;
204 }
205
206 /*
207 ** This function attempts to scan each logical line within the blob to
208 ** determine the type of content it appears to contain. The return value
209 ** is a combination of one or more of the LOOK_XXX flags (see above):
210 **
211 ** !LOOK_BINARY -- The content appears to consist entirely of text; however,
212 ** the encoding may not be UTF-8.
213 **
214 ** LOOK_BINARY -- The content appears to be binary because it contains one
215 ** or more embedded NUL characters or an extremely long line.
216 ** Since this function does not understand UTF-16, it may
217 ** falsely consider UTF-16 text to be binary.
218 **
219 ** Additional flags (i.e. those other than the ones included in LOOK_BINARY)
220 ** may be present in the result as well; however, they should not impact the
221 ** determination of text versus binary content.
222 **
223 ************************************ WARNING **********************************
224 **
225 ** This function does not validate that the blob content is properly formed
226 ** UTF-8. It assumes that all code points are the same size. It does not
227 ** validate any code points. It makes no attempt to detect if any [invalid]
228 ** switches between UTF-8 and other encodings occur.
229 **
230 ** The only code points that this function cares about are the NUL character,
231 ** carriage-return, and line-feed.
232 **
233 ** This function examines the contents of the blob until one of the flags
234 ** specified in "stopFlags" is set.
235 **
236 ************************************ WARNING **********************************
237 */
238 int looks_like_utf8(const Blob *pContent, int stopFlags){
239 const char *z = blob_buffer(pContent);
240 unsigned int n = blob_size(pContent);
241 int j, c, flags = LOOK_NONE; /* Assume UTF-8 text, prove otherwise */
242
243 if( n==0 ) return flags; /* Empty file -> text */
244 c = *z;
245 if( c==0 ){
246 flags |= LOOK_NUL; /* NUL character in a file -> binary */
247 }else if( c=='\r' ){
248 flags |= LOOK_CR;
249 if( n<=1 || z[1]!='\n' ){
250 flags |= LOOK_LONE_CR; /* More chars, next char is not LF */
251 }
252 }
253 j = (c!='\n');
254 if( !j ) flags |= (LOOK_LF | LOOK_LONE_LF); /* Found LF as first char */
255 while( !(flags&stopFlags) && --n>0 ){
256 int c2 = c;
257 c = *++z; ++j;
258 if( c==0 ){
259 flags |= LOOK_NUL; /* NUL character in a file -> binary */
260 }else if( c=='\n' ){
261 flags |= LOOK_LF;
262 if( c2=='\r' ){
263 flags |= (LOOK_CR | LOOK_CRLF); /* Found LF preceded by CR */
264 }else{
265 flags |= LOOK_LONE_LF;
266 }
267 if( j>LENGTH_MASK ){
268 flags |= LOOK_LONG; /* Very long line -> binary */
269 }
270 j = 0;
271 }else if( c=='\r' ){
272 flags |= LOOK_CR;
273 if( n<=1 || z[1]!='\n' ){
274 flags |= LOOK_LONE_CR; /* More chars, next char is not LF */
275 }
276 }
277 }
278 if( n ){
279 flags |= LOOK_SHORT; /* The whole blob was not examined */
280 }
281 if( j>LENGTH_MASK ){
282 flags |= LOOK_LONG; /* Very long line -> binary */
283 }
284 return flags;
285 }
286
287 /*
288 ** Define the type needed to represent a Unicode (UTF-16) character.
289 */
290 #ifndef WCHAR_T
291 # ifdef _WIN32
292 # define WCHAR_T wchar_t
293 # else
294 # define WCHAR_T unsigned short
295 # endif
296 #endif
297
298 /*
299 ** Maximum length of a line in a text file, in UTF-16 characters. (4096)
300 ** The number of bytes represented by this value cannot exceed LENGTH_MASK
301 ** bytes, because that is the line buffer size used by the diff engine.
302 */
303 #define UTF16_LENGTH_MASK_SZ (LENGTH_MASK_SZ-(sizeof(WCHAR_T)-sizeof(char)))
304 #define UTF16_LENGTH_MASK ((1<<UTF16_LENGTH_MASK_SZ)-1)
305
306 /*
307 ** This macro is used to swap the byte order of a UTF-16 character in the
308 ** looks_like_utf16() function.
309 */
310 #define UTF16_SWAP(ch) ((((ch) << 8) & 0xFF00) | (((ch) >> 8) & 0xFF))
311 #define UTF16_SWAP_IF(expr,ch) ((expr) ? UTF16_SWAP((ch)) : (ch))
312
313 /*
314 ** This function attempts to scan each logical line within the blob to
315 ** determine the type of content it appears to contain. The return value
316 ** is a combination of one or more of the LOOK_XXX flags (see above):
317 **
318 ** !LOOK_BINARY -- The content appears to consist entirely of text; however,
319 ** the encoding may not be UTF-16.
320 **
321 ** LOOK_BINARY -- The content appears to be binary because it contains one
322 ** or more embedded NUL characters or an extremely long line.
323 ** Since this function does not understand UTF-8, it may
324 ** falsely consider UTF-8 text to be binary.
325 **
326 ** Additional flags (i.e. those other than the ones included in LOOK_BINARY)
327 ** may be present in the result as well; however, they should not impact the
328 ** determination of text versus binary content.
329 **
330 ************************************ WARNING **********************************
331 **
332 ** This function does not validate that the blob content is properly formed
333 ** UTF-16. It assumes that all code points are the same size. It does not
334 ** validate any code points. It makes no attempt to detect if any [invalid]
335 ** switches between the UTF-16be and UTF-16le encodings occur.
336 **
337 ** The only code points that this function cares about are the NUL character,
338 ** carriage-return, and line-feed.
339 **
340 ** This function examines the contents of the blob until one of the flags
341 ** specified in "stopFlags" is set.
342 **
343 ************************************ WARNING **********************************
344 */
345 int looks_like_utf16(const Blob *pContent, int bReverse, int stopFlags){
346 const WCHAR_T *z = (WCHAR_T *)blob_buffer(pContent);
347 unsigned int n = blob_size(pContent);
348 int j, c, flags = LOOK_NONE; /* Assume UTF-16 text, prove otherwise */
349
350 if( n==0 ) return flags; /* Empty file -> text */
351 if( n%sizeof(WCHAR_T) ){
352 flags |= LOOK_ODD; /* Odd number of bytes -> binary (UTF-8?) */
353 if( n<sizeof(WCHAR_T) ) return flags; /* One byte -> binary (UTF-8?) */
354 }
355 c = *z;
356 if( bReverse ){
357 c = UTF16_SWAP(c);
358 }
359 if( c==0 ){
360 flags |= LOOK_NUL; /* NUL character in a file -> binary */
361 }else if( c=='\r' ){
362 flags |= LOOK_CR;
363 if( n<(2*sizeof(WCHAR_T)) || UTF16_SWAP_IF(bReverse, z[1])!='\n' ){
364 flags |= LOOK_LONE_CR; /* More chars, next char is not LF */
365 }
366 }
367 j = (c!='\n');
368 if( !j ) flags |= (LOOK_LF | LOOK_LONE_LF); /* Found LF as first char */
369 while( 1 ){
370 int c2 = c;
371 if( flags&stopFlags ) break;
372 n -= sizeof(WCHAR_T);
373 if( n<sizeof(WCHAR_T) ) break;
374 c = *++z;
375 if( bReverse ){
376 c = UTF16_SWAP(c);
377 }
378 ++j;
379 if( c==0 ){
380 flags |= LOOK_NUL; /* NUL character in a file -> binary */
381 }else if( c=='\n' ){
382 flags |= LOOK_LF;
383 if( c2=='\r' ){
384 flags |= (LOOK_CR | LOOK_CRLF); /* Found LF preceded by CR */
385 }else{
386 flags |= LOOK_LONE_LF;
387 }
388 if( j>UTF16_LENGTH_MASK ){
389 flags |= LOOK_LONG; /* Very long line -> binary */
390 }
391 j = 0;
392 }else if( c=='\r' ){
393 flags |= LOOK_CR;
394 if( n<(2*sizeof(WCHAR_T)) || UTF16_SWAP_IF(bReverse, z[1])!='\n' ){
395 flags |= LOOK_LONE_CR; /* More chars, next char is not LF */
396 }
397 }
398 }
399 if( n ){
400 flags |= LOOK_SHORT; /* The whole blob was not examined */
401 }
402 if( j>UTF16_LENGTH_MASK ){
403 flags |= LOOK_LONG; /* Very long line -> binary */
404 }
405 return flags;
406 }
407
408 /*
409 ** This function returns an array of bytes representing the byte-order-mark
410 ** for UTF-8.
411 */
412 const unsigned char *get_utf8_bom(int *pnByte){
413 static const unsigned char bom[] = {
414 0xEF, 0xBB, 0xBF, 0x00, 0x00, 0x00
415 };
416 if( pnByte ) *pnByte = 3;
417 return bom;
418 }
419
420 /*
421 ** This function returns non-zero if the blob starts with a UTF-8
422 ** byte-order-mark (BOM).
423 */
424 int starts_with_utf8_bom(const Blob *pContent, int *pnByte){
425 const char *z = blob_buffer(pContent);
426 int bomSize = 0;
427 const unsigned char *bom = get_utf8_bom(&bomSize);
428
429 if( pnByte ) *pnByte = bomSize;
430 if( blob_size(pContent)<bomSize ) return 0;
431 return memcmp(z, bom, bomSize)==0;
432 }
433
434 /*
435 ** This function returns non-zero if the blob starts with a UTF-16
436 ** byte-order-mark (BOM), either in the endianness of the machine
437 ** or in reversed byte order. The UTF-32 BOM is ruled out by checking
438 ** if the UTF-16 BOM is not immediately followed by (utf16) 0.
439 ** pnByte is only set when the function returns 1.
440 **
441 ** pbReverse is always set, even when no BOM is found. Without a BOM,
442 ** it is set to 1 on little-endian and 0 on big-endian platforms. See
443 ** clause D98 of conformance (section 3.10) of the Unicode standard.
444 */
445 int starts_with_utf16_bom(
446 const Blob *pContent, /* IN: Blob content to perform BOM detection on. */
447 int *pnByte, /* OUT: The number of bytes used for the BOM. */
448 int *pbReverse /* OUT: Non-zero for BOM in reverse byte-order. */
449 ){
450 const unsigned short *z = (unsigned short *)blob_buffer(pContent);
451 int bomSize = sizeof(unsigned short);
452 int size = blob_size(pContent);
453
454 if( size<bomSize ) goto noBom; /* No: cannot read BOM. */
455 if( size>=(2*bomSize) && z[1]==0 ) goto noBom; /* No: possible UTF-32. */
456 if( z[0]==0xfeff ){
457 if( pbReverse ) *pbReverse = 0;
458 }else if( z[0]==0xfffe ){
459 if( pbReverse ) *pbReverse = 1;
460 }else{
461 static const int one = 1;
462 noBom:
463 if( pbReverse ) *pbReverse = *(char *) &one;
464 return 0; /* No: UTF-16 byte-order-mark not found. */
465 }
466 if( pnByte ) *pnByte = bomSize;
467 return 1; /* Yes. */
468 }
469
470 /*
471 ** Returns non-zero if the specified content could be valid UTF-16.
472 */
473 int could_be_utf16(const Blob *pContent, int *pbReverse){
474 return (blob_size(pContent) % sizeof(WCHAR_T) == 0) ?
475 starts_with_utf16_bom(pContent, 0, pbReverse) : 0;
476 }
477
478 /*
479 ** Return true if two DLine elements are identical.
480 */
481 static int same_dline(DLine *pA, DLine *pB){
482 return pA->h==pB->h && memcmp(pA->z,pB->z,pA->h & LENGTH_MASK)==0;
@@ -2653,60 +2357,5 @@
2653 zPrefix[0] = 0;
2654 }
2655 fossil_print("%21s %4d: %.*s\n", zPrefix, i+1, n, z);
2656 }
2657 }
2658
2659 /*
2660 ** COMMAND: test-looks-like-utf
2661 **
2662 ** Usage: %fossil test-looks-like-utf FILENAME
2663 **
2664 ** Options:
2665 ** --utf8 Ignoring BOM and file size, force UTF-8 checking
2666 ** --utf16 Ignoring BOM and file size, force UTF-16 checking
2667 **
2668 ** FILENAME is the name of a file to check for textual content in the UTF-8
2669 ** and/or UTF-16 encodings.
2670 */
2671 void looks_like_utf_test_cmd(void){
2672 Blob blob; /* the contents of the specified file */
2673 int fUtf8; /* return value of starts_with_utf8_bom() */
2674 int fUtf16; /* return value of starts_with_utf16_bom() */
2675 int fUnicode; /* return value of could_be_utf16() */
2676 int lookFlags; /* output flags from looks_like_utf8/utf16() */
2677 int bRevUtf16 = 0; /* non-zero -> UTF-16 byte order reversed */
2678 int bRevUnicode = 0; /* non-zero -> UTF-16 byte order reversed */
2679 int fForceUtf8 = find_option("utf8",0,0)!=0;
2680 int fForceUtf16 = find_option("utf16",0,0)!=0;
2681 if( g.argc!=3 ) usage("FILENAME");
2682 blob_read_from_file(&blob, g.argv[2]);
2683 fUtf8 = starts_with_utf8_bom(&blob, 0);
2684 fUtf16 = starts_with_utf16_bom(&blob, 0, &bRevUtf16);
2685 if( fForceUtf8 ){
2686 fUnicode = 0;
2687 }else{
2688 fUnicode = could_be_utf16(&blob, &bRevUnicode) || fForceUtf16;
2689 }
2690 lookFlags = fUnicode ? looks_like_utf16(&blob, bRevUnicode, 0) :
2691 looks_like_utf8(&blob, 0);
2692 fossil_print("File \"%s\" has %d bytes.\n",g.argv[2],blob_size(&blob));
2693 fossil_print("Starts with UTF-8 BOM: %s\n",fUtf8?"yes":"no");
2694 fossil_print("Starts with UTF-16 BOM: %s\n",
2695 fUtf16?(bRevUtf16?"reversed":"yes"):"no");
2696 fossil_print("Looks like UTF-%s: %s\n",fUnicode?"16":"8",
2697 (lookFlags&LOOK_BINARY)?"no":"yes");
2698 fossil_print("Has flag LOOK_NUL: %s\n",(lookFlags&LOOK_NUL)?"yes":"no");
2699 fossil_print("Has flag LOOK_CR: %s\n",(lookFlags&LOOK_CR)?"yes":"no");
2700 fossil_print("Has flag LOOK_LONE_CR: %s\n",
2701 (lookFlags&LOOK_LONE_CR)?"yes":"no");
2702 fossil_print("Has flag LOOK_LF: %s\n",(lookFlags&LOOK_LF)?"yes":"no");
2703 fossil_print("Has flag LOOK_LONE_LF: %s\n",
2704 (lookFlags&LOOK_LONE_LF)?"yes":"no");
2705 fossil_print("Has flag LOOK_CRLF: %s\n",(lookFlags&LOOK_CRLF)?"yes":"no");
2706 fossil_print("Has flag LOOK_LONG: %s\n",(lookFlags&LOOK_LONG)?"yes":"no");
2707 fossil_print("Has flag LOOK_INVALID: %s\n",
2708 (lookFlags&LOOK_INVALID)?"yes":"no");
2709 fossil_print("Has flag LOOK_ODD: %s\n",(lookFlags&LOOK_ODD)?"yes":"no");
2710 fossil_print("Has flag LOOK_SHORT: %s\n",(lookFlags&LOOK_SHORT)?"yes":"no");
2711 blob_reset(&blob);
2712 }
2713
2714 DDED src/lookslike.c
--- src/diff.c
+++ src/diff.c
@@ -54,41 +54,17 @@
54 "cannot compute difference between symlink and regular file\n"
55
56 #define DIFF_TOO_MANY_CHANGES \
57 "more than 10,000 changes\n"
58
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
59 /*
60 ** Maximum length of a line in a text file, in bytes. (2**13 = 8192 bytes)
61 */
62 #define LENGTH_MASK_SZ 13
63 #define LENGTH_MASK ((1<<LENGTH_MASK_SZ)-1)
64
65 #endif /* INTERFACE */
66
67 /*
68 ** Information about each line of a file being diffed.
69 **
70 ** The lower LENGTH_MASK_SZ bits of the hash (DLine.h) are the length
@@ -201,282 +177,10 @@
177 /* Return results */
178 *pnLine = nLine;
179 return a;
180 }
181
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
182 /*
183 ** Return true if two DLine elements are identical.
184 */
185 static int same_dline(DLine *pA, DLine *pB){
186 return pA->h==pB->h && memcmp(pA->z,pB->z,pA->h & LENGTH_MASK)==0;
@@ -2653,60 +2357,5 @@
2357 zPrefix[0] = 0;
2358 }
2359 fossil_print("%21s %4d: %.*s\n", zPrefix, i+1, n, z);
2360 }
2361 }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2362
2363 DDED src/lookslike.c
--- a/src/lookslike.c
+++ b/src/lookslike.c
@@ -0,0 +1,119 @@
1
+utf8((blob), LOOK_BINARY, 0) & LOOK_BINARY) != LOOK_NONE)
2
+
3
+/*
4
+** Output flags for the looks_like_utf8() and looks_like_utf16() routines used
5
+** to convey status information about the blob content.
6
+*/
7
+#define LOOK_NONE ((int)0x00000000) /* Nothing special was found. */
8
+#define LOOK_NUL ((int)0x00000001) /* One or more Nfossil_isalnumne LOOK_NUL ((int)0x00000001) /* One or more Nutf8((blob), Lz[i+n]!=0&&SQL. This is only a
9
+** high-level check, not intended to be used for any application-level
10
+** logic other than in defense against spiders in limited context((blob), LOOK_BINARY, 0) & LOOK_BINARY) != LOOK_NONE)
11
+
12
+/*
13
+** Output flags for the looks_like_utf8() and looks_like_utf16() routines used
14
+** to convey status information about the blob content.
15
+*/
16
+#define LOOK_NONE ((int)0x00000000) /* Nothing special was found. */
17
+#define LOOK_NUL ((int)0x00000001) /* One or more Nfossil_isalnumne LOOK_NUL ((int)0x00000001) /* One or more Nutf8((blob), LRY, 0) & LOOK_BINARY) != LOOK_NONE)
18
+
19
+/*
20
+** Output flags for the looks_like_utf8() and looks_like_utf16() routines used
21
+** to convey status information about the blob content.
22
+*/
23
+#define LOOK_NONE ((int)0x00000000) /* Nothing special was found. */
24
+#define LOOK_NUL ((int)0x00000001) /* One or more Nfossil_isalnumne LOOK_NUL ((int)0x00000001) /* One or more Nutf8((blob), Lmight_be_sql(cCR tatus i10ormation a02LOOK_BINARY, 0) & LOOK_BI were LOOK_NUL ((int)0x00LONE_CR 20d ") || L(" or ")
25
+ /* ^^^^^ F tatus i10ormation a08/* One or more Nfossil_is were LOOK_NUL ((int)0x00LONE_LF ((int)0x00000010 ")
26
+ /* ^^^^^ no=08ere LOOK_NUL ((/LF paiLF ((int)0x00000010") || L20F ((int)0x00000010") || L("updaten 0;
27
+#define L(GLOB1" andf8() an88((blob), LOO4f8() and looks_like_utf16() routines used
28
+** to 2onvey status i10ormation a8efine LOOK_NONE ((in04#define LOOK_NONE ((int)0x0000000020/* Nothing sp10ial was found. */
29
+#08fine LOOK_NUL ((int)0x00000001) /* One or more N20ssil_isalnumne LOOK_NUL ((int)0x00000001) /* One or more Nutf8((blob), Lz[i+n]!=0&&SQL. This is only aited context((blob), LOOK_BINARY, 0)define LOOK_CR [i+n]!=0&&SQL. This is onlCRLFere LOOK_ne or more Nfossil_isalnumne LOOK_NUL ((int)0x00000001) /* One or more Nutf8((blob), Lz[i+n]!=0&&SQL. This is only aited context((blob), LOOK_BINARY, 0) & LOOK_BINARY) != LOOK_NONE)
30
+
31
+/*
32
+** Output flags for the looks_like_utf8() and looks_like_utf16() routines used
33
+** to convey status information about the blob content.
34
+*/
35
+#define LOOK_NONE ((int)0x00000000) /* Nothing special was found. */
36
+#define LOOK_NUL ((int)0x00000001) /* One or more Nfossil_isalnumne LOOK_NUL ((int)0x00000001) /* One or more Nutf8((blob), LRY, 0) & LOOK_BINARY) != LOOK_NONE)
37
+
38
+/*
39
+** Output flags for the looks_like_utf8() and looks_like_utf16() routines used
40
+** to convey status information about the blob content.
41
+*/
42
+#define LOOK_NONE ((int)0x00000000) /* Nothing special was found. */
43
+#define LOOK_NUL ((int)0x00000001) /* One or more Nfossil_isalnumne LOOK_NUL ((int)0x00000001) /* One or more Nutf8((blob), Lmight_be_sql(const char *zTxt){
44
+ if( zTxt==0 || zTxt[0]==0 ) return 0;
45
+#define L(GLOB) 0==sqlite3_strlike("%" GLOB "%",zTxt, '%')
46
+ return L(";") || L("'")
47
+ || L("select") || L("order") || L("drop")
48
+ || L(" and ") || L(" or ")
49
+ /* ^^^^^ noting that \n and \t should also be checked */
50
+ || L("null") || L("delete") || L("update")
51
+ |;<num> Repeatest_looks_like_utflooks_like_utf_testshort *z = (unsigned short1]==0possible UTF-32. */
52
+ if( z[0]z[0]==0xfffeutf8((blob), LOOK_BINARY, 0) & LOOK_BINARY) != LOOK_NONE)
53
+
54
+/*
55
+** Output flflags |= LOOK_CR;
56
+F | flags |= LOOK_LF; | flags |= LOOK_CR;flags |= LOOK_CR;
57
+F | flags |= LOOK_LF; | flags |= LOOK_CR;f8() and looks_like_utf16() roututf8((blob), LOOKf8() and looks_like_utf16() routines used
58
+** to convey status information about the blob content.
59
+*/
60
+#define LOOK_NONE ((int)0x00000000) /* Nothing special was found. */
61
+#define LOOK_NUL ((int)0x00000001) /* One or more Nfossil_isalnumne LOOK_NUL ((int)0x00000001) /* One or more Nutf8((blobflags |= LOOK_CR;(blob), Lz[i+n]!=0&&SQL. This is only a
62
+** high-level check, not intended to be used for any application-level
63
+** logic other tMore chars, next char is--n>0() and flags |= LOOK_LF; | * to convey status informatiBF LOOK_BINARY) != nformationBF LOOK_BINARY) != LOO((int)0x00000000) /* NothingBF LOOK_BINARY) != int)0x0000BF LOOK_BINARY) != LOOK ((int)0x00000001) /* One BF LOOK_BINARY) != ),flags |= LOOK_CR;
64
+ K_CR CRLFurn 0;
65
+#define L(GLOB) 0=LF (rop")
66
+ || L(" andf8() an88((blob), LOOKf8() and looks_like_utf16() routines used
67
+** to convey status i10ormation about the blob content.
68
+*/
69
+#define LOOK_NONE ((int)0x0000000020More chars, next char is0/* Nothing special was found. */
70
+#define LOOK_NUL , c2;
71
+ if( c2>=0xC0 ){
72
+ *def = &lb_tab[(2*c2)-0x180];
73
+ if( c2>=0xe80 ){
74
+ if( ((c2<0xc2) || (c2>=0xf4) || ((c&0xc0)!=0x80)) &&
75
+ (((c2!=0xf4) || (c>=0x90)) &c = (c2 >= 0xe0) ? (c2<<1)+1 : ' '|flags |= LOOK_CR;
76
+ intended to be used for any application-level
77
+** logic other than in defense against spiders F | flags |= LOOK_LF; | * to convey status informat** to convey status information about the blob content.
78
+*/
79
+#define LOOK_NONE ((int)0x00000000) /* Nothing special was found. */
80
+#define LOOK_NUL ((int)0x00000001) /* One or more Nfossil_isalnumne LOOK_NUL ((int)0x00000001) /* One or more Nutf8((blob), Lz[i+n]!=0&&SQL. This is only a
81
+** high-level check, not intended to be used for any application-level
82
+** logic other than in defense against spiders in limited context((blob), LOOK_BINARY, 0) & LOOK_BINARY) != LOOK_NONE)
83
+
84
+/*
85
+** Output flags for the looks_like_utf8() and looks_like_utf16() routines used
86
+** to convey status information about the blob content.
87
+*/
88
+#define LOOK_NONE ((int)0((blob), LOOK_BINARY, 0) & LO{
89
+ *def || (c> ){
90
+ return 1 }c>=0x8tf8((blob), LOOK_BINARY, 0) & LOOK_BINARY) != LOOK_NONE)
91
+
92
+/*
93
+** Output flags for the looks_like_utf8() and looks_like_utf16() routines used
94
+** to convey status information about the blob content.
95
+*/
96
+#define LOOK_NONE ((int)0x00000000) /* Nothing special was found. */
97
+#define LOOK_NUL ((int)0x00000001) /* One or more Nfossil_isalnumne LOOK_NUL ((int)0x00000001) /* One or more Nutf8((blob), Lz[i+n]!=0&&SQL. This is only a
98
+** high-level check, not intended to be used for any application-level
99
+** logic other than in defense against spiders in limited context((blob), LOOK_BINARY, 0) & LOOK_BINARY) != LOOK_NONE)
100
+
101
+/*
102
+** Output flags for the looks_like_utf8() and looks_like_utf16() routines used
103
+** to convey status information about the blob content.
104
+*/
105
+#define LOOK_NONE ((int)0x00000000) /* Nothing special was found. */
106
+#define LOOK_NUL ((int)0x00000001) /* One or more Nfossil_isalnumne LOOKY, 0) & LOOK_BINARY) }utf8((blob), LOOKK_BINARY, 0) & LOOK_BINARY) != LOOK_NONE)
107
+
108
+/*
109
+** Output flags for the looks_like_utf8() and looks_like_utf16() routines used
110
+** to convey status information about the blob content.
111
+*/
112
+#define LOOK_NONE ((int)0x00000000) /* Nothing special was found. */
113
+#define LOOK_NUL ((int)0x00000001) /* One or more Nfossil_isalnumne LOOK_NUL ((int)0x00000001) /* One or more Nutf8((blob), Lz[i+n]!=0&&SQL. This is o1if( flags&stopFlags ) break;
114
+ n -= sizeof(WCHAR_T);
115
+ if( n< break/*bRevUnicodefUtf16((int)0x00000000) utf8((blob), LOOK_BINARY, 0) & LfUnicode = 0;
116
+ }else{
117
+&bRevUnicode) || fForceUtEF, 0xBB, 0xBFlookFlags = fUnicode ? :
118
+und. */
119
+#define
--- a/src/lookslike.c
+++ b/src/lookslike.c
@@ -0,0 +1,119 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
--- a/src/lookslike.c
+++ b/src/lookslike.c
@@ -0,0 +1,119 @@
1 utf8((blob), LOOK_BINARY, 0) & LOOK_BINARY) != LOOK_NONE)
2
3 /*
4 ** Output flags for the looks_like_utf8() and looks_like_utf16() routines used
5 ** to convey status information about the blob content.
6 */
7 #define LOOK_NONE ((int)0x00000000) /* Nothing special was found. */
8 #define LOOK_NUL ((int)0x00000001) /* One or more Nfossil_isalnumne LOOK_NUL ((int)0x00000001) /* One or more Nutf8((blob), Lz[i+n]!=0&&SQL. This is only a
9 ** high-level check, not intended to be used for any application-level
10 ** logic other than in defense against spiders in limited context((blob), LOOK_BINARY, 0) & LOOK_BINARY) != LOOK_NONE)
11
12 /*
13 ** Output flags for the looks_like_utf8() and looks_like_utf16() routines used
14 ** to convey status information about the blob content.
15 */
16 #define LOOK_NONE ((int)0x00000000) /* Nothing special was found. */
17 #define LOOK_NUL ((int)0x00000001) /* One or more Nfossil_isalnumne LOOK_NUL ((int)0x00000001) /* One or more Nutf8((blob), LRY, 0) & LOOK_BINARY) != LOOK_NONE)
18
19 /*
20 ** Output flags for the looks_like_utf8() and looks_like_utf16() routines used
21 ** to convey status information about the blob content.
22 */
23 #define LOOK_NONE ((int)0x00000000) /* Nothing special was found. */
24 #define LOOK_NUL ((int)0x00000001) /* One or more Nfossil_isalnumne LOOK_NUL ((int)0x00000001) /* One or more Nutf8((blob), Lmight_be_sql(cCR tatus i10ormation a02LOOK_BINARY, 0) & LOOK_BI were LOOK_NUL ((int)0x00LONE_CR 20d ") || L(" or ")
25 /* ^^^^^ F tatus i10ormation a08/* One or more Nfossil_is were LOOK_NUL ((int)0x00LONE_LF ((int)0x00000010 ")
26 /* ^^^^^ no=08ere LOOK_NUL ((/LF paiLF ((int)0x00000010") || L20F ((int)0x00000010") || L("updaten 0;
27 #define L(GLOB1" andf8() an88((blob), LOO4f8() and looks_like_utf16() routines used
28 ** to 2onvey status i10ormation a8efine LOOK_NONE ((in04#define LOOK_NONE ((int)0x0000000020/* Nothing sp10ial was found. */
29 #08fine LOOK_NUL ((int)0x00000001) /* One or more N20ssil_isalnumne LOOK_NUL ((int)0x00000001) /* One or more Nutf8((blob), Lz[i+n]!=0&&SQL. This is only aited context((blob), LOOK_BINARY, 0)define LOOK_CR [i+n]!=0&&SQL. This is onlCRLFere LOOK_ne or more Nfossil_isalnumne LOOK_NUL ((int)0x00000001) /* One or more Nutf8((blob), Lz[i+n]!=0&&SQL. This is only aited context((blob), LOOK_BINARY, 0) & LOOK_BINARY) != LOOK_NONE)
30
31 /*
32 ** Output flags for the looks_like_utf8() and looks_like_utf16() routines used
33 ** to convey status information about the blob content.
34 */
35 #define LOOK_NONE ((int)0x00000000) /* Nothing special was found. */
36 #define LOOK_NUL ((int)0x00000001) /* One or more Nfossil_isalnumne LOOK_NUL ((int)0x00000001) /* One or more Nutf8((blob), LRY, 0) & LOOK_BINARY) != LOOK_NONE)
37
38 /*
39 ** Output flags for the looks_like_utf8() and looks_like_utf16() routines used
40 ** to convey status information about the blob content.
41 */
42 #define LOOK_NONE ((int)0x00000000) /* Nothing special was found. */
43 #define LOOK_NUL ((int)0x00000001) /* One or more Nfossil_isalnumne LOOK_NUL ((int)0x00000001) /* One or more Nutf8((blob), Lmight_be_sql(const char *zTxt){
44 if( zTxt==0 || zTxt[0]==0 ) return 0;
45 #define L(GLOB) 0==sqlite3_strlike("%" GLOB "%",zTxt, '%')
46 return L(";") || L("'")
47 || L("select") || L("order") || L("drop")
48 || L(" and ") || L(" or ")
49 /* ^^^^^ noting that \n and \t should also be checked */
50 || L("null") || L("delete") || L("update")
51 |;<num> Repeatest_looks_like_utflooks_like_utf_testshort *z = (unsigned short1]==0possible UTF-32. */
52 if( z[0]z[0]==0xfffeutf8((blob), LOOK_BINARY, 0) & LOOK_BINARY) != LOOK_NONE)
53
54 /*
55 ** Output flflags |= LOOK_CR;
56 F | flags |= LOOK_LF; | flags |= LOOK_CR;flags |= LOOK_CR;
57 F | flags |= LOOK_LF; | flags |= LOOK_CR;f8() and looks_like_utf16() roututf8((blob), LOOKf8() and looks_like_utf16() routines used
58 ** to convey status information about the blob content.
59 */
60 #define LOOK_NONE ((int)0x00000000) /* Nothing special was found. */
61 #define LOOK_NUL ((int)0x00000001) /* One or more Nfossil_isalnumne LOOK_NUL ((int)0x00000001) /* One or more Nutf8((blobflags |= LOOK_CR;(blob), Lz[i+n]!=0&&SQL. This is only a
62 ** high-level check, not intended to be used for any application-level
63 ** logic other tMore chars, next char is--n>0() and flags |= LOOK_LF; | * to convey status informatiBF LOOK_BINARY) != nformationBF LOOK_BINARY) != LOO((int)0x00000000) /* NothingBF LOOK_BINARY) != int)0x0000BF LOOK_BINARY) != LOOK ((int)0x00000001) /* One BF LOOK_BINARY) != ),flags |= LOOK_CR;
64 K_CR CRLFurn 0;
65 #define L(GLOB) 0=LF (rop")
66 || L(" andf8() an88((blob), LOOKf8() and looks_like_utf16() routines used
67 ** to convey status i10ormation about the blob content.
68 */
69 #define LOOK_NONE ((int)0x0000000020More chars, next char is0/* Nothing special was found. */
70 #define LOOK_NUL , c2;
71 if( c2>=0xC0 ){
72 *def = &lb_tab[(2*c2)-0x180];
73 if( c2>=0xe80 ){
74 if( ((c2<0xc2) || (c2>=0xf4) || ((c&0xc0)!=0x80)) &&
75 (((c2!=0xf4) || (c>=0x90)) &c = (c2 >= 0xe0) ? (c2<<1)+1 : ' '|flags |= LOOK_CR;
76 intended to be used for any application-level
77 ** logic other than in defense against spiders F | flags |= LOOK_LF; | * to convey status informat** to convey status information about the blob content.
78 */
79 #define LOOK_NONE ((int)0x00000000) /* Nothing special was found. */
80 #define LOOK_NUL ((int)0x00000001) /* One or more Nfossil_isalnumne LOOK_NUL ((int)0x00000001) /* One or more Nutf8((blob), Lz[i+n]!=0&&SQL. This is only a
81 ** high-level check, not intended to be used for any application-level
82 ** logic other than in defense against spiders in limited context((blob), LOOK_BINARY, 0) & LOOK_BINARY) != LOOK_NONE)
83
84 /*
85 ** Output flags for the looks_like_utf8() and looks_like_utf16() routines used
86 ** to convey status information about the blob content.
87 */
88 #define LOOK_NONE ((int)0((blob), LOOK_BINARY, 0) & LO{
89 *def || (c> ){
90 return 1 }c>=0x8tf8((blob), LOOK_BINARY, 0) & LOOK_BINARY) != LOOK_NONE)
91
92 /*
93 ** Output flags for the looks_like_utf8() and looks_like_utf16() routines used
94 ** to convey status information about the blob content.
95 */
96 #define LOOK_NONE ((int)0x00000000) /* Nothing special was found. */
97 #define LOOK_NUL ((int)0x00000001) /* One or more Nfossil_isalnumne LOOK_NUL ((int)0x00000001) /* One or more Nutf8((blob), Lz[i+n]!=0&&SQL. This is only a
98 ** high-level check, not intended to be used for any application-level
99 ** logic other than in defense against spiders in limited context((blob), LOOK_BINARY, 0) & LOOK_BINARY) != LOOK_NONE)
100
101 /*
102 ** Output flags for the looks_like_utf8() and looks_like_utf16() routines used
103 ** to convey status information about the blob content.
104 */
105 #define LOOK_NONE ((int)0x00000000) /* Nothing special was found. */
106 #define LOOK_NUL ((int)0x00000001) /* One or more Nfossil_isalnumne LOOKY, 0) & LOOK_BINARY) }utf8((blob), LOOKK_BINARY, 0) & LOOK_BINARY) != LOOK_NONE)
107
108 /*
109 ** Output flags for the looks_like_utf8() and looks_like_utf16() routines used
110 ** to convey status information about the blob content.
111 */
112 #define LOOK_NONE ((int)0x00000000) /* Nothing special was found. */
113 #define LOOK_NUL ((int)0x00000001) /* One or more Nfossil_isalnumne LOOK_NUL ((int)0x00000001) /* One or more Nutf8((blob), Lz[i+n]!=0&&SQL. This is o1if( flags&stopFlags ) break;
114 n -= sizeof(WCHAR_T);
115 if( n< break/*bRevUnicodefUtf16((int)0x00000000) utf8((blob), LOOK_BINARY, 0) & LfUnicode = 0;
116 }else{
117 &bRevUnicode) || fForceUtEF, 0xBB, 0xBFlookFlags = fUnicode ? :
118 und. */
119 #define
+11 -1
--- src/main.mk
+++ src/main.mk
@@ -67,10 +67,11 @@
6767
$(SRCDIR)/json_timeline.c \
6868
$(SRCDIR)/json_user.c \
6969
$(SRCDIR)/json_wiki.c \
7070
$(SRCDIR)/leaf.c \
7171
$(SRCDIR)/login.c \
72
+ $(SRCDIR)/lookslike.c \
7273
$(SRCDIR)/main.c \
7374
$(SRCDIR)/manifest.c \
7475
$(SRCDIR)/markdown.c \
7576
$(SRCDIR)/markdown_html.c \
7677
$(SRCDIR)/md5.c \
@@ -175,10 +176,11 @@
175176
$(OBJDIR)/json_timeline_.c \
176177
$(OBJDIR)/json_user_.c \
177178
$(OBJDIR)/json_wiki_.c \
178179
$(OBJDIR)/leaf_.c \
179180
$(OBJDIR)/login_.c \
181
+ $(OBJDIR)/lookslike_.c \
180182
$(OBJDIR)/main_.c \
181183
$(OBJDIR)/manifest_.c \
182184
$(OBJDIR)/markdown_.c \
183185
$(OBJDIR)/markdown_html_.c \
184186
$(OBJDIR)/md5_.c \
@@ -283,10 +285,11 @@
283285
$(OBJDIR)/json_timeline.o \
284286
$(OBJDIR)/json_user.o \
285287
$(OBJDIR)/json_wiki.o \
286288
$(OBJDIR)/leaf.o \
287289
$(OBJDIR)/login.o \
290
+ $(OBJDIR)/lookslike.o \
288291
$(OBJDIR)/main.o \
289292
$(OBJDIR)/manifest.o \
290293
$(OBJDIR)/markdown.o \
291294
$(OBJDIR)/markdown_html.o \
292295
$(OBJDIR)/md5.o \
@@ -402,11 +405,11 @@
402405
403406
404407
$(OBJDIR)/page_index.h: $(TRANS_SRC) $(OBJDIR)/mkindex
405408
$(OBJDIR)/mkindex $(TRANS_SRC) >$@
406409
$(OBJDIR)/headers: $(OBJDIR)/page_index.h $(OBJDIR)/makeheaders $(OBJDIR)/VERSION.h
407
- $(OBJDIR)/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_status_.c:$(OBJDIR)/json_status.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)/markdown_.c:$(OBJDIR)/markdown.h $(OBJDIR)/markdown_html_.c:$(OBJDIR)/markdown_html.h $(OBJDIR)/md5_.c:$(OBJDIR)/md5.h $(OBJDIR)/merge_.c:$(OBJDIR)/merge.h $(OBJDIR)/merge3_.c:$(OBJDIR)/merge3.h $(OBJDIR)/moderate_.c:$(OBJDIR)/moderate.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)/regexp_.c:$(OBJDIR)/regexp.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)/unicode_.c:$(OBJDIR)/unicode.h $(OBJDIR)/update_.c:$(OBJDIR)/update.h $(OBJDIR)/url_.c:$(OBJDIR)/url.h $(OBJDIR)/user_.c:$(OBJDIR)/user.h $(OBJDIR)/utf8_.c:$(OBJDIR)/utf8.h $(OBJDIR)/util_.c:$(OBJDIR)/util.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
410
+ $(OBJDIR)/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_status_.c:$(OBJDIR)/json_status.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)/lookslike_.c:$(OBJDIR)/lookslike.h $(OBJDIR)/main_.c:$(OBJDIR)/main.h $(OBJDIR)/manifest_.c:$(OBJDIR)/manifest.h $(OBJDIR)/markdown_.c:$(OBJDIR)/markdown.h $(OBJDIR)/markdown_html_.c:$(OBJDIR)/markdown_html.h $(OBJDIR)/md5_.c:$(OBJDIR)/md5.h $(OBJDIR)/merge_.c:$(OBJDIR)/merge.h $(OBJDIR)/merge3_.c:$(OBJDIR)/merge3.h $(OBJDIR)/moderate_.c:$(OBJDIR)/moderate.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)/regexp_.c:$(OBJDIR)/regexp.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)/unicode_.c:$(OBJDIR)/unicode.h $(OBJDIR)/update_.c:$(OBJDIR)/update.h $(OBJDIR)/url_.c:$(OBJDIR)/url.h $(OBJDIR)/user_.c:$(OBJDIR)/user.h $(OBJDIR)/utf8_.c:$(OBJDIR)/utf8.h $(OBJDIR)/util_.c:$(OBJDIR)/util.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
408411
touch $(OBJDIR)/headers
409412
$(OBJDIR)/headers: Makefile
410413
$(OBJDIR)/json.o $(OBJDIR)/json_artifact.o $(OBJDIR)/json_branch.o $(OBJDIR)/json_config.o $(OBJDIR)/json_diff.o $(OBJDIR)/json_dir.o $(OBJDIR)/json_finfo.o $(OBJDIR)/json_login.o $(OBJDIR)/json_query.o $(OBJDIR)/json_report.o $(OBJDIR)/json_status.o $(OBJDIR)/json_tag.o $(OBJDIR)/json_timeline.o $(OBJDIR)/json_user.o $(OBJDIR)/json_wiki.o : $(SRCDIR)/json_detail.h
411414
Makefile:
412415
$(OBJDIR)/add_.c: $(SRCDIR)/add.c $(OBJDIR)/translate
@@ -792,10 +795,17 @@
792795
793796
$(OBJDIR)/login.o: $(OBJDIR)/login_.c $(OBJDIR)/login.h $(SRCDIR)/config.h
794797
$(XTCC) -o $(OBJDIR)/login.o -c $(OBJDIR)/login_.c
795798
796799
$(OBJDIR)/login.h: $(OBJDIR)/headers
800
+$(OBJDIR)/lookslike_.c: $(SRCDIR)/lookslike.c $(OBJDIR)/translate
801
+ $(OBJDIR)/translate $(SRCDIR)/lookslike.c >$(OBJDIR)/lookslike_.c
802
+
803
+$(OBJDIR)/lookslike.o: $(OBJDIR)/lookslike_.c $(OBJDIR)/lookslike.h $(SRCDIR)/config.h
804
+ $(XTCC) -o $(OBJDIR)/lookslike.o -c $(OBJDIR)/lookslike_.c
805
+
806
+$(OBJDIR)/lookslike.h: $(OBJDIR)/headers
797807
$(OBJDIR)/main_.c: $(SRCDIR)/main.c $(OBJDIR)/translate
798808
$(OBJDIR)/translate $(SRCDIR)/main.c >$(OBJDIR)/main_.c
799809
800810
$(OBJDIR)/main.o: $(OBJDIR)/main_.c $(OBJDIR)/main.h $(OBJDIR)/page_index.h $(SRCDIR)/config.h
801811
$(XTCC) -o $(OBJDIR)/main.o -c $(OBJDIR)/main_.c
802812
--- src/main.mk
+++ src/main.mk
@@ -67,10 +67,11 @@
67 $(SRCDIR)/json_timeline.c \
68 $(SRCDIR)/json_user.c \
69 $(SRCDIR)/json_wiki.c \
70 $(SRCDIR)/leaf.c \
71 $(SRCDIR)/login.c \
 
72 $(SRCDIR)/main.c \
73 $(SRCDIR)/manifest.c \
74 $(SRCDIR)/markdown.c \
75 $(SRCDIR)/markdown_html.c \
76 $(SRCDIR)/md5.c \
@@ -175,10 +176,11 @@
175 $(OBJDIR)/json_timeline_.c \
176 $(OBJDIR)/json_user_.c \
177 $(OBJDIR)/json_wiki_.c \
178 $(OBJDIR)/leaf_.c \
179 $(OBJDIR)/login_.c \
 
180 $(OBJDIR)/main_.c \
181 $(OBJDIR)/manifest_.c \
182 $(OBJDIR)/markdown_.c \
183 $(OBJDIR)/markdown_html_.c \
184 $(OBJDIR)/md5_.c \
@@ -283,10 +285,11 @@
283 $(OBJDIR)/json_timeline.o \
284 $(OBJDIR)/json_user.o \
285 $(OBJDIR)/json_wiki.o \
286 $(OBJDIR)/leaf.o \
287 $(OBJDIR)/login.o \
 
288 $(OBJDIR)/main.o \
289 $(OBJDIR)/manifest.o \
290 $(OBJDIR)/markdown.o \
291 $(OBJDIR)/markdown_html.o \
292 $(OBJDIR)/md5.o \
@@ -402,11 +405,11 @@
402
403
404 $(OBJDIR)/page_index.h: $(TRANS_SRC) $(OBJDIR)/mkindex
405 $(OBJDIR)/mkindex $(TRANS_SRC) >$@
406 $(OBJDIR)/headers: $(OBJDIR)/page_index.h $(OBJDIR)/makeheaders $(OBJDIR)/VERSION.h
407 $(OBJDIR)/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_status_.c:$(OBJDIR)/json_status.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)/markdown_.c:$(OBJDIR)/markdown.h $(OBJDIR)/markdown_html_.c:$(OBJDIR)/markdown_html.h $(OBJDIR)/md5_.c:$(OBJDIR)/md5.h $(OBJDIR)/merge_.c:$(OBJDIR)/merge.h $(OBJDIR)/merge3_.c:$(OBJDIR)/merge3.h $(OBJDIR)/moderate_.c:$(OBJDIR)/moderate.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)/regexp_.c:$(OBJDIR)/regexp.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)/unicode_.c:$(OBJDIR)/unicode.h $(OBJDIR)/update_.c:$(OBJDIR)/update.h $(OBJDIR)/url_.c:$(OBJDIR)/url.h $(OBJDIR)/user_.c:$(OBJDIR)/user.h $(OBJDIR)/utf8_.c:$(OBJDIR)/utf8.h $(OBJDIR)/util_.c:$(OBJDIR)/util.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
408 touch $(OBJDIR)/headers
409 $(OBJDIR)/headers: Makefile
410 $(OBJDIR)/json.o $(OBJDIR)/json_artifact.o $(OBJDIR)/json_branch.o $(OBJDIR)/json_config.o $(OBJDIR)/json_diff.o $(OBJDIR)/json_dir.o $(OBJDIR)/json_finfo.o $(OBJDIR)/json_login.o $(OBJDIR)/json_query.o $(OBJDIR)/json_report.o $(OBJDIR)/json_status.o $(OBJDIR)/json_tag.o $(OBJDIR)/json_timeline.o $(OBJDIR)/json_user.o $(OBJDIR)/json_wiki.o : $(SRCDIR)/json_detail.h
411 Makefile:
412 $(OBJDIR)/add_.c: $(SRCDIR)/add.c $(OBJDIR)/translate
@@ -792,10 +795,17 @@
792
793 $(OBJDIR)/login.o: $(OBJDIR)/login_.c $(OBJDIR)/login.h $(SRCDIR)/config.h
794 $(XTCC) -o $(OBJDIR)/login.o -c $(OBJDIR)/login_.c
795
796 $(OBJDIR)/login.h: $(OBJDIR)/headers
 
 
 
 
 
 
 
797 $(OBJDIR)/main_.c: $(SRCDIR)/main.c $(OBJDIR)/translate
798 $(OBJDIR)/translate $(SRCDIR)/main.c >$(OBJDIR)/main_.c
799
800 $(OBJDIR)/main.o: $(OBJDIR)/main_.c $(OBJDIR)/main.h $(OBJDIR)/page_index.h $(SRCDIR)/config.h
801 $(XTCC) -o $(OBJDIR)/main.o -c $(OBJDIR)/main_.c
802
--- src/main.mk
+++ src/main.mk
@@ -67,10 +67,11 @@
67 $(SRCDIR)/json_timeline.c \
68 $(SRCDIR)/json_user.c \
69 $(SRCDIR)/json_wiki.c \
70 $(SRCDIR)/leaf.c \
71 $(SRCDIR)/login.c \
72 $(SRCDIR)/lookslike.c \
73 $(SRCDIR)/main.c \
74 $(SRCDIR)/manifest.c \
75 $(SRCDIR)/markdown.c \
76 $(SRCDIR)/markdown_html.c \
77 $(SRCDIR)/md5.c \
@@ -175,10 +176,11 @@
176 $(OBJDIR)/json_timeline_.c \
177 $(OBJDIR)/json_user_.c \
178 $(OBJDIR)/json_wiki_.c \
179 $(OBJDIR)/leaf_.c \
180 $(OBJDIR)/login_.c \
181 $(OBJDIR)/lookslike_.c \
182 $(OBJDIR)/main_.c \
183 $(OBJDIR)/manifest_.c \
184 $(OBJDIR)/markdown_.c \
185 $(OBJDIR)/markdown_html_.c \
186 $(OBJDIR)/md5_.c \
@@ -283,10 +285,11 @@
285 $(OBJDIR)/json_timeline.o \
286 $(OBJDIR)/json_user.o \
287 $(OBJDIR)/json_wiki.o \
288 $(OBJDIR)/leaf.o \
289 $(OBJDIR)/login.o \
290 $(OBJDIR)/lookslike.o \
291 $(OBJDIR)/main.o \
292 $(OBJDIR)/manifest.o \
293 $(OBJDIR)/markdown.o \
294 $(OBJDIR)/markdown_html.o \
295 $(OBJDIR)/md5.o \
@@ -402,11 +405,11 @@
405
406
407 $(OBJDIR)/page_index.h: $(TRANS_SRC) $(OBJDIR)/mkindex
408 $(OBJDIR)/mkindex $(TRANS_SRC) >$@
409 $(OBJDIR)/headers: $(OBJDIR)/page_index.h $(OBJDIR)/makeheaders $(OBJDIR)/VERSION.h
410 $(OBJDIR)/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_status_.c:$(OBJDIR)/json_status.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)/lookslike_.c:$(OBJDIR)/lookslike.h $(OBJDIR)/main_.c:$(OBJDIR)/main.h $(OBJDIR)/manifest_.c:$(OBJDIR)/manifest.h $(OBJDIR)/markdown_.c:$(OBJDIR)/markdown.h $(OBJDIR)/markdown_html_.c:$(OBJDIR)/markdown_html.h $(OBJDIR)/md5_.c:$(OBJDIR)/md5.h $(OBJDIR)/merge_.c:$(OBJDIR)/merge.h $(OBJDIR)/merge3_.c:$(OBJDIR)/merge3.h $(OBJDIR)/moderate_.c:$(OBJDIR)/moderate.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)/regexp_.c:$(OBJDIR)/regexp.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)/unicode_.c:$(OBJDIR)/unicode.h $(OBJDIR)/update_.c:$(OBJDIR)/update.h $(OBJDIR)/url_.c:$(OBJDIR)/url.h $(OBJDIR)/user_.c:$(OBJDIR)/user.h $(OBJDIR)/utf8_.c:$(OBJDIR)/utf8.h $(OBJDIR)/util_.c:$(OBJDIR)/util.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
411 touch $(OBJDIR)/headers
412 $(OBJDIR)/headers: Makefile
413 $(OBJDIR)/json.o $(OBJDIR)/json_artifact.o $(OBJDIR)/json_branch.o $(OBJDIR)/json_config.o $(OBJDIR)/json_diff.o $(OBJDIR)/json_dir.o $(OBJDIR)/json_finfo.o $(OBJDIR)/json_login.o $(OBJDIR)/json_query.o $(OBJDIR)/json_report.o $(OBJDIR)/json_status.o $(OBJDIR)/json_tag.o $(OBJDIR)/json_timeline.o $(OBJDIR)/json_user.o $(OBJDIR)/json_wiki.o : $(SRCDIR)/json_detail.h
414 Makefile:
415 $(OBJDIR)/add_.c: $(SRCDIR)/add.c $(OBJDIR)/translate
@@ -792,10 +795,17 @@
795
796 $(OBJDIR)/login.o: $(OBJDIR)/login_.c $(OBJDIR)/login.h $(SRCDIR)/config.h
797 $(XTCC) -o $(OBJDIR)/login.o -c $(OBJDIR)/login_.c
798
799 $(OBJDIR)/login.h: $(OBJDIR)/headers
800 $(OBJDIR)/lookslike_.c: $(SRCDIR)/lookslike.c $(OBJDIR)/translate
801 $(OBJDIR)/translate $(SRCDIR)/lookslike.c >$(OBJDIR)/lookslike_.c
802
803 $(OBJDIR)/lookslike.o: $(OBJDIR)/lookslike_.c $(OBJDIR)/lookslike.h $(SRCDIR)/config.h
804 $(XTCC) -o $(OBJDIR)/lookslike.o -c $(OBJDIR)/lookslike_.c
805
806 $(OBJDIR)/lookslike.h: $(OBJDIR)/headers
807 $(OBJDIR)/main_.c: $(SRCDIR)/main.c $(OBJDIR)/translate
808 $(OBJDIR)/translate $(SRCDIR)/main.c >$(OBJDIR)/main_.c
809
810 $(OBJDIR)/main.o: $(OBJDIR)/main_.c $(OBJDIR)/main.h $(OBJDIR)/page_index.h $(SRCDIR)/config.h
811 $(XTCC) -o $(OBJDIR)/main.o -c $(OBJDIR)/main_.c
812
--- src/makemake.tcl
+++ src/makemake.tcl
@@ -70,10 +70,11 @@
7070
json_timeline
7171
json_user
7272
json_wiki
7373
leaf
7474
login
75
+ lookslike
7576
main
7677
manifest
7778
markdown
7879
markdown_html
7980
md5
8081
--- src/makemake.tcl
+++ src/makemake.tcl
@@ -70,10 +70,11 @@
70 json_timeline
71 json_user
72 json_wiki
73 leaf
74 login
 
75 main
76 manifest
77 markdown
78 markdown_html
79 md5
80
--- src/makemake.tcl
+++ src/makemake.tcl
@@ -70,10 +70,11 @@
70 json_timeline
71 json_user
72 json_wiki
73 leaf
74 login
75 lookslike
76 main
77 manifest
78 markdown
79 markdown_html
80 md5
81
+10 -4
--- win/Makefile.dmc
+++ win/Makefile.dmc
@@ -26,13 +26,13 @@
2626
TCC = $(DMDIR)\bin\dmc $(CFLAGS) $(DMCDEF) $(SSL) $(INCL)
2727
LIBS = $(DMDIR)\extra\lib\ zlib wsock32 advapi32
2828
2929
SQLITE_OPTIONS = -DSQLITE_OMIT_LOAD_EXTENSION=1 -DSQLITE_THREADSAFE=0 -DSQLITE_DEFAULT_FILE_FORMAT=4 -DSQLITE_ENABLE_STAT3 -Dlocaltime=fossil_localtime -DSQLITE_ENABLE_LOCKING_STYLE=0
3030
31
-SRC = add_.c allrepo_.c attach_.c bag_.c bisect_.c blob_.c branch_.c browse_.c captcha_.c cgi_.c checkin_.c checkout_.c clearsign_.c clone_.c comformat_.c configure_.c content_.c db_.c delta_.c deltacmd_.c descendants_.c diff_.c diffcmd_.c doc_.c encode_.c event_.c export_.c file_.c finfo_.c glob_.c graph_.c gzip_.c http_.c http_socket_.c http_ssl_.c http_transport_.c import_.c info_.c json_.c json_artifact_.c json_branch_.c json_config_.c json_diff_.c json_dir_.c json_finfo_.c json_login_.c json_query_.c json_report_.c json_status_.c json_tag_.c json_timeline_.c json_user_.c json_wiki_.c leaf_.c login_.c main_.c manifest_.c markdown_.c markdown_html_.c md5_.c merge_.c merge3_.c moderate_.c name_.c path_.c pivot_.c popen_.c pqueue_.c printf_.c rebuild_.c regexp_.c report_.c rss_.c schema_.c search_.c setup_.c sha1_.c shun_.c skins_.c sqlcmd_.c stash_.c stat_.c style_.c sync_.c tag_.c tar_.c th_main_.c timeline_.c tkt_.c tktsetup_.c undo_.c unicode_.c update_.c url_.c user_.c utf8_.c util_.c verify_.c vfile_.c wiki_.c wikiformat_.c winhttp_.c wysiwyg_.c xfer_.c xfersetup_.c zip_.c
31
+SRC = add_.c allrepo_.c attach_.c bag_.c bisect_.c blob_.c branch_.c browse_.c captcha_.c cgi_.c checkin_.c checkout_.c clearsign_.c clone_.c comformat_.c configure_.c content_.c db_.c delta_.c deltacmd_.c descendants_.c diff_.c diffcmd_.c doc_.c encode_.c event_.c export_.c file_.c finfo_.c glob_.c graph_.c gzip_.c http_.c http_socket_.c http_ssl_.c http_transport_.c import_.c info_.c json_.c json_artifact_.c json_branch_.c json_config_.c json_diff_.c json_dir_.c json_finfo_.c json_login_.c json_query_.c json_report_.c json_status_.c json_tag_.c json_timeline_.c json_user_.c json_wiki_.c leaf_.c login_.c lookslike_.c main_.c manifest_.c markdown_.c markdown_html_.c md5_.c merge_.c merge3_.c moderate_.c name_.c path_.c pivot_.c popen_.c pqueue_.c printf_.c rebuild_.c regexp_.c report_.c rss_.c schema_.c search_.c setup_.c sha1_.c shun_.c skins_.c sqlcmd_.c stash_.c stat_.c style_.c sync_.c tag_.c tar_.c th_main_.c timeline_.c tkt_.c tktsetup_.c undo_.c unicode_.c update_.c url_.c user_.c utf8_.c util_.c verify_.c vfile_.c wiki_.c wikiformat_.c winhttp_.c wysiwyg_.c xfer_.c xfersetup_.c zip_.c
3232
33
-OBJ = $(OBJDIR)\add$O $(OBJDIR)\allrepo$O $(OBJDIR)\attach$O $(OBJDIR)\bag$O $(OBJDIR)\bisect$O $(OBJDIR)\blob$O $(OBJDIR)\branch$O $(OBJDIR)\browse$O $(OBJDIR)\captcha$O $(OBJDIR)\cgi$O $(OBJDIR)\checkin$O $(OBJDIR)\checkout$O $(OBJDIR)\clearsign$O $(OBJDIR)\clone$O $(OBJDIR)\comformat$O $(OBJDIR)\configure$O $(OBJDIR)\content$O $(OBJDIR)\db$O $(OBJDIR)\delta$O $(OBJDIR)\deltacmd$O $(OBJDIR)\descendants$O $(OBJDIR)\diff$O $(OBJDIR)\diffcmd$O $(OBJDIR)\doc$O $(OBJDIR)\encode$O $(OBJDIR)\event$O $(OBJDIR)\export$O $(OBJDIR)\file$O $(OBJDIR)\finfo$O $(OBJDIR)\glob$O $(OBJDIR)\graph$O $(OBJDIR)\gzip$O $(OBJDIR)\http$O $(OBJDIR)\http_socket$O $(OBJDIR)\http_ssl$O $(OBJDIR)\http_transport$O $(OBJDIR)\import$O $(OBJDIR)\info$O $(OBJDIR)\json$O $(OBJDIR)\json_artifact$O $(OBJDIR)\json_branch$O $(OBJDIR)\json_config$O $(OBJDIR)\json_diff$O $(OBJDIR)\json_dir$O $(OBJDIR)\json_finfo$O $(OBJDIR)\json_login$O $(OBJDIR)\json_query$O $(OBJDIR)\json_report$O $(OBJDIR)\json_status$O $(OBJDIR)\json_tag$O $(OBJDIR)\json_timeline$O $(OBJDIR)\json_user$O $(OBJDIR)\json_wiki$O $(OBJDIR)\leaf$O $(OBJDIR)\login$O $(OBJDIR)\main$O $(OBJDIR)\manifest$O $(OBJDIR)\markdown$O $(OBJDIR)\markdown_html$O $(OBJDIR)\md5$O $(OBJDIR)\merge$O $(OBJDIR)\merge3$O $(OBJDIR)\moderate$O $(OBJDIR)\name$O $(OBJDIR)\path$O $(OBJDIR)\pivot$O $(OBJDIR)\popen$O $(OBJDIR)\pqueue$O $(OBJDIR)\printf$O $(OBJDIR)\rebuild$O $(OBJDIR)\regexp$O $(OBJDIR)\report$O $(OBJDIR)\rss$O $(OBJDIR)\schema$O $(OBJDIR)\search$O $(OBJDIR)\setup$O $(OBJDIR)\sha1$O $(OBJDIR)\shun$O $(OBJDIR)\skins$O $(OBJDIR)\sqlcmd$O $(OBJDIR)\stash$O $(OBJDIR)\stat$O $(OBJDIR)\style$O $(OBJDIR)\sync$O $(OBJDIR)\tag$O $(OBJDIR)\tar$O $(OBJDIR)\th_main$O $(OBJDIR)\timeline$O $(OBJDIR)\tkt$O $(OBJDIR)\tktsetup$O $(OBJDIR)\undo$O $(OBJDIR)\unicode$O $(OBJDIR)\update$O $(OBJDIR)\url$O $(OBJDIR)\user$O $(OBJDIR)\utf8$O $(OBJDIR)\util$O $(OBJDIR)\verify$O $(OBJDIR)\vfile$O $(OBJDIR)\wiki$O $(OBJDIR)\wikiformat$O $(OBJDIR)\winhttp$O $(OBJDIR)\wysiwyg$O $(OBJDIR)\xfer$O $(OBJDIR)\xfersetup$O $(OBJDIR)\zip$O $(OBJDIR)\shell$O $(OBJDIR)\sqlite3$O $(OBJDIR)\th$O $(OBJDIR)\th_lang$O
33
+OBJ = $(OBJDIR)\add$O $(OBJDIR)\allrepo$O $(OBJDIR)\attach$O $(OBJDIR)\bag$O $(OBJDIR)\bisect$O $(OBJDIR)\blob$O $(OBJDIR)\branch$O $(OBJDIR)\browse$O $(OBJDIR)\captcha$O $(OBJDIR)\cgi$O $(OBJDIR)\checkin$O $(OBJDIR)\checkout$O $(OBJDIR)\clearsign$O $(OBJDIR)\clone$O $(OBJDIR)\comformat$O $(OBJDIR)\configure$O $(OBJDIR)\content$O $(OBJDIR)\db$O $(OBJDIR)\delta$O $(OBJDIR)\deltacmd$O $(OBJDIR)\descendants$O $(OBJDIR)\diff$O $(OBJDIR)\diffcmd$O $(OBJDIR)\doc$O $(OBJDIR)\encode$O $(OBJDIR)\event$O $(OBJDIR)\export$O $(OBJDIR)\file$O $(OBJDIR)\finfo$O $(OBJDIR)\glob$O $(OBJDIR)\graph$O $(OBJDIR)\gzip$O $(OBJDIR)\http$O $(OBJDIR)\http_socket$O $(OBJDIR)\http_ssl$O $(OBJDIR)\http_transport$O $(OBJDIR)\import$O $(OBJDIR)\info$O $(OBJDIR)\json$O $(OBJDIR)\json_artifact$O $(OBJDIR)\json_branch$O $(OBJDIR)\json_config$O $(OBJDIR)\json_diff$O $(OBJDIR)\json_dir$O $(OBJDIR)\json_finfo$O $(OBJDIR)\json_login$O $(OBJDIR)\json_query$O $(OBJDIR)\json_report$O $(OBJDIR)\json_status$O $(OBJDIR)\json_tag$O $(OBJDIR)\json_timeline$O $(OBJDIR)\json_user$O $(OBJDIR)\json_wiki$O $(OBJDIR)\leaf$O $(OBJDIR)\login$O $(OBJDIR)\lookslike$O $(OBJDIR)\main$O $(OBJDIR)\manifest$O $(OBJDIR)\markdown$O $(OBJDIR)\markdown_html$O $(OBJDIR)\md5$O $(OBJDIR)\merge$O $(OBJDIR)\merge3$O $(OBJDIR)\moderate$O $(OBJDIR)\name$O $(OBJDIR)\path$O $(OBJDIR)\pivot$O $(OBJDIR)\popen$O $(OBJDIR)\pqueue$O $(OBJDIR)\printf$O $(OBJDIR)\rebuild$O $(OBJDIR)\regexp$O $(OBJDIR)\report$O $(OBJDIR)\rss$O $(OBJDIR)\schema$O $(OBJDIR)\search$O $(OBJDIR)\setup$O $(OBJDIR)\sha1$O $(OBJDIR)\shun$O $(OBJDIR)\skins$O $(OBJDIR)\sqlcmd$O $(OBJDIR)\stash$O $(OBJDIR)\stat$O $(OBJDIR)\style$O $(OBJDIR)\sync$O $(OBJDIR)\tag$O $(OBJDIR)\tar$O $(OBJDIR)\th_main$O $(OBJDIR)\timeline$O $(OBJDIR)\tkt$O $(OBJDIR)\tktsetup$O $(OBJDIR)\undo$O $(OBJDIR)\unicode$O $(OBJDIR)\update$O $(OBJDIR)\url$O $(OBJDIR)\user$O $(OBJDIR)\utf8$O $(OBJDIR)\util$O $(OBJDIR)\verify$O $(OBJDIR)\vfile$O $(OBJDIR)\wiki$O $(OBJDIR)\wikiformat$O $(OBJDIR)\winhttp$O $(OBJDIR)\wysiwyg$O $(OBJDIR)\xfer$O $(OBJDIR)\xfersetup$O $(OBJDIR)\zip$O $(OBJDIR)\shell$O $(OBJDIR)\sqlite3$O $(OBJDIR)\th$O $(OBJDIR)\th_lang$O
3434
3535
3636
RC=$(DMDIR)\bin\rcc
3737
RCFLAGS=-32 -w1 -I$(SRCDIR) /D__DMC__
3838
@@ -46,11 +46,11 @@
4646
4747
$(OBJDIR)\fossil.res: $B\win\fossil.rc
4848
$(RC) $(RCFLAGS) -o$@ $**
4949
5050
$(OBJDIR)\link: $B\win\Makefile.dmc $(OBJDIR)\fossil.res
51
- +echo add allrepo attach bag bisect blob branch browse captcha cgi checkin checkout clearsign clone comformat configure content db delta deltacmd descendants diff diffcmd doc encode event export file finfo glob graph gzip http http_socket http_ssl http_transport import info json json_artifact json_branch json_config json_diff json_dir json_finfo json_login json_query json_report json_status json_tag json_timeline json_user json_wiki leaf login main manifest markdown markdown_html md5 merge merge3 moderate name path pivot popen pqueue printf rebuild regexp report rss schema search setup sha1 shun skins sqlcmd stash stat style sync tag tar th_main timeline tkt tktsetup undo unicode update url user utf8 util verify vfile wiki wikiformat winhttp wysiwyg xfer xfersetup zip shell sqlite3 th th_lang > $@
51
+ +echo add allrepo attach bag bisect blob branch browse captcha cgi checkin checkout clearsign clone comformat configure content db delta deltacmd descendants diff diffcmd doc encode event export file finfo glob graph gzip http http_socket http_ssl http_transport import info json json_artifact json_branch json_config json_diff json_dir json_finfo json_login json_query json_report json_status json_tag json_timeline json_user json_wiki leaf login lookslike main manifest markdown markdown_html md5 merge merge3 moderate name path pivot popen pqueue printf rebuild regexp report rss schema search setup sha1 shun skins sqlcmd stash stat style sync tag tar th_main timeline tkt tktsetup undo unicode update url user utf8 util verify vfile wiki wikiformat winhttp wysiwyg xfer xfersetup zip shell sqlite3 th th_lang > $@
5252
+echo fossil >> $@
5353
+echo fossil >> $@
5454
+echo $(LIBS) >> $@
5555
+echo. >> $@
5656
+echo fossil >> $@
@@ -440,10 +440,16 @@
440440
$(OBJDIR)\login$O : login_.c login.h
441441
$(TCC) -o$@ -c login_.c
442442
443443
login_.c : $(SRCDIR)\login.c
444444
+translate$E $** > $@
445
+
446
+$(OBJDIR)\lookslike$O : lookslike_.c lookslike.h
447
+ $(TCC) -o$@ -c lookslike_.c
448
+
449
+lookslike_.c : $(SRCDIR)\lookslike.c
450
+ +translate$E $** > $@
445451
446452
$(OBJDIR)\main$O : main_.c main.h
447453
$(TCC) -o$@ -c main_.c
448454
449455
main_.c : $(SRCDIR)\main.c
@@ -748,7 +754,7 @@
748754
749755
zip_.c : $(SRCDIR)\zip.c
750756
+translate$E $** > $@
751757
752758
headers: makeheaders$E page_index.h VERSION.h
753
- +makeheaders$E add_.c:add.h allrepo_.c:allrepo.h attach_.c:attach.h bag_.c:bag.h bisect_.c:bisect.h blob_.c:blob.h branch_.c:branch.h browse_.c:browse.h captcha_.c:captcha.h cgi_.c:cgi.h checkin_.c:checkin.h checkout_.c:checkout.h clearsign_.c:clearsign.h clone_.c:clone.h comformat_.c:comformat.h configure_.c:configure.h content_.c:content.h db_.c:db.h delta_.c:delta.h deltacmd_.c:deltacmd.h descendants_.c:descendants.h diff_.c:diff.h diffcmd_.c:diffcmd.h doc_.c:doc.h encode_.c:encode.h event_.c:event.h export_.c:export.h file_.c:file.h finfo_.c:finfo.h glob_.c:glob.h graph_.c:graph.h gzip_.c:gzip.h http_.c:http.h http_socket_.c:http_socket.h http_ssl_.c:http_ssl.h http_transport_.c:http_transport.h import_.c:import.h info_.c:info.h json_.c:json.h json_artifact_.c:json_artifact.h json_branch_.c:json_branch.h json_config_.c:json_config.h json_diff_.c:json_diff.h json_dir_.c:json_dir.h json_finfo_.c:json_finfo.h json_login_.c:json_login.h json_query_.c:json_query.h json_report_.c:json_report.h json_status_.c:json_status.h json_tag_.c:json_tag.h json_timeline_.c:json_timeline.h json_user_.c:json_user.h json_wiki_.c:json_wiki.h leaf_.c:leaf.h login_.c:login.h main_.c:main.h manifest_.c:manifest.h markdown_.c:markdown.h markdown_html_.c:markdown_html.h md5_.c:md5.h merge_.c:merge.h merge3_.c:merge3.h moderate_.c:moderate.h name_.c:name.h path_.c:path.h pivot_.c:pivot.h popen_.c:popen.h pqueue_.c:pqueue.h printf_.c:printf.h rebuild_.c:rebuild.h regexp_.c:regexp.h report_.c:report.h rss_.c:rss.h schema_.c:schema.h search_.c:search.h setup_.c:setup.h sha1_.c:sha1.h shun_.c:shun.h skins_.c:skins.h sqlcmd_.c:sqlcmd.h stash_.c:stash.h stat_.c:stat.h style_.c:style.h sync_.c:sync.h tag_.c:tag.h tar_.c:tar.h th_main_.c:th_main.h timeline_.c:timeline.h tkt_.c:tkt.h tktsetup_.c:tktsetup.h undo_.c:undo.h unicode_.c:unicode.h update_.c:update.h url_.c:url.h user_.c:user.h utf8_.c:utf8.h util_.c:util.h verify_.c:verify.h vfile_.c:vfile.h wiki_.c:wiki.h wikiformat_.c:wikiformat.h winhttp_.c:winhttp.h wysiwyg_.c:wysiwyg.h xfer_.c:xfer.h xfersetup_.c:xfersetup.h zip_.c:zip.h $(SRCDIR)\sqlite3.h $(SRCDIR)\th.h VERSION.h $(SRCDIR)\cson_amalgamation.h
759
+ +makeheaders$E add_.c:add.h allrepo_.c:allrepo.h attach_.c:attach.h bag_.c:bag.h bisect_.c:bisect.h blob_.c:blob.h branch_.c:branch.h browse_.c:browse.h captcha_.c:captcha.h cgi_.c:cgi.h checkin_.c:checkin.h checkout_.c:checkout.h clearsign_.c:clearsign.h clone_.c:clone.h comformat_.c:comformat.h configure_.c:configure.h content_.c:content.h db_.c:db.h delta_.c:delta.h deltacmd_.c:deltacmd.h descendants_.c:descendants.h diff_.c:diff.h diffcmd_.c:diffcmd.h doc_.c:doc.h encode_.c:encode.h event_.c:event.h export_.c:export.h file_.c:file.h finfo_.c:finfo.h glob_.c:glob.h graph_.c:graph.h gzip_.c:gzip.h http_.c:http.h http_socket_.c:http_socket.h http_ssl_.c:http_ssl.h http_transport_.c:http_transport.h import_.c:import.h info_.c:info.h json_.c:json.h json_artifact_.c:json_artifact.h json_branch_.c:json_branch.h json_config_.c:json_config.h json_diff_.c:json_diff.h json_dir_.c:json_dir.h json_finfo_.c:json_finfo.h json_login_.c:json_login.h json_query_.c:json_query.h json_report_.c:json_report.h json_status_.c:json_status.h json_tag_.c:json_tag.h json_timeline_.c:json_timeline.h json_user_.c:json_user.h json_wiki_.c:json_wiki.h leaf_.c:leaf.h login_.c:login.h lookslike_.c:lookslike.h main_.c:main.h manifest_.c:manifest.h markdown_.c:markdown.h markdown_html_.c:markdown_html.h md5_.c:md5.h merge_.c:merge.h merge3_.c:merge3.h moderate_.c:moderate.h name_.c:name.h path_.c:path.h pivot_.c:pivot.h popen_.c:popen.h pqueue_.c:pqueue.h printf_.c:printf.h rebuild_.c:rebuild.h regexp_.c:regexp.h report_.c:report.h rss_.c:rss.h schema_.c:schema.h search_.c:search.h setup_.c:setup.h sha1_.c:sha1.h shun_.c:shun.h skins_.c:skins.h sqlcmd_.c:sqlcmd.h stash_.c:stash.h stat_.c:stat.h style_.c:style.h sync_.c:sync.h tag_.c:tag.h tar_.c:tar.h th_main_.c:th_main.h timeline_.c:timeline.h tkt_.c:tkt.h tktsetup_.c:tktsetup.h undo_.c:undo.h unicode_.c:unicode.h update_.c:update.h url_.c:url.h user_.c:user.h utf8_.c:utf8.h util_.c:util.h verify_.c:verify.h vfile_.c:vfile.h wiki_.c:wiki.h wikiformat_.c:wikiformat.h winhttp_.c:winhttp.h wysiwyg_.c:wysiwyg.h xfer_.c:xfer.h xfersetup_.c:xfersetup.h zip_.c:zip.h $(SRCDIR)\sqlite3.h $(SRCDIR)\th.h VERSION.h $(SRCDIR)\cson_amalgamation.h
754760
@copy /Y nul: headers
755761
--- win/Makefile.dmc
+++ win/Makefile.dmc
@@ -26,13 +26,13 @@
26 TCC = $(DMDIR)\bin\dmc $(CFLAGS) $(DMCDEF) $(SSL) $(INCL)
27 LIBS = $(DMDIR)\extra\lib\ zlib wsock32 advapi32
28
29 SQLITE_OPTIONS = -DSQLITE_OMIT_LOAD_EXTENSION=1 -DSQLITE_THREADSAFE=0 -DSQLITE_DEFAULT_FILE_FORMAT=4 -DSQLITE_ENABLE_STAT3 -Dlocaltime=fossil_localtime -DSQLITE_ENABLE_LOCKING_STYLE=0
30
31 SRC = add_.c allrepo_.c attach_.c bag_.c bisect_.c blob_.c branch_.c browse_.c captcha_.c cgi_.c checkin_.c checkout_.c clearsign_.c clone_.c comformat_.c configure_.c content_.c db_.c delta_.c deltacmd_.c descendants_.c diff_.c diffcmd_.c doc_.c encode_.c event_.c export_.c file_.c finfo_.c glob_.c graph_.c gzip_.c http_.c http_socket_.c http_ssl_.c http_transport_.c import_.c info_.c json_.c json_artifact_.c json_branch_.c json_config_.c json_diff_.c json_dir_.c json_finfo_.c json_login_.c json_query_.c json_report_.c json_status_.c json_tag_.c json_timeline_.c json_user_.c json_wiki_.c leaf_.c login_.c main_.c manifest_.c markdown_.c markdown_html_.c md5_.c merge_.c merge3_.c moderate_.c name_.c path_.c pivot_.c popen_.c pqueue_.c printf_.c rebuild_.c regexp_.c report_.c rss_.c schema_.c search_.c setup_.c sha1_.c shun_.c skins_.c sqlcmd_.c stash_.c stat_.c style_.c sync_.c tag_.c tar_.c th_main_.c timeline_.c tkt_.c tktsetup_.c undo_.c unicode_.c update_.c url_.c user_.c utf8_.c util_.c verify_.c vfile_.c wiki_.c wikiformat_.c winhttp_.c wysiwyg_.c xfer_.c xfersetup_.c zip_.c
32
33 OBJ = $(OBJDIR)\add$O $(OBJDIR)\allrepo$O $(OBJDIR)\attach$O $(OBJDIR)\bag$O $(OBJDIR)\bisect$O $(OBJDIR)\blob$O $(OBJDIR)\branch$O $(OBJDIR)\browse$O $(OBJDIR)\captcha$O $(OBJDIR)\cgi$O $(OBJDIR)\checkin$O $(OBJDIR)\checkout$O $(OBJDIR)\clearsign$O $(OBJDIR)\clone$O $(OBJDIR)\comformat$O $(OBJDIR)\configure$O $(OBJDIR)\content$O $(OBJDIR)\db$O $(OBJDIR)\delta$O $(OBJDIR)\deltacmd$O $(OBJDIR)\descendants$O $(OBJDIR)\diff$O $(OBJDIR)\diffcmd$O $(OBJDIR)\doc$O $(OBJDIR)\encode$O $(OBJDIR)\event$O $(OBJDIR)\export$O $(OBJDIR)\file$O $(OBJDIR)\finfo$O $(OBJDIR)\glob$O $(OBJDIR)\graph$O $(OBJDIR)\gzip$O $(OBJDIR)\http$O $(OBJDIR)\http_socket$O $(OBJDIR)\http_ssl$O $(OBJDIR)\http_transport$O $(OBJDIR)\import$O $(OBJDIR)\info$O $(OBJDIR)\json$O $(OBJDIR)\json_artifact$O $(OBJDIR)\json_branch$O $(OBJDIR)\json_config$O $(OBJDIR)\json_diff$O $(OBJDIR)\json_dir$O $(OBJDIR)\json_finfo$O $(OBJDIR)\json_login$O $(OBJDIR)\json_query$O $(OBJDIR)\json_report$O $(OBJDIR)\json_status$O $(OBJDIR)\json_tag$O $(OBJDIR)\json_timeline$O $(OBJDIR)\json_user$O $(OBJDIR)\json_wiki$O $(OBJDIR)\leaf$O $(OBJDIR)\login$O $(OBJDIR)\main$O $(OBJDIR)\manifest$O $(OBJDIR)\markdown$O $(OBJDIR)\markdown_html$O $(OBJDIR)\md5$O $(OBJDIR)\merge$O $(OBJDIR)\merge3$O $(OBJDIR)\moderate$O $(OBJDIR)\name$O $(OBJDIR)\path$O $(OBJDIR)\pivot$O $(OBJDIR)\popen$O $(OBJDIR)\pqueue$O $(OBJDIR)\printf$O $(OBJDIR)\rebuild$O $(OBJDIR)\regexp$O $(OBJDIR)\report$O $(OBJDIR)\rss$O $(OBJDIR)\schema$O $(OBJDIR)\search$O $(OBJDIR)\setup$O $(OBJDIR)\sha1$O $(OBJDIR)\shun$O $(OBJDIR)\skins$O $(OBJDIR)\sqlcmd$O $(OBJDIR)\stash$O $(OBJDIR)\stat$O $(OBJDIR)\style$O $(OBJDIR)\sync$O $(OBJDIR)\tag$O $(OBJDIR)\tar$O $(OBJDIR)\th_main$O $(OBJDIR)\timeline$O $(OBJDIR)\tkt$O $(OBJDIR)\tktsetup$O $(OBJDIR)\undo$O $(OBJDIR)\unicode$O $(OBJDIR)\update$O $(OBJDIR)\url$O $(OBJDIR)\user$O $(OBJDIR)\utf8$O $(OBJDIR)\util$O $(OBJDIR)\verify$O $(OBJDIR)\vfile$O $(OBJDIR)\wiki$O $(OBJDIR)\wikiformat$O $(OBJDIR)\winhttp$O $(OBJDIR)\wysiwyg$O $(OBJDIR)\xfer$O $(OBJDIR)\xfersetup$O $(OBJDIR)\zip$O $(OBJDIR)\shell$O $(OBJDIR)\sqlite3$O $(OBJDIR)\th$O $(OBJDIR)\th_lang$O
34
35
36 RC=$(DMDIR)\bin\rcc
37 RCFLAGS=-32 -w1 -I$(SRCDIR) /D__DMC__
38
@@ -46,11 +46,11 @@
46
47 $(OBJDIR)\fossil.res: $B\win\fossil.rc
48 $(RC) $(RCFLAGS) -o$@ $**
49
50 $(OBJDIR)\link: $B\win\Makefile.dmc $(OBJDIR)\fossil.res
51 +echo add allrepo attach bag bisect blob branch browse captcha cgi checkin checkout clearsign clone comformat configure content db delta deltacmd descendants diff diffcmd doc encode event export file finfo glob graph gzip http http_socket http_ssl http_transport import info json json_artifact json_branch json_config json_diff json_dir json_finfo json_login json_query json_report json_status json_tag json_timeline json_user json_wiki leaf login main manifest markdown markdown_html md5 merge merge3 moderate name path pivot popen pqueue printf rebuild regexp report rss schema search setup sha1 shun skins sqlcmd stash stat style sync tag tar th_main timeline tkt tktsetup undo unicode update url user utf8 util verify vfile wiki wikiformat winhttp wysiwyg xfer xfersetup zip shell sqlite3 th th_lang > $@
52 +echo fossil >> $@
53 +echo fossil >> $@
54 +echo $(LIBS) >> $@
55 +echo. >> $@
56 +echo fossil >> $@
@@ -440,10 +440,16 @@
440 $(OBJDIR)\login$O : login_.c login.h
441 $(TCC) -o$@ -c login_.c
442
443 login_.c : $(SRCDIR)\login.c
444 +translate$E $** > $@
 
 
 
 
 
 
445
446 $(OBJDIR)\main$O : main_.c main.h
447 $(TCC) -o$@ -c main_.c
448
449 main_.c : $(SRCDIR)\main.c
@@ -748,7 +754,7 @@
748
749 zip_.c : $(SRCDIR)\zip.c
750 +translate$E $** > $@
751
752 headers: makeheaders$E page_index.h VERSION.h
753 +makeheaders$E add_.c:add.h allrepo_.c:allrepo.h attach_.c:attach.h bag_.c:bag.h bisect_.c:bisect.h blob_.c:blob.h branch_.c:branch.h browse_.c:browse.h captcha_.c:captcha.h cgi_.c:cgi.h checkin_.c:checkin.h checkout_.c:checkout.h clearsign_.c:clearsign.h clone_.c:clone.h comformat_.c:comformat.h configure_.c:configure.h content_.c:content.h db_.c:db.h delta_.c:delta.h deltacmd_.c:deltacmd.h descendants_.c:descendants.h diff_.c:diff.h diffcmd_.c:diffcmd.h doc_.c:doc.h encode_.c:encode.h event_.c:event.h export_.c:export.h file_.c:file.h finfo_.c:finfo.h glob_.c:glob.h graph_.c:graph.h gzip_.c:gzip.h http_.c:http.h http_socket_.c:http_socket.h http_ssl_.c:http_ssl.h http_transport_.c:http_transport.h import_.c:import.h info_.c:info.h json_.c:json.h json_artifact_.c:json_artifact.h json_branch_.c:json_branch.h json_config_.c:json_config.h json_diff_.c:json_diff.h json_dir_.c:json_dir.h json_finfo_.c:json_finfo.h json_login_.c:json_login.h json_query_.c:json_query.h json_report_.c:json_report.h json_status_.c:json_status.h json_tag_.c:json_tag.h json_timeline_.c:json_timeline.h json_user_.c:json_user.h json_wiki_.c:json_wiki.h leaf_.c:leaf.h login_.c:login.h main_.c:main.h manifest_.c:manifest.h markdown_.c:markdown.h markdown_html_.c:markdown_html.h md5_.c:md5.h merge_.c:merge.h merge3_.c:merge3.h moderate_.c:moderate.h name_.c:name.h path_.c:path.h pivot_.c:pivot.h popen_.c:popen.h pqueue_.c:pqueue.h printf_.c:printf.h rebuild_.c:rebuild.h regexp_.c:regexp.h report_.c:report.h rss_.c:rss.h schema_.c:schema.h search_.c:search.h setup_.c:setup.h sha1_.c:sha1.h shun_.c:shun.h skins_.c:skins.h sqlcmd_.c:sqlcmd.h stash_.c:stash.h stat_.c:stat.h style_.c:style.h sync_.c:sync.h tag_.c:tag.h tar_.c:tar.h th_main_.c:th_main.h timeline_.c:timeline.h tkt_.c:tkt.h tktsetup_.c:tktsetup.h undo_.c:undo.h unicode_.c:unicode.h update_.c:update.h url_.c:url.h user_.c:user.h utf8_.c:utf8.h util_.c:util.h verify_.c:verify.h vfile_.c:vfile.h wiki_.c:wiki.h wikiformat_.c:wikiformat.h winhttp_.c:winhttp.h wysiwyg_.c:wysiwyg.h xfer_.c:xfer.h xfersetup_.c:xfersetup.h zip_.c:zip.h $(SRCDIR)\sqlite3.h $(SRCDIR)\th.h VERSION.h $(SRCDIR)\cson_amalgamation.h
754 @copy /Y nul: headers
755
--- win/Makefile.dmc
+++ win/Makefile.dmc
@@ -26,13 +26,13 @@
26 TCC = $(DMDIR)\bin\dmc $(CFLAGS) $(DMCDEF) $(SSL) $(INCL)
27 LIBS = $(DMDIR)\extra\lib\ zlib wsock32 advapi32
28
29 SQLITE_OPTIONS = -DSQLITE_OMIT_LOAD_EXTENSION=1 -DSQLITE_THREADSAFE=0 -DSQLITE_DEFAULT_FILE_FORMAT=4 -DSQLITE_ENABLE_STAT3 -Dlocaltime=fossil_localtime -DSQLITE_ENABLE_LOCKING_STYLE=0
30
31 SRC = add_.c allrepo_.c attach_.c bag_.c bisect_.c blob_.c branch_.c browse_.c captcha_.c cgi_.c checkin_.c checkout_.c clearsign_.c clone_.c comformat_.c configure_.c content_.c db_.c delta_.c deltacmd_.c descendants_.c diff_.c diffcmd_.c doc_.c encode_.c event_.c export_.c file_.c finfo_.c glob_.c graph_.c gzip_.c http_.c http_socket_.c http_ssl_.c http_transport_.c import_.c info_.c json_.c json_artifact_.c json_branch_.c json_config_.c json_diff_.c json_dir_.c json_finfo_.c json_login_.c json_query_.c json_report_.c json_status_.c json_tag_.c json_timeline_.c json_user_.c json_wiki_.c leaf_.c login_.c lookslike_.c main_.c manifest_.c markdown_.c markdown_html_.c md5_.c merge_.c merge3_.c moderate_.c name_.c path_.c pivot_.c popen_.c pqueue_.c printf_.c rebuild_.c regexp_.c report_.c rss_.c schema_.c search_.c setup_.c sha1_.c shun_.c skins_.c sqlcmd_.c stash_.c stat_.c style_.c sync_.c tag_.c tar_.c th_main_.c timeline_.c tkt_.c tktsetup_.c undo_.c unicode_.c update_.c url_.c user_.c utf8_.c util_.c verify_.c vfile_.c wiki_.c wikiformat_.c winhttp_.c wysiwyg_.c xfer_.c xfersetup_.c zip_.c
32
33 OBJ = $(OBJDIR)\add$O $(OBJDIR)\allrepo$O $(OBJDIR)\attach$O $(OBJDIR)\bag$O $(OBJDIR)\bisect$O $(OBJDIR)\blob$O $(OBJDIR)\branch$O $(OBJDIR)\browse$O $(OBJDIR)\captcha$O $(OBJDIR)\cgi$O $(OBJDIR)\checkin$O $(OBJDIR)\checkout$O $(OBJDIR)\clearsign$O $(OBJDIR)\clone$O $(OBJDIR)\comformat$O $(OBJDIR)\configure$O $(OBJDIR)\content$O $(OBJDIR)\db$O $(OBJDIR)\delta$O $(OBJDIR)\deltacmd$O $(OBJDIR)\descendants$O $(OBJDIR)\diff$O $(OBJDIR)\diffcmd$O $(OBJDIR)\doc$O $(OBJDIR)\encode$O $(OBJDIR)\event$O $(OBJDIR)\export$O $(OBJDIR)\file$O $(OBJDIR)\finfo$O $(OBJDIR)\glob$O $(OBJDIR)\graph$O $(OBJDIR)\gzip$O $(OBJDIR)\http$O $(OBJDIR)\http_socket$O $(OBJDIR)\http_ssl$O $(OBJDIR)\http_transport$O $(OBJDIR)\import$O $(OBJDIR)\info$O $(OBJDIR)\json$O $(OBJDIR)\json_artifact$O $(OBJDIR)\json_branch$O $(OBJDIR)\json_config$O $(OBJDIR)\json_diff$O $(OBJDIR)\json_dir$O $(OBJDIR)\json_finfo$O $(OBJDIR)\json_login$O $(OBJDIR)\json_query$O $(OBJDIR)\json_report$O $(OBJDIR)\json_status$O $(OBJDIR)\json_tag$O $(OBJDIR)\json_timeline$O $(OBJDIR)\json_user$O $(OBJDIR)\json_wiki$O $(OBJDIR)\leaf$O $(OBJDIR)\login$O $(OBJDIR)\lookslike$O $(OBJDIR)\main$O $(OBJDIR)\manifest$O $(OBJDIR)\markdown$O $(OBJDIR)\markdown_html$O $(OBJDIR)\md5$O $(OBJDIR)\merge$O $(OBJDIR)\merge3$O $(OBJDIR)\moderate$O $(OBJDIR)\name$O $(OBJDIR)\path$O $(OBJDIR)\pivot$O $(OBJDIR)\popen$O $(OBJDIR)\pqueue$O $(OBJDIR)\printf$O $(OBJDIR)\rebuild$O $(OBJDIR)\regexp$O $(OBJDIR)\report$O $(OBJDIR)\rss$O $(OBJDIR)\schema$O $(OBJDIR)\search$O $(OBJDIR)\setup$O $(OBJDIR)\sha1$O $(OBJDIR)\shun$O $(OBJDIR)\skins$O $(OBJDIR)\sqlcmd$O $(OBJDIR)\stash$O $(OBJDIR)\stat$O $(OBJDIR)\style$O $(OBJDIR)\sync$O $(OBJDIR)\tag$O $(OBJDIR)\tar$O $(OBJDIR)\th_main$O $(OBJDIR)\timeline$O $(OBJDIR)\tkt$O $(OBJDIR)\tktsetup$O $(OBJDIR)\undo$O $(OBJDIR)\unicode$O $(OBJDIR)\update$O $(OBJDIR)\url$O $(OBJDIR)\user$O $(OBJDIR)\utf8$O $(OBJDIR)\util$O $(OBJDIR)\verify$O $(OBJDIR)\vfile$O $(OBJDIR)\wiki$O $(OBJDIR)\wikiformat$O $(OBJDIR)\winhttp$O $(OBJDIR)\wysiwyg$O $(OBJDIR)\xfer$O $(OBJDIR)\xfersetup$O $(OBJDIR)\zip$O $(OBJDIR)\shell$O $(OBJDIR)\sqlite3$O $(OBJDIR)\th$O $(OBJDIR)\th_lang$O
34
35
36 RC=$(DMDIR)\bin\rcc
37 RCFLAGS=-32 -w1 -I$(SRCDIR) /D__DMC__
38
@@ -46,11 +46,11 @@
46
47 $(OBJDIR)\fossil.res: $B\win\fossil.rc
48 $(RC) $(RCFLAGS) -o$@ $**
49
50 $(OBJDIR)\link: $B\win\Makefile.dmc $(OBJDIR)\fossil.res
51 +echo add allrepo attach bag bisect blob branch browse captcha cgi checkin checkout clearsign clone comformat configure content db delta deltacmd descendants diff diffcmd doc encode event export file finfo glob graph gzip http http_socket http_ssl http_transport import info json json_artifact json_branch json_config json_diff json_dir json_finfo json_login json_query json_report json_status json_tag json_timeline json_user json_wiki leaf login lookslike main manifest markdown markdown_html md5 merge merge3 moderate name path pivot popen pqueue printf rebuild regexp report rss schema search setup sha1 shun skins sqlcmd stash stat style sync tag tar th_main timeline tkt tktsetup undo unicode update url user utf8 util verify vfile wiki wikiformat winhttp wysiwyg xfer xfersetup zip shell sqlite3 th th_lang > $@
52 +echo fossil >> $@
53 +echo fossil >> $@
54 +echo $(LIBS) >> $@
55 +echo. >> $@
56 +echo fossil >> $@
@@ -440,10 +440,16 @@
440 $(OBJDIR)\login$O : login_.c login.h
441 $(TCC) -o$@ -c login_.c
442
443 login_.c : $(SRCDIR)\login.c
444 +translate$E $** > $@
445
446 $(OBJDIR)\lookslike$O : lookslike_.c lookslike.h
447 $(TCC) -o$@ -c lookslike_.c
448
449 lookslike_.c : $(SRCDIR)\lookslike.c
450 +translate$E $** > $@
451
452 $(OBJDIR)\main$O : main_.c main.h
453 $(TCC) -o$@ -c main_.c
454
455 main_.c : $(SRCDIR)\main.c
@@ -748,7 +754,7 @@
754
755 zip_.c : $(SRCDIR)\zip.c
756 +translate$E $** > $@
757
758 headers: makeheaders$E page_index.h VERSION.h
759 +makeheaders$E add_.c:add.h allrepo_.c:allrepo.h attach_.c:attach.h bag_.c:bag.h bisect_.c:bisect.h blob_.c:blob.h branch_.c:branch.h browse_.c:browse.h captcha_.c:captcha.h cgi_.c:cgi.h checkin_.c:checkin.h checkout_.c:checkout.h clearsign_.c:clearsign.h clone_.c:clone.h comformat_.c:comformat.h configure_.c:configure.h content_.c:content.h db_.c:db.h delta_.c:delta.h deltacmd_.c:deltacmd.h descendants_.c:descendants.h diff_.c:diff.h diffcmd_.c:diffcmd.h doc_.c:doc.h encode_.c:encode.h event_.c:event.h export_.c:export.h file_.c:file.h finfo_.c:finfo.h glob_.c:glob.h graph_.c:graph.h gzip_.c:gzip.h http_.c:http.h http_socket_.c:http_socket.h http_ssl_.c:http_ssl.h http_transport_.c:http_transport.h import_.c:import.h info_.c:info.h json_.c:json.h json_artifact_.c:json_artifact.h json_branch_.c:json_branch.h json_config_.c:json_config.h json_diff_.c:json_diff.h json_dir_.c:json_dir.h json_finfo_.c:json_finfo.h json_login_.c:json_login.h json_query_.c:json_query.h json_report_.c:json_report.h json_status_.c:json_status.h json_tag_.c:json_tag.h json_timeline_.c:json_timeline.h json_user_.c:json_user.h json_wiki_.c:json_wiki.h leaf_.c:leaf.h login_.c:login.h lookslike_.c:lookslike.h main_.c:main.h manifest_.c:manifest.h markdown_.c:markdown.h markdown_html_.c:markdown_html.h md5_.c:md5.h merge_.c:merge.h merge3_.c:merge3.h moderate_.c:moderate.h name_.c:name.h path_.c:path.h pivot_.c:pivot.h popen_.c:popen.h pqueue_.c:pqueue.h printf_.c:printf.h rebuild_.c:rebuild.h regexp_.c:regexp.h report_.c:report.h rss_.c:rss.h schema_.c:schema.h search_.c:search.h setup_.c:setup.h sha1_.c:sha1.h shun_.c:shun.h skins_.c:skins.h sqlcmd_.c:sqlcmd.h stash_.c:stash.h stat_.c:stat.h style_.c:style.h sync_.c:sync.h tag_.c:tag.h tar_.c:tar.h th_main_.c:th_main.h timeline_.c:timeline.h tkt_.c:tkt.h tktsetup_.c:tktsetup.h undo_.c:undo.h unicode_.c:unicode.h update_.c:update.h url_.c:url.h user_.c:user.h utf8_.c:utf8.h util_.c:util.h verify_.c:verify.h vfile_.c:vfile.h wiki_.c:wiki.h wikiformat_.c:wikiformat.h winhttp_.c:winhttp.h wysiwyg_.c:wysiwyg.h xfer_.c:xfer.h xfersetup_.c:xfersetup.h zip_.c:zip.h $(SRCDIR)\sqlite3.h $(SRCDIR)\th.h VERSION.h $(SRCDIR)\cson_amalgamation.h
760 @copy /Y nul: headers
761
--- win/Makefile.mingw
+++ win/Makefile.mingw
@@ -298,10 +298,11 @@
298298
$(SRCDIR)/json_timeline.c \
299299
$(SRCDIR)/json_user.c \
300300
$(SRCDIR)/json_wiki.c \
301301
$(SRCDIR)/leaf.c \
302302
$(SRCDIR)/login.c \
303
+ $(SRCDIR)/lookslike.c \
303304
$(SRCDIR)/main.c \
304305
$(SRCDIR)/manifest.c \
305306
$(SRCDIR)/markdown.c \
306307
$(SRCDIR)/markdown_html.c \
307308
$(SRCDIR)/md5.c \
@@ -406,10 +407,11 @@
406407
$(OBJDIR)/json_timeline_.c \
407408
$(OBJDIR)/json_user_.c \
408409
$(OBJDIR)/json_wiki_.c \
409410
$(OBJDIR)/leaf_.c \
410411
$(OBJDIR)/login_.c \
412
+ $(OBJDIR)/lookslike_.c \
411413
$(OBJDIR)/main_.c \
412414
$(OBJDIR)/manifest_.c \
413415
$(OBJDIR)/markdown_.c \
414416
$(OBJDIR)/markdown_html_.c \
415417
$(OBJDIR)/md5_.c \
@@ -514,10 +516,11 @@
514516
$(OBJDIR)/json_timeline.o \
515517
$(OBJDIR)/json_user.o \
516518
$(OBJDIR)/json_wiki.o \
517519
$(OBJDIR)/leaf.o \
518520
$(OBJDIR)/login.o \
521
+ $(OBJDIR)/lookslike.o \
519522
$(OBJDIR)/main.o \
520523
$(OBJDIR)/manifest.o \
521524
$(OBJDIR)/markdown.o \
522525
$(OBJDIR)/markdown_html.o \
523526
$(OBJDIR)/md5.o \
@@ -735,10 +738,11 @@
735738
$(OBJDIR)/json_timeline_.c:$(OBJDIR)/json_timeline.h \
736739
$(OBJDIR)/json_user_.c:$(OBJDIR)/json_user.h \
737740
$(OBJDIR)/json_wiki_.c:$(OBJDIR)/json_wiki.h \
738741
$(OBJDIR)/leaf_.c:$(OBJDIR)/leaf.h \
739742
$(OBJDIR)/login_.c:$(OBJDIR)/login.h \
743
+ $(OBJDIR)/lookslike_.c:$(OBJDIR)/lookslike.h \
740744
$(OBJDIR)/main_.c:$(OBJDIR)/main.h \
741745
$(OBJDIR)/manifest_.c:$(OBJDIR)/manifest.h \
742746
$(OBJDIR)/markdown_.c:$(OBJDIR)/markdown.h \
743747
$(OBJDIR)/markdown_html_.c:$(OBJDIR)/markdown_html.h \
744748
$(OBJDIR)/md5_.c:$(OBJDIR)/md5.h \
@@ -1234,10 +1238,18 @@
12341238
12351239
$(OBJDIR)/login.o: $(OBJDIR)/login_.c $(OBJDIR)/login.h $(SRCDIR)/config.h
12361240
$(XTCC) -o $(OBJDIR)/login.o -c $(OBJDIR)/login_.c
12371241
12381242
$(OBJDIR)/login.h: $(OBJDIR)/headers
1243
+
1244
+$(OBJDIR)/lookslike_.c: $(SRCDIR)/lookslike.c $(OBJDIR)/translate
1245
+ $(TRANSLATE) $(SRCDIR)/lookslike.c >$(OBJDIR)/lookslike_.c
1246
+
1247
+$(OBJDIR)/lookslike.o: $(OBJDIR)/lookslike_.c $(OBJDIR)/lookslike.h $(SRCDIR)/config.h
1248
+ $(XTCC) -o $(OBJDIR)/lookslike.o -c $(OBJDIR)/lookslike_.c
1249
+
1250
+$(OBJDIR)/lookslike.h: $(OBJDIR)/headers
12391251
12401252
$(OBJDIR)/main_.c: $(SRCDIR)/main.c $(OBJDIR)/translate
12411253
$(TRANSLATE) $(SRCDIR)/main.c >$(OBJDIR)/main_.c
12421254
12431255
$(OBJDIR)/main.o: $(OBJDIR)/main_.c $(OBJDIR)/main.h $(OBJDIR)/page_index.h $(SRCDIR)/config.h
12441256
--- win/Makefile.mingw
+++ win/Makefile.mingw
@@ -298,10 +298,11 @@
298 $(SRCDIR)/json_timeline.c \
299 $(SRCDIR)/json_user.c \
300 $(SRCDIR)/json_wiki.c \
301 $(SRCDIR)/leaf.c \
302 $(SRCDIR)/login.c \
 
303 $(SRCDIR)/main.c \
304 $(SRCDIR)/manifest.c \
305 $(SRCDIR)/markdown.c \
306 $(SRCDIR)/markdown_html.c \
307 $(SRCDIR)/md5.c \
@@ -406,10 +407,11 @@
406 $(OBJDIR)/json_timeline_.c \
407 $(OBJDIR)/json_user_.c \
408 $(OBJDIR)/json_wiki_.c \
409 $(OBJDIR)/leaf_.c \
410 $(OBJDIR)/login_.c \
 
411 $(OBJDIR)/main_.c \
412 $(OBJDIR)/manifest_.c \
413 $(OBJDIR)/markdown_.c \
414 $(OBJDIR)/markdown_html_.c \
415 $(OBJDIR)/md5_.c \
@@ -514,10 +516,11 @@
514 $(OBJDIR)/json_timeline.o \
515 $(OBJDIR)/json_user.o \
516 $(OBJDIR)/json_wiki.o \
517 $(OBJDIR)/leaf.o \
518 $(OBJDIR)/login.o \
 
519 $(OBJDIR)/main.o \
520 $(OBJDIR)/manifest.o \
521 $(OBJDIR)/markdown.o \
522 $(OBJDIR)/markdown_html.o \
523 $(OBJDIR)/md5.o \
@@ -735,10 +738,11 @@
735 $(OBJDIR)/json_timeline_.c:$(OBJDIR)/json_timeline.h \
736 $(OBJDIR)/json_user_.c:$(OBJDIR)/json_user.h \
737 $(OBJDIR)/json_wiki_.c:$(OBJDIR)/json_wiki.h \
738 $(OBJDIR)/leaf_.c:$(OBJDIR)/leaf.h \
739 $(OBJDIR)/login_.c:$(OBJDIR)/login.h \
 
740 $(OBJDIR)/main_.c:$(OBJDIR)/main.h \
741 $(OBJDIR)/manifest_.c:$(OBJDIR)/manifest.h \
742 $(OBJDIR)/markdown_.c:$(OBJDIR)/markdown.h \
743 $(OBJDIR)/markdown_html_.c:$(OBJDIR)/markdown_html.h \
744 $(OBJDIR)/md5_.c:$(OBJDIR)/md5.h \
@@ -1234,10 +1238,18 @@
1234
1235 $(OBJDIR)/login.o: $(OBJDIR)/login_.c $(OBJDIR)/login.h $(SRCDIR)/config.h
1236 $(XTCC) -o $(OBJDIR)/login.o -c $(OBJDIR)/login_.c
1237
1238 $(OBJDIR)/login.h: $(OBJDIR)/headers
 
 
 
 
 
 
 
 
1239
1240 $(OBJDIR)/main_.c: $(SRCDIR)/main.c $(OBJDIR)/translate
1241 $(TRANSLATE) $(SRCDIR)/main.c >$(OBJDIR)/main_.c
1242
1243 $(OBJDIR)/main.o: $(OBJDIR)/main_.c $(OBJDIR)/main.h $(OBJDIR)/page_index.h $(SRCDIR)/config.h
1244
--- win/Makefile.mingw
+++ win/Makefile.mingw
@@ -298,10 +298,11 @@
298 $(SRCDIR)/json_timeline.c \
299 $(SRCDIR)/json_user.c \
300 $(SRCDIR)/json_wiki.c \
301 $(SRCDIR)/leaf.c \
302 $(SRCDIR)/login.c \
303 $(SRCDIR)/lookslike.c \
304 $(SRCDIR)/main.c \
305 $(SRCDIR)/manifest.c \
306 $(SRCDIR)/markdown.c \
307 $(SRCDIR)/markdown_html.c \
308 $(SRCDIR)/md5.c \
@@ -406,10 +407,11 @@
407 $(OBJDIR)/json_timeline_.c \
408 $(OBJDIR)/json_user_.c \
409 $(OBJDIR)/json_wiki_.c \
410 $(OBJDIR)/leaf_.c \
411 $(OBJDIR)/login_.c \
412 $(OBJDIR)/lookslike_.c \
413 $(OBJDIR)/main_.c \
414 $(OBJDIR)/manifest_.c \
415 $(OBJDIR)/markdown_.c \
416 $(OBJDIR)/markdown_html_.c \
417 $(OBJDIR)/md5_.c \
@@ -514,10 +516,11 @@
516 $(OBJDIR)/json_timeline.o \
517 $(OBJDIR)/json_user.o \
518 $(OBJDIR)/json_wiki.o \
519 $(OBJDIR)/leaf.o \
520 $(OBJDIR)/login.o \
521 $(OBJDIR)/lookslike.o \
522 $(OBJDIR)/main.o \
523 $(OBJDIR)/manifest.o \
524 $(OBJDIR)/markdown.o \
525 $(OBJDIR)/markdown_html.o \
526 $(OBJDIR)/md5.o \
@@ -735,10 +738,11 @@
738 $(OBJDIR)/json_timeline_.c:$(OBJDIR)/json_timeline.h \
739 $(OBJDIR)/json_user_.c:$(OBJDIR)/json_user.h \
740 $(OBJDIR)/json_wiki_.c:$(OBJDIR)/json_wiki.h \
741 $(OBJDIR)/leaf_.c:$(OBJDIR)/leaf.h \
742 $(OBJDIR)/login_.c:$(OBJDIR)/login.h \
743 $(OBJDIR)/lookslike_.c:$(OBJDIR)/lookslike.h \
744 $(OBJDIR)/main_.c:$(OBJDIR)/main.h \
745 $(OBJDIR)/manifest_.c:$(OBJDIR)/manifest.h \
746 $(OBJDIR)/markdown_.c:$(OBJDIR)/markdown.h \
747 $(OBJDIR)/markdown_html_.c:$(OBJDIR)/markdown_html.h \
748 $(OBJDIR)/md5_.c:$(OBJDIR)/md5.h \
@@ -1234,10 +1238,18 @@
1238
1239 $(OBJDIR)/login.o: $(OBJDIR)/login_.c $(OBJDIR)/login.h $(SRCDIR)/config.h
1240 $(XTCC) -o $(OBJDIR)/login.o -c $(OBJDIR)/login_.c
1241
1242 $(OBJDIR)/login.h: $(OBJDIR)/headers
1243
1244 $(OBJDIR)/lookslike_.c: $(SRCDIR)/lookslike.c $(OBJDIR)/translate
1245 $(TRANSLATE) $(SRCDIR)/lookslike.c >$(OBJDIR)/lookslike_.c
1246
1247 $(OBJDIR)/lookslike.o: $(OBJDIR)/lookslike_.c $(OBJDIR)/lookslike.h $(SRCDIR)/config.h
1248 $(XTCC) -o $(OBJDIR)/lookslike.o -c $(OBJDIR)/lookslike_.c
1249
1250 $(OBJDIR)/lookslike.h: $(OBJDIR)/headers
1251
1252 $(OBJDIR)/main_.c: $(SRCDIR)/main.c $(OBJDIR)/translate
1253 $(TRANSLATE) $(SRCDIR)/main.c >$(OBJDIR)/main_.c
1254
1255 $(OBJDIR)/main.o: $(OBJDIR)/main_.c $(OBJDIR)/main.h $(OBJDIR)/page_index.h $(SRCDIR)/config.h
1256
--- win/Makefile.msc
+++ win/Makefile.msc
@@ -116,10 +116,11 @@
116116
json_timeline_.c \
117117
json_user_.c \
118118
json_wiki_.c \
119119
leaf_.c \
120120
login_.c \
121
+ lookslike_.c \
121122
main_.c \
122123
manifest_.c \
123124
markdown_.c \
124125
markdown_html_.c \
125126
md5_.c \
@@ -224,10 +225,11 @@
224225
$(OX)\json_timeline$O \
225226
$(OX)\json_user$O \
226227
$(OX)\json_wiki$O \
227228
$(OX)\leaf$O \
228229
$(OX)\login$O \
230
+ $(OX)\lookslike$O \
229231
$(OX)\main$O \
230232
$(OX)\manifest$O \
231233
$(OX)\markdown$O \
232234
$(OX)\markdown_html$O \
233235
$(OX)\md5$O \
@@ -350,10 +352,11 @@
350352
echo $(OX)\json_timeline.obj >> $@
351353
echo $(OX)\json_user.obj >> $@
352354
echo $(OX)\json_wiki.obj >> $@
353355
echo $(OX)\leaf.obj >> $@
354356
echo $(OX)\login.obj >> $@
357
+ echo $(OX)\lookslike.obj >> $@
355358
echo $(OX)\main.obj >> $@
356359
echo $(OX)\manifest.obj >> $@
357360
echo $(OX)\markdown.obj >> $@
358361
echo $(OX)\markdown_html.obj >> $@
359362
echo $(OX)\md5.obj >> $@
@@ -809,10 +812,16 @@
809812
$(OX)\login$O : login_.c login.h
810813
$(TCC) /Fo$@ -c login_.c
811814
812815
login_.c : $(SRCDIR)\login.c
813816
translate$E $** > $@
817
+
818
+$(OX)\lookslike$O : lookslike_.c lookslike.h
819
+ $(TCC) /Fo$@ -c lookslike_.c
820
+
821
+lookslike_.c : $(SRCDIR)\lookslike.c
822
+ translate$E $** > $@
814823
815824
$(OX)\main$O : main_.c main.h
816825
$(TCC) /Fo$@ -c main_.c
817826
818827
main_.c : $(SRCDIR)\main.c
@@ -1174,10 +1183,11 @@
11741183
json_timeline_.c:json_timeline.h \
11751184
json_user_.c:json_user.h \
11761185
json_wiki_.c:json_wiki.h \
11771186
leaf_.c:leaf.h \
11781187
login_.c:login.h \
1188
+ lookslike_.c:lookslike.h \
11791189
main_.c:main.h \
11801190
manifest_.c:manifest.h \
11811191
markdown_.c:markdown.h \
11821192
markdown_html_.c:markdown_html.h \
11831193
md5_.c:md5.h \
11841194
--- win/Makefile.msc
+++ win/Makefile.msc
@@ -116,10 +116,11 @@
116 json_timeline_.c \
117 json_user_.c \
118 json_wiki_.c \
119 leaf_.c \
120 login_.c \
 
121 main_.c \
122 manifest_.c \
123 markdown_.c \
124 markdown_html_.c \
125 md5_.c \
@@ -224,10 +225,11 @@
224 $(OX)\json_timeline$O \
225 $(OX)\json_user$O \
226 $(OX)\json_wiki$O \
227 $(OX)\leaf$O \
228 $(OX)\login$O \
 
229 $(OX)\main$O \
230 $(OX)\manifest$O \
231 $(OX)\markdown$O \
232 $(OX)\markdown_html$O \
233 $(OX)\md5$O \
@@ -350,10 +352,11 @@
350 echo $(OX)\json_timeline.obj >> $@
351 echo $(OX)\json_user.obj >> $@
352 echo $(OX)\json_wiki.obj >> $@
353 echo $(OX)\leaf.obj >> $@
354 echo $(OX)\login.obj >> $@
 
355 echo $(OX)\main.obj >> $@
356 echo $(OX)\manifest.obj >> $@
357 echo $(OX)\markdown.obj >> $@
358 echo $(OX)\markdown_html.obj >> $@
359 echo $(OX)\md5.obj >> $@
@@ -809,10 +812,16 @@
809 $(OX)\login$O : login_.c login.h
810 $(TCC) /Fo$@ -c login_.c
811
812 login_.c : $(SRCDIR)\login.c
813 translate$E $** > $@
 
 
 
 
 
 
814
815 $(OX)\main$O : main_.c main.h
816 $(TCC) /Fo$@ -c main_.c
817
818 main_.c : $(SRCDIR)\main.c
@@ -1174,10 +1183,11 @@
1174 json_timeline_.c:json_timeline.h \
1175 json_user_.c:json_user.h \
1176 json_wiki_.c:json_wiki.h \
1177 leaf_.c:leaf.h \
1178 login_.c:login.h \
 
1179 main_.c:main.h \
1180 manifest_.c:manifest.h \
1181 markdown_.c:markdown.h \
1182 markdown_html_.c:markdown_html.h \
1183 md5_.c:md5.h \
1184
--- win/Makefile.msc
+++ win/Makefile.msc
@@ -116,10 +116,11 @@
116 json_timeline_.c \
117 json_user_.c \
118 json_wiki_.c \
119 leaf_.c \
120 login_.c \
121 lookslike_.c \
122 main_.c \
123 manifest_.c \
124 markdown_.c \
125 markdown_html_.c \
126 md5_.c \
@@ -224,10 +225,11 @@
225 $(OX)\json_timeline$O \
226 $(OX)\json_user$O \
227 $(OX)\json_wiki$O \
228 $(OX)\leaf$O \
229 $(OX)\login$O \
230 $(OX)\lookslike$O \
231 $(OX)\main$O \
232 $(OX)\manifest$O \
233 $(OX)\markdown$O \
234 $(OX)\markdown_html$O \
235 $(OX)\md5$O \
@@ -350,10 +352,11 @@
352 echo $(OX)\json_timeline.obj >> $@
353 echo $(OX)\json_user.obj >> $@
354 echo $(OX)\json_wiki.obj >> $@
355 echo $(OX)\leaf.obj >> $@
356 echo $(OX)\login.obj >> $@
357 echo $(OX)\lookslike.obj >> $@
358 echo $(OX)\main.obj >> $@
359 echo $(OX)\manifest.obj >> $@
360 echo $(OX)\markdown.obj >> $@
361 echo $(OX)\markdown_html.obj >> $@
362 echo $(OX)\md5.obj >> $@
@@ -809,10 +812,16 @@
812 $(OX)\login$O : login_.c login.h
813 $(TCC) /Fo$@ -c login_.c
814
815 login_.c : $(SRCDIR)\login.c
816 translate$E $** > $@
817
818 $(OX)\lookslike$O : lookslike_.c lookslike.h
819 $(TCC) /Fo$@ -c lookslike_.c
820
821 lookslike_.c : $(SRCDIR)\lookslike.c
822 translate$E $** > $@
823
824 $(OX)\main$O : main_.c main.h
825 $(TCC) /Fo$@ -c main_.c
826
827 main_.c : $(SRCDIR)\main.c
@@ -1174,10 +1183,11 @@
1183 json_timeline_.c:json_timeline.h \
1184 json_user_.c:json_user.h \
1185 json_wiki_.c:json_wiki.h \
1186 leaf_.c:leaf.h \
1187 login_.c:login.h \
1188 lookslike_.c:lookslike.h \
1189 main_.c:main.h \
1190 manifest_.c:manifest.h \
1191 markdown_.c:markdown.h \
1192 markdown_html_.c:markdown_html.h \
1193 md5_.c:md5.h \
1194

Keyboard Shortcuts

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