Fossil SCM

Added the carray() virtual table extension from SQLite and added the test-json-carray command to test it. This is needed for the next step on this branch.

wyoung 2021-06-22 01:38 fossil-spawn
Commit 4223fe8cb521331179bfc598d60ead0a161afab60d60bb3c3258af97fd116a89
+454
--- a/src/carray.c
+++ b/src/carray.c
@@ -0,0 +1,454 @@
1
+/*
2
+** 2016-06-29
3
+**
4
+** The author disclaims copyright to this source code. In place of
5
+** a legal notice, here is a blessing:
6
+**
7
+** May you do good and not evil.
8
+** May you find forgiveness for yourself and forgive others.
9
+** May you share freely, never taking more than you give.
10
+**
11
+*************************************************************************
12
+**
13
+** This file demonstrates how to create a table-valued-function that
14
+** returns the values in a C-language array.
15
+** Examples:
16
+**
17
+** SELECT * FROM carray($ptr,5)
18
+**
19
+** The query above returns 5 integers contained in a C-language array
20
+** at the address $ptr. $ptr is a pointer to the array of integers.
21
+** The pointer value must be assigned to $ptr using the
22
+** sqlite3_bind_pointer() interface with a pointer type of "carray".
23
+** For example:
24
+**
25
+** static int aX[] = { 53, 9, 17, 2231, 4, 99 };
26
+** int i = sqlite3_bind_parameter_index(pStmt, "$ptr");
27
+** sqlite3_bind_pointer(pStmt, i, aX, "carray", 0);
28
+**
29
+** There is an optional third parameter to determine the datatype of
30
+** the C-language array. Allowed values of the third parameter are
31
+** 'int32', 'int64', 'double', 'char*'. Example:
32
+**
33
+** SELECT * FROM carray($ptr,10,'char*');
34
+**
35
+** The default value of the third parameter is 'int32'.
36
+**
37
+** HOW IT WORKS
38
+**
39
+** The carray "function" is really a virtual table with the
40
+** following schema:
41
+**
42
+** CREATE TABLE carray(
43
+** value,
44
+** pointer HIDDEN,
45
+** count HIDDEN,
46
+** ctype TEXT HIDDEN
47
+** );
48
+**
49
+** If the hidden columns "pointer" and "count" are unconstrained, then
50
+** the virtual table has no rows. Otherwise, the virtual table interprets
51
+** the integer value of "pointer" as a pointer to the array and "count"
52
+** as the number of elements in the array. The virtual table steps through
53
+** the array, element by element.
54
+*/
55
+#define SQext.h"
56
+SQLITE_EXTENSION_INIT1E_CORE
57
+#include "sqlite3.h"
58
+#include <assert.h>
59
+#include <string.h>
60
+#include "carray.h"
61
+
62
+/* Allowed values for the mFlags parameter to sqlite3_carray_bind().
63
+** Must exactly match the definitions in carray.h.
64
+*/
65
+#if INTERFACE
66
+#define CARRAY_INT32 0 /* Data is 32-bit signed integers */
67
+#define CARRAY_INT64 1 /* Data is 64-bit signed integers */
68
+#define CARRAY_DOUBLE 2 /* Data is doubles */
69
+#define CARRAY_TEXT 3 /* Data is char* */
70
+#endif /* INTERFACE */
71
+
72
+#ifndef SQLITE_OMIT_VIRTUALTABLE
73
+
74
+/*
75
+** Names of allowed datatypes
76
+*/
77
+static const char *azType[] = { "int32", "int64", "double", "char*" };
78
+
79
+/*
80
+** Structure used to hold the sqlite3_carray_bind() information
81
+*/
82
+typedef struct carray_bind carray_bind;
83
+struct carray_bind {
84
+ void *aData; /* The data */
85
+ int nData; /* Number of elements */
86
+ int mFlags; /* Control flags */
87
+ void (*xDel)(void*); /* Destructor for aData */
88
+};
89
+
90
+
91
+/* carray_cursor is a subclass of sqlite3_vtab_cursor which will
92
+** serve as the underlying representation of a cursor that scans
93
+** over rows of the result
94
+*/
95
+typedef struct carray_cursor carray_cursor;
96
+struct carray_cursor {
97
+ sqlite3_vtab_cursor base; /* Base class - must be first */
98
+ sqlite3_int64 iRowid; /* The rowid */
99
+ void *pPtr; /* Pointer to the array of values */
100
+ sqlite3_int64 iCnt; /* Number of integers in the array */
101
+ unsigned char eType; /* One of the CARRAY_type values */
102
+};
103
+
104
+/*
105
+** The carrayConnect() method is invoked to create a new
106
+** carray_vtab that describes the carray virtual table.
107
+**
108
+** Think of this routine as the constructor for carray_vtab objects.
109
+**
110
+** All this routine needs to do is:
111
+**
112
+** (1) Allocate the carray_vtab object and initialize all fields.
113
+**
114
+** (2) Tell SQLite (via the sqlite3_declare_vtab() interface) what the
115
+** result set of queries against carray will look like.
116
+*/
117
+static int carrayConnect(
118
+ sqlite3 *db,
119
+ void *pAux,
120
+ int argc, const char *const*argv,
121
+ sqlite3_vtab **ppVtab,
122
+ char **pzErr
123
+){
124
+ sqlite3_vtab *pNew;
125
+ int rc;
126
+
127
+/* Column numbers */
128
+#define CARRAY_COLUMN_VALUE 0
129
+#define CARRAY_COLUMN_POINTER 1
130
+#define CARRAY_COLUMN_COUNT 2
131
+#define CARRAY_COLUMN_CTYPE 3
132
+
133
+ rc = sqlite3_declare_vtab(db,
134
+ "CREATE TABLE x(value,pointer hidden,count hidden,ctype hidden)");
135
+ if( rc==SQLITE_OK ){
136
+ pNew = *ppVtab = sqlite3_malloc( sizeof(*pNew) );
137
+ if( pNew==0 ) return SQLITE_NOMEM;
138
+ memset(pNew, 0, sizeof(*pNew));
139
+ }
140
+ return rc;
141
+}
142
+
143
+/*
144
+** This method is the destructor for carray_cursor objects.
145
+*/
146
+static int carrayDisconnect(sqlite3_vtab *pVtab){
147
+ sqlite3_free(pVtab);
148
+ return SQLITE_OK;
149
+}
150
+
151
+/*
152
+** Constructor for a new carray_cursor object.
153
+*/
154
+static int carrayOpen(sqlite3_vtab *p, sqlite3_vtab_cursor **ppCursor){
155
+ carray_cursor *pCur;
156
+ pCur = sqlite3_malloc( sizeof(*pCur) );
157
+ if( pCur==0 ) return SQLITE_NOMEM;
158
+ memset(pCur, 0, sizeof(*pCur));
159
+ *ppCursor = &pCur->base;
160
+ return SQLITE_OK;
161
+}
162
+
163
+/*
164
+** Destructor for a carray_cursor.
165
+*/
166
+static int carrayClose(sqlite3_vtab_cursor *cur){
167
+ sqlite3_free(cur);
168
+ return SQLITE_OK;
169
+}
170
+
171
+
172
+/*
173
+** Advance a carray_cursor to its next row of output.
174
+*/
175
+static int carrayNext(sqlite3_vtab_cursor *cur){
176
+ carray_cursor *pCur = (carray_cursor*)cur;
177
+ pCur->iRowid++;
178
+ return SQLITE_OK;
179
+}
180
+
181
+/*
182
+** Return values of columns for the row at which the carray_cursor
183
+** is currently pointing.
184
+*/
185
+static int carrayColumn(
186
+ sqlite3_vtab_cursor *cur, /* The cursor */
187
+ sqlite3_context *ctx, /* First argument to sqlite3_result_...() */
188
+ int i /* Which column to return */
189
+){
190
+ carray_cursor *pCur = (carray_cursor*)cur;
191
+ sqlite3_int64 x = 0;
192
+ switch( i ){
193
+ case CARRAY_COLUMN_POINTER: return SQLITE_OK;
194
+ case CARRAY_COLUMN_COUNT: x = pCur->iCnt; break;
195
+ case CARRAY_COLUMN_CTYPE: {
196
+ sqlite3_result_text(ctx, azType[pCur->eType], -1, SQLITE_STATIC);
197
+ return SQLITE_OK;
198
+ }
199
+ default: {
200
+ switch( pCur->eType ){
201
+ case CARRAY_INT32: {
202
+ int *p = (int*)pCur->pPtr;
203
+ sqlite3_result_int(ctx, p[pCur->iRowid-1]);
204
+ return SQLITE_OK;
205
+ }
206
+ case CARRAY_INT64: {
207
+ sqlite3_int64 *p = (sqlite3_int64*)pCur->pPtr;
208
+ sqlite3_result_int64(ctx, p[pCur->iRowid-1]);
209
+ return SQLITE_OK;
210
+ }
211
+ case CARRAY_DOUBLE: {
212
+ double *p = (double*)pCur->pPtr;
213
+ sqlite3_result_double(ctx, p[pCur->iRowid-1]);
214
+ return SQLITE_OK;
215
+ }
216
+ case CARRAY_TEXT: {
217
+ const char **p = (const char**)pCur->pPtr;
218
+ sqlite3_result_text(ctx, p[pCur->iRowid-1], -1, SQLITE_TRANSIENT);
219
+ return SQLITE_OK;
220
+ }
221
+ }
222
+ }
223
+ }
224
+ sqlite3_result_int64(ctx, x);
225
+ return SQLITE_OK;
226
+}
227
+
228
+/*
229
+** Return the rowid for the current row. In this implementation, the
230
+** rowid is the same as the output value.
231
+*/
232
+static int carrayRowid(sqlite3_vtab_cursor *cur, sqlite_int64 *pRowid){
233
+ carray_cursor *pCur = (carray_cursor*)cur;
234
+ *pRowid = pCur->iRowid;
235
+ return SQLITE_OK;
236
+}
237
+
238
+/*
239
+** Return TRUE if the cursor has been moved off of the last
240
+** row of output.
241
+*/
242
+static int carrayEof(sqlite3_vtab_cursor *cur){
243
+ carray_cursor *pCur = (carray_cursor*)cur;
244
+ return pCur->iRowid>pCur->iCnt;
245
+}
246
+
247
+/*
248
+** This method is called to "rewind" the carray_cursor object back
249
+** to the first row of output.
250
+*/
251
+static int carrayFilter(
252
+ sqlite3_vtab_cursor *pVtabCursor,
253
+ int idxNum, const char *idxStr,
254
+ int argc, sqlite3_value **argv
255
+){
256
+ carray_cursor *pCur = (carray_cursor *)pVtabCursor;
257
+ pCur->pPtr = 0;
258
+ pCur->iCnt = 0;
259
+ switch( idxNum ){
260
+ case 1: {
261
+ carray_bind *pBind = sqlite3_value_pointer(argv[0], "carray-bind");
262
+ if( pBind==0 ) break;
263
+ pCur->pPtr = pBind->aData;
264
+ pCur->iCnt = pBind->nData;
265
+ pCur->eType = pBind->mFlags & 0x03;
266
+ break;
267
+ }
268
+ case 2:
269
+ case 3: {
270
+ pCur->pPtr = sqlite3_value_pointer(argv[0], "carray");
271
+ pCur->iCnt = pCur->pPtr ? sqlite3_value_int64(argv[1]) : 0;
272
+ if( idxNum<3 ){
273
+ pCur->eType = CARRAY_INT32;
274
+ }else{
275
+ unsigned char i;
276
+ const char *zType = (const char*)sqlite3_value_text(argv[2]);
277
+ for(i=0; i<sizeof(azType)/sizeof(azType[0]); i++){
278
+ if( sqlite3_stricmp(zType, azType[i])==0 ) break;
279
+ }
280
+ if( i>=sizeof(azType)/sizeof(azType[0]) ){
281
+ pVtabCursor->pVtab->zErrMsg = sqlite3_mprintf(
282
+ "unknown datatype: %Q", zType);
283
+ return SQLITE_ERROR;
284
+ }else{
285
+ pCur->eType = i;
286
+ }
287
+ }
288
+ break;
289
+ }
290
+ }
291
+ pCur->iRowid = 1;
292
+ return SQLITE_OK;
293
+}
294
+
295
+/*
296
+** SQLite will invoke this method one or more times while planning a query
297
+** that uses the carray virtual table. This routine needs to create
298
+** a query plan for each invocation and compute an estimated cost for that
299
+** plan.
300
+**
301
+** In this implementation idxNum is used to represent the
302
+** query plan. idxStr is unused.
303
+**
304
+** idxNum is:
305
+**
306
+** 1 If only the pointer= constraint exists. In this case, the
307
+** parameter must be bound using sqlite3_carray_bind().
308
+**
309
+** 2 if the pointer= and count= constraints exist.
310
+**
311
+** 3 if the ctype= constraint also exists.
312
+**
313
+** idxNum is 0 otherwise and carray becomes an empty table.
314
+*/
315
+static int carrayBestIndex(
316
+ sqlite3_vtab *tab,
317
+ sqlite3_index_info *pIdxInfo
318
+){
319
+ int i; /* Loop over constraints */
320
+ int ptrIdx = -1; /* Index of the pointer= constraint, or -1 if none */
321
+ int cntIdx = -1; /* Index of the count= constraint, or -1 if none */
322
+ int ctypeIdx = -1; /* Index of the ctype= constraint, or -1 if none */
323
+
324
+ const struct sqlite3_index_constraint *pConstraint;
325
+ pConstraint = pIdxInfo->aConstraint;
326
+ for(i=0; i<pIdxInfo->nConstraint; i++, pConstraint++){
327
+ if( pConstraint->usable==0 ) continue;
328
+ if( pConstraint->op!=SQLITE_INDEX_CONSTRAINT_EQ ) continue;
329
+ switch( pConstraint->iColumn ){
330
+ case CARRAY_COLUMN_POINTER:
331
+ ptrIdx = i;
332
+ break;
333
+ case CARRAY_COLUMN_COUNT:
334
+ cntIdx = i;
335
+ break;
336
+ case CARRAY_COLUMN_CTYPE:
337
+ ctypeIdx = i;
338
+ break;
339
+ }
340
+ }
341
+ if( ptrIdx>=0 ){
342
+ pIdxInfo->aConstraintUsage[ptrIdx].argvIndex = 1;
343
+ pIdxInfo->aConstraintUsage[ptrIdx].omit = 1;
344
+ pIdxInfo->estimatedCost = (double)1;
345
+ pIdxInfo->estimatedRows = 100;
346
+ pIdxInfo->idxNum = 1;
347
+ if( cntIdx>=0 ){
348
+ pIdxInfo->aConstraintUsage[cntIdx].argvIndex = 2;
349
+ pIdxInfo->aConstraintUsage[cntIdx].omit = 1;
350
+ pIdxInfo->idxNum = 2;
351
+ if( ctypeIdx>=0 ){
352
+ pIdxInfo->aConstraintUsage[ctypeIdx].argvIndex = 3;
353
+ pIdxInfo->aConstraintUsage[ctypeIdx].omit = 1;
354
+ pIdxInfo->idxNum = 3;
355
+ }
356
+ }
357
+ }else{
358
+ pIdxInfo->estimatedCost = (double)2147483647;
359
+ pIdxInfo->estimatedRows = 2147483647;
360
+ pIdxInfo->idxNum = 0;
361
+ }
362
+ return SQLITE_OK;
363
+}
364
+
365
+/*
366
+** This following structure defines all the methods for the
367
+** carray virtual table.
368
+*/
369
+static sqlite3_module carrayModule = {
370
+ 0, /* iVersion */
371
+ 0, /* xCreate */
372
+ carrayConnect, /* xConnect */
373
+ carrayBestIndex, /* xBestIndex */
374
+ carrayDisconnect, /* xDisconnect */
375
+ 0, /* xDestroy */
376
+ carrayOpen, /* xOpen - open a cursor */
377
+ carrayClose, /* xClose - close a cursor */
378
+ carrayFilter, /* xFilter - configure scan constraints */
379
+ carrayNext, /* xNext - advance a cursor */
380
+ carrayEof, /* xEof - check for end of scan */
381
+ carrayColumn, /* xColumn - read data */
382
+ carrayRowid, /* xRowid - read data */
383
+ 0, /* xUpdate */
384
+ 0, /* xBegin */
385
+ 0, /* xSync */
386
+ 0, /* xCommit */
387
+ 0, /* xRollback */
388
+ 0, /* xFindMethod */
389
+ 0, /* xRename */
390
+};
391
+
392
+/*
393
+** Destructor for the carray_bind object
394
+*/
395
+static void carrayBindDel(void *pPtr){
396
+ carray_bind *p = (carray_bind*)pPtr;
397
+ if( p->xDel!=SQLITE_STATIC ){
398
+ p->xDel(p->aData);
399
+ }
400
+ sqlite3_free(p);
401
+}
402
+
403
+/*
404
+** Invoke this interface in order to bind to the single-argument
405
+** version of CARRAY().
406
+*/
407
+#ifdef _WIN32
408
+__declspec(dllexport)
409
+#endif
410
+int sqlite3_carray_bind(
411
+ sqlite3_stmt *pStmt,
412
+ int idx,
413
+ void *aData,
414
+ int nData,
415
+ int mFlags,
416
+ void (*xDestroy)(void*)
417
+){
418
+ carray_bind *pNew;
419
+ int i;
420
+ pNew = sqlite3_malloc64(sizeof(*pNew));
421
+ if( pNew==0 ){
422
+ if( xDestroy!=SQLITE_STATIC && xDestroy!=SQLITE_TRANSIENT ){
423
+ xDestroy(aData);
424
+ }
425
+ return SQLITE_NOMEM;
426
+ }
427
+ pNew->nData = nData;
428
+ pNew->mFlags = mFlags;
429
+ if( xDestroy==SQLITE_TRANSIENT ){
430
+ sqlite3_int64 sz = nData;
431
+ switch( mFlags & 0x03 ){
432
+ case CARRAY_INT32: sz *= 4; break;
433
+ case CARRAY_INT64: sz *= 8; break;
434
+ case CARRAY_DOUBLE: sz *= 8; break;
435
+ case CARRAY_TEXT: sz *= sizeof(char*); break;
436
+ }
437
+ if( (mFlags & 0x03)==CARRAY_TEXT ){
438
+ for(i=0; i<nData; i++){
439
+ const char *z = ((char**)aData)[i];
440
+ if( z ) sz += strlen(z) + 1;
441
+ }
442
+ }
443
+ pNew->aData = sqlite3_malloc64( sz );
444
+ if( pNew->aData==0 ){
445
+ sqlite3_free(pNew);
446
+ return SQLITE_NOMEM;
447
+ }
448
+ if( (mFlags & 0x03)==CARRAY_TEXT ){
449
+ char **az = (char**)pNew->aData;
450
+ char *z = (char*)&az[nData];
451
+ for(i=0; i<nData; i++){
452
+ const char *zData = ((char**)aData)[i];
453
+ sqlite3_int64 n;
454
+ if( zDa
--- a/src/carray.c
+++ b/src/carray.c
@@ -0,0 +1,454 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
--- a/src/carray.c
+++ b/src/carray.c
@@ -0,0 +1,454 @@
1 /*
2 ** 2016-06-29
3 **
4 ** The author disclaims copyright to this source code. In place of
5 ** a legal notice, here is a blessing:
6 **
7 ** May you do good and not evil.
8 ** May you find forgiveness for yourself and forgive others.
9 ** May you share freely, never taking more than you give.
10 **
11 *************************************************************************
12 **
13 ** This file demonstrates how to create a table-valued-function that
14 ** returns the values in a C-language array.
15 ** Examples:
16 **
17 ** SELECT * FROM carray($ptr,5)
18 **
19 ** The query above returns 5 integers contained in a C-language array
20 ** at the address $ptr. $ptr is a pointer to the array of integers.
21 ** The pointer value must be assigned to $ptr using the
22 ** sqlite3_bind_pointer() interface with a pointer type of "carray".
23 ** For example:
24 **
25 ** static int aX[] = { 53, 9, 17, 2231, 4, 99 };
26 ** int i = sqlite3_bind_parameter_index(pStmt, "$ptr");
27 ** sqlite3_bind_pointer(pStmt, i, aX, "carray", 0);
28 **
29 ** There is an optional third parameter to determine the datatype of
30 ** the C-language array. Allowed values of the third parameter are
31 ** 'int32', 'int64', 'double', 'char*'. Example:
32 **
33 ** SELECT * FROM carray($ptr,10,'char*');
34 **
35 ** The default value of the third parameter is 'int32'.
36 **
37 ** HOW IT WORKS
38 **
39 ** The carray "function" is really a virtual table with the
40 ** following schema:
41 **
42 ** CREATE TABLE carray(
43 ** value,
44 ** pointer HIDDEN,
45 ** count HIDDEN,
46 ** ctype TEXT HIDDEN
47 ** );
48 **
49 ** If the hidden columns "pointer" and "count" are unconstrained, then
50 ** the virtual table has no rows. Otherwise, the virtual table interprets
51 ** the integer value of "pointer" as a pointer to the array and "count"
52 ** as the number of elements in the array. The virtual table steps through
53 ** the array, element by element.
54 */
55 #define SQext.h"
56 SQLITE_EXTENSION_INIT1E_CORE
57 #include "sqlite3.h"
58 #include <assert.h>
59 #include <string.h>
60 #include "carray.h"
61
62 /* Allowed values for the mFlags parameter to sqlite3_carray_bind().
63 ** Must exactly match the definitions in carray.h.
64 */
65 #if INTERFACE
66 #define CARRAY_INT32 0 /* Data is 32-bit signed integers */
67 #define CARRAY_INT64 1 /* Data is 64-bit signed integers */
68 #define CARRAY_DOUBLE 2 /* Data is doubles */
69 #define CARRAY_TEXT 3 /* Data is char* */
70 #endif /* INTERFACE */
71
72 #ifndef SQLITE_OMIT_VIRTUALTABLE
73
74 /*
75 ** Names of allowed datatypes
76 */
77 static const char *azType[] = { "int32", "int64", "double", "char*" };
78
79 /*
80 ** Structure used to hold the sqlite3_carray_bind() information
81 */
82 typedef struct carray_bind carray_bind;
83 struct carray_bind {
84 void *aData; /* The data */
85 int nData; /* Number of elements */
86 int mFlags; /* Control flags */
87 void (*xDel)(void*); /* Destructor for aData */
88 };
89
90
91 /* carray_cursor is a subclass of sqlite3_vtab_cursor which will
92 ** serve as the underlying representation of a cursor that scans
93 ** over rows of the result
94 */
95 typedef struct carray_cursor carray_cursor;
96 struct carray_cursor {
97 sqlite3_vtab_cursor base; /* Base class - must be first */
98 sqlite3_int64 iRowid; /* The rowid */
99 void *pPtr; /* Pointer to the array of values */
100 sqlite3_int64 iCnt; /* Number of integers in the array */
101 unsigned char eType; /* One of the CARRAY_type values */
102 };
103
104 /*
105 ** The carrayConnect() method is invoked to create a new
106 ** carray_vtab that describes the carray virtual table.
107 **
108 ** Think of this routine as the constructor for carray_vtab objects.
109 **
110 ** All this routine needs to do is:
111 **
112 ** (1) Allocate the carray_vtab object and initialize all fields.
113 **
114 ** (2) Tell SQLite (via the sqlite3_declare_vtab() interface) what the
115 ** result set of queries against carray will look like.
116 */
117 static int carrayConnect(
118 sqlite3 *db,
119 void *pAux,
120 int argc, const char *const*argv,
121 sqlite3_vtab **ppVtab,
122 char **pzErr
123 ){
124 sqlite3_vtab *pNew;
125 int rc;
126
127 /* Column numbers */
128 #define CARRAY_COLUMN_VALUE 0
129 #define CARRAY_COLUMN_POINTER 1
130 #define CARRAY_COLUMN_COUNT 2
131 #define CARRAY_COLUMN_CTYPE 3
132
133 rc = sqlite3_declare_vtab(db,
134 "CREATE TABLE x(value,pointer hidden,count hidden,ctype hidden)");
135 if( rc==SQLITE_OK ){
136 pNew = *ppVtab = sqlite3_malloc( sizeof(*pNew) );
137 if( pNew==0 ) return SQLITE_NOMEM;
138 memset(pNew, 0, sizeof(*pNew));
139 }
140 return rc;
141 }
142
143 /*
144 ** This method is the destructor for carray_cursor objects.
145 */
146 static int carrayDisconnect(sqlite3_vtab *pVtab){
147 sqlite3_free(pVtab);
148 return SQLITE_OK;
149 }
150
151 /*
152 ** Constructor for a new carray_cursor object.
153 */
154 static int carrayOpen(sqlite3_vtab *p, sqlite3_vtab_cursor **ppCursor){
155 carray_cursor *pCur;
156 pCur = sqlite3_malloc( sizeof(*pCur) );
157 if( pCur==0 ) return SQLITE_NOMEM;
158 memset(pCur, 0, sizeof(*pCur));
159 *ppCursor = &pCur->base;
160 return SQLITE_OK;
161 }
162
163 /*
164 ** Destructor for a carray_cursor.
165 */
166 static int carrayClose(sqlite3_vtab_cursor *cur){
167 sqlite3_free(cur);
168 return SQLITE_OK;
169 }
170
171
172 /*
173 ** Advance a carray_cursor to its next row of output.
174 */
175 static int carrayNext(sqlite3_vtab_cursor *cur){
176 carray_cursor *pCur = (carray_cursor*)cur;
177 pCur->iRowid++;
178 return SQLITE_OK;
179 }
180
181 /*
182 ** Return values of columns for the row at which the carray_cursor
183 ** is currently pointing.
184 */
185 static int carrayColumn(
186 sqlite3_vtab_cursor *cur, /* The cursor */
187 sqlite3_context *ctx, /* First argument to sqlite3_result_...() */
188 int i /* Which column to return */
189 ){
190 carray_cursor *pCur = (carray_cursor*)cur;
191 sqlite3_int64 x = 0;
192 switch( i ){
193 case CARRAY_COLUMN_POINTER: return SQLITE_OK;
194 case CARRAY_COLUMN_COUNT: x = pCur->iCnt; break;
195 case CARRAY_COLUMN_CTYPE: {
196 sqlite3_result_text(ctx, azType[pCur->eType], -1, SQLITE_STATIC);
197 return SQLITE_OK;
198 }
199 default: {
200 switch( pCur->eType ){
201 case CARRAY_INT32: {
202 int *p = (int*)pCur->pPtr;
203 sqlite3_result_int(ctx, p[pCur->iRowid-1]);
204 return SQLITE_OK;
205 }
206 case CARRAY_INT64: {
207 sqlite3_int64 *p = (sqlite3_int64*)pCur->pPtr;
208 sqlite3_result_int64(ctx, p[pCur->iRowid-1]);
209 return SQLITE_OK;
210 }
211 case CARRAY_DOUBLE: {
212 double *p = (double*)pCur->pPtr;
213 sqlite3_result_double(ctx, p[pCur->iRowid-1]);
214 return SQLITE_OK;
215 }
216 case CARRAY_TEXT: {
217 const char **p = (const char**)pCur->pPtr;
218 sqlite3_result_text(ctx, p[pCur->iRowid-1], -1, SQLITE_TRANSIENT);
219 return SQLITE_OK;
220 }
221 }
222 }
223 }
224 sqlite3_result_int64(ctx, x);
225 return SQLITE_OK;
226 }
227
228 /*
229 ** Return the rowid for the current row. In this implementation, the
230 ** rowid is the same as the output value.
231 */
232 static int carrayRowid(sqlite3_vtab_cursor *cur, sqlite_int64 *pRowid){
233 carray_cursor *pCur = (carray_cursor*)cur;
234 *pRowid = pCur->iRowid;
235 return SQLITE_OK;
236 }
237
238 /*
239 ** Return TRUE if the cursor has been moved off of the last
240 ** row of output.
241 */
242 static int carrayEof(sqlite3_vtab_cursor *cur){
243 carray_cursor *pCur = (carray_cursor*)cur;
244 return pCur->iRowid>pCur->iCnt;
245 }
246
247 /*
248 ** This method is called to "rewind" the carray_cursor object back
249 ** to the first row of output.
250 */
251 static int carrayFilter(
252 sqlite3_vtab_cursor *pVtabCursor,
253 int idxNum, const char *idxStr,
254 int argc, sqlite3_value **argv
255 ){
256 carray_cursor *pCur = (carray_cursor *)pVtabCursor;
257 pCur->pPtr = 0;
258 pCur->iCnt = 0;
259 switch( idxNum ){
260 case 1: {
261 carray_bind *pBind = sqlite3_value_pointer(argv[0], "carray-bind");
262 if( pBind==0 ) break;
263 pCur->pPtr = pBind->aData;
264 pCur->iCnt = pBind->nData;
265 pCur->eType = pBind->mFlags & 0x03;
266 break;
267 }
268 case 2:
269 case 3: {
270 pCur->pPtr = sqlite3_value_pointer(argv[0], "carray");
271 pCur->iCnt = pCur->pPtr ? sqlite3_value_int64(argv[1]) : 0;
272 if( idxNum<3 ){
273 pCur->eType = CARRAY_INT32;
274 }else{
275 unsigned char i;
276 const char *zType = (const char*)sqlite3_value_text(argv[2]);
277 for(i=0; i<sizeof(azType)/sizeof(azType[0]); i++){
278 if( sqlite3_stricmp(zType, azType[i])==0 ) break;
279 }
280 if( i>=sizeof(azType)/sizeof(azType[0]) ){
281 pVtabCursor->pVtab->zErrMsg = sqlite3_mprintf(
282 "unknown datatype: %Q", zType);
283 return SQLITE_ERROR;
284 }else{
285 pCur->eType = i;
286 }
287 }
288 break;
289 }
290 }
291 pCur->iRowid = 1;
292 return SQLITE_OK;
293 }
294
295 /*
296 ** SQLite will invoke this method one or more times while planning a query
297 ** that uses the carray virtual table. This routine needs to create
298 ** a query plan for each invocation and compute an estimated cost for that
299 ** plan.
300 **
301 ** In this implementation idxNum is used to represent the
302 ** query plan. idxStr is unused.
303 **
304 ** idxNum is:
305 **
306 ** 1 If only the pointer= constraint exists. In this case, the
307 ** parameter must be bound using sqlite3_carray_bind().
308 **
309 ** 2 if the pointer= and count= constraints exist.
310 **
311 ** 3 if the ctype= constraint also exists.
312 **
313 ** idxNum is 0 otherwise and carray becomes an empty table.
314 */
315 static int carrayBestIndex(
316 sqlite3_vtab *tab,
317 sqlite3_index_info *pIdxInfo
318 ){
319 int i; /* Loop over constraints */
320 int ptrIdx = -1; /* Index of the pointer= constraint, or -1 if none */
321 int cntIdx = -1; /* Index of the count= constraint, or -1 if none */
322 int ctypeIdx = -1; /* Index of the ctype= constraint, or -1 if none */
323
324 const struct sqlite3_index_constraint *pConstraint;
325 pConstraint = pIdxInfo->aConstraint;
326 for(i=0; i<pIdxInfo->nConstraint; i++, pConstraint++){
327 if( pConstraint->usable==0 ) continue;
328 if( pConstraint->op!=SQLITE_INDEX_CONSTRAINT_EQ ) continue;
329 switch( pConstraint->iColumn ){
330 case CARRAY_COLUMN_POINTER:
331 ptrIdx = i;
332 break;
333 case CARRAY_COLUMN_COUNT:
334 cntIdx = i;
335 break;
336 case CARRAY_COLUMN_CTYPE:
337 ctypeIdx = i;
338 break;
339 }
340 }
341 if( ptrIdx>=0 ){
342 pIdxInfo->aConstraintUsage[ptrIdx].argvIndex = 1;
343 pIdxInfo->aConstraintUsage[ptrIdx].omit = 1;
344 pIdxInfo->estimatedCost = (double)1;
345 pIdxInfo->estimatedRows = 100;
346 pIdxInfo->idxNum = 1;
347 if( cntIdx>=0 ){
348 pIdxInfo->aConstraintUsage[cntIdx].argvIndex = 2;
349 pIdxInfo->aConstraintUsage[cntIdx].omit = 1;
350 pIdxInfo->idxNum = 2;
351 if( ctypeIdx>=0 ){
352 pIdxInfo->aConstraintUsage[ctypeIdx].argvIndex = 3;
353 pIdxInfo->aConstraintUsage[ctypeIdx].omit = 1;
354 pIdxInfo->idxNum = 3;
355 }
356 }
357 }else{
358 pIdxInfo->estimatedCost = (double)2147483647;
359 pIdxInfo->estimatedRows = 2147483647;
360 pIdxInfo->idxNum = 0;
361 }
362 return SQLITE_OK;
363 }
364
365 /*
366 ** This following structure defines all the methods for the
367 ** carray virtual table.
368 */
369 static sqlite3_module carrayModule = {
370 0, /* iVersion */
371 0, /* xCreate */
372 carrayConnect, /* xConnect */
373 carrayBestIndex, /* xBestIndex */
374 carrayDisconnect, /* xDisconnect */
375 0, /* xDestroy */
376 carrayOpen, /* xOpen - open a cursor */
377 carrayClose, /* xClose - close a cursor */
378 carrayFilter, /* xFilter - configure scan constraints */
379 carrayNext, /* xNext - advance a cursor */
380 carrayEof, /* xEof - check for end of scan */
381 carrayColumn, /* xColumn - read data */
382 carrayRowid, /* xRowid - read data */
383 0, /* xUpdate */
384 0, /* xBegin */
385 0, /* xSync */
386 0, /* xCommit */
387 0, /* xRollback */
388 0, /* xFindMethod */
389 0, /* xRename */
390 };
391
392 /*
393 ** Destructor for the carray_bind object
394 */
395 static void carrayBindDel(void *pPtr){
396 carray_bind *p = (carray_bind*)pPtr;
397 if( p->xDel!=SQLITE_STATIC ){
398 p->xDel(p->aData);
399 }
400 sqlite3_free(p);
401 }
402
403 /*
404 ** Invoke this interface in order to bind to the single-argument
405 ** version of CARRAY().
406 */
407 #ifdef _WIN32
408 __declspec(dllexport)
409 #endif
410 int sqlite3_carray_bind(
411 sqlite3_stmt *pStmt,
412 int idx,
413 void *aData,
414 int nData,
415 int mFlags,
416 void (*xDestroy)(void*)
417 ){
418 carray_bind *pNew;
419 int i;
420 pNew = sqlite3_malloc64(sizeof(*pNew));
421 if( pNew==0 ){
422 if( xDestroy!=SQLITE_STATIC && xDestroy!=SQLITE_TRANSIENT ){
423 xDestroy(aData);
424 }
425 return SQLITE_NOMEM;
426 }
427 pNew->nData = nData;
428 pNew->mFlags = mFlags;
429 if( xDestroy==SQLITE_TRANSIENT ){
430 sqlite3_int64 sz = nData;
431 switch( mFlags & 0x03 ){
432 case CARRAY_INT32: sz *= 4; break;
433 case CARRAY_INT64: sz *= 8; break;
434 case CARRAY_DOUBLE: sz *= 8; break;
435 case CARRAY_TEXT: sz *= sizeof(char*); break;
436 }
437 if( (mFlags & 0x03)==CARRAY_TEXT ){
438 for(i=0; i<nData; i++){
439 const char *z = ((char**)aData)[i];
440 if( z ) sz += strlen(z) + 1;
441 }
442 }
443 pNew->aData = sqlite3_malloc64( sz );
444 if( pNew->aData==0 ){
445 sqlite3_free(pNew);
446 return SQLITE_NOMEM;
447 }
448 if( (mFlags & 0x03)==CARRAY_TEXT ){
449 char **az = (char**)pNew->aData;
450 char *z = (char*)&az[nData];
451 for(i=0; i<nData; i++){
452 const char *zData = ((char**)aData)[i];
453 sqlite3_int64 n;
454 if( zDa
+27
--- src/db.c
+++ src/db.c
@@ -4479,10 +4479,37 @@
44794479
if( g.argc!=3 ) usage("TIMESTAMP");
44804480
sqlite3_open(":memory:", &g.db);
44814481
rDiff = db_double(0.0, "SELECT julianday('now') - julianday(%Q)", g.argv[2]);
44824482
fossil_print("Time differences: %s\n", db_timespan_name(rDiff));
44834483
sqlite3_close(g.db);
4484
+ g.db = 0;
4485
+ g.repositoryOpen = 0;
4486
+ g.localOpen = 0;
4487
+}
4488
+
4489
+/*
4490
+** COMMAND: test-json-carray
4491
+**
4492
+** Serializes the passed arguments as a JSON array of strings, proving that
4493
+** the JSON1 and Carray SQLite extensions are cooperating.
4494
+*/
4495
+void test_json_carray_cmd(void){
4496
+ Stmt q;
4497
+ sqlite3_open(":memory:", &g.db);
4498
+ sqlite3_carray_init(g.db, 0, 0);
4499
+ db_prepare(&q, "SELECT json_group_array(value) FROM carray(?1)");
4500
+ if( sqlite3_carray_bind(q.pStmt, 1, g.argv+2, g.argc-2, CARRAY_TEXT,
4501
+ SQLITE_STATIC)!= SQLITE_OK){
4502
+ fossil_fatal("Could not bind argv array: %s\n", sqlite3_errmsg(g.db));
4503
+ }
4504
+ if( db_step(&q)==SQLITE_ROW ){
4505
+ fossil_print("%s\n", db_column_text(&q, 0));
4506
+ }else{
4507
+ fossil_fatal("SQLite error: %s", sqlite3_errmsg(g.db));
4508
+ }
4509
+ db_finalize(&q);
4510
+ sqlite3_close(g.db);
44844511
g.db = 0;
44854512
g.repositoryOpen = 0;
44864513
g.localOpen = 0;
44874514
}
44884515
44894516
--- src/db.c
+++ src/db.c
@@ -4479,10 +4479,37 @@
4479 if( g.argc!=3 ) usage("TIMESTAMP");
4480 sqlite3_open(":memory:", &g.db);
4481 rDiff = db_double(0.0, "SELECT julianday('now') - julianday(%Q)", g.argv[2]);
4482 fossil_print("Time differences: %s\n", db_timespan_name(rDiff));
4483 sqlite3_close(g.db);
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
4484 g.db = 0;
4485 g.repositoryOpen = 0;
4486 g.localOpen = 0;
4487 }
4488
4489
--- src/db.c
+++ src/db.c
@@ -4479,10 +4479,37 @@
4479 if( g.argc!=3 ) usage("TIMESTAMP");
4480 sqlite3_open(":memory:", &g.db);
4481 rDiff = db_double(0.0, "SELECT julianday('now') - julianday(%Q)", g.argv[2]);
4482 fossil_print("Time differences: %s\n", db_timespan_name(rDiff));
4483 sqlite3_close(g.db);
4484 g.db = 0;
4485 g.repositoryOpen = 0;
4486 g.localOpen = 0;
4487 }
4488
4489 /*
4490 ** COMMAND: test-json-carray
4491 **
4492 ** Serializes the passed arguments as a JSON array of strings, proving that
4493 ** the JSON1 and Carray SQLite extensions are cooperating.
4494 */
4495 void test_json_carray_cmd(void){
4496 Stmt q;
4497 sqlite3_open(":memory:", &g.db);
4498 sqlite3_carray_init(g.db, 0, 0);
4499 db_prepare(&q, "SELECT json_group_array(value) FROM carray(?1)");
4500 if( sqlite3_carray_bind(q.pStmt, 1, g.argv+2, g.argc-2, CARRAY_TEXT,
4501 SQLITE_STATIC)!= SQLITE_OK){
4502 fossil_fatal("Could not bind argv array: %s\n", sqlite3_errmsg(g.db));
4503 }
4504 if( db_step(&q)==SQLITE_ROW ){
4505 fossil_print("%s\n", db_column_text(&q, 0));
4506 }else{
4507 fossil_fatal("SQLite error: %s", sqlite3_errmsg(g.db));
4508 }
4509 db_finalize(&q);
4510 sqlite3_close(g.db);
4511 g.db = 0;
4512 g.repositoryOpen = 0;
4513 g.localOpen = 0;
4514 }
4515
4516
+12
--- src/main.mk
+++ src/main.mk
@@ -31,10 +31,11 @@
3131
$(SRCDIR)/builtin.c \
3232
$(SRCDIR)/bundle.c \
3333
$(SRCDIR)/cache.c \
3434
$(SRCDIR)/capabilities.c \
3535
$(SRCDIR)/captcha.c \
36
+ $(SRCDIR)/carray.c \
3637
$(SRCDIR)/cgi.c \
3738
$(SRCDIR)/chat.c \
3839
$(SRCDIR)/checkin.c \
3940
$(SRCDIR)/checkout.c \
4041
$(SRCDIR)/clearsign.c \
@@ -288,10 +289,11 @@
288289
$(OBJDIR)/builtin_.c \
289290
$(OBJDIR)/bundle_.c \
290291
$(OBJDIR)/cache_.c \
291292
$(OBJDIR)/capabilities_.c \
292293
$(OBJDIR)/captcha_.c \
294
+ $(OBJDIR)/carray_.c \
293295
$(OBJDIR)/cgi_.c \
294296
$(OBJDIR)/chat_.c \
295297
$(OBJDIR)/checkin_.c \
296298
$(OBJDIR)/checkout_.c \
297299
$(OBJDIR)/clearsign_.c \
@@ -437,10 +439,11 @@
437439
$(OBJDIR)/builtin.o \
438440
$(OBJDIR)/bundle.o \
439441
$(OBJDIR)/cache.o \
440442
$(OBJDIR)/capabilities.o \
441443
$(OBJDIR)/captcha.o \
444
+ $(OBJDIR)/carray.o \
442445
$(OBJDIR)/cgi.o \
443446
$(OBJDIR)/chat.o \
444447
$(OBJDIR)/checkin.o \
445448
$(OBJDIR)/checkout.o \
446449
$(OBJDIR)/clearsign.o \
@@ -776,10 +779,11 @@
776779
$(OBJDIR)/builtin_.c:$(OBJDIR)/builtin.h \
777780
$(OBJDIR)/bundle_.c:$(OBJDIR)/bundle.h \
778781
$(OBJDIR)/cache_.c:$(OBJDIR)/cache.h \
779782
$(OBJDIR)/capabilities_.c:$(OBJDIR)/capabilities.h \
780783
$(OBJDIR)/captcha_.c:$(OBJDIR)/captcha.h \
784
+ $(OBJDIR)/carray_.c:$(OBJDIR)/carray.h \
781785
$(OBJDIR)/cgi_.c:$(OBJDIR)/cgi.h \
782786
$(OBJDIR)/chat_.c:$(OBJDIR)/chat.h \
783787
$(OBJDIR)/checkin_.c:$(OBJDIR)/checkin.h \
784788
$(OBJDIR)/checkout_.c:$(OBJDIR)/checkout.h \
785789
$(OBJDIR)/clearsign_.c:$(OBJDIR)/clearsign.h \
@@ -1048,10 +1052,18 @@
10481052
10491053
$(OBJDIR)/captcha.o: $(OBJDIR)/captcha_.c $(OBJDIR)/captcha.h $(SRCDIR)/config.h
10501054
$(XTCC) -o $(OBJDIR)/captcha.o -c $(OBJDIR)/captcha_.c
10511055
10521056
$(OBJDIR)/captcha.h: $(OBJDIR)/headers
1057
+
1058
+$(OBJDIR)/carray_.c: $(SRCDIR)/carray.c $(OBJDIR)/translate
1059
+ $(OBJDIR)/translate $(SRCDIR)/carray.c >$@
1060
+
1061
+$(OBJDIR)/carray.o: $(OBJDIR)/carray_.c $(OBJDIR)/carray.h $(SRCDIR)/config.h
1062
+ $(XTCC) -o $(OBJDIR)/carray.o -c $(OBJDIR)/carray_.c
1063
+
1064
+$(OBJDIR)/carray.h: $(OBJDIR)/headers
10531065
10541066
$(OBJDIR)/cgi_.c: $(SRCDIR)/cgi.c $(OBJDIR)/translate
10551067
$(OBJDIR)/translate $(SRCDIR)/cgi.c >$@
10561068
10571069
$(OBJDIR)/cgi.o: $(OBJDIR)/cgi_.c $(OBJDIR)/cgi.h $(SRCDIR)/config.h
10581070
--- src/main.mk
+++ src/main.mk
@@ -31,10 +31,11 @@
31 $(SRCDIR)/builtin.c \
32 $(SRCDIR)/bundle.c \
33 $(SRCDIR)/cache.c \
34 $(SRCDIR)/capabilities.c \
35 $(SRCDIR)/captcha.c \
 
36 $(SRCDIR)/cgi.c \
37 $(SRCDIR)/chat.c \
38 $(SRCDIR)/checkin.c \
39 $(SRCDIR)/checkout.c \
40 $(SRCDIR)/clearsign.c \
@@ -288,10 +289,11 @@
288 $(OBJDIR)/builtin_.c \
289 $(OBJDIR)/bundle_.c \
290 $(OBJDIR)/cache_.c \
291 $(OBJDIR)/capabilities_.c \
292 $(OBJDIR)/captcha_.c \
 
293 $(OBJDIR)/cgi_.c \
294 $(OBJDIR)/chat_.c \
295 $(OBJDIR)/checkin_.c \
296 $(OBJDIR)/checkout_.c \
297 $(OBJDIR)/clearsign_.c \
@@ -437,10 +439,11 @@
437 $(OBJDIR)/builtin.o \
438 $(OBJDIR)/bundle.o \
439 $(OBJDIR)/cache.o \
440 $(OBJDIR)/capabilities.o \
441 $(OBJDIR)/captcha.o \
 
442 $(OBJDIR)/cgi.o \
443 $(OBJDIR)/chat.o \
444 $(OBJDIR)/checkin.o \
445 $(OBJDIR)/checkout.o \
446 $(OBJDIR)/clearsign.o \
@@ -776,10 +779,11 @@
776 $(OBJDIR)/builtin_.c:$(OBJDIR)/builtin.h \
777 $(OBJDIR)/bundle_.c:$(OBJDIR)/bundle.h \
778 $(OBJDIR)/cache_.c:$(OBJDIR)/cache.h \
779 $(OBJDIR)/capabilities_.c:$(OBJDIR)/capabilities.h \
780 $(OBJDIR)/captcha_.c:$(OBJDIR)/captcha.h \
 
781 $(OBJDIR)/cgi_.c:$(OBJDIR)/cgi.h \
782 $(OBJDIR)/chat_.c:$(OBJDIR)/chat.h \
783 $(OBJDIR)/checkin_.c:$(OBJDIR)/checkin.h \
784 $(OBJDIR)/checkout_.c:$(OBJDIR)/checkout.h \
785 $(OBJDIR)/clearsign_.c:$(OBJDIR)/clearsign.h \
@@ -1048,10 +1052,18 @@
1048
1049 $(OBJDIR)/captcha.o: $(OBJDIR)/captcha_.c $(OBJDIR)/captcha.h $(SRCDIR)/config.h
1050 $(XTCC) -o $(OBJDIR)/captcha.o -c $(OBJDIR)/captcha_.c
1051
1052 $(OBJDIR)/captcha.h: $(OBJDIR)/headers
 
 
 
 
 
 
 
 
1053
1054 $(OBJDIR)/cgi_.c: $(SRCDIR)/cgi.c $(OBJDIR)/translate
1055 $(OBJDIR)/translate $(SRCDIR)/cgi.c >$@
1056
1057 $(OBJDIR)/cgi.o: $(OBJDIR)/cgi_.c $(OBJDIR)/cgi.h $(SRCDIR)/config.h
1058
--- src/main.mk
+++ src/main.mk
@@ -31,10 +31,11 @@
31 $(SRCDIR)/builtin.c \
32 $(SRCDIR)/bundle.c \
33 $(SRCDIR)/cache.c \
34 $(SRCDIR)/capabilities.c \
35 $(SRCDIR)/captcha.c \
36 $(SRCDIR)/carray.c \
37 $(SRCDIR)/cgi.c \
38 $(SRCDIR)/chat.c \
39 $(SRCDIR)/checkin.c \
40 $(SRCDIR)/checkout.c \
41 $(SRCDIR)/clearsign.c \
@@ -288,10 +289,11 @@
289 $(OBJDIR)/builtin_.c \
290 $(OBJDIR)/bundle_.c \
291 $(OBJDIR)/cache_.c \
292 $(OBJDIR)/capabilities_.c \
293 $(OBJDIR)/captcha_.c \
294 $(OBJDIR)/carray_.c \
295 $(OBJDIR)/cgi_.c \
296 $(OBJDIR)/chat_.c \
297 $(OBJDIR)/checkin_.c \
298 $(OBJDIR)/checkout_.c \
299 $(OBJDIR)/clearsign_.c \
@@ -437,10 +439,11 @@
439 $(OBJDIR)/builtin.o \
440 $(OBJDIR)/bundle.o \
441 $(OBJDIR)/cache.o \
442 $(OBJDIR)/capabilities.o \
443 $(OBJDIR)/captcha.o \
444 $(OBJDIR)/carray.o \
445 $(OBJDIR)/cgi.o \
446 $(OBJDIR)/chat.o \
447 $(OBJDIR)/checkin.o \
448 $(OBJDIR)/checkout.o \
449 $(OBJDIR)/clearsign.o \
@@ -776,10 +779,11 @@
779 $(OBJDIR)/builtin_.c:$(OBJDIR)/builtin.h \
780 $(OBJDIR)/bundle_.c:$(OBJDIR)/bundle.h \
781 $(OBJDIR)/cache_.c:$(OBJDIR)/cache.h \
782 $(OBJDIR)/capabilities_.c:$(OBJDIR)/capabilities.h \
783 $(OBJDIR)/captcha_.c:$(OBJDIR)/captcha.h \
784 $(OBJDIR)/carray_.c:$(OBJDIR)/carray.h \
785 $(OBJDIR)/cgi_.c:$(OBJDIR)/cgi.h \
786 $(OBJDIR)/chat_.c:$(OBJDIR)/chat.h \
787 $(OBJDIR)/checkin_.c:$(OBJDIR)/checkin.h \
788 $(OBJDIR)/checkout_.c:$(OBJDIR)/checkout.h \
789 $(OBJDIR)/clearsign_.c:$(OBJDIR)/clearsign.h \
@@ -1048,10 +1052,18 @@
1052
1053 $(OBJDIR)/captcha.o: $(OBJDIR)/captcha_.c $(OBJDIR)/captcha.h $(SRCDIR)/config.h
1054 $(XTCC) -o $(OBJDIR)/captcha.o -c $(OBJDIR)/captcha_.c
1055
1056 $(OBJDIR)/captcha.h: $(OBJDIR)/headers
1057
1058 $(OBJDIR)/carray_.c: $(SRCDIR)/carray.c $(OBJDIR)/translate
1059 $(OBJDIR)/translate $(SRCDIR)/carray.c >$@
1060
1061 $(OBJDIR)/carray.o: $(OBJDIR)/carray_.c $(OBJDIR)/carray.h $(SRCDIR)/config.h
1062 $(XTCC) -o $(OBJDIR)/carray.o -c $(OBJDIR)/carray_.c
1063
1064 $(OBJDIR)/carray.h: $(OBJDIR)/headers
1065
1066 $(OBJDIR)/cgi_.c: $(SRCDIR)/cgi.c $(OBJDIR)/translate
1067 $(OBJDIR)/translate $(SRCDIR)/cgi.c >$@
1068
1069 $(OBJDIR)/cgi.o: $(OBJDIR)/cgi_.c $(OBJDIR)/cgi.h $(SRCDIR)/config.h
1070
--- src/makemake.tcl
+++ src/makemake.tcl
@@ -53,10 +53,11 @@
5353
builtin
5454
bundle
5555
cache
5656
capabilities
5757
captcha
58
+ carray
5859
cgi
5960
chat
6061
checkin
6162
checkout
6263
clearsign
6364
--- src/makemake.tcl
+++ src/makemake.tcl
@@ -53,10 +53,11 @@
53 builtin
54 bundle
55 cache
56 capabilities
57 captcha
 
58 cgi
59 chat
60 checkin
61 checkout
62 clearsign
63
--- src/makemake.tcl
+++ src/makemake.tcl
@@ -53,10 +53,11 @@
53 builtin
54 bundle
55 cache
56 capabilities
57 captcha
58 carray
59 cgi
60 chat
61 checkin
62 checkout
63 clearsign
64
+10 -4
--- win/Makefile.dmc
+++ win/Makefile.dmc
@@ -28,13 +28,13 @@
2828
2929
SQLITE_OPTIONS = -DNDEBUG=1 -DSQLITE_DQS=0 -DSQLITE_THREADSAFE=0 -DSQLITE_DEFAULT_MEMSTATUS=0 -DSQLITE_DEFAULT_WAL_SYNCHRONOUS=1 -DSQLITE_LIKE_DOESNT_MATCH_BLOBS -DSQLITE_OMIT_DECLTYPE -DSQLITE_OMIT_DEPRECATED -DSQLITE_OMIT_PROGRESS_CALLBACK -DSQLITE_OMIT_SHARED_CACHE -DSQLITE_OMIT_LOAD_EXTENSION -DSQLITE_MAX_EXPR_DEPTH=0 -DSQLITE_USE_ALLOCA -DSQLITE_ENABLE_LOCKING_STYLE=0 -DSQLITE_DEFAULT_FILE_FORMAT=4 -DSQLITE_ENABLE_EXPLAIN_COMMENTS -DSQLITE_ENABLE_FTS4 -DSQLITE_ENABLE_DBSTAT_VTAB -DSQLITE_ENABLE_JSON1 -DSQLITE_ENABLE_FTS5 -DSQLITE_ENABLE_STMTVTAB -DSQLITE_HAVE_ZLIB -DSQLITE_INTROSPECTION_PRAGMAS -DSQLITE_ENABLE_DBPAGE_VTAB -DSQLITE_TRUSTED_SCHEMA=0
3030
3131
SHELL_OPTIONS = -DNDEBUG=1 -DSQLITE_DQS=0 -DSQLITE_THREADSAFE=0 -DSQLITE_DEFAULT_MEMSTATUS=0 -DSQLITE_DEFAULT_WAL_SYNCHRONOUS=1 -DSQLITE_LIKE_DOESNT_MATCH_BLOBS -DSQLITE_OMIT_DECLTYPE -DSQLITE_OMIT_DEPRECATED -DSQLITE_OMIT_PROGRESS_CALLBACK -DSQLITE_OMIT_SHARED_CACHE -DSQLITE_OMIT_LOAD_EXTENSION -DSQLITE_MAX_EXPR_DEPTH=0 -DSQLITE_USE_ALLOCA -DSQLITE_ENABLE_LOCKING_STYLE=0 -DSQLITE_DEFAULT_FILE_FORMAT=4 -DSQLITE_ENABLE_EXPLAIN_COMMENTS -DSQLITE_ENABLE_FTS4 -DSQLITE_ENABLE_DBSTAT_VTAB -DSQLITE_ENABLE_JSON1 -DSQLITE_ENABLE_FTS5 -DSQLITE_ENABLE_STMTVTAB -DSQLITE_HAVE_ZLIB -DSQLITE_INTROSPECTION_PRAGMAS -DSQLITE_ENABLE_DBPAGE_VTAB -DSQLITE_TRUSTED_SCHEMA=0 -Dmain=sqlite3_shell -DSQLITE_SHELL_IS_UTF8=1 -DSQLITE_OMIT_LOAD_EXTENSION=1 -DUSE_SYSTEM_SQLITE=$(USE_SYSTEM_SQLITE) -DSQLITE_SHELL_DBNAME_PROC=sqlcmd_get_dbname -DSQLITE_SHELL_INIT_PROC=sqlcmd_init_proc -Daccess=file_access -Dsystem=fossil_system -Dgetenv=fossil_getenv -Dfopen=fossil_fopen
3232
33
-SRC = add_.c ajax_.c alerts_.c allrepo_.c attach_.c backlink_.c backoffice_.c bag_.c bisect_.c blob_.c branch_.c browse_.c builtin_.c bundle_.c cache_.c capabilities_.c captcha_.c cgi_.c chat_.c checkin_.c checkout_.c clearsign_.c clone_.c color_.c comformat_.c configure_.c content_.c cookies_.c db_.c delta_.c deltacmd_.c deltafunc_.c descendants_.c diff_.c diffcmd_.c dispatch_.c doc_.c encode_.c etag_.c event_.c export_.c extcgi_.c file_.c fileedit_.c finfo_.c foci_.c forum_.c fshell_.c fusefs_.c fuzz_.c glob_.c graph_.c gzip_.c hname_.c hook_.c http_.c http_socket_.c http_ssl_.c http_transport_.c import_.c info_.c interwiki_.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 loadctrl_.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 piechart_.c pikchr_.c pikchrshow_.c pivot_.c popen_.c pqueue_.c printf_.c publish_.c purge_.c rebuild_.c regexp_.c repolist_.c report_.c rss_.c schema_.c search_.c security_audit_.c setup_.c setupuser_.c sha1_.c sha1hard_.c sha3_.c shun_.c sitemap_.c skins_.c smtp_.c sqlcmd_.c stash_.c stat_.c statrep_.c style_.c sync_.c tag_.c tar_.c terminal_.c th_main_.c timeline_.c tkt_.c tktsetup_.c undo_.c unicode_.c unversioned_.c update_.c url_.c user_.c utf8_.c util_.c verify_.c vfile_.c wiki_.c wikiformat_.c winfile_.c winhttp_.c xfer_.c xfersetup_.c zip_.c
33
+SRC = add_.c ajax_.c alerts_.c allrepo_.c attach_.c backlink_.c backoffice_.c bag_.c bisect_.c blob_.c branch_.c browse_.c builtin_.c bundle_.c cache_.c capabilities_.c captcha_.c carray_.c cgi_.c chat_.c checkin_.c checkout_.c clearsign_.c clone_.c color_.c comformat_.c configure_.c content_.c cookies_.c db_.c delta_.c deltacmd_.c deltafunc_.c descendants_.c diff_.c diffcmd_.c dispatch_.c doc_.c encode_.c etag_.c event_.c export_.c extcgi_.c file_.c fileedit_.c finfo_.c foci_.c forum_.c fshell_.c fusefs_.c fuzz_.c glob_.c graph_.c gzip_.c hname_.c hook_.c http_.c http_socket_.c http_ssl_.c http_transport_.c import_.c info_.c interwiki_.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 loadctrl_.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 piechart_.c pikchr_.c pikchrshow_.c pivot_.c popen_.c pqueue_.c printf_.c publish_.c purge_.c rebuild_.c regexp_.c repolist_.c report_.c rss_.c schema_.c search_.c security_audit_.c setup_.c setupuser_.c sha1_.c sha1hard_.c sha3_.c shun_.c sitemap_.c skins_.c smtp_.c sqlcmd_.c stash_.c stat_.c statrep_.c style_.c sync_.c tag_.c tar_.c terminal_.c th_main_.c timeline_.c tkt_.c tktsetup_.c undo_.c unicode_.c unversioned_.c update_.c url_.c user_.c utf8_.c util_.c verify_.c vfile_.c wiki_.c wikiformat_.c winfile_.c winhttp_.c xfer_.c xfersetup_.c zip_.c
3434
35
-OBJ = $(OBJDIR)\add$O $(OBJDIR)\ajax$O $(OBJDIR)\alerts$O $(OBJDIR)\allrepo$O $(OBJDIR)\attach$O $(OBJDIR)\backlink$O $(OBJDIR)\backoffice$O $(OBJDIR)\bag$O $(OBJDIR)\bisect$O $(OBJDIR)\blob$O $(OBJDIR)\branch$O $(OBJDIR)\browse$O $(OBJDIR)\builtin$O $(OBJDIR)\bundle$O $(OBJDIR)\cache$O $(OBJDIR)\capabilities$O $(OBJDIR)\captcha$O $(OBJDIR)\cgi$O $(OBJDIR)\chat$O $(OBJDIR)\checkin$O $(OBJDIR)\checkout$O $(OBJDIR)\clearsign$O $(OBJDIR)\clone$O $(OBJDIR)\color$O $(OBJDIR)\comformat$O $(OBJDIR)\configure$O $(OBJDIR)\content$O $(OBJDIR)\cookies$O $(OBJDIR)\db$O $(OBJDIR)\delta$O $(OBJDIR)\deltacmd$O $(OBJDIR)\deltafunc$O $(OBJDIR)\descendants$O $(OBJDIR)\diff$O $(OBJDIR)\diffcmd$O $(OBJDIR)\dispatch$O $(OBJDIR)\doc$O $(OBJDIR)\encode$O $(OBJDIR)\etag$O $(OBJDIR)\event$O $(OBJDIR)\export$O $(OBJDIR)\extcgi$O $(OBJDIR)\file$O $(OBJDIR)\fileedit$O $(OBJDIR)\finfo$O $(OBJDIR)\foci$O $(OBJDIR)\forum$O $(OBJDIR)\fshell$O $(OBJDIR)\fusefs$O $(OBJDIR)\fuzz$O $(OBJDIR)\glob$O $(OBJDIR)\graph$O $(OBJDIR)\gzip$O $(OBJDIR)\hname$O $(OBJDIR)\hook$O $(OBJDIR)\http$O $(OBJDIR)\http_socket$O $(OBJDIR)\http_ssl$O $(OBJDIR)\http_transport$O $(OBJDIR)\import$O $(OBJDIR)\info$O $(OBJDIR)\interwiki$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)\loadctrl$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)\piechart$O $(OBJDIR)\pikchr$O $(OBJDIR)\pikchrshow$O $(OBJDIR)\pivot$O $(OBJDIR)\popen$O $(OBJDIR)\pqueue$O $(OBJDIR)\printf$O $(OBJDIR)\publish$O $(OBJDIR)\purge$O $(OBJDIR)\rebuild$O $(OBJDIR)\regexp$O $(OBJDIR)\repolist$O $(OBJDIR)\report$O $(OBJDIR)\rss$O $(OBJDIR)\schema$O $(OBJDIR)\search$O $(OBJDIR)\security_audit$O $(OBJDIR)\setup$O $(OBJDIR)\setupuser$O $(OBJDIR)\sha1$O $(OBJDIR)\sha1hard$O $(OBJDIR)\sha3$O $(OBJDIR)\shun$O $(OBJDIR)\sitemap$O $(OBJDIR)\skins$O $(OBJDIR)\smtp$O $(OBJDIR)\sqlcmd$O $(OBJDIR)\stash$O $(OBJDIR)\stat$O $(OBJDIR)\statrep$O $(OBJDIR)\style$O $(OBJDIR)\sync$O $(OBJDIR)\tag$O $(OBJDIR)\tar$O $(OBJDIR)\terminal$O $(OBJDIR)\th_main$O $(OBJDIR)\timeline$O $(OBJDIR)\tkt$O $(OBJDIR)\tktsetup$O $(OBJDIR)\undo$O $(OBJDIR)\unicode$O $(OBJDIR)\unversioned$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)\winfile$O $(OBJDIR)\winhttp$O $(OBJDIR)\xfer$O $(OBJDIR)\xfersetup$O $(OBJDIR)\zip$O $(OBJDIR)\shell$O $(OBJDIR)\sqlite3$O $(OBJDIR)\th$O $(OBJDIR)\th_lang$O
35
+OBJ = $(OBJDIR)\add$O $(OBJDIR)\ajax$O $(OBJDIR)\alerts$O $(OBJDIR)\allrepo$O $(OBJDIR)\attach$O $(OBJDIR)\backlink$O $(OBJDIR)\backoffice$O $(OBJDIR)\bag$O $(OBJDIR)\bisect$O $(OBJDIR)\blob$O $(OBJDIR)\branch$O $(OBJDIR)\browse$O $(OBJDIR)\builtin$O $(OBJDIR)\bundle$O $(OBJDIR)\cache$O $(OBJDIR)\capabilities$O $(OBJDIR)\captcha$O $(OBJDIR)\carray$O $(OBJDIR)\cgi$O $(OBJDIR)\chat$O $(OBJDIR)\checkin$O $(OBJDIR)\checkout$O $(OBJDIR)\clearsign$O $(OBJDIR)\clone$O $(OBJDIR)\color$O $(OBJDIR)\comformat$O $(OBJDIR)\configure$O $(OBJDIR)\content$O $(OBJDIR)\cookies$O $(OBJDIR)\db$O $(OBJDIR)\delta$O $(OBJDIR)\deltacmd$O $(OBJDIR)\deltafunc$O $(OBJDIR)\descendants$O $(OBJDIR)\diff$O $(OBJDIR)\diffcmd$O $(OBJDIR)\dispatch$O $(OBJDIR)\doc$O $(OBJDIR)\encode$O $(OBJDIR)\etag$O $(OBJDIR)\event$O $(OBJDIR)\export$O $(OBJDIR)\extcgi$O $(OBJDIR)\file$O $(OBJDIR)\fileedit$O $(OBJDIR)\finfo$O $(OBJDIR)\foci$O $(OBJDIR)\forum$O $(OBJDIR)\fshell$O $(OBJDIR)\fusefs$O $(OBJDIR)\fuzz$O $(OBJDIR)\glob$O $(OBJDIR)\graph$O $(OBJDIR)\gzip$O $(OBJDIR)\hname$O $(OBJDIR)\hook$O $(OBJDIR)\http$O $(OBJDIR)\http_socket$O $(OBJDIR)\http_ssl$O $(OBJDIR)\http_transport$O $(OBJDIR)\import$O $(OBJDIR)\info$O $(OBJDIR)\interwiki$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)\loadctrl$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)\piechart$O $(OBJDIR)\pikchr$O $(OBJDIR)\pikchrshow$O $(OBJDIR)\pivot$O $(OBJDIR)\popen$O $(OBJDIR)\pqueue$O $(OBJDIR)\printf$O $(OBJDIR)\publish$O $(OBJDIR)\purge$O $(OBJDIR)\rebuild$O $(OBJDIR)\regexp$O $(OBJDIR)\repolist$O $(OBJDIR)\report$O $(OBJDIR)\rss$O $(OBJDIR)\schema$O $(OBJDIR)\search$O $(OBJDIR)\security_audit$O $(OBJDIR)\setup$O $(OBJDIR)\setupuser$O $(OBJDIR)\sha1$O $(OBJDIR)\sha1hard$O $(OBJDIR)\sha3$O $(OBJDIR)\shun$O $(OBJDIR)\sitemap$O $(OBJDIR)\skins$O $(OBJDIR)\smtp$O $(OBJDIR)\sqlcmd$O $(OBJDIR)\stash$O $(OBJDIR)\stat$O $(OBJDIR)\statrep$O $(OBJDIR)\style$O $(OBJDIR)\sync$O $(OBJDIR)\tag$O $(OBJDIR)\tar$O $(OBJDIR)\terminal$O $(OBJDIR)\th_main$O $(OBJDIR)\timeline$O $(OBJDIR)\tkt$O $(OBJDIR)\tktsetup$O $(OBJDIR)\undo$O $(OBJDIR)\unicode$O $(OBJDIR)\unversioned$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)\winfile$O $(OBJDIR)\winhttp$O $(OBJDIR)\xfer$O $(OBJDIR)\xfersetup$O $(OBJDIR)\zip$O $(OBJDIR)\shell$O $(OBJDIR)\sqlite3$O $(OBJDIR)\th$O $(OBJDIR)\th_lang$O
3636
3737
3838
RC=$(DMDIR)\bin\rcc
3939
RCFLAGS=-32 -w1 -I$(SRCDIR) /D__DMC__
4040
@@ -49,11 +49,11 @@
4949
5050
$(OBJDIR)\fossil.res: $B\win\fossil.rc
5151
$(RC) $(RCFLAGS) -o$@ $**
5252
5353
$(OBJDIR)\link: $B\win\Makefile.dmc $(OBJDIR)\fossil.res
54
- +echo add ajax alerts allrepo attach backlink backoffice bag bisect blob branch browse builtin bundle cache capabilities captcha cgi chat checkin checkout clearsign clone color comformat configure content cookies db delta deltacmd deltafunc descendants diff diffcmd dispatch doc encode etag event export extcgi file fileedit finfo foci forum fshell fusefs fuzz glob graph gzip hname hook http http_socket http_ssl http_transport import info interwiki 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 loadctrl login lookslike main manifest markdown markdown_html md5 merge merge3 moderate name path piechart pikchr pikchrshow pivot popen pqueue printf publish purge rebuild regexp repolist report rss schema search security_audit setup setupuser sha1 sha1hard sha3 shun sitemap skins smtp sqlcmd stash stat statrep style sync tag tar terminal th_main timeline tkt tktsetup undo unicode unversioned update url user utf8 util verify vfile wiki wikiformat winfile winhttp xfer xfersetup zip shell sqlite3 th th_lang > $@
54
+ +echo add ajax alerts allrepo attach backlink backoffice bag bisect blob branch browse builtin bundle cache capabilities captcha carray cgi chat checkin checkout clearsign clone color comformat configure content cookies db delta deltacmd deltafunc descendants diff diffcmd dispatch doc encode etag event export extcgi file fileedit finfo foci forum fshell fusefs fuzz glob graph gzip hname hook http http_socket http_ssl http_transport import info interwiki 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 loadctrl login lookslike main manifest markdown markdown_html md5 merge merge3 moderate name path piechart pikchr pikchrshow pivot popen pqueue printf publish purge rebuild regexp repolist report rss schema search security_audit setup setupuser sha1 sha1hard sha3 shun sitemap skins smtp sqlcmd stash stat statrep style sync tag tar terminal th_main timeline tkt tktsetup undo unicode unversioned update url user utf8 util verify vfile wiki wikiformat winfile winhttp xfer xfersetup zip shell sqlite3 th th_lang > $@
5555
+echo fossil >> $@
5656
+echo fossil >> $@
5757
+echo $(LIBS) >> $@
5858
+echo. >> $@
5959
+echo fossil >> $@
@@ -223,10 +223,16 @@
223223
$(OBJDIR)\captcha$O : captcha_.c captcha.h
224224
$(TCC) -o$@ -c captcha_.c
225225
226226
captcha_.c : $(SRCDIR)\captcha.c
227227
+translate$E $** > $@
228
+
229
+$(OBJDIR)\carray$O : carray_.c carray.h
230
+ $(TCC) -o$@ -c carray_.c
231
+
232
+carray_.c : $(SRCDIR)\carray.c
233
+ +translate$E $** > $@
228234
229235
$(OBJDIR)\cgi$O : cgi_.c cgi.h
230236
$(TCC) -o$@ -c cgi_.c
231237
232238
cgi_.c : $(SRCDIR)\cgi.c
@@ -1005,7 +1011,7 @@
10051011
10061012
zip_.c : $(SRCDIR)\zip.c
10071013
+translate$E $** > $@
10081014
10091015
headers: makeheaders$E page_index.h builtin_data.h VERSION.h
1010
- +makeheaders$E add_.c:add.h ajax_.c:ajax.h alerts_.c:alerts.h allrepo_.c:allrepo.h attach_.c:attach.h backlink_.c:backlink.h backoffice_.c:backoffice.h bag_.c:bag.h bisect_.c:bisect.h blob_.c:blob.h branch_.c:branch.h browse_.c:browse.h builtin_.c:builtin.h bundle_.c:bundle.h cache_.c:cache.h capabilities_.c:capabilities.h captcha_.c:captcha.h cgi_.c:cgi.h chat_.c:chat.h checkin_.c:checkin.h checkout_.c:checkout.h clearsign_.c:clearsign.h clone_.c:clone.h color_.c:color.h comformat_.c:comformat.h configure_.c:configure.h content_.c:content.h cookies_.c:cookies.h db_.c:db.h delta_.c:delta.h deltacmd_.c:deltacmd.h deltafunc_.c:deltafunc.h descendants_.c:descendants.h diff_.c:diff.h diffcmd_.c:diffcmd.h dispatch_.c:dispatch.h doc_.c:doc.h encode_.c:encode.h etag_.c:etag.h event_.c:event.h export_.c:export.h extcgi_.c:extcgi.h file_.c:file.h fileedit_.c:fileedit.h finfo_.c:finfo.h foci_.c:foci.h forum_.c:forum.h fshell_.c:fshell.h fusefs_.c:fusefs.h fuzz_.c:fuzz.h glob_.c:glob.h graph_.c:graph.h gzip_.c:gzip.h hname_.c:hname.h hook_.c:hook.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 interwiki_.c:interwiki.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 loadctrl_.c:loadctrl.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 piechart_.c:piechart.h pikchr_.c:pikchr.h pikchrshow_.c:pikchrshow.h pivot_.c:pivot.h popen_.c:popen.h pqueue_.c:pqueue.h printf_.c:printf.h publish_.c:publish.h purge_.c:purge.h rebuild_.c:rebuild.h regexp_.c:regexp.h repolist_.c:repolist.h report_.c:report.h rss_.c:rss.h schema_.c:schema.h search_.c:search.h security_audit_.c:security_audit.h setup_.c:setup.h setupuser_.c:setupuser.h sha1_.c:sha1.h sha1hard_.c:sha1hard.h sha3_.c:sha3.h shun_.c:shun.h sitemap_.c:sitemap.h skins_.c:skins.h smtp_.c:smtp.h sqlcmd_.c:sqlcmd.h stash_.c:stash.h stat_.c:stat.h statrep_.c:statrep.h style_.c:style.h sync_.c:sync.h tag_.c:tag.h tar_.c:tar.h terminal_.c:terminal.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 unversioned_.c:unversioned.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 winfile_.c:winfile.h winhttp_.c:winhttp.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
1016
+ +makeheaders$E add_.c:add.h ajax_.c:ajax.h alerts_.c:alerts.h allrepo_.c:allrepo.h attach_.c:attach.h backlink_.c:backlink.h backoffice_.c:backoffice.h bag_.c:bag.h bisect_.c:bisect.h blob_.c:blob.h branch_.c:branch.h browse_.c:browse.h builtin_.c:builtin.h bundle_.c:bundle.h cache_.c:cache.h capabilities_.c:capabilities.h captcha_.c:captcha.h carray_.c:carray.h cgi_.c:cgi.h chat_.c:chat.h checkin_.c:checkin.h checkout_.c:checkout.h clearsign_.c:clearsign.h clone_.c:clone.h color_.c:color.h comformat_.c:comformat.h configure_.c:configure.h content_.c:content.h cookies_.c:cookies.h db_.c:db.h delta_.c:delta.h deltacmd_.c:deltacmd.h deltafunc_.c:deltafunc.h descendants_.c:descendants.h diff_.c:diff.h diffcmd_.c:diffcmd.h dispatch_.c:dispatch.h doc_.c:doc.h encode_.c:encode.h etag_.c:etag.h event_.c:event.h export_.c:export.h extcgi_.c:extcgi.h file_.c:file.h fileedit_.c:fileedit.h finfo_.c:finfo.h foci_.c:foci.h forum_.c:forum.h fshell_.c:fshell.h fusefs_.c:fusefs.h fuzz_.c:fuzz.h glob_.c:glob.h graph_.c:graph.h gzip_.c:gzip.h hname_.c:hname.h hook_.c:hook.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 interwiki_.c:interwiki.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 loadctrl_.c:loadctrl.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 piechart_.c:piechart.h pikchr_.c:pikchr.h pikchrshow_.c:pikchrshow.h pivot_.c:pivot.h popen_.c:popen.h pqueue_.c:pqueue.h printf_.c:printf.h publish_.c:publish.h purge_.c:purge.h rebuild_.c:rebuild.h regexp_.c:regexp.h repolist_.c:repolist.h report_.c:report.h rss_.c:rss.h schema_.c:schema.h search_.c:search.h security_audit_.c:security_audit.h setup_.c:setup.h setupuser_.c:setupuser.h sha1_.c:sha1.h sha1hard_.c:sha1hard.h sha3_.c:sha3.h shun_.c:shun.h sitemap_.c:sitemap.h skins_.c:skins.h smtp_.c:smtp.h sqlcmd_.c:sqlcmd.h stash_.c:stash.h stat_.c:stat.h statrep_.c:statrep.h style_.c:style.h sync_.c:sync.h tag_.c:tag.h tar_.c:tar.h terminal_.c:terminal.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 unversioned_.c:unversioned.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 winfile_.c:winfile.h winhttp_.c:winhttp.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
10111017
@copy /Y nul: headers
10121018
--- win/Makefile.dmc
+++ win/Makefile.dmc
@@ -28,13 +28,13 @@
28
29 SQLITE_OPTIONS = -DNDEBUG=1 -DSQLITE_DQS=0 -DSQLITE_THREADSAFE=0 -DSQLITE_DEFAULT_MEMSTATUS=0 -DSQLITE_DEFAULT_WAL_SYNCHRONOUS=1 -DSQLITE_LIKE_DOESNT_MATCH_BLOBS -DSQLITE_OMIT_DECLTYPE -DSQLITE_OMIT_DEPRECATED -DSQLITE_OMIT_PROGRESS_CALLBACK -DSQLITE_OMIT_SHARED_CACHE -DSQLITE_OMIT_LOAD_EXTENSION -DSQLITE_MAX_EXPR_DEPTH=0 -DSQLITE_USE_ALLOCA -DSQLITE_ENABLE_LOCKING_STYLE=0 -DSQLITE_DEFAULT_FILE_FORMAT=4 -DSQLITE_ENABLE_EXPLAIN_COMMENTS -DSQLITE_ENABLE_FTS4 -DSQLITE_ENABLE_DBSTAT_VTAB -DSQLITE_ENABLE_JSON1 -DSQLITE_ENABLE_FTS5 -DSQLITE_ENABLE_STMTVTAB -DSQLITE_HAVE_ZLIB -DSQLITE_INTROSPECTION_PRAGMAS -DSQLITE_ENABLE_DBPAGE_VTAB -DSQLITE_TRUSTED_SCHEMA=0
30
31 SHELL_OPTIONS = -DNDEBUG=1 -DSQLITE_DQS=0 -DSQLITE_THREADSAFE=0 -DSQLITE_DEFAULT_MEMSTATUS=0 -DSQLITE_DEFAULT_WAL_SYNCHRONOUS=1 -DSQLITE_LIKE_DOESNT_MATCH_BLOBS -DSQLITE_OMIT_DECLTYPE -DSQLITE_OMIT_DEPRECATED -DSQLITE_OMIT_PROGRESS_CALLBACK -DSQLITE_OMIT_SHARED_CACHE -DSQLITE_OMIT_LOAD_EXTENSION -DSQLITE_MAX_EXPR_DEPTH=0 -DSQLITE_USE_ALLOCA -DSQLITE_ENABLE_LOCKING_STYLE=0 -DSQLITE_DEFAULT_FILE_FORMAT=4 -DSQLITE_ENABLE_EXPLAIN_COMMENTS -DSQLITE_ENABLE_FTS4 -DSQLITE_ENABLE_DBSTAT_VTAB -DSQLITE_ENABLE_JSON1 -DSQLITE_ENABLE_FTS5 -DSQLITE_ENABLE_STMTVTAB -DSQLITE_HAVE_ZLIB -DSQLITE_INTROSPECTION_PRAGMAS -DSQLITE_ENABLE_DBPAGE_VTAB -DSQLITE_TRUSTED_SCHEMA=0 -Dmain=sqlite3_shell -DSQLITE_SHELL_IS_UTF8=1 -DSQLITE_OMIT_LOAD_EXTENSION=1 -DUSE_SYSTEM_SQLITE=$(USE_SYSTEM_SQLITE) -DSQLITE_SHELL_DBNAME_PROC=sqlcmd_get_dbname -DSQLITE_SHELL_INIT_PROC=sqlcmd_init_proc -Daccess=file_access -Dsystem=fossil_system -Dgetenv=fossil_getenv -Dfopen=fossil_fopen
32
33 SRC = add_.c ajax_.c alerts_.c allrepo_.c attach_.c backlink_.c backoffice_.c bag_.c bisect_.c blob_.c branch_.c browse_.c builtin_.c bundle_.c cache_.c capabilities_.c captcha_.c cgi_.c chat_.c checkin_.c checkout_.c clearsign_.c clone_.c color_.c comformat_.c configure_.c content_.c cookies_.c db_.c delta_.c deltacmd_.c deltafunc_.c descendants_.c diff_.c diffcmd_.c dispatch_.c doc_.c encode_.c etag_.c event_.c export_.c extcgi_.c file_.c fileedit_.c finfo_.c foci_.c forum_.c fshell_.c fusefs_.c fuzz_.c glob_.c graph_.c gzip_.c hname_.c hook_.c http_.c http_socket_.c http_ssl_.c http_transport_.c import_.c info_.c interwiki_.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 loadctrl_.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 piechart_.c pikchr_.c pikchrshow_.c pivot_.c popen_.c pqueue_.c printf_.c publish_.c purge_.c rebuild_.c regexp_.c repolist_.c report_.c rss_.c schema_.c search_.c security_audit_.c setup_.c setupuser_.c sha1_.c sha1hard_.c sha3_.c shun_.c sitemap_.c skins_.c smtp_.c sqlcmd_.c stash_.c stat_.c statrep_.c style_.c sync_.c tag_.c tar_.c terminal_.c th_main_.c timeline_.c tkt_.c tktsetup_.c undo_.c unicode_.c unversioned_.c update_.c url_.c user_.c utf8_.c util_.c verify_.c vfile_.c wiki_.c wikiformat_.c winfile_.c winhttp_.c xfer_.c xfersetup_.c zip_.c
34
35 OBJ = $(OBJDIR)\add$O $(OBJDIR)\ajax$O $(OBJDIR)\alerts$O $(OBJDIR)\allrepo$O $(OBJDIR)\attach$O $(OBJDIR)\backlink$O $(OBJDIR)\backoffice$O $(OBJDIR)\bag$O $(OBJDIR)\bisect$O $(OBJDIR)\blob$O $(OBJDIR)\branch$O $(OBJDIR)\browse$O $(OBJDIR)\builtin$O $(OBJDIR)\bundle$O $(OBJDIR)\cache$O $(OBJDIR)\capabilities$O $(OBJDIR)\captcha$O $(OBJDIR)\cgi$O $(OBJDIR)\chat$O $(OBJDIR)\checkin$O $(OBJDIR)\checkout$O $(OBJDIR)\clearsign$O $(OBJDIR)\clone$O $(OBJDIR)\color$O $(OBJDIR)\comformat$O $(OBJDIR)\configure$O $(OBJDIR)\content$O $(OBJDIR)\cookies$O $(OBJDIR)\db$O $(OBJDIR)\delta$O $(OBJDIR)\deltacmd$O $(OBJDIR)\deltafunc$O $(OBJDIR)\descendants$O $(OBJDIR)\diff$O $(OBJDIR)\diffcmd$O $(OBJDIR)\dispatch$O $(OBJDIR)\doc$O $(OBJDIR)\encode$O $(OBJDIR)\etag$O $(OBJDIR)\event$O $(OBJDIR)\export$O $(OBJDIR)\extcgi$O $(OBJDIR)\file$O $(OBJDIR)\fileedit$O $(OBJDIR)\finfo$O $(OBJDIR)\foci$O $(OBJDIR)\forum$O $(OBJDIR)\fshell$O $(OBJDIR)\fusefs$O $(OBJDIR)\fuzz$O $(OBJDIR)\glob$O $(OBJDIR)\graph$O $(OBJDIR)\gzip$O $(OBJDIR)\hname$O $(OBJDIR)\hook$O $(OBJDIR)\http$O $(OBJDIR)\http_socket$O $(OBJDIR)\http_ssl$O $(OBJDIR)\http_transport$O $(OBJDIR)\import$O $(OBJDIR)\info$O $(OBJDIR)\interwiki$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)\loadctrl$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)\piechart$O $(OBJDIR)\pikchr$O $(OBJDIR)\pikchrshow$O $(OBJDIR)\pivot$O $(OBJDIR)\popen$O $(OBJDIR)\pqueue$O $(OBJDIR)\printf$O $(OBJDIR)\publish$O $(OBJDIR)\purge$O $(OBJDIR)\rebuild$O $(OBJDIR)\regexp$O $(OBJDIR)\repolist$O $(OBJDIR)\report$O $(OBJDIR)\rss$O $(OBJDIR)\schema$O $(OBJDIR)\search$O $(OBJDIR)\security_audit$O $(OBJDIR)\setup$O $(OBJDIR)\setupuser$O $(OBJDIR)\sha1$O $(OBJDIR)\sha1hard$O $(OBJDIR)\sha3$O $(OBJDIR)\shun$O $(OBJDIR)\sitemap$O $(OBJDIR)\skins$O $(OBJDIR)\smtp$O $(OBJDIR)\sqlcmd$O $(OBJDIR)\stash$O $(OBJDIR)\stat$O $(OBJDIR)\statrep$O $(OBJDIR)\style$O $(OBJDIR)\sync$O $(OBJDIR)\tag$O $(OBJDIR)\tar$O $(OBJDIR)\terminal$O $(OBJDIR)\th_main$O $(OBJDIR)\timeline$O $(OBJDIR)\tkt$O $(OBJDIR)\tktsetup$O $(OBJDIR)\undo$O $(OBJDIR)\unicode$O $(OBJDIR)\unversioned$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)\winfile$O $(OBJDIR)\winhttp$O $(OBJDIR)\xfer$O $(OBJDIR)\xfersetup$O $(OBJDIR)\zip$O $(OBJDIR)\shell$O $(OBJDIR)\sqlite3$O $(OBJDIR)\th$O $(OBJDIR)\th_lang$O
36
37
38 RC=$(DMDIR)\bin\rcc
39 RCFLAGS=-32 -w1 -I$(SRCDIR) /D__DMC__
40
@@ -49,11 +49,11 @@
49
50 $(OBJDIR)\fossil.res: $B\win\fossil.rc
51 $(RC) $(RCFLAGS) -o$@ $**
52
53 $(OBJDIR)\link: $B\win\Makefile.dmc $(OBJDIR)\fossil.res
54 +echo add ajax alerts allrepo attach backlink backoffice bag bisect blob branch browse builtin bundle cache capabilities captcha cgi chat checkin checkout clearsign clone color comformat configure content cookies db delta deltacmd deltafunc descendants diff diffcmd dispatch doc encode etag event export extcgi file fileedit finfo foci forum fshell fusefs fuzz glob graph gzip hname hook http http_socket http_ssl http_transport import info interwiki 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 loadctrl login lookslike main manifest markdown markdown_html md5 merge merge3 moderate name path piechart pikchr pikchrshow pivot popen pqueue printf publish purge rebuild regexp repolist report rss schema search security_audit setup setupuser sha1 sha1hard sha3 shun sitemap skins smtp sqlcmd stash stat statrep style sync tag tar terminal th_main timeline tkt tktsetup undo unicode unversioned update url user utf8 util verify vfile wiki wikiformat winfile winhttp xfer xfersetup zip shell sqlite3 th th_lang > $@
55 +echo fossil >> $@
56 +echo fossil >> $@
57 +echo $(LIBS) >> $@
58 +echo. >> $@
59 +echo fossil >> $@
@@ -223,10 +223,16 @@
223 $(OBJDIR)\captcha$O : captcha_.c captcha.h
224 $(TCC) -o$@ -c captcha_.c
225
226 captcha_.c : $(SRCDIR)\captcha.c
227 +translate$E $** > $@
 
 
 
 
 
 
228
229 $(OBJDIR)\cgi$O : cgi_.c cgi.h
230 $(TCC) -o$@ -c cgi_.c
231
232 cgi_.c : $(SRCDIR)\cgi.c
@@ -1005,7 +1011,7 @@
1005
1006 zip_.c : $(SRCDIR)\zip.c
1007 +translate$E $** > $@
1008
1009 headers: makeheaders$E page_index.h builtin_data.h VERSION.h
1010 +makeheaders$E add_.c:add.h ajax_.c:ajax.h alerts_.c:alerts.h allrepo_.c:allrepo.h attach_.c:attach.h backlink_.c:backlink.h backoffice_.c:backoffice.h bag_.c:bag.h bisect_.c:bisect.h blob_.c:blob.h branch_.c:branch.h browse_.c:browse.h builtin_.c:builtin.h bundle_.c:bundle.h cache_.c:cache.h capabilities_.c:capabilities.h captcha_.c:captcha.h cgi_.c:cgi.h chat_.c:chat.h checkin_.c:checkin.h checkout_.c:checkout.h clearsign_.c:clearsign.h clone_.c:clone.h color_.c:color.h comformat_.c:comformat.h configure_.c:configure.h content_.c:content.h cookies_.c:cookies.h db_.c:db.h delta_.c:delta.h deltacmd_.c:deltacmd.h deltafunc_.c:deltafunc.h descendants_.c:descendants.h diff_.c:diff.h diffcmd_.c:diffcmd.h dispatch_.c:dispatch.h doc_.c:doc.h encode_.c:encode.h etag_.c:etag.h event_.c:event.h export_.c:export.h extcgi_.c:extcgi.h file_.c:file.h fileedit_.c:fileedit.h finfo_.c:finfo.h foci_.c:foci.h forum_.c:forum.h fshell_.c:fshell.h fusefs_.c:fusefs.h fuzz_.c:fuzz.h glob_.c:glob.h graph_.c:graph.h gzip_.c:gzip.h hname_.c:hname.h hook_.c:hook.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 interwiki_.c:interwiki.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 loadctrl_.c:loadctrl.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 piechart_.c:piechart.h pikchr_.c:pikchr.h pikchrshow_.c:pikchrshow.h pivot_.c:pivot.h popen_.c:popen.h pqueue_.c:pqueue.h printf_.c:printf.h publish_.c:publish.h purge_.c:purge.h rebuild_.c:rebuild.h regexp_.c:regexp.h repolist_.c:repolist.h report_.c:report.h rss_.c:rss.h schema_.c:schema.h search_.c:search.h security_audit_.c:security_audit.h setup_.c:setup.h setupuser_.c:setupuser.h sha1_.c:sha1.h sha1hard_.c:sha1hard.h sha3_.c:sha3.h shun_.c:shun.h sitemap_.c:sitemap.h skins_.c:skins.h smtp_.c:smtp.h sqlcmd_.c:sqlcmd.h stash_.c:stash.h stat_.c:stat.h statrep_.c:statrep.h style_.c:style.h sync_.c:sync.h tag_.c:tag.h tar_.c:tar.h terminal_.c:terminal.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 unversioned_.c:unversioned.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 winfile_.c:winfile.h winhttp_.c:winhttp.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
1011 @copy /Y nul: headers
1012
--- win/Makefile.dmc
+++ win/Makefile.dmc
@@ -28,13 +28,13 @@
28
29 SQLITE_OPTIONS = -DNDEBUG=1 -DSQLITE_DQS=0 -DSQLITE_THREADSAFE=0 -DSQLITE_DEFAULT_MEMSTATUS=0 -DSQLITE_DEFAULT_WAL_SYNCHRONOUS=1 -DSQLITE_LIKE_DOESNT_MATCH_BLOBS -DSQLITE_OMIT_DECLTYPE -DSQLITE_OMIT_DEPRECATED -DSQLITE_OMIT_PROGRESS_CALLBACK -DSQLITE_OMIT_SHARED_CACHE -DSQLITE_OMIT_LOAD_EXTENSION -DSQLITE_MAX_EXPR_DEPTH=0 -DSQLITE_USE_ALLOCA -DSQLITE_ENABLE_LOCKING_STYLE=0 -DSQLITE_DEFAULT_FILE_FORMAT=4 -DSQLITE_ENABLE_EXPLAIN_COMMENTS -DSQLITE_ENABLE_FTS4 -DSQLITE_ENABLE_DBSTAT_VTAB -DSQLITE_ENABLE_JSON1 -DSQLITE_ENABLE_FTS5 -DSQLITE_ENABLE_STMTVTAB -DSQLITE_HAVE_ZLIB -DSQLITE_INTROSPECTION_PRAGMAS -DSQLITE_ENABLE_DBPAGE_VTAB -DSQLITE_TRUSTED_SCHEMA=0
30
31 SHELL_OPTIONS = -DNDEBUG=1 -DSQLITE_DQS=0 -DSQLITE_THREADSAFE=0 -DSQLITE_DEFAULT_MEMSTATUS=0 -DSQLITE_DEFAULT_WAL_SYNCHRONOUS=1 -DSQLITE_LIKE_DOESNT_MATCH_BLOBS -DSQLITE_OMIT_DECLTYPE -DSQLITE_OMIT_DEPRECATED -DSQLITE_OMIT_PROGRESS_CALLBACK -DSQLITE_OMIT_SHARED_CACHE -DSQLITE_OMIT_LOAD_EXTENSION -DSQLITE_MAX_EXPR_DEPTH=0 -DSQLITE_USE_ALLOCA -DSQLITE_ENABLE_LOCKING_STYLE=0 -DSQLITE_DEFAULT_FILE_FORMAT=4 -DSQLITE_ENABLE_EXPLAIN_COMMENTS -DSQLITE_ENABLE_FTS4 -DSQLITE_ENABLE_DBSTAT_VTAB -DSQLITE_ENABLE_JSON1 -DSQLITE_ENABLE_FTS5 -DSQLITE_ENABLE_STMTVTAB -DSQLITE_HAVE_ZLIB -DSQLITE_INTROSPECTION_PRAGMAS -DSQLITE_ENABLE_DBPAGE_VTAB -DSQLITE_TRUSTED_SCHEMA=0 -Dmain=sqlite3_shell -DSQLITE_SHELL_IS_UTF8=1 -DSQLITE_OMIT_LOAD_EXTENSION=1 -DUSE_SYSTEM_SQLITE=$(USE_SYSTEM_SQLITE) -DSQLITE_SHELL_DBNAME_PROC=sqlcmd_get_dbname -DSQLITE_SHELL_INIT_PROC=sqlcmd_init_proc -Daccess=file_access -Dsystem=fossil_system -Dgetenv=fossil_getenv -Dfopen=fossil_fopen
32
33 SRC = add_.c ajax_.c alerts_.c allrepo_.c attach_.c backlink_.c backoffice_.c bag_.c bisect_.c blob_.c branch_.c browse_.c builtin_.c bundle_.c cache_.c capabilities_.c captcha_.c carray_.c cgi_.c chat_.c checkin_.c checkout_.c clearsign_.c clone_.c color_.c comformat_.c configure_.c content_.c cookies_.c db_.c delta_.c deltacmd_.c deltafunc_.c descendants_.c diff_.c diffcmd_.c dispatch_.c doc_.c encode_.c etag_.c event_.c export_.c extcgi_.c file_.c fileedit_.c finfo_.c foci_.c forum_.c fshell_.c fusefs_.c fuzz_.c glob_.c graph_.c gzip_.c hname_.c hook_.c http_.c http_socket_.c http_ssl_.c http_transport_.c import_.c info_.c interwiki_.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 loadctrl_.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 piechart_.c pikchr_.c pikchrshow_.c pivot_.c popen_.c pqueue_.c printf_.c publish_.c purge_.c rebuild_.c regexp_.c repolist_.c report_.c rss_.c schema_.c search_.c security_audit_.c setup_.c setupuser_.c sha1_.c sha1hard_.c sha3_.c shun_.c sitemap_.c skins_.c smtp_.c sqlcmd_.c stash_.c stat_.c statrep_.c style_.c sync_.c tag_.c tar_.c terminal_.c th_main_.c timeline_.c tkt_.c tktsetup_.c undo_.c unicode_.c unversioned_.c update_.c url_.c user_.c utf8_.c util_.c verify_.c vfile_.c wiki_.c wikiformat_.c winfile_.c winhttp_.c xfer_.c xfersetup_.c zip_.c
34
35 OBJ = $(OBJDIR)\add$O $(OBJDIR)\ajax$O $(OBJDIR)\alerts$O $(OBJDIR)\allrepo$O $(OBJDIR)\attach$O $(OBJDIR)\backlink$O $(OBJDIR)\backoffice$O $(OBJDIR)\bag$O $(OBJDIR)\bisect$O $(OBJDIR)\blob$O $(OBJDIR)\branch$O $(OBJDIR)\browse$O $(OBJDIR)\builtin$O $(OBJDIR)\bundle$O $(OBJDIR)\cache$O $(OBJDIR)\capabilities$O $(OBJDIR)\captcha$O $(OBJDIR)\carray$O $(OBJDIR)\cgi$O $(OBJDIR)\chat$O $(OBJDIR)\checkin$O $(OBJDIR)\checkout$O $(OBJDIR)\clearsign$O $(OBJDIR)\clone$O $(OBJDIR)\color$O $(OBJDIR)\comformat$O $(OBJDIR)\configure$O $(OBJDIR)\content$O $(OBJDIR)\cookies$O $(OBJDIR)\db$O $(OBJDIR)\delta$O $(OBJDIR)\deltacmd$O $(OBJDIR)\deltafunc$O $(OBJDIR)\descendants$O $(OBJDIR)\diff$O $(OBJDIR)\diffcmd$O $(OBJDIR)\dispatch$O $(OBJDIR)\doc$O $(OBJDIR)\encode$O $(OBJDIR)\etag$O $(OBJDIR)\event$O $(OBJDIR)\export$O $(OBJDIR)\extcgi$O $(OBJDIR)\file$O $(OBJDIR)\fileedit$O $(OBJDIR)\finfo$O $(OBJDIR)\foci$O $(OBJDIR)\forum$O $(OBJDIR)\fshell$O $(OBJDIR)\fusefs$O $(OBJDIR)\fuzz$O $(OBJDIR)\glob$O $(OBJDIR)\graph$O $(OBJDIR)\gzip$O $(OBJDIR)\hname$O $(OBJDIR)\hook$O $(OBJDIR)\http$O $(OBJDIR)\http_socket$O $(OBJDIR)\http_ssl$O $(OBJDIR)\http_transport$O $(OBJDIR)\import$O $(OBJDIR)\info$O $(OBJDIR)\interwiki$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)\loadctrl$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)\piechart$O $(OBJDIR)\pikchr$O $(OBJDIR)\pikchrshow$O $(OBJDIR)\pivot$O $(OBJDIR)\popen$O $(OBJDIR)\pqueue$O $(OBJDIR)\printf$O $(OBJDIR)\publish$O $(OBJDIR)\purge$O $(OBJDIR)\rebuild$O $(OBJDIR)\regexp$O $(OBJDIR)\repolist$O $(OBJDIR)\report$O $(OBJDIR)\rss$O $(OBJDIR)\schema$O $(OBJDIR)\search$O $(OBJDIR)\security_audit$O $(OBJDIR)\setup$O $(OBJDIR)\setupuser$O $(OBJDIR)\sha1$O $(OBJDIR)\sha1hard$O $(OBJDIR)\sha3$O $(OBJDIR)\shun$O $(OBJDIR)\sitemap$O $(OBJDIR)\skins$O $(OBJDIR)\smtp$O $(OBJDIR)\sqlcmd$O $(OBJDIR)\stash$O $(OBJDIR)\stat$O $(OBJDIR)\statrep$O $(OBJDIR)\style$O $(OBJDIR)\sync$O $(OBJDIR)\tag$O $(OBJDIR)\tar$O $(OBJDIR)\terminal$O $(OBJDIR)\th_main$O $(OBJDIR)\timeline$O $(OBJDIR)\tkt$O $(OBJDIR)\tktsetup$O $(OBJDIR)\undo$O $(OBJDIR)\unicode$O $(OBJDIR)\unversioned$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)\winfile$O $(OBJDIR)\winhttp$O $(OBJDIR)\xfer$O $(OBJDIR)\xfersetup$O $(OBJDIR)\zip$O $(OBJDIR)\shell$O $(OBJDIR)\sqlite3$O $(OBJDIR)\th$O $(OBJDIR)\th_lang$O
36
37
38 RC=$(DMDIR)\bin\rcc
39 RCFLAGS=-32 -w1 -I$(SRCDIR) /D__DMC__
40
@@ -49,11 +49,11 @@
49
50 $(OBJDIR)\fossil.res: $B\win\fossil.rc
51 $(RC) $(RCFLAGS) -o$@ $**
52
53 $(OBJDIR)\link: $B\win\Makefile.dmc $(OBJDIR)\fossil.res
54 +echo add ajax alerts allrepo attach backlink backoffice bag bisect blob branch browse builtin bundle cache capabilities captcha carray cgi chat checkin checkout clearsign clone color comformat configure content cookies db delta deltacmd deltafunc descendants diff diffcmd dispatch doc encode etag event export extcgi file fileedit finfo foci forum fshell fusefs fuzz glob graph gzip hname hook http http_socket http_ssl http_transport import info interwiki 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 loadctrl login lookslike main manifest markdown markdown_html md5 merge merge3 moderate name path piechart pikchr pikchrshow pivot popen pqueue printf publish purge rebuild regexp repolist report rss schema search security_audit setup setupuser sha1 sha1hard sha3 shun sitemap skins smtp sqlcmd stash stat statrep style sync tag tar terminal th_main timeline tkt tktsetup undo unicode unversioned update url user utf8 util verify vfile wiki wikiformat winfile winhttp xfer xfersetup zip shell sqlite3 th th_lang > $@
55 +echo fossil >> $@
56 +echo fossil >> $@
57 +echo $(LIBS) >> $@
58 +echo. >> $@
59 +echo fossil >> $@
@@ -223,10 +223,16 @@
223 $(OBJDIR)\captcha$O : captcha_.c captcha.h
224 $(TCC) -o$@ -c captcha_.c
225
226 captcha_.c : $(SRCDIR)\captcha.c
227 +translate$E $** > $@
228
229 $(OBJDIR)\carray$O : carray_.c carray.h
230 $(TCC) -o$@ -c carray_.c
231
232 carray_.c : $(SRCDIR)\carray.c
233 +translate$E $** > $@
234
235 $(OBJDIR)\cgi$O : cgi_.c cgi.h
236 $(TCC) -o$@ -c cgi_.c
237
238 cgi_.c : $(SRCDIR)\cgi.c
@@ -1005,7 +1011,7 @@
1011
1012 zip_.c : $(SRCDIR)\zip.c
1013 +translate$E $** > $@
1014
1015 headers: makeheaders$E page_index.h builtin_data.h VERSION.h
1016 +makeheaders$E add_.c:add.h ajax_.c:ajax.h alerts_.c:alerts.h allrepo_.c:allrepo.h attach_.c:attach.h backlink_.c:backlink.h backoffice_.c:backoffice.h bag_.c:bag.h bisect_.c:bisect.h blob_.c:blob.h branch_.c:branch.h browse_.c:browse.h builtin_.c:builtin.h bundle_.c:bundle.h cache_.c:cache.h capabilities_.c:capabilities.h captcha_.c:captcha.h carray_.c:carray.h cgi_.c:cgi.h chat_.c:chat.h checkin_.c:checkin.h checkout_.c:checkout.h clearsign_.c:clearsign.h clone_.c:clone.h color_.c:color.h comformat_.c:comformat.h configure_.c:configure.h content_.c:content.h cookies_.c:cookies.h db_.c:db.h delta_.c:delta.h deltacmd_.c:deltacmd.h deltafunc_.c:deltafunc.h descendants_.c:descendants.h diff_.c:diff.h diffcmd_.c:diffcmd.h dispatch_.c:dispatch.h doc_.c:doc.h encode_.c:encode.h etag_.c:etag.h event_.c:event.h export_.c:export.h extcgi_.c:extcgi.h file_.c:file.h fileedit_.c:fileedit.h finfo_.c:finfo.h foci_.c:foci.h forum_.c:forum.h fshell_.c:fshell.h fusefs_.c:fusefs.h fuzz_.c:fuzz.h glob_.c:glob.h graph_.c:graph.h gzip_.c:gzip.h hname_.c:hname.h hook_.c:hook.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 interwiki_.c:interwiki.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 loadctrl_.c:loadctrl.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 piechart_.c:piechart.h pikchr_.c:pikchr.h pikchrshow_.c:pikchrshow.h pivot_.c:pivot.h popen_.c:popen.h pqueue_.c:pqueue.h printf_.c:printf.h publish_.c:publish.h purge_.c:purge.h rebuild_.c:rebuild.h regexp_.c:regexp.h repolist_.c:repolist.h report_.c:report.h rss_.c:rss.h schema_.c:schema.h search_.c:search.h security_audit_.c:security_audit.h setup_.c:setup.h setupuser_.c:setupuser.h sha1_.c:sha1.h sha1hard_.c:sha1hard.h sha3_.c:sha3.h shun_.c:shun.h sitemap_.c:sitemap.h skins_.c:skins.h smtp_.c:smtp.h sqlcmd_.c:sqlcmd.h stash_.c:stash.h stat_.c:stat.h statrep_.c:statrep.h style_.c:style.h sync_.c:sync.h tag_.c:tag.h tar_.c:tar.h terminal_.c:terminal.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 unversioned_.c:unversioned.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 winfile_.c:winfile.h winhttp_.c:winhttp.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
1017 @copy /Y nul: headers
1018
--- win/Makefile.mingw
+++ win/Makefile.mingw
@@ -440,10 +440,11 @@
440440
$(SRCDIR)/builtin.c \
441441
$(SRCDIR)/bundle.c \
442442
$(SRCDIR)/cache.c \
443443
$(SRCDIR)/capabilities.c \
444444
$(SRCDIR)/captcha.c \
445
+ $(SRCDIR)/carray.c \
445446
$(SRCDIR)/cgi.c \
446447
$(SRCDIR)/chat.c \
447448
$(SRCDIR)/checkin.c \
448449
$(SRCDIR)/checkout.c \
449450
$(SRCDIR)/clearsign.c \
@@ -697,10 +698,11 @@
697698
$(OBJDIR)/builtin_.c \
698699
$(OBJDIR)/bundle_.c \
699700
$(OBJDIR)/cache_.c \
700701
$(OBJDIR)/capabilities_.c \
701702
$(OBJDIR)/captcha_.c \
703
+ $(OBJDIR)/carray_.c \
702704
$(OBJDIR)/cgi_.c \
703705
$(OBJDIR)/chat_.c \
704706
$(OBJDIR)/checkin_.c \
705707
$(OBJDIR)/checkout_.c \
706708
$(OBJDIR)/clearsign_.c \
@@ -846,10 +848,11 @@
846848
$(OBJDIR)/builtin.o \
847849
$(OBJDIR)/bundle.o \
848850
$(OBJDIR)/cache.o \
849851
$(OBJDIR)/capabilities.o \
850852
$(OBJDIR)/captcha.o \
853
+ $(OBJDIR)/carray.o \
851854
$(OBJDIR)/cgi.o \
852855
$(OBJDIR)/chat.o \
853856
$(OBJDIR)/checkin.o \
854857
$(OBJDIR)/checkout.o \
855858
$(OBJDIR)/clearsign.o \
@@ -1210,10 +1213,11 @@
12101213
$(OBJDIR)/builtin_.c:$(OBJDIR)/builtin.h \
12111214
$(OBJDIR)/bundle_.c:$(OBJDIR)/bundle.h \
12121215
$(OBJDIR)/cache_.c:$(OBJDIR)/cache.h \
12131216
$(OBJDIR)/capabilities_.c:$(OBJDIR)/capabilities.h \
12141217
$(OBJDIR)/captcha_.c:$(OBJDIR)/captcha.h \
1218
+ $(OBJDIR)/carray_.c:$(OBJDIR)/carray.h \
12151219
$(OBJDIR)/cgi_.c:$(OBJDIR)/cgi.h \
12161220
$(OBJDIR)/chat_.c:$(OBJDIR)/chat.h \
12171221
$(OBJDIR)/checkin_.c:$(OBJDIR)/checkin.h \
12181222
$(OBJDIR)/checkout_.c:$(OBJDIR)/checkout.h \
12191223
$(OBJDIR)/clearsign_.c:$(OBJDIR)/clearsign.h \
@@ -1484,10 +1488,18 @@
14841488
14851489
$(OBJDIR)/captcha.o: $(OBJDIR)/captcha_.c $(OBJDIR)/captcha.h $(SRCDIR)/config.h
14861490
$(XTCC) -o $(OBJDIR)/captcha.o -c $(OBJDIR)/captcha_.c
14871491
14881492
$(OBJDIR)/captcha.h: $(OBJDIR)/headers
1493
+
1494
+$(OBJDIR)/carray_.c: $(SRCDIR)/carray.c $(TRANSLATE)
1495
+ $(TRANSLATE) $(SRCDIR)/carray.c >$@
1496
+
1497
+$(OBJDIR)/carray.o: $(OBJDIR)/carray_.c $(OBJDIR)/carray.h $(SRCDIR)/config.h
1498
+ $(XTCC) -o $(OBJDIR)/carray.o -c $(OBJDIR)/carray_.c
1499
+
1500
+$(OBJDIR)/carray.h: $(OBJDIR)/headers
14891501
14901502
$(OBJDIR)/cgi_.c: $(SRCDIR)/cgi.c $(TRANSLATE)
14911503
$(TRANSLATE) $(SRCDIR)/cgi.c >$@
14921504
14931505
$(OBJDIR)/cgi.o: $(OBJDIR)/cgi_.c $(OBJDIR)/cgi.h $(SRCDIR)/config.h
14941506
--- win/Makefile.mingw
+++ win/Makefile.mingw
@@ -440,10 +440,11 @@
440 $(SRCDIR)/builtin.c \
441 $(SRCDIR)/bundle.c \
442 $(SRCDIR)/cache.c \
443 $(SRCDIR)/capabilities.c \
444 $(SRCDIR)/captcha.c \
 
