0000: 2f 2a 0a 2a 2a 20 43 6f 70 79 72 69 67 68 74 20 /*.** Copyright
0010: 28 63 29 20 32 30 30 32 20 44 2e 20 52 69 63 68 (c) 2002 D. Rich
0020: 61 72 64 20 48 69 70 70 0a 2a 2a 0a 2a 2a 20 54 ard Hipp.**.** T
0030: 68 69 73 20 70 72 6f 67 72 61 6d 20 69 73 20 66 his program is f
0040: 72 65 65 20 73 6f 66 74 77 61 72 65 3b 20 79 6f ree software; yo
0050: 75 20 63 61 6e 20 72 65 64 69 73 74 72 69 62 75 u can redistribu
0060: 74 65 20 69 74 20 61 6e 64 2f 6f 72 0a 2a 2a 20 te it and/or.**
0070: 6d 6f 64 69 66 79 20 69 74 20 75 6e 64 65 72 20 modify it under
0080: 74 68 65 20 74 65 72 6d 73 20 6f 66 20 74 68 65 the terms of the
0090: 20 53 69 6d 70 6c 69 66 69 65 64 20 42 53 44 20 Simplified BSD
00a0: 4c 69 63 65 6e 73 65 20 28 61 6c 73 6f 0a 2a 2a License (also.**
00b0: 20 6b 6e 6f 77 6e 20 61 73 20 74 68 65 20 22 32 known as the "2
00c0: 2d 43 6c 61 75 73 65 20 4c 69 63 65 6e 73 65 22 -Clause License"
00d0: 20 6f 72 20 22 46 72 65 65 42 53 44 20 4c 69 63 or "FreeBSD Lic
00e0: 65 6e 73 65 22 2e 29 0a 2a 2a 0a 2a 2a 20 54 68 ense".).**.** Th
00f0: 69 73 20 70 72 6f 67 72 61 6d 20 69 73 20 64 69 is program is di
0100: 73 74 72 69 62 75 74 65 64 20 69 6e 20 74 68 65 stributed in the
0110: 20 68 6f 70 65 20 74 68 61 74 20 69 74 20 77 69 hope that it wi
0120: 6c 6c 20 62 65 20 75 73 65 66 75 6c 2c 0a 2a 2a ll be useful,.**
0130: 20 62 75 74 20 77 69 74 68 6f 75 74 20 61 6e 79 but without any
0140: 20 77 61 72 72 61 6e 74 79 3b 20 77 69 74 68 6f warranty; witho
0150: 75 74 20 65 76 65 6e 20 74 68 65 20 69 6d 70 6c ut even the impl
0160: 69 65 64 20 77 61 72 72 61 6e 74 79 20 6f 66 0a ied warranty of.
0170: 2a 2a 20 6d 65 72 63 68 61 6e 74 61 62 69 6c 69 ** merchantabili
0180: 74 79 20 6f 72 20 66 69 74 6e 65 73 73 20 66 6f ty or fitness fo
0190: 72 20 61 20 70 61 72 74 69 63 75 6c 61 72 20 70 r a particular p
01a0: 75 72 70 6f 73 65 2e 0a 2a 2a 0a 2a 2a 20 41 75 urpose..**.** Au
01b0: 74 68 6f 72 20 63 6f 6e 74 61 63 74 20 69 6e 66 thor contact inf
01c0: 6f 72 6d 61 74 69 6f 6e 3a 0a 2a 2a 20 20 20 64 ormation:.** d
01d0: 72 68 40 68 77 61 63 69 2e 63 6f 6d 0a 2a 2a 20 rh@hwaci.com.**
01e0: 20 20 68 74 74 70 3a 2f 2f 77 77 77 2e 68 77 61 http://www.hwa
01f0: 63 69 2e 63 6f 6d 2f 64 72 68 2f 0a 2a 2a 0a 2a ci.com/drh/.**.*
0200: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a ****************
0210: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a ****************
0220: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a ****************
0230: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a ****************
0240: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 0a 2a **************.*
0250: 2a 0a 2a 2a 20 54 68 69 73 20 75 74 69 6c 69 74 *.** This utilit
0260: 79 20 70 72 6f 67 72 61 6d 20 73 63 61 6e 73 20 y program scans
0270: 46 6f 73 73 69 6c 20 73 6f 75 72 63 65 20 74 65 Fossil source te
0280: 78 74 20 6c 6f 6f 6b 69 6e 67 20 66 6f 72 20 73 xt looking for s
0290: 70 65 63 69 61 6c 6c 79 0a 2a 2a 20 66 6f 72 6d pecially.** form
02a0: 61 74 74 65 64 20 63 6f 6d 6d 65 6e 74 73 20 61 atted comments a
02b0: 6e 64 20 67 65 6e 65 72 61 74 65 73 20 43 20 73 nd generates C s
02c0: 6f 75 72 63 65 20 63 6f 64 65 20 66 6f 72 20 63 ource code for c
02d0: 6f 6e 73 74 61 6e 74 20 74 61 62 6c 65 73 0a 2a onstant tables.*
02e0: 2a 20 74 68 61 74 20 64 65 66 69 6e 65 20 74 68 * that define th
02f0: 65 20 62 65 68 61 76 69 6f 72 20 6f 66 20 63 6f e behavior of co
0300: 6d 6d 61 6e 64 73 2c 20 77 65 62 70 61 67 65 73 mmands, webpages
0310: 2c 20 61 6e 64 20 73 65 74 74 69 6e 67 73 2e 0a , and settings..
0320: 2a 2a 0a 2a 2a 20 54 68 65 20 73 6f 75 72 63 65 **.** The source
0330: 20 63 6f 64 65 20 69 73 20 73 63 61 6e 6e 65 64 code is scanned
0340: 20 66 6f 72 20 63 6f 6d 6d 65 6e 74 20 6c 69 6e for comment lin
0350: 65 73 20 6f 66 20 74 68 65 20 66 6f 72 6d 3a 0a es of the form:.
0360: 2a 2a 0a 2a 2a 20 20 20 20 20 20 20 57 45 42 50 **.** WEBP
0370: 41 47 45 3a 20 20 2f 61 62 63 2f 78 79 7a 0a 2a AGE: /abc/xyz.*
0380: 2a 20 20 20 20 20 20 20 43 4f 4d 4d 41 4e 44 3a * COMMAND:
0390: 20 20 63 6d 64 6e 61 6d 65 0a 2a 2a 20 20 20 20 cmdname.**
03a0: 20 20 20 53 45 54 54 49 4e 47 3a 20 20 61 63 63 SETTING: acc
03b0: 65 73 73 2d 6c 6f 67 0a 2a 2a 0a 2a 2a 20 54 68 ess-log.**.** Th
03c0: 65 20 57 45 42 50 41 47 45 20 61 6e 64 20 43 4f e WEBPAGE and CO
03d0: 4d 4d 41 4e 44 20 63 6f 6d 6d 65 6e 74 73 20 73 MMAND comments s
03e0: 68 6f 75 6c 64 20 62 65 20 66 6f 6c 6c 6f 77 65 hould be followe
03f0: 64 20 62 79 20 61 20 66 75 6e 63 74 69 6f 6e 20 d by a function
0400: 74 68 61 74 0a 2a 2a 20 69 6d 70 6c 65 6d 65 6e that.** implemen
0410: 74 73 20 74 68 65 20 77 65 62 70 61 67 65 20 6f ts the webpage o
0420: 72 20 63 6f 6d 6d 61 6e 64 2e 20 20 54 68 65 20 r command. The
0430: 66 6f 72 6d 20 6f 66 20 74 68 69 73 20 66 75 6e form of this fun
0440: 63 74 69 6f 6e 20 69 73 3a 0a 2a 2a 0a 2a 2a 20 ction is:.**.**
0450: 20 20 20 20 20 20 76 6f 69 64 20 66 75 6e 63 74 void funct
0460: 69 6f 6e 5f 6e 61 6d 65 28 76 6f 69 64 29 7b 0a ion_name(void){.
0470: 2a 2a 0a 2a 2a 20 43 6f 6d 6d 61 6e 64 20 6e 61 **.** Command na
0480: 6d 65 73 20 63 61 6e 20 64 69 76 69 64 65 64 20 mes can divided
0490: 69 6e 74 6f 20 74 68 72 65 65 20 63 6c 61 73 73 into three class
04a0: 65 73 3a 20 20 31 73 74 2d 74 69 65 72 2c 20 32 es: 1st-tier, 2
04b0: 6e 64 2d 74 69 65 72 2c 0a 2a 2a 20 61 6e 64 20 nd-tier,.** and
04c0: 74 65 73 74 2e 20 20 31 73 74 2d 74 69 65 72 20 test. 1st-tier
04d0: 63 6f 6d 6d 61 6e 64 73 20 61 72 65 20 74 68 65 commands are the
04e0: 20 6d 6f 73 74 20 66 72 65 71 75 65 6e 74 6c 79 most frequently
04f0: 20 75 73 65 64 20 61 6e 64 20 74 68 65 0a 2a 2a used and the.**
0500: 20 6f 6e 65 73 20 74 68 61 74 20 73 68 6f 77 20 ones that show
0510: 75 70 20 77 69 74 68 20 22 66 6f 73 73 69 6c 20 up with "fossil
0520: 68 65 6c 70 22 2e 20 20 32 6e 64 2d 74 69 65 72 help". 2nd-tier
0530: 20 61 72 65 20 73 65 6c 64 6f 6d 2d 75 73 65 64 are seldom-used
0540: 20 61 6e 64 2f 6f 72 0a 2a 2a 20 6c 65 67 61 63 and/or.** legac
0550: 79 20 63 6f 6d 6d 61 6e 64 73 2e 20 20 54 65 73 y commands. Tes
0560: 74 20 63 6f 6d 6d 61 6e 64 73 20 61 72 65 20 75 t commands are u
0570: 6e 73 75 70 70 6f 72 74 65 64 20 63 6f 6d 6d 61 nsupported comma
0580: 6e 64 73 20 75 73 65 64 20 66 6f 72 20 74 65 73 nds used for tes
0590: 74 69 6e 67 0a 2a 2a 20 61 6e 64 20 61 6e 61 6c ting.** and anal
05a0: 79 73 69 73 20 6f 6e 6c 79 2e 0a 2a 2a 0a 2a 2a ysis only..**.**
05b0: 20 43 6f 6d 6d 61 6e 64 73 20 61 72 65 20 31 73 Commands are 1s
05c0: 74 2d 74 69 65 72 20 62 79 20 64 65 66 61 75 6c t-tier by defaul
05d0: 74 2e 20 20 49 66 20 74 68 65 20 63 6f 6d 6d 61 t. If the comma
05e0: 6e 64 20 6e 61 6d 65 20 62 65 67 69 6e 73 20 77 nd name begins w
05f0: 69 74 68 0a 2a 2a 20 22 74 65 73 74 2d 22 20 6f ith.** "test-" o
0600: 72 20 69 66 20 74 68 65 20 63 6f 6d 6d 61 6e 64 r if the command
0610: 20 6e 61 6d 65 20 68 61 73 20 61 20 22 74 65 73 name has a "tes
0620: 74 22 20 61 72 67 75 6d 65 6e 74 2c 20 74 68 65 t" argument, the
0630: 6e 20 69 74 20 62 65 63 6f 6d 65 73 0a 2a 2a 20 n it becomes.**
0640: 61 20 74 65 73 74 20 63 6f 6d 6d 61 6e 64 2e 20 a test command.
0650: 20 49 66 20 74 68 65 20 63 6f 6d 6d 61 6e 64 20 If the command
0660: 6e 61 6d 65 20 68 61 73 20 61 20 22 32 6e 64 2d name has a "2nd-
0670: 74 69 65 72 22 20 61 72 67 75 6d 65 6e 74 20 6f tier" argument o
0680: 72 20 65 6e 64 73 0a 2a 2a 20 77 69 74 68 20 61 r ends.** with a
0690: 20 22 2a 22 20 63 68 61 72 61 63 74 65 72 2c 20 "*" character,
06a0: 69 74 20 69 73 20 73 65 63 6f 6e 64 20 74 69 65 it is second tie
06b0: 72 2e 20 20 45 78 61 6d 70 6c 65 73 3a 0a 2a 2a r. Examples:.**
06c0: 0a 2a 2a 20 20 20 20 20 20 20 20 43 4f 4d 4d 41 .** COMMA
06d0: 4e 44 3a 20 20 61 62 63 64 65 2a 0a 2a 2a 20 20 ND: abcde*.**
06e0: 20 20 20 20 20 20 43 4f 4d 4d 41 4e 44 3a 20 20 COMMAND:
06f0: 66 67 68 69 6a 20 20 20 20 20 20 20 20 32 6e 64 fghij 2nd
0700: 2d 74 69 65 72 0a 2a 2a 20 20 20 20 20 20 20 20 -tier.**
0710: 43 4f 4d 4d 41 4e 44 3a 20 20 74 65 73 74 2d 78 COMMAND: test-x
0720: 79 7a 7a 79 0a 2a 2a 20 20 20 20 20 20 20 20 43 yzzy.** C
0730: 4f 4d 4d 41 4e 44 3a 20 20 78 79 7a 7a 79 20 20 OMMAND: xyzzy
0740: 20 20 20 20 20 20 74 65 73 74 0a 2a 2a 0a 2a 2a test.**.**
0750: 20 41 20 53 45 54 54 49 4e 47 3a 20 6d 61 79 20 A SETTING: may
0760: 62 65 20 66 6f 6c 6c 6f 77 65 64 20 62 79 20 61 be followed by a
0770: 72 67 75 6d 65 6e 74 73 20 74 68 61 74 20 67 69 rguments that gi
0780: 76 65 20 61 64 64 69 74 69 6f 6e 61 6c 20 61 74 ve additional at
0790: 74 72 69 62 75 74 65 73 0a 2a 2a 20 74 6f 20 74 tributes.** to t
07a0: 68 61 74 20 73 65 74 74 69 6e 67 3a 0a 2a 2a 0a hat setting:.**.
07b0: 2a 2a 20 20 20 20 20 20 20 20 53 45 54 54 49 4e ** SETTIN
07c0: 47 3a 20 20 63 6c 65 61 6e 2d 62 6c 6f 62 20 20 G: clean-blob
07d0: 20 76 65 72 73 69 6f 6e 61 62 6c 65 20 77 69 64 versionable wid
07e0: 74 68 3d 34 30 20 62 6c 6f 63 6b 2d 74 65 78 74 th=40 block-text
07f0: 0a 2a 2a 20 20 20 20 20 20 20 20 53 45 54 54 49 .** SETTI
0800: 4e 47 3a 20 20 61 75 74 6f 2d 73 68 75 6e 20 20 NG: auto-shun
0810: 20 20 62 6f 6f 6c 65 61 6e 20 64 65 66 61 75 6c boolean defaul
0820: 74 3d 6f 6e 0a 2a 2a 0a 2a 2a 20 4e 65 77 20 61 t=on.**.** New a
0830: 72 67 75 6d 65 6e 74 73 20 6d 61 79 20 62 65 20 rguments may be
0840: 61 64 64 65 64 20 69 6e 20 66 75 74 75 72 65 20 added in future
0850: 72 65 6c 65 61 73 65 73 20 74 68 61 74 20 73 65 releases that se
0860: 74 20 61 64 64 69 74 69 6f 6e 61 6c 0a 2a 2a 20 t additional.**
0870: 62 69 74 73 20 69 6e 20 74 68 65 20 65 43 6d 64 bits in the eCmd
0880: 46 6c 61 67 73 20 66 69 65 6c 64 2e 0a 2a 2a 0a Flags field..**.
0890: 2a 2a 20 41 64 64 69 74 69 6f 6e 61 6c 20 6c 69 ** Additional li
08a0: 6e 65 73 20 6f 66 20 63 6f 6d 6d 65 6e 74 20 61 nes of comment a
08b0: 66 74 65 72 20 74 68 65 20 43 4f 4d 4d 41 4e 44 fter the COMMAND
08c0: 3a 20 6f 72 20 57 45 42 50 41 47 45 3a 20 6f 72 : or WEBPAGE: or
08d0: 20 53 45 54 54 49 4e 47 3a 0a 2a 2a 20 62 65 63 SETTING:.** bec
08e0: 6f 6d 65 20 74 68 65 20 62 75 69 6c 74 2d 69 6e ome the built-in
08f0: 20 68 65 6c 70 20 74 65 78 74 20 66 6f 72 20 74 help text for t
0900: 68 61 74 20 63 6f 6d 6d 61 6e 64 20 6f 72 20 77 hat command or w
0910: 65 62 70 61 67 65 20 6f 72 20 73 65 74 74 69 6e ebpage or settin
0920: 67 2e 0a 2a 2a 0a 2a 2a 20 4d 75 6c 74 69 70 6c g..**.** Multipl
0930: 65 20 43 4f 4d 4d 41 4e 44 3a 20 65 6e 74 72 69 e COMMAND: entri
0940: 65 73 20 63 61 6e 20 62 65 20 61 74 74 61 63 68 es can be attach
0950: 65 64 20 74 6f 20 74 68 65 20 73 61 6d 65 20 63 ed to the same c
0960: 6f 6d 6d 61 6e 64 2c 20 74 68 75 73 0a 2a 2a 20 ommand, thus.**
0970: 63 72 65 61 74 69 6e 67 20 6d 75 6c 74 69 70 6c creating multipl
0980: 65 20 61 6c 69 61 73 65 73 20 66 6f 72 20 74 68 e aliases for th
0990: 61 74 20 63 6f 6d 6d 61 6e 64 2e 20 20 53 69 6d at command. Sim
09a0: 69 6c 61 72 6c 79 2c 20 6d 75 6c 74 69 70 6c 65 ilarly, multiple
09b0: 0a 2a 2a 20 57 45 42 50 41 47 45 3a 20 65 6e 74 .** WEBPAGE: ent
09c0: 72 69 65 73 20 63 61 6e 20 62 65 20 61 74 74 61 ries can be atta
09d0: 63 68 65 64 20 74 6f 20 74 68 65 20 73 61 6d 65 ched to the same
09e0: 20 77 65 62 70 61 67 65 20 66 75 6e 63 74 69 6f webpage functio
09f0: 6e 2c 20 74 6f 20 67 69 76 65 0a 2a 2a 20 74 68 n, to give.** th
0a00: 61 74 20 70 61 67 65 20 61 6c 69 61 73 65 73 2e at page aliases.
0a10: 0a 2a 2a 0a 2a 2a 20 46 6f 72 20 53 45 54 54 49 .**.** For SETTI
0a20: 4e 47 3a 20 65 6e 74 72 69 65 73 2c 20 74 68 65 NG: entries, the
0a30: 20 64 65 66 61 75 6c 74 20 76 61 6c 75 65 20 66 default value f
0a40: 6f 72 20 74 68 65 20 73 65 74 74 69 6e 67 20 63 or the setting c
0a50: 61 6e 20 62 65 20 73 70 65 63 69 66 69 65 64 0a an be specified.
0a60: 2a 2a 20 75 73 69 6e 67 20 61 20 64 65 66 61 75 ** using a defau
0a70: 6c 74 3d 56 41 4c 55 45 20 61 72 67 75 6d 65 6e lt=VALUE argumen
0a80: 74 20 69 66 20 74 68 65 20 64 65 66 61 75 6c 74 t if the default
0a90: 20 63 6f 6e 74 61 69 6e 73 20 6e 6f 20 73 70 61 contains no spa
0aa0: 63 65 73 2e 20 20 49 66 20 74 68 65 0a 2a 2a 20 ces. If the.**
0ab0: 64 65 66 61 75 6c 74 20 76 61 6c 75 65 20 64 6f default value do
0ac0: 65 73 20 63 6f 6e 74 61 69 6e 20 73 70 61 63 65 es contain space
0ad0: 73 2c 20 75 73 65 20 61 20 73 65 70 61 72 61 74 s, use a separat
0ae0: 65 20 6c 69 6e 65 20 6c 69 6b 65 20 74 68 69 73 e line like this
0af0: 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 20 20 20 20 53 :.**.** S
0b00: 45 54 54 49 4e 47 3a 20 70 67 70 2d 63 6f 6d 6d ETTING: pgp-comm
0b10: 61 6e 64 0a 2a 2a 20 20 20 20 20 20 20 20 44 45 and.** DE
0b20: 46 41 55 4c 54 3a 20 67 70 67 20 2d 2d 63 6c 65 FAULT: gpg --cle
0b30: 61 72 73 69 67 6e 20 2d 6f 0a 2a 2a 0a 2a 2a 20 arsign -o.**.**
0b40: 49 66 20 6e 6f 20 64 65 66 61 75 6c 74 20 69 73 If no default is
0b50: 20 73 75 70 70 6c 69 65 64 2c 20 74 68 65 20 64 supplied, the d
0b60: 65 66 61 75 6c 74 20 69 73 20 61 73 73 75 6d 65 efault is assume
0b70: 64 20 74 6f 20 62 65 20 61 6e 20 65 6d 70 74 79 d to be an empty
0b80: 20 73 74 72 69 6e 67 0a 2a 2a 20 6f 72 20 22 6f string.** or "o
0b90: 66 66 22 20 69 6e 20 74 68 65 20 63 61 73 65 20 ff" in the case
0ba0: 6f 66 20 61 20 62 6f 6f 6c 65 61 6e 2e 0a 2a 2f of a boolean..*/
0bb0: 0a 23 69 6e 63 6c 75 64 65 20 3c 73 74 64 69 6f .#include <stdio
0bc0: 2e 68 3e 0a 23 69 6e 63 6c 75 64 65 20 3c 73 74 .h>.#include <st
0bd0: 64 6c 69 62 2e 68 3e 0a 23 69 6e 63 6c 75 64 65 dlib.h>.#include
0be0: 20 3c 61 73 73 65 72 74 2e 68 3e 0a 23 69 6e 63 <assert.h>.#inc
0bf0: 6c 75 64 65 20 3c 73 74 72 69 6e 67 2e 68 3e 0a lude <string.h>.
0c00: 0a 2f 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a ./**************
0c10: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a ****************
0c20: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a ****************
0c30: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a ****************
0c40: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 0a 2a 2a *************.**
0c50: 20 54 68 65 73 65 20 6d 61 63 72 6f 73 20 6d 75 These macros mu
0c60: 73 74 20 6d 61 74 63 68 20 73 69 6d 69 6c 61 72 st match similar
0c70: 20 6d 61 63 72 6f 73 20 69 6e 20 64 69 73 70 61 macros in dispa
0c80: 74 63 68 2e 63 2e 0a 2a 2a 0a 2a 2a 20 41 6c 6c tch.c..**.** All
0c90: 6f 77 65 64 20 76 61 6c 75 65 73 20 66 6f 72 20 owed values for
0ca0: 43 6d 64 4f 72 50 61 67 65 2e 65 43 6d 64 46 6c CmdOrPage.eCmdFl
0cb0: 61 67 73 2e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 ags. */.#define
0cc0: 43 4d 44 46 4c 41 47 5f 31 53 54 5f 54 49 45 52 CMDFLAG_1ST_TIER
0cd0: 20 20 20 20 30 78 30 30 30 31 20 20 20 20 20 20 0x0001
0ce0: 2f 2a 20 4d 6f 73 74 20 69 6d 70 6f 72 74 61 6e /* Most importan
0cf0: 74 20 63 6f 6d 6d 61 6e 64 73 20 2a 2f 0a 23 64 t commands */.#d
0d00: 65 66 69 6e 65 20 43 4d 44 46 4c 41 47 5f 32 4e efine CMDFLAG_2N
0d10: 44 5f 54 49 45 52 20 20 20 20 30 78 30 30 30 32 D_TIER 0x0002
0d20: 20 20 20 20 20 20 2f 2a 20 4f 62 73 63 75 72 65 /* Obscure
0d30: 20 61 6e 64 20 73 65 6c 64 6f 6d 20 75 73 65 64 and seldom used
0d40: 20 63 6f 6d 6d 61 6e 64 73 20 2a 2f 0a 23 64 65 commands */.#de
0d50: 66 69 6e 65 20 43 4d 44 46 4c 41 47 5f 54 45 53 fine CMDFLAG_TES
0d60: 54 20 20 20 20 20 20 20 20 30 78 30 30 30 34 20 T 0x0004
0d70: 20 20 20 20 20 2f 2a 20 43 6f 6d 6d 61 6e 64 73 /* Commands
0d80: 20 66 6f 72 20 74 65 73 74 69 6e 67 20 6f 6e 6c for testing onl
0d90: 79 20 2a 2f 0a 23 64 65 66 69 6e 65 20 43 4d 44 y */.#define CMD
0da0: 46 4c 41 47 5f 57 45 42 50 41 47 45 20 20 20 20 FLAG_WEBPAGE
0db0: 20 30 78 30 30 30 38 20 20 20 20 20 20 2f 2a 20 0x0008 /*
0dc0: 57 65 62 20 70 61 67 65 73 20 2a 2f 0a 23 64 65 Web pages */.#de
0dd0: 66 69 6e 65 20 43 4d 44 46 4c 41 47 5f 43 4f 4d fine CMDFLAG_COM
0de0: 4d 41 4e 44 20 20 20 20 20 30 78 30 30 31 30 20 MAND 0x0010
0df0: 20 20 20 20 20 2f 2a 20 41 20 63 6f 6d 6d 61 6e /* A comman
0e00: 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20 43 4d 44 d */.#define CMD
0e10: 46 4c 41 47 5f 53 45 54 54 49 4e 47 20 20 20 20 FLAG_SETTING
0e20: 20 30 78 30 30 32 30 20 20 20 20 20 20 2f 2a 20 0x0020 /*
0e30: 41 20 73 65 74 74 69 6e 67 20 2a 2f 0a 23 64 65 A setting */.#de
0e40: 66 69 6e 65 20 43 4d 44 46 4c 41 47 5f 56 45 52 fine CMDFLAG_VER
0e50: 53 49 4f 4e 41 42 4c 45 20 30 78 30 30 34 30 20 SIONABLE 0x0040
0e60: 20 20 20 20 20 2f 2a 20 41 20 76 65 72 73 69 6f /* A versio
0e70: 6e 61 62 6c 65 20 73 65 74 74 69 6e 67 20 2a 2f nable setting */
0e80: 0a 23 64 65 66 69 6e 65 20 43 4d 44 46 4c 41 47 .#define CMDFLAG
0e90: 5f 42 4c 4f 43 4b 54 45 58 54 20 20 20 30 78 30 _BLOCKTEXT 0x0
0ea0: 30 38 30 20 20 20 20 20 20 2f 2a 20 4d 75 6c 74 080 /* Mult
0eb0: 69 2d 6c 69 6e 65 20 74 65 78 74 20 73 65 74 74 i-line text sett
0ec0: 69 6e 67 20 2a 2f 0a 23 64 65 66 69 6e 65 20 43 ing */.#define C
0ed0: 4d 44 46 4c 41 47 5f 42 4f 4f 4c 45 41 4e 20 20 MDFLAG_BOOLEAN
0ee0: 20 20 20 30 78 30 31 30 30 20 20 20 20 20 20 2f 0x0100 /
0ef0: 2a 20 41 20 62 6f 6f 6c 65 61 6e 20 73 65 74 74 * A boolean sett
0f00: 69 6e 67 20 2a 2f 0a 23 64 65 66 69 6e 65 20 43 ing */.#define C
0f10: 4d 44 46 4c 41 47 5f 52 41 57 43 4f 4e 54 45 4e MDFLAG_RAWCONTEN
0f20: 54 20 20 30 78 30 32 30 30 20 20 20 20 20 20 2f T 0x0200 /
0f30: 2a 20 44 6f 20 6e 6f 74 20 69 6e 74 65 72 70 72 * Do not interpr
0f40: 65 74 20 77 65 62 70 61 67 65 20 63 6f 6e 74 65 et webpage conte
0f50: 6e 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20 43 4d nt */.#define CM
0f60: 44 46 4c 41 47 5f 53 45 4e 53 49 54 49 56 45 20 DFLAG_SENSITIVE
0f70: 20 20 30 78 30 34 30 30 20 20 20 20 20 20 2f 2a 0x0400 /*
0f80: 20 53 65 63 75 72 69 74 79 2d 73 65 6e 73 69 74 Security-sensit
0f90: 69 76 65 20 73 65 74 74 69 6e 67 20 2a 2f 0a 23 ive setting */.#
0fa0: 64 65 66 69 6e 65 20 43 4d 44 46 4c 41 47 5f 48 define CMDFLAG_H
0fb0: 49 44 44 45 4e 20 20 20 20 20 20 30 78 30 38 30 IDDEN 0x080
0fc0: 30 20 20 20 20 20 20 2f 2a 20 45 6c 69 64 65 20 0 /* Elide
0fd0: 66 72 6f 6d 20 6d 6f 73 74 20 6c 69 73 74 69 6e from most listin
0fe0: 67 73 20 2a 2f 0a 2f 2a 2a 2a 2a 2a 2a 2a 2a 2a gs */./*********
0ff0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a ****************
1000: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a ****************
1010: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a ****************
1020: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a ****************
1030: 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 45 61 63 68 20 65 */../*.** Each e
1040: 6e 74 72 79 20 6c 6f 6f 6b 73 20 6c 69 6b 65 20 ntry looks like
1050: 74 68 69 73 3a 0a 2a 2f 0a 74 79 70 65 64 65 66 this:.*/.typedef
1060: 20 73 74 72 75 63 74 20 45 6e 74 72 79 20 7b 0a struct Entry {.
1070: 20 20 69 6e 74 20 65 54 79 70 65 3b 20 20 20 20 int eType;
1080: 20 20 20 20 2f 2a 20 43 4d 44 46 4c 41 47 5f 2a /* CMDFLAG_*
1090: 20 76 61 6c 75 65 73 20 2a 2f 0a 20 20 63 68 61 values */. cha
10a0: 72 20 2a 7a 49 66 3b 20 20 20 20 20 20 20 20 2f r *zIf; /
10b0: 2a 20 45 6e 63 6c 6f 73 65 20 69 6e 20 23 69 66 * Enclose in #if
10c0: 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 46 75 6e */. char *zFun
10d0: 63 3b 20 20 20 20 20 20 2f 2a 20 4e 61 6d 65 20 c; /* Name
10e0: 6f 66 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f of implementatio
10f0: 6e 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 50 61 n */. char *zPa
1100: 74 68 3b 20 20 20 20 20 20 2f 2a 20 57 65 62 70 th; /* Webp
1110: 61 67 65 20 6f 72 20 63 6f 6d 6d 61 6e 64 20 6e age or command n
1120: 61 6d 65 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a ame */. char *z
1130: 48 65 6c 70 3b 20 20 20 20 20 20 2f 2a 20 48 65 Help; /* He
1140: 6c 70 20 74 65 78 74 20 2a 2f 0a 20 20 63 68 61 lp text */. cha
1150: 72 20 2a 7a 44 66 6c 74 3b 20 20 20 20 20 20 2f r *zDflt; /
1160: 2a 20 44 65 66 61 75 6c 74 20 76 61 6c 75 65 20 * Default value
1170: 66 6f 72 20 73 65 74 74 69 6e 67 73 20 2a 2f 0a for settings */.
1180: 20 20 63 68 61 72 20 2a 7a 56 61 72 3b 20 20 20 char *zVar;
1190: 20 20 20 20 2f 2a 20 63 6f 6e 66 69 67 2e 6e 61 /* config.na
11a0: 6d 65 20 66 6f 72 20 73 65 74 74 69 6e 67 73 2c me for settings,
11b0: 20 69 66 20 64 69 66 66 65 72 65 6e 74 20 66 72 if different fr
11c0: 6f 6d 20 7a 50 61 74 68 20 2a 2f 0a 20 20 69 6e om zPath */. in
11d0: 74 20 69 48 65 6c 70 3b 20 20 20 20 20 20 20 20 t iHelp;
11e0: 2f 2a 20 49 6e 64 65 78 20 6f 66 20 48 65 6c 70 /* Index of Help
11f0: 20 74 65 78 74 20 2a 2f 0a 20 20 69 6e 74 20 69 text */. int i
1200: 57 69 64 74 68 3b 20 20 20 20 20 20 20 2f 2a 20 Width; /*
1210: 44 69 73 70 6c 61 79 20 77 69 64 74 68 20 66 6f Display width fo
1220: 72 20 53 45 54 54 49 4e 47 3a 20 76 61 6c 75 65 r SETTING: value
1230: 73 20 2a 2f 0a 7d 20 45 6e 74 72 79 3b 0a 0a 2f s */.} Entry;../
1240: 2a 0a 2a 2a 20 4d 61 78 69 6d 75 6d 20 6e 75 6d *.** Maximum num
1250: 62 65 72 20 6f 66 20 65 6e 74 72 69 65 73 0a 2a ber of entries.*
1260: 2f 0a 23 64 65 66 69 6e 65 20 4e 5f 45 4e 54 52 /.#define N_ENTR
1270: 59 20 35 30 30 30 0a 0a 2f 2a 0a 2a 2a 20 4d 61 Y 5000../*.** Ma
1280: 78 69 6d 75 6d 20 73 69 7a 65 20 6f 66 20 61 20 ximum size of a
1290: 68 65 6c 70 20 6d 65 73 73 61 67 65 0a 2a 2f 0a help message.*/.
12a0: 23 64 65 66 69 6e 65 20 4d 58 5f 48 45 4c 50 20 #define MX_HELP
12b0: 32 35 30 30 30 30 0a 0a 2f 2a 0a 2a 2a 20 54 61 250000../*.** Ta
12c0: 62 6c 65 20 6f 66 20 65 6e 74 72 69 65 73 0a 2a ble of entries.*
12d0: 2f 0a 45 6e 74 72 79 20 61 45 6e 74 72 79 5b 4e /.Entry aEntry[N
12e0: 5f 45 4e 54 52 59 5d 3b 0a 0a 2f 2a 0a 2a 2a 20 _ENTRY];../*.**
12f0: 43 75 72 72 65 6e 74 20 68 65 6c 70 20 6d 65 73 Current help mes
1300: 73 61 67 65 20 61 63 63 75 6d 75 6c 61 74 6f 72 sage accumulator
1310: 0a 2a 2f 0a 63 68 61 72 20 7a 48 65 6c 70 5b 4d .*/.char zHelp[M
1320: 58 5f 48 45 4c 50 5d 3b 0a 69 6e 74 20 6e 48 65 X_HELP];.int nHe
1330: 6c 70 3b 0a 0a 2f 2a 0a 2a 2a 20 4d 6f 73 74 20 lp;../*.** Most
1340: 72 65 63 65 6e 74 6c 79 20 65 6e 63 6f 75 6e 74 recently encount
1350: 65 72 65 64 20 23 69 66 0a 2a 2f 0a 63 68 61 72 ered #if.*/.char
1360: 20 7a 49 66 5b 32 30 30 30 5d 3b 0a 0a 2f 2a 0a zIf[2000];../*.
1370: 2a 2a 20 48 6f 77 20 6d 61 6e 79 20 65 6e 74 72 ** How many entr
1380: 69 65 73 20 61 72 65 20 75 73 65 64 0a 2a 2f 0a ies are used.*/.
1390: 69 6e 74 20 6e 55 73 65 64 3b 0a 69 6e 74 20 6e int nUsed;.int n
13a0: 46 69 78 65 64 3b 0a 0a 2f 2a 0a 2a 2a 20 43 75 Fixed;../*.** Cu
13b0: 72 72 65 6e 74 20 66 69 6c 65 6e 61 6d 65 20 61 rrent filename a
13c0: 6e 64 20 6c 69 6e 65 20 6e 75 6d 62 65 72 0a 2a nd line number.*
13d0: 2f 0a 63 68 61 72 20 2a 7a 46 69 6c 65 3b 0a 69 /.char *zFile;.i
13e0: 6e 74 20 6e 4c 69 6e 65 3b 0a 0a 2f 2a 0a 2a 2a nt nLine;../*.**
13f0: 20 4e 75 6d 62 65 72 20 6f 66 20 65 72 72 6f 72 Number of error
1400: 73 0a 2a 2f 0a 69 6e 74 20 6e 45 72 72 20 3d 20 s.*/.int nErr =
1410: 30 3b 0a 0a 2f 2a 0a 2a 2a 20 44 75 70 6c 69 63 0;../*.** Duplic
1420: 61 74 65 20 4e 20 63 68 61 72 61 63 74 65 72 73 ate N characters
1430: 20 6f 66 20 61 20 73 74 72 69 6e 67 2e 0a 2a 2f of a string..*/
1440: 0a 63 68 61 72 20 2a 73 74 72 69 6e 67 5f 64 75 .char *string_du
1450: 70 28 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 53 p(const char *zS
1460: 72 63 2c 20 69 6e 74 20 6e 29 7b 0a 20 20 63 68 rc, int n){. ch
1470: 61 72 20 2a 7a 3b 0a 20 20 69 66 28 20 6e 3c 30 ar *z;. if( n<0
1480: 20 29 20 6e 20 3d 20 73 74 72 6c 65 6e 28 7a 53 ) n = strlen(zS
1490: 72 63 29 3b 0a 20 20 7a 20 3d 20 6d 61 6c 6c 6f rc);. z = mallo
14a0: 63 28 20 6e 2b 31 20 29 3b 0a 20 20 69 66 28 20 c( n+1 );. if(
14b0: 7a 3d 3d 30 20 29 7b 20 66 70 72 69 6e 74 66 28 z==0 ){ fprintf(
14c0: 73 74 64 65 72 72 2c 22 4f 75 74 20 6f 66 20 6d stderr,"Out of m
14d0: 65 6d 6f 72 79 21 5c 6e 22 29 3b 20 65 78 69 74 emory!\n"); exit
14e0: 28 31 29 3b 20 7d 0a 20 20 73 74 72 6e 63 70 79 (1); }. strncpy
14f0: 28 7a 2c 20 7a 53 72 63 2c 20 6e 29 3b 0a 20 20 (z, zSrc, n);.
1500: 7a 5b 6e 5d 20 3d 20 30 3b 0a 20 20 72 65 74 75 z[n] = 0;. retu
1510: 72 6e 20 7a 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 53 rn z;.}../*.** S
1520: 61 66 65 20 69 73 73 70 61 63 65 20 6d 61 63 72 afe isspace macr
1530: 6f 2e 20 20 57 6f 72 6b 73 20 77 69 74 68 20 73 o. Works with s
1540: 69 67 6e 65 64 20 63 68 61 72 61 63 74 65 72 73 igned characters
1550: 2e 0a 2a 2f 0a 69 6e 74 20 66 6f 73 73 69 6c 5f ..*/.int fossil_
1560: 69 73 73 70 61 63 65 28 63 68 61 72 20 63 29 7b isspace(char c){
1570: 0a 20 20 72 65 74 75 72 6e 20 63 3d 3d 27 20 27 . return c==' '
1580: 20 7c 7c 20 28 63 3c 3d 27 5c 72 27 20 26 26 20 || (c<='\r' &&
1590: 63 3e 3d 27 5c 74 27 29 3b 0a 7d 0a 0a 2f 2a 0a c>='\t');.}../*.
15a0: 2a 2a 20 53 61 66 65 20 69 73 69 64 65 6e 74 20 ** Safe isident
15b0: 6d 61 63 72 6f 2e 20 20 57 6f 72 6b 73 20 77 69 macro. Works wi
15c0: 74 68 20 73 69 67 6e 65 64 20 63 68 61 72 61 63 th signed charac
15d0: 74 65 72 73 2e 0a 2a 2f 0a 69 6e 74 20 66 6f 73 ters..*/.int fos
15e0: 73 69 6c 5f 69 73 69 64 65 6e 74 28 63 68 61 72 sil_isident(char
15f0: 20 63 29 7b 0a 20 20 69 66 28 20 63 3e 3d 27 61 c){. if( c>='a
1600: 27 20 26 26 20 63 3c 3d 27 7a 27 20 29 20 72 65 ' && c<='z' ) re
1610: 74 75 72 6e 20 31 3b 0a 20 20 69 66 28 20 63 3e turn 1;. if( c>
1620: 3d 27 41 27 20 26 26 20 63 3c 3d 27 5a 27 20 29 ='A' && c<='Z' )
1630: 20 72 65 74 75 72 6e 20 31 3b 0a 20 20 69 66 28 return 1;. if(
1640: 20 63 3e 3d 27 30 27 20 26 26 20 63 3c 3d 27 39 c>='0' && c<='9
1650: 27 20 29 20 72 65 74 75 72 6e 20 31 3b 0a 20 20 ' ) return 1;.
1660: 69 66 28 20 63 3d 3d 27 5f 27 20 29 20 72 65 74 if( c=='_' ) ret
1670: 75 72 6e 20 31 3b 0a 20 20 72 65 74 75 72 6e 20 urn 1;. return
1680: 30 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 53 63 61 6e 0;.}../*.** Scan
1690: 20 61 20 6c 69 6e 65 20 6c 6f 6f 6b 69 6e 67 20 a line looking
16a0: 66 6f 72 20 63 6f 6d 6d 65 6e 74 73 20 63 6f 6e for comments con
16b0: 74 61 69 6e 69 6e 67 20 7a 4c 61 62 65 6c 2e 20 taining zLabel.
16c0: 20 4d 61 6b 65 0a 2a 2a 20 6e 65 77 20 65 6e 74 Make.** new ent
16d0: 72 69 65 73 20 69 66 20 66 6f 75 6e 64 2e 0a 2a ries if found..*
16e0: 2f 0a 76 6f 69 64 20 73 63 61 6e 5f 66 6f 72 5f /.void scan_for_
16f0: 6c 61 62 65 6c 28 63 6f 6e 73 74 20 63 68 61 72 label(const char
1700: 20 2a 7a 4c 61 62 65 6c 2c 20 63 68 61 72 20 2a *zLabel, char *
1710: 7a 4c 69 6e 65 2c 20 69 6e 74 20 65 54 79 70 65 zLine, int eType
1720: 29 7b 0a 20 20 69 6e 74 20 69 2c 20 6a 3b 0a 20 ){. int i, j;.
1730: 20 69 6e 74 20 6c 65 6e 20 3d 20 73 74 72 6c 65 int len = strle
1740: 6e 28 7a 4c 61 62 65 6c 29 3b 0a 20 20 69 66 28 n(zLabel);. if(
1750: 20 6e 55 73 65 64 3e 3d 4e 5f 45 4e 54 52 59 20 nUsed>=N_ENTRY
1760: 29 20 72 65 74 75 72 6e 3b 0a 20 20 66 6f 72 28 ) return;. for(
1770: 69 3d 30 3b 20 66 6f 73 73 69 6c 5f 69 73 73 70 i=0; fossil_issp
1780: 61 63 65 28 7a 4c 69 6e 65 5b 69 5d 29 20 7c 7c ace(zLine[i]) ||
1790: 20 7a 4c 69 6e 65 5b 69 5d 3d 3d 27 2a 27 3b 20 zLine[i]=='*';
17a0: 69 2b 2b 29 7b 7d 0a 20 20 69 66 28 20 7a 4c 69 i++){}. if( zLi
17b0: 6e 65 5b 69 5d 21 3d 7a 4c 61 62 65 6c 5b 30 5d ne[i]!=zLabel[0]
17c0: 20 29 20 72 65 74 75 72 6e 3b 0a 20 20 69 66 28 ) return;. if(
17d0: 20 73 74 72 6e 63 6d 70 28 26 7a 4c 69 6e 65 5b strncmp(&zLine[
17e0: 69 5d 2c 7a 4c 61 62 65 6c 2c 20 6c 65 6e 29 3d i],zLabel, len)=
17f0: 3d 30 20 29 7b 0a 20 20 20 20 69 20 2b 3d 20 6c =0 ){. i += l
1800: 65 6e 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 en;. }else{.
1810: 20 72 65 74 75 72 6e 3b 0a 20 20 7d 0a 20 20 77 return;. }. w
1820: 68 69 6c 65 28 20 66 6f 73 73 69 6c 5f 69 73 73 hile( fossil_iss
1830: 70 61 63 65 28 7a 4c 69 6e 65 5b 69 5d 29 20 29 pace(zLine[i]) )
1840: 7b 20 69 2b 2b 3b 20 7d 0a 20 20 69 66 28 20 7a { i++; }. if( z
1850: 4c 69 6e 65 5b 69 5d 3d 3d 27 2f 27 20 29 20 69 Line[i]=='/' ) i
1860: 2b 2b 3b 0a 20 20 66 6f 72 28 6a 3d 30 3b 20 7a ++;. for(j=0; z
1870: 4c 69 6e 65 5b 69 2b 6a 5d 20 26 26 20 21 66 6f Line[i+j] && !fo
1880: 73 73 69 6c 5f 69 73 73 70 61 63 65 28 7a 4c 69 ssil_isspace(zLi
1890: 6e 65 5b 69 2b 6a 5d 29 3b 20 6a 2b 2b 29 7b 7d ne[i+j]); j++){}
18a0: 0a 20 20 61 45 6e 74 72 79 5b 6e 55 73 65 64 5d . aEntry[nUsed]
18b0: 2e 65 54 79 70 65 20 3d 20 65 54 79 70 65 3b 0a .eType = eType;.
18c0: 20 20 69 66 28 20 65 54 79 70 65 20 26 20 43 4d if( eType & CM
18d0: 44 46 4c 41 47 5f 57 45 42 50 41 47 45 20 29 7b DFLAG_WEBPAGE ){
18e0: 0a 20 20 20 20 61 45 6e 74 72 79 5b 6e 55 73 65 . aEntry[nUse
18f0: 64 5d 2e 7a 50 61 74 68 20 3d 20 73 74 72 69 6e d].zPath = strin
1900: 67 5f 64 75 70 28 26 7a 4c 69 6e 65 5b 69 2d 31 g_dup(&zLine[i-1
1910: 5d 2c 20 6a 2b 31 29 3b 0a 20 20 20 20 61 45 6e ], j+1);. aEn
1920: 74 72 79 5b 6e 55 73 65 64 5d 2e 7a 50 61 74 68 try[nUsed].zPath
1930: 5b 30 5d 20 3d 20 27 2f 27 3b 0a 20 20 7d 65 6c [0] = '/';. }el
1940: 73 65 7b 0a 20 20 20 20 61 45 6e 74 72 79 5b 6e se{. aEntry[n
1950: 55 73 65 64 5d 2e 7a 50 61 74 68 20 3d 20 73 74 Used].zPath = st
1960: 72 69 6e 67 5f 64 75 70 28 26 7a 4c 69 6e 65 5b ring_dup(&zLine[
1970: 69 5d 2c 20 6a 29 3b 0a 20 20 7d 0a 20 20 61 45 i], j);. }. aE
1980: 6e 74 72 79 5b 6e 55 73 65 64 5d 2e 7a 46 75 6e ntry[nUsed].zFun
1990: 63 20 3d 20 30 3b 0a 20 20 69 66 28 20 28 65 54 c = 0;. if( (eT
19a0: 79 70 65 20 26 20 43 4d 44 46 4c 41 47 5f 43 4f ype & CMDFLAG_CO
19b0: 4d 4d 41 4e 44 29 21 3d 30 20 29 7b 0a 20 20 20 MMAND)!=0 ){.
19c0: 20 69 66 28 20 73 74 72 6e 63 6d 70 28 26 7a 4c if( strncmp(&zL
19d0: 69 6e 65 5b 69 5d 2c 20 22 74 65 73 74 2d 22 2c ine[i], "test-",
19e0: 20 35 29 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 5)==0 ){.
19f0: 2f 2a 20 43 6f 6d 6d 61 6e 64 73 20 74 68 61 74 /* Commands that
1a00: 20 73 74 61 72 74 20 77 69 74 68 20 22 74 65 73 start with "tes
1a10: 74 2d 22 20 61 72 65 20 74 65 73 74 2d 63 6f 6d t-" are test-com
1a20: 6d 61 6e 64 73 20 2a 2f 0a 20 20 20 20 20 20 61 mands */. a
1a30: 45 6e 74 72 79 5b 6e 55 73 65 64 5d 2e 65 54 79 Entry[nUsed].eTy
1a40: 70 65 20 7c 3d 20 43 4d 44 46 4c 41 47 5f 54 45 pe |= CMDFLAG_TE
1a50: 53 54 3b 0a 20 20 20 20 7d 65 6c 73 65 20 69 66 ST;. }else if
1a60: 28 20 7a 4c 69 6e 65 5b 69 2b 6a 2d 31 5d 3d 3d ( zLine[i+j-1]==
1a70: 27 2a 27 20 29 7b 0a 20 20 20 20 20 20 2f 2a 20 '*' ){. /*
1a80: 49 66 20 74 68 65 20 63 6f 6d 6d 61 6e 64 20 6e If the command n
1a90: 61 6d 65 20 65 6e 64 73 20 69 6e 20 27 2a 27 2c ame ends in '*',
1aa0: 20 72 65 6d 6f 76 65 20 74 68 65 20 27 2a 27 20 remove the '*'
1ab0: 66 72 6f 6d 20 74 68 65 20 6e 61 6d 65 0a 20 20 from the name.
1ac0: 20 20 20 20 2a 2a 20 62 75 74 20 6d 6f 76 65 20 ** but move
1ad0: 74 68 65 20 63 6f 6d 6d 61 6e 64 20 69 6e 74 6f the command into
1ae0: 20 74 68 65 20 73 65 63 6f 6e 64 20 74 69 65 72 the second tier
1af0: 20 2a 2f 0a 20 20 20 20 20 20 61 45 6e 74 72 79 */. aEntry
1b00: 5b 6e 55 73 65 64 5d 2e 7a 50 61 74 68 5b 6a 2d [nUsed].zPath[j-
1b10: 31 5d 20 3d 20 30 3b 0a 20 20 20 20 20 20 61 45 1] = 0;. aE
1b20: 6e 74 72 79 5b 6e 55 73 65 64 5d 2e 65 54 79 70 ntry[nUsed].eTyp
1b30: 65 20 7c 3d 20 43 4d 44 46 4c 41 47 5f 32 4e 44 e |= CMDFLAG_2ND
1b40: 5f 54 49 45 52 3b 0a 20 20 20 20 7d 65 6c 73 65 _TIER;. }else
1b50: 7b 0a 20 20 20 20 20 20 2f 2a 20 4f 74 68 65 72 {. /* Other
1b60: 77 69 73 65 2c 20 74 68 69 73 20 69 73 20 61 20 wise, this is a
1b70: 66 69 72 73 74 2d 74 69 65 72 20 63 6f 6d 6d 61 first-tier comma
1b80: 6e 64 20 2a 2f 0a 20 20 20 20 20 20 61 45 6e 74 nd */. aEnt
1b90: 72 79 5b 6e 55 73 65 64 5d 2e 65 54 79 70 65 20 ry[nUsed].eType
1ba0: 7c 3d 20 43 4d 44 46 4c 41 47 5f 31 53 54 5f 54 |= CMDFLAG_1ST_T
1bb0: 49 45 52 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 0a IER;. }. }..
1bc0: 20 20 2f 2a 20 50 72 6f 63 65 73 73 20 61 64 64 /* Process add
1bd0: 69 74 69 6f 6e 61 6c 20 66 6c 61 67 73 20 74 68 itional flags th
1be0: 61 74 20 6d 69 67 68 74 20 66 6f 6c 6c 6f 77 20 at might follow
1bf0: 74 68 65 20 63 6f 6d 6d 61 6e 64 20 6e 61 6d 65 the command name
1c00: 20 2a 2f 0a 20 20 77 68 69 6c 65 28 20 7a 4c 69 */. while( zLi
1c10: 6e 65 5b 69 2b 6a 5d 21 3d 30 20 29 7b 0a 20 20 ne[i+j]!=0 ){.
1c20: 20 20 69 20 2b 3d 20 6a 3b 0a 20 20 20 20 77 68 i += j;. wh
1c30: 69 6c 65 28 20 66 6f 73 73 69 6c 5f 69 73 73 70 ile( fossil_issp
1c40: 61 63 65 28 7a 4c 69 6e 65 5b 69 5d 29 20 29 7b ace(zLine[i]) ){
1c50: 20 69 2b 2b 3b 20 7d 0a 20 20 20 20 69 66 28 20 i++; }. if(
1c60: 7a 4c 69 6e 65 5b 69 5d 3d 3d 30 20 29 20 62 72 zLine[i]==0 ) br
1c70: 65 61 6b 3b 0a 20 20 20 20 66 6f 72 28 6a 3d 30 eak;. for(j=0
1c80: 3b 20 7a 4c 69 6e 65 5b 69 2b 6a 5d 20 26 26 20 ; zLine[i+j] &&
1c90: 21 66 6f 73 73 69 6c 5f 69 73 73 70 61 63 65 28 !fossil_isspace(
1ca0: 7a 4c 69 6e 65 5b 69 2b 6a 5d 29 3b 20 6a 2b 2b zLine[i+j]); j++
1cb0: 29 7b 7d 0a 20 20 20 20 69 66 28 20 6a 3d 3d 38 ){}. if( j==8
1cc0: 20 26 26 20 73 74 72 6e 63 6d 70 28 26 7a 4c 69 && strncmp(&zLi
1cd0: 6e 65 5b 69 5d 2c 20 22 31 73 74 2d 74 69 65 72 ne[i], "1st-tier
1ce0: 22 2c 20 6a 29 3d 3d 30 20 29 7b 0a 20 20 20 20 ", j)==0 ){.
1cf0: 20 20 61 45 6e 74 72 79 5b 6e 55 73 65 64 5d 2e aEntry[nUsed].
1d00: 65 54 79 70 65 20 26 3d 20 7e 28 43 4d 44 46 4c eType &= ~(CMDFL
1d10: 41 47 5f 32 4e 44 5f 54 49 45 52 7c 43 4d 44 46 AG_2ND_TIER|CMDF
1d20: 4c 41 47 5f 54 45 53 54 29 3b 0a 20 20 20 20 20 LAG_TEST);.
1d30: 20 61 45 6e 74 72 79 5b 6e 55 73 65 64 5d 2e 65 aEntry[nUsed].e
1d40: 54 79 70 65 20 7c 3d 20 43 4d 44 46 4c 41 47 5f Type |= CMDFLAG_
1d50: 31 53 54 5f 54 49 45 52 3b 0a 20 20 20 20 7d 65 1ST_TIER;. }e
1d60: 6c 73 65 20 69 66 28 20 6a 3d 3d 38 20 26 26 20 lse if( j==8 &&
1d70: 73 74 72 6e 63 6d 70 28 26 7a 4c 69 6e 65 5b 69 strncmp(&zLine[i
1d80: 5d 2c 20 22 32 6e 64 2d 74 69 65 72 22 2c 20 6a ], "2nd-tier", j
1d90: 29 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 61 45 )==0 ){. aE
1da0: 6e 74 72 79 5b 6e 55 73 65 64 5d 2e 65 54 79 70 ntry[nUsed].eTyp
1db0: 65 20 26 3d 20 7e 28 43 4d 44 46 4c 41 47 5f 31 e &= ~(CMDFLAG_1
1dc0: 53 54 5f 54 49 45 52 7c 43 4d 44 46 4c 41 47 5f ST_TIER|CMDFLAG_
1dd0: 54 45 53 54 29 3b 0a 20 20 20 20 20 20 61 45 6e TEST);. aEn
1de0: 74 72 79 5b 6e 55 73 65 64 5d 2e 65 54 79 70 65 try[nUsed].eType
1df0: 20 7c 3d 20 43 4d 44 46 4c 41 47 5f 32 4e 44 5f |= CMDFLAG_2ND_
1e00: 54 49 45 52 3b 0a 20 20 20 20 7d 65 6c 73 65 20 TIER;. }else
1e10: 69 66 28 20 6a 3d 3d 34 20 26 26 20 73 74 72 6e if( j==4 && strn
1e20: 63 6d 70 28 26 7a 4c 69 6e 65 5b 69 5d 2c 20 22 cmp(&zLine[i], "
1e30: 74 65 73 74 22 2c 20 6a 29 3d 3d 30 20 29 7b 0a test", j)==0 ){.
1e40: 20 20 20 20 20 20 61 45 6e 74 72 79 5b 6e 55 73 aEntry[nUs
1e50: 65 64 5d 2e 65 54 79 70 65 20 26 3d 20 7e 28 43 ed].eType &= ~(C
1e60: 4d 44 46 4c 41 47 5f 31 53 54 5f 54 49 45 52 7c MDFLAG_1ST_TIER|
1e70: 43 4d 44 46 4c 41 47 5f 32 4e 44 5f 54 49 45 52 CMDFLAG_2ND_TIER
1e80: 29 3b 0a 20 20 20 20 20 20 61 45 6e 74 72 79 5b );. aEntry[
1e90: 6e 55 73 65 64 5d 2e 65 54 79 70 65 20 7c 3d 20 nUsed].eType |=
1ea0: 43 4d 44 46 4c 41 47 5f 54 45 53 54 3b 0a 20 20 CMDFLAG_TEST;.
1eb0: 20 20 7d 65 6c 73 65 20 69 66 28 20 6a 3d 3d 31 }else if( j==1
1ec0: 31 20 26 26 20 73 74 72 6e 63 6d 70 28 26 7a 4c 1 && strncmp(&zL
1ed0: 69 6e 65 5b 69 5d 2c 20 22 72 61 77 2d 63 6f 6e ine[i], "raw-con
1ee0: 74 65 6e 74 22 2c 20 6a 29 3d 3d 30 20 29 7b 0a tent", j)==0 ){.
1ef0: 20 20 20 20 20 20 61 45 6e 74 72 79 5b 6e 55 73 aEntry[nUs
1f00: 65 64 5d 2e 65 54 79 70 65 20 7c 3d 20 43 4d 44 ed].eType |= CMD
1f10: 46 4c 41 47 5f 52 41 57 43 4f 4e 54 45 4e 54 3b FLAG_RAWCONTENT;
1f20: 0a 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20 6a . }else if( j
1f30: 3d 3d 37 20 26 26 20 73 74 72 6e 63 6d 70 28 26 ==7 && strncmp(&
1f40: 7a 4c 69 6e 65 5b 69 5d 2c 20 22 62 6f 6f 6c 65 zLine[i], "boole
1f50: 61 6e 22 2c 20 6a 29 3d 3d 30 20 29 7b 0a 20 20 an", j)==0 ){.
1f60: 20 20 20 20 61 45 6e 74 72 79 5b 6e 55 73 65 64 aEntry[nUsed
1f70: 5d 2e 65 54 79 70 65 20 26 3d 20 7e 28 43 4d 44 ].eType &= ~(CMD
1f80: 46 4c 41 47 5f 42 4c 4f 43 4b 54 45 58 54 29 3b FLAG_BLOCKTEXT);
1f90: 0a 20 20 20 20 20 20 61 45 6e 74 72 79 5b 6e 55 . aEntry[nU
1fa0: 73 65 64 5d 2e 69 57 69 64 74 68 20 3d 20 30 3b sed].iWidth = 0;
1fb0: 0a 20 20 20 20 20 20 61 45 6e 74 72 79 5b 6e 55 . aEntry[nU
1fc0: 73 65 64 5d 2e 65 54 79 70 65 20 7c 3d 20 43 4d sed].eType |= CM
1fd0: 44 46 4c 41 47 5f 42 4f 4f 4c 45 41 4e 3b 0a 20 DFLAG_BOOLEAN;.
1fe0: 20 20 20 7d 65 6c 73 65 20 69 66 28 20 6a 3d 3d }else if( j==
1ff0: 31 30 20 26 26 20 73 74 72 6e 63 6d 70 28 26 7a 10 && strncmp(&z
2000: 4c 69 6e 65 5b 69 5d 2c 20 22 62 6c 6f 63 6b 2d Line[i], "block-
2010: 74 65 78 74 22 2c 20 6a 29 3d 3d 30 20 29 7b 0a text", j)==0 ){.
2020: 20 20 20 20 20 20 61 45 6e 74 72 79 5b 6e 55 73 aEntry[nUs
2030: 65 64 5d 2e 65 54 79 70 65 20 26 3d 20 7e 28 43 ed].eType &= ~(C
2040: 4d 44 46 4c 41 47 5f 42 4f 4f 4c 45 41 4e 29 3b MDFLAG_BOOLEAN);
2050: 0a 20 20 20 20 20 20 61 45 6e 74 72 79 5b 6e 55 . aEntry[nU
2060: 73 65 64 5d 2e 65 54 79 70 65 20 7c 3d 20 43 4d sed].eType |= CM
2070: 44 46 4c 41 47 5f 42 4c 4f 43 4b 54 45 58 54 3b DFLAG_BLOCKTEXT;
2080: 0a 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20 6a . }else if( j
2090: 3d 3d 31 31 20 26 26 20 73 74 72 6e 63 6d 70 28 ==11 && strncmp(
20a0: 26 7a 4c 69 6e 65 5b 69 5d 2c 20 22 76 65 72 73 &zLine[i], "vers
20b0: 69 6f 6e 61 62 6c 65 22 2c 20 6a 29 3d 3d 30 20 ionable", j)==0
20c0: 29 7b 0a 20 20 20 20 20 20 61 45 6e 74 72 79 5b ){. aEntry[
20d0: 6e 55 73 65 64 5d 2e 65 54 79 70 65 20 7c 3d 20 nUsed].eType |=
20e0: 43 4d 44 46 4c 41 47 5f 56 45 52 53 49 4f 4e 41 CMDFLAG_VERSIONA
20f0: 42 4c 45 3b 0a 20 20 20 20 7d 65 6c 73 65 20 69 BLE;. }else i
2100: 66 28 20 6a 3d 3d 39 20 26 26 20 73 74 72 6e 63 f( j==9 && strnc
2110: 6d 70 28 26 7a 4c 69 6e 65 5b 69 5d 2c 20 22 73 mp(&zLine[i], "s
2120: 65 6e 73 69 74 69 76 65 22 2c 20 6a 29 3d 3d 30 ensitive", j)==0
2130: 20 29 7b 0a 20 20 20 20 20 20 61 45 6e 74 72 79 ){. aEntry
2140: 5b 6e 55 73 65 64 5d 2e 65 54 79 70 65 20 7c 3d [nUsed].eType |=
2150: 20 43 4d 44 46 4c 41 47 5f 53 45 4e 53 49 54 49 CMDFLAG_SENSITI
2160: 56 45 3b 0a 20 20 20 20 7d 65 6c 73 65 20 69 66 VE;. }else if
2170: 28 20 6a 3e 36 20 26 26 20 73 74 72 6e 63 6d 70 ( j>6 && strncmp
2180: 28 26 7a 4c 69 6e 65 5b 69 5d 2c 20 22 77 69 64 (&zLine[i], "wid
2190: 74 68 3d 22 2c 20 36 29 3d 3d 30 20 29 7b 0a 20 th=", 6)==0 ){.
21a0: 20 20 20 20 20 61 45 6e 74 72 79 5b 6e 55 73 65 aEntry[nUse
21b0: 64 5d 2e 69 57 69 64 74 68 20 3d 20 61 74 6f 69 d].iWidth = atoi
21c0: 28 26 7a 4c 69 6e 65 5b 69 2b 36 5d 29 3b 0a 20 (&zLine[i+6]);.
21d0: 20 20 20 7d 65 6c 73 65 20 69 66 28 20 6a 3e 38 }else if( j>8
21e0: 20 26 26 20 73 74 72 6e 63 6d 70 28 26 7a 4c 69 && strncmp(&zLi
21f0: 6e 65 5b 69 5d 2c 20 22 64 65 66 61 75 6c 74 3d ne[i], "default=
2200: 22 2c 20 38 29 3d 3d 30 20 29 7b 0a 20 20 20 20 ", 8)==0 ){.
2210: 20 20 61 45 6e 74 72 79 5b 6e 55 73 65 64 5d 2e aEntry[nUsed].
2220: 7a 44 66 6c 74 20 3d 20 73 74 72 69 6e 67 5f 64 zDflt = string_d
2230: 75 70 28 26 7a 4c 69 6e 65 5b 69 2b 38 5d 2c 20 up(&zLine[i+8],
2240: 6a 2d 38 29 3b 0a 20 20 20 20 7d 65 6c 73 65 20 j-8);. }else
2250: 69 66 28 20 6a 3e 39 20 26 26 20 73 74 72 6e 63 if( j>9 && strnc
2260: 6d 70 28 26 7a 4c 69 6e 65 5b 69 5d 2c 20 22 76 mp(&zLine[i], "v
2270: 61 72 69 61 62 6c 65 3d 22 2c 20 39 29 3d 3d 30 ariable=", 9)==0
2280: 20 29 7b 0a 20 20 20 20 20 20 61 45 6e 74 72 79 ){. aEntry
2290: 5b 6e 55 73 65 64 5d 2e 7a 56 61 72 20 3d 20 73 [nUsed].zVar = s
22a0: 74 72 69 6e 67 5f 64 75 70 28 26 7a 4c 69 6e 65 tring_dup(&zLine
22b0: 5b 69 2b 39 5d 2c 20 6a 2d 39 29 3b 0a 20 20 20 [i+9], j-9);.
22c0: 20 7d 65 6c 73 65 20 69 66 28 20 6a 3d 3d 36 20 }else if( j==6
22d0: 26 26 20 73 74 72 6e 63 6d 70 28 26 7a 4c 69 6e && strncmp(&zLin
22e0: 65 5b 69 5d 2c 20 22 68 69 64 64 65 6e 22 2c 20 e[i], "hidden",
22f0: 36 29 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 61 6)==0 ){. a
2300: 45 6e 74 72 79 5b 6e 55 73 65 64 5d 2e 65 54 79 Entry[nUsed].eTy
2310: 70 65 20 7c 3d 20 43 4d 44 46 4c 41 47 5f 48 49 pe |= CMDFLAG_HI
2320: 44 44 45 4e 3b 0a 20 20 20 20 7d 65 6c 73 65 7b DDEN;. }else{
2330: 0a 20 20 20 20 20 20 66 70 72 69 6e 74 66 28 73 . fprintf(s
2340: 74 64 65 72 72 2c 20 22 25 73 3a 25 64 3a 20 75 tderr, "%s:%d: u
2350: 6e 6b 6e 6f 77 6e 20 6f 70 74 69 6f 6e 3a 20 27 nknown option: '
2360: 25 2e 2a 73 27 5c 6e 22 2c 0a 20 20 20 20 20 20 %.*s'\n",.
2370: 20 20 20 20 20 20 20 20 7a 46 69 6c 65 2c 20 6e zFile, n
2380: 4c 69 6e 65 2c 20 6a 2c 20 26 7a 4c 69 6e 65 5b Line, j, &zLine[
2390: 69 5d 29 3b 0a 20 20 20 20 20 20 6e 45 72 72 2b i]);. nErr+
23a0: 2b 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 0a 20 20 +;. }. }..
23b0: 6e 55 73 65 64 2b 2b 3b 0a 20 20 72 65 74 75 72 nUsed++;. retur
23c0: 6e 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 43 68 65 63 n;.}../*.** Chec
23d0: 6b 20 74 6f 20 73 65 65 20 69 66 20 74 68 65 20 k to see if the
23e0: 63 75 72 72 65 6e 74 20 6c 69 6e 65 20 69 73 20 current line is
23f0: 61 6e 20 23 69 66 20 61 6e 64 20 69 66 20 69 74 an #if and if it
2400: 20 69 73 2c 20 61 64 64 20 69 74 20 74 6f 0a 2a is, add it to.*
2410: 2a 20 74 68 65 20 7a 49 66 5b 5d 20 73 74 72 69 * the zIf[] stri
2420: 6e 67 2e 20 20 49 66 20 74 68 65 20 63 75 72 72 ng. If the curr
2430: 65 6e 74 20 6c 69 6e 65 20 69 73 20 61 6e 20 23 ent line is an #
2440: 65 6e 64 69 66 20 6f 72 20 23 65 6c 73 65 20 6f endif or #else o
2450: 72 20 23 65 6c 69 66 0a 2a 2a 20 74 68 65 6e 20 r #elif.** then
2460: 63 61 6e 63 65 6c 20 74 68 65 20 63 75 72 72 65 cancel the curre
2470: 6e 74 20 7a 49 66 5b 5d 20 73 74 72 69 6e 67 2e nt zIf[] string.
2480: 0a 2a 2f 0a 76 6f 69 64 20 73 63 61 6e 5f 66 6f .*/.void scan_fo
2490: 72 5f 69 66 28 63 6f 6e 73 74 20 63 68 61 72 20 r_if(const char
24a0: 2a 7a 4c 69 6e 65 29 7b 0a 20 20 69 6e 74 20 69 *zLine){. int i
24b0: 3b 0a 20 20 69 6e 74 20 6c 65 6e 3b 0a 20 20 69 ;. int len;. i
24c0: 66 28 20 7a 4c 69 6e 65 5b 30 5d 21 3d 27 23 27 f( zLine[0]!='#'
24d0: 20 29 20 72 65 74 75 72 6e 3b 0a 20 20 66 6f 72 ) return;. for
24e0: 28 69 3d 31 3b 20 66 6f 73 73 69 6c 5f 69 73 73 (i=1; fossil_iss
24f0: 70 61 63 65 28 7a 4c 69 6e 65 5b 69 5d 29 3b 20 pace(zLine[i]);
2500: 69 2b 2b 29 7b 7d 0a 20 20 69 66 28 20 7a 4c 69 i++){}. if( zLi
2510: 6e 65 5b 69 5d 3d 3d 30 20 29 20 72 65 74 75 72 ne[i]==0 ) retur
2520: 6e 3b 0a 20 20 6c 65 6e 20 3d 20 73 74 72 6c 65 n;. len = strle
2530: 6e 28 26 7a 4c 69 6e 65 5b 69 5d 29 3b 0a 20 20 n(&zLine[i]);.
2540: 69 66 28 20 73 74 72 6e 63 6d 70 28 26 7a 4c 69 if( strncmp(&zLi
2550: 6e 65 5b 69 5d 2c 22 69 66 22 2c 32 29 3d 3d 30 ne[i],"if",2)==0
2560: 20 29 7b 0a 20 20 20 20 7a 49 66 5b 30 5d 20 3d ){. zIf[0] =
2570: 20 27 23 27 3b 0a 20 20 20 20 6d 65 6d 63 70 79 '#';. memcpy
2580: 28 26 7a 49 66 5b 31 5d 2c 20 26 7a 4c 69 6e 65 (&zIf[1], &zLine
2590: 5b 69 5d 2c 20 6c 65 6e 2b 31 29 3b 0a 20 20 7d [i], len+1);. }
25a0: 65 6c 73 65 20 69 66 28 20 7a 4c 69 6e 65 5b 69 else if( zLine[i
25b0: 5d 3d 3d 27 65 27 20 29 7b 0a 20 20 20 20 7a 49 ]=='e' ){. zI
25c0: 66 5b 30 5d 20 3d 20 30 3b 0a 20 20 7d 0a 7d 0a f[0] = 0;. }.}.
25d0: 0a 2f 2a 0a 2a 2a 20 43 68 65 63 6b 20 74 6f 20 ./*.** Check to
25e0: 73 65 65 20 69 66 20 74 68 65 20 63 75 72 72 65 see if the curre
25f0: 6e 74 20 6c 69 6e 65 20 69 73 20 61 20 22 2a 2a nt line is a "**
2600: 20 44 45 46 41 55 4c 54 3a 20 2e 2e 2e 22 20 6c DEFAULT: ..." l
2610: 69 6e 65 20 66 6f 72 20 61 0a 2a 2a 20 53 45 54 ine for a.** SET
2620: 54 49 4e 47 20 64 65 66 69 6e 69 74 69 6f 6e 2e TING definition.
2630: 20 20 49 66 20 73 6f 2c 20 72 65 6d 65 6d 62 65 If so, remembe
2640: 72 20 74 68 65 20 64 65 66 61 75 6c 74 20 76 61 r the default va
2650: 6c 75 65 2e 0a 2a 2f 0a 76 6f 69 64 20 73 63 61 lue..*/.void sca
2660: 6e 5f 66 6f 72 5f 64 65 66 61 75 6c 74 28 63 6f n_for_default(co
2670: 6e 73 74 20 63 68 61 72 20 2a 7a 4c 69 6e 65 29 nst char *zLine)
2680: 7b 0a 20 20 69 6e 74 20 6c 65 6e 3b 0a 20 20 63 {. int len;. c
2690: 6f 6e 73 74 20 63 68 61 72 20 2a 7a 3b 0a 20 20 onst char *z;.
26a0: 69 66 28 20 6e 55 73 65 64 3c 31 20 29 20 72 65 if( nUsed<1 ) re
26b0: 74 75 72 6e 3b 0a 20 20 69 66 28 20 28 61 45 6e turn;. if( (aEn
26c0: 74 72 79 5b 6e 55 73 65 64 2d 31 5d 2e 65 54 79 try[nUsed-1].eTy
26d0: 70 65 20 26 20 43 4d 44 46 4c 41 47 5f 53 45 54 pe & CMDFLAG_SET
26e0: 54 49 4e 47 29 3d 3d 30 20 29 20 72 65 74 75 72 TING)==0 ) retur
26f0: 6e 3b 0a 20 20 69 66 28 20 73 74 72 6e 63 6d 70 n;. if( strncmp
2700: 28 7a 4c 69 6e 65 2c 20 22 2a 2a 20 44 45 46 41 (zLine, "** DEFA
2710: 55 4c 54 3a 20 22 2c 20 31 32 29 21 3d 30 20 29 ULT: ", 12)!=0 )
2720: 20 72 65 74 75 72 6e 3b 0a 20 20 7a 20 3d 20 7a return;. z = z
2730: 4c 69 6e 65 20 2b 20 31 32 3b 0a 20 20 77 68 69 Line + 12;. whi
2740: 6c 65 28 20 66 6f 73 73 69 6c 5f 69 73 73 70 61 le( fossil_isspa
2750: 63 65 28 7a 5b 30 5d 29 20 29 20 7a 2b 2b 3b 0a ce(z[0]) ) z++;.
2760: 20 20 6c 65 6e 20 3d 20 28 69 6e 74 29 73 74 72 len = (int)str
2770: 6c 65 6e 28 7a 29 3b 0a 20 20 77 68 69 6c 65 28 len(z);. while(
2780: 20 6c 65 6e 3e 30 20 26 26 20 66 6f 73 73 69 6c len>0 && fossil
2790: 5f 69 73 73 70 61 63 65 28 7a 5b 6c 65 6e 2d 31 _isspace(z[len-1
27a0: 5d 29 20 29 7b 20 6c 65 6e 2d 2d 3b 20 7d 0a 20 ]) ){ len--; }.
27b0: 20 61 45 6e 74 72 79 5b 6e 55 73 65 64 2d 31 5d aEntry[nUsed-1]
27c0: 2e 7a 44 66 6c 74 20 3d 20 73 74 72 69 6e 67 5f .zDflt = string_
27d0: 64 75 70 28 7a 2c 6c 65 6e 29 3b 0a 7d 0a 0a 2f dup(z,len);.}../
27e0: 2a 0a 2a 2a 20 53 63 61 6e 20 61 20 6c 69 6e 65 *.** Scan a line
27f0: 20 66 6f 72 20 61 20 66 75 6e 63 74 69 6f 6e 20 for a function
2800: 74 68 61 74 20 69 6d 70 6c 65 6d 65 6e 74 73 20 that implements
2810: 61 20 77 65 62 20 70 61 67 65 20 6f 72 20 63 6f a web page or co
2820: 6d 6d 61 6e 64 2e 0a 2a 2f 0a 76 6f 69 64 20 73 mmand..*/.void s
2830: 63 61 6e 5f 66 6f 72 5f 66 75 6e 63 28 63 68 61 can_for_func(cha
2840: 72 20 2a 7a 4c 69 6e 65 29 7b 0a 20 20 69 6e 74 r *zLine){. int
2850: 20 69 2c 6a 2c 6b 3b 0a 20 20 63 68 61 72 20 2a i,j,k;. char *
2860: 7a 3b 0a 20 20 69 6e 74 20 69 73 53 65 74 74 69 z;. int isSetti
2870: 6e 67 3b 0a 20 20 69 66 28 20 6e 55 73 65 64 3c ng;. if( nUsed<
2880: 3d 6e 46 69 78 65 64 20 29 20 72 65 74 75 72 6e =nFixed ) return
2890: 3b 0a 20 20 69 66 28 20 73 74 72 6e 63 6d 70 28 ;. if( strncmp(
28a0: 7a 4c 69 6e 65 2c 20 22 2a 2a 22 2c 20 32 29 3d zLine, "**", 2)=
28b0: 3d 30 0a 20 20 20 26 26 20 66 6f 73 73 69 6c 5f =0. && fossil_
28c0: 69 73 73 70 61 63 65 28 7a 4c 69 6e 65 5b 32 5d isspace(zLine[2]
28d0: 29 0a 20 20 20 26 26 20 73 74 72 6c 65 6e 28 7a ). && strlen(z
28e0: 4c 69 6e 65 29 3c 73 69 7a 65 6f 66 28 7a 48 65 Line)<sizeof(zHe
28f0: 6c 70 29 2d 6e 48 65 6c 70 2d 31 0a 20 20 20 26 lp)-nHelp-1. &
2900: 26 20 6e 55 73 65 64 3e 6e 46 69 78 65 64 0a 20 & nUsed>nFixed.
2910: 20 20 26 26 20 73 74 72 6e 63 6d 70 28 7a 4c 69 && strncmp(zLi
2920: 6e 65 2c 22 2a 2a 20 43 4f 4d 4d 41 4e 44 3a 22 ne,"** COMMAND:"
2930: 2c 31 31 29 21 3d 30 0a 20 20 20 26 26 20 73 74 ,11)!=0. && st
2940: 72 6e 63 6d 70 28 7a 4c 69 6e 65 2c 22 2a 2a 20 rncmp(zLine,"**
2950: 57 45 42 50 41 47 45 3a 22 2c 31 31 29 21 3d 30 WEBPAGE:",11)!=0
2960: 0a 20 20 20 26 26 20 73 74 72 6e 63 6d 70 28 7a . && strncmp(z
2970: 4c 69 6e 65 2c 22 2a 2a 20 53 45 54 54 49 4e 47 Line,"** SETTING
2980: 3a 22 2c 31 31 29 21 3d 30 0a 20 20 20 26 26 20 :",11)!=0. &&
2990: 73 74 72 6e 63 6d 70 28 7a 4c 69 6e 65 2c 22 2a strncmp(zLine,"*
29a0: 2a 20 44 45 46 41 55 4c 54 3a 22 2c 31 31 29 21 * DEFAULT:",11)!
29b0: 3d 30 0a 20 20 29 7b 0a 20 20 20 20 69 66 28 20 =0. ){. if(
29c0: 7a 4c 69 6e 65 5b 32 5d 3d 3d 27 5c 6e 27 20 29 zLine[2]=='\n' )
29d0: 7b 0a 20 20 20 20 20 20 7a 48 65 6c 70 5b 6e 48 {. zHelp[nH
29e0: 65 6c 70 2b 2b 5d 20 3d 20 27 5c 6e 27 3b 0a 20 elp++] = '\n';.
29f0: 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 }else{.
2a00: 69 66 28 20 73 74 72 6e 63 6d 70 28 26 7a 4c 69 if( strncmp(&zLi
2a10: 6e 65 5b 33 5d 2c 20 22 55 73 61 67 65 3a 20 22 ne[3], "Usage: "
2a20: 2c 20 36 29 3d 3d 30 20 29 20 6e 48 65 6c 70 20 , 6)==0 ) nHelp
2a30: 3d 20 30 3b 0a 20 20 20 20 20 20 73 74 72 63 70 = 0;. strcp
2a40: 79 28 26 7a 48 65 6c 70 5b 6e 48 65 6c 70 5d 2c y(&zHelp[nHelp],
2a50: 20 26 7a 4c 69 6e 65 5b 33 5d 29 3b 0a 20 20 20 &zLine[3]);.
2a60: 20 20 20 6e 48 65 6c 70 20 2b 3d 20 73 74 72 6c nHelp += strl
2a70: 65 6e 28 26 7a 48 65 6c 70 5b 6e 48 65 6c 70 5d en(&zHelp[nHelp]
2a80: 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20 72 65 74 );. }. ret
2a90: 75 72 6e 3b 0a 20 20 7d 0a 20 20 66 6f 72 28 69 urn;. }. for(i
2aa0: 3d 30 3b 20 66 6f 73 73 69 6c 5f 69 73 73 70 61 =0; fossil_isspa
2ab0: 63 65 28 7a 4c 69 6e 65 5b 69 5d 29 3b 20 69 2b ce(zLine[i]); i+
2ac0: 2b 29 7b 7d 0a 20 20 69 66 28 20 7a 4c 69 6e 65 +){}. if( zLine
2ad0: 5b 69 5d 3d 3d 30 20 29 20 72 65 74 75 72 6e 3b [i]==0 ) return;
2ae0: 0a 20 20 69 73 53 65 74 74 69 6e 67 20 3d 20 28 . isSetting = (
2af0: 61 45 6e 74 72 79 5b 6e 46 69 78 65 64 5d 2e 65 aEntry[nFixed].e
2b00: 54 79 70 65 20 26 20 43 4d 44 46 4c 41 47 5f 53 Type & CMDFLAG_S
2b10: 45 54 54 49 4e 47 29 21 3d 30 3b 0a 20 20 69 66 ETTING)!=0;. if
2b20: 28 20 21 69 73 53 65 74 74 69 6e 67 20 29 7b 0a ( !isSetting ){.
2b30: 20 20 20 20 69 66 28 20 73 74 72 6e 63 6d 70 28 if( strncmp(
2b40: 26 7a 4c 69 6e 65 5b 69 5d 2c 22 76 6f 69 64 22 &zLine[i],"void"
2b50: 2c 34 29 21 3d 30 20 29 7b 0a 20 20 20 20 20 20 ,4)!=0 ){.
2b60: 69 66 28 20 7a 4c 69 6e 65 5b 69 5d 21 3d 27 2a if( zLine[i]!='*
2b70: 27 20 29 20 67 6f 74 6f 20 70 61 67 65 5f 73 6b ' ) goto page_sk
2b80: 69 70 3b 0a 20 20 20 20 20 20 72 65 74 75 72 6e ip;. return
2b90: 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69 20 2b 3d ;. }. i +=
2ba0: 20 34 3b 0a 20 20 20 20 69 66 28 20 21 66 6f 73 4;. if( !fos
2bb0: 73 69 6c 5f 69 73 73 70 61 63 65 28 7a 4c 69 6e sil_isspace(zLin
2bc0: 65 5b 69 5d 29 20 29 20 67 6f 74 6f 20 70 61 67 e[i]) ) goto pag
2bd0: 65 5f 73 6b 69 70 3b 0a 20 20 20 20 77 68 69 6c e_skip;. whil
2be0: 65 28 20 66 6f 73 73 69 6c 5f 69 73 73 70 61 63 e( fossil_isspac
2bf0: 65 28 7a 4c 69 6e 65 5b 69 5d 29 20 29 7b 20 69 e(zLine[i]) ){ i
2c00: 2b 2b 3b 20 7d 0a 20 20 20 20 66 6f 72 28 6a 3d ++; }. for(j=
2c10: 30 3b 20 66 6f 73 73 69 6c 5f 69 73 69 64 65 6e 0; fossil_isiden
2c20: 74 28 7a 4c 69 6e 65 5b 69 2b 6a 5d 29 3b 20 6a t(zLine[i+j]); j
2c30: 2b 2b 29 7b 7d 0a 20 20 20 20 69 66 28 20 6a 3d ++){}. if( j=
2c40: 3d 30 20 29 20 67 6f 74 6f 20 70 61 67 65 5f 73 =0 ) goto page_s
2c50: 6b 69 70 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 kip;. }else{.
2c60: 20 20 6a 20 3d 20 30 3b 0a 20 20 7d 0a 20 20 66 j = 0;. }. f
2c70: 6f 72 28 6b 3d 6e 48 65 6c 70 2d 31 3b 20 6b 3e or(k=nHelp-1; k>
2c80: 3d 30 20 26 26 20 66 6f 73 73 69 6c 5f 69 73 73 =0 && fossil_iss
2c90: 70 61 63 65 28 7a 48 65 6c 70 5b 6b 5d 29 3b 20 pace(zHelp[k]);
2ca0: 6b 2d 2d 29 7b 7d 0a 20 20 6e 48 65 6c 70 20 3d k--){}. nHelp =
2cb0: 20 6b 2b 31 3b 0a 20 20 7a 48 65 6c 70 5b 6e 48 k+1;. zHelp[nH
2cc0: 65 6c 70 5d 20 3d 20 30 3b 0a 20 20 66 6f 72 28 elp] = 0;. for(
2cd0: 6b 3d 30 3b 20 6b 3c 6e 48 65 6c 70 20 26 26 20 k=0; k<nHelp &&
2ce0: 66 6f 73 73 69 6c 5f 69 73 73 70 61 63 65 28 7a fossil_isspace(z
2cf0: 48 65 6c 70 5b 6b 5d 29 3b 20 6b 2b 2b 29 7b 7d Help[k]); k++){}
2d00: 0a 20 20 69 66 28 20 6b 3c 6e 48 65 6c 70 20 29 . if( k<nHelp )
2d10: 7b 0a 20 20 20 20 7a 20 3d 20 73 74 72 69 6e 67 {. z = string
2d20: 5f 64 75 70 28 26 7a 48 65 6c 70 5b 6b 5d 2c 20 _dup(&zHelp[k],
2d30: 6e 48 65 6c 70 2d 6b 29 3b 0a 20 20 7d 65 6c 73 nHelp-k);. }els
2d40: 65 7b 0a 20 20 20 20 7a 20 3d 20 22 22 3b 0a 20 e{. z = "";.
2d50: 20 7d 0a 20 20 66 6f 72 28 6b 3d 6e 46 69 78 65 }. for(k=nFixe
2d60: 64 3b 20 6b 3c 6e 55 73 65 64 3b 20 6b 2b 2b 29 d; k<nUsed; k++)
2d70: 7b 0a 20 20 20 20 61 45 6e 74 72 79 5b 6b 5d 2e {. aEntry[k].
2d80: 7a 49 66 20 3d 20 7a 49 66 5b 30 5d 20 3f 20 73 zIf = zIf[0] ? s
2d90: 74 72 69 6e 67 5f 64 75 70 28 7a 49 66 2c 20 2d tring_dup(zIf, -
2da0: 31 29 20 3a 20 30 3b 0a 20 20 20 20 61 45 6e 74 1) : 0;. aEnt
2db0: 72 79 5b 6b 5d 2e 7a 46 75 6e 63 20 3d 20 69 73 ry[k].zFunc = is
2dc0: 53 65 74 74 69 6e 67 20 3f 20 22 30 22 20 3a 20 Setting ? "0" :
2dd0: 73 74 72 69 6e 67 5f 64 75 70 28 26 7a 4c 69 6e string_dup(&zLin
2de0: 65 5b 69 5d 2c 20 6a 29 3b 0a 20 20 20 20 61 45 e[i], j);. aE
2df0: 6e 74 72 79 5b 6b 5d 2e 7a 48 65 6c 70 20 3d 20 ntry[k].zHelp =
2e00: 7a 3b 0a 20 20 20 20 7a 20 3d 20 30 3b 0a 20 20 z;. z = 0;.
2e10: 20 20 61 45 6e 74 72 79 5b 6b 5d 2e 69 48 65 6c aEntry[k].iHel
2e20: 70 20 3d 20 6e 46 69 78 65 64 3b 0a 20 20 7d 0a p = nFixed;. }.
2e30: 20 20 69 66 28 20 21 69 73 53 65 74 74 69 6e 67 if( !isSetting
2e40: 20 29 7b 0a 20 20 20 20 69 2b 3d 6a 3b 0a 20 20 ){. i+=j;.
2e50: 20 20 77 68 69 6c 65 28 20 66 6f 73 73 69 6c 5f while( fossil_
2e60: 69 73 73 70 61 63 65 28 7a 4c 69 6e 65 5b 69 5d isspace(zLine[i]
2e70: 29 20 29 7b 20 69 2b 2b 3b 20 7d 0a 20 20 20 20 ) ){ i++; }.
2e80: 69 66 28 20 7a 4c 69 6e 65 5b 69 5d 21 3d 27 28 if( zLine[i]!='(
2e90: 27 20 29 20 67 6f 74 6f 20 70 61 67 65 5f 73 6b ' ) goto page_sk
2ea0: 69 70 3b 0a 20 20 7d 0a 20 20 6e 46 69 78 65 64 ip;. }. nFixed
2eb0: 20 3d 20 6e 55 73 65 64 3b 0a 20 20 6e 48 65 6c = nUsed;. nHel
2ec0: 70 20 3d 20 30 3b 0a 20 20 72 65 74 75 72 6e 3b p = 0;. return;
2ed0: 0a 0a 70 61 67 65 5f 73 6b 69 70 3a 0a 20 20 20 ..page_skip:.
2ee0: 66 6f 72 28 69 3d 6e 46 69 78 65 64 3b 20 69 3c for(i=nFixed; i<
2ef0: 6e 55 73 65 64 3b 20 69 2b 2b 29 7b 0a 20 20 20 nUsed; i++){.
2f00: 20 20 20 66 70 72 69 6e 74 66 28 73 74 64 65 72 fprintf(stder
2f10: 72 2c 22 25 73 3a 25 64 3a 20 73 6b 69 70 70 69 r,"%s:%d: skippi
2f20: 6e 67 20 70 61 67 65 20 5c 22 25 73 5c 22 5c 6e ng page \"%s\"\n
2f30: 22 2c 0a 20 20 20 20 20 20 20 20 20 7a 46 69 6c ",. zFil
2f40: 65 2c 20 6e 4c 69 6e 65 2c 20 61 45 6e 74 72 79 e, nLine, aEntry
2f50: 5b 69 5d 2e 7a 50 61 74 68 29 3b 0a 20 20 20 7d [i].zPath);. }
2f60: 0a 20 20 20 6e 55 73 65 64 20 3d 20 6e 46 69 78 . nUsed = nFix
2f70: 65 64 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 43 6f 6d ed;.}../*.** Com
2f80: 70 61 72 65 20 74 77 6f 20 65 6e 74 72 69 65 73 pare two entries
2f90: 0a 2a 2f 0a 69 6e 74 20 65 5f 63 6f 6d 70 61 72 .*/.int e_compar
2fa0: 65 28 63 6f 6e 73 74 20 76 6f 69 64 20 2a 61 2c e(const void *a,
2fb0: 20 63 6f 6e 73 74 20 76 6f 69 64 20 2a 62 29 7b const void *b){
2fc0: 0a 20 20 63 6f 6e 73 74 20 45 6e 74 72 79 20 2a . const Entry *
2fd0: 70 41 20 3d 20 28 63 6f 6e 73 74 20 45 6e 74 72 pA = (const Entr
2fe0: 79 2a 29 61 3b 0a 20 20 63 6f 6e 73 74 20 45 6e y*)a;. const En
2ff0: 74 72 79 20 2a 70 42 20 3d 20 28 63 6f 6e 73 74 try *pB = (const
3000: 20 45 6e 74 72 79 2a 29 62 3b 0a 20 20 72 65 74 Entry*)b;. ret
3010: 75 72 6e 20 73 74 72 63 6d 70 28 70 41 2d 3e 7a urn strcmp(pA->z
3020: 50 61 74 68 2c 20 70 42 2d 3e 7a 50 61 74 68 29 Path, pB->zPath)
3030: 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 42 75 69 6c 64 ;.}../*.** Build
3040: 20 74 68 65 20 62 69 6e 61 72 79 20 73 65 61 72 the binary sear
3050: 63 68 20 74 61 62 6c 65 2e 0a 2a 2f 0a 76 6f 69 ch table..*/.voi
3060: 64 20 62 75 69 6c 64 5f 74 61 62 6c 65 28 76 6f d build_table(vo
3070: 69 64 29 7b 0a 20 20 69 6e 74 20 69 3b 0a 20 20 id){. int i;.
3080: 69 6e 74 20 6e 57 65 62 20 3d 20 30 3b 0a 20 20 int nWeb = 0;.
3090: 69 6e 74 20 6d 78 4c 65 6e 20 3d 20 30 3b 0a 0a int mxLen = 0;..
30a0: 20 20 71 73 6f 72 74 28 61 45 6e 74 72 79 2c 20 qsort(aEntry,
30b0: 6e 46 69 78 65 64 2c 20 73 69 7a 65 6f 66 28 61 nFixed, sizeof(a
30c0: 45 6e 74 72 79 5b 30 5d 29 2c 20 65 5f 63 6f 6d Entry[0]), e_com
30d0: 70 61 72 65 29 3b 0a 0a 20 20 70 72 69 6e 74 66 pare);.. printf
30e0: 28 0a 20 20 20 20 22 2f 2a 20 41 75 74 6f 6d 61 (. "/* Automa
30f0: 74 69 63 61 6c 6c 79 20 67 65 6e 65 72 61 74 65 tically generate
3100: 64 20 63 6f 64 65 5c 6e 22 0a 20 20 20 20 22 2a d code\n". "*
3110: 2a 20 44 4f 20 4e 4f 54 20 45 44 49 54 21 5c 6e * DO NOT EDIT!\n
3120: 22 0a 20 20 20 20 22 2a 2a 5c 6e 22 0a 20 20 20 ". "**\n".
3130: 20 22 2a 2a 20 54 68 69 73 20 66 69 6c 65 20 77 "** This file w
3140: 61 73 20 67 65 6e 65 72 61 74 65 64 20 62 79 20 as generated by
3150: 74 68 65 20 6d 6b 69 6e 64 65 78 2e 65 78 65 20 the mkindex.exe
3160: 70 72 6f 67 72 61 6d 20 62 61 73 65 64 20 6f 6e program based on
3170: 5c 6e 22 0a 20 20 20 20 22 2a 2a 20 63 6f 6d 6d \n". "** comm
3180: 65 6e 74 73 20 69 6e 20 6f 74 68 65 72 20 46 6f ents in other Fo
3190: 73 73 69 6c 20 73 6f 75 72 63 65 20 66 69 6c 65 ssil source file
31a0: 73 2e 5c 6e 22 0a 20 20 20 20 22 2a 2f 5c 6e 22 s.\n". "*/\n"
31b0: 0a 20 20 29 3b 0a 0a 20 20 2f 2a 20 4f 75 74 70 . );.. /* Outp
31c0: 75 74 20 64 65 63 6c 61 72 61 74 69 6f 6e 73 20 ut declarations
31d0: 66 6f 72 20 61 6c 6c 20 74 68 65 20 61 63 74 69 for all the acti
31e0: 6f 6e 20 66 75 6e 63 74 69 6f 6e 73 20 2a 2f 0a on functions */.
31f0: 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c 6e 46 69 for(i=0; i<nFi
3200: 78 65 64 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 69 xed; i++){. i
3210: 66 28 20 61 45 6e 74 72 79 5b 69 5d 2e 65 54 79 f( aEntry[i].eTy
3220: 70 65 20 26 20 43 4d 44 46 4c 41 47 5f 53 45 54 pe & CMDFLAG_SET
3230: 54 49 4e 47 20 29 20 63 6f 6e 74 69 6e 75 65 3b TING ) continue;
3240: 0a 20 20 20 20 69 66 28 20 61 45 6e 74 72 79 5b . if( aEntry[
3250: 69 5d 2e 7a 49 66 20 29 20 70 72 69 6e 74 66 28 i].zIf ) printf(
3260: 22 25 73 22 2c 20 61 45 6e 74 72 79 5b 69 5d 2e "%s", aEntry[i].
3270: 7a 49 66 29 3b 0a 20 20 20 20 70 72 69 6e 74 66 zIf);. printf
3280: 28 22 65 78 74 65 72 6e 20 76 6f 69 64 20 25 73 ("extern void %s
3290: 28 76 6f 69 64 29 3b 5c 6e 22 2c 20 61 45 6e 74 (void);\n", aEnt
32a0: 72 79 5b 69 5d 2e 7a 46 75 6e 63 29 3b 0a 20 20 ry[i].zFunc);.
32b0: 20 20 69 66 28 20 61 45 6e 74 72 79 5b 69 5d 2e if( aEntry[i].
32c0: 7a 49 66 20 29 20 70 72 69 6e 74 66 28 22 23 65 zIf ) printf("#e
32d0: 6e 64 69 66 5c 6e 22 29 3b 0a 20 20 7d 0a 0a 20 ndif\n");. }..
32e0: 20 2f 2a 20 4f 75 74 70 75 74 20 73 74 72 69 6e /* Output strin
32f0: 67 73 20 66 6f 72 20 61 6c 6c 20 74 68 65 20 68 gs for all the h
3300: 65 6c 70 20 74 65 78 74 20 2a 2f 0a 20 20 66 6f elp text */. fo
3310: 72 28 69 3d 30 3b 20 69 3c 6e 46 69 78 65 64 3b r(i=0; i<nFixed;
3320: 20 69 2b 2b 29 7b 0a 20 20 20 20 63 68 61 72 20 i++){. char
3330: 2a 7a 20 3d 20 61 45 6e 74 72 79 5b 69 5d 2e 7a *z = aEntry[i].z
3340: 48 65 6c 70 3b 0a 20 20 20 20 69 66 28 20 7a 3d Help;. if( z=
3350: 3d 30 20 29 20 63 6f 6e 74 69 6e 75 65 3b 0a 20 =0 ) continue;.
3360: 20 20 20 69 66 28 20 61 45 6e 74 72 79 5b 69 5d if( aEntry[i]
3370: 2e 7a 49 66 20 29 20 70 72 69 6e 74 66 28 22 25 .zIf ) printf("%
3380: 73 22 2c 20 61 45 6e 74 72 79 5b 69 5d 2e 7a 49 s", aEntry[i].zI
3390: 66 29 3b 0a 20 20 20 20 70 72 69 6e 74 66 28 22 f);. printf("
33a0: 73 74 61 74 69 63 20 63 6f 6e 73 74 20 63 68 61 static const cha
33b0: 72 20 7a 48 65 6c 70 25 30 33 64 5b 5d 20 3d 5c r zHelp%03d[] =\
33c0: 6e 20 20 5c 22 22 2c 20 61 45 6e 74 72 79 5b 69 n \"", aEntry[i
33d0: 5d 2e 69 48 65 6c 70 29 3b 0a 20 20 20 20 77 68 ].iHelp);. wh
33e0: 69 6c 65 28 20 2a 7a 20 29 7b 0a 20 20 20 20 20 ile( *z ){.
33f0: 20 69 66 28 20 2a 7a 3d 3d 27 5c 6e 27 20 29 7b if( *z=='\n' ){
3400: 0a 20 20 20 20 20 20 20 20 70 72 69 6e 74 66 28 . printf(
3410: 22 5c 5c 6e 5c 22 5c 6e 20 20 5c 22 22 29 3b 0a "\\n\"\n \"");.
3420: 20 20 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20 }else if(
3430: 2a 7a 3d 3d 27 22 27 20 29 7b 0a 20 20 20 20 20 *z=='"' ){.
3440: 20 20 20 70 72 69 6e 74 66 28 22 5c 5c 5c 22 22 printf("\\\""
3450: 29 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a );. }else{.
3460: 20 20 20 20 20 20 20 20 70 75 74 63 68 61 72 28 putchar(
3470: 2a 7a 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 *z);. }.
3480: 20 20 20 7a 2b 2b 3b 0a 20 20 20 20 7d 0a 20 20 z++;. }.
3490: 20 20 70 72 69 6e 74 66 28 22 5c 22 3b 5c 6e 22 printf("\";\n"
34a0: 29 3b 0a 20 20 20 20 69 66 28 20 61 45 6e 74 72 );. if( aEntr
34b0: 79 5b 69 5d 2e 7a 49 66 20 29 20 70 72 69 6e 74 y[i].zIf ) print
34c0: 66 28 22 23 65 6e 64 69 66 5c 6e 22 29 3b 0a 20 f("#endif\n");.
34d0: 20 7d 0a 0a 20 20 2f 2a 20 47 65 6e 65 72 61 74 }.. /* Generat
34e0: 65 20 74 68 65 20 61 43 6f 6d 6d 61 6e 64 5b 5d e the aCommand[]
34f0: 20 74 61 62 6c 65 20 2a 2f 0a 20 20 70 72 69 6e table */. prin
3500: 74 66 28 22 73 74 61 74 69 63 20 63 6f 6e 73 74 tf("static const
3510: 20 43 6d 64 4f 72 50 61 67 65 20 61 43 6f 6d 6d CmdOrPage aComm
3520: 61 6e 64 5b 5d 20 3d 20 7b 5c 6e 22 29 3b 0a 20 and[] = {\n");.
3530: 20 66 6f 72 28 69 3d 30 3b 20 69 3c 6e 46 69 78 for(i=0; i<nFix
3540: 65 64 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 63 6f ed; i++){. co
3550: 6e 73 74 20 63 68 61 72 20 2a 7a 20 3d 20 61 45 nst char *z = aE
3560: 6e 74 72 79 5b 69 5d 2e 7a 50 61 74 68 3b 0a 20 ntry[i].zPath;.
3570: 20 20 20 69 6e 74 20 6e 20 3d 20 73 74 72 6c 65 int n = strle
3580: 6e 28 7a 29 3b 0a 20 20 20 20 69 66 28 20 6e 3e n(z);. if( n>
3590: 6d 78 4c 65 6e 20 29 20 6d 78 4c 65 6e 20 3d 20 mxLen ) mxLen =
35a0: 6e 3b 0a 20 20 20 20 69 66 28 20 61 45 6e 74 72 n;. if( aEntr
35b0: 79 5b 69 5d 2e 7a 49 66 20 29 7b 0a 20 20 20 20 y[i].zIf ){.
35c0: 20 20 70 72 69 6e 74 66 28 22 25 73 22 2c 20 61 printf("%s", a
35d0: 45 6e 74 72 79 5b 69 5d 2e 7a 49 66 29 3b 0a 20 Entry[i].zIf);.
35e0: 20 20 20 7d 65 6c 73 65 20 69 66 28 20 28 61 45 }else if( (aE
35f0: 6e 74 72 79 5b 69 5d 2e 65 54 79 70 65 20 26 20 ntry[i].eType &
3600: 43 4d 44 46 4c 41 47 5f 57 45 42 50 41 47 45 29 CMDFLAG_WEBPAGE)
3610: 21 3d 30 20 29 7b 0a 20 20 20 20 20 20 6e 57 65 !=0 ){. nWe
3620: 62 2b 2b 3b 0a 20 20 20 20 7d 0a 20 20 20 20 70 b++;. }. p
3630: 72 69 6e 74 66 28 22 20 20 7b 20 5c 22 25 2e 2a rintf(" { \"%.*
3640: 73 5c 22 2c 25 2a 73 25 73 2c 25 2a 73 7a 48 65 s\",%*s%s,%*szHe
3650: 6c 70 25 30 33 64 2c 20 30 78 25 30 33 78 20 7d lp%03d, 0x%03x }
3660: 2c 5c 6e 22 2c 0a 20 20 20 20 20 20 6e 2c 20 7a ,\n",. n, z
3670: 2c 0a 20 20 20 20 20 20 32 35 2d 6e 2c 20 22 22 ,. 25-n, ""
3680: 2c 0a 20 20 20 20 20 20 61 45 6e 74 72 79 5b 69 ,. aEntry[i
3690: 5d 2e 7a 46 75 6e 63 2c 0a 20 20 20 20 20 20 28 ].zFunc,. (
36a0: 69 6e 74 29 28 32 39 2d 73 74 72 6c 65 6e 28 61 int)(29-strlen(a
36b0: 45 6e 74 72 79 5b 69 5d 2e 7a 46 75 6e 63 29 29 Entry[i].zFunc))
36c0: 2c 20 22 22 2c 0a 20 20 20 20 20 20 61 45 6e 74 , "",. aEnt
36d0: 72 79 5b 69 5d 2e 69 48 65 6c 70 2c 0a 20 20 20 ry[i].iHelp,.
36e0: 20 20 20 61 45 6e 74 72 79 5b 69 5d 2e 65 54 79 aEntry[i].eTy
36f0: 70 65 0a 20 20 20 20 29 3b 0a 20 20 20 20 69 66 pe. );. if
3700: 28 20 61 45 6e 74 72 79 5b 69 5d 2e 7a 49 66 20 ( aEntry[i].zIf
3710: 29 20 70 72 69 6e 74 66 28 22 23 65 6e 64 69 66 ) printf("#endif
3720: 5c 6e 22 29 3b 0a 20 20 7d 0a 20 20 70 72 69 6e \n");. }. prin
3730: 74 66 28 22 7d 3b 5c 6e 22 29 3b 0a 20 20 70 72 tf("};\n");. pr
3740: 69 6e 74 66 28 22 23 64 65 66 69 6e 65 20 46 4f intf("#define FO
3750: 53 53 49 4c 5f 46 49 52 53 54 5f 43 4d 44 20 25 SSIL_FIRST_CMD %
3760: 64 5c 6e 22 2c 20 6e 57 65 62 29 3b 0a 20 20 70 d\n", nWeb);. p
3770: 72 69 6e 74 66 28 22 23 64 65 66 69 6e 65 20 46 rintf("#define F
3780: 4f 53 53 49 4c 5f 4d 58 5f 43 4d 44 4e 41 4d 45 OSSIL_MX_CMDNAME
3790: 20 25 64 20 2f 2a 20 6d 61 78 20 6c 65 6e 67 74 %d /* max lengt
37a0: 68 20 6f 66 20 61 6e 79 20 63 6f 6d 6d 61 6e 64 h of any command
37b0: 20 6e 61 6d 65 20 2a 2f 5c 6e 22 2c 0a 20 20 20 name */\n",.
37c0: 20 20 20 20 20 20 6d 78 4c 65 6e 29 3b 0a 0a 20 mxLen);..
37d0: 20 2f 2a 20 47 65 6e 65 72 61 74 65 20 74 68 65 /* Generate the
37e0: 20 61 53 65 74 74 69 6e 67 5b 5d 20 74 61 62 6c aSetting[] tabl
37f0: 65 20 2a 2f 0a 20 20 70 72 69 6e 74 66 28 22 63 e */. printf("c
3800: 6f 6e 73 74 20 53 65 74 74 69 6e 67 20 61 53 65 onst Setting aSe
3810: 74 74 69 6e 67 5b 5d 20 3d 20 7b 5c 6e 22 29 3b tting[] = {\n");
3820: 0a 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c 6e 46 . for(i=0; i<nF
3830: 69 78 65 64 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 ixed; i++){.
3840: 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 3b 0a 20 const char *z;.
3850: 20 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a const char *z
3860: 56 61 72 3b 0a 20 20 20 20 63 6f 6e 73 74 20 63 Var;. const c
3870: 68 61 72 20 2a 7a 44 65 66 3b 0a 20 20 20 20 69 har *zDef;. i
3880: 66 28 20 28 61 45 6e 74 72 79 5b 69 5d 2e 65 54 f( (aEntry[i].eT
3890: 79 70 65 20 26 20 43 4d 44 46 4c 41 47 5f 53 45 ype & CMDFLAG_SE
38a0: 54 54 49 4e 47 29 3d 3d 30 20 29 20 63 6f 6e 74 TTING)==0 ) cont
38b0: 69 6e 75 65 3b 0a 20 20 20 20 7a 20 3d 20 61 45 inue;. z = aE
38c0: 6e 74 72 79 5b 69 5d 2e 7a 50 61 74 68 3b 0a 20 ntry[i].zPath;.
38d0: 20 20 20 7a 56 61 72 20 3d 20 61 45 6e 74 72 79 zVar = aEntry
38e0: 5b 69 5d 2e 7a 56 61 72 3b 0a 20 20 20 20 7a 44 [i].zVar;. zD
38f0: 65 66 20 3d 20 61 45 6e 74 72 79 5b 69 5d 2e 7a ef = aEntry[i].z
3900: 44 66 6c 74 3b 0a 20 20 20 20 69 66 28 20 7a 44 Dflt;. if( zD
3910: 65 66 3d 3d 30 20 29 20 7a 44 65 66 20 3d 20 22 ef==0 ) zDef = "
3920: 22 3b 0a 20 20 20 20 69 66 28 20 61 45 6e 74 72 ";. if( aEntr
3930: 79 5b 69 5d 2e 7a 49 66 20 29 7b 0a 20 20 20 20 y[i].zIf ){.
3940: 20 20 70 72 69 6e 74 66 28 22 25 73 22 2c 20 61 printf("%s", a
3950: 45 6e 74 72 79 5b 69 5d 2e 7a 49 66 29 3b 0a 20 Entry[i].zIf);.
3960: 20 20 20 7d 0a 20 20 20 20 70 72 69 6e 74 66 28 }. printf(
3970: 22 20 20 7b 20 5c 22 25 73 5c 22 2c 25 2a 73 22 " { \"%s\",%*s"
3980: 2c 20 7a 2c 20 28 69 6e 74 29 28 32 30 2d 73 74 , z, (int)(20-st
3990: 72 6c 65 6e 28 7a 29 29 2c 20 22 22 29 3b 0a 20 rlen(z)), "");.
39a0: 20 20 20 69 66 28 20 7a 56 61 72 20 29 7b 0a 20 if( zVar ){.
39b0: 20 20 20 20 20 70 72 69 6e 74 66 28 22 20 5c 22 printf(" \"
39c0: 25 73 5c 22 2c 25 2a 73 22 2c 20 7a 56 61 72 2c %s\",%*s", zVar,
39d0: 20 28 69 6e 74 29 28 31 35 2d 73 74 72 6c 65 6e (int)(15-strlen
39e0: 28 7a 56 61 72 29 29 2c 20 22 22 29 3b 0a 20 20 (zVar)), "");.
39f0: 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 70 }else{. p
3a00: 72 69 6e 74 66 28 22 20 30 2c 25 2a 73 22 2c 20 rintf(" 0,%*s",
3a10: 31 36 2c 20 22 22 29 3b 0a 20 20 20 20 7d 0a 20 16, "");. }.
3a20: 20 20 20 70 72 69 6e 74 66 28 22 20 25 33 64 2c printf(" %3d,
3a30: 20 25 64 2c 20 25 64 2c 20 25 64 2c 20 5c 22 25 %d, %d, %d, \"%
3a40: 73 5c 22 25 2a 73 20 7d 2c 5c 6e 22 2c 0a 20 20 s\"%*s },\n",.
3a50: 20 20 20 20 61 45 6e 74 72 79 5b 69 5d 2e 69 57 aEntry[i].iW
3a60: 69 64 74 68 2c 0a 20 20 20 20 20 20 28 61 45 6e idth,. (aEn
3a70: 74 72 79 5b 69 5d 2e 65 54 79 70 65 20 26 20 43 try[i].eType & C
3a80: 4d 44 46 4c 41 47 5f 56 45 52 53 49 4f 4e 41 42 MDFLAG_VERSIONAB
3a90: 4c 45 29 21 3d 30 2c 0a 20 20 20 20 20 20 28 61 LE)!=0,. (a
3aa0: 45 6e 74 72 79 5b 69 5d 2e 65 54 79 70 65 20 26 Entry[i].eType &
3ab0: 20 43 4d 44 46 4c 41 47 5f 42 4c 4f 43 4b 54 45 CMDFLAG_BLOCKTE
3ac0: 58 54 29 21 3d 30 2c 0a 20 20 20 20 20 20 28 61 XT)!=0,. (a
3ad0: 45 6e 74 72 79 5b 69 5d 2e 65 54 79 70 65 20 26 Entry[i].eType &
3ae0: 20 43 4d 44 46 4c 41 47 5f 53 45 4e 53 49 54 49 CMDFLAG_SENSITI
3af0: 56 45 29 21 3d 30 2c 0a 20 20 20 20 20 20 7a 44 VE)!=0,. zD
3b00: 65 66 2c 20 28 69 6e 74 29 28 31 30 2d 73 74 72 ef, (int)(10-str
3b10: 6c 65 6e 28 7a 44 65 66 29 29 2c 20 22 22 0a 20 len(zDef)), "".
3b20: 20 20 20 29 3b 0a 20 20 20 20 69 66 28 20 61 45 );. if( aE
3b30: 6e 74 72 79 5b 69 5d 2e 7a 49 66 20 29 7b 0a 20 ntry[i].zIf ){.
3b40: 20 20 20 20 20 70 72 69 6e 74 66 28 22 23 65 6e printf("#en
3b50: 64 69 66 5c 6e 22 29 3b 0a 20 20 20 20 7d 0a 20 dif\n");. }.
3b60: 20 7d 0a 20 20 70 72 69 6e 74 66 28 22 7b 30 2c }. printf("{0,
3b70: 30 2c 30 2c 30 2c 30 2c 30 7d 7d 3b 5c 6e 22 29 0,0,0,0,0}};\n")
3b80: 3b 0a 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 50 72 6f 63 ;..}../*.** Proc
3b90: 65 73 73 20 61 20 73 69 6e 67 6c 65 20 66 69 6c ess a single fil
3ba0: 65 20 6f 66 20 69 6e 70 75 74 0a 2a 2f 0a 76 6f e of input.*/.vo
3bb0: 69 64 20 70 72 6f 63 65 73 73 5f 66 69 6c 65 28 id process_file(
3bc0: 76 6f 69 64 29 7b 0a 20 20 46 49 4c 45 20 2a 69 void){. FILE *i
3bd0: 6e 20 3d 20 66 6f 70 65 6e 28 7a 46 69 6c 65 2c n = fopen(zFile,
3be0: 20 22 72 22 29 3b 0a 20 20 63 68 61 72 20 7a 4c "r");. char zL
3bf0: 69 6e 65 5b 32 30 30 30 5d 3b 0a 20 20 69 66 28 ine[2000];. if(
3c00: 20 69 6e 3d 3d 30 20 29 7b 0a 20 20 20 20 66 70 in==0 ){. fp
3c10: 72 69 6e 74 66 28 73 74 64 65 72 72 2c 22 25 73 rintf(stderr,"%s
3c20: 3a 20 63 61 6e 6e 6f 74 20 6f 70 65 6e 5c 6e 22 : cannot open\n"
3c30: 2c 20 7a 46 69 6c 65 29 3b 0a 20 20 20 20 72 65 , zFile);. re
3c40: 74 75 72 6e 3b 0a 20 20 7d 0a 20 20 6e 4c 69 6e turn;. }. nLin
3c50: 65 20 3d 20 30 3b 0a 20 20 77 68 69 6c 65 28 20 e = 0;. while(
3c60: 66 67 65 74 73 28 7a 4c 69 6e 65 2c 20 73 69 7a fgets(zLine, siz
3c70: 65 6f 66 28 7a 4c 69 6e 65 29 2c 20 69 6e 29 20 eof(zLine), in)
3c80: 29 7b 0a 20 20 20 20 6e 4c 69 6e 65 2b 2b 3b 0a ){. nLine++;.
3c90: 20 20 20 20 73 63 61 6e 5f 66 6f 72 5f 69 66 28 scan_for_if(
3ca0: 7a 4c 69 6e 65 29 3b 0a 20 20 20 20 73 63 61 6e zLine);. scan
3cb0: 5f 66 6f 72 5f 6c 61 62 65 6c 28 22 57 45 42 50 _for_label("WEBP
3cc0: 41 47 45 3a 22 2c 7a 4c 69 6e 65 2c 43 4d 44 46 AGE:",zLine,CMDF
3cd0: 4c 41 47 5f 57 45 42 50 41 47 45 29 3b 0a 20 20 LAG_WEBPAGE);.
3ce0: 20 20 73 63 61 6e 5f 66 6f 72 5f 6c 61 62 65 6c scan_for_label
3cf0: 28 22 43 4f 4d 4d 41 4e 44 3a 22 2c 7a 4c 69 6e ("COMMAND:",zLin
3d00: 65 2c 43 4d 44 46 4c 41 47 5f 43 4f 4d 4d 41 4e e,CMDFLAG_COMMAN
3d10: 44 29 3b 0a 20 20 20 20 73 63 61 6e 5f 66 6f 72 D);. scan_for
3d20: 5f 66 75 6e 63 28 7a 4c 69 6e 65 29 3b 0a 20 20 _func(zLine);.
3d30: 20 20 73 63 61 6e 5f 66 6f 72 5f 6c 61 62 65 6c scan_for_label
3d40: 28 22 53 45 54 54 49 4e 47 3a 22 2c 7a 4c 69 6e ("SETTING:",zLin
3d50: 65 2c 43 4d 44 46 4c 41 47 5f 53 45 54 54 49 4e e,CMDFLAG_SETTIN
3d60: 47 29 3b 0a 20 20 20 20 73 63 61 6e 5f 66 6f 72 G);. scan_for
3d70: 5f 64 65 66 61 75 6c 74 28 7a 4c 69 6e 65 29 3b _default(zLine);
3d80: 0a 20 20 7d 0a 20 20 66 63 6c 6f 73 65 28 69 6e . }. fclose(in
3d90: 29 3b 0a 20 20 6e 55 73 65 64 20 3d 20 6e 46 69 );. nUsed = nFi
3da0: 78 65 64 3b 0a 7d 0a 0a 69 6e 74 20 6d 61 69 6e xed;.}..int main
3db0: 28 69 6e 74 20 61 72 67 63 2c 20 63 68 61 72 20 (int argc, char
3dc0: 2a 2a 61 72 67 76 29 7b 0a 20 20 69 6e 74 20 69 **argv){. int i
3dd0: 3b 0a 20 20 6d 65 6d 73 65 74 28 61 45 6e 74 72 ;. memset(aEntr
3de0: 79 2c 20 30 2c 20 73 69 7a 65 6f 66 28 45 6e 74 y, 0, sizeof(Ent
3df0: 72 79 29 20 2a 20 4e 5f 45 4e 54 52 59 29 3b 0a ry) * N_ENTRY);.
3e00: 20 20 66 6f 72 28 69 3d 31 3b 20 69 3c 61 72 67 for(i=1; i<arg
3e10: 63 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 7a 46 69 c; i++){. zFi
3e20: 6c 65 20 3d 20 61 72 67 76 5b 69 5d 3b 0a 20 20 le = argv[i];.
3e30: 20 20 70 72 6f 63 65 73 73 5f 66 69 6c 65 28 29 process_file()
3e40: 3b 0a 20 20 7d 0a 20 20 62 75 69 6c 64 5f 74 61 ;. }. build_ta
3e50: 62 6c 65 28 29 3b 0a 20 20 72 65 74 75 72 6e 20 ble();. return
3e60: 6e 45 72 72 3b 0a 7d 0a nErr;.}.