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 31 34 20 44 2e 20 52 69 63 68 (c) 2014 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 69 73 20 61 20 73 *.** This is a s
0260: 74 61 6e 64 2d 61 6c 6f 6e 65 20 75 74 69 6c 69 tand-alone utili
0270: 74 79 20 70 72 6f 67 72 61 6d 20 74 68 61 74 20 ty program that
0280: 69 73 20 70 61 72 74 20 6f 66 20 74 68 65 20 46 is part of the F
0290: 6f 73 73 69 6c 20 62 75 69 6c 64 0a 2a 2a 20 70 ossil build.** p
02a0: 72 6f 63 65 73 73 2e 20 20 54 68 69 73 20 70 72 rocess. This pr
02b0: 6f 67 72 61 6d 20 72 65 61 64 73 20 66 69 6c 65 ogram reads file
02c0: 73 20 6e 61 6d 65 64 20 6f 6e 20 74 68 65 20 63 s named on the c
02d0: 6f 6d 6d 61 6e 64 20 6c 69 6e 65 20 61 6e 64 20 ommand line and
02e0: 63 6f 6e 76 65 72 74 73 0a 2a 2a 20 74 68 65 6d converts.** them
02f0: 20 69 6e 74 6f 20 41 4e 53 49 2d 43 20 73 74 61 into ANSI-C sta
0300: 74 69 63 20 63 68 61 72 20 61 72 72 61 79 20 76 tic char array v
0310: 61 72 69 61 62 6c 65 73 2e 20 20 4f 75 74 70 75 ariables. Outpu
0320: 74 20 69 73 20 77 72 69 74 74 65 6e 20 6f 6e 74 t is written ont
0330: 6f 0a 2a 2a 20 73 74 61 6e 64 61 72 64 20 6f 75 o.** standard ou
0340: 74 70 75 74 2e 0a 2a 2a 0a 2a 2a 20 41 64 64 69 tput..**.** Addi
0350: 74 69 6f 6e 61 6c 6c 79 2c 20 74 68 65 20 69 6e tionally, the in
0360: 70 75 74 20 66 69 6c 65 73 20 6d 61 79 20 62 65 put files may be
0370: 20 6c 69 73 74 65 64 20 69 6e 20 61 20 73 65 70 listed in a sep
0380: 61 72 61 74 65 20 6c 69 73 74 20 66 69 6c 65 20 arate list file
0390: 28 6f 6e 65 0a 2a 2a 20 72 65 73 6f 75 72 63 65 (one.** resource
03a0: 20 6e 61 6d 65 20 70 65 72 20 6c 69 6e 65 2c 20 name per line,
03b0: 6f 70 74 69 6f 6e 61 6c 6c 79 20 65 6e 63 6c 6f optionally enclo
03c0: 73 65 64 20 69 6e 20 64 6f 75 62 6c 65 20 71 75 sed in double qu
03d0: 6f 74 65 73 29 2e 20 50 61 73 73 20 74 68 65 20 otes). Pass the
03e0: 6c 69 73 74 0a 2a 2a 20 76 69 61 20 27 2d 2d 72 list.** via '--r
03f0: 65 73 6c 69 73 74 20 3c 74 68 65 2d 6c 69 73 74 eslist <the-list
0400: 2d 66 69 6c 65 3e 27 20 6f 70 74 69 6f 6e 2e 20 -file>' option.
0410: 42 6f 74 68 20 6c 69 73 74 73 2c 20 66 72 6f 6d Both lists, from
0420: 20 74 68 65 20 63 6f 6d 6d 61 6e 64 20 6c 69 6e the command lin
0430: 65 20 61 6e 64 0a 2a 2a 20 74 68 65 20 6c 69 73 e and.** the lis
0440: 74 20 66 69 6c 65 2c 20 61 72 65 20 6d 65 72 67 t file, are merg
0450: 65 64 3b 20 64 75 70 6c 69 63 61 74 65 20 66 69 ed; duplicate fi
0460: 6c 65 20 6e 61 6d 65 73 20 73 6b 69 70 70 65 64 le names skipped
0470: 20 66 72 6f 6d 20 70 72 6f 63 65 73 73 69 6e 67 from processing
0480: 2e 0a 2a 2a 20 54 68 69 73 20 6f 70 74 69 6f 6e ..** This option
0490: 20 69 73 20 75 73 65 66 75 6c 20 74 6f 20 67 65 is useful to ge
04a0: 74 20 61 72 6f 75 6e 64 20 74 68 65 20 63 6f 6d t around the com
04b0: 6d 61 6e 64 20 6c 69 6e 65 20 6c 65 6e 67 74 68 mand line length
04c0: 20 6c 69 6d 69 74 61 74 69 6f 6e 73 0a 2a 2a 20 limitations.**
04d0: 75 6e 64 65 72 20 73 6f 6d 65 20 4f 53 2c 20 6c under some OS, l
04e0: 69 6b 65 20 57 69 6e 64 6f 77 73 2e 0a 2a 2a 0a ike Windows..**.
04f0: 2a 2a 20 54 68 65 20 6d 61 6b 65 66 69 6c 65 73 ** The makefiles
0500: 20 75 73 65 20 74 68 69 73 20 75 74 69 6c 69 74 use this utilit
0510: 79 20 74 6f 20 70 61 63 6b 61 67 65 20 76 61 72 y to package var
0520: 69 6f 75 73 20 72 65 73 6f 75 72 63 65 73 20 28 ious resources (
0530: 6c 61 72 67 65 20 73 63 72 69 70 74 73 2c 0a 2a large scripts,.*
0540: 2a 20 47 49 46 20 69 6d 61 67 65 73 2c 20 65 74 * GIF images, et
0550: 63 29 20 74 68 61 74 20 61 72 65 20 73 65 70 61 c) that are sepa
0560: 72 61 74 65 20 66 69 6c 65 73 20 69 6e 20 74 68 rate files in th
0570: 65 20 73 6f 75 72 63 65 20 63 6f 64 65 20 61 73 e source code as
0580: 20 62 79 74 65 0a 2a 2a 20 61 72 72 61 79 73 20 byte.** arrays
0590: 69 6e 20 74 68 65 20 72 65 73 75 6c 74 69 6e 67 in the resulting
05a0: 20 65 78 65 63 75 74 61 62 6c 65 2e 0a 2a 2f 0a executable..*/.
05b0: 23 69 6e 63 6c 75 64 65 20 3c 73 74 64 69 6f 2e #include <stdio.
05c0: 68 3e 0a 23 69 6e 63 6c 75 64 65 20 3c 73 74 64 h>.#include <std
05d0: 6c 69 62 2e 68 3e 0a 23 69 6e 63 6c 75 64 65 20 lib.h>.#include
05e0: 3c 73 74 72 69 6e 67 2e 68 3e 0a 23 69 6e 63 6c <string.h>.#incl
05f0: 75 64 65 20 3c 63 74 79 70 65 2e 68 3e 0a 0a 2f ude <ctype.h>../
0600: 2a 0a 2a 2a 20 52 65 61 64 20 74 68 65 20 65 6e *.** Read the en
0610: 74 69 72 65 20 63 6f 6e 74 65 6e 74 20 6f 66 20 tire content of
0620: 74 68 65 20 66 69 6c 65 20 6e 61 6d 65 64 20 7a the file named z
0630: 46 69 6c 65 6e 61 6d 65 20 69 6e 74 6f 20 6d 65 Filename into me
0640: 6d 6f 72 79 20 6f 62 74 61 69 6e 65 64 0a 2a 2a mory obtained.**
0650: 20 66 72 6f 6d 20 6d 61 6c 6c 6f 63 28 29 20 61 from malloc() a
0660: 6e 64 20 72 65 74 75 72 6e 20 61 20 70 6f 69 6e nd return a poin
0670: 74 65 72 20 74 6f 20 74 68 61 74 20 6d 65 6d 6f ter to that memo
0680: 72 79 2e 20 20 57 72 69 74 65 20 74 68 65 20 73 ry. Write the s
0690: 69 7a 65 20 6f 66 20 74 68 65 0a 2a 2a 20 66 69 ize of the.** fi
06a0: 6c 65 20 69 6e 74 6f 20 2a 70 6e 42 79 74 65 2e le into *pnByte.
06b0: 0a 2a 2f 0a 73 74 61 74 69 63 20 75 6e 73 69 67 .*/.static unsig
06c0: 6e 65 64 20 63 68 61 72 20 2a 72 65 61 64 5f 66 ned char *read_f
06d0: 69 6c 65 28 63 6f 6e 73 74 20 63 68 61 72 20 2a ile(const char *
06e0: 7a 46 69 6c 65 6e 61 6d 65 2c 20 69 6e 74 20 2a zFilename, int *
06f0: 70 6e 42 79 74 65 29 7b 0a 20 20 46 49 4c 45 20 pnByte){. FILE
0700: 2a 69 6e 3b 0a 20 20 75 6e 73 69 67 6e 65 64 20 *in;. unsigned
0710: 63 68 61 72 20 2a 7a 3b 0a 20 20 69 6e 74 20 6e char *z;. int n
0720: 42 79 74 65 3b 0a 20 20 69 6e 74 20 67 6f 74 3b Byte;. int got;
0730: 0a 20 20 69 6e 20 3d 20 66 6f 70 65 6e 28 7a 46 . in = fopen(zF
0740: 69 6c 65 6e 61 6d 65 2c 20 22 72 62 22 29 3b 0a ilename, "rb");.
0750: 20 20 69 66 28 20 69 6e 3d 3d 30 20 29 7b 0a 20 if( in==0 ){.
0760: 20 20 20 72 65 74 75 72 6e 20 30 3b 0a 20 20 7d return 0;. }
0770: 0a 20 20 66 73 65 65 6b 28 69 6e 2c 20 30 2c 20 . fseek(in, 0,
0780: 53 45 45 4b 5f 45 4e 44 29 3b 0a 20 20 2a 70 6e SEEK_END);. *pn
0790: 42 79 74 65 20 3d 20 6e 42 79 74 65 20 3d 20 66 Byte = nByte = f
07a0: 74 65 6c 6c 28 69 6e 29 3b 0a 20 20 66 73 65 65 tell(in);. fsee
07b0: 6b 28 69 6e 2c 20 30 2c 20 53 45 45 4b 5f 53 45 k(in, 0, SEEK_SE
07c0: 54 29 3b 0a 20 20 7a 20 3d 20 6d 61 6c 6c 6f 63 T);. z = malloc
07d0: 28 20 6e 42 79 74 65 2b 31 20 29 3b 0a 20 20 69 ( nByte+1 );. i
07e0: 66 28 20 7a 3d 3d 30 20 29 7b 0a 20 20 20 20 66 f( z==0 ){. f
07f0: 70 72 69 6e 74 66 28 73 74 64 65 72 72 2c 20 22 printf(stderr, "
0800: 66 61 69 6c 65 64 20 74 6f 20 61 6c 6c 6f 63 61 failed to alloca
0810: 74 65 20 25 64 20 62 79 74 65 73 5c 6e 22 2c 20 te %d bytes\n",
0820: 6e 42 79 74 65 2b 31 29 3b 0a 20 20 20 20 65 78 nByte+1);. ex
0830: 69 74 28 31 29 3b 0a 20 20 7d 0a 20 20 67 6f 74 it(1);. }. got
0840: 20 3d 20 66 72 65 61 64 28 7a 2c 20 31 2c 20 6e = fread(z, 1, n
0850: 42 79 74 65 2c 20 69 6e 29 3b 0a 20 20 66 63 6c Byte, in);. fcl
0860: 6f 73 65 28 69 6e 29 3b 0a 20 20 7a 5b 67 6f 74 ose(in);. z[got
0870: 5d 20 3d 20 30 3b 0a 20 20 72 65 74 75 72 6e 20 ] = 0;. return
0880: 7a 3b 0a 7d 0a 0a 23 69 66 6e 64 65 66 20 46 4f z;.}..#ifndef FO
0890: 53 53 49 4c 5f 44 45 42 55 47 0a 2f 2a 0a 2a 2a SSIL_DEBUG./*.**
08a0: 20 54 72 79 20 74 6f 20 63 6f 6d 70 72 65 73 73 Try to compress
08b0: 20 61 20 6a 61 76 61 73 63 72 69 70 74 20 66 69 a javascript fi
08c0: 6c 65 20 62 79 20 72 65 6d 6f 76 69 6e 67 20 75 le by removing u
08d0: 6e 6e 65 63 65 73 73 61 72 79 20 77 68 69 74 65 nnecessary white
08e0: 73 70 61 63 65 2e 0a 2a 2a 0a 2a 2a 20 57 61 72 space..**.** War
08f0: 6e 69 6e 67 3a 20 20 54 68 69 73 20 63 6f 6d 70 ning: This comp
0900: 72 65 73 73 69 6f 6e 20 72 6f 75 74 69 6e 65 20 ression routine
0910: 64 6f 65 73 20 6e 6f 74 20 6e 65 63 65 73 73 61 does not necessa
0920: 72 69 6c 79 20 77 6f 72 6b 20 66 6f 72 20 61 6e rily work for an
0930: 79 0a 2a 2a 20 61 72 62 69 74 72 61 72 79 20 4a y.** arbitrary J
0940: 61 76 61 73 63 72 69 70 74 20 73 6f 75 72 63 65 avascript source
0950: 20 66 69 6c 65 2e 20 20 42 75 74 20 69 74 20 73 file. But it s
0960: 68 6f 75 6c 64 20 77 6f 72 6b 20 6f 6b 20 66 6f hould work ok fo
0970: 72 20 74 68 65 0a 2a 2a 20 77 65 6c 6c 2d 62 65 r the.** well-be
0980: 68 61 76 65 64 20 73 6f 75 72 63 65 20 66 69 6c haved source fil
0990: 65 73 20 69 6e 20 74 68 69 73 20 70 72 6f 6a 65 es in this proje
09a0: 63 74 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 76 6f ct..*/.static vo
09b0: 69 64 20 63 6f 6d 70 72 65 73 73 4a 61 76 61 73 id compressJavas
09c0: 63 72 69 70 74 28 75 6e 73 69 67 6e 65 64 20 63 cript(unsigned c
09d0: 68 61 72 20 2a 7a 2c 20 69 6e 74 20 2a 70 6e 29 har *z, int *pn)
09e0: 7b 0a 20 20 69 6e 74 20 6e 20 3d 20 2a 70 6e 3b {. int n = *pn;
09f0: 0a 20 20 69 6e 74 20 69 2c 20 6a 2c 20 6b 3b 0a . int i, j, k;.
0a00: 20 20 66 6f 72 28 69 3d 6a 3d 30 3b 20 69 3c 6e for(i=j=0; i<n
0a10: 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 75 6e 73 69 ; i++){. unsi
0a20: 67 6e 65 64 20 63 68 61 72 20 63 20 3d 20 7a 5b gned char c = z[
0a30: 69 5d 3b 0a 20 20 20 20 69 66 28 20 63 3d 3d 27 i];. if( c=='
0a40: 2f 27 20 29 7b 0a 20 20 20 20 20 20 69 66 28 20 /' ){. if(
0a50: 7a 5b 69 2b 31 5d 3d 3d 27 2a 27 20 29 7b 0a 20 z[i+1]=='*' ){.
0a60: 20 20 20 20 20 20 20 77 68 69 6c 65 28 20 6a 3e while( j>
0a70: 30 20 26 26 20 28 7a 5b 6a 2d 31 5d 3d 3d 27 20 0 && (z[j-1]=='
0a80: 27 20 7c 7c 20 7a 5b 6a 2d 31 5d 3d 3d 27 5c 74 ' || z[j-1]=='\t
0a90: 27 29 20 29 7b 20 6a 2d 2d 3b 20 7d 0a 20 20 20 ') ){ j--; }.
0aa0: 20 20 20 20 20 66 6f 72 28 6b 3d 69 2b 33 3b 20 for(k=i+3;
0ab0: 6b 3c 6e 20 26 26 20 28 7a 5b 6b 5d 21 3d 27 2f k<n && (z[k]!='/
0ac0: 27 20 7c 7c 20 7a 5b 6b 2d 31 5d 21 3d 27 2a 27 ' || z[k-1]!='*'
0ad0: 29 3b 20 6b 2b 2b 29 7b 7d 0a 20 20 20 20 20 20 ); k++){}.
0ae0: 20 20 69 20 3d 20 6b 3b 0a 20 20 20 20 20 20 20 i = k;.
0af0: 20 63 6f 6e 74 69 6e 75 65 3b 0a 20 20 20 20 20 continue;.
0b00: 20 7d 65 6c 73 65 20 69 66 28 20 7a 5b 69 2b 31 }else if( z[i+1
0b10: 5d 3d 3d 27 2f 27 20 29 7b 0a 20 20 20 20 20 20 ]=='/' ){.
0b20: 20 20 77 68 69 6c 65 28 20 6a 3e 30 20 26 26 20 while( j>0 &&
0b30: 28 7a 5b 6a 2d 31 5d 3d 3d 27 20 27 20 7c 7c 20 (z[j-1]==' ' ||
0b40: 7a 5b 6a 2d 31 5d 3d 3d 27 5c 74 27 29 20 29 7b z[j-1]=='\t') ){
0b50: 20 6a 2d 2d 3b 20 7d 0a 20 20 20 20 20 20 20 20 j--; }.
0b60: 66 6f 72 28 6b 3d 69 2b 32 3b 20 6b 3c 6e 20 26 for(k=i+2; k<n &
0b70: 26 20 7a 5b 6b 5d 21 3d 27 5c 6e 27 3b 20 6b 2b & z[k]!='\n'; k+
0b80: 2b 29 7b 7d 0a 20 20 20 20 20 20 20 20 69 20 3d +){}. i =
0b90: 20 6b 2d 31 3b 0a 20 20 20 20 20 20 20 20 63 6f k-1;. co
0ba0: 6e 74 69 6e 75 65 3b 0a 20 20 20 20 20 20 7d 0a ntinue;. }.
0bb0: 20 20 20 20 7d 0a 20 20 20 20 69 66 28 20 63 3d }. if( c=
0bc0: 3d 27 5c 6e 27 20 29 7b 0a 20 20 20 20 20 20 69 ='\n' ){. i
0bd0: 66 28 20 6a 3d 3d 30 20 29 20 63 6f 6e 74 69 6e f( j==0 ) contin
0be0: 75 65 3b 0a 20 20 20 20 20 20 77 68 69 6c 65 28 ue;. while(
0bf0: 20 6a 3e 30 20 26 26 20 69 73 73 70 61 63 65 28 j>0 && isspace(
0c00: 7a 5b 6a 2d 31 5d 29 20 29 20 6a 2d 2d 3b 0a 20 z[j-1]) ) j--;.
0c10: 20 20 20 20 20 7a 5b 6a 2b 2b 5d 20 3d 20 27 5c z[j++] = '\
0c20: 6e 27 3b 0a 20 20 20 20 20 20 77 68 69 6c 65 28 n';. while(
0c30: 20 69 2b 31 3c 6e 20 26 26 20 69 73 73 70 61 63 i+1<n && isspac
0c40: 65 28 7a 5b 69 2b 31 5d 29 20 29 20 69 2b 2b 3b e(z[i+1]) ) i++;
0c50: 0a 20 20 20 20 20 20 63 6f 6e 74 69 6e 75 65 3b . continue;
0c60: 0a 20 20 20 20 7d 0a 20 20 20 20 7a 5b 6a 2b 2b . }. z[j++
0c70: 5d 20 3d 20 63 3b 0a 20 20 7d 0a 20 20 7a 5b 6a ] = c;. }. z[j
0c80: 5d 20 3d 20 30 3b 0a 20 20 2a 70 6e 20 3d 20 6a ] = 0;. *pn = j
0c90: 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 46 4f ;.}.#endif /* FO
0ca0: 53 53 49 4c 5f 44 45 42 55 47 20 2a 2f 0a 0a 2f SSIL_DEBUG */../
0cb0: 2a 0a 2a 2a 20 54 68 65 72 65 20 69 73 20 61 6e *.** There is an
0cc0: 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 65 instance of the
0cd0: 20 66 6f 6c 6c 6f 77 69 6e 67 20 66 6f 72 20 65 following for e
0ce0: 61 63 68 20 66 69 6c 65 20 74 72 61 6e 73 6c 61 ach file transla
0cf0: 74 65 64 2e 0a 2a 2f 0a 74 79 70 65 64 65 66 20 ted..*/.typedef
0d00: 73 74 72 75 63 74 20 52 65 73 6f 75 72 63 65 20 struct Resource
0d10: 52 65 73 6f 75 72 63 65 3b 0a 73 74 72 75 63 74 Resource;.struct
0d20: 20 52 65 73 6f 75 72 63 65 20 7b 0a 20 20 63 68 Resource {. ch
0d30: 61 72 20 2a 7a 4e 61 6d 65 3b 0a 20 20 69 6e 74 ar *zName;. int
0d40: 20 6e 42 79 74 65 3b 0a 20 20 69 6e 74 20 69 64 nByte;. int id
0d50: 78 3b 0a 7d 3b 0a 0a 74 79 70 65 64 65 66 20 73 x;.};..typedef s
0d60: 74 72 75 63 74 20 52 65 73 6f 75 72 63 65 4c 69 truct ResourceLi
0d70: 73 74 20 52 65 73 6f 75 72 63 65 4c 69 73 74 3b st ResourceList;
0d80: 0a 73 74 72 75 63 74 20 52 65 73 6f 75 72 63 65 .struct Resource
0d90: 4c 69 73 74 20 7b 0a 20 20 20 20 52 65 73 6f 75 List {. Resou
0da0: 72 63 65 20 2a 61 52 65 73 3b 0a 20 20 20 20 69 rce *aRes;. i
0db0: 6e 74 20 6e 52 65 73 3b 0a 20 20 20 20 63 68 61 nt nRes;. cha
0dc0: 72 20 2a 62 75 66 3b 0a 20 20 20 20 6c 6f 6e 67 r *buf;. long
0dd0: 20 62 75 66 73 69 7a 65 3b 0a 7d 3b 0a 0a 0a 52 bufsize;.};...R
0de0: 65 73 6f 75 72 63 65 20 2a 72 65 61 64 5f 72 65 esource *read_re
0df0: 73 6c 69 73 74 28 63 68 61 72 20 2a 6e 61 6d 65 slist(char *name
0e00: 2c 20 52 65 73 6f 75 72 63 65 4c 69 73 74 20 2a , ResourceList *
0e10: 6c 69 73 74 29 7b 0a 23 64 65 66 69 6e 65 20 52 list){.#define R
0e20: 45 53 4c 49 53 54 5f 42 55 46 5f 4d 41 58 42 59 ESLIST_BUF_MAXBY
0e30: 54 45 53 20 28 31 4c 3c 3c 32 30 29 20 20 2f 2a TES (1L<<20) /*
0e40: 20 31 20 4d 42 20 6f 66 20 74 65 78 74 20 2a 2f 1 MB of text */
0e50: 0a 20 20 46 49 4c 45 20 2a 69 6e 3b 0a 20 20 6c . FILE *in;. l
0e60: 6f 6e 67 20 66 69 6c 65 73 69 7a 65 20 3d 20 30 ong filesize = 0
0e70: 4c 3b 0a 20 20 6c 6f 6e 67 20 6c 69 6e 65 63 6f L;. long lineco
0e80: 75 6e 74 20 3d 20 30 4c 3b 0a 20 20 63 68 61 72 unt = 0L;. char
0e90: 20 2a 70 20 3d 20 30 3b 0a 20 20 63 68 61 72 20 *p = 0;. char
0ea0: 2a 70 62 20 3d 20 30 3b 0a 0a 20 20 6d 65 6d 73 *pb = 0;.. mems
0eb0: 65 74 28 6c 69 73 74 2c 20 30 2c 20 73 69 7a 65 et(list, 0, size
0ec0: 6f 66 28 2a 6c 69 73 74 29 29 3b 0a 0a 20 20 69 of(*list));.. i
0ed0: 66 28 20 28 69 6e 20 3d 20 66 6f 70 65 6e 28 6e f( (in = fopen(n
0ee0: 61 6d 65 2c 20 22 72 62 22 29 29 3d 3d 30 20 29 ame, "rb"))==0 )
0ef0: 7b 0a 20 20 20 20 72 65 74 75 72 6e 20 6c 69 73 {. return lis
0f00: 74 2d 3e 61 52 65 73 3b 0a 20 20 7d 0a 20 20 66 t->aRes;. }. f
0f10: 73 65 65 6b 28 69 6e 2c 20 30 4c 2c 20 53 45 45 seek(in, 0L, SEE
0f20: 4b 5f 45 4e 44 29 3b 0a 20 20 66 69 6c 65 73 69 K_END);. filesi
0f30: 7a 65 20 3d 20 66 74 65 6c 6c 28 69 6e 29 3b 0a ze = ftell(in);.
0f40: 20 20 72 65 77 69 6e 64 28 69 6e 29 3b 0a 0a 20 rewind(in);..
0f50: 20 69 66 28 20 66 69 6c 65 73 69 7a 65 20 3e 20 if( filesize >
0f60: 52 45 53 4c 49 53 54 5f 42 55 46 5f 4d 41 58 42 RESLIST_BUF_MAXB
0f70: 59 54 45 53 20 29 7b 0a 20 20 20 20 66 70 72 69 YTES ){. fpri
0f80: 6e 74 66 28 73 74 64 65 72 72 2c 20 22 4c 69 73 ntf(stderr, "Lis
0f90: 74 20 66 69 6c 65 20 5b 25 73 5d 20 6d 75 73 74 t file [%s] must
0fa0: 20 62 65 20 73 6d 61 6c 6c 65 72 20 74 68 61 6e be smaller than
0fb0: 20 25 6c 64 20 62 79 74 65 73 5c 6e 22 2c 20 6e %ld bytes\n", n
0fc0: 61 6d 65 2c 0a 20 20 20 20 20 20 20 20 20 20 20 ame,.
0fd0: 20 52 45 53 4c 49 53 54 5f 42 55 46 5f 4d 41 58 RESLIST_BUF_MAX
0fe0: 42 59 54 45 53 29 3b 0a 20 20 20 20 72 65 74 75 BYTES);. retu
0ff0: 72 6e 20 6c 69 73 74 2d 3e 61 52 65 73 3b 0a 20 rn list->aRes;.
1000: 20 7d 0a 20 20 6c 69 73 74 2d 3e 62 75 66 73 69 }. list->bufsi
1010: 7a 65 20 3d 20 66 69 6c 65 73 69 7a 65 3b 0a 20 ze = filesize;.
1020: 20 6c 69 73 74 2d 3e 62 75 66 20 3d 20 28 63 68 list->buf = (ch
1030: 61 72 20 2a 29 63 61 6c 6c 6f 63 28 28 6c 69 73 ar *)calloc((lis
1040: 74 2d 3e 62 75 66 73 69 7a 65 20 2b 20 32 29 2c t->bufsize + 2),
1050: 20 73 69 7a 65 6f 66 28 6c 69 73 74 2d 3e 62 75 sizeof(list->bu
1060: 66 5b 30 5d 29 29 3b 0a 20 20 69 66 28 20 6c 69 f[0]));. if( li
1070: 73 74 2d 3e 62 75 66 3d 3d 30 20 29 7b 0a 20 20 st->buf==0 ){.
1080: 20 20 66 70 72 69 6e 74 66 28 73 74 64 65 72 72 fprintf(stderr
1090: 2c 20 22 66 61 69 6c 65 64 20 74 6f 20 61 6c 6c , "failed to all
10a0: 6f 63 61 74 65 64 20 25 6c 64 20 62 79 74 65 73 ocated %ld bytes
10b0: 5c 6e 22 2c 20 6c 69 73 74 2d 3e 62 75 66 73 69 \n", list->bufsi
10c0: 7a 65 20 2b 20 31 29 3b 0a 20 20 20 20 6c 69 73 ze + 1);. lis
10d0: 74 2d 3e 62 75 66 73 69 7a 65 20 3d 20 30 4c 3b t->bufsize = 0L;
10e0: 0a 20 20 20 20 72 65 74 75 72 6e 20 6c 69 73 74 . return list
10f0: 2d 3e 61 52 65 73 3b 0a 20 20 7d 0a 20 20 66 69 ->aRes;. }. fi
1100: 6c 65 73 69 7a 65 20 3d 20 66 72 65 61 64 28 6c lesize = fread(l
1110: 69 73 74 2d 3e 62 75 66 2c 20 73 69 7a 65 6f 66 ist->buf, sizeof
1120: 28 6c 69 73 74 2d 3e 62 75 66 5b 30 5d 29 2c 6c (list->buf[0]),l
1130: 69 73 74 2d 3e 62 75 66 73 69 7a 65 2c 20 69 6e ist->bufsize, in
1140: 29 3b 0a 20 20 69 66 20 28 20 66 69 6c 65 73 69 );. if ( filesi
1150: 7a 65 21 3d 6c 69 73 74 2d 3e 62 75 66 73 69 7a ze!=list->bufsiz
1160: 65 20 29 7b 0a 20 20 20 20 66 70 72 69 6e 74 66 e ){. fprintf
1170: 28 73 74 64 65 72 72 2c 20 22 66 61 69 6c 65 64 (stderr, "failed
1180: 20 74 6f 20 72 65 61 64 20 5b 25 73 5d 5c 6e 22 to read [%s]\n"
1190: 2c 20 6e 61 6d 65 29 3b 0a 20 20 20 20 72 65 74 , name);. ret
11a0: 75 72 6e 20 6c 69 73 74 2d 3e 61 52 65 73 3b 0a urn list->aRes;.
11b0: 20 20 7d 0a 20 20 66 63 6c 6f 73 65 28 69 6e 29 }. fclose(in)
11c0: 3b 0a 0a 20 20 2f 2a 0a 20 20 2a 2a 20 61 70 70 ;.. /*. ** app
11d0: 65 6e 64 20 61 6e 20 65 78 74 72 61 20 6e 65 77 end an extra new
11e0: 6c 69 6e 65 20 28 69 66 20 6d 69 73 73 69 6e 67 line (if missing
11f0: 29 20 66 6f 72 20 61 20 63 6f 72 72 65 63 74 20 ) for a correct
1200: 6c 69 6e 65 20 63 6f 75 6e 74 0a 20 20 2a 2f 0a line count. */.
1210: 20 20 69 66 28 20 6c 69 73 74 2d 3e 62 75 66 5b if( list->buf[
1220: 6c 69 73 74 2d 3e 62 75 66 73 69 7a 65 2d 31 5d list->bufsize-1]
1230: 21 3d 27 5c 6e 27 20 29 20 6c 69 73 74 2d 3e 62 !='\n' ) list->b
1240: 75 66 5b 6c 69 73 74 2d 3e 62 75 66 73 69 7a 65 uf[list->bufsize
1250: 5d 3d 27 5c 6e 27 3b 0a 0a 20 20 6c 69 6e 65 63 ]='\n';.. linec
1260: 6f 75 6e 74 20 3d 20 30 4c 3b 0a 20 20 66 6f 72 ount = 0L;. for
1270: 28 20 70 20 3d 20 73 74 72 63 68 72 28 6c 69 73 ( p = strchr(lis
1280: 74 2d 3e 62 75 66 2c 20 27 5c 6e 27 29 3b 0a 20 t->buf, '\n');.
1290: 20 20 20 20 20 20 70 20 26 26 20 70 20 3c 3d 20 p && p <=
12a0: 26 6c 69 73 74 2d 3e 62 75 66 5b 6c 69 73 74 2d &list->buf[list-
12b0: 3e 62 75 66 73 69 7a 65 2d 31 5d 3b 0a 20 20 20 >bufsize-1];.
12c0: 20 20 20 20 70 20 3d 20 73 74 72 63 68 72 28 2b p = strchr(+
12d0: 2b 70 2c 20 27 5c 6e 27 29 20 29 7b 0a 20 20 20 +p, '\n') ){.
12e0: 20 2b 2b 6c 69 6e 65 63 6f 75 6e 74 3b 0a 20 20 ++linecount;.
12f0: 7d 0a 0a 20 20 6c 69 73 74 2d 3e 61 52 65 73 20 }.. list->aRes
1300: 3d 20 28 52 65 73 6f 75 72 63 65 20 2a 29 63 61 = (Resource *)ca
1310: 6c 6c 6f 63 28 6c 69 6e 65 63 6f 75 6e 74 2b 31 lloc(linecount+1
1320: 2c 20 73 69 7a 65 6f 66 28 6c 69 73 74 2d 3e 61 , sizeof(list->a
1330: 52 65 73 5b 30 5d 29 29 3b 0a 20 20 66 6f 72 28 Res[0]));. for(
1340: 20 70 62 20 3d 20 6c 69 73 74 2d 3e 62 75 66 2c pb = list->buf,
1350: 20 70 20 3d 20 73 74 72 63 68 72 28 70 62 2c 20 p = strchr(pb,
1360: 27 5c 6e 27 29 3b 0a 20 20 20 20 20 20 20 70 20 '\n');. p
1370: 26 26 20 70 20 3c 3d 20 26 6c 69 73 74 2d 3e 62 && p <= &list->b
1380: 75 66 5b 6c 69 73 74 2d 3e 62 75 66 73 69 7a 65 uf[list->bufsize
1390: 2d 31 5d 3b 0a 20 20 20 20 20 20 20 70 62 20 3d -1];. pb =
13a0: 20 2b 2b 70 2c 20 70 20 3d 20 73 74 72 63 68 72 ++p, p = strchr
13b0: 28 70 62 2c 20 27 5c 6e 27 29 20 29 7b 0a 0a 20 (pb, '\n') ){..
13c0: 20 20 20 63 68 61 72 20 2a 70 61 74 68 20 3d 20 char *path =
13d0: 70 62 3b 0a 20 20 20 20 63 68 61 72 20 2a 70 65 pb;. char *pe
13e0: 20 3d 20 70 20 2d 20 31 3b 0a 0a 20 20 20 20 2f = p - 1;.. /
13f0: 2a 20 73 74 72 69 70 20 6c 65 61 64 69 6e 67 20 * strip leading
1400: 61 6e 64 20 74 72 61 69 6c 69 6e 67 20 77 68 69 and trailing whi
1410: 74 65 73 70 61 63 65 20 2a 2f 0a 20 20 20 20 77 tespace */. w
1420: 68 69 6c 65 28 20 70 61 74 68 20 3c 20 70 20 26 hile( path < p &
1430: 26 20 69 73 73 70 61 63 65 28 2a 70 61 74 68 29 & isspace(*path)
1440: 20 29 20 2b 2b 70 61 74 68 3b 0a 20 20 20 20 77 ) ++path;. w
1450: 68 69 6c 65 28 20 70 65 20 3e 20 70 61 74 68 20 hile( pe > path
1460: 26 26 20 69 73 73 70 61 63 65 28 2a 70 65 29 20 && isspace(*pe)
1470: 29 7b 0a 20 20 20 20 20 20 2a 70 65 20 3d 20 27 ){. *pe = '
1480: 5c 30 27 3b 0a 20 20 20 20 20 20 2d 2d 70 65 3b \0';. --pe;
1490: 0a 20 20 20 20 7d 0a 0a 20 20 20 20 2f 2a 20 73 . }.. /* s
14a0: 74 72 69 70 20 6f 75 74 65 72 20 71 75 6f 74 65 trip outer quote
14b0: 73 20 2a 2f 0a 20 20 20 20 77 68 69 6c 65 28 20 s */. while(
14c0: 70 61 74 68 20 3c 20 70 20 26 26 20 2a 70 61 74 path < p && *pat
14d0: 68 3d 3d 27 5c 22 27 29 20 2b 2b 70 61 74 68 3b h=='\"') ++path;
14e0: 0a 20 20 20 20 77 68 69 6c 65 28 20 70 65 20 3e . while( pe >
14f0: 20 70 61 74 68 20 26 26 20 2a 70 65 3d 3d 27 5c path && *pe=='\
1500: 22 27 20 29 7b 0a 20 20 20 20 20 20 2a 70 65 20 "' ){. *pe
1510: 3d 20 27 5c 30 27 3b 0a 20 20 20 20 20 20 2d 2d = '\0';. --
1520: 70 65 3b 0a 20 20 20 20 7d 0a 20 20 20 20 2a 70 pe;. }. *p
1530: 20 3d 20 27 5c 30 27 3b 0a 0a 20 20 20 20 2f 2a = '\0';.. /*
1540: 20 73 6b 69 70 20 65 6d 70 74 79 20 70 61 74 68 skip empty path
1550: 20 2a 2f 0a 20 20 20 20 69 66 28 20 2a 70 61 74 */. if( *pat
1560: 68 20 29 7b 0a 20 20 20 20 20 20 6c 69 73 74 2d h ){. list-
1570: 3e 61 52 65 73 5b 6c 69 73 74 2d 3e 6e 52 65 73 >aRes[list->nRes
1580: 5d 2e 7a 4e 61 6d 65 20 3d 20 70 61 74 68 3b 0a ].zName = path;.
1590: 20 20 20 20 20 20 2b 2b 28 6c 69 73 74 2d 3e 6e ++(list->n
15a0: 52 65 73 29 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a Res);. }. }.
15b0: 20 20 72 65 74 75 72 6e 20 6c 69 73 74 2d 3e 61 return list->a
15c0: 52 65 73 3b 0a 7d 0a 0a 76 6f 69 64 20 66 72 65 Res;.}..void fre
15d0: 65 5f 72 65 73 6c 69 73 74 28 52 65 73 6f 75 72 e_reslist(Resour
15e0: 63 65 4c 69 73 74 20 2a 6c 69 73 74 29 7b 0a 20 ceList *list){.
15f0: 20 69 66 28 20 6c 69 73 74 20 29 7b 0a 20 20 20 if( list ){.
1600: 20 69 66 28 20 6c 69 73 74 2d 3e 62 75 66 20 29 if( list->buf )
1610: 20 66 72 65 65 28 6c 69 73 74 2d 3e 62 75 66 29 free(list->buf)
1620: 3b 0a 20 20 20 20 69 66 28 20 6c 69 73 74 2d 3e ;. if( list->
1630: 61 52 65 73 29 20 66 72 65 65 28 6c 69 73 74 2d aRes) free(list-
1640: 3e 61 52 65 73 29 3b 0a 20 20 20 20 6d 65 6d 73 >aRes);. mems
1650: 65 74 28 6c 69 73 74 2c 20 30 2c 20 73 69 7a 65 et(list, 0, size
1660: 6f 66 28 2a 6c 69 73 74 29 29 3b 0a 20 20 7d 0a of(*list));. }.
1670: 7d 0a 0a 2f 2a 0a 2a 2a 20 43 6f 6d 70 61 72 65 }../*.** Compare
1680: 20 74 77 6f 20 52 65 73 6f 75 72 63 65 20 6f 62 two Resource ob
1690: 6a 65 63 74 73 20 66 6f 72 20 73 6f 72 74 69 6e jects for sortin
16a0: 67 20 70 75 72 70 6f 73 65 73 2e 20 20 54 68 65 g purposes. The
16b0: 79 20 73 6f 72 74 0a 2a 2a 20 69 6e 20 7a 4e 61 y sort.** in zNa
16c0: 6d 65 20 6f 72 64 65 72 20 73 6f 20 74 68 61 74 me order so that
16d0: 20 46 6f 73 73 69 6c 20 63 61 6e 20 73 65 61 72 Fossil can sear
16e0: 63 68 20 66 6f 72 20 72 65 73 6f 75 72 63 65 73 ch for resources
16f0: 20 75 73 69 6e 67 0a 2a 2a 20 61 20 62 69 6e 61 using.** a bina
1700: 72 79 20 73 65 61 72 63 68 2e 0a 2a 2f 0a 74 79 ry search..*/.ty
1710: 70 65 64 65 66 20 69 6e 74 20 28 2a 51 73 6f 72 pedef int (*Qsor
1720: 74 43 6f 6d 70 61 72 65 46 75 6e 63 29 28 63 6f tCompareFunc)(co
1730: 6e 73 74 20 76 6f 69 64 20 2a 2c 20 63 6f 6e 73 nst void *, cons
1740: 74 20 76 6f 69 64 2a 29 3b 0a 0a 73 74 61 74 69 t void*);..stati
1750: 63 20 69 6e 74 20 63 6f 6d 70 61 72 65 52 65 73 c int compareRes
1760: 6f 75 72 63 65 28 63 6f 6e 73 74 20 52 65 73 6f ource(const Reso
1770: 75 72 63 65 20 2a 61 2c 20 63 6f 6e 73 74 20 52 urce *a, const R
1780: 65 73 6f 75 72 63 65 20 2a 62 29 7b 0a 20 20 72 esource *b){. r
1790: 65 74 75 72 6e 20 73 74 72 63 6d 70 28 61 2d 3e eturn strcmp(a->
17a0: 7a 4e 61 6d 65 2c 20 62 2d 3e 7a 4e 61 6d 65 29 zName, b->zName)
17b0: 3b 0a 7d 0a 0a 69 6e 74 20 72 65 6d 6f 76 65 5f ;.}..int remove_
17c0: 64 75 70 6c 69 63 61 74 65 73 28 52 65 73 6f 75 duplicates(Resou
17d0: 72 63 65 4c 69 73 74 20 2a 6c 69 73 74 29 7b 0a rceList *list){.
17e0: 20 20 63 68 61 72 20 64 75 70 4e 61 6d 65 41 73 char dupNameAs
17f0: 63 5b 36 34 5d 20 3d 20 22 5c 32 35 35 22 3b 0a c[64] = "\255";.
1800: 20 20 63 68 61 72 20 64 75 70 4e 61 6d 65 44 65 char dupNameDe
1810: 73 63 5b 36 34 5d 20 3d 20 22 22 3b 0a 20 20 52 sc[64] = "";. R
1820: 65 73 6f 75 72 63 65 20 64 75 70 52 65 73 41 73 esource dupResAs
1830: 63 3b 0a 20 20 52 65 73 6f 75 72 63 65 20 64 75 c;. Resource du
1840: 70 52 65 73 44 65 73 63 3b 0a 20 20 52 65 73 6f pResDesc;. Reso
1850: 75 72 63 65 20 2a 70 44 75 70 52 65 73 3b 0a 20 urce *pDupRes;.
1860: 20 69 6e 74 20 64 75 70 63 6f 75 6e 74 20 3d 20 int dupcount =
1870: 30 3b 0a 20 20 69 6e 74 20 69 3b 0a 0a 20 20 69 0;. int i;.. i
1880: 66 28 20 6c 69 73 74 2d 3e 6e 52 65 73 3d 3d 30 f( list->nRes==0
1890: 20 29 7b 0a 20 20 20 20 72 65 74 75 72 6e 20 6c ){. return l
18a0: 69 73 74 2d 3e 6e 52 65 73 3b 0a 20 20 7d 0a 0a ist->nRes;. }..
18b0: 20 20 2f 2a 0a 20 20 2a 2a 20 73 63 61 6e 20 66 /*. ** scan f
18c0: 6f 72 20 64 75 70 6c 69 63 61 74 65 73 20 61 6e or duplicates an
18d0: 64 20 61 73 73 69 67 6e 20 74 68 65 69 72 20 6e d assign their n
18e0: 61 6d 65 73 20 74 6f 20 61 20 73 74 72 69 6e 67 ames to a string
18f0: 20 74 68 61 74 20 77 6f 75 6c 64 20 73 6f 72 74 that would sort
1900: 20 74 6f 0a 20 20 2a 2a 20 74 68 65 20 62 6f 74 to. ** the bot
1910: 74 6f 6d 2c 20 74 68 65 6e 20 72 65 2d 73 6f 72 tom, then re-sor
1920: 74 20 61 6e 64 20 74 72 75 6e 63 61 74 65 20 74 t and truncate t
1930: 68 65 20 64 75 70 6c 69 63 61 74 65 73 0a 20 20 he duplicates.
1940: 2a 2f 0a 20 20 6d 65 6d 73 65 74 28 64 75 70 4e */. memset(dupN
1950: 61 6d 65 41 73 63 2c 20 64 75 70 4e 61 6d 65 41 ameAsc, dupNameA
1960: 73 63 5b 30 5d 2c 20 73 69 7a 65 6f 66 28 64 75 sc[0], sizeof(du
1970: 70 4e 61 6d 65 41 73 63 29 2d 32 29 3b 0a 20 20 pNameAsc)-2);.
1980: 6d 65 6d 73 65 74 28 64 75 70 4e 61 6d 65 44 65 memset(dupNameDe
1990: 73 63 2c 20 64 75 70 4e 61 6d 65 44 65 73 63 5b sc, dupNameDesc[
19a0: 30 5d 2c 20 73 69 7a 65 6f 66 28 64 75 70 4e 61 0], sizeof(dupNa
19b0: 6d 65 44 65 73 63 29 2d 32 29 3b 0a 20 20 6d 65 meDesc)-2);. me
19c0: 6d 73 65 74 28 26 64 75 70 52 65 73 41 73 63 2c mset(&dupResAsc,
19d0: 20 30 2c 20 73 69 7a 65 6f 66 28 64 75 70 52 65 0, sizeof(dupRe
19e0: 73 41 73 63 29 29 3b 0a 20 20 64 75 70 52 65 73 sAsc));. dupRes
19f0: 41 73 63 2e 7a 4e 61 6d 65 20 3d 20 64 75 70 4e Asc.zName = dupN
1a00: 61 6d 65 41 73 63 3b 0a 20 20 6d 65 6d 73 65 74 ameAsc;. memset
1a10: 28 26 64 75 70 52 65 73 44 65 73 63 2c 20 30 2c (&dupResDesc, 0,
1a20: 20 73 69 7a 65 6f 66 28 64 75 70 52 65 73 44 65 sizeof(dupResDe
1a30: 73 63 29 29 3b 0a 20 20 64 75 70 52 65 73 44 65 sc));. dupResDe
1a40: 73 63 2e 7a 4e 61 6d 65 20 3d 20 64 75 70 4e 61 sc.zName = dupNa
1a50: 6d 65 44 65 73 63 3b 0a 20 20 70 44 75 70 52 65 meDesc;. pDupRe
1a60: 73 20 3d 20 28 63 6f 6d 70 61 72 65 52 65 73 6f s = (compareReso
1a70: 75 72 63 65 28 26 64 75 70 52 65 73 41 73 63 2c urce(&dupResAsc,
1a80: 20 26 64 75 70 52 65 73 44 65 73 63 29 20 3e 20 &dupResDesc) >
1a90: 30 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 3f 0. ?
1aa0: 20 26 64 75 70 52 65 73 41 73 63 20 3a 20 26 64 &dupResAsc : &d
1ab0: 75 70 52 65 73 44 65 73 63 29 3b 0a 0a 20 20 71 upResDesc);.. q
1ac0: 73 6f 72 74 28 6c 69 73 74 2d 3e 61 52 65 73 2c sort(list->aRes,
1ad0: 20 6c 69 73 74 2d 3e 6e 52 65 73 2c 20 73 69 7a list->nRes, siz
1ae0: 65 6f 66 28 6c 69 73 74 2d 3e 61 52 65 73 5b 30 eof(list->aRes[0
1af0: 5d 29 2c 0a 20 20 20 20 20 20 20 28 51 73 6f 72 ]),. (Qsor
1b00: 74 43 6f 6d 70 61 72 65 46 75 6e 63 29 63 6f 6d tCompareFunc)com
1b10: 70 61 72 65 52 65 73 6f 75 72 63 65 29 3b 0a 20 pareResource);.
1b20: 20 66 6f 72 28 20 69 3d 30 3b 20 69 3c 6c 69 73 for( i=0; i<lis
1b30: 74 2d 3e 6e 52 65 73 2d 31 20 3b 20 2b 2b 69 29 t->nRes-1 ; ++i)
1b40: 7b 0a 20 20 20 20 52 65 73 6f 75 72 63 65 20 2a {. Resource *
1b50: 72 65 73 20 3d 20 26 6c 69 73 74 2d 3e 61 52 65 res = &list->aRe
1b60: 73 5b 69 5d 3b 0a 0a 20 20 20 20 77 68 69 6c 65 s[i];.. while
1b70: 28 20 69 3c 6c 69 73 74 2d 3e 6e 52 65 73 2d 31 ( i<list->nRes-1
1b80: 0a 20 20 20 20 20 20 20 20 20 20 20 26 26 20 63 . && c
1b90: 6f 6d 70 61 72 65 52 65 73 6f 75 72 63 65 28 72 ompareResource(r
1ba0: 65 73 2c 20 26 6c 69 73 74 2d 3e 61 52 65 73 5b es, &list->aRes[
1bb0: 69 2b 31 5d 29 3d 3d 30 20 29 7b 0a 20 20 20 20 i+1])==0 ){.
1bc0: 20 20 66 70 72 69 6e 74 66 28 73 74 64 65 72 72 fprintf(stderr
1bd0: 2c 20 22 53 6b 69 70 70 65 64 20 61 20 64 75 70 , "Skipped a dup
1be0: 6c 69 63 61 74 65 20 66 69 6c 65 20 5b 25 73 5d licate file [%s]
1bf0: 5c 6e 22 2c 20 6c 69 73 74 2d 3e 61 52 65 73 5b \n", list->aRes[
1c00: 69 2b 31 5d 2e 7a 4e 61 6d 65 29 3b 0a 20 20 20 i+1].zName);.
1c10: 20 20 20 6d 65 6d 63 70 79 28 26 6c 69 73 74 2d memcpy(&list-
1c20: 3e 61 52 65 73 5b 69 2b 31 5d 2c 20 70 44 75 70 >aRes[i+1], pDup
1c30: 52 65 73 2c 20 73 69 7a 65 6f 66 28 6c 69 73 74 Res, sizeof(list
1c40: 2d 3e 61 52 65 73 5b 30 5d 29 29 3b 0a 20 20 20 ->aRes[0]));.
1c50: 20 20 20 2b 2b 64 75 70 63 6f 75 6e 74 3b 0a 0a ++dupcount;..
1c60: 20 20 20 20 20 20 2b 2b 69 3b 0a 20 20 20 20 7d ++i;. }
1c70: 0a 20 20 7d 0a 20 20 69 66 28 20 64 75 70 63 6f . }. if( dupco
1c80: 75 6e 74 20 3d 3d 20 30 29 7b 0a 20 20 20 20 72 unt == 0){. r
1c90: 65 74 75 72 6e 20 6c 69 73 74 2d 3e 6e 52 65 73 eturn list->nRes
1ca0: 3b 0a 20 20 7d 0a 20 20 71 73 6f 72 74 28 6c 69 ;. }. qsort(li
1cb0: 73 74 2d 3e 61 52 65 73 2c 20 6c 69 73 74 2d 3e st->aRes, list->
1cc0: 6e 52 65 73 2c 20 73 69 7a 65 6f 66 28 6c 69 73 nRes, sizeof(lis
1cd0: 74 2d 3e 61 52 65 73 5b 30 5d 29 2c 0a 20 20 20 t->aRes[0]),.
1ce0: 20 20 20 20 28 51 73 6f 72 74 43 6f 6d 70 61 72 (QsortCompar
1cf0: 65 46 75 6e 63 29 63 6f 6d 70 61 72 65 52 65 73 eFunc)compareRes
1d00: 6f 75 72 63 65 29 3b 0a 20 20 6c 69 73 74 2d 3e ource);. list->
1d10: 6e 52 65 73 20 2d 3d 20 64 75 70 63 6f 75 6e 74 nRes -= dupcount
1d20: 3b 0a 20 20 6d 65 6d 73 65 74 28 26 6c 69 73 74 ;. memset(&list
1d30: 2d 3e 61 52 65 73 5b 6c 69 73 74 2d 3e 6e 52 65 ->aRes[list->nRe
1d40: 73 5d 2c 20 30 2c 20 73 69 7a 65 6f 66 28 6c 69 s], 0, sizeof(li
1d50: 73 74 2d 3e 61 52 65 73 5b 30 5d 29 29 3b 0a 0a st->aRes[0]));..
1d60: 20 20 72 65 74 75 72 6e 20 6c 69 73 74 2d 3e 6e return list->n
1d70: 52 65 73 3b 0a 7d 0a 0a 69 6e 74 20 6d 61 69 6e Res;.}..int main
1d80: 28 69 6e 74 20 61 72 67 63 2c 20 63 68 61 72 20 (int argc, char
1d90: 2a 2a 61 72 67 76 29 7b 0a 20 20 69 6e 74 20 69 **argv){. int i
1da0: 2c 20 73 7a 3b 0a 20 20 69 6e 74 20 6a 2c 20 6e , sz;. int j, n
1db0: 3b 0a 20 20 52 65 73 6f 75 72 63 65 4c 69 73 74 ;. ResourceList
1dc0: 20 72 65 73 4c 69 73 74 3b 0a 20 20 52 65 73 6f resList;. Reso
1dd0: 75 72 63 65 20 2a 61 52 65 73 3b 0a 20 20 69 6e urce *aRes;. in
1de0: 74 20 6e 52 65 73 3b 0a 20 20 75 6e 73 69 67 6e t nRes;. unsign
1df0: 65 64 20 63 68 61 72 20 2a 70 44 61 74 61 3b 0a ed char *pData;.
1e00: 20 20 69 6e 74 20 6e 45 72 72 20 3d 20 30 3b 0a int nErr = 0;.
1e10: 20 20 69 6e 74 20 6e 53 6b 69 70 3b 0a 20 20 69 int nSkip;. i
1e20: 6e 74 20 6e 50 72 65 66 69 78 20 3d 20 30 3b 0a nt nPrefix = 0;.
1e30: 23 69 66 6e 64 65 66 20 46 4f 53 53 49 4c 5f 44 #ifndef FOSSIL_D
1e40: 45 42 55 47 0a 20 20 69 6e 74 20 6e 4e 61 6d 65 EBUG. int nName
1e50: 3b 0a 23 65 6e 64 69 66 0a 0a 20 20 69 66 28 20 ;.#endif.. if(
1e60: 61 72 67 63 3d 3d 31 20 29 7b 0a 20 20 20 20 66 argc==1 ){. f
1e70: 70 72 69 6e 74 66 28 73 74 64 65 72 72 2c 20 22 printf(stderr, "
1e80: 75 73 61 67 65 5c 74 3a 25 73 20 22 0a 20 20 20 usage\t:%s ".
1e90: 20 20 20 22 5b 2d 2d 70 72 65 66 69 78 20 70 61 "[--prefix pa
1ea0: 74 68 5d 20 5b 2d 2d 72 65 73 6c 69 73 74 20 66 th] [--reslist f
1eb0: 69 6c 65 5d 20 5b 72 65 73 6f 75 72 63 65 2d 66 ile] [resource-f
1ec0: 69 6c 65 31 20 2e 2e 2e 5d 5c 6e 22 2c 0a 20 20 ile1 ...]\n",.
1ed0: 20 20 20 20 20 61 72 67 76 5b 30 5d 0a 20 20 20 argv[0].
1ee0: 20 29 3b 0a 20 20 20 20 72 65 74 75 72 6e 20 31 );. return 1
1ef0: 3b 0a 20 20 7d 0a 20 20 69 66 28 20 61 72 67 63 ;. }. if( argc
1f00: 3e 33 20 26 26 20 73 74 72 63 6d 70 28 61 72 67 >3 && strcmp(arg
1f10: 76 5b 31 5d 2c 22 2d 2d 70 72 65 66 69 78 22 29 v[1],"--prefix")
1f20: 3d 3d 30 20 29 7b 0a 20 20 20 20 6e 50 72 65 66 ==0 ){. nPref
1f30: 69 78 20 3d 20 28 69 6e 74 29 73 74 72 6c 65 6e ix = (int)strlen
1f40: 28 61 72 67 76 5b 32 5d 29 3b 0a 20 20 20 20 61 (argv[2]);. a
1f50: 72 67 63 20 2d 3d 20 32 3b 0a 20 20 20 20 61 72 rgc -= 2;. ar
1f60: 67 76 20 2b 3d 20 32 3b 0a 20 20 7d 0a 0a 20 20 gv += 2;. }..
1f70: 6d 65 6d 73 65 74 28 26 72 65 73 4c 69 73 74 2c memset(&resList,
1f80: 20 30 2c 20 73 69 7a 65 6f 66 28 72 65 73 4c 69 0, sizeof(resLi
1f90: 73 74 29 29 3b 0a 20 20 69 66 28 20 61 72 67 63 st));. if( argc
1fa0: 3e 32 20 26 26 20 73 74 72 63 6d 70 28 61 72 67 >2 && strcmp(arg
1fb0: 76 5b 31 5d 2c 22 2d 2d 72 65 73 6c 69 73 74 22 v[1],"--reslist"
1fc0: 29 3d 3d 30 20 29 7b 0a 20 20 20 20 69 66 28 20 )==0 ){. if(
1fd0: 72 65 61 64 5f 72 65 73 6c 69 73 74 28 61 72 67 read_reslist(arg
1fe0: 76 5b 32 5d 2c 20 26 72 65 73 4c 69 73 74 29 3d v[2], &resList)=
1ff0: 3d 30 20 29 7b 0a 20 20 20 20 20 20 66 70 72 69 =0 ){. fpri
2000: 6e 74 66 28 73 74 64 65 72 72 2c 20 22 46 61 69 ntf(stderr, "Fai
2010: 6c 65 64 20 74 6f 20 6c 6f 61 64 20 72 65 73 6f led to load reso
2020: 75 72 63 65 20 6c 69 73 74 20 66 72 6f 6d 20 5b urce list from [
2030: 25 73 5d 22 2c 20 61 72 67 76 5b 32 5d 29 3b 0a %s]", argv[2]);.
2040: 20 20 20 20 20 20 66 72 65 65 5f 72 65 73 6c 69 free_resli
2050: 73 74 28 26 72 65 73 4c 69 73 74 29 3b 0a 20 20 st(&resList);.
2060: 20 20 20 20 72 65 74 75 72 6e 20 31 3b 0a 20 20 return 1;.
2070: 20 20 7d 0a 20 20 20 20 61 72 67 63 20 2d 3d 20 }. argc -=
2080: 32 3b 0a 20 20 20 20 61 72 67 76 20 2b 3d 20 32 2;. argv += 2
2090: 3b 0a 20 20 7d 0a 0a 20 20 69 66 28 20 61 72 67 ;. }.. if( arg
20a0: 63 3e 31 20 29 7b 0a 20 20 20 20 61 52 65 73 20 c>1 ){. aRes
20b0: 3d 20 72 65 61 6c 6c 6f 63 28 72 65 73 4c 69 73 = realloc(resLis
20c0: 74 2e 61 52 65 73 2c 20 28 72 65 73 4c 69 73 74 t.aRes, (resList
20d0: 2e 6e 52 65 73 2b 61 72 67 63 2d 31 29 2a 73 69 .nRes+argc-1)*si
20e0: 7a 65 6f 66 28 72 65 73 4c 69 73 74 2e 61 52 65 zeof(resList.aRe
20f0: 73 5b 30 5d 29 29 3b 0a 20 20 20 20 69 66 28 20 s[0]));. if(
2100: 61 52 65 73 3d 3d 30 20 7c 7c 20 61 52 65 73 3d aRes==0 || aRes=
2110: 3d 72 65 73 4c 69 73 74 2e 61 52 65 73 20 29 7b =resList.aRes ){
2120: 0a 20 20 20 20 20 20 66 70 72 69 6e 74 66 28 73 . fprintf(s
2130: 74 64 65 72 72 2c 20 22 72 65 61 6c 6c 6f 63 20 tderr, "realloc
2140: 66 61 69 6c 65 64 5c 6e 22 29 3b 0a 20 20 20 20 failed\n");.
2150: 20 20 66 72 65 65 5f 72 65 73 6c 69 73 74 28 26 free_reslist(&
2160: 72 65 73 4c 69 73 74 29 3b 0a 20 20 20 20 20 20 resList);.
2170: 72 65 74 75 72 6e 20 31 3b 0a 20 20 20 20 7d 0a return 1;. }.
2180: 20 20 20 20 72 65 73 4c 69 73 74 2e 61 52 65 73 resList.aRes
2190: 20 3d 20 61 52 65 73 3b 0a 0a 20 20 20 20 66 6f = aRes;.. fo
21a0: 72 28 69 3d 30 3b 20 69 3c 61 72 67 63 2d 31 3b r(i=0; i<argc-1;
21b0: 20 69 2b 2b 29 7b 0a 20 20 20 20 20 20 72 65 73 i++){. res
21c0: 4c 69 73 74 2e 61 52 65 73 5b 72 65 73 4c 69 73 List.aRes[resLis
21d0: 74 2e 6e 52 65 73 5d 2e 7a 4e 61 6d 65 20 3d 20 t.nRes].zName =
21e0: 61 72 67 76 5b 69 2b 31 5d 3b 0a 20 20 20 20 20 argv[i+1];.
21f0: 20 2b 2b 72 65 73 4c 69 73 74 2e 6e 52 65 73 3b ++resList.nRes;
2200: 0a 20 20 20 20 7d 0a 20 20 7d 0a 0a 20 20 69 66 . }. }.. if
2210: 28 20 72 65 73 4c 69 73 74 2e 6e 52 65 73 3d 3d ( resList.nRes==
2220: 30 20 29 7b 0a 20 20 20 20 20 20 66 70 72 69 6e 0 ){. fprin
2230: 74 66 28 73 74 64 65 72 72 2c 22 4e 6f 20 72 65 tf(stderr,"No re
2240: 73 6f 75 72 63 65 20 66 69 6c 65 73 20 74 6f 20 source files to
2250: 70 72 6f 63 65 73 73 5c 6e 22 29 3b 0a 20 20 20 process\n");.
2260: 20 20 20 66 72 65 65 5f 72 65 73 6c 69 73 74 28 free_reslist(
2270: 26 72 65 73 4c 69 73 74 29 3b 0a 20 20 20 20 20 &resList);.
2280: 20 72 65 74 75 72 6e 20 31 3b 0a 20 20 7d 0a 20 return 1;. }.
2290: 20 72 65 6d 6f 76 65 5f 64 75 70 6c 69 63 61 74 remove_duplicat
22a0: 65 73 28 26 72 65 73 4c 69 73 74 29 3b 0a 0a 20 es(&resList);..
22b0: 20 6e 52 65 73 20 3d 20 72 65 73 4c 69 73 74 2e nRes = resList.
22c0: 6e 52 65 73 3b 0a 20 20 61 52 65 73 20 3d 20 72 nRes;. aRes = r
22d0: 65 73 4c 69 73 74 2e 61 52 65 73 3b 0a 20 20 71 esList.aRes;. q
22e0: 73 6f 72 74 28 61 52 65 73 2c 20 6e 52 65 73 2c sort(aRes, nRes,
22f0: 20 73 69 7a 65 6f 66 28 61 52 65 73 5b 30 5d 29 sizeof(aRes[0])
2300: 2c 20 28 51 73 6f 72 74 43 6f 6d 70 61 72 65 46 , (QsortCompareF
2310: 75 6e 63 29 63 6f 6d 70 61 72 65 52 65 73 6f 75 unc)compareResou
2320: 72 63 65 29 3b 0a 0a 20 20 70 72 69 6e 74 66 28 rce);.. printf(
2330: 22 2f 2a 20 41 75 74 6f 6d 61 74 69 63 61 6c 6c "/* Automaticall
2340: 79 20 67 65 6e 65 72 61 74 65 64 20 63 6f 64 65 y generated code
2350: 3a 20 20 44 6f 20 6e 6f 74 20 65 64 69 74 2e 5c : Do not edit.\
2360: 6e 2a 2a 5c 6e 22 0a 20 20 20 20 20 20 20 20 20 n**\n".
2370: 22 2a 2a 20 52 65 72 75 6e 20 74 68 65 20 5c 22 "** Rerun the \"
2380: 6d 6b 62 75 69 6c 74 69 6e 2e 63 5c 22 20 70 72 mkbuiltin.c\" pr
2390: 6f 67 72 61 6d 20 6f 72 20 72 65 72 75 6e 20 74 ogram or rerun t
23a0: 68 65 20 46 6f 73 73 69 6c 5c 6e 22 0a 20 20 20 he Fossil\n".
23b0: 20 20 20 20 20 20 22 2a 2a 20 6d 61 6b 65 66 69 "** makefi
23c0: 6c 65 20 74 6f 20 75 70 64 61 74 65 20 74 68 69 le to update thi
23d0: 73 20 73 6f 75 72 63 65 20 66 69 6c 65 2e 5c 6e s source file.\n
23e0: 22 0a 20 20 20 20 20 20 20 20 20 22 2a 2f 5c 6e ". "*/\n
23f0: 22 29 3b 0a 20 20 66 6f 72 28 69 3d 30 3b 20 69 ");. for(i=0; i
2400: 3c 6e 52 65 73 3b 20 69 2b 2b 29 7b 0a 20 20 20 <nRes; i++){.
2410: 20 70 44 61 74 61 20 3d 20 72 65 61 64 5f 66 69 pData = read_fi
2420: 6c 65 28 61 52 65 73 5b 69 5d 2e 7a 4e 61 6d 65 le(aRes[i].zName
2430: 2c 20 26 73 7a 29 3b 0a 20 20 20 20 69 66 28 20 , &sz);. if(
2440: 70 44 61 74 61 3d 3d 30 20 29 7b 0a 20 20 20 20 pData==0 ){.
2450: 20 20 66 70 72 69 6e 74 66 28 73 74 64 65 72 72 fprintf(stderr
2460: 2c 20 22 43 61 6e 6e 6f 74 20 6f 70 65 6e 20 66 , "Cannot open f
2470: 69 6c 65 20 5b 25 73 5d 5c 6e 22 2c 20 61 52 65 ile [%s]\n", aRe
2480: 73 5b 69 5d 2e 7a 4e 61 6d 65 29 3b 0a 20 20 20 s[i].zName);.
2490: 20 20 20 6e 45 72 72 2b 2b 3b 0a 20 20 20 20 20 nErr++;.
24a0: 20 63 6f 6e 74 69 6e 75 65 3b 0a 20 20 20 20 7d continue;. }
24b0: 0a 0a 20 20 20 20 2f 2a 20 53 6b 69 70 20 69 6e .. /* Skip in
24c0: 69 74 69 61 6c 20 6c 69 6e 65 73 20 62 65 67 69 itial lines begi
24d0: 6e 6e 69 6e 67 20 77 69 74 68 20 23 20 2a 2f 0a nning with # */.
24e0: 20 20 20 20 6e 53 6b 69 70 20 3d 20 30 3b 0a 20 nSkip = 0;.
24f0: 20 20 20 77 68 69 6c 65 28 20 70 44 61 74 61 5b while( pData[
2500: 6e 53 6b 69 70 5d 3d 3d 27 23 27 20 29 7b 0a 20 nSkip]=='#' ){.
2510: 20 20 20 20 20 77 68 69 6c 65 28 20 70 44 61 74 while( pDat
2520: 61 5b 6e 53 6b 69 70 5d 21 3d 30 20 26 26 20 70 a[nSkip]!=0 && p
2530: 44 61 74 61 5b 6e 53 6b 69 70 5d 21 3d 27 5c 6e Data[nSkip]!='\n
2540: 27 20 29 7b 20 6e 53 6b 69 70 2b 2b 3b 20 7d 0a ' ){ nSkip++; }.
2550: 20 20 20 20 20 20 69 66 28 20 70 44 61 74 61 5b if( pData[
2560: 6e 53 6b 69 70 5d 3d 3d 27 5c 6e 27 20 29 20 6e nSkip]=='\n' ) n
2570: 53 6b 69 70 2b 2b 3b 0a 20 20 20 20 7d 0a 0a 23 Skip++;. }..#
2580: 69 66 6e 64 65 66 20 46 4f 53 53 49 4c 5f 44 45 ifndef FOSSIL_DE
2590: 42 55 47 0a 20 20 20 20 2f 2a 20 43 6f 6d 70 72 BUG. /* Compr
25a0: 65 73 73 20 6a 61 76 61 73 63 72 69 70 74 20 73 ess javascript s
25b0: 6f 75 72 63 65 20 66 69 6c 65 73 20 2a 2f 0a 20 ource files */.
25c0: 20 20 20 6e 4e 61 6d 65 20 3d 20 28 69 6e 74 29 nName = (int)
25d0: 73 74 72 6c 65 6e 28 61 52 65 73 5b 69 5d 2e 7a strlen(aRes[i].z
25e0: 4e 61 6d 65 29 3b 0a 20 20 20 20 69 66 28 20 28 Name);. if( (
25f0: 6e 4e 61 6d 65 3e 33 20 26 26 20 73 74 72 63 6d nName>3 && strcm
2600: 70 28 26 61 52 65 73 5b 69 5d 2e 7a 4e 61 6d 65 p(&aRes[i].zName
2610: 5b 6e 4e 61 6d 65 2d 33 5d 2c 22 2e 6a 73 22 29 [nName-3],".js")
2620: 3d 3d 30 29 0a 20 20 20 20 20 7c 7c 20 28 6e 4e ==0). || (nN
2630: 61 6d 65 3e 37 20 20 26 26 20 73 74 72 63 6d 70 ame>7 && strcmp
2640: 28 26 61 52 65 73 5b 69 5d 2e 7a 4e 61 6d 65 5b (&aRes[i].zName[
2650: 6e 4e 61 6d 65 2d 37 5d 2c 20 22 2f 6a 73 2e 74 nName-7], "/js.t
2660: 78 74 22 29 3d 3d 30 29 0a 20 20 20 20 29 7b 0a xt")==0). ){.
2670: 20 20 20 20 20 20 69 6e 74 20 78 20 3d 20 73 7a int x = sz
2680: 2d 6e 53 6b 69 70 3b 0a 20 20 20 20 20 20 63 6f -nSkip;. co
2690: 6d 70 72 65 73 73 4a 61 76 61 73 63 72 69 70 74 mpressJavascript
26a0: 28 70 44 61 74 61 2b 6e 53 6b 69 70 2c 20 26 78 (pData+nSkip, &x
26b0: 29 3b 0a 20 20 20 20 20 20 73 7a 20 3d 20 78 20 );. sz = x
26c0: 2b 20 6e 53 6b 69 70 3b 0a 20 20 20 20 7d 0a 23 + nSkip;. }.#
26d0: 65 6e 64 69 66 0a 0a 20 20 20 20 61 52 65 73 5b endif.. aRes[
26e0: 69 5d 2e 6e 42 79 74 65 20 3d 20 73 7a 20 2d 20 i].nByte = sz -
26f0: 6e 53 6b 69 70 3b 0a 20 20 20 20 61 52 65 73 5b nSkip;. aRes[
2700: 69 5d 2e 69 64 78 20 3d 20 69 3b 0a 20 20 20 20 i].idx = i;.
2710: 70 72 69 6e 74 66 28 22 2f 2a 20 43 6f 6e 74 65 printf("/* Conte
2720: 6e 74 20 6f 66 20 66 69 6c 65 20 25 73 20 2a 2f nt of file %s */
2730: 5c 6e 22 2c 20 61 52 65 73 5b 69 5d 2e 7a 4e 61 \n", aRes[i].zNa
2740: 6d 65 29 3b 0a 20 20 20 20 70 72 69 6e 74 66 28 me);. printf(
2750: 22 73 74 61 74 69 63 20 63 6f 6e 73 74 20 75 6e "static const un
2760: 73 69 67 6e 65 64 20 63 68 61 72 20 62 69 64 61 signed char bida
2770: 74 61 25 64 5b 25 64 5d 20 3d 20 7b 5c 6e 20 20 ta%d[%d] = {\n
2780: 22 2c 0a 20 20 20 20 20 20 20 20 20 20 20 69 2c ",. i,
2790: 20 73 7a 2b 31 2d 6e 53 6b 69 70 29 3b 0a 20 20 sz+1-nSkip);.
27a0: 20 20 66 6f 72 28 6a 3d 6e 53 6b 69 70 2c 20 6e for(j=nSkip, n
27b0: 3d 30 3b 20 6a 3c 3d 73 7a 3b 20 6a 2b 2b 29 7b =0; j<=sz; j++){
27c0: 0a 20 20 20 20 20 20 70 72 69 6e 74 66 28 22 25 . printf("%
27d0: 33 64 22 2c 20 70 44 61 74 61 5b 6a 5d 29 3b 0a 3d", pData[j]);.
27e0: 20 20 20 20 20 20 69 66 28 20 6a 3d 3d 73 7a 20 if( j==sz
27f0: 29 7b 0a 20 20 20 20 20 20 20 20 70 72 69 6e 74 ){. print
2800: 66 28 22 20 7d 3b 5c 6e 22 29 3b 0a 20 20 20 20 f(" };\n");.
2810: 20 20 7d 65 6c 73 65 20 69 66 28 20 6e 3d 3d 31 }else if( n==1
2820: 34 20 29 7b 0a 20 20 20 20 20 20 20 20 70 72 69 4 ){. pri
2830: 6e 74 66 28 22 2c 5c 6e 20 20 22 29 3b 0a 20 20 ntf(",\n ");.
2840: 20 20 20 20 20 20 6e 20 3d 20 30 3b 0a 20 20 20 n = 0;.
2850: 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 }else{.
2860: 20 20 70 72 69 6e 74 66 28 22 2c 20 22 29 3b 0a printf(", ");.
2870: 20 20 20 20 20 20 20 20 6e 2b 2b 3b 0a 20 20 20 n++;.
2880: 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 20 20 66 }. }. f
2890: 72 65 65 28 70 44 61 74 61 29 3b 0a 20 20 7d 0a ree(pData);. }.
28a0: 20 20 70 72 69 6e 74 66 28 22 74 79 70 65 64 65 printf("typede
28b0: 66 20 73 74 72 75 63 74 20 42 75 69 6c 74 69 6e f struct Builtin
28c0: 46 69 6c 65 54 61 62 6c 65 20 42 75 69 6c 74 69 FileTable Builti
28d0: 6e 46 69 6c 65 54 61 62 6c 65 3b 5c 6e 22 29 3b nFileTable;\n");
28e0: 0a 20 20 70 72 69 6e 74 66 28 22 73 74 72 75 63 . printf("struc
28f0: 74 20 42 75 69 6c 74 69 6e 46 69 6c 65 54 61 62 t BuiltinFileTab
2900: 6c 65 20 7b 5c 6e 22 29 3b 0a 20 20 70 72 69 6e le {\n");. prin
2910: 74 66 28 22 20 20 63 6f 6e 73 74 20 63 68 61 72 tf(" const char
2920: 20 2a 7a 4e 61 6d 65 3b 5c 6e 22 29 3b 0a 20 20 *zName;\n");.
2930: 70 72 69 6e 74 66 28 22 20 20 63 6f 6e 73 74 20 printf(" const
2940: 75 6e 73 69 67 6e 65 64 20 63 68 61 72 20 2a 70 unsigned char *p
2950: 44 61 74 61 3b 5c 6e 22 29 3b 0a 20 20 70 72 69 Data;\n");. pri
2960: 6e 74 66 28 22 20 20 69 6e 74 20 6e 42 79 74 65 ntf(" int nByte
2970: 3b 5c 6e 22 29 3b 0a 20 20 70 72 69 6e 74 66 28 ;\n");. printf(
2980: 22 7d 3b 5c 6e 22 29 3b 0a 20 20 70 72 69 6e 74 "};\n");. print
2990: 66 28 22 73 74 61 74 69 63 20 63 6f 6e 73 74 20 f("static const
29a0: 42 75 69 6c 74 69 6e 46 69 6c 65 54 61 62 6c 65 BuiltinFileTable
29b0: 20 61 42 75 69 6c 74 69 6e 46 69 6c 65 73 5b 5d aBuiltinFiles[]
29c0: 20 3d 20 7b 5c 6e 22 29 3b 0a 20 20 66 6f 72 28 = {\n");. for(
29d0: 69 3d 30 3b 20 69 3c 6e 52 65 73 3b 20 69 2b 2b i=0; i<nRes; i++
29e0: 29 7b 0a 20 20 20 20 63 68 61 72 20 2a 7a 20 3d ){. char *z =
29f0: 20 61 52 65 73 5b 69 5d 2e 7a 4e 61 6d 65 3b 0a aRes[i].zName;.
2a00: 20 20 20 20 69 66 28 20 73 74 72 6c 65 6e 28 7a if( strlen(z
2a10: 29 3e 3d 6e 50 72 65 66 69 78 20 29 20 7a 20 2b )>=nPrefix ) z +
2a20: 3d 20 6e 50 72 65 66 69 78 3b 0a 20 20 20 20 77 = nPrefix;. w
2a30: 68 69 6c 65 28 20 7a 5b 30 5d 3d 3d 27 2e 27 20 hile( z[0]=='.'
2a40: 7c 7c 20 7a 5b 30 5d 3d 3d 27 2f 27 20 7c 7c 20 || z[0]=='/' ||
2a50: 7a 5b 30 5d 3d 3d 27 5c 5c 27 20 29 7b 20 7a 2b z[0]=='\\' ){ z+
2a60: 2b 3b 20 7d 0a 20 20 20 20 61 52 65 73 5b 69 5d +; }. aRes[i]
2a70: 2e 7a 4e 61 6d 65 20 3d 20 7a 3b 0a 20 20 20 20 .zName = z;.
2a80: 77 68 69 6c 65 28 20 7a 5b 30 5d 20 29 7b 0a 20 while( z[0] ){.
2a90: 20 20 20 20 20 69 66 28 20 7a 5b 30 5d 3d 3d 27 if( z[0]=='
2aa0: 5c 5c 27 20 29 20 7a 5b 30 5d 20 3d 20 27 2f 27 \\' ) z[0] = '/'
2ab0: 3b 0a 20 20 20 20 20 20 7a 2b 2b 3b 0a 20 20 20 ;. z++;.
2ac0: 20 7d 0a 20 20 7d 0a 20 20 71 73 6f 72 74 28 61 }. }. qsort(a
2ad0: 52 65 73 2c 20 6e 52 65 73 2c 20 73 69 7a 65 6f Res, nRes, sizeo
2ae0: 66 28 61 52 65 73 5b 30 5d 29 2c 20 28 51 73 6f f(aRes[0]), (Qso
2af0: 72 74 43 6f 6d 70 61 72 65 46 75 6e 63 29 63 6f rtCompareFunc)co
2b00: 6d 70 61 72 65 52 65 73 6f 75 72 63 65 29 3b 0a mpareResource);.
2b10: 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c 6e 52 65 for(i=0; i<nRe
2b20: 73 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 70 72 69 s; i++){. pri
2b30: 6e 74 66 28 22 20 20 7b 20 5c 22 25 73 5c 22 2c ntf(" { \"%s\",
2b40: 20 62 69 64 61 74 61 25 64 2c 20 25 64 20 7d 2c bidata%d, %d },
2b50: 5c 6e 22 2c 0a 20 20 20 20 20 20 20 20 20 20 20 \n",.
2b60: 61 52 65 73 5b 69 5d 2e 7a 4e 61 6d 65 2c 20 61 aRes[i].zName, a
2b70: 52 65 73 5b 69 5d 2e 69 64 78 2c 20 61 52 65 73 Res[i].idx, aRes
2b80: 5b 69 5d 2e 6e 42 79 74 65 29 3b 0a 20 20 7d 0a [i].nByte);. }.
2b90: 20 20 70 72 69 6e 74 66 28 22 7d 3b 5c 6e 22 29 printf("};\n")
2ba0: 3b 0a 20 20 66 72 65 65 5f 72 65 73 6c 69 73 74 ;. free_reslist
2bb0: 28 26 72 65 73 4c 69 73 74 29 3b 0a 20 20 72 65 (&resList);. re
2bc0: 74 75 72 6e 20 6e 45 72 72 3b 0a 7d 0a turn nErr;.}.