445 $(SRCDIR)/cgi.c \
446 $(SRCDIR)/chat.c \
447 $(SRCDIR)/checkin.c \
448 $(SRCDIR)/checkout.c \
449 $(SRCDIR)/clearsign.c \
@@ -697,10 +698,11 @@
697 $(OBJDIR)/builtin_.c \
698 $(OBJDIR)/bundle_.c \
699 $(OBJDIR)/cache_.c \
700 $(OBJDIR)/capabilities_.c \
701 $(OBJDIR)/captcha_.c \
 
702 $(OBJDIR)/cgi_.c \
703 $(OBJDIR)/chat_.c \
704 $(OBJDIR)/checkin_.c \
705 $(OBJDIR)/checkout_.c \
706 $(OBJDIR)/clearsign_.c \
@@ -846,10 +848,11 @@
846 $(OBJDIR)/builtin.o \
847 $(OBJDIR)/bundle.o \
848 $(OBJDIR)/cache.o \
849 $(OBJDIR)/capabilities.o \
850 $(OBJDIR)/captcha.o \
 
851 $(OBJDIR)/cgi.o \
852 $(OBJDIR)/chat.o \
853 $(OBJDIR)/checkin.o \
854 $(OBJDIR)/checkout.o \
855 $(OBJDIR)/clearsign.o \
@@ -1210,10 +1213,11 @@
1210 $(OBJDIR)/builtin_.c:$(OBJDIR)/builtin.h \
1211 $(OBJDIR)/bundle_.c:$(OBJDIR)/bundle.h \
1212 $(OBJDIR)/cache_.c:$(OBJDIR)/cache.h \
1213 $(OBJDIR)/capabilities_.c:$(OBJDIR)/capabilities.h \
1214 $(OBJDIR)/captcha_.c:$(OBJDIR)/captcha.h \
 
