-C Always\suse\ssqlite3_malloc64()\sin\sextensions,\swhere\spossible.
-D 2026-04-01T16:56:48.155
+C Improvements\sto\sthe\ssyntax\shints\sin\sthe\scontinuation\sprompt\sof\sthe\sCLI
+D 2026-04-02T11:43:04.587
F .fossil-settings/binary-glob 61195414528fb3ea9693577e1980230d78a1f8b0a54c78cf1b9b24d0a409ed6a x
F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1
F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea
F src/resolve.c 928ff887f2a7c64275182060d94d06fdddbe32226c569781cf7e7edc6f58d7fd
F src/rowset.c 8432130e6c344b3401a8874c3cb49fefe6873fec593294de077afea2dce5ec97
F src/select.c ffe199f025a0dd74670d2a77232bdea364a4d7b36f32c64a6572d39ba6a11576
-F src/shell.c.in 91ee40ec3f75192362cbaa0ad85316140b8dde00a184113d73a837fb6173dbcc
+F src/shell.c.in fd7a7e7ddeaeec5ecda9ddcba5fa336bbc60f4024c54542dc1e85e00c1d67ef2
F src/sqlite.h.in 9cc1df08742989eb67ed2065f73a582195c48fee2eec5df9df122b33d4872885
F src/sqlite3.rc 015537e6ac1eec6c7050e17b616c2ffe6f70fca241835a84a4f0d5937383c479
F src/sqlite3ext.h 1b7a0ee438bb5c2896d0609c537e917d8057b3340f6ad004d2de44f03e3d3cca
F tool/warnings.sh a554d13f6e5cf3760f041b87939e3d616ec6961859c3245e8ef701d1eafc2ca2
F tool/win/sqlite.vsix deb315d026cc8400325c5863eef847784a219a2f
F tool/winmain.c 00c8fb88e365c9017db14c73d3c78af62194d9644feaf60e220ab0f411f3604c
-P 91ead3c62dd7b1db3fdfd318e3c35a42fb33e8fa2e347b682eecbff2f4e8677b
-R 6ba98470db6b05f2faea33c928a02358
+P 6194f3b5314ef98b5d73060450de8e3497272494b47e6f96992453418894ded1
+R ad9575498347584523c956e285476300
+T *branch * cli-prompt
+T *sym-cli-prompt *
+T -sym-trunk *
U drh
-Z 794fc55ed4b29b8614c8a579512409b7
+Z 39d54ce0e0b0fb1346202fa0ae4a8eab
# Remove this line to create a well-formed Fossil manifest.
return dest;
}
-/*
-** strcpy() workalike to squelch an unwarranted link-time warning
-** from OpenBSD.
-*/
-static void shell_strcpy(char *dest, const char *src){
- while( (*(dest++) = *(src++))!=0 ){}
-}
-
/*
** Optionally disable dynamic continuation prompt.
** Unless disabled, the continuation prompt shows open SQL lexemes if any,
/* Upon demand, derive the continuation prompt to display. */
static char *dynamicContinuePrompt(void){
- if( continuePrompt[0]==0
- || (dynPrompt.zScannerAwaits==0 && dynPrompt.inParenLevel == 0) ){
+ int k; /* Number of context hint characters */
+ int nSpace; /* Spaces at the start of continuePrompt */
+ int nDot; /* Dots following spaces */
+ int nOrig; /* Total size of continuePrompt in bytes */
+ int nCore; /* nOrig + 1 - nSpace */
+
+ nOrig = (int)strlen(continuePrompt);
+ if( nOrig<=1
+ || (dynPrompt.zScannerAwaits==0 && dynPrompt.inParenLevel == 0)
+ ){
return continuePrompt;
- }else{
- if( dynPrompt.zScannerAwaits ){
- size_t ncp = strlen(continuePrompt);
- size_t ndp = strlen(dynPrompt.zScannerAwaits);
- if( ndp > ncp-3 ) return continuePrompt;
- shell_strcpy(dynPrompt.dynamicPrompt, dynPrompt.zScannerAwaits);
- while( ndp<3 ) dynPrompt.dynamicPrompt[ndp++] = ' ';
- shell_strncpy(dynPrompt.dynamicPrompt+3, continuePrompt+3,
- PROMPT_LEN_MAX-4);
- }else{
- if( dynPrompt.inParenLevel>9 ){
- shell_strncpy(dynPrompt.dynamicPrompt, "(..", 4);
- }else if( dynPrompt.inParenLevel<0 ){
- shell_strncpy(dynPrompt.dynamicPrompt, ")x!", 4);
- }else{
- shell_strncpy(dynPrompt.dynamicPrompt, "(x.", 4);
- dynPrompt.dynamicPrompt[2] = (char)('0'+dynPrompt.inParenLevel);
- }
- shell_strncpy(dynPrompt.dynamicPrompt+3, continuePrompt+3,
- PROMPT_LEN_MAX-4);
+ }
+ for(nSpace=0; continuePrompt[nSpace]==' '; nSpace++){}
+ for(nDot=0; continuePrompt[nSpace+nDot]=='.'; nDot++){}
+ nCore = nOrig + 1 - nSpace;
+ for(k=0; k<dynPrompt.inParenLevel && k+nCore<PROMPT_LEN_MAX; k++){
+ dynPrompt.dynamicPrompt[k] = '(';
+ }
+ if( dynPrompt.zScannerAwaits ){
+ int i = 0;
+ const char *z = dynPrompt.zScannerAwaits;
+ while( z[i] && k+nCore<PROMPT_LEN_MAX ){
+ dynPrompt.dynamicPrompt[k++] = z[i++];
}
}
+ while( k<nSpace ){
+ dynPrompt.dynamicPrompt[k++] = ' ';
+ }
+ if( k>nSpace && nDot ){
+ nSpace++;
+ nDot--;
+ }
+ memcpy(&dynPrompt.dynamicPrompt[k],
+ &continuePrompt[nSpace],
+ nCore);
return dynPrompt.dynamicPrompt;
}
#endif /* !defined(SQLITE_OMIT_DYNAPROMPT) */
}
break;
case '[':
- cin = ']';
- deliberate_fall_through; /* FALLTHRU */
+ cWait = ']';
+ qss = QSS_HasDark | cWait;
+ CONTINUE_PROMPT_AWAITC(pst, cin);
+ goto TermScan;
case '`': case '\'': case '"':
cWait = cin;
qss = QSS_HasDark | cWait;