On 01/15/2011 04:07 PM, Joost 't Hart wrote:

Hi!

>> Could you please recheck with clean current cvs? I can not see this
[...]
> Hm, I am on current CVS + the new build environment.
>
> I checked with pure CVS and you are right...

<puh> ;)

> The only thing I can imagine is that I (apparently) messed up the order
> in which tcl files are appended to create ./scid slash scid.gui (for
> linux and windows respectively).
>
> What restrictions do apply here?

Be _VERY_ careful here.

> (A hopefully simple question, before I feel there is no alternative but
> to revert to the nonbody-knows-why-but-it-happens-to-work order that we
> have in the current makefile).

No. Not really simple at all.

One point is that Scid (speaking of the TCL here) uses quite a bunch of 
globals. With globals I don't mean only real globals living in the top 
namespace (::something). A global could even be something like 
::namespace::variable in the sense that a variable from one namespace is 
reused in another one. Typical examples for this are Scids image 
ressources. (Given some weeks of absolutely free time it would be 
valuable to disentangle this.)

Additionally, those globals are actually cluttered around the various 
modules of the tcl code, that is they could be initialised almost 
everywhere. Counting it up you end up with a.tcl requireing b.tcl not 
cause it needs any function of b.tcl but maybe just uses an image 
ressource of b.tcl. Now if a.tcl is required to draw anything in the 
main window you have to have b.tcl in scid's main program before a.tcl...

Then you have those fine things like e.g. in main.tcl. This file starts 
with initialising two globals. Then it adds a number of keyboard 
bindings for the main window. From the commentary in l.20ff you might 
notice that it is of quite some importance that this is not done too 
early on as the it would not overwrite the bindings it is actually 
intended to overwrite. Then you get a bunch of procedures declared and 
implemented, just to get in l.146 a call to the backend. Then again a 
bunch of procedures. If you now point your eye to l.220ff you'll notice 
that "out of nothing" you get

ttk::frame .main.fbutton.button.space3 -width 15
button .main.fbutton.button.flip -image tb_flip -takefocus 0 \
         -command "::board::flip .main.board"

Ups. A ttk::frame is created. And a button is added that uses tb_flip as 
icon. Hopefully it is available already. Some additional code and you 
see the initialisation of a bunch of icons. Surely this has to be done 
before they are called up.

I'll stop here, I think you get the message: given this in all files 
*.tcl results in a given order in which those files have to be connected 
together to build a valid executable. I think deriving the ordering here 
is more a measurement than following principles of theoretical computer 
science.

BTW: you stumbled upon NLS. This especially is a real mess in Scid. 
You'll notice tons of for-loops throughout the code that are just 
responsible to initialise all menues of Scids to the right language and 
tags at the right time. It's not done centrally, but everywhere. And 
some tags don't get translated at all but use hard coded values. (If 
someone stumbles upon them it would be nice to drop a note.) The 
lang/*.tcl thus just set a bunch of variables that get called up. E.g. 
CC windows menu is translated within the build up of this window with a 
for loop at the right location (that is in CC's GUI code itself). 
Wondered why it was available in english only for a very long time, and 
why this window didn't have any menu initially? It took me a bit to 
fiddle out how to do it at all and ensure that it shows up correctly 
(most of the time). Therefore, screwing up NLS is actually pretty easy 
as well and you'd even hardly notice it at all.

To put it more in your language: if you feel that some part of Scids 
C/C++ backend are a bit messy you complain about the cleanest parts of 
code we have. ;)

cu
Alexander

------------------------------------------------------------------------------
Protect Your Site and Customers from Malware Attacks
Learn about various malware tactics and how to avoid them. Understand 
malware threats, the impact they can have on your business, and how you 
can protect your company and customers by using code signing.
http://p.sf.net/sfu/oracle-sfdevnl
_______________________________________________
Scid-users mailing list
Scid-users@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/scid-users

Reply via email to