Many hyperlinks are disabled.
Use anonymous login
to enable hyperlinks.
Overview
| Comment: | Improvements to settings: (1) add the --changed option to the "fossil settings" command to cause display of only settings whose value differs from the default. (2) omit the idea of settings that are only shown if their value is not the default. (3) For settings with multiple lines of text, show them indented after the setting name on the "fossil settings" output. (4) The /setup_settings page only shows changed settings by default, with a submenu option to show all settings. |
|---|---|
| Timelines: | family | ancestors | descendants | both | trunk |
| Files: | files | file ages | folders |
| SHA3-256: |
74a5e10b9b281f1724f3b96572b32347 |
| User & Date: | drh 2025-03-20 17:20:23.903 |
Context
|
2025-03-20
| ||
| 17:34 | Change default values of various settings: admin-log=ON, access-log=ON, authsync=ON, timeline-plaintext=OFF. check-in: bdf12f44e6 user: drh tags: trunk | |
| 17:20 | Improvements to settings: (1) add the --changed option to the "fossil settings" command to cause display of only settings whose value differs from the default. (2) omit the idea of settings that are only shown if their value is not the default. (3) For settings with multiple lines of text, show them indented after the setting name on the "fossil... check-in: 74a5e10b9b user: drh tags: trunk | |
|
2025-03-19
| ||
| 18:03 | Correctly round up fully expanded date/times even if they have a "Z" zulu-time indicator at the end. Fix for the issue identified in [forum:/forumpost/47082fbda8|forum post 47082fbda8] check-in: e588ee26b1 user: drh tags: trunk | |
Changes
Changes to src/allrepo.c.
| ︙ | ︙ | |||
314 315 316 317 318 319 320 321 322 323 324 325 326 327 |
}
}else if( fossil_strcmp(zCmd, "repack")==0 ){
zCmd = "repack";
}else if( fossil_strcmp(zCmd, "set")==0
|| fossil_strcmp(zCmd, "setting")==0
|| fossil_strcmp(zCmd, "settings")==0 ){
zCmd = "settings -R";
collect_argv(&extra, 3);
}else if( fossil_strcmp(zCmd, "unset")==0 ){
zCmd = "unset -R";
collect_argv(&extra, 3);
}else if( fossil_strcmp(zCmd, "fts-config")==0 ){
zCmd = "fts-config -R";
collect_argv(&extra, 3);
| > | 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 |
}
}else if( fossil_strcmp(zCmd, "repack")==0 ){
zCmd = "repack";
}else if( fossil_strcmp(zCmd, "set")==0
|| fossil_strcmp(zCmd, "setting")==0
|| fossil_strcmp(zCmd, "settings")==0 ){
zCmd = "settings -R";
collect_argument(&extra, "changed", 0);
collect_argv(&extra, 3);
}else if( fossil_strcmp(zCmd, "unset")==0 ){
zCmd = "unset -R";
collect_argv(&extra, 3);
}else if( fossil_strcmp(zCmd, "fts-config")==0 ){
zCmd = "fts-config -R";
collect_argv(&extra, 3);
|
| ︙ | ︙ |
Changes to src/checkin.c.
| ︙ | ︙ | |||
2281 2282 2283 2284 2285 2286 2287 |
static int tagCmp(const void *a, const void *b){
char **pA = (char**)a;
char **pB = (char**)b;
return fossil_strcmp(pA[0], pB[0]);
}
/*
| | | 2281 2282 2283 2284 2285 2286 2287 2288 2289 2290 2291 2292 2293 2294 2295 |
static int tagCmp(const void *a, const void *b){
char **pA = (char**)a;
char **pB = (char**)b;
return fossil_strcmp(pA[0], pB[0]);
}
/*
** SETTING: verify-comments width=8 default=on
**
** This setting determines how much sanity checking, if any, the
** "fossil commit" and "fossil amend" commands do against check-in
** comments. Recognized values:
**
** on (Default) Check for bad syntax in check-in comments
** and offer the user a chance to continue editing for
|
| ︙ | ︙ |
Changes to src/db.c.
| ︙ | ︙ | |||
4437 4438 4439 4440 4441 4442 4443 4444 | g.argc = 2; info_cmd(); } /* ** Print the current value of a setting identified by the pSetting ** pointer. */ | > > > > > | < | | 4437 4438 4439 4440 4441 4442 4443 4444 4445 4446 4447 4448 4449 4450 4451 4452 4453 4454 4455 4456 4457 4458 4459 4460 4461 4462 4463 4464 4465 4466 4467 4468 4469 4470 4471 4472 4473 |
g.argc = 2;
info_cmd();
}
/*
** Print the current value of a setting identified by the pSetting
** pointer.
**
** Only show the value, not the setting name, if valueOnly is true.
**
** Show nothing if bIfChng is true and the setting is not currently set
** or is set to its default value.
*/
void print_setting(const Setting *pSetting, int valueOnly, int bIfChng){
Stmt q;
int versioned = 0;
if( pSetting->versionable && g.localOpen ){
/* Check to see if this is overridden by a versionable settings file */
Blob versionedPathname;
blob_zero(&versionedPathname);
blob_appendf(&versionedPathname, "%s.fossil-settings/%s",
g.zLocalRoot, pSetting->name);
if( file_size(blob_str(&versionedPathname), ExtFILE)>=0 ){
versioned = 1;
}
blob_reset(&versionedPathname);
}
if( valueOnly && versioned ){
const char *zVal = db_get_versioned(pSetting->name, NULL, NULL);
if( !bIfChng || (zVal!=0 && fossil_strcmp(zVal, pSetting->def)!=0) ){
fossil_print("%s\n", db_get_versioned(pSetting->name, NULL, NULL));
}else{
versioned = 0;
}
return;
}
if( g.repositoryOpen ){
|
| ︙ | ︙ | |||
4477 4478 4479 4480 4481 4482 4483 |
db_prepare(&q,
"SELECT '(global)', value FROM global_config WHERE name=%Q",
pSetting->name
);
}
if( db_step(&q)==SQLITE_ROW ){
const char *zVal = db_column_text(&q,1);
| > | | > > > > > > > > > > > > > | | > > > > > > > > > > > > > > > | > > > | > | | 4481 4482 4483 4484 4485 4486 4487 4488 4489 4490 4491 4492 4493 4494 4495 4496 4497 4498 4499 4500 4501 4502 4503 4504 4505 4506 4507 4508 4509 4510 4511 4512 4513 4514 4515 4516 4517 4518 4519 4520 4521 4522 4523 4524 4525 4526 4527 4528 4529 4530 4531 4532 4533 4534 4535 4536 4537 4538 4539 4540 4541 |
db_prepare(&q,
"SELECT '(global)', value FROM global_config WHERE name=%Q",
pSetting->name
);
}
if( db_step(&q)==SQLITE_ROW ){
const char *zVal = db_column_text(&q,1);
int noShow = 0;
if( bIfChng ){
/* Don't display the value is equal to the default */
if( zVal==0 ){
noShow = 1;
}else if( pSetting->def ){
if( pSetting->width==0 ){
if( is_false(zVal) && is_false(pSetting->def) ) noShow = 1;
}else{
if( fossil_strcmp(zVal, pSetting->def)==0 ) noShow = 1;
}
}
}
if( noShow ){
fossil_print("%-24s (versioned)\n", pSetting->name);
versioned = 0;
}else if( valueOnly ){
fossil_print("%s\n", db_column_text(&q, 1));
}else{
const char *zVal = (const char*)db_column_text(&q,1);
const char *zName = (const char*)db_column_text(&q,0);
if( zVal==0 ) zVal = "NULL";
if( strchr(zVal,'\n')==0 ){
fossil_print("%-24s %-11s %s\n", pSetting->name, zName, zVal);
}else{
fossil_print("%-24s %-11s\n", pSetting->name, zName);
while( zVal[0] ){
char *zNL = strchr(zVal, '\n');
if( zNL==0 ){
fossil_print(" %s\n", zVal);
break;
}else{
int n = (int)(zNL - zVal);
while( n>0 && fossil_isspace(zVal[n-1]) ){ n--; }
fossil_print(" %.*s\n", n, zVal);
zVal = zNL+1;
}
}
}
}
}else if( bIfChng ){
/* Display nothing */
versioned = 0;
}else if( valueOnly ){
fossil_print("\n");
}else{
fossil_print("%-24s\n", pSetting->name);
}
if( versioned ){
fossil_print(" (overridden by contents of file .fossil-settings/%s)\n",
pSetting->name);
}
db_finalize(&q);
}
|
| ︙ | ︙ | |||
4525 4526 4527 4528 4529 4530 4531 |
const char *var; /* Internal variable name used by db_set() */
int width; /* Width of display. 0 for boolean values and
** negative for values which should not appear
** on the /setup_settings page. */
char versionable; /* Is this setting versionable? */
char forceTextArea; /* Force using a text area for display? */
char sensitive; /* True if this a security-sensitive setting */
| < | 4562 4563 4564 4565 4566 4567 4568 4569 4570 4571 4572 4573 4574 4575 |
const char *var; /* Internal variable name used by db_set() */
int width; /* Width of display. 0 for boolean values and
** negative for values which should not appear
** on the /setup_settings page. */
char versionable; /* Is this setting versionable? */
char forceTextArea; /* Force using a text area for display? */
char sensitive; /* True if this a security-sensitive setting */
const char *def; /* Default value */
};
#endif /* INTERFACE */
/*
** SETTING: access-log boolean default=off
|
| ︙ | ︙ | |||
5236 5237 5238 5239 5240 5241 5242 5243 | ** that applies to all repositories. The local values are stored in the ** "config" table of the repository and the global values are stored in the ** configuration database. If both a local and a global value exists for a ** setting, the local value takes precedence. This command normally operates ** on the local settings. Use the --global option to change global settings. ** ** Options: ** --exact Only consider exact name matches | > < < > < | 5272 5273 5274 5275 5276 5277 5278 5279 5280 5281 5282 5283 5284 5285 5286 5287 5288 5289 5290 5291 5292 5293 5294 5295 5296 5297 5298 |
** that applies to all repositories. The local values are stored in the
** "config" table of the repository and the global values are stored in the
** configuration database. If both a local and a global value exists for a
** setting, the local value takes precedence. This command normally operates
** on the local settings. Use the --global option to change global settings.
**
** Options:
** --changed Only show settings if the value differs from the default
** --exact Only consider exact name matches
** --global Set or unset the given property globally instead of
** setting or unsetting it for the open repository only
** --value Only show the value of a given property (implies --exact)
**
** See also: [[configuration]]
*/
void setting_cmd(void){
int i;
int globalFlag = find_option("global","g",0)!=0;
int bIfChng = find_option("changed",0,0)!=0;
int exactFlag = find_option("exact",0,0)!=0;
int valueFlag = find_option("value",0,0)!=0;
/* Undocumented "--test-for-subsystem SUBSYS" option used to test
** the db_get_for_subsystem() interface: */
const char *zSubsys = find_option("test-for-subsystem",0,1);
int unsetFlag = g.argv[1][0]=='u';
int nSetting;
const Setting *aSetting = setting_info(&nSetting);
|
| ︙ | ︙ | |||
5273 5274 5275 5276 5277 5278 5279 |
if( unsetFlag && g.argc!=3 ){
usage("PROPERTY ?-global?");
}
if( valueFlag ){
if( g.argc!=3 ){
fossil_fatal("--value is only supported when qurying a given property");
}
| < | | 5308 5309 5310 5311 5312 5313 5314 5315 5316 5317 5318 5319 5320 5321 5322 5323 5324 5325 5326 |
if( unsetFlag && g.argc!=3 ){
usage("PROPERTY ?-global?");
}
if( valueFlag ){
if( g.argc!=3 ){
fossil_fatal("--value is only supported when qurying a given property");
}
}
if( g.argc==2 ){
for(i=0; i<nSetting; i++){
print_setting(&aSetting[i], 0, bIfChng);
}
}else if( g.argc==3 || g.argc==4 ){
const char *zName = g.argv[2];
int n = (int)strlen(zName);
const Setting *pSetting = db_find_setting(zName, !exactFlag);
if( pSetting==0 ){
fossil_fatal("no such setting: %s", zName);
|
| ︙ | ︙ | |||
5333 5334 5335 5336 5337 5338 5339 |
fossil_print("%s (subsystem %s) ->", pSetting->name, zSubsys);
if( zValue ){
fossil_print(" [%s]", zValue);
fossil_free(zValue);
}
fossil_print("\n");
}else{
| | | 5367 5368 5369 5370 5371 5372 5373 5374 5375 5376 5377 5378 5379 5380 5381 |
fossil_print("%s (subsystem %s) ->", pSetting->name, zSubsys);
if( zValue ){
fossil_print(" [%s]", zValue);
fossil_free(zValue);
}
fossil_print("\n");
}else{
print_setting(pSetting, valueFlag, bIfChng);
}
pSetting++;
}
}
}else{
usage("?PROPERTY? ?VALUE? ?-global?");
}
|
| ︙ | ︙ |
Changes to src/printf.c.
| ︙ | ︙ | |||
239 240 241 242 243 244 245 |
int n = 0;
while( (N-- != 0) && *(z++)!=0 ){ n++; }
return n;
}
#endif
/*
| | | | | 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 |
int n = 0;
while( (N-- != 0) && *(z++)!=0 ){ n++; }
return n;
}
#endif
/*
** SETTING: timeline-plaintext boolean default=off
**
** If enabled, no wiki-formatting is done for timeline comment messages.
** Hyperlinks are activated, but they show up on screen using the
** complete input text, not just the display text. No other formatting
** is done.
*/
/*
** SETTING: timeline-block-markup boolean default=off
**
** If enabled, block markup (paragraph brakes, tables, lists, headings, etc)
** is enabled while rendering check-in comment message on the timeline.
** This is disabled by default, because the timeline works best if the
** check-in comments are short and do not take up too much vertical space.
*/
/*
** SETTING: timeline-hard-newlines boolean default=off
**
** If enabled, the timeline honors newline characters in check-in comments.
** In other words, newlines are coverted into <br> for HTML display.
** The default behavior, when this setting is off, is that newlines are
** treated like any other whitespace character.
*/
|
| ︙ | ︙ |
Changes to src/setup.c.
| ︙ | ︙ | |||
1107 1108 1109 1110 1111 1112 1113 |
** Change or view miscellaneous settings. Part of the
** /setup pages requiring Setup privileges.
*/
void setup_settings(void){
int nSetting;
int i;
Setting const *pSet;
| | > > > > | < | > | | | 1107 1108 1109 1110 1111 1112 1113 1114 1115 1116 1117 1118 1119 1120 1121 1122 1123 1124 1125 1126 1127 1128 1129 1130 1131 1132 1133 1134 1135 1136 1137 1138 1139 1140 1141 1142 1143 1144 1145 1146 1147 1148 1149 1150 1151 1152 1153 1154 1155 1156 1157 1158 1159 1160 1161 |
** Change or view miscellaneous settings. Part of the
** /setup pages requiring Setup privileges.
*/
void setup_settings(void){
int nSetting;
int i;
Setting const *pSet;
int bIfChng = P("all")==0;
const Setting *aSetting = setting_info(&nSetting);
login_check_credentials();
if( !g.perm.Setup ){
login_needed(0);
return;
}
style_set_current_feature("setup");
style_header("Settings");
if(!g.repositoryOpen){
/* Provide read-only access to versioned settings,
but only if no repo file was explicitly provided. */
db_open_local(0);
}
db_begin_transaction();
if( bIfChng ){
@ <p>Only settings whose value is different from the default are shown.
@ Click the "All" button above to set all settings.
}
@ <p>Settings marked with (v) are "versionable" and will be overridden
@ by the contents of managed files named
@ "<tt>.fossil-settings/</tt><i>SETTING-NAME</i>".
@ If the file for a versionable setting exists, the value cannot be
@ changed on this screen.</p><hr><p>
@
@ <form action="%R/setup_settings" method="post"><div>
if( bIfChng ){
style_submenu_element("All", "%R/setup_settings?all");
}else{
@ <input type="hidden" name="all" value="1">
style_submenu_element("Changes-Only", "%R/setup_settings");
}
@ <table border="0"><tr><td valign="top">
login_insert_csrf_secret();
for(i=0, pSet=aSetting; i<nSetting; i++, pSet++){
if( pSet->width==0 ){
int hasVersionableValue = pSet->versionable &&
(db_get_versioned(pSet->name, NULL, NULL)!=0);
if( bIfChng ){
const char *zVal = db_get(pSet->name, 0);
if( zVal==0 || is_false(zVal)==is_false(pSet->def) ) continue;
}
onoff_attribute("", pSet->name,
pSet->var!=0 ? pSet->var : pSet->name /*works-like:"x"*/,
is_truth(pSet->def), hasVersionableValue);
@ <a href='%R/help?cmd=%s(pSet->name)'>%h(pSet->name)</a>
|
| ︙ | ︙ | |||
1165 1166 1167 1168 1169 1170 1171 |
@ <br><input type="submit" name="submit" value="Apply Changes">
@ </td><td style="width:50px;"></td><td valign="top">
@ <table>
for(i=0, pSet=aSetting; i<nSetting; i++, pSet++){
if( pSet->width>0 && !pSet->forceTextArea ){
int hasVersionableValue = pSet->versionable &&
(db_get_versioned(pSet->name, NULL, NULL)!=0);
| | | 1169 1170 1171 1172 1173 1174 1175 1176 1177 1178 1179 1180 1181 1182 1183 |
@ <br><input type="submit" name="submit" value="Apply Changes">
@ </td><td style="width:50px;"></td><td valign="top">
@ <table>
for(i=0, pSet=aSetting; i<nSetting; i++, pSet++){
if( pSet->width>0 && !pSet->forceTextArea ){
int hasVersionableValue = pSet->versionable &&
(db_get_versioned(pSet->name, NULL, NULL)!=0);
if( bIfChng ){
const char *zVal = db_get(pSet->name, 0);
if( zVal==0 || fossil_strcmp(zVal,pSet->def)==0 ) continue;
}
@ <tr><td>
@ <a href='%R/help?cmd=%s(pSet->name)'>%h(pSet->name)</a>
if( pSet->versionable ){
@ (v)
|
| ︙ | ︙ | |||
1188 1189 1190 1191 1192 1193 1194 |
}
}
@</table>
@ </td><td style="width:50px;"></td><td valign="top">
for(i=0, pSet=aSetting; i<nSetting; i++, pSet++){
if( pSet->width>0 && pSet->forceTextArea ){
int hasVersionableValue = db_get_versioned(pSet->name, NULL, NULL)!=0;
| | | 1192 1193 1194 1195 1196 1197 1198 1199 1200 1201 1202 1203 1204 1205 1206 |
}
}
@</table>
@ </td><td style="width:50px;"></td><td valign="top">
for(i=0, pSet=aSetting; i<nSetting; i++, pSet++){
if( pSet->width>0 && pSet->forceTextArea ){
int hasVersionableValue = db_get_versioned(pSet->name, NULL, NULL)!=0;
if( bIfChng ){
const char *zVal = db_get(pSet->name, 0);
if( zVal==0 || fossil_strcmp(zVal,pSet->def)==0 ) continue;
}
@ <a href='%R/help?cmd=%s(pSet->name)'>%s(pSet->name)</a>
if( pSet->versionable ){
@ (v)<br>
} else {
|
| ︙ | ︙ |
Changes to src/timeline.c.
| ︙ | ︙ | |||
220 221 222 223 224 225 226 |
if( cgi_is_loopback(g.zIpAddr) && db_open_local(0) ){
vid = db_lget_int("checkout", 0);
}
zPrevDate[0] = 0;
mxWikiLen = db_get_int("timeline-max-comment", 0);
dateFormat = db_get_int("timeline-date-format", 0);
/*
| | | | 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 |
if( cgi_is_loopback(g.zIpAddr) && db_open_local(0) ){
vid = db_lget_int("checkout", 0);
}
zPrevDate[0] = 0;
mxWikiLen = db_get_int("timeline-max-comment", 0);
dateFormat = db_get_int("timeline-date-format", 0);
/*
** SETTING: timeline-truncate-at-blank boolean default=off
**
** If enabled, check-in comments displayed on the timeline are truncated
** at the first blank line of the comment text. The comment text after
** the first blank line is only seen in the /info or similar pages that
** show details about the check-in.
*/
bCommentGitStyle = db_get_int("timeline-truncate-at-blank", 0);
/*
** SETTING: timeline-tslink-info boolean default=off
**
** The hyperlink on the timestamp associated with each timeline entry,
** on the far left-hand side of the screen, normally targets another
** /timeline page that shows the entry in context. However, if this
** option is turned on, that hyperlink targets the /info page showing
** the details of the entry.
*/
|
| ︙ | ︙ |
Changes to tools/mkindex.c.
| ︙ | ︙ | |||
99 100 101 102 103 104 105 | #define CMDFLAG_RAWCONTENT 0x00200 /* Do not interpret webpage content */ #define CMDFLAG_SENSITIVE 0x00400 /* Security-sensitive setting */ #define CMDFLAG_HIDDEN 0x00800 /* Elide from most listings */ #define CMDFLAG_LDAVG_EXEMPT 0x01000 /* Exempt from load_control() */ #define CMDFLAG_ALIAS 0x02000 /* Command aliases */ #define CMDFLAG_KEEPEMPTY 0x04000 /* Do not unset empty settings */ #define CMDFLAG_ABBREVSUBCMD 0x08000 /* Abbreviated subcmd in help text */ | < | 99 100 101 102 103 104 105 106 107 108 109 110 111 112 |
#define CMDFLAG_RAWCONTENT 0x00200 /* Do not interpret webpage content */
#define CMDFLAG_SENSITIVE 0x00400 /* Security-sensitive setting */
#define CMDFLAG_HIDDEN 0x00800 /* Elide from most listings */
#define CMDFLAG_LDAVG_EXEMPT 0x01000 /* Exempt from load_control() */
#define CMDFLAG_ALIAS 0x02000 /* Command aliases */
#define CMDFLAG_KEEPEMPTY 0x04000 /* Do not unset empty settings */
#define CMDFLAG_ABBREVSUBCMD 0x08000 /* Abbreviated subcmd in help text */
/**************************************************************************/
/*
** Each entry looks like this:
*/
typedef struct Entry {
int eType; /* CMDFLAG_* values */
|
| ︙ | ︙ | |||
283 284 285 286 287 288 289 |
}else if( j==6 && strncmp(&zLine[i], "hidden", 6)==0 ){
aEntry[nUsed].eType |= CMDFLAG_HIDDEN;
}else if( j==14 && strncmp(&zLine[i], "loadavg-exempt", 14)==0 ){
aEntry[nUsed].eType |= CMDFLAG_LDAVG_EXEMPT;
}else if( (j==23 && strncmp(&zLine[i], "abbreviated-subcommands", 23)==0)
|| (j==12 && strncmp(&zLine[i], "abbrv-subcom", 12)==0) ){
aEntry[nUsed].eType |= CMDFLAG_ABBREVSUBCMD;
| < < < | 282 283 284 285 286 287 288 289 290 291 292 293 294 295 |
}else if( j==6 && strncmp(&zLine[i], "hidden", 6)==0 ){
aEntry[nUsed].eType |= CMDFLAG_HIDDEN;
}else if( j==14 && strncmp(&zLine[i], "loadavg-exempt", 14)==0 ){
aEntry[nUsed].eType |= CMDFLAG_LDAVG_EXEMPT;
}else if( (j==23 && strncmp(&zLine[i], "abbreviated-subcommands", 23)==0)
|| (j==12 && strncmp(&zLine[i], "abbrv-subcom", 12)==0) ){
aEntry[nUsed].eType |= CMDFLAG_ABBREVSUBCMD;
}else{
fprintf(stderr, "%s:%d: unknown option: '%.*s'\n",
zFile, nLine, j, &zLine[i]);
nErr++;
}
}
|
| ︙ | ︙ | |||
518 519 520 521 522 523 524 |
}
printf(" { \"%s\",%*s", z, (int)(20-strlen(z)), "");
if( zVar ){
printf(" \"%s\",%*s", zVar, (int)(15-strlen(zVar)), "");
}else{
printf(" 0,%*s", 16, "");
}
| | < | | 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 |
}
printf(" { \"%s\",%*s", z, (int)(20-strlen(z)), "");
if( zVar ){
printf(" \"%s\",%*s", zVar, (int)(15-strlen(zVar)), "");
}else{
printf(" 0,%*s", 16, "");
}
printf(" %3d, %d, %d, %d, \"%s\"%*s },\n",
aEntry[i].iWidth,
(aEntry[i].eType & CMDFLAG_VERSIONABLE)!=0,
(aEntry[i].eType & CMDFLAG_BLOCKTEXT)!=0,
(aEntry[i].eType & CMDFLAG_SENSITIVE)!=0,
zDef, (int)(10-strlen(zDef)), ""
);
if( aEntry[i].zIf ){
printf("#endif\n");
}
}
printf("{0,0,0,0,0,0,0}};\n");
}
/*
** Process a single file of input
*/
void process_file(void){
|
| ︙ | ︙ |