Index: README.md ================================================================== --- README.md +++ README.md @@ -1,5 +1,16 @@ +# Happy Birthday!!!! + +May you have many more birthdays and may you share them, along with some cake +and ice cream, with yoru Sunday School class. + +Until we meet again, either here or in Heaven or after the Our Lord's +Return. + +Yours in Christ Jesus +Gerald + # About Fossil Fossil is a distributed version control system that has been widely used since 2007. Fossil was originally designed to support the [SQLite](https://sqlite.org) project but has been adopted by many other @@ -11,5 +22,126 @@ of the self-hosting Fossil repository. The purpose of that mirror is to test and exercise Fossil's ability to export a Git mirror. Nobody much uses the GitHub mirror, except to verify that the mirror logic works. If you want to know more about Fossil, visit the official self-hosting site linked above. + +----------------------- + +``` pikchr toggle indent +$bgcol = lightgray + +define l_H { + line down 4 then right 1 then \ + up 1.5 then right 1 then down 1.5 then right 1 then \ + up 4 then left 1 then down 1.5 then left 1 then up 1.5 then close \ + fill $bgcol +} + +define l_A { + line down 4 left 1.5 then right 0.75 then up 1.5 right 0.5 then \ + right 0.5 then down 1.5 right 0.5 then right 0.75 then \ + close fill $bgcol + line from 1.50 below previous line.start down 0.5 left 0.2 \ + then right 0.4 then close fill white +} + +define l_P { + line right 3 then down 3 then left 2 then down 1 \ + then left 1 then close fill $bgcol + box wid 1 ht 1 at previous line.start + (1.5, -1.5) fill white +} + +define l_Y { + line left 1 then down 2 right 1 then down 2 then \ + right 1 then up 2 then right 1 up 2 then left 1 then \ + down 1.5 left 0.5 then close fill $bgcol + +} + +define l_B { + line right 1.8 then right 0.2 down 0.2 then down 1.8 then \ + left 0.2 down 0.15 then right 0.2 down 0.15 then \ + down 1.8 then down 0.2 left 0.2 then left 1.8 then \ + close fill $bgcol + box wid 0.5 ht 1 at previous line.start + (1.0, -1.15) fill white + box same at previous line.start + (1.0, -3.10) +} + +define l_I { + move down 0.1 + box wid 1 ht 4.0 fill $bgcol +} + +define l_R { + line right 1.8 then right 0.2 down 0.2 then down 1.8 then \ + left 0.2 down 0.15 then right 0.2 down 0.15 then \ + down 2.0 then left 0.7 then up 2.0 then left 0.5 then down 2.0 \ + then left 0.8 then close fill $bgcol + box wid 0.5 ht 1 at previous line.start + (1.0, -1.15) fill white +} + +define l_T { + line right 3 then down 1 then left 1 then down 3.2 then \ + left 1 then up 3.2 then left 1 then close fill $bgcol +} + +define l_D { + line right 2.7 then right 0.3 down 0.3 then down 3.7 then down 0.3 left 0.3 then left 1.7 then \ + then left 1 then close fill $bgcol + box wid 1 ht 2.3 at previous line.start + (1.5, -2.15) fill white +} + +l_H() + move from previous line.ne + (1.5, 0) +l_A() + move from 2nd previous line.start + (1.5, 0) +l_P() + move from previous line.start + (3.5, 0) +l_P() + move from previous line.start + (4.0, 0) +l_Y() + + move down from first line.sw + (0, -1) + +l_B() + move right from previous line.start + (2.5, 0) +l_I() + move right from previous box.ne + (0, 0.1) +l_R() + move right from previous line.start + (2, 0) +l_T() + move right from previous line.start + (3, 0) +l_H() + move right from previous line.start + (3, 0) +l_D() + move right from previous line.start + (4.5, 0) +l_A() + move right from previous line.start + (1.5, +1.5) +l_Y() + + move down from 7th line.sw + (0, -1) + +l_D() + move right from previous line.start + (3.0, 0) +l_R() + move right from previous line.start + (2, -0.15) +l_H() + +// To make everything small +move right 80 +dot rad 0.01 +``` +\ + I wish you the best in all sphere of your life. \ + Thank you for SQLite, Fossil (and everything else, including pikchr). + + Martin G. + + +# Essential links + +Congrats on reaching this major milestone. + +Mark. J + + * [Benefits for senior citizens](https://www.benefits.gov/news/article/349) Index: VERSION ================================================================== --- VERSION +++ VERSION @@ -1,1 +1,4 @@ -2.15 +60.0.0 + +Happy birthday, Richard! +Remember that the best is yet to come. Index: compat/tcl-8.6/generic/tcl.h ================================================================== --- compat/tcl-8.6/generic/tcl.h +++ compat/tcl-8.6/generic/tcl.h @@ -51,17 +51,37 @@ * win/README (not patchlevel) (sections 0 and 2) * unix/tcl.spec (1 LOC patch) * tools/tcl.hpj.in (not patchlevel, for windows installer) */ -#define TCL_MAJOR_VERSION 8 -#define TCL_MINOR_VERSION 6 +#define TCL_MAJOR_VERSION 9 +#define TCL_MINOR_VERSION 0 #define TCL_RELEASE_LEVEL TCL_FINAL_RELEASE #define TCL_RELEASE_SERIAL 0 -#define TCL_VERSION "8.6" -#define TCL_PATCH_LEVEL "8.6.0" +#define TCL_VERSION "9.0" +/* Special Tcl 9.0 pre-release due to drh's 60th birthday + * HIEP HIEP HOERA !!! + * try it: + * $ ./configure --with-tcl=1 --with-tcl-stubs --with-tcl-private-stubs + * ... + * $ make + * ... + * $ ./fossil version -v + * This is fossil version 60.0.0 [??????????] 2021-04-09 ??:??:?? UTC + * Compiled on Apr 9 2021 .... + * Schema version 2015-01-24 + * Detected memory page size is 4096 bytes + * zlib 1.2.11, loaded 1.2.11 + * ... + * TCL (Tcl 9.0.60+special.birthday.release, loaded TH_OK: 9.0a2) + * USE_TCL_STUBS + * FOSSIL_ENABLE_TCL_PRIVATE_STUBS + * ... + * Jan Nijtmans + */ +#define TCL_PATCH_LEVEL "9.0.60+special.birthday.release" /* *---------------------------------------------------------------------------- * The following definitions set up the proper options for Windows compilers. * We use this method because there is no autoconf equivalent. @@ -627,23 +647,22 @@ * relative to the start of the match string, not the beginning of the entire * string. */ typedef struct Tcl_RegExpIndices { - long start; /* Character offset of first character in + size_t start; /* Character offset of first character in * match. */ - long end; /* Character offset of first character after + size_t end; /* Character offset of first character after * the match. */ } Tcl_RegExpIndices; typedef struct Tcl_RegExpInfo { - int nsubs; /* Number of subexpressions in the compiled + size_t nsubs; /* Number of subexpressions in the compiled * expression. */ Tcl_RegExpIndices *matches; /* Array of nsubs match offset pairs. */ - long extendStart; /* The offset at which a subsequent match + size_t extendStart; /* The offset at which a subsequent match * might begin. */ - long reserved; /* Reserved for later use. */ } Tcl_RegExpInfo; /* * Picky compilers complain if this typdef doesn't appear before the struct's * reference in tclDecls.h. @@ -808,11 +827,11 @@ * An object stores a value as either a string, some internal representation, * or both. */ typedef struct Tcl_Obj { - int refCount; /* When 0 the object will be freed. */ + size_t refCount; /* When 0 the object will be freed. */ char *bytes; /* This points to the first byte of the * object's string representation. The array * must be followed by a null byte (i.e., at * offset length) but may also contain * embedded null characters. The array's @@ -820,11 +839,11 @@ * the string rep is invalid and must be * regenerated from the internal rep. Clients * should use Tcl_GetStringFromObj or * Tcl_GetString to get a pointer to the byte * array as a readonly value. */ - int length; /* The number of bytes at *bytes, not + size_t length; /* The number of bytes at *bytes, not * including the terminating null. */ const Tcl_ObjType *typePtr; /* Denotes the object's type. Always * corresponds to the type of the object's * internal rep. NULL indicates the object has * no internal rep (has no type). */ @@ -988,13 +1007,13 @@ #define TCL_DSTRING_STATIC_SIZE 200 typedef struct Tcl_DString { char *string; /* Points to beginning of string: either * staticSpace below or a malloced array. */ - int length; /* Number of non-NULL characters in the + size_t length; /* Number of non-NULL characters in the * string. */ - int spaceAvl; /* Total number of bytes available for the + size_t spaceAvl; /* Total number of bytes available for the * string and its terminating NULL char. */ char staticSpace[TCL_DSTRING_STATIC_SIZE]; /* Space to use in common case where string is * small. */ } Tcl_DString; @@ -1153,16 +1172,20 @@ /* *---------------------------------------------------------------------------- * Forward declarations of Tcl_HashTable and related types. */ + +#ifndef TCL_HASH_TYPE +# define TCL_HASH_TYPE size_t +#endif typedef struct Tcl_HashKeyType Tcl_HashKeyType; typedef struct Tcl_HashTable Tcl_HashTable; typedef struct Tcl_HashEntry Tcl_HashEntry; -typedef unsigned (Tcl_HashKeyProc) (Tcl_HashTable *tablePtr, void *keyPtr); +typedef TCL_HASH_TYPE (Tcl_HashKeyProc) (Tcl_HashTable *tablePtr, void *keyPtr); typedef int (Tcl_CompareHashKeysProc) (void *keyPtr, Tcl_HashEntry *hPtr); typedef Tcl_HashEntry * (Tcl_AllocHashEntryProc) (Tcl_HashTable *tablePtr, void *keyPtr); typedef void (Tcl_FreeHashEntryProc) (Tcl_HashEntry *hPtr); @@ -1185,20 +1208,12 @@ struct Tcl_HashEntry { Tcl_HashEntry *nextPtr; /* Pointer to next entry in this hash bucket, * or NULL for end of chain. */ Tcl_HashTable *tablePtr; /* Pointer to table containing entry. */ -#if TCL_HASH_KEY_STORE_HASH - void *hash; /* Hash value, stored as pointer to ensure - * that the offsets of the fields in this - * structure are not changed. */ -#else - Tcl_HashEntry **bucketPtr; /* Pointer to bucket that points to first - * entry in this entry's chain: used for - * deleting the entry. */ -#endif - ClientData clientData; /* Application stores something here with + size_t hash; /* Hash value. */ + void *clientData; /* Application stores something here with * Tcl_SetHashValue. */ union { /* Key has one of these forms: */ char *oneWordValue; /* One-word value for key. */ Tcl_Obj *objPtr; /* Tcl_Obj * key value. */ int words[1]; /* Multiple integer words for key. The actual @@ -1282,20 +1297,20 @@ * points to first entry in bucket's hash * chain, or NULL. */ Tcl_HashEntry *staticBuckets[TCL_SMALL_HASH_TABLE]; /* Bucket array used for small tables (to * avoid mallocs and frees). */ - int numBuckets; /* Total number of buckets allocated at + size_t numBuckets; /* Total number of buckets allocated at * **bucketPtr. */ - int numEntries; /* Total number of entries present in + size_t numEntries; /* Total number of entries present in * table. */ - int rebuildSize; /* Enlarge table when numEntries gets to be + size_t rebuildSize; /* Enlarge table when numEntries gets to be * this large. */ + size_t mask; /* Mask value used in hashing function. */ int downShift; /* Shift count used in hashing function. * Designed to use high-order bits of * randomized keys. */ - int mask; /* Mask value used in hashing function. */ int keyType; /* Type of keys used in this table. It's * either TCL_CUSTOM_KEYS, TCL_STRING_KEYS, * TCL_ONE_WORD_KEYS, or an integer giving the * number of ints that is the size of the * key. */ @@ -1312,11 +1327,11 @@ * hash tables: */ typedef struct Tcl_HashSearch { Tcl_HashTable *tablePtr; /* Table being searched. */ - int nextIndex; /* Index of next bucket to be enumerated after + size_t nextIndex; /* Index of next bucket to be enumerated after * present one. */ Tcl_HashEntry *nextEntryPtr;/* Next entry to be enumerated in the current * bucket. */ } Tcl_HashSearch; @@ -1353,12 +1368,12 @@ */ typedef struct { void *next; /* Search position for underlying hash * table. */ - int epoch; /* Epoch marker for dictionary being searched, - * or -1 if search has terminated. */ + size_t epoch; /* Epoch marker for dictionary being searched, + * or 0 if search has terminated. */ Tcl_Dict dictionaryPtr; /* Reference to dictionary being searched. */ } Tcl_DictSearch; /* *---------------------------------------------------------------------------- @@ -1730,11 +1745,11 @@ * explanations in the structure show the importance of each function. */ typedef struct Tcl_Filesystem { const char *typeName; /* The name of the filesystem. */ - int structureLength; /* Length of this structure, so future binary + size_t structureLength; /* Length of this structure, so future binary * compatibility can be assured. */ Tcl_FSVersion version; /* Version of the filesystem type. */ Tcl_FSPathInFilesystemProc *pathInFilesystemProc; /* Function to check whether a path is in this * filesystem. This is the most important @@ -1920,12 +1935,12 @@ typedef struct Tcl_Token { int type; /* Type of token, such as TCL_TOKEN_WORD; see * below for valid types. */ const char *start; /* First character in token. */ - int size; /* Number of bytes in token. */ - int numComponents; /* If this token is composed of other tokens, + size_t size; /* Number of bytes in token. */ + size_t numComponents; /* If this token is composed of other tokens, * this field tells how many of them there are * (including components of components, etc.). * The component tokens immediately follow * this one. */ } Tcl_Token; @@ -2035,11 +2050,11 @@ #define NUM_STATIC_TOKENS 20 typedef struct Tcl_Parse { const char *commentStart; /* Pointer to # that begins the first of one * or more comments preceding the command. */ - int commentSize; /* Number of bytes in comments (up through + size_t commentSize; /* Number of bytes in comments (up through * newline character that terminates the last * comment). If there were no comments, this * field is 0. */ const char *commandStart; /* First character in first word of * command. */ @@ -2380,21 +2395,21 @@ * * Jan Nijtman's plus patch uses 0xFCA1BACF, so we need to pick a different * value since the stubs tables don't match. */ -#define TCL_STUB_MAGIC ((int) 0xFCA3BACF) +#define TCL_STUB_MAGIC ((int) 0xFCA3BACB + (int) sizeof(void *)) /* * The following function is required to be defined in all stubs aware * extensions. The function is actually implemented in the stub library, not * the main Tcl library, although there is a trivial implementation in the * main library in case an extension is statically linked into an application. */ const char * Tcl_InitStubs(Tcl_Interp *interp, const char *version, - int exact); + int exact, int magic); const char * TclTomMathInitializeStubs(Tcl_Interp *interp, const char *version, int epoch, int revision); /* * When not using stubs, make it a macro. @@ -2485,30 +2500,36 @@ # define Tcl_ValidateAllMemory(x,y) #endif /* !TCL_MEM_DEBUG */ #ifdef TCL_MEM_DEBUG +# undef Tcl_IncrRefCount # define Tcl_IncrRefCount(objPtr) \ Tcl_DbIncrRefCount(objPtr, __FILE__, __LINE__) +# undef Tcl_DecrRefCount # define Tcl_DecrRefCount(objPtr) \ Tcl_DbDecrRefCount(objPtr, __FILE__, __LINE__) +# undef Tcl_IsShared # define Tcl_IsShared(objPtr) \ Tcl_DbIsShared(objPtr, __FILE__, __LINE__) #else +# undef Tcl_IncrRefCount # define Tcl_IncrRefCount(objPtr) \ ++(objPtr)->refCount /* * Use do/while0 idiom for optimum correctness without compiler warnings. * http://c2.com/cgi/wiki?TrivialDoWhileLoop */ +# undef Tcl_DecrRefCount # define Tcl_DecrRefCount(objPtr) \ do { \ Tcl_Obj *_objPtr = (objPtr); \ - if (--(_objPtr)->refCount <= 0) { \ + if (_objPtr->refCount-- <= 1) { \ TclFreeObj(_objPtr); \ } \ } while(0) +# undef Tcl_IsShared # define Tcl_IsShared(objPtr) \ ((objPtr)->refCount > 1) #endif /* Index: compat/tcl-8.6/generic/tclDecls.h ================================================================== --- compat/tcl-8.6/generic/tclDecls.h +++ compat/tcl-8.6/generic/tclDecls.h @@ -121,11 +121,11 @@ EXTERN Tcl_Obj * Tcl_DbNewLongObj(long longValue, const char *file, int line); /* 27 */ EXTERN Tcl_Obj * Tcl_DbNewObj(const char *file, int line); /* 28 */ -EXTERN Tcl_Obj * Tcl_DbNewStringObj(const char *bytes, int length, +EXTERN Tcl_Obj * Tcl_DbNewStringObj(const char *bytes, size_t length, const char *file, int line); /* 29 */ EXTERN Tcl_Obj * Tcl_DuplicateObj(Tcl_Obj *objPtr); /* 30 */ EXTERN void TclFreeObj(Tcl_Obj *objPtr); @@ -199,11 +199,11 @@ /* 54 */ EXTERN Tcl_Obj * Tcl_NewLongObj(long longValue); /* 55 */ EXTERN Tcl_Obj * Tcl_NewObj(void); /* 56 */ -EXTERN Tcl_Obj * Tcl_NewStringObj(const char *bytes, int length); +EXTERN Tcl_Obj * Tcl_NewStringObj(const char *bytes, size_t length); /* 57 */ EXTERN void Tcl_SetBooleanObj(Tcl_Obj *objPtr, int boolValue); /* 58 */ EXTERN unsigned char * Tcl_SetByteArrayLength(Tcl_Obj *objPtr, int length); /* 59 */ @@ -1864,11 +1864,11 @@ Tcl_Obj * (*tcl_DbNewByteArrayObj) (const unsigned char *bytes, int length, const char *file, int line); /* 23 */ Tcl_Obj * (*tcl_DbNewDoubleObj) (double doubleValue, const char *file, int line); /* 24 */ Tcl_Obj * (*tcl_DbNewListObj) (int objc, Tcl_Obj *const *objv, const char *file, int line); /* 25 */ Tcl_Obj * (*tcl_DbNewLongObj) (long longValue, const char *file, int line); /* 26 */ Tcl_Obj * (*tcl_DbNewObj) (const char *file, int line); /* 27 */ - Tcl_Obj * (*tcl_DbNewStringObj) (const char *bytes, int length, const char *file, int line); /* 28 */ + Tcl_Obj * (*tcl_DbNewStringObj) (const char *bytes, size_t length, const char *file, int line); /* 28 */ Tcl_Obj * (*tcl_DuplicateObj) (Tcl_Obj *objPtr); /* 29 */ void (*tclFreeObj) (Tcl_Obj *objPtr); /* 30 */ int (*tcl_GetBoolean) (Tcl_Interp *interp, const char *src, int *boolPtr); /* 31 */ int (*tcl_GetBooleanFromObj) (Tcl_Interp *interp, Tcl_Obj *objPtr, int *boolPtr); /* 32 */ unsigned char * (*tcl_GetByteArrayFromObj) (Tcl_Obj *objPtr, int *lengthPtr); /* 33 */ @@ -1892,11 +1892,11 @@ Tcl_Obj * (*tcl_NewDoubleObj) (double doubleValue); /* 51 */ Tcl_Obj * (*tcl_NewIntObj) (int intValue); /* 52 */ Tcl_Obj * (*tcl_NewListObj) (int objc, Tcl_Obj *const objv[]); /* 53 */ Tcl_Obj * (*tcl_NewLongObj) (long longValue); /* 54 */ Tcl_Obj * (*tcl_NewObj) (void); /* 55 */ - Tcl_Obj * (*tcl_NewStringObj) (const char *bytes, int length); /* 56 */ + Tcl_Obj * (*tcl_NewStringObj) (const char *bytes, size_t length); /* 56 */ void (*tcl_SetBooleanObj) (Tcl_Obj *objPtr, int boolValue); /* 57 */ unsigned char * (*tcl_SetByteArrayLength) (Tcl_Obj *objPtr, int length); /* 58 */ void (*tcl_SetByteArrayObj) (Tcl_Obj *objPtr, const unsigned char *bytes, int length); /* 59 */ void (*tcl_SetDoubleObj) (Tcl_Obj *objPtr, double doubleValue); /* 60 */ void (*tcl_SetIntObj) (Tcl_Obj *objPtr, int intValue); /* 61 */ Index: skins/default/header.txt ================================================================== --- skins/default/header.txt +++ skins/default/header.txt @@ -7,12 +7,22 @@ html "Login\n" }