1215 $(OBJDIR)/cgi_.c:$(OBJDIR)/cgi.h \
1216 $(OBJDIR)/chat_.c:$(OBJDIR)/chat.h \
1217 $(OBJDIR)/checkin_.c:$(OBJDIR)/checkin.h \
1218 $(OBJDIR)/checkout_.c:$(OBJDIR)/checkout.h \
1219 $(OBJDIR)/clearsign_.c:$(OBJDIR)/clearsign.h \
@@ -1484,10 +1488,18 @@
1484
1485 $(OBJDIR)/captcha.o: $(OBJDIR)/captcha_.c $(OBJDIR)/captcha.h $(SRCDIR)/config.h
1486 $(XTCC) -o $(OBJDIR)/captcha.o -c $(OBJDIR)/captcha_.c
1487
1488 $(OBJDIR)/captcha.h: $(OBJDIR)/headers
 
 
 
 
 
 
 
 
1489
1490 $(OBJDIR)/cgi_.c: $(SRCDIR)/cgi.c $(TRANSLATE)
1491 $(TRANSLATE) $(SRCDIR)/cgi.c >$@
1492
1493 $(OBJDIR)/cgi.o: $(OBJDIR)/cgi_.c $(OBJDIR)/cgi.h $(SRCDIR)/config.h
1494
--- win/Makefile.mingw
+++ win/Makefile.mingw
@@ -440,10 +440,11 @@
440 $(SRCDIR)/builtin.c \
441 $(SRCDIR)/bundle.c \
442 $(SRCDIR)/cache.c \
443 $(SRCDIR)/capabilities.c \
444 $(SRCDIR)/captcha.c \
445 $(SRCDIR)/carray.c \
446 $(SRCDIR)/cgi.c \
447 $(SRCDIR)/chat.c \
448 $(SRCDIR)/checkin.c \
449 $(SRCDIR)/checkout.c \
450 $(SRCDIR)/clearsign.c \
@@ -697,10 +698,11 @@
698 $(OBJDIR)/builtin_.c \
699 $(OBJDIR)/bundle_.c \
700 $(OBJDIR)/cache_.c \
701 $(OBJDIR)/capabilities_.c \
702 $(OBJDIR)/captcha_.c \
703 $(OBJDIR)/carray_.c \
704 $(OBJDIR)/cgi_.c \
705 $(OBJDIR)/chat_.c \
706 $(OBJDIR)/checkin_.c \
707 $(OBJDIR)/checkout_.c \
708 $(OBJDIR)/clearsign_.c \
@@ -846,10 +848,11 @@
848 $(OBJDIR)/builtin.o \
849 $(OBJDIR)/bundle.o \
850 $(OBJDIR)/cache.o \
851 $(OBJDIR)/capabilities.o \
852 $(OBJDIR)/captcha.o \
853 $(OBJDIR)/carray.o \
854 $(OBJDIR)/cgi.o \
855 $(OBJDIR)/chat.o \
856 $(OBJDIR)/checkin.o \
857 $(OBJDIR)/checkout.o \
858 $(OBJDIR)/clearsign.o \
@@ -1210,10 +1213,11 @@
1213 $(OBJDIR)/builtin_.c:$(OBJDIR)/builtin.h \
1214 $(OBJDIR)/bundle_.c:$(OBJDIR)/bundle.h \
1215 $(OBJDIR)/cache_.c:$(OBJDIR)/cache.h \
1216 $(OBJDIR)/capabilities_.c:$(OBJDIR)/capabilities.h \
1217 $(OBJDIR)/captcha_.c:$(OBJDIR)/captcha.h \
1218 $(OBJDIR)/carray_.c:$(OBJDIR)/carray.h \
1219 $(OBJDIR)/cgi_.c:$(OBJDIR)/cgi.h \
1220 $(OBJDIR)/chat_.c:$(OBJDIR)/chat.h \
1221 $(OBJDIR)/checkin_.c:$(OBJDIR)/checkin.h \
1222 $(OBJDIR)/checkout_.c:$(OBJDIR)/checkout.h \
1223 $(OBJDIR)/clearsign_.c:$(OBJDIR)/clearsign.h \
@@ -1484,10 +1488,18 @@
1488
1489 $(OBJDIR)/captcha.o: $(OBJDIR)/captcha_.c $(OBJDIR)/captcha.h $(SRCDIR)/config.h
1490 $(XTCC) -o $(OBJDIR)/captcha.o -c $(OBJDIR)/captcha_.c
1491
1492 $(OBJDIR)/captcha.h: $(OBJDIR)/headers
1493
1494 $(OBJDIR)/carray_.c: $(SRCDIR)/carray.c $(TRANSLATE)
1495 $(TRANSLATE) $(SRCDIR)/carray.c >$@
1496
1497 $(OBJDIR)/carray.o: $(OBJDIR)/carray_.c $(OBJDIR)/carray.h $(SRCDIR)/config.h
1498 $(XTCC) -o $(OBJDIR)/carray.o -c $(OBJDIR)/carray_.c
1499
1500 $(OBJDIR)/carray.h: $(OBJDIR)/headers
1501
1502 $(OBJDIR)/cgi_.c: $(SRCDIR)/cgi.c $(TRANSLATE)
1503 $(TRANSLATE) $(SRCDIR)/cgi.c >$@
1504
1505 $(OBJDIR)/cgi.o: $(OBJDIR)/cgi_.c $(OBJDIR)/cgi.h $(SRCDIR)/config.h
1506
--- win/Makefile.msc
+++ win/Makefile.msc
@@ -383,10 +383,11 @@
383383
"$(OX)\builtin_.c" \
384384
"$(OX)\bundle_.c" \
385385
"$(OX)\cache_.c" \
386386
"$(OX)\capabilities_.c" \
387387
"$(OX)\captcha_.c" \
388
+ "$(OX)\carray_.c" \
388389
"$(OX)\cgi_.c" \
389390
"$(OX)\chat_.c" \
390391
"$(OX)\checkin_.c" \
391392
"$(OX)\checkout_.c" \
392393
"$(OX)\clearsign_.c" \
@@ -638,10 +639,11 @@
638639
"$(OX)\builtin$O" \
639640
"$(OX)\bundle$O" \
640641
"$(OX)\cache$O" \
641642
"$(OX)\capabilities$O" \
642643
"$(OX)\captcha$O" \
644
+ "$(OX)\carray$O" \
643645
"$(OX)\cgi$O" \
644646
"$(OX)\chat$O" \
645647
"$(OX)\checkin$O" \
646648
"$(OX)\checkout$O" \
647649
"$(OX)\clearsign$O" \
@@ -868,10 +870,11 @@
868870
echo "$(OX)\builtin.obj" >> $@
869871
echo "$(OX)\bundle.obj" >> $@
870872
echo "$(OX)\cache.obj" >> $@
871873
echo "$(OX)\capabilities.obj" >> $@
872874
echo "$(OX)\captcha.obj" >> $@
875
+ echo "$(OX)\carray.obj" >> $@
873876
echo "$(OX)\cgi.obj" >> $@
874877
echo "$(OX)\chat.obj" >> $@
875878
echo "$(OX)\checkin.obj" >> $@
876879
echo "$(OX)\checkout.obj" >> $@
877880
echo "$(OX)\clearsign.obj" >> $@
@@ -1328,10 +1331,16 @@
13281331
"$(OX)\captcha$O" : "$(OX)\captcha_.c" "$(OX)\captcha.h"
13291332
$(TCC) /Fo$@ /Fd$(@D)\ -c "$(OX)\captcha_.c"
13301333
13311334
"$(OX)\captcha_.c" : "$(SRCDIR)\captcha.c"
13321335
"$(OBJDIR)\translate$E" $** > $@
1336
+
1337
+"$(OX)\carray$O" : "$(OX)\carray_.c" "$(OX)\carray.h"
1338
+ $(TCC) /Fo$@ /Fd$(@D)\ -c "$(OX)\carray_.c"
1339
+
1340
+"$(OX)\carray_.c" : "$(SRCDIR)\carray.c"
1341
+ "$(OBJDIR)\translate$E" $** > $@
13331342
13341343
"$(OX)\cgi$O" : "$(OX)\cgi_.c" "$(OX)\cgi.h"
13351344
$(TCC) /Fo$@ /Fd$(@D)\ -c "$(OX)\cgi_.c"
13361345
13371346
"$(OX)\cgi_.c" : "$(SRCDIR)\cgi.c"
@@ -2130,10 +2139,11 @@
21302139
"$(OX)\builtin_.c":"$(OX)\builtin.h" \
21312140
"$(OX)\bundle_.c":"$(OX)\bundle.h" \
21322141
"$(OX)\cache_.c":"$(OX)\cache.h" \
21332142
"$(OX)\capabilities_.c":"$(OX)\capabilities.h" \
21342143
"$(OX)\captcha_.c":"$(OX)\captcha.h" \
2144
+ "$(OX)\carray_.c":"$(OX)\carray.h" \
21352145
"$(OX)\cgi_.c":"$(OX)\cgi.h" \
21362146
"$(OX)\chat_.c":"$(OX)\chat.h" \
21372147
"$(OX)\checkin_.c":"$(OX)\checkin.h" \
21382148
"$(OX)\checkout_.c":"$(OX)\checkout.h" \
21392149
"$(OX)\clearsign_.c":"$(OX)\clearsign.h" \
21402150
--- win/Makefile.msc
+++ win/Makefile.msc
@@ -383,10 +383,11 @@
383 "$(OX)\builtin_.c" \
384 "$(OX)\bundle_.c" \
385 "$(OX)\cache_.c" \
386 "$(OX)\capabilities_.c" \
387 "$(OX)\captcha_.c" \
 
