Scid  4.7.0
switcher.tcl
Go to the documentation of this file.
1 ###
2 ### windows/switcher.tcl: part of Scid
3 ### Copyright (C) 2000-2004 Shane Hudson.
4 ### Copyright (C) 2006-2009 Pascal Georges
5 ### Copyright (C) 2008-2011 Alexander Wagner
6 ### Copyright (C) 2013 Fulvio Benini
7 
8 set icons {
9 {Unknown}
10 {
11 R0lGODlhIAAgAIQQACYjYUooEzUsWUU5T3JAHWlJGFtPS3FgQ4VwPJR3LZ9/
12 KbKUL7ueK9SvGOrAE/rLAP//////////////////////////////////////
13 /////////////////////////yH5BAEKABAALAAAAAAgACAAAAX+ICSOZGme
14 aKquKtE8MMzMtAOzpBvL9Gw/OBFh8YM5erNYkJCYGWgPxsPRqDYcDhwhsJgt
15 DIuXwvCK0rSK7mwgKCsE0x6LUFB72dLH4tCQrwJXVFUzAgJ5AAN2LApFRgwI
16 AAJhCYhqKwSNPAsClQwOnAhAKXQ7MTMHAAAHYQ+cBlmjZaVfqWCeCqkIsCd0
17 DFVYNg2cAqszkABkoiZbCkgJBpEHvsapfDe8dV4IA6kDV1ML3AMIvle8XMac
18 iAk2DgnqiXYMy+jvqmoPDbWecUglBEwYbLo3ow8ndjH6+CMRIABAdQkWdBEG
19 AKEpJPMYNgyQCkBDgNwAeMLCY+GIjepLPG7s+JGOggRpJM4osZJlw5AqN+oE
20 SMdEAJwCUNrUSbThiY6pRiAtyvRoRxJIaTY1EVUEUgAsAlCtCuFqkBJerXL9
21 2nXsWLJoWYQAADs=
22 }
23  {Temporary database}
24  {
25  R0lGODlhIAAgAMYaACEhISQkJC0tLTExMTU1NTk5OTo6Oj09PT4+PkJCQkND
26  Q0REREZGRklJSUtLS0xMTE1NTU5OTlFRUVJSUlNTU1RUVFVVVVdXV1hYWFlZ
27  WVpaWltbW1xcXF5eXl9fX2BgYGFhYWJiYmNjY2RkZGVlZWhoaGlpaWpqamtr
28  a2xsbG1tbW5ubm9vb3BwcHJycnNzc3R0dHV1dXZ2dnd3d3h4eHl5eXp6ent7
29  e3x8fH19fX5+fn9/f4GBgYKCgoODg4SEhIWFhYaGhoeHh4iIiImJiYqKiouL
30  i4yMjI2NjY6OjpGRkZKSkpOTk5SUlJaWlpeXl5iYmJmZmZqamp2dnaKioqam
31  pqmpqaqqqre3t7m5ubq6uru7u729vVpaWlpaWlpaWlpaWlpaWlpaWlpaWlpa
32  WlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpa
33  WlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWiH5BAEKAH8A
34  LAAAAAAgACAAAAf+gH+Cg4SFhoeIiYqLhVtZVlhYjJOCV1VTUlmJT4JJg02K
35  XFpUjok2Nzc1pzZHilFQSlFUiky1tVGIPSq7vLsuiENLQkdHUog5GMnKySeI
36  KEMnNTVBiRIP19gPrYcjIUQhITyJMgnl5hOJKjU7Ly9DihAE8gQGSIkULxbg
37  MYo0HP8cSiSK0sCBiwYNVihqkaFhBg+JiGjIwKKhQkQ4HCjYuHHEoSYaOSpg
38  cNFQAgQoUyKAYoiESpWUYsqcSbOmTZtJfkzioUMnoxsuXOhgFBQGIx8lSvBj
39  JMTEu0UdNnQQ5EEcrUkVJFTg4UGCjURAVIhYYTXRhwVoFzgANS5FDkZDRgzI
40  NQBi0QEDESY5YMB3iaImAgQMKMKoBovDi4JcWFz2UBQLBSIXWAAE0QzJkV8k
41  EgCgs2cATgw5+dw5wLabqFEHAgA7
42  }
43  {Clipbase}
44 {
45 R0lGODlhIAAgAOekAGBBE2lGFHBLFnFMFXFMFnJMFXFNFnJNFXJNFnVNFndP
46 FlxcXF1dXF5eXl9fX2BgXolgH4thH41iH45jH5BlIJJmIJNnIJVoIJdpIJhq
47 IZprIZxsIZ1tIZ9uIaFvIqJxIqNxIqRyIqZzIqh0I6l1I6t2I39/ca13I654
48 I4CAfbB5JIGDfrJ7JIGDf7N8JIKEgIKFgLV9JLd+Jbh/JYyGeLqAJYeJhIaK
49 hIeKhIeKhYqKfbyBJYiKhIiKhYeLhYeLhpCJeb2CJb2CJpGKeb+DJsGEJouO
50 icKFJoyPipaNeo6Oi8SHJsWHJ42Ri46RjMaIJ5GRjZeXipmZjZiYl5ubjqGh
51 laOjoKSkmaOjoqSkmqionaqqoKqqoauroKuroqmrqaysoaysoq2toq6uo7a2
52 rLa2rbe3rbe3rri4rri4r7m5r7m5sLq6sby8s8PDw8TEw8TExMTFxMXFxMXF
53 xcbGvsbGxcbGxsfHxsjIx8nJwtDQz9DQ0NTU1NXV1dXW1NbW1tjY2Nnb2dzc
54 297e3uPj4ubm5ejo6Onp6Onp6erq6erq6uvr6uvr6+zs6+zs7O3t7O3t7e7u
55 7e7u7u/v7u/v7/Dw7/Dw8PHx8fLy8vPz8/T09Pb29vf39/j4+Pn5+Pn5+fr6
56 +vv7+/39/f7+/v//////////////////////////////////////////////
57 ////////////////////////////////////////////////////////////
58 ////////////////////////////////////////////////////////////
59 ////////////////////////////////////////////////////////////
60 ////////////////////////////////////////////////////////////
61 ////////////////////////////////////////////////////////////
62 /////////////////////yH+FUNyZWF0ZWQgd2l0aCBUaGUgR0lNUAAh+QQB
63 CgD/ACwAAAAAIAAgAAAI/gD/CRxIUOCCgwgPFlzIcOECKVQiUpGyoKFFgg8Q
64 6jDB0YQOhA8u/lNwgIBJkwyqXFkZpWWUlVeqMBBwkkCBBAQRMHnCk+cCNl3A
65 CAUjpqiYMW0WBOn5pAgCggR4JulBdUGeNWrSoEFzxkwZMmToLFhBdUiIJwSg
66 8uxBqq0DLWHCeJnLpe6WLVkcYGrb4wNatU/YVqqEpUHCwwsaTClUiVQPD38H
67 Rl0ieDAhQJgzawYkKFLjHh0iC4x6pPLg06hTT5rkmIPof1GLmE5Ne/WkSI43
68 vI5KpDKe38CD3xleJxIkxxp2Pwkym3al1ZGiP3rkOIPyHc1Rr5YUHdIjR40c
69 /mNQXsO3cOJ15siRM6gRI8cXlM/IDt34dPCMGC1ybEG5jNn1RXKfe/opoohj
70 FSgXQ2XD2VFHenLA8cYbbrhhYCKIiNIDBcq5wJZt3Q1YoCIYImJIKD1MoBwL
71 H4b4HYGLkIiIiYYY8kkPEiinAlvRrSdhhRXuMeMhNSLiyI0RKIcCW96B516M
72 MtJoCCOSXAJKDxAod0IPo7w4Yok1GqIIJJZoYkkgOGSZlmRPlNCDKDBGSaQh
73 iEByw503IHGDD2qqRUIPoYw4ZJGOUIKJD3388YceTmCp3Ag9eHLhjGFSeYkm
74 nNygaBxIvODomqM9IUIPm4BZ45hlcgKKJk3w8cUPUy0oYUOfbIbQgyaZYHLJ
75 rphoskknoIgiih83GAFDClBYMatyIABB1bPQQpsDDjxQZYMNNNAqkAFFMOXt
76 t+DyJIQBBAUwQE3opquuSQMAINK7IgUEADs=
77 }
78  {PGN format file}
79  {
80 R0lGODlhIAAgAOeiADMzM0tLS0xMTE5OTk9PT1BQUFFRUVJSUlNTU1RUVFVV
81 VVZWVldXV1hYWFlZWVpaWltbW1xcXH5YHV1dXX9ZH4BaIGBgYIFbIoJdJINe
82 JWNjY4RfJ2RkZIRgKGZmZoZiK4ZjLGhoaIhlL2pqamtra21tbW9vb41rN3Bw
83 cI1sOHJyco9uPHNzc5BvPI9wP5FwPpFxP3Z2dnd3d5R0Q5J1R3p6epV2RpZ4
84 SX19fZh6S5l8TYCAgJp9T4GBgZt+UYODg4SEhJ2BVJ6CVoaGhqCEWYiIiImJ
85 iYuLi6OIXoyMjKOJX6SKYY6Ojo+Pj6aNZJCQkKeNZZKSkpOTk6qQapaWlpmZ
86 mZycnLGadp6enrijg7qlhrunibGxscW0mse3nsm6ob6+vr+/v8DAwM2+qMHB
87 wc7AqcLCws/Bq8PDw8TExMbGxsfHx8jIyNXItd3TxN/Vx9/WyODXydva19va
88 2Nzc3N/f3+Dg4OHh4eLi4uji2OPj4+Tk5OXl5ebm5ufn5+jo6Ovo5Onp6erq
89 6u/q4+vr6+zs7PDs5e3t7e7u7vLu6O/v7/Dw8PPw6/Hx8fLy8vPy8PPz8/T0
90 9PX19ff18vb29vj39Pf39/n39fj4+Pn5+fr59/r6+vv6+Pv7+/z7+vz8/P39
91 /f7+/v//////////////////////////////////////////////////////
92 ////////////////////////////////////////////////////////////
93 ////////////////////////////////////////////////////////////
94 ////////////////////////////////////////////////////////////
95 ////////////////////////////////////////////////////////////
96 ////////////////////////////////////////////////////////////
97 /////////////////////yH5BAEKAP8ALAAAAAAgACAAAAj+AP8JHEiwoMGD
98 CBMqXCjQisOHVqhIaZKkCJAeOGrEUGGCRAgOHBQgtAIKVKhNoUqW/MSyk8tN
99 MDPJxCTyIEk6onLq3MlTJx6aI0PRkCABg4gyob6suNBihRdROYi+QSLhRk2D
100 VkLNkdCiEogPYyRc4TQICg9RmooKSfvoakGSdSS8MNRBhA8JiXJ6cpNTQhYJ
101 cSQAtQkqLtEUbWZI8CQqCFEdoiQwykBEsFuCJO1IgKFzioQ8oiaJwBtZlBai
102 mB4gHAJKjoQUoXK+kbDkEhwKEtBK0ARog2AHCH+AckG0i84zJyrYcJI7qhJR
103 WwQ3QLjjE56e2HUWEkUIEwOEOD7+6clOXlShwQZriN9zh5AfMmDAhJk/X4x9
104 MWgOHcKUAKGMTnvwcUchfwQSiCCEFFKIfog06CAimByAEAsACkggGfTdJwYZ
105 HJKRhiKKYFIAQih0wkcfeBxyYIIMgrjIizAuYskACJVgIooqIrggIoq82MiP
106 QMooAEIjbNKHH3ocIogZYdjXoRlQmoGGGo40YkkACHlgJBd8KMkij4s04ggk
107 kEQSCZmOXImQBkYKkiQhaDhJBpRo1FnnGmeqeZAFmRy5ByJf9ihmmZJQQokk
108 kkSip0ET9PnHn3A6SWedaVTKRqKLFuRAJn48CuiCgo4ZSaGWYGLJoZkStAAm
109 nUIaJ4dKk65RqqmoYnkQApj04emXYYpK6qmY2moQAbnuumOPvhZqaLAIGXAq
110 JZCYasm01FZrrSUGIKTAttwu4O234Ia7AAMAMGTuueieGxAAOw==
111 }
112  {My games}
113  {
114  R0lGODlhIAAgAOeOACAgICUlJSoqKi4uLjMzMzY2Njg4ODo6Ojw8PD09PT49
115  PT8+Pj8/P0BAQEJCQkREREVFRUZGRklISEpKSk1LS05OTk9PT1FRUVVSUlNT
116  U1RUVFZWVllVVVhYWFtYWFxaWltbW1xcXF5cXF9cXF1dXWJfX2BgYGFhYWVi
117  YmVjY2RkZGhlZWZmZmllZWhoaGtnZ2xoaGxpaWpqam9sbG9vb3Jvb3FxcXVy
118  cnR0dHZ2dnl2dnd3d3h4eH13d3p6en55eXt7e4B6enx8fIB8fIN9fX9/f4CA
119  gIR/f4GBgYKCgomDg4WFhYaGhoqFhYyGhoqKiouLi5CQkJWOjpaOjpGRkZKS
120  kpeQkJSUlJWVlZuUlJ6Wlp6Xl5qampycnKKamp2dnaKbm56enqScnKCgoKef
121  n6KioqmgoKqhoaWlpa2kpKioqLCmpqurq6ysrLGxsbKysrOzs7S0tLyysra2
122  tr6zs7+1tbq6usO4uLy8vMO5ub29vcW7u8e8vMDAwMi9vcfHx8nJyczMzM7O
123  zs/Pz9LS0tTU1NbW1tra2t3d3eLi4uTk5Ojo6Orq6uzs7P//////////////
124  ////////////////////////////////////////////////////////////
125  ////////////////////////////////////////////////////////////
126  ////////////////////////////////////////////////////////////
127  ////////////////////////////////////////////////////////////
128  ////////////////////////////////////////////////////////////
129  ////////////////////////////////////////////////////////////
130  ////////////////////////////////////////////////////////////
131  /////////////////////yH5BAEKAP8ALAAAAAAgACAAAAj+AP8JHEiwoMGD
132  CBMqXMiwocOHECMqtEOxokU7Ev+p+cKxo8eObSLC0YMHz5iTbkrGOVlGop1G
133  MHnI7ANzkEweSSLOYcQTh089PAP5xHElitGjSJFyEfhmkVMaUO04BQSVxpMu
134  WLNq1YpGIBMfYA2J7QKWilhDPGSoXcuWrRGBQljIVUQXi9wldBXlkMu3r18c
135  AnmcGJyoMJXBSAonsjG4sePHNARCCUO5suXKKkJo3syZswyBYxCJ7kCajZ/T
136  TUh3SHHaj44OrWOfFtjlkO0MuNW0JoM7w5DWNzKcFiOlePEsAqv8WW6i+ZjT
137  e/JcqFBhS53TNSpgp86dhEATE8L9ny1yGoyfGOHpiDk9YwL78PA7CAQBoX6h
138  +0BOE/HjBIIIP0ecBgMEAtZnoAYCbdDAgoQ0uMNpLcixRgM/+PHBaSs0cJoW
139  TnTYoQUCAdHGiM2BdxoKU/ghgRd0JHAiArK1NoFXgtRowI0GnFbCC368cIcV
140  OfpRQpBD4mhABAIlEciSBDRJwGkjLMCHGX7A8KQfI1yZpZMEOCCQC0cNIOYA
141  p3kwwBmnKUCmH2aWOaaYCQjEgAB01inAaRwI0IMfadCJ551+WEHEoIMqIdAB
142  ASSqaACnYRAABX4EkWijjMY42z8TAKDpppx26umnBQz0gIGklmrqqfVlpOqq
143  rEIUEAA7
144  }
145  {Large database}
146  {
147  R0lGODdhIAAgAKEAAP8AAP///wAA/wAAACwAAAAAIAAgAAACiYSPqcvtH6KctFpks544iA9+
148  WRhGHQmOqGAeUblR8AnH3uzeNxunYkB7/VS8X1DIq6SELQNTspxEdcCcZTqldIjIzZaYrXzB
149  tvE1LLaChxmz9IeWuLtQtjbHDmN5xx33eRRHZ4THIlhnyFd4+LZEY9fjuEiyJum0Q3mG0gRg
150  4ymn9un1QFpqeloAADs=
151  }
152  {Correspondence chess}
153  {
154  R0lGODdhIAAgANMAAAAAAAAAqgCqAACqqqoAAKoAqqpVAKqqqlVVVVVV/1X/VVX///9VVf9V
155  ////Vf///ywAAAAAIAAgAAAEuPDJ+YC1NOs97fkfxo0UcDxgKpIcgL5p6LLZPJ24atM7leu8
156  1waHAo5MMM4PtKoliRniwTPdmFLJ4ZWpuVI/2U6sWgsxvk/UltrzMs5f6TpEFk/fF/RpLivf
157  zzJUaipqbTKATBd0XFNta1uJi5E9EnFjTJd1XZCXnFwkliqZlJueU52kNQYGlpxNoKusX480
158  JbEeuI21qqsmvhe7Xbe/wS23p6nBAMO6xcK9yM7Pss3SGdAuydKvNBEAOw==
159  }
160  {Computer chess}
161  {
162  R0lGODlhIAAgAOezABVBgRtFhRFKiSBHiBNLihVMjCVMhzpmokNpmj9qpzhuqkFsqUxrl0FupE1s
163  mEpspDpwrERurE5tmTtxrUNwpj1yrkRxp0VyqD90sEt3rkV5tUx4r055sVB7s1F8tFJ9tVN+tlV/
164  t0yCuHx6flt/slaAuX17f1yAs1eBuk+Eu12BtFiCu1CFvFaEtVyDsF6CtVmDvFGGvV2EsV+DtlqE
165  vVKHvoF/g2CEt1uFvlOIv1mHuGaEsmGFuFSJwIOBhVqIuVuJulaKwWOHulyKvF2LvViMw1mNxF+M
166  vmWLuGCNv2GOwGeNulyQyGKPwWOQwmmPvGSRw2qQvWWSxGaTxWyTwGeUxm2UwWiVx26VwmmWyZKQ
167  lG+Ww2qXyo6SlZORlXWWvnCXxGyYy5SSlnaXv3GYxW2ZzHeYwHKZxpaUmHOax3mZwpeVmWeez3Sb
168  yJKXmXqaw3Ccz5iWmnubxJmXm3edynydxX6fx56coIChyZ+doaGeoqKfo6Wip6ekqamnq7K0sbO1
169  srS2s7a4tby+u72/vL7BvcDCvsHDv8XHxLvK3rzL38jKx73M4MnLyMrMycvOys3Py87QzM/RztLU
170  0dPV0tTW09XX1MzY5tLY2tbY1c7a6NXa3Nja1s/b6tbb3dnb19rc2dvd2tne4d3f3N7g3eDi39rj
171  6+Hk4OPl4eTm4+Xn5Obo5efp5ujq5+nr6PL08fn7+Pr8+f7//P//////////////////////////
172  ////////////////////////////////////////////////////////////////////////////
173  ////////////////////////////////////////////////////////////////////////////
174  ////////////////////////////////////////////////////////////////////////////
175  /////////////////////////////////////////////////////yH+EUNyZWF0ZWQgd2l0aCBH
176  SU1QACH5BAEKAP8ALAAAAAAgACAAAAj+AP8JHEiwoMGDCBMqXDjQi5iHECNKlNhFYSNZGDNq3LgR
177  kkJHlwAMECCAAIECBQyoXLkyAKNIHzVZeHFDCJIlUaiAGTMGzJctQLfISAQzoSNND0io4AEEp5Ut
178  ZM6oIQMGKBYXRGM2IFEzyRMqW8CkkUP2jZozZHZkNaqJQosfQJREwSL2jRw7dtpsiQJkw1qERynM
179  AJIEihUwZ9rQwQNmRYcNGCocUFQUsKYIN4A0kYKFjOI0OT6I7qAhQwLKMS/8OOLkcJo2TXrkqMEC
180  xQcPHBagZquadZUsUo4YUZKkSBAcLEp4gLDbMoQUNXoQbgJlyhQpTZIEyZEiBPPKB4/+KhABo8eR
181  JlOyhFlfxYmRHskvNA+vSUEJFkGUMKkShg2cMldAoUQQNKBQwV/hmYKABA40yMCDED7YYIMIdAKe
182  QY7IEsuGHHboIYeyeJTQIY2UaKIjKKaoYoqPIKKQKJHEGCMkNNL4yI2OmLjIIo14kpAenPwByJCA
183  BGLkkUgi+QcndxxkgiiDJCnllEYOwskIBsUByypcouLlKad88gknZHJCyplokjLKK2sYtIkrrHC5
184  ipeonFKIIHgKQgiYfPKJCiYFudEKnX2eMoohhxiC6CGkFMonK2gQFMcnMlYa4ySUZErJJJZW+kkc
185  BM0xSiWklkoqJXpooaoWe1hiqqkio8xBkA98+GHrrbj2oWsfuPbqBx82MCTssMQWa+yxyBoUEAA7
186  }
187  {Sorted Index of games}
188  {
189  R0lGODdhIAAgANMAAAAAAAAAqgCqAACqqqoAAKoAqqpVAKqqqlVVVVVV/1X/VVX///9VVf9V
190  ////Vf///ywAAAAAIAAgAAAEovDJSau9OOvNu/9gKALkE5wPqa5A10pJHGtvxrImqkrAcWC1
191  i2zGS/kut1wglUwZf5UgbIh09qCT0ml5w1mflNcwsWmZwbyuuvQ1H52hs/z9WkvbVvoIfy0y
192  11F8enFtCQGDgBZyKYeDIHKGPo4fco1vW5iZmDVmkZI8Y6FjAEtWllh2ajqebxSir2OnGJq0
193  mpJYF7e6u7scvL+3IsLDxMUUEQA7
194  }
195  {Player collection}
196  {
197  R0lGODlhIAAgAOfIAABO/gBQ/AJU8QBU/gNV8QBW/QBb/gFb/gBc/QBg/gBh
198  /Qxe7wFh/gBl/gFm/gBn/QBr/gBs/RRk9gNt/hJo9wBy/gBz/gB3/gB4/gB9
199  /gt4/gB+/gJ+/gCC/gt9/gCD/gCJ/gCK/gGK/hKD+wCP/g6J/gGQ/hKI/CV/
200  /gWR/gCU/jV97wGV/jZ8/hCQ/gCZ/hyL/h2L/gGa/i6F/g+V/huP/hCV/i+G
201  /hyQ/gCg/iSP/gGh/gud/gai/iSV/B2b/gCr/gGr/iea/hCm/gCw/ham/gGx
202  /kiQ+A+v/hCv/hCw/jad/iml/i+i/huu/hSy/RC1/RC1/kiZ/liR/gq6/lmS
203  /gu7/kid/iO0/hW9/Ra+/jqs/l2d9Ce3/k6k/lyf9Su3+iy4+T6u/jmx/i65
204  +Se8/j2x/lyj9ju1/lym9yXC/lyp+Hmh3GWl/ki1/lys+XCk/lyw+mWs+km6
205  /nCn/lW2/lyz+zbH/TfH/TjI/V22/DDN/l25/Wq1/kbI/E/E/kjI/F69/V/A
206  /lvE/lzE/my8/lvF/lzF/mDD/nC7/kvQ/WHG/oG3+XK+/UvS/W/A/oG5+VfQ
207  /WPK/oe4/lvP/FnQ/oC9/om5/lrS/XfE/lzS/X3G/n7G/nvI/nDP/pC//nDR
208  /m3T/pDC/oPK/n7S7m/b/pXJ/nvY/JrK/pvK/pDR/o3T/pvM/p3M/oTc/p/S
209  /oze/rbO/qfW/qnW/qLa/rbQ/rjP/q3W/rjR/qfa/rbU/rjU/rbW/rjW/rba
210  /rjb/rDg/q3i/rLg/rbf/q3k/rjg/rjm/rjn/q6urq6urq6urq6urq6urq6u
211  rq6urq6urq6urq6urq6urq6urq6urq6urq6urq6urq6urq6urq6urq6urq6u
212  rq6urq6urq6urq6urq6urq6urq6urq6urq6urq6urq6urq6urq6urq6urq6u
213  rq6urq6urq6urq6urq6urq6urq6urq6urq6urq6urq6urq6urq6urq6urq6u
214  rq6urq6urq6urq6urq6uriH5BAEKAP8ALAAAAAAgACAAAAj+AP8JHEiwoMGD
215  CBMqXMiwocOHECMmJIUpksWLGDVJ/KcIz52PIEPmcSSxVLFilaxQUeMKFiwt
216  VKzskXjnJCgjRMoQO3YsChEiWfwAGkq06FBKBGsW8xQESJdgxowpAQIECpgw
217  WLNqxUrm1MA/gwgNOkSWkFlDZLEgScK2rVu2T0INdNKjxxxgwlYNqUtLmDA0
218  OQILHix4h6SBRV68cDOsmCoeinOdNKO4smXLMhYNHLNlS51NnB6J6ZyJEycm
219  KlKrXq2aBaKBnWTNKmSDRpNXs2b9oEEjBYnfwIMDNyFo4ChfvxKJACHk1q9f
220  LkBIn069OogQgQY2YtWqD44aS0zPtWpVooP58+jTd/jAZ6APGDG8oEplSUeM
221  GBwy6N/Pv3+GDXoMdMIFF1zBSy+ieEDgggw22CAGdgw0QgUVSKHLLp9oQOGG
222  HHbYoQVxDCTHJJe0ccMMKEwAwYostuhiixG8MRAkteBChwMN5Kjjjjz22MAD
223  awzESCy2wMFAAkgmqeSSTCagQBoDHTFFFS0cYMCVWGap5ZYGIHDGQBQMIOaY
224  ZJZpZpkFfDGQBAC06eabcMYJZwBcDLQCAQLkqeeefPa55wJsbCTooIQWauih
225  BwUEADs=
226  }
227  {Tournament: All-play-all}
228  {
229  R0lGODdhIAAgAKEAAP///wAAAAAA//8AACwAAAAAIAAgAAACZoSPqcvtH6KMYM6HM7RVdq+F
230  4kg2gnEC6YqW7usIsmwExnDnAL7rmA1rAF0zWq+i4yl9mmFQ4QwVU0vkscojRZ+HbayY1AGx
231  QS/XnJiGr7X1E13+ztZka5ZrxSO8ara/CqcnOJhQAAA7
232  }
233  {Tournament: Swiss}
234  {
235  R0lGODdhIAAgAIAAAP8AAP///ywAAAAAIAAgAAACRYSPqcvtD6OctFoQss437d0hnxYeI1di
236  Z6qO7BlU8Pw59B03OG3vcO9z6YJCBrG4ONYov1Sz9AxFO9NL1XJlabfcrldRAAA7
237  }
238  {Grandmaster games}
239  {
240  R0lGODlhIAAgAOevACAgICUlJSoqKi4uLjEwMDMzMzY2Njg4ODo6Ojw8PD09
241  PT49PT8+Pj8/P0BAQEREREZEREVFRUlHR0lISEpKSk1KSk1LS0xMTE5OTlFR
242  UVVSUlNTU1ZWVllVVVhYWFtYWFxaWltbW1xcXF1cXF5cXF9cXF5dXWJfX2Bg
243  YGFhYWViYmVjY2RkZGZmZmllZWplZWhoaGtnZ2xoaGxpaWpqam1qam9ra3Ft
244  bW9vb3FxcXR0dHhzc3Z2dnd3d3p2dnh4eH13d3x4eHp6en15eX55eXt7e4B6
245  enx8fIB8fIN9fX9/f4CAgIR/f4GBgYZ/f4KCgomCgomDg4WFhYaGhoqFhYyG
246  ho6Hh4qKio+IiIuLi5CJiZCLi5KMjJCQkJaOjpGRkZKSkpeQkJeRkZSUlJWV
247  lZqTk5uUlJ6Xl5qampycnKGamqKamp2dnaKbm6Sbm56enqScnKWdnaCgoKef
248  n6KioqmgoKqhoaWlpayjo62kpKioqK+lpbCmpqurq6ysrLOpqbOqqrasrLet
249  rbeurrGxsbKysrmvr7Ozs7S0tLyysra2tr2zs76zs7+1tbq6usK4uMO4uLy8
250  vMO5ucS5ub68vL29vcS6usW6usW7u8a7u8e8vMDAwMe9vci9vcfExMfHx8nJ
251  yczMzM7OztLNzc/Pz9LS0tTU1NbW1tra2t3d3eLi4uTk5Ojo6Orq6uzs7P//
252  ////////////////////////////////////////////////////////////
253  ////////////////////////////////////////////////////////////
254  ////////////////////////////////////////////////////////////
255  ////////////////////////////////////////////////////////////
256  ////////////////////////////////////////////////////////////
257  /////////////////////yH5BAEKAP8ALAAAAAAgACAAAAj+AP8JHEiwoMGD
258  CBMqXMiwocOHECMqdESxokVHEv/pYcOxo8eOfiIeqhQpkpyThEoiOklHoiNX
259  MH/I3ASTlMwfTyIqasVTh89KPEP51DGmi9GjSJGiEViIlVMcUB05BQUVx5U0
260  WLNq1XpH4BQhYE+JTQP2i9hTP2ioXcuW7RKBR1rIXUWXjFwpdFfxkMu3r18d
261  An+kGKyq8JfBTQqryjG4sePHOARmeUO5suXKLERo3syZMw2BclKJ9kC6j2hK
262  ahJhkgRoiwnSnWJTIe1hRexO/9Kg2r2htx5UozR1wiMmTqZOg0ZsuD2n9wYk
263  t/+B+UQdhXU5njh18oGhe43jXDD+xF4kKUP3M41i/0NBof1ZJWU6wWlPf8iN
264  CxRit+k0oz0jOOqFEMGAphRYhCCdBDHgggzGlkQnVURAQidMqMeBAxiWomEP
265  k3QSA4YghhibC4nw4QARnYCgXhF+tGgde5B04kICNN4WWwKxqeBFJxOswYgC
266  6k0hypAHFHnAH53sYGQUUZgR2wGxnRCDh5CEASVuT4SiZQFcFmBFJ250yWUJ
267  sRUQWwkMaFJHJzKYiRsMRw0g5wASXNKJDXMS8GAnA8T2wQB2xLZAn7g1IMCh
268  iB76gnBwOKGFIbF5IUBsHQgARCd5HKoeAgF06qmnEGARiCWP7AFFBZ3GpkEA
269  FnRiRKoduFEAwKy01mrrrbgaMNADDPbq66+9ZiTssMRCFBAAOw==
270  }
271  {International Master games}
272  {
273  R0lGODlhIAAgAOeNACAgICUlJSoqKi4uLjMzMzQ0NDY2Njg4ODo6Ojw8PD09
274  PT49PT8+Pj8/P0BAQEJCQkREREVFRUZGRklISEpKSk1LS05OTk9PT1FRUVVS
275  UlNTU1RUVFZWVllVVVhYWFtYWFxaWltbW1xcXF5cXF9cXF1dXWJfX2BgYGFh
276  YWViYmVjY2RkZGhlZWZmZmllZWhoaGtnZ2xoaGxpaWpqam9sbG9vb3Jvb3Fx
277  cXVycnR0dHZ2dnl2dnd3d3h4eH13d3p6en55eXt7e4B6enx8fIB8fIN9fX9/
278  f4CAgIR/f4GBgYKCgoWFhYaGhoqFhYyGhoqKiouLi5CQkJaOjpGRkZKSkpeQ
279  kJSUlJWVlZ6Xl5qampycnKKamp2dnaKbm56enqScnKCgoKefn6KioqmgoKqh
280  oaWlpa2kpKioqKmpqbCmpqurq6ysrLGxsbKysrOzs7S0tLyysra2tr2zs76z
281  s7i4uL+1tbq6usO4uLy8vMO5ub29vce8vMDAwMi9vcfHx8nJyczMzM7Ozs/P
282  z9LS0tTU1NbW1tra2t3d3eLi4uTk5Ojo6Orq6uzs7P//////////////////
283  ////////////////////////////////////////////////////////////
284  ////////////////////////////////////////////////////////////
285  ////////////////////////////////////////////////////////////
286  ////////////////////////////////////////////////////////////
287  ////////////////////////////////////////////////////////////
288  ////////////////////////////////////////////////////////////
289  ////////////////////////////////////////////////////////////
290  /////////////////////yH5BAEKAP8ALAAAAAAgACAAAAj+AP8JHEiwoMGD
291  CBMqXMiwocOHECMqtEOxokU7Ev+d4cKxo8eOayK60YMHD5iTbEq+OSlGoh1G
292  MHvI5ANTkMweSiLGWcQzh089PAH5zGElitGjSJFmEdhGkdMaUO04/QO1xhMt
293  WLNq1VpGIJMfYAuJ1QJ2ithCPWaoXcuW7RGBQ1rITUT3itwldBPpkMu3r98c
294  AnugGIyo8JTBSQojujG4sePHNQRC8UK5suXKK0Ro3syZ8wyBYA6J9kBajWg8
295  Hvr02ZFadRPSHlSoXu2hhUAthnJr2H0mNx0NqnEAVx1mtwYis4WjEEjFj/MT
296  0ME4R2NBtY3qfeTkwWDBApY61i3+lBB4goL5s0bMm1dNg4LqLn1kmJ/zhT0F
297  DwJDRNhPqH+Q/fupFkMEqhXRhxMRjNAHEgJGsIFAHDgg4SAU8iChhKqx4IBq
298  LsCRhgNA9AFChg5cIFAQa6QIXXkJtJiAaim82EcKUvQxwRZzKABjAhR4FciP
299  BwQpZJCqmXBAkTD0AcMdVRzZh5ESCKQEIFQSYOWVVqpGAgFaMrDHGH3EwGUf
300  Wz4g0AtHDaDmmmqq9sEAbg5AhmoLwNnHmwoI1IAAfPbppwCqdQBoH4L60IcZ
301  fAYqwAECIRDAo5BGGoBqGUzaR6UV9CHEo5QGUIBAFAAg6qiklmrqqQYMBAGA
302  rLbq6qsJ+2Uk66y0QhQQADs=
303  }
304  {Blitz (fast) games}
305  {
306  R0lGODlhIAAgAOfxACEhISUlJSoqKisqKS4uLjQyLDMzMzQ0NDY2Njg4ODk5OTs7O0I8Hjw8Ozw8
307  PD8+Oj4+Pj8/P0FBQUdCLEJCQk5FG0REREhGPUZGRkdHR0pKSk1LQktLS09PT1BQUFpSK1RUVFtV
308  O2FXKFdXV1pYT1hYV1hYWFlZWVxcXGNdQl1dXWBgYGNhWHNjFmFhYWJiYmljRXBmM2VlZWZmZmlp
309  aX1sGmtra3ptL3NuWW9vb3BwcIRzHnJycnR0dIB2R3x2WHZ2dnh4eHl5eXp6epJ+HIp9P3x8fH19
310  fX9/f5uDDoKBfIKCgpaFMIODg4aGhoeHh6CLJoqKiqmOCqeOE4yMjJCQkJGRkZKSkpOTk7CXGreZ
311  B5WVlbqdEb+fAr6gCcOhBZ2dnb+hFL6hF56enp+fn8OkDKCgoMWlA8elAaGhoaKiosunAMioBMup
312  AsypAsupBsypBsuqBc2qAs6qAMyrAqampsysBM6rC9CsANGsANGtANKtAM6uCKmpqaqqqtCvCtSx
313  BKysrNOyBdSxD9GzBdW0DtW0G7Kyste6A9m4E7S0tNm5Gtm5Idq8AbW1tdq6Jre3t7i4uNq8Lbm5
314  udu9Lt7BCrq6utzAG7u7u9vBJtrAOLy8vL29vb6+vsDAwMHBwcPDw+PLKODIU+nPEsjIyOzTCMrK
315  ys3NzezVLe/YDe3VNO/YFM/Pz/DZEPDYHNDQ0PLbFvLbF9PT0/PdG/PdHPTdHdbW1vLeP9fX1/Xg
316  KPXgLNjY2OvcgvThP/biMffiNfXiPffkOPXjSfbjSPbjSdzc3PPjV97e3vjnTPXmZ/noTPnoTvfn
317  XuLi4vrpXPrqYOTk5Pjqc/vrYfTolPvrYvvraPrscPnsfPrtdPntfvvucejo6PzucvfsmvzvdPnu
318  kf7wfuvr6/3xhPrwnP3yi+3t7f3ymPjyxPv0sP32tv33wP351P/60f364P/84v797v/+8///////
319  /////////////////////////////////////////////////////yH+EUNyZWF0ZWQgd2l0aCBH
320  SU1QACH5BAEKAP8ALAAAAAAgACAAAAj+AP8JHEiwoMGDCBMqXMiwocOHCj95mkixoidQEAUeGsOx
321  o8eOkTJO6sSJk5mTh0o6OqkGU0ZM5WIKmfkp5quZQtJkhBSuZ4+fnXqe+tlji5WjSJMmrSNQ0ban
322  OaJiemoqao4oYLJq3bqV6b8nQ8LiGgsmrJWxuILYWGvjxyBKkh4xWpQIUBglAo/M2Aut75a9TvpC
323  A7J3r5hz8NyxS/fN2B8cPQQGeUG5meUrlJdYbsaD8osiot6REwfOWrJCPl7oEEiFjGuPrzvKUKGC
324  xZ125rxx0xbtEhPaNgSmOUbchPFAxDcZX24CCi91z6hJwxYqSwnjMwSCKcYdhPc+3C3+eR8Pw9A6
325  Z8qWVVNVhsT4FwKxkJq/on6a+X466NfPZVq2X8Egc0scKezXgQoCraDBgrs0iMSCEC54gybo6JKL
326  L70IMoccbrTxRQwnCIQCBiTaYqIRJKaIwQZvdDPONcwAk8swxAiTiRchYACCQCNI4KMsQAbh45AS
327  ELGHHnnggcostNTiCh9TXOCjBwIZEciVLmSpgQNcdtnlA3CsAksso7CxQwNdciCQE6y0mcCbcMYJ
328  5wd2pNJKJWeIIGcGAjVxyp8GBCrooILWgEgphGgxAaEGUCAQDVVESsCklFZKqRSN0JFEAZZOCoFA
329  EQgg6qikljoAGmu0UCqpCgi0QAAtsMYq66wMdFHBrLMeIJAFAPTq66/ABissAgOhQNuxyCar7LIZ
330  Nevss9BG21BAADs=
331  }
332  {Tactics}
333  {
334  R0lGODlhIAAgAOeKACAgICUlJSoqKi4uLjMzMzQ0NDY2Njg4ODo6Ojw8PD09
335  PT8/P0A/P0BAQEJCQkREREZEREVFRUZGRkpKSkxLS05OTk9PT1VSUlNTU1RU
336  VFZWVllVVVhYWF1aWltbW1xcXF1dXV9eXmBfX2JfX2BgYGFhYWNhYWRiYmVi
337  YmVjY2RkZGhlZWZmZmllZWhnZ2hoaGtnZ2toaGxoaGpqam1qam9ra29sbHJt
338  bW9vb3Jvb3Rvb3FxcXZxcXVycnR0dHdzc3Z2dnl2dnd3d3h4eH14eHp6ent7
339  e3x8fH9/f4CAgIGBgYKCgoWFhYaGhoqKiouLi5KMjJCQkJGRkZKSkpiSkpSU
340  lJmTk5WVlZqampycnJ2dnaObm56enqCgoKKioqWlpayjo6ykpKioqK+mpqmp
341  qaurq7KpqaysrLGxsbKysrOzs7S0tLuxsbyzs7a2tri4uL+1tcG2trq6ury8
342  vMO5ub29vcS6usa7u8e8vMDAwMi9vcfHx8nJyczMzM7Ozs/Pz9LS0tTU1NbW
343  1tra2t3d3eLi4uTk5Ojo6Orq6uzs7P//////////////////////////////
344  ////////////////////////////////////////////////////////////
345  ////////////////////////////////////////////////////////////
346  ////////////////////////////////////////////////////////////
347  ////////////////////////////////////////////////////////////
348  ////////////////////////////////////////////////////////////
349  ////////////////////////////////////////////////////////////
350  ////////////////////////////////////////////////////////////
351  /////////////////////yH5BAEKAP8ALAAAAAAgACAAAAj+AP8JHEiwoMGD
352  CBMqXMiwocOHECMqlEOxokU5Ev+J0cKxo8eOZyKqqTNnTpeTaEquOelFopxE
353  MIfIzAPzj8whSyK6QcTTh886PPv49FElitGjSJFiEZjmkFMcUOU45QMVh5Ms
354  WLNq1fpFYJMiYAWJzQJWilhBQ2aoXcuWbRKBR1jINUT3ilwmdA0Bkcu3r18f
355  AoeUGFyosJTBSgoX2jG4sePHOAQ+4UK5suXKKj5o3syZ8wyBXQiJ5kC6jOg5
356  pFPr0ROEg4stcO6woRKCNAuBWQbpxsBbjO43vIOv7iECjp4xVtroCcO7hMAp
357  e6KTmN4lOpkK2LGvzgFFDxjsJ1bYp6gAQiCJCejPIkHPnv1qGzWImEBfYXWM
358  CRwEeojAP5B/I/wFGOBqMggYwQ96xEFBBBkIpEEDEAIioRAQVljhaitYSAMd
359  dsAAoQUCGXHGiNOdl8CJKJ64GgootoBHHB2gOIFXftR4wI045njjaiPgaIYe
360  POQogUBL9GEkAUgmqSSSOugAQZI36MCAkg4I9MJRA2Sp5ZZcdrmlAgItIMCY
361  ZJZp5mobkIlmmQcIhEAAcMYp55yrXRBnnXIWINAEAPTp55+ABiqoAQM9YOCh
362  iCYaQUaMNuooRAEBADs=
363  }
364  {Endgames}
365  {
366  R0lGODdhIAAgAKEAAP///wAAAP/73wAAACwAAAAAIAAgAAAChYSPqcsZDWOYsa5ns5lYXwoE
367  AsZ54TQ+orqCFToK6RynVsulONpBO6/L9Ro/Hkd4Kx6FQ2JLBpUZPbBltfmyWjeg0ql3jAY3
368  wTJYuySLxec1tIs+OuJD0RpLRZsUdvbe4Yan0RclmEH49oeAKKV4wDjiyKUlCcNm6EPnMghZ
369  iMmn6SXJUAAAOw==
370  }
371  {Openings for White}
372  {
373  R0lGODdhIAAgANMAAAAAAAAAqgCqAACqqqoAAKoAqqpVAKqqqlVVVVVV/1X/VVX///9VVf9V
374  ////Vf///ywAAAAAIAAgAAAErvDJSau9F+jNu9cYMBxDaZ4oCoRj6rqgJZJvXQLHWs22jec6
375  Ca/3+gWCjyExZUQqURLf4XCkPE2UWtPaSmWL0+rkWvrCws6u9yGlpmnQiRbNhWMrYHd9bVbR
376  x2plF2d6gHYDGIRiQoGIg0x/jIdLN5FJjZQDW4aZfoWSnSeboKGVn5eTlKOopaaLSRqtmpY/
377  H7YetD9Tu7y9vpawv8LCr0IbAcjJysvMSFa30BwSEQA7
378  }
379  {Openings for Black}
380  {
381  R0lGODdhIAAgANMAAAAAAAAAqgCqAACqqqoAAKoAqqpVAKqqqlVVVVVV/1X/VVX///9VVf9V
382  ////Vf///ywAAAAAIAAgAAAErvDJSau9F+jNu9cYMBxDaZ4oCoRj6rqgJZJvXQLHWs22jec6
383  Ca/3+gWCjyExZUQqVaJak/I0caSHw5HaYm6wWmcXqgFvJ1VrtJg9C8enKzvMpcU7c3cSfsPD
384  2mJ2fR5/dGh8H2txgHVkfiqMh4JLVpFvk5QDU5KZkIaXnYufe5iUm6ChN5akqaqjX62nSVmJ
385  tRyrGlm6u7y9u3pJP77DvcDBGgHJysvMzUhUttExEQA7
386  }
387  {Openings for either color}
388  {
389  R0lGODdhIAAgANMAAAAAAAAAqgCqAACqqqoAAKoAqqpVAKqqqlVVVVVV/1X/VVX///9VVf9V
390  ////Vf///ywAAAAAIAAgAAAEuvDJSau9F+jNu9cYMBxDaZ4oCoRj6rqgJZKq+JrAsVZzrd2l
391  nG4n6Z04wIEwQHwYcZvksvmEJpWHA5NSVUaBU24LiryFJ1UPOLtFj73q17n4/tgkKja1/hlQ
392  jnpiNEB/OIFugzeFQYd0iYoPeVp7jy6LWJOCSRaGmYibFZ1tjoQXjJ6kkJyYo05vlqaslFdy
393  ja6VtLJcP7mSrUJ2wRy2GlnGx8jJx61OQsrPyczNGgHV1tfY2U27wt07EQA7
394  }
395  {Theory: 1.c4}
396  {
397  R0lGODdhIAAgAKEAAP/739jGpgAAAP///ywAAAAAIAAgAAACfYRvoauIzNyBSyYaLMDZcv15
398  GDiKFHmaELqqkVvBXCN3UniXebq3/fuLBWlDmwN31CV5S18T+BRqokSqTSCYKB8lwWCQ3Wy1
399  PCzZyU15wRdmerX+ZpHvCPY+H7fRZ2h9VvUX2CclaGTI4kc4uKfYWLh4GJkI+cgo5jZZo1EA
400  ADs=
401  }
402  {Theory: 1.d4}
403  {
404  R0lGODdhIAAgAKEAAP/739jGpgAAAP///ywAAAAAIAAgAAACf4RvoauIzNyBSyYaLMDZcv15
405  GDiKFHmaELqqkVvBXCN3UniXebq3/fuLBWlDmwN31CV5S18T+BRqokSq8aEQCKRYJlYwGGyv
406  E2VXyy17y2Bxtet8tMNbFlSuzZMva35cPXMHKOhHuGE2mFaoeNjX+Lf4ligZufdoiASHiVip
407  UQAAOw==
408  }
409  {Theory: 1.d4 d5}
410  {
411  R0lGODdhIAAgAKEAAP/739jGpgAAAP///ywAAAAAIAAgAAACh4RvoauIzNyBSyYaLMDZcv15
412  GDiKFHmaELqqkVvBXCN3UggIwlTepa67pHzDoLBFbAF3m57jswzinqPobvpwZocaKneL9Opi
413  yZdPMBgIaGWyeM32hrNodRxsftbTa1b+YWUj98fzVThDeJTYZKjohvd4uIglGel4V4l5KQip
414  yTiXyRnqZwlQAAA7
415  }
416  {Theory: QGD: 1.d4 d5 2.c4 e6}
417  {
418  R0lGODdhIAAgAKEAAP/739jGpgAAAP///ywAAAAAIAAgAAACmYRvoauIzNyB6wgxaZBJm3t1
419  FAdo24eJEGmiYelxLQjCo+zRYYvfksn7xYS+l23VQ9JUkWQTYAw6eMvjc5rTWSvOig4jfQyx
420  PhIZSURHFRduuikYDFJsuaDRxUNTtrb+DGfXETf3JzZCKBiQWMiStbSoc/LmBlh5CHSFqZlR
421  tnnZiWZpGMrJBHpKmjo5yvqpugUbVooa63pQAAA7
422  }
423  {Theory: Slav: 1.d4 d5 2.c4 c6}
424  {
425  R0lGODdhIAAgAKEAAP/739jGpgAAAP///ywAAAAAIAAgAAACmIRvoauIzI4QBy5XbTBzJo19
426  lkSJUAhoG9CVKvq23hvGcgrWOUbz6u7oBXceU0Q3YnWMF+SJU8IlfckWs+GMyCjCB2grfVLF
427  wymqTPZOi9JJc3wUDAaugJyOhb/ZC3ceHTdXdyfwp3ZyJ5iSiAfzdWMns6JnmGF2+PMGqInJ
428  aZn2eUQ5uVl5RdppGiZaihrqeep4+aradVAAADs=
429  }
430  {Theory: 1.d4 Nf6}
431  {
432  R0lGODdhIAAgAKEAAP/739jGpgAAAP///ywAAAAAIAAgAAACioRvoauIKqJoLrFVrYwhg4tl
433  wcZ5IFWNZCeeJiexqdtCZX29q0lXZNxznGTC4MN4GPJAyxyO0YQ+QzPmFFW0Vp1baZfqyXLF
434  3iwHe9QWBYPBhJgep8/wJFLTfkfBD3bbXWeh1rdzFfhxhzg0aMcoKNcI+VgWRxlpOcl3qZmJ
435  tunZeahkuAeqKAlQAAA7
436  }
437  {Theory: 1.e4}
438  {
439  R0lGODdhIAAgAKEAAP/739jGpgAAAP///ywAAAAAIAAgAAACfYRvoauIzNyBSyYaLMDZcv15
440  GDiKFHmaELqqkVvBXCN3UniXebq3/fuLBWlDmwN31CV5S18T+BRqokSq8aETCCZKbEowGGw3
441  XS5Pa3Z6W2DxhbmOtMNbZLyizdfLb3V6JnVXJXj1F2g4iFjYB0XI0qj4eMg4SQYXWSOZaFAA
442  ADs=
443  }
444  {Theory: Sicilian: 1.e4 c5}
445  {
446  R0lGODdhIAAgAKEAAP/739jGpgAAAP///ywAAAAAIAAgAAAChYRvoauIzNyBSyYaLMDZcv15
447  GDiKFHmaELqqkVvBXCN30iII8V3yeU7jpYTAoCPk+xkfveNPyXrdnsDo7thkDjXYrbYlBOcm
448  WXJKMBgILl6zeM0Gd1todVw6j9TTa2S+QtVXdnf1NVPohmeISLiUyLgxGNnWaPPnWGmFOSm3
449  uOnnaRmqUQAAOw==
450  }
451  {Theory: Sicilian: 1.e4 c5 2.Nf3 d6 3.d4}
452  {
453  R0lGODdhIAAgAKEAAP/739jGpgAAAP///ywAAAAAIAAgAAACo4RvoauIzNxZQiyZYMOq1i1p
454  oENZ4yNiQOedU8p5rSoGtPzRcLiTdY/S6AIfV0bIIbZsSSRPeWlCdDLjCjjBWYbTGI757IYj
455  UrJqHEVbS+nKy+kTDAYmg5x+FPugIHfeHDdXB3An8JdGcidoo4hXc/NFiHMFF6Rn+YOIGSVz
456  uJbSaPhYRjFnKorlSURXSHn5BuFB6JjqatY6qsaoiFoJy6BVUQAAOw==
457  }
458  {Theory: Caro-Kann: 1.e4 c6}
459  {
460  R0lGODdhIAAgAKEAAP/739jGpgAAAP///ywAAAAAIAAgAAACh4RvoauIzI4QBy5XbTBzJo19
461  lkSJUAhoG9CVKvq23hvGcgrWOUbz6u7oBYEPYmakQ/qUQ2bReTwlpUtq0/rERiNTLqrqvYaz
462  Xo9pvL2wBgOX8axmlXBQeGPdtq/AFwGbTSFE1ncjmHbH97MnFseI6Lg4+CgZeVipB/NGp4XZ
463  1UiZWbeJ1olRAAA7
464  }
465  {Theory: French: 1.e4 e6}
466  {
467  R0lGODdhIAAgAKEAAP/739jGpgAAAP///ywAAAAAIAAgAAACiIRvoauIzNyB6wgxaZBJm3t1
468  FAdo24eJEGmiYelxLQjCo+zRYYvfksn7xYQ+R9A4RBYfSeYy81RFeivqlFjFXpVZ7pbk7Ia/
469  0OzLJi5PBYNB6jiuoNRyrZztlta9FXwbA0fXoAPYJHhiB4TI12C1F9eYuAg5echiqBfJWJnJ
470  iUbWeRn1+WjJUQAAOw==
471  }
472  {Theory: Open Games: 1.e4 e5}
473  {
474  R0lGODdhIAAgAKEAAP/739jGpgAAAP///ywAAAAAIAAgAAACh4RvoauIzNyBSyYaLMDZcv15
475  GDiKFHmaELqqkVvBXCN3UngrghDnab7b0Xwtn3DowCUDQZ5t+Us2hazXbcqr9qBFDdf63T5K
476  gN2EHKYJBgPBJTr+md/deGvdpoPtETzbrcRXgbWBJoh0OKOFeAbXWPe4Fyk2yahHeWlZ6Jj5
477  lLjoWRnaCapRAAA7
478  }
479 }
480 
481 variable ::windows::switcher::base_types {}
482 
483 #TODO: remove the no-icons option
484 if {! [info exists ::windows::switcher::icons] } { set ::windows::switcher::icons 1}
485 after idle "options.save ::windows::switcher::icons"
486 
487 # Initialise icons nicely
488 
489 set i 0
490 foreach {icon data} $icons {
491  lappend ::windows::switcher::base_types $icon
492  image create photo dbt$i -format gif -data $data
493  incr i
494 }
495 
496 set numBaseTypeIcons [llength $::windows::switcher::base_types]
497 
498 set temp_dbtype 0
499 
500 proc getBaseType {baseId} {
501  foreach {tagname tagvalue} [sc_base extra $baseId] {
502  if {$tagname eq "type"} {
503  return $tagvalue
504  }
505  }
506  return 0
507 }
508 
509 proc selectBaseType {type} {
510  global temp_dbtype
511  set w .btypeWin
512  if {![winfo exists $w]} { return}
513  $w.t configure -state normal
514  set temp_dbtype $type
515  set linenum [expr $type + 1]
516  $w.t tag remove sel 1.0 end
517  $w.t tag remove selected 1.0 end
518  $w.t tag add selected "${linenum}.2 linestart" "$linenum.2 lineend"
519  $w.t see $linenum.2
520  $w.t configure -state disabled
521 }
522 
523 proc clickBaseType {x y} {
524  set type [.btypeWin.t index "@$x,$y linestart"]
525  set type [expr int($type) - 1]
526  selectBaseType $type
527 }
528 
529 proc changeBaseType {baseNum} {
530  global temp_dbtype ::windows::switcher::base_types numBaseTypeIcons
531  if {$baseNum > [sc_info limit bases]} { return}
532  set temp_dbtype [getBaseType $baseNum]
533  if {$temp_dbtype >= $numBaseTypeIcons} { set temp_dbtype 0}
534  set w .btypeWin
536  wm title $w "Scid: $::tr(ChangeIcon)"
537 
538  text $w.t -yscrollcommand "$w.yscroll set" -font font_Regular \
539  -height 25 -width 40 -background white -wrap none \
540  -cursor top_left_arrow
541  $w.t tag configure selected -background lightSteelBlue
542 
543  ttk::scrollbar $w.yscroll -command "$w.t yview" -takefocus 0
544  pack [ttk::frame $w.b] -side bottom -anchor e
545  pack $w.yscroll -side right -fill y
546  pack $w.t -side left -fill both -expand yes
547 
548  dialogbutton $w.b.set -text "OK" -command \
549  "catch {sc_base extra $baseNum type \$temp_dbtype}; ::windows::switcher::Refresh; ::maint::Refresh;
550  focus .; destroy $w"
551 
552  dialogbutton $w.b.cancel -text $::tr(Cancel) -command "focus .; destroy $w"
553  packdlgbuttons $w.b.cancel $w.b.set
554 
555  set numtypes [llength $base_types]
556  for {set i 0} {$i < $numtypes} {incr i} {
557  if {$i > 0} { $w.t insert end "\n"}
558  $w.t image create end -image dbt$i -pady 3 -padx 3
559  $w.t insert end " [lindex $base_types $i] "
560  }
561 
562  bind $w.t <Double-ButtonRelease-1> "clickBaseType %x %y; $w.b.set invoke"
563  bind $w.t <ButtonRelease-1> "clickBaseType %x %y"
564  bind $w.t <Button1-Motion> "clickBaseType %x %y; break"
565 
566  bind $w <Up> {
567  if {$temp_dbtype != 0} { selectBaseType [expr $temp_dbtype - 1] }
568  break
569  }
570 
571  bind $w <Down> {
572  if {$temp_dbtype < [expr [llength $base_types] - 1]} {
573  selectBaseType [expr $temp_dbtype + 1]
574  }
575  break
576  }
577 
578  bind $w <Home> { selectBaseType 0 }
579  bind $w <End> { selectBaseType [expr [llength $base_types] - 1] }
580  bind $w <Escape> "$w.b.cancel invoke"
581  bind $w <Return> "$w.b.set invoke"
582 
583  focus $w.t
584  grab $w
585  update
586  selectBaseType $temp_dbtype
587 }
588 
589 
590 
591 proc ::windows::switcher::pressMouseEvent {i {w .baseWin}} {
592  if {! [winfo exists $w]} {return}
593  foreach win {"" .img .name .ngames} {
594  $w.c.f$i$win configure -cursor exchange
595  }
596 }
597 
598 proc ::windows::switcher::releaseMouseEvent {fromBase x y {w .baseWin}} {
599  if {! [winfo exists $w]} {return}
600  foreach win {"" .img .name .ngames} {
601  $w.c.f$fromBase$win configure -cursor {}
602  }
603  set dropPoint [winfo containing $x $y]
604  if {! [string match "$w.c.f*" $dropPoint]} {return}
605  regexp -all {[0-9]} $dropPoint toBase
606  if {$toBase == $fromBase} {
607  if { [info exists ::sw_LinkedGList_($w)] } {
608  if {[::windows::gamelist::GetBase $::sw_LinkedGList_($w)] != "$fromBase"} {
609  ::windows::gamelist::SetBase $::sw_LinkedGList_($w) "$fromBase"
611  } else {
612  popupmenu $w "$w.c.f$fromBase" $x $y $fromBase
613  }
614  } else {
615  ::file::SwitchToBase $toBase
616  }
617  } else {
618  set glist ""
619  if { [info exists ::sw_LinkedGList_($w)] } { set glist $::sw_LinkedGList_($w)}
620  ::windows::gamelist::CopyGames $glist $fromBase $toBase
621  }
622 }
623 
624 proc ::windows::switcher::popupmenu { {switcherWin} {w} {abs_x} {abs_y} {baseIdx} } {
625  $w.menu delete 0 end
626  $w.menu add command -label "[tr NewGameListWindow]" -command "::windows::gamelist::Open $baseIdx"
627  $w.menu add separator
628  $w.menu add command -label [tr FileOpen] -command ::file::Open
629  if {![sc_base isReadOnly $baseIdx]} {
630  $w.menu add command -label [tr ToolsImportFile] -command "importPgnFile $baseIdx"
631  }
632  if { [info exists ::sw_LinkedGList_($switcherWin)] && \
633  [::windows::gamelist::GetBase $::sw_LinkedGList_($switcherWin)] == "$baseIdx"} {
634  $w.menu add command -label "[tr ToolsExpFilter]" -command \
635  "::windows::gamelist::FilterExport $::sw_LinkedGList_($switcherWin)"
636  }
637  if { $baseIdx != $::clipbase_db } {
638  $w.menu add command -label [tr FileClose] -command [list ::file::Close $baseIdx]
639  $w.menu add command -label $::tr(CompactDatabase) -command "compactDB $baseIdx"
640  if { [::file::autoLoadBases.find $baseIdx] == "-1" } {
641  set ::sw_DummyCheckbutton 0
642  $w.menu add checkbutton -label "[tr LoadatStartup]" -variable ::sw_DummyCheckbutton \
643  -command "::file::autoLoadBases.add $baseIdx"
644  } else {
645  set ::sw_DummyCheckbutton 1
646  $w.menu add checkbutton -label "[tr LoadatStartup]" -variable ::sw_DummyCheckbutton \
647  -command "::file::autoLoadBases.remove $baseIdx"
648  }
649  } else {
650  $w.menu add command -label [tr EditReset] -command ::windows::gamelist::ClearClipbase
651  }
652 
653  $w.menu add separator
654  $w.menu add command -label [tr ChangeIcon] -command "changeBaseType $baseIdx"
655  $w.menu add checkbutton -label "Icons" -variable ::windows::switcher::icons \
656  -command ::windows::switcher::Refresh
657  tk_popup $w.menu $abs_x $abs_y
658 }
659 
660 set baseWin 0
661 set sw_nBases_ [sc_info limit bases]
662 set ::windows::switcher::wins {}
663 
664 proc ::windows::switcher::Open {{w .baseWin}} {
665  if {[::createToplevel $w] == "already_exists"} {
666  focus .
667  destroy $w
668  set ::baseWin 0
669  return
670  }
671 
672  ::setTitle $w "Scid: [tr WindowsSwitcher]"
674  bind $w <Escape> "focus .; destroy $w"
675  bind $w <Destroy> "+ if {\[string equal $w %W\]} {set ::baseWin 0}"
676  bind $w <F1> { helpWindow Switcher }
677  label $w.status -width 1 -anchor w -relief sunken -borderwidth 1
678  grid $w.status -columnspan 2 -sticky we
680  after idle "::windows::switcher::Update_ $w"
681 }
682 
683 proc ::windows::switcher::Create {{w} {gamelist ""}} {
684  if {$gamelist == ""} {
685  catch { unset ::sw_LinkedGList_($w)}
686  } else {
687  set ::sw_LinkedGList_($w) $gamelist
688  }
689 
690  ttk::frame $w.border
691  grid $w.border -sticky news
692  grid rowconfigure $w 0 -weight 1
693  grid columnconfigure $w 0 -weight 1
694  autoscrollframe -bars y $w.border canvas $w.c -highlightthickness 0
695 
696  for {set i 1} {$i <= $::sw_nBases_} {incr i} {
697  set f [ttk::frame $w.c.f$i -borderwidth 1 -relief raised]
698  $w.c create window 0 0 -window $w.c.f$i -anchor nw -tag tag$i
699 
700  set f $w.c.f$i
701  label $f.img -image dbt0
702  label $f.name -width 12 -anchor w -font font_Small
703  label $f.ngames -text "0" -width 12 -anchor e -font font_Tiny
704  grid $f.img -row 0 -column 0 -rowspan 2
705  grid $f.name -row 0 -column 1 -sticky we
706  grid $f.ngames -row 1 -column 1 -sticky we
707 
708  foreach win {"" .img .name .ngames} {
709  bind $f$win <ButtonPress-1> [list ::windows::switcher::pressMouseEvent $i $w]
710  bind $f$win <ButtonRelease-1> [list ::windows::switcher::releaseMouseEvent $i %X %Y $w]
711  }
712 
713  menu $f.menu -tearoff 0
714  foreach win {"" .img .name .ngames} {
715  bind $f$win <ButtonPress-$::MB3> "::windows::switcher::popupmenu $w $f %X %Y $i"
716  }
717  }
718  bind $w <Configure> "+::windows::switcher::Update_ $w"
719  bind $w <Destroy> { set idx [lsearch $::windows::switcher::wins %W]; set ::windows::switcher::wins [lreplace $::windows::switcher::wins $idx $idx] }
720  lappend ::windows::switcher::wins $w
721 
722  after idle "::windows::switcher::Update_ $w"
723 }
724 
725 proc ::windows::switcher::calcSpace {{w} {selected}} {
726  global numBaseTypeIcons
727  variable icons
728  if {! [winfo exists $w]} { return}
729 
730  for {set i 1} {$i <= $::sw_nBases_} {incr i} {
731  $w.c itemconfigure tag$i -state hidden
732  }
733  set n_bases 0
734  foreach i [sc_base list] {
735  incr n_bases
736  set color white
737  if {$i == $selected} { set color lightSteelBlue}
738 
739 # $w.c.f$i configure -background $color
740  if {$icons} {
741  set dbtype [getBaseType $i]
742  if {$dbtype >= $numBaseTypeIcons} { set dbtype 0}
743  $w.c.f$i.img configure -image dbt$dbtype -background $color
744  grid $w.c.f$i.img -row 0 -column 0 -rowspan 2
745  } else {
746  grid forget $w.c.f$i.img
747  }
748  if {$i == $::clipbase_db} {
749  set name [sc_base filename $i]
750  } else {
751  set name "[file tail [sc_base filename $i]]"
752  }
753  $w.c.f$i.name configure -background $color -text $name
754  if {[info exists ::sw_LinkedGList_($w)]} {
755  set txt [::windows::gamelist::filterText $::sw_LinkedGList_($w) $i]
756  } else {
757  set txt [::windows::gamelist::filterText "" $i]
758  }
759  $w.c.f$i.ngames configure -background $color -text "$txt"
760  $w.c itemconfigure tag$i -state normal
761  }
762 
763  set iconWidth [winfo width $w.c.f$::clipbase_db]
764  incr iconWidth 5
765  set iconHeight [winfo height $w.c.f$::clipbase_db]
766  incr iconHeight 5
767 
768  return [list $n_bases $iconWidth $iconHeight]
769 }
770 
771 proc ::windows::switcher::Draw {{w} {numColumns} {iconWidth} {iconHeight} } {
772  set numRows 0
773  set column 0
774  set x 0
775  set y 0
776  foreach i [sc_base list] {
777  $w.c coords tag$i [expr $x + 2] [expr $y + 2]
778  incr column
779  if { $x == 0} { incr numRows}
780  if {$column == $numColumns} {
781  set column 0
782  set x 0
783  incr y $iconHeight
784  } else {
785  incr x $iconWidth
786  }
787  }
788 
789  if {$numRows < 1} { set numRows 1}
790  set right [expr {$numColumns * $iconWidth}]
791  set bottom [expr {$numRows * $iconHeight}]
792  set bgcolor [ttk::style lookup Button.label -background]
793  $w.c configure -scrollregion [list 0 0 $right $bottom] -borderwidth 4 -relief flat
795 }
796 
797 proc ::windows::switcher::Refresh {} {
798  foreach w $::windows::switcher::wins {
799  if {[winfo exists $w]} { ::windows::switcher::Update_ $w}
800  }
801 }
802 
803 proc ::windows::switcher::Update_ {w} {
804  if {[info exists ::sw_LinkedGList_($w)]} {
805  set curr_base [::windows::gamelist::GetBase $::sw_LinkedGList_($w)]
806  } else {
807  set curr_base [sc_base current]
808  if {![sc_base inUse $curr_base]} { return}
809  }
810 
811  set space [::windows::switcher::calcSpace $w $curr_base]
812  set n_bases [lindex $space 0]
813  set iconWidth [lindex $space 1]
814  set iconHeight [lindex $space 2]
815 
816  if {! [info exists ::sw_LinkedGList_($w)]} {
817  set canvasWidth [winfo width $w.c]
818  set numColumns [expr {int($canvasWidth / $iconWidth)}]
819  if {$numColumns < 1} { set numColumns 1}
820  ::windows::switcher::Draw $w $numColumns $iconWidth $iconHeight
821  set status [file nativename [sc_base filename $curr_base]]
822  if {[sc_base isReadOnly $curr_base]} { append status " ($::tr(readonly))"}
823  $w.status configure -text $status
824  } else {
825  #TODO: if $w parent is too small do not use 2 columns
826  if {[winfo height $w.c] < [expr $iconHeight * ($n_bases)]} {
827  $w.c configure -width [expr $iconWidth * 2]
828  ::windows::switcher::Draw $w 2 $iconWidth $iconHeight
829  } else {
830  $w.c configure -width $iconWidth
831  ::windows::switcher::Draw $w 1 $iconWidth $iconHeight
832  }
833  }
834 }