Scid  4.6.5
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 selectBaseType {type} {
501  global temp_dbtype
502  set w .btypeWin
503  if {![winfo exists $w]} { return}
504  $w.t configure -state normal
505  set temp_dbtype $type
506  set linenum [expr $type + 1]
507  $w.t tag remove sel 1.0 end
508  $w.t tag remove selected 1.0 end
509  $w.t tag add selected "${linenum}.2 linestart" "$linenum.2 lineend"
510  $w.t see $linenum.2
511  $w.t configure -state disabled
512 }
513 
514 proc clickBaseType {x y} {
515  set type [.btypeWin.t index "@$x,$y linestart"]
516  set type [expr int($type) - 1]
517  selectBaseType $type
518 }
519 
520 proc changeBaseType {baseNum} {
521  global temp_dbtype ::windows::switcher::base_types numBaseTypeIcons
522  if {$baseNum > [sc_info limit bases]} { return}
523  set temp_dbtype [sc_base extra $baseNum type]
524  if {$temp_dbtype >= $numBaseTypeIcons} { set temp_dbtype 0}
525  toplevel .btypeWin
526  set w .btypeWin
527  wm title $w "Scid: Choose database icon"
528 
529  text $w.t -yscrollcommand "$w.yscroll set" -font font_Regular \
530  -height 25 -width 40 -background white -wrap none \
531  -cursor top_left_arrow
532  $w.t tag configure selected -background lightSteelBlue
533 
534  scrollbar $w.yscroll -command "$w.t yview" -takefocus 0
535  pack [frame $w.b] -side bottom -pady 5
536  pack $w.yscroll -side right -fill y
537  pack $w.t -side left -fill both -expand yes
538 
539  dialogbutton $w.b.set -text "OK" -command \
540  "catch {sc_base extra $baseNum type \$temp_dbtype}; ::windows::switcher::Refresh; ::maint::Refresh;
541  focus .; destroy $w"
542 
543  dialogbutton $w.b.cancel -text $::tr(Cancel) -command "focus .; destroy $w"
544  pack $w.b.set $w.b.cancel -side left -padx 5
545 
546  set numtypes [llength $base_types]
547  for {set i 0} {$i < $numtypes} {incr i} {
548  if {$i > 0} { $w.t insert end "\n"}
549  $w.t image create end -image dbt$i -pady 3 -padx 3
550  $w.t insert end " [lindex $base_types $i] "
551  }
552 
553  bind $w.t <Double-ButtonRelease-1> "clickBaseType %x %y; $w.b.set invoke"
554  bind $w.t <ButtonRelease-1> "clickBaseType %x %y"
555  bind $w.t <Button1-Motion> "clickBaseType %x %y; break"
556 
557  bind $w <Up> {
558  if {$temp_dbtype != 0} { selectBaseType [expr $temp_dbtype - 1] }
559  break
560  }
561 
562  bind $w <Down> {
563  if {$temp_dbtype < [expr [llength $base_types] - 1]} {
564  selectBaseType [expr $temp_dbtype + 1]
565  }
566  break
567  }
568 
569  bind $w <Home> { selectBaseType 0 }
570  bind $w <End> { selectBaseType [expr [llength $base_types] - 1] }
571  bind $w <Escape> "$w.b.cancel invoke"
572  bind $w <Return> "$w.b.set invoke"
573 
574  focus $w.t
575  grab $w
576  update
577  selectBaseType $temp_dbtype
578 }
579 
580 
581 
582 proc ::windows::switcher::pressMouseEvent {i {w .baseWin}} {
583  if {! [winfo exists $w]} {return}
584  foreach win {"" .img .name .ngames} {
585  $w.c.f$i$win configure -cursor exchange
586  }
587 }
588 
589 proc ::windows::switcher::releaseMouseEvent {fromBase x y {w .baseWin}} {
590  if {! [winfo exists $w]} {return}
591  foreach win {"" .img .name .ngames} {
592  $w.c.f$fromBase$win configure -cursor {}
593  }
594  set dropPoint [winfo containing $x $y]
595  if {! [string match "$w.c.f*" $dropPoint]} {return}
596  regexp -all {[0-9]} $dropPoint toBase
597  if {$toBase == $fromBase} {
598  if { [info exists ::sw_LinkedGList_($w)] } {
599  if {[::windows::gamelist::GetBase $::sw_LinkedGList_($w)] != "$fromBase"} {
600  ::windows::gamelist::SetBase $::sw_LinkedGList_($w) "$fromBase"
602  } else {
603  popupmenu $w "$w.c.f$fromBase" $x $y $fromBase
604  }
605  } else {
606  ::file::SwitchToBase $toBase
607  }
608  } else {
609  set glist ""
610  if { [info exists ::sw_LinkedGList_($w)] } { set glist $::sw_LinkedGList_($w)}
611  ::windows::gamelist::CopyGames $glist $fromBase $toBase
612  }
613 }
614 
615 proc ::windows::switcher::popupmenu { {switcherWin} {w} {abs_x} {abs_y} {baseIdx} } {
616  $w.menu delete 0 end
617  $w.menu add command -label "New Game List Window" -command "::windows::gamelist::Open $baseIdx"
618  $w.menu add separator
619  $w.menu add command -label [tr FileOpen] -command ::file::Open
620  if {![sc_base isReadOnly $baseIdx]} {
621  $w.menu add command -label [tr ToolsImportFile] -command "importPgnFile $baseIdx"
622  }
623  if { [info exists ::sw_LinkedGList_($switcherWin)] && \
624  [::windows::gamelist::GetBase $::sw_LinkedGList_($switcherWin)] == "$baseIdx"} {
625  $w.menu add command -label "[tr ToolsExpFilter]" -command \
626  "::windows::gamelist::FilterExport $::sw_LinkedGList_($switcherWin)"
627  }
628  if { $baseIdx != $::clipbase_db } {
629  $w.menu add command -label [tr FileClose] -command [list ::file::Close $baseIdx]
630  $w.menu add command -label $::tr(CompactDatabase) -command "compactDB $baseIdx"
631  if { [::file::autoLoadBases.find $baseIdx] == "-1" } {
632  set ::sw_DummyCheckbutton 0
633  $w.menu add checkbutton -label "Load at startup" -variable ::sw_DummyCheckbutton \
634  -command "::file::autoLoadBases.add $baseIdx"
635  } else {
636  set ::sw_DummyCheckbutton 1
637  $w.menu add checkbutton -label "Load at startup" -variable ::sw_DummyCheckbutton \
638  -command "::file::autoLoadBases.remove $baseIdx"
639  }
640  } else {
641  $w.menu add command -label [tr EditReset] -command ::windows::gamelist::ClearClipbase
642  }
643 
644  $w.menu add separator
645  $w.menu add command -label [tr ChangeIcon] -command "changeBaseType $baseIdx"
646  $w.menu add checkbutton -label "Icons" -variable ::windows::switcher::icons \
647  -command ::windows::switcher::Refresh
648  tk_popup $w.menu $abs_x $abs_y
649 }
650 
651 set baseWin 0
652 set sw_nBases_ [sc_info limit bases]
653 set ::windows::switcher::wins {}
654 
655 proc ::windows::switcher::Open {{w .baseWin}} {
656  if {[::createToplevel $w] == "already_exists"} {
657  focus .
658  destroy $w
659  set ::baseWin 0
660  return
661  }
662 
663  setWinLocation $w
664  ::setTitle $w "Scid: [tr WindowsSwitcher]"
666  bind $w <Escape> "focus .; destroy $w"
667  bind $w <Destroy> "+ if {\[string equal $w %W\]} {set ::baseWin 0}"
668  bind $w <F1> { helpWindow Switcher }
670  label $w.status -width 1 -anchor w -relief sunken -borderwidth 1
671  grid $w.status -columnspan 2 -sticky we
672  bind $w <Configure> "+recordWinSize $w"
673  setWinSize $w
675  after idle "::windows::switcher::Update_ $w"
676 }
677 
678 proc ::windows::switcher::Create {{w} {gamelist ""}} {
679  if {$gamelist == ""} {
680  catch { unset ::sw_LinkedGList_($w)}
681  } else {
682  set ::sw_LinkedGList_($w) $gamelist
683  }
684 
685  ttk::frame $w.border -borderwidth 2 -relief groove
686  grid $w.border -sticky news
687  grid rowconfigure $w 0 -weight 1
688  grid columnconfigure $w 0 -weight 1
689  autoscrollframe -bars y $w.border canvas $w.c -highlightthickness 0
690 
691  for {set i 1} {$i <= $::sw_nBases_} {incr i} {
692  set f [frame $w.c.f$i -background white -borderwidth 1 -relief raised]
693  $w.c create window 0 0 -window $w.c.f$i -anchor nw -tag tag$i
694 
695  set f $w.c.f$i
696  label $f.img -image dbt0
697  label $f.name -width 12 -anchor w -font font_Small
698  label $f.ngames -text "0" -width 12 -anchor e -font font_Tiny
699  grid $f.img -row 0 -column 0 -rowspan 2
700  grid $f.name -row 0 -column 1 -sticky we
701  grid $f.ngames -row 1 -column 1 -sticky we
702 
703  foreach win {"" .img .name .ngames} {
704  bind $f$win <ButtonPress-1> [list ::windows::switcher::pressMouseEvent $i $w]
705  bind $f$win <ButtonRelease-1> [list ::windows::switcher::releaseMouseEvent $i %X %Y $w]
706  }
707 
708  menu $f.menu -tearoff 0
709  foreach win {"" .img .name .ngames} {
710  bind $f$win <ButtonPress-$::MB3> "::windows::switcher::popupmenu $w $f %X %Y $i"
711  }
712  }
713  bind $w <Configure> "+::windows::switcher::Update_ $w"
714  bind $w <Destroy> { set idx [lsearch $::windows::switcher::wins %W]; set ::windows::switcher::wins [lreplace $::windows::switcher::wins $idx $idx] }
715  lappend ::windows::switcher::wins $w
716 
717  after idle "::windows::switcher::Update_ $w"
718 }
719 
720 proc ::windows::switcher::calcSpace {{w} {selected}} {
721  global numBaseTypeIcons
722  variable icons
723  if {! [winfo exists $w]} { return}
724 
725  for {set i 1} {$i <= $::sw_nBases_} {incr i} {
726  $w.c itemconfigure tag$i -state hidden
727  }
728  set n_bases 0
729  foreach i [sc_base list] {
730  incr n_bases
731  set color white
732  if {$i == $selected} { set color lightSteelBlue}
733 
734  $w.c.f$i configure -background $color
735  if {$icons} {
736  set dbtype [sc_base extra $i type]
737  if {$dbtype >= $numBaseTypeIcons} { set dbtype 0}
738  $w.c.f$i.img configure -image dbt$dbtype -background $color
739  grid $w.c.f$i.img -row 0 -column 0 -rowspan 2
740  } else {
741  grid forget $w.c.f$i.img
742  }
743  if {$i == $::clipbase_db} {
744  set name [sc_base filename $i]
745  } else {
746  set name "[file tail [sc_base filename $i]]"
747  }
748  $w.c.f$i.name configure -background $color -text $name
749  if {[info exists ::sw_LinkedGList_($w)]} {
750  set txt [::windows::gamelist::filterText $::sw_LinkedGList_($w) $i]
751  } else {
752  set txt [::windows::gamelist::filterText "" $i]
753  }
754  $w.c.f$i.ngames configure -background $color -text "$txt"
755  $w.c itemconfigure tag$i -state normal
756  }
757 
758  set iconWidth [winfo width $w.c.f$::clipbase_db]
759  incr iconWidth 5
760  set iconHeight [winfo height $w.c.f$::clipbase_db]
761  incr iconHeight 5
762 
763  return [list $n_bases $iconWidth $iconHeight]
764 }
765 
766 proc ::windows::switcher::Draw {{w} {numColumns} {iconWidth} {iconHeight} } {
767  set numRows 0
768  set column 0
769  set x 0
770  set y 0
771  foreach i [sc_base list] {
772  $w.c coords tag$i [expr $x + 2] [expr $y + 2]
773  incr column
774  if { $x == 0} { incr numRows}
775  if {$column == $numColumns} {
776  set column 0
777  set x 0
778  incr y $iconHeight
779  } else {
780  incr x $iconWidth
781  }
782  }
783 
784  if {$numRows < 1} { set numRows 1}
785  set right [expr {$numColumns * $iconWidth}]
786  set bottom [expr {$numRows * $iconHeight}]
787  set bgcolor [ttk::style lookup Button.label -background]
788  $w.c configure -scrollregion [list 0 0 $right $bottom] -borderwidth 4 -relief flat -background $bgcolor
789 }
790 
791 proc ::windows::switcher::Refresh {} {
792  foreach w $::windows::switcher::wins {
793  if {[winfo exists $w]} { ::windows::switcher::Update_ $w}
794  }
795 }
796 
797 proc ::windows::switcher::Update_ {w} {
798  if {[info exists ::sw_LinkedGList_($w)]} {
799  set curr_base [::windows::gamelist::GetBase $::sw_LinkedGList_($w)]
800  } else {
801  set curr_base [sc_base current]
802  if {![sc_base inUse $curr_base]} { return}
803  }
804 
805  set space [::windows::switcher::calcSpace $w $curr_base]
806  set n_bases [lindex $space 0]
807  set iconWidth [lindex $space 1]
808  set iconHeight [lindex $space 2]
809 
810  if {! [info exists ::sw_LinkedGList_($w)]} {
811  set canvasWidth [winfo width $w.c]
812  set numColumns [expr {int($canvasWidth / $iconWidth)}]
813  if {$numColumns < 1} { set numColumns 1}
814  ::windows::switcher::Draw $w $numColumns $iconWidth $iconHeight
815  set status [file nativename [sc_base filename $curr_base]]
816  if {[sc_base isReadOnly $curr_base]} { append status " ($::tr(readonly))"}
817  $w.status configure -text $status
818  } else {
819  #TODO: if $w parent is too small do not use 2 columns
820  if {[winfo height $w.c] < [expr $iconHeight * ($n_bases)]} {
821  $w.c configure -width [expr $iconWidth * 2]
822  ::windows::switcher::Draw $w 2 $iconWidth $iconHeight
823  } else {
824  $w.c configure -width $iconWidth
825  ::windows::switcher::Draw $w 1 $iconWidth $iconHeight
826  }
827  }
828 }