388 "$(OX)\cgi_.c" \
389 "$(OX)\chat_.c" \
390 "$(OX)\checkin_.c" \
391 "$(OX)\checkout_.c" \
392 "$(OX)\clearsign_.c" \
@@ -638,10 +639,11 @@
638 "$(OX)\builtin$O" \
639 "$(OX)\bundle$O" \
640 "$(OX)\cache$O" \
641 "$(OX)\capabilities$O" \
642 "$(OX)\captcha$O" \
 
643 "$(OX)\cgi$O" \
644 "$(OX)\chat$O" \
645 "$(OX)\checkin$O" \
646 "$(OX)\checkout$O" \
647 "$(OX)\clearsign$O" \
@@ -868,10 +870,11 @@
868 echo "$(OX)\builtin.obj" >> $@
869 echo "$(OX)\bundle.obj" >> $@
870 echo "$(OX)\cache.obj" >> $@
871 echo "$(OX)\capabilities.obj" >> $@
872 echo "$(OX)\captcha.obj" >> $@
 
873 echo "$(OX)\cgi.obj" >> $@
874 echo "$(OX)\chat.obj" >> $@
875 echo "$(OX)\checkin.obj" >> $@
876 echo "$(OX)\checkout.obj" >> $@
877 echo "$(OX)\clearsign.obj" >> $@
@@ -1328,10 +1331,16 @@
1328 "$(OX)\captcha$O" : "$(OX)\captcha_.c" "$(OX)\captcha.h"
1329 $(TCC) /Fo$@ /Fd$(@D)\ -c "$(OX)\captcha_.c"
1330
1331 "$(OX)\captcha_.c" : "$(SRCDIR)\captcha.c"
1332 "$(OBJDIR)\translate$E" $** > $@
 
 
 
 
 
 
1333
1334 "$(OX)\cgi$O" : "$(OX)\cgi_.c" "$(OX)\cgi.h"
1335 $(TCC) /Fo$@ /Fd$(@D)\ -c "$(OX)\cgi_.c"
1336
1337 "$(OX)\cgi_.c" : "$(SRCDIR)\cgi.c"
@@ -2130,10 +2139,11 @@
2130 "$(OX)\builtin_.c":"$(OX)\builtin.h" \
2131 "$(OX)\bundle_.c":"$(OX)\bundle.h" \
2132 "$(OX)\cache_.c":"$(OX)\cache.h" \
2133 "$(OX)\capabilities_.c":"$(OX)\capabilities.h" \
2134 "$(OX)\captcha_.c":"$(OX)\captcha.h" \
 
2135 "$(OX)\cgi_.c":"$(OX)\cgi.h" \
2136 "$(OX)\chat_.c":"$(OX)\chat.h" \
2137 "$(OX)\checkin_.c":"$(OX)\checkin.h" \
2138 "$(OX)\checkout_.c":"$(OX)\checkout.h" \
2139 "$(OX)\clearsign_.c":"$(OX)\clearsign.h" \
2140
--- win/Makefile.msc
+++ win/Makefile.msc
@@ -383,10 +383,11 @@
383 "$(OX)\builtin_.c" \
384 "$(OX)\bundle_.c" \
385 "$(OX)\cache_.c" \
386 "$(OX)\capabilities_.c" \
387 "$(OX)\captcha_.c" \
388 "$(OX)\carray_.c" \
389 "$(OX)\cgi_.c" \
390 "$(OX)\chat_.c" \
391 "$(OX)\checkin_.c" \
392 "$(OX)\checkout_.c" \
393 "$(OX)\clearsign_.c" \
@@ -638,10 +639,11 @@
639 "$(OX)\builtin$O" \
640 "$(OX)\bundle$O" \
641 "$(OX)\cache$O" \
642 "$(OX)\capabilities$O" \
643 "$(OX)\captcha$O" \
644 "$(OX)\carray$O" \
645 "$(OX)\cgi$O" \
646 "$(OX)\chat$O" \
647 "$(OX)\checkin$O" \
648 "$(OX)\checkout$O" \
649 "$(OX)\clearsign$O" \
@@ -868,10 +870,11 @@
870 echo "$(OX)\builtin.obj" >> $@
871 echo "$(OX)\bundle.obj" >> $@
872 echo "$(OX)\cache.obj" >> $@
873 echo "$(OX)\capabilities.obj" >> $@
874 echo "$(OX)\captcha.obj" >> $@
875 echo "$(OX)\carray.obj" >> $@
876 echo "$(OX)\cgi.obj" >> $@
877 echo "$(OX)\chat.obj" >> $@
878 echo "$(OX)\checkin.obj" >> $@
879 echo "$(OX)\checkout.obj" >> $@
880 echo "$(OX)\clearsign.obj" >> $@
@@ -1328,10 +1331,16 @@
1331 "$(OX)\captcha$O" : "$(OX)\captcha_.c" "$(OX)\captcha.h"
1332 $(TCC) /Fo$@ /Fd$(@D)\ -c "$(OX)\captcha_.c"
1333
1334 "$(OX)\captcha_.c" : "$(SRCDIR)\captcha.c"
1335 "$(OBJDIR)\translate$E" $** > $@
1336
1337 "$(OX)\carray$O" : "$(OX)\carray_.c" "$(OX)\carray.h"
1338 $(TCC) /Fo$@ /Fd$(@D)\ -c "$(OX)\carray_.c"
1339
1340 "$(OX)\carray_.c" : "$(SRCDIR)\carray.c"
1341 "$(OBJDIR)\translate$E" $** > $@
1342
1343 "$(OX)\cgi$O" : "$(OX)\cgi_.c" "$(OX)\cgi.h"
1344 $(TCC) /Fo$@ /Fd$(@D)\ -c "$(OX)\cgi_.c"
1345
1346 "$(OX)\cgi_.c" : "$(SRCDIR)\cgi.c"
@@ -2130,10 +2139,11 @@
2139 "$(OX)\builtin_.c":"$(OX)\builtin.h" \
2140 "$(OX)\bundle_.c":"$(OX)\bundle.h" \
2141 "$(OX)\cache_.c":"$(OX)\cache.h" \
2142 "$(OX)\capabilities_.c":"$(OX)\capabilities.h" \
2143 "$(OX)\captcha_.c":"$(OX)\captcha.h" \
2144 "$(OX)\carray_.c":"$(OX)\carray.h" \
2145 "$(OX)\cgi_.c":"$(OX)\cgi.h" \
2146 "$(OX)\chat_.c":"$(OX)\chat.h" \
2147 "$(OX)\checkin_.c":"$(OX)\checkin.h" \
2148 "$(OX)\checkout_.c":"$(OX)\checkout.h" \
2149 "$(OX)\clearsign_.c":"$(OX)\clearsign.h" \
2150

Keyboard Shortcuts

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