Fossil

Hex Artifact Content
Login

Artifact 96b6a95fe20ae5bb9a7c5f59b719e5cc56a534220cd8c4ee7e970e6516e24191:


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 0a 2a 2a 20 54 68 69 73  ense".)..** This
00f0: 20 70 72 6f 67 72 61 6d 20 69 73 20 64 69 73 74   program is dist
0100: 72 69 62 75 74 65 64 20 69 6e 20 74 68 65 20 68  ributed in the h
0110: 6f 70 65 20 74 68 61 74 20 69 74 20 77 69 6c 6c  ope that it will
0120: 20 62 65 20 75 73 65 66 75 6c 2c 0a 2a 2a 20 62   be useful,.** b
0130: 75 74 20 77 69 74 68 6f 75 74 20 61 6e 79 20 77  ut without any w
0140: 61 72 72 61 6e 74 79 3b 20 77 69 74 68 6f 75 74  arranty; without
0150: 20 65 76 65 6e 20 74 68 65 20 69 6d 70 6c 69 65   even the implie
0160: 64 20 77 61 72 72 61 6e 74 79 20 6f 66 0a 2a 2a  d warranty of.**
0170: 20 6d 65 72 63 68 61 6e 74 61 62 69 6c 69 74 79   merchantability
0180: 20 6f 72 20 66 69 74 6e 65 73 73 20 66 6f 72 20   or fitness for 
0190: 61 20 70 61 72 74 69 63 75 6c 61 72 20 70 75 72  a particular pur
01a0: 70 6f 73 65 2e 0a 2a 2a 0a 2a 2a 20 41 75 74 68  pose..**.** Auth
01b0: 6f 72 20 63 6f 6e 74 61 63 74 20 69 6e 66 6f 72  or contact infor
01c0: 6d 61 74 69 6f 6e 3a 0a 2a 2a 20 20 20 64 72 68  mation:.**   drh
01d0: 40 68 77 61 63 69 2e 63 6f 6d 0a 2a 2a 20 20 20  @hwaci.com.**   
01e0: 68 74 74 70 3a 2f 2f 77 77 77 2e 68 77 61 63 69  http://www.hwaci
01f0: 2e 63 6f 6d 2f 64 72 68 2f 0a 2a 2a 0a 2a 2a 2a  .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 0a 2a 2a 0a  ************.**.
0250: 2a 2a 20 54 68 69 73 20 66 69 6c 65 20 63 6f 6e  ** This file con
0260: 74 61 69 6e 73 20 62 75 69 6c 74 2d 69 6e 20 73  tains built-in s
0270: 74 72 69 6e 67 20 61 6e 64 20 42 4c 4f 42 20 72  tring and BLOB r
0280: 65 73 6f 75 72 63 65 73 20 70 61 63 6b 61 67 65  esources package
0290: 64 20 61 73 0a 2a 2a 20 62 79 74 65 20 61 72 72  d as.** byte arr
02a0: 61 79 73 2e 0a 2a 2f 0a 23 69 6e 63 6c 75 64 65  ays..*/.#include
02b0: 20 22 63 6f 6e 66 69 67 2e 68 22 0a 23 69 6e 63   "config.h".#inc
02c0: 6c 75 64 65 20 22 62 75 69 6c 74 69 6e 2e 68 22  lude "builtin.h"
02d0: 0a 23 69 6e 63 6c 75 64 65 20 3c 61 73 73 65 72  .#include <asser
02e0: 74 2e 68 3e 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20  t.h>../*.** The 
02f0: 72 65 73 6f 75 72 63 65 73 20 70 72 6f 76 69 64  resources provid
0300: 65 64 20 62 79 20 74 68 69 73 20 66 69 6c 65 20  ed by this file 
0310: 61 72 65 20 70 61 63 6b 61 67 65 64 20 62 79 20  are packaged by 
0320: 74 68 65 20 22 6d 6b 62 75 69 6c 74 69 6e 2e 63  the "mkbuiltin.c
0330: 22 0a 2a 2a 20 75 74 69 6c 69 74 79 20 70 72 6f  ".** utility pro
0340: 67 72 61 6d 20 64 75 72 69 6e 67 20 74 68 65 20  gram during the 
0350: 62 75 69 6c 74 20 70 72 6f 63 65 73 73 20 61 6e  built process an
0360: 64 20 73 74 6f 72 65 64 20 69 6e 20 74 68 65 0a  d stored in the.
0370: 2a 2a 20 62 75 69 6c 74 69 6e 5f 64 61 74 61 2e  ** builtin_data.
0380: 68 20 66 69 6c 65 2e 20 20 49 6e 63 6c 75 64 65  h file.  Include
0390: 20 74 68 61 74 20 69 6e 66 6f 72 6d 61 74 69 6f   that informatio
03a0: 6e 20 68 65 72 65 3a 0a 2a 2f 0a 23 69 6e 63 6c  n here:.*/.#incl
03b0: 75 64 65 20 22 62 75 69 6c 74 69 6e 5f 64 61 74  ude "builtin_dat
03c0: 61 2e 68 22 0a 0a 2f 2a 0a 2a 2a 20 52 65 74 75  a.h"../*.** Retu
03d0: 72 6e 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20  rn a pointer to 
03e0: 62 75 69 6c 74 2d 69 6e 20 63 6f 6e 74 65 6e 74  built-in content
03f0: 0a 2a 2f 0a 63 6f 6e 73 74 20 75 6e 73 69 67 6e  .*/.const unsign
0400: 65 64 20 63 68 61 72 20 2a 62 75 69 6c 74 69 6e  ed char *builtin
0410: 5f 66 69 6c 65 28 63 6f 6e 73 74 20 63 68 61 72  _file(const char
0420: 20 2a 7a 46 69 6c 65 6e 61 6d 65 2c 20 69 6e 74   *zFilename, int
0430: 20 2a 70 69 53 69 7a 65 29 7b 0a 20 20 69 6e 74   *piSize){.  int
0440: 20 6c 77 72 2c 20 75 70 72 2c 20 69 2c 20 63 3b   lwr, upr, i, c;
0450: 0a 20 20 6c 77 72 20 3d 20 30 3b 0a 20 20 75 70  .  lwr = 0;.  up
0460: 72 20 3d 20 63 6f 75 6e 74 28 61 42 75 69 6c 74  r = count(aBuilt
0470: 69 6e 46 69 6c 65 73 29 20 2d 20 31 3b 0a 20 20  inFiles) - 1;.  
0480: 77 68 69 6c 65 28 20 75 70 72 3e 3d 6c 77 72 20  while( upr>=lwr 
0490: 29 7b 0a 20 20 20 20 69 20 3d 20 28 75 70 72 2b  ){.    i = (upr+
04a0: 6c 77 72 29 2f 32 3b 0a 20 20 20 20 63 20 3d 20  lwr)/2;.    c = 
04b0: 73 74 72 63 6d 70 28 61 42 75 69 6c 74 69 6e 46  strcmp(aBuiltinF
04c0: 69 6c 65 73 5b 69 5d 2e 7a 4e 61 6d 65 2c 7a 46  iles[i].zName,zF
04d0: 69 6c 65 6e 61 6d 65 29 3b 0a 20 20 20 20 69 66  ilename);.    if
04e0: 28 20 63 3c 30 20 29 7b 0a 20 20 20 20 20 20 6c  ( c<0 ){.      l
04f0: 77 72 20 3d 20 69 2b 31 3b 0a 20 20 20 20 7d 65  wr = i+1;.    }e
0500: 6c 73 65 20 69 66 28 20 63 3e 30 20 29 7b 0a 20  lse if( c>0 ){. 
0510: 20 20 20 20 20 75 70 72 20 3d 20 69 2d 31 3b 0a       upr = i-1;.
0520: 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20      }else{.     
0530: 20 69 66 28 20 70 69 53 69 7a 65 20 29 20 2a 70   if( piSize ) *p
0540: 69 53 69 7a 65 20 3d 20 61 42 75 69 6c 74 69 6e  iSize = aBuiltin
0550: 46 69 6c 65 73 5b 69 5d 2e 6e 42 79 74 65 3b 0a  Files[i].nByte;.
0560: 20 20 20 20 20 20 72 65 74 75 72 6e 20 61 42 75        return aBu
0570: 69 6c 74 69 6e 46 69 6c 65 73 5b 69 5d 2e 70 44  iltinFiles[i].pD
0580: 61 74 61 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20  ata;.    }.  }. 
0590: 20 69 66 28 20 70 69 53 69 7a 65 20 29 20 2a 70   if( piSize ) *p
05a0: 69 53 69 7a 65 20 3d 20 30 3b 0a 20 20 72 65 74  iSize = 0;.  ret
05b0: 75 72 6e 20 30 3b 0a 7d 0a 63 6f 6e 73 74 20 63  urn 0;.}.const c
05c0: 68 61 72 20 2a 62 75 69 6c 74 69 6e 5f 74 65 78  har *builtin_tex
05d0: 74 28 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 46  t(const char *zF
05e0: 69 6c 65 6e 61 6d 65 29 7b 0a 20 20 72 65 74 75  ilename){.  retu
05f0: 72 6e 20 28 63 68 61 72 2a 29 62 75 69 6c 74 69  rn (char*)builti
0600: 6e 5f 66 69 6c 65 28 7a 46 69 6c 65 6e 61 6d 65  n_file(zFilename
0610: 2c 20 30 29 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 43  , 0);.}../*.** C
0620: 4f 4d 4d 41 4e 44 3a 20 74 65 73 74 2d 62 75 69  OMMAND: test-bui
0630: 6c 74 69 6e 2d 6c 69 73 74 0a 2a 2a 0a 2a 2a 20  ltin-list.**.** 
0640: 4c 69 73 74 20 74 68 65 20 6e 61 6d 65 73 20 61  List the names a
0650: 6e 64 20 73 69 7a 65 73 20 6f 66 20 61 6c 6c 20  nd sizes of all 
0660: 62 75 69 6c 74 2d 69 6e 20 72 65 73 6f 75 72 63  built-in resourc
0670: 65 73 2e 0a 2a 2f 0a 76 6f 69 64 20 74 65 73 74  es..*/.void test
0680: 5f 62 75 69 6c 74 69 6e 5f 6c 69 73 74 28 76 6f  _builtin_list(vo
0690: 69 64 29 7b 0a 20 20 69 6e 74 20 69 3b 0a 20 20  id){.  int i;.  
06a0: 66 6f 72 28 69 3d 30 3b 20 69 3c 63 6f 75 6e 74  for(i=0; i<count
06b0: 28 61 42 75 69 6c 74 69 6e 46 69 6c 65 73 29 3b  (aBuiltinFiles);
06c0: 20 69 2b 2b 29 7b 0a 20 20 20 20 66 6f 73 73 69   i++){.    fossi
06d0: 6c 5f 70 72 69 6e 74 28 22 25 2d 33 30 73 20 25  l_print("%-30s %
06e0: 36 64 5c 6e 22 2c 20 61 42 75 69 6c 74 69 6e 46  6d\n", aBuiltinF
06f0: 69 6c 65 73 5b 69 5d 2e 7a 4e 61 6d 65 2c 61 42  iles[i].zName,aB
0700: 75 69 6c 74 69 6e 46 69 6c 65 73 5b 69 5d 2e 6e  uiltinFiles[i].n
0710: 42 79 74 65 29 3b 0a 20 20 7d 0a 7d 0a 0a 2f 2a  Byte);.  }.}../*
0720: 0a 2a 2a 20 57 45 42 50 41 47 45 3a 20 74 65 73  .** WEBPAGE: tes
0730: 74 2d 62 75 69 6c 74 69 6e 2d 66 69 6c 65 73 0a  t-builtin-files.
0740: 2a 2a 0a 2a 2a 20 53 68 6f 77 20 61 6c 6c 20 62  **.** Show all b
0750: 75 69 6c 74 2d 69 6e 20 74 65 78 74 20 66 69 6c  uilt-in text fil
0760: 65 73 2e 0a 2a 2f 0a 76 6f 69 64 20 74 65 73 74  es..*/.void test
0770: 5f 62 75 69 6c 74 69 6e 5f 6c 69 73 74 5f 70 61  _builtin_list_pa
0780: 67 65 28 76 6f 69 64 29 7b 0a 20 20 69 6e 74 20  ge(void){.  int 
0790: 69 3b 0a 20 20 73 74 79 6c 65 5f 68 65 61 64 65  i;.  style_heade
07a0: 72 28 22 42 75 69 6c 74 2d 69 6e 20 54 65 78 74  r("Built-in Text
07b0: 20 46 69 6c 65 73 22 29 3b 0a 20 20 40 20 3c 75   Files");.  @ <u
07c0: 6c 3e 0a 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c  l>.  for(i=0; i<
07d0: 63 6f 75 6e 74 28 61 42 75 69 6c 74 69 6e 46 69  count(aBuiltinFi
07e0: 6c 65 73 29 3b 20 69 2b 2b 29 7b 0a 20 20 20 20  les); i++){.    
07f0: 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 20 3d 20  const char *z = 
0800: 61 42 75 69 6c 74 69 6e 46 69 6c 65 73 5b 69 5d  aBuiltinFiles[i]
0810: 2e 7a 4e 61 6d 65 3b 0a 20 20 20 20 40 20 3c 6c  .zName;.    @ <l
0820: 69 3e 25 7a 28 68 72 65 66 28 22 25 52 2f 62 75  i>%z(href("%R/bu
0830: 69 6c 74 69 6e 3f 6e 61 6d 65 3d 25 54 26 69 64  iltin?name=%T&id
0840: 3d 25 53 22 2c 7a 2c 4d 41 4e 49 46 45 53 54 5f  =%S",z,MANIFEST_
0850: 55 55 49 44 29 29 25 68 28 7a 29 3c 2f 61 3e 0a  UUID))%h(z)</a>.
0860: 20 20 7d 0a 20 20 40 20 3c 2f 75 6c 3e 0a 20 20    }.  @ </ul>.  
0870: 73 74 79 6c 65 5f 66 6f 6f 74 65 72 28 29 3b 0a  style_footer();.
0880: 7d 0a 0a 2f 2a 0a 2a 2a 20 43 4f 4d 4d 41 4e 44  }../*.** COMMAND
0890: 3a 20 74 65 73 74 2d 62 75 69 6c 74 69 6e 2d 67  : test-builtin-g
08a0: 65 74 0a 2a 2a 0a 2a 2a 20 55 73 61 67 65 3a 20  et.**.** Usage: 
08b0: 25 66 6f 73 73 69 6c 20 74 65 73 74 2d 62 75 69  %fossil test-bui
08c0: 6c 74 69 6e 2d 67 65 74 20 4e 41 4d 45 20 3f 4f  ltin-get NAME ?O
08d0: 55 54 50 55 54 2d 46 49 4c 45 3f 0a 2a 2f 0a 76  UTPUT-FILE?.*/.v
08e0: 6f 69 64 20 74 65 73 74 5f 62 75 69 6c 74 69 6e  oid test_builtin
08f0: 5f 67 65 74 28 76 6f 69 64 29 7b 0a 20 20 63 6f  _get(void){.  co
0900: 6e 73 74 20 75 6e 73 69 67 6e 65 64 20 63 68 61  nst unsigned cha
0910: 72 20 2a 70 44 61 74 61 3b 0a 20 20 69 6e 74 20  r *pData;.  int 
0920: 6e 42 79 74 65 3b 0a 20 20 42 6c 6f 62 20 78 3b  nByte;.  Blob x;
0930: 0a 20 20 69 66 28 20 67 2e 61 72 67 63 21 3d 33  .  if( g.argc!=3
0940: 20 26 26 20 67 2e 61 72 67 63 21 3d 34 20 29 7b   && g.argc!=4 ){
0950: 0a 20 20 20 20 75 73 61 67 65 28 22 4e 41 4d 45  .    usage("NAME
0960: 20 3f 4f 55 54 50 55 54 2d 46 49 4c 45 3f 22 29   ?OUTPUT-FILE?")
0970: 3b 0a 20 20 7d 0a 20 20 70 44 61 74 61 20 3d 20  ;.  }.  pData = 
0980: 62 75 69 6c 74 69 6e 5f 66 69 6c 65 28 67 2e 61  builtin_file(g.a
0990: 72 67 76 5b 32 5d 2c 20 26 6e 42 79 74 65 29 3b  rgv[2], &nByte);
09a0: 0a 20 20 69 66 28 20 70 44 61 74 61 3d 3d 30 20  .  if( pData==0 
09b0: 29 7b 0a 20 20 20 20 66 6f 73 73 69 6c 5f 66 61  ){.    fossil_fa
09c0: 74 61 6c 28 22 6e 6f 20 73 75 63 68 20 62 75 69  tal("no such bui
09d0: 6c 74 2d 69 6e 20 66 69 6c 65 3a 20 5b 25 73 5d  lt-in file: [%s]
09e0: 22 2c 20 67 2e 61 72 67 76 5b 32 5d 29 3b 0a 20  ", g.argv[2]);. 
09f0: 20 7d 0a 20 20 62 6c 6f 62 5f 69 6e 69 74 28 26   }.  blob_init(&
0a00: 78 2c 20 28 63 6f 6e 73 74 20 63 68 61 72 2a 29  x, (const char*)
0a10: 70 44 61 74 61 2c 20 6e 42 79 74 65 29 3b 0a 20  pData, nByte);. 
0a20: 20 62 6c 6f 62 5f 77 72 69 74 65 5f 74 6f 5f 66   blob_write_to_f
0a30: 69 6c 65 28 26 78 2c 20 67 2e 61 72 67 63 3d 3d  ile(&x, g.argc==
0a40: 34 20 3f 20 67 2e 61 72 67 76 5b 33 5d 20 3a 20  4 ? g.argv[3] : 
0a50: 22 2d 22 29 3b 0a 20 20 62 6c 6f 62 5f 72 65 73  "-");.  blob_res
0a60: 65 74 28 26 78 29 3b 0a 7d 0a                    et(&x);.}.