Many hyperlinks are disabled.
Use anonymous login
to enable hyperlinks.
Overview
Comment: | Merging with TOT as of 06/09/2002. |
---|---|
Downloads: | Tarball | ZIP archive |
Timelines: | family | ancestors | descendants | both | macosx-8-4-branch |
Files: | files | file ages | folders |
SHA1: |
c4cf2ab6c0a53b76b77b767697f2e1af |
User & Date: | wolfsuit 2002-06-10 05:38:22.000 |
Context
2002-06-12
| ||
03:37 | Added help & toolbar style windows to the unsupported MacWindowStyle command. check-in: 8cbba4f3 user: wolfsuit tags: macosx-8-4-branch | |
2002-06-10
| ||
05:38 | Merging with TOT as of 06/09/2002. check-in: c4cf2ab6 user: wolfsuit tags: macosx-8-4-branch | |
05:07 | Adding missing files from TOT merge. check-in: 3150ac3a user: wolfsuit tags: macosx-8-4-branch | |
Changes
Changes to ChangeLog.
1 2 3 4 5 6 7 | 2002-02-05 Jim Ingham <[email protected]> * macosx/tkMacOSXMenu.c: Fix 513222. We were going to invalidate the menu & delete the selection without checking whether the menu had already been deleted. * mac/tkMacMenu.c: ditto. | > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557 558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 574 575 576 577 578 579 580 | 2002-06-06 Donal K. Fellows <[email protected]> * win/tkWinCursor.c (TkGetCursorByName): Fixed so that the reading of cursors from a file with a cursor spec was built using [list] works when the file has a space in instead of requiring fiddling with backslashes. 2002-06-06 Anton Kovalenko <[email protected]> * library/msgbox.tcl (MessageBox): Add -default normal when creating non-default buttons for message box. They already get -default normal when they're unfocused, and dialog window size used to change suddenly in such cases. 2002-06-05 Anton Kovalenko <[email protected]> * unix/tkUnixFont.c (Tk_DrawChars): Don't assume that one char is always one byte, and that required subfont for the last character in any string is the same as for the previous character [Bug #559435] [Patch #559437] 2002-05-27 Mo DeJong <[email protected]> * changes: Document [wm transient .t .t] error. * tests/wm.test: Check that setting a window as a transient of itself raises an error. Check that passing a non-toplevel window to the wm transient command uses the enclosing toplevel. * unix/tkUnixWm.c (Tk_WmCmd): Raise an error if the user tries to make a toplevel a transient of itself. * win/tkWinWm.c (Tk_WmCmd): Raise an error if the user tries to make a toplevel a transient of itself. Test for other error before checking for the transient self error. 2002-05-27 Mo DeJong <[email protected]> * unix/tkUnixWm.c (WmInfo, TkWmCleanup, TkWmNewWindow, TkWmMapWindow, TkWmDeadWindow, Tk_WmCmd): Replace WmInfo's master and masterWindowName members with a masterPtr member. This implementation is much simpler and mirrors the Win32 implementation. This change makes it easy to check the flags of the master window. No user visible changes. 2002-05-27 Mo DeJong <[email protected]> * generic/tkInt.decls: Add unix decl for TkpWmSetState. * generic/tkIntPlatDecls.h: Regen. * generic/tkStubInit.c: Regen. * tests/wm.test: Test state changes between iconic, normal, and withdrawn both before and after initial mapping. * unix/tkUnixWm.c (Tk_WmCmd, TkpWmSetState): Move state change code into TkpWmSetState to more closely match the Win32 implementation. No user visible changes. 2002-05-27 Mo DeJong <[email protected]> * tests/embed.test: Added cross platform embed tests. Check that window passed to -use has the -container option set. * tests/wm.test: Remove useless catch call. Deiconify . just in case, stackorder tests will not pass unless it is in the normal state. Add -container flag to embedded stackorder test. * unix/tkUnixEmbed.c (TkpUseWindow): * win/tkWinEmbed.c (TkpUseWindow): Lookup Tk window based on the id passed in as the value for -use. Generate an error if the Tk window did not have the -container option set. 2002-05-26 Peter Spjuth <[email protected]> * generic/tkButton.c (ConfigureButton): When creating a radiobutton with -value "" it was not drawn properly if the -variable was created by the radiobutton. [Bug #548765] 2002-05-26 Peter Spjuth <[email protected]> * generic/tkCanvText.c (ComputeTextBbox): Negative coordinates were rounded badly causing a 1 pixel displacement. [Bug #556526] 2002-05-24 Mo DeJong <[email protected]> * mac/tkMacWm.c (Tk_WmCmd): * tests/unixWm.test: Move wm transient checks over to wm.test so they will be run on all systems. * tests/wm.test: Add tests to check for error when an iconwindow is passed to the wm transient command. * unix/tkUnixWm.c (Tk_WmCmd): * win/tkWinWm.c (Tk_WmCmd): Raise an error if one of the windows passed to the wm transient command is an iconwindow for another toplevel. 2002-05-23 Mo DeJong <[email protected]> * mac/tkMacWm.c (TkWmStackorderToplevelWrapperMap): * tests/wm.test: Add embedded Window test case for the stackorder command. * unix/tkUnixWm.c (TkWmStackorderToplevelWrapperMap): * win/tkWinWm.c (TkWmStackorderToplevelWrapperMap): Ignore embedded windows during wm stackorder command. 2002-05-21 Mo DeJong <[email protected]> * unix/configure: Regen. * unix/configure.in: Invoke SC_ENABLE_SHARED before calling SC_CONFIG_CFLAGS so that the SHARED_BUILD variable can be checked inside SC_CONFIG_CFLAGS. * unix/tcl.m4: Update from Tcl. 2002-05-20 Don Porter <[email protected]> * library/tk.tcl: A little namespace cleanup on Daniel Steffen's latest revisions to avoid defining new global commands. 2002-05-20 Daniel Steffen <[email protected]> * mac/tkMacInit.c: * mac/tkMacTclCode.r: include msgcat package in resources as bgerror depends on it. Restores ability of mac static build to run standalone (except for encoding file issues). * mac/tkMacInit.c: * library/console.tcl: * library/tk.tcl: fix tk.tcl not sourcing library files that define bindings at startup on mac. (independent of tk library files being in resources or on auto_path) 2002-05-08 Don Porter <[email protected]> * library/bgerror.tcl: * library/tclIndex: Cleaned up namespace usage of the bgerror dialog. Completes soft dependence on msgcat. [FR 539309] 2002-05-07 David Gravereaux <[email protected]> * win/makefile.vc: Problem with TCLDIR macro not accepting forward slash path seperators resolved. Added the same logic to INSTALLDIR, too. [Bug #553208] 2002-04-26 Jeff Hobbs <[email protected]> * unix/configure: * unix/tcl.m4: change HP-11 SHLIB_LD_LIBS from "" to ${LIBS} so that the .sl knows its dependent libs. 2002-04-24 Daniel Steffen <[email protected]> * mac/tkMacTclCode.r: * mac/tkMacResource.r: added check of TCLTK_NO_LIBRARY_TEXT_RESOURCES #define to allow disabling the inclusion of the tk library code in the resource fork of Tk executables and shared libraries. Moved tk library code inclusion to separate file like in tcl. Added 'panedwindow' resource. 2002-04-22 Jeff Hobbs <[email protected]> * library/button.tcl (ButtonLeave): corrected the 3 implementations of ButtonLeave to check for Priv(relief) existing before trying to use it. [Patch #541849] * generic/tkTextDisp.c (DisplayLineBackground): * unix/tkUnix3d.c (Tk_3DHorizontalBevel): * unix/tkUnixFont.c (Tk_DrawChars): applied fixes to not overrun the X window 16-bit size limit. [Patch #541999] (bonfield) 2002-04-22 Donal K. Fellows <[email protected]> * generic/tkTextDisp.c (GetXView,GetYView): Comparison with previous values of scrollbar range are now done in a way that is sensitive to the bizarreness of floating-point on architectures where IEEE-FP is not used on the processor. Also increased the size of the temporary buffer to take account of the fact that TCL_DOUBLE_SPACE is meant to only imply enough space to take a printed double and trailing '\0', and no more. [Bug #223739] (FP_EQUAL_SCALE): New macro to help compare floating-point numbers for equality in a sane way, used in GetXView and GetYView. 2002-04-12 Jeff Hobbs <[email protected]> * generic/tkWindow.c (TkCloseDisplay): Added to centralize where a display was closed. This handles freeing memory associated with a display and closing it. (DeleteWindowsExitProc): actually close displays. This would also ideally be done in Tk_DestroyWindow when the last window on the display has been closed, but that still has unresolved order of cleanup problems. (Tk_DestroyWindow): added TkFocusFree call. * generic/tkStubInit.c: * generic/tkIntPlatDecls.h: * generic/tkIntDecls.h: * generic/tkInt.decls: added TkFocusFree, TkClipCleanup and TkGCCleanup generic private procs, and TkWmCleanup, TkSendCleanup and TkFreeXId unix private procs. * generic/tkInt.h: * unix/tkUnixXId.c (TkFreeXId): frees XID resources. Made idCleanupScheduled a Tcl_TimerToken (was int) in TkDisplay structure to allow us to delete the timer scheduled for it. * unix/tkUnixWm.c (TkWmStackorderToplevel): ensure children structure is freed. (ConfigureEvent, ComputeReparentGeometry): Add extra wm tracing info (TkWmRestackToplevel): initialize changes to 0 to prevent UMR. Use WaitForConfigureNotify on all windows. This part still requires fixing as it is the root of the 2 second raise delay on some window managers (those that use extra wrapper windows of their own). * unix/tkUnixSend.c (TkSendCleanup): free send-related resources * unix/tkUnixEvent.c (TkpCloseDisplay): call TkSendCleanup and TkWmCleanup. * unix/tkUnixSelect.c (SelRcvIncrProc): added missing Tcl_Release of interp * generic/tkGet.c (FreeUidThreadExitProc): free thread-specific resources on thread exit * generic/tkFocus.c (TkFocusFree): frees TkMainInfo data * generic/tkClipboard.c (TkClipCleanup): frees TkDisplay data * generic/tkGC.c (TkGCCleanup): frees TkDisplay data * unix/tkUnixFont.c (FontPkgCleanup): cleanup thread specific font resources on thread exit. * mac/tkMacXStubs.c (TkpOpenDisplay): memset the initial display structures to 0. * generic/tkOption.c (OptionThreadExitProc): freed tsd option stacks on thread exit. (Tk_GetOption): free mem used to get Tk_Uid * generic/tkMenu.c (ConfigureMenu): freed saved options in all error cases. * win/tkWinInt.h: declaration for TkWinGetUnicodeEncoding * win/tkWinDialog.c (GetFileNameW): use TkWinGetUnicodeEncoding * win/tkWinInit.c (TkpDisplayWarning): use TkWinGetUnicodeEncoding * win/tkWinFont.c: use TkWinGetUnicodeEncoding instead of static unicodeEncoding. * win/tkWinX.c (Tk_SetCaretPos): remove WM_IME_STARTCOMPOSITION and place the IME position within Tk_SetCaretPos. Cache results in Tk_SetCaretPos to reduce unnecessary repositioning. Also call DestroyCaret if we receive WM_KILLFOCUS. (TkpOpenDisplay): ZeroMemory the initial display structures. (TkWinGetUnicodeEncoding): Added so that Windows only needs to cache this value one, and then free it in TkWinXCleanup. (HandleIMEComposition): add support for Win98 and ATOK13 IME. (yamamoto) * generic/tkConsole.c (ConsoleCmd): correct return that should have just set result code. * generic/tkImgPhoto.c: Added PhotoFormatThreadExitProc to clean up on thread exit. (Tk_PhotoPutBlock) slight code updates * generic/tkPanedWindow.c (DestroyPanedWindow, ConfigureSlaves): fix mem leaks in not freeing slave info * win/configure: * win/tcl.m4: Enabled COFF as well as CV style debug info with --enable-symbols to allow Dr. Watson users to see function info. More info on debugging levels can be obtained at: http://msdn.microsoft.com/library/en-us/dnvc60/html/gendepdebug.asp 2002-04-10 Mo DeJong <[email protected]> * doc/wm.n: * mac/tkMacWm.c: * tests/wm.test: * unix/tkUnixWm.c: * win/tkWinWm.c: Update wm stackorder usage message to make it clear that either 1 or 3 arguments are required. [Bug 540013] 2002-04-08 Daniel Steffen <[email protected]> * mac/tkMacProjects.sea.hqx: added tkPanedWindow.c to projects * mac/tkMacAppInit.c: fixes to MSL stdin/stdout hookup to the TkConsole when using shared MSL libraries; fix for crashing bug on exit: writing to stdin/sterr when console has already been destroyed. (both fixes need support in MSL, see 'CW Pro6 changes' in tcl/mac/tcltkMacBuildSupport.sea.hqx) * mac/tkMacDialog.c: fixes to Navigation Services Dialog filter. * mac/tkMacDraw.c: add panic for overwide TkImages that would crash Tk on mac otherwise. 2002-04-05 Jeff Hobbs <[email protected]> * mac/tkMacXStubs.c: added Tk_SetCaretPos stub (does nothing). * win/tkWinX.c: added Tk_SetCaretPos code to position IME windows correctly when WM_IME_STARTCOMPOSITION is received. * unix/tkUnixKey.c: added Tk_SetCaretPos and code for setting XIM caret in TkpGetString. * generic/tkStubInit.c: * generic/tkDecls.h: * generic/tk.decls: added Tk_SetCaretPos declaration. This command allows users to indicate the cursor position and is used by XIM (Unix) or IME (Windows) to place the caret box correctly. It is also part of correct Accessibility style on Windows to make the magnifier jump to the focus point. * win/tkWinButton.c (TkpDisplayButton): * generic/tkTextMark.c (TkTextInsertDisplayProc): * generic/tkCanvText.c (DisplayCanvText): * generic/tkEntry.c (DisplayEntry): added Tk_SetCaretPos calls * generic/tkInt.h: added TK_XIM_SPOT #define (default 1). Added XFontSet attribute to TkDisplay when TK_XIM_SPOT is true. * generic/tkEvent.c (Tk_HandleEvent): made sure inputContexts are not getting created on DestroyNotify events (for dead windows). Added over-the-spot support if TK_XIM_SPOT is defined (default). The is the nicer XIM behavior, but uses a bit more memory. * unix/tkUnixEvent.c: * generic/tkWindow.c: moved OpenIM over to tkUnixEvent.c. Removed setting inputContext to null in Tk_MakeWindowExist as it was redundant. * unix/tkUnixWm.c (CreateWrapper): Removed redundat setting of inputContext to null. * win/Makefile.in: changed gdb and shell targets to properly build all binaries before running (otherwise an error often occured). 2002-03-28 David Gravereaux <[email protected]> * win/.cvsignore (new): * win/lamp.bmp (new): * win/makefile.vc: * win/nmakehlp.c (new): * win/rules.vc: Brought the makefile up-to-date with Tcl's one. This now has support for Win9x issues and the winhelp target now exists. Color scheme can be changed. I'm just imparting a first suggestion using orange :) I'll have to think about the install portion of the helpfile as I'll need to do some tricks to insert tk's contents file into Tcl's using some special winhlp32.exe switches. [Bug 533862 527941] * win/makefile.vc: Tk helpfile is now installing itself into Tcl's contents file as part of the install target and rebuilding the contents table as desired. [Bug 527941] * doc/console.n: Changed topic from "Tcl Built-In Commands" to "Tk Built-In Commands" * win/buildall.vc.bat: Update to match Tcl. 2002-03-26 Andreas Kupries <[email protected]> * unix/tkUnixFont.c: Added inclusion of <arpa/inet.h>. This fixes a GCC/HPUX problem with missing a "htons". See also "tclUnixPort.h" for equivalent code. 2002-03-21 David Gravereaux <[email protected]> * win/makefile.vc: Changed optimize flag to -0ti instead of -02. [Bug 528441] 2002-03-20 Don Porter <[email protected]> * generic/tkButton.c (ButtonTextVarProc,ButtonVarProc): * generic/tkCmds.c (WaitVariableProc): * generic/tkEntry.c (EntryTextVarProc): * generic/tkListbox.c (ListboxListVarProc): * generic/tkMenu.c (MenuVarProc): * generic/tkMenubutton.c (MenuButtonTextVarProc): * generic/tkMessage.c (MessageTextVarProc): * generic/tkScale.c (ScaleVarProc): Updates to handle change in type of part2 argument of Tcl_VarTraceProc typedef. [TIP 27] [Patch 532644]. 2002-03-19 Jeff Hobbs <[email protected]> * generic/tkOldConfig.c (Tk_ConfigureValue): prevent leaving interp->result as NULL. 2002-03-07 Donal K. Fellows <[email protected]> * library/text.tcl (TextPasteSelection): Renaming of TextPaste to prevent confusion with tk_textPaste. Stopped code from inserting selections twice, which seems to have happened with TIP#26, and reorganized code to reduce amount of stuff protected by catch which is tricky to maintain. (tk_textPaste): Reduce amount of code protected by catch. 2002-03-06 Mo DeJong <[email protected]> * win/tkWinX.c: Define _WIN32_IE as 0x0300 before including commctrl.h so that we can access the InitCommonControlsEx API when building Tk with mingw. 2002-03-06 Donal K. Fellows <[email protected]> * README, generic/tk.h, unix/configure.in, unix/tk.spec: * win/configure.in: Bumped patchlevel; this might need to change in the future, but it will help us distinguish between the CVS version and the most recent released version. 2002-03-05 Jeff Hobbs <[email protected]> *** 8.4a4 TAGGED FOR RELEASE *** * unix/README: updated --* options docs. * unix/tk.spec: fixed URL refs to use www.tcl.tk or SF. 2002-03-04 Jeff Hobbs <[email protected]> * README: * mac/README: * unix/README: * win/README: updated to use www.tcl.tk URL. 2002-03-03 Jeff Hobbs <[email protected]> * library/entry.tcl: added catch around Triple-1 binding use of sel.last 2002-02-28 Don Porter <[email protected]> * library/console.tcl (ConsoleBind): Corrected console <<Paste>> binding on Unix platforms. 2002-02-26 Jeff Hobbs <[email protected]> * unix/configure: Regen. * unix/tcl.m4: Update from Tcl. * generic/tkWindow.c (Tk_MainWindow, Tk_GetNumMainWindows): protect against being called before Tcl stubs are init'ed. [Bug #220916] (porter) 2002-02-25 Jeff Hobbs <[email protected]> * generic/tkText.c (ConfigureText): reenable the blinking cursor on state change where necessary. [Bug #503772] * tests/listbox.test: * generic/tkListbox.c: corrected error handling when setting to an invalid listvar value. [Bug #503613] * library/scale.tcl: mirror B2 bindings to B3 on Windows to better accomodate two button mice. [Patch #493145] * library/panedwindow.tcl: improved proxy sash handling. (boudaillier) 2002-02-25 Donal K. Fellows <[email protected]> * tests/filebox.test: Reorganised and fixed so that tests are executed fewer times (!) and the automatic extension adding behaviour of tk_getSaveFile is tested. 2002-02-23 Mo DeJong <[email protected]> * unix/configure: Regen. * unix/tcl.m4: Update from Tcl. 2002-02-22 Jeff Hobbs <[email protected]> * generic/tkPanedWindow.c (PanedWindowWidgetObjCmd): fixed returns that should have been breaks instead. Corrected .pw configure handling for insufficient args. [Patch #521436] (boudaillier) * mac/tkMacDefault.h: * unix/tkUnixDefault.h: * win/tkWinDefault.h: changed panedwindow default relief to flat, a more natural outer relief. * library/panedwindow.tcl (ReleaseSash): changed to not pass x and y args at all (they aren't used). Added proc comments. Made configuring sash cursor more efficient. Added Cursor timer that restores the default cursor when pointer is no longer over the sash. This is necessary because Leave events won't be seen when moving into a paned child. 2002-02-22 Donal K. Fellows <[email protected]> * library/demos/widget: New section "Paned Windows" * library/demos/paned2.tcl, library/demos/paned1.tcl: New files. * library/panedwindow.tcl (ReleaseSash): Added missing arguments. * library/tk.tcl: Bindings for paned window were not being loaded by default. * unix/tkUnixMenu.c (GetMenuLabelGeometry,DrawMenuEntryLabel): Stop meaningless GCC warnings. 2002-02-21 Jeff Hobbs <[email protected]> * doc/panedwindow.n (new): * generic/tkPanedWindow.c (new): * generic/tkInt.h: * generic/tkWindow.c: * library/panedwindow.tcl (new): * mac/tkMacDefault.h: * tests/panedwindow.test (new): * unix/Makefile.in: * unix/tkUnixDefault.h: * win/Makefile.in: * win/makefile.vc: * win/tkWinDefault.h: added implementation of TIP #41, panedwindow widget. [Patch #512503] (melski) * generic/tkOption.c (ReadOptionFile): fixed Tcl_Seek casting to remove warnings (we expect no option files with be > 2GB). * unix/configure: regenerated * unix/tcl.m4: updated to sync with Tcl's tcl.m4 Added --enable-64bit support for AIX-4 using IBM's xlc (-q64 flag). 2002-02-19 Don Porter <[email protected]> * changes: First draft of updated changes for 8.4a4 release. 2002-02-19 Donal K. Fellows <[email protected]> * generic/tkImgPhoto.c (MatchFileFormat): Tcl_Seek takes Tcl_WideInt offset (three places.) * generic/tkImgPPM.c (FileReadPPM): Tcl_Seek takes Tcl_WideInt offset. * generic/tkFrame.c (ConfigureFrame): Stop GCC warning. * generic/tkImgGIF.c: Made file meet the formatting rules from the Tcl Engineering Manual better; mostly differences in whitespace. 2002-02-18 Jeff Hobbs <[email protected]> * unix/configure: regen'd * unix/tcl.m4: * unix/configure.in: added macros and calls to SC_TCL_EARLY_FLAGS and SC_TCL_64BIT_FLAGS, part of TIP #72. 2002-02-14 Mo DeJong <[email protected]> * library/entry.tcl: * library/text.tcl: Adjust <Double-1> and <Triple-1> bindings so that no anchor point is set and the insertion cursor is set to the last character in the selection. [Bug 220943] * tests/event.test: Add test cases for double click and drag as well as triple click and drag in the text and entry widgets. 2002-02-14 Mo DeJong <[email protected]> * tests/event.test (_text_ind_to_x_y, _get_selection): Fix incorrect use of results from bbox invocation so that y center point for a give index is calculated correctly. Add new method to return the selection and use it in test cases. Always lappend to the result list to avoid case where initial result includes a space. 2002-02-07 Don Porter <[email protected]> * generic/tkMain.c: * mac/tkMacInit.c: * mac/tkMacKeyboard.c: * win/tkWinDialog.c: * win/tkWinTest.c: modified some callers of Tcl routines that were restored to return (char *) pointing into Tcl_DStrings. 2002-02-05 Jim Ingham <[email protected]> * macosx/tkMacOSXMenu.c: Fix 513222. We were going to invalidate the menu & delete the selection without checking whether the menu had already been deleted. * mac/tkMacMenu.c: ditto. |
︙ | ︙ |
Changes to README.
1 | README: Tk | | | | | | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 | README: Tk This is the Tk 8.4a5 source distribution. Tcl/Tk is also available through NetCVS: http://tcl.sourceforge.net/ You can get any source release of Tcl from the file distributions link at the above URL. RCS: @(#) $Id: README,v 1.31.2.1 2002/06/10 05:38:23 wolfsuit Exp $ 1. Introduction --------------- This directory contains the sources and documentation for Tk, an X11 toolkit implemented with the Tcl scripting language. For details on features, incompatibilities, and potential problems with this release, see the Tcl/Tk 8.4 Web page at http://www.tcl.tk/software/tcltk/8.4.html or refer to the "changes" file in this directory, which contains a historical record of all changes to Tk. Tk is maintained, enhanced, and distributed freely by members of the Tcl community. The home for Tcl/Tk sources and bug database is on SourceForge at: http://tcl.sourceforge.net/ with the Tcl Developer Xchange at: http://www.tcl.tk/ Tk is a freely available open source package. You can do virtually anything you like with it, such as modifying it, redistributing it, and selling it either in whole or in part. See the file "license.terms" for complete information. 2. See Tcl README |
︙ | ︙ |
Changes to changes.
1 2 3 4 | This file summarizes all changes made to Tk since version 1.0 was released on March 13, 1991. Changes that aren't backward compatible are marked specially. | | | 1 2 3 4 5 6 7 8 9 10 11 12 | This file summarizes all changes made to Tk since version 1.0 was released on March 13, 1991. Changes that aren't backward compatible are marked specially. RCS: @(#) $Id: changes,v 1.47.2.1 2002/06/10 05:38:23 wolfsuit Exp $ 3/16/91 (bug fix) Modified tkWindow.c to remove Tk's Tcl commands from the interpreter when the main window is deleted (otherwise there will be dangling pointers to the non-existent window). 3/16/91 (bug fix) Modified tkColor.c not to free black or white colors: some X servers get upset at this. |
︙ | ︙ | |||
4844 4845 4846 4847 4848 4849 4850 4851 4852 4853 4854 4855 4856 4857 | --- Released 8.3.0, February 10, 2000 --- See ChangeLog for details --- 2000-03-02 (bug fix) fixed crash in listbox when cursor was configure and then widget was destroyed (hobbs) 2000-03-02 (feature enhancement) added %V substitution to entry widget validation to clarify type of validation occuring (hobbs) 2000-03-29 (config enhancement) improved build support for gcc/mingw on Windows (nijtmans, hobbs) and added RPM target (melski) 2000-03-24 (bug fixes) numerous corrections for more correct Unix dialog behaviors (melski) | > > > | 4844 4845 4846 4847 4848 4849 4850 4851 4852 4853 4854 4855 4856 4857 4858 4859 4860 | --- Released 8.3.0, February 10, 2000 --- See ChangeLog for details --- 2000-03-02 (bug fix) fixed crash in listbox when cursor was configure and then widget was destroyed (hobbs) 2000-03-02 (feature enhancement) added %V substitution to entry widget validation to clarify type of validation occuring (hobbs) 2000-03-07 (feature enhancement) added -disabledforeground/-state to labels (melski) 2000-03-29 (config enhancement) improved build support for gcc/mingw on Windows (nijtmans, hobbs) and added RPM target (melski) 2000-03-24 (bug fixes) numerous corrections for more correct Unix dialog behaviors (melski) |
︙ | ︙ | |||
4966 4967 4968 4969 4970 4971 4972 | and corrected search combining -regexp and -nocase. (melski) 2000-08 (bug fix) Corrected code for using 'place', cursors, colors and 3D borders on multiple screens simultaneously. (hobbs, hipp) --- Released 8.3.2, August 9, 2000 --- See ChangeLog for details --- | < < | < | | < | > | | | > > | | | > | | | > | > | > | > > | 4969 4970 4971 4972 4973 4974 4975 4976 4977 4978 4979 4980 4981 4982 4983 4984 4985 4986 4987 4988 4989 4990 4991 4992 4993 4994 4995 4996 4997 4998 4999 5000 5001 5002 5003 5004 5005 5006 5007 5008 5009 5010 5011 5012 5013 5014 5015 5016 5017 5018 5019 | and corrected search combining -regexp and -nocase. (melski) 2000-08 (bug fix) Corrected code for using 'place', cursors, colors and 3D borders on multiple screens simultaneously. (hobbs, hipp) --- Released 8.3.2, August 9, 2000 --- See ChangeLog for details --- 2000-06-15 (new feature) [tk_getOpenFile ... -multiple] (melski) 2000-06-29 (new feature) localization support in Tk dialogs (duperval, melski, et al) 200-07-28 (new feature) -state option for listbox, better native color defaults (melski) 2000-08 (feature rewrites) Tcl_Obj'ified clipboard, message, tkwait, bindtags, grab. place, selection commands (melski) 2000-08-24 (new feature) More correct GNU configure support (no more --enable-gcc) (dejong) *** POTENTIAL INCOMPATIBILITY *** 2000-08-29 (bug fix) Corrected Windows menu indicator drawing (oberhumer) 2000-09-01 (bug fix) Added tkPlatDecls.h to default install (melski) 2000-09-17 (new feature) Added TK_OPTION_CUSTOM type, similar to TK_CONFIG_CUSTOM (melski) 2000-09-29 (bug fix) Several fixes for multi-display uses of Tk (hipp, hobbs) 2000-10-05 (new feature) Tk_CreateAnonymousWindow API to create anonymous Tk windows controllable from C (melski) 2000-10-27 (new default behavior) [tk useinputmethods 1] is the default in tk.tcl, for users of XIM and "dead" keys (hobbs) 2000-10-30 Improved support for static builds on Windows (gravereaux) * Added support for mingw (gcc on Windows), AIX-5 and Win64 builds (dejong, hobbs) * Improved error checking in Windows native dialogs (melski, hobbs) --- Released 8.4a2, November 3, 2000 --- See ChangeLog for details --- 2001-04-04 (build improvements) redid Mac build structure (steffen) Corrected IRIX-5* configure (english). Added support for AIX-5 (hobbs). Added support for Win64 (hobbs). 2001-04-04 (doc fixes) numerous doc corrections and clarifications. |
︙ | ︙ | |||
5041 5042 5043 5044 5045 5046 5047 | screens (hipp) 2000-08-18 (feature enhancement) Removed redundant call to DitherInstance (melski) --- Released 8.3.3, April 6, 2001 --- See ChangeLog for details --- | > | > > | > | | < | < < > > < > | > < < > > > < < | > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 5049 5050 5051 5052 5053 5054 5055 5056 5057 5058 5059 5060 5061 5062 5063 5064 5065 5066 5067 5068 5069 5070 5071 5072 5073 5074 5075 5076 5077 5078 5079 5080 5081 5082 5083 5084 5085 5086 5087 5088 5089 5090 5091 5092 5093 5094 5095 5096 5097 5098 5099 5100 5101 5102 5103 5104 5105 5106 5107 5108 5109 5110 5111 5112 5113 5114 5115 5116 5117 5118 5119 5120 5121 5122 5123 5124 5125 5126 5127 5128 5129 5130 5131 5132 5133 5134 5135 5136 5137 5138 5139 5140 5141 5142 5143 5144 5145 5146 5147 5148 5149 5150 5151 5152 5153 5154 5155 5156 5157 5158 5159 5160 5161 5162 5163 5164 5165 5166 5167 5168 5169 5170 5171 5172 5173 5174 5175 5176 5177 5178 5179 5180 5181 5182 5183 5184 5185 5186 5187 | screens (hipp) 2000-08-18 (feature enhancement) Removed redundant call to DitherInstance (melski) --- Released 8.3.3, April 6, 2001 --- See ChangeLog for details --- 2000-11-21 (new feature)[TIP 5] Tk_ClassProcs, Tk_SetClassProcs API (melski) 2000-12-13 (performance enhancement)[403327] Tcl_Objs of type "double" are recognized in SetMMFromAny to speed up canvas coord calculations (hobbs) 2001-01-02 (new feature)[TIP 8] [wn iconbitmap -default] on Windows (darley) 2001-02-12 (new feature)[TIP #21] asymmetric padding in the pack and grid geometry managers (hipp) 2001-05-21 (new feature)[TIP #11], -compound for [menubutton] widget (helfter) 2001-06-03 (bug fix) corrected support for is10646 fonts on Unix, added a ucs-2be encoding (welch) 2001-07-02 (bug fix) allowed tkwin to be Tcl_EventuallyFree'd in Tk_DestroyWindow so other widgets could register their use of it. Updated entry and listbox widgets to use this, correcting potential crashes. (hobbs) 2001-08-01 (interface rewrite)[TIP 44] moved all private tk[A-Z]* commands and variables into the ::tk:: namespace (porter) *** POTENTIAL INCOMPATIBILITY *** * overhaul of configure scripts for cleaner standard support and support of mingw gcc on Windows. (mdejong) * improved tests to better handle results on variant systems (hobbs) * correct several minor Purify complaints (hobbs) --- Released 8.4a3, August 6, 2000 --- See ChangeLog for details --- 2001-08-06 (new feature) added GNU (HURD) build support. (brinkman) 2001-08-23 (new feature) added QNX-6 build support. (loverso) 2001-08-24 (bug fix) correct several possible free memory reads and array bounds read errors reported by purify. (hobbs) 2001-08-27 (new feature) added call to Tcl_SetMainLoop which enables Tk to be loaded interactively into tclsh and have the event loop kick in correctly. (hobbs) 2001-08-28 (bug fix) fixed tk_chooseDirectory crash on Win95. (baker) 2001-08-28 (bug fix) removed 2 second 'raise' delay seen by some Unix window managers. (hobbs, baker) 2001-09-14 (bug fix) fixed memory leaks that occured if errors were thrown while initializing the channel for an image. (darley) 2001-09-20 (new feature) --enable-64bit support was added for HP 11 when using the native compiler. 2001-10-03 (new feature) finalized Win64 support with latest RC1 release and SDK. (hobbs, stacy) 2001-10-04 (new feature) added enhanced bgerror dialog from Hipp. (hobbs) 2001-10-09 (new feature) added brace/quote matching and file/path/var expansion to the Win/Mac console. (hobbs) 2001-10-17 (bug fix) fixed file filtering in the motif file dialog (nelson) 2001-10-17 (bug fix) updated Mac build support. (steffen) --- Released 8.3.4, October 19, 2001 --- See ChangeLog for details --- 2001-08-14 (bug fix)[450545] Tk's Tcl_ObjTypes now registered (fellows) 2001-08-20 (performance enhancement) internal use of a "window" Tcl_ObjType (fellows) 2001-08-20 (performance enhancement) Obj-ified [grid] and [pack] (spjuth) 2001-09-26 (new feature)[TIP 18] add labels to frames, update geometry managers (spjuth) 2001-09-30 (new feature)[TIP 37] [grid {row|column}configure -uniform] (spjuth) 2001-10-12 (new feature)[TIP 63] [$menu add ... -compound] (helfter) 2001-10-18 (build improvement) no more warnings about building with thread-enabled Tcl (hobbs) 2001-11-10 (build improvement) new make target 'make gdb' (dejong) 2001-11-12 (new feature)[TIP 26] simple undo/redo in text widget (callewaert) 2001-11-12 (build improvement) revitalized makefile.vc (gravereaux) 2001-11-17 (visual change) default button size on Windows changed to conform to Windows style (hobbs) **** POTENTIAL VISUAL INCOMPATABILITY **** 2001-12-03 (new feature)[TIP 74] [wm stackorder] (dejong, steffen) 2001-12 (new feature) more use of Unicode in native widgets on Windows (hobbs) 2001-12-18 (bug fix)[413735] event-click-drag-1.2 test failure (porter) 2001-12-28 (new feature) On Windows, buttons accept negative widths, meaning minimum size, enabling native L&F (hobbs) 2002-01 (bug fix) updates for CONST-ification in Tcl API, notably Tcl_ParseArgv. Use -DUSE_NON_CONST to suppress source incompatibility **** POTENTIAL INCOMPATABILITY **** 2002-01-31 (bug fix)[508988] logic error in menu cloning (helfter) 2002-02-01 (new feature)[TIP 14] [$photo transparency] (fellows) 2002-02-01 (bug fix)[511956] C99 spec: avoid 'bool' as a variable name (hobbs) 2002-02-19 (bug fix) updates to image code calls of Tcl_Seek/Tcl_Tell to address TIP 72 changes (64-bit) in Tcl (fellows) 2002-02-21 (new widget)[TIP 41] added [panedwindow] (hobbs) 2002-02-22 (new feature) 64-bit support for xlc compiler on AIX-4 (hobbs) 2002-02-25 (bug fix)[503772] blinking cursor fix in [text] (hobbs) 2002-02-25 (bug fix)[503613] [listbox] handling of invalid listvar (hobbs) 2002-02-25 (feature change)[493145] mirror B2 bindings to B3 on Windows (hobbs) * (updated demos) many updates to show new features (fellows) --- Released 8.4a4, March 5, 2002 --- See ChangeLog for details --- 2002-05-27 (feature change) [wm transient .t .t] now raises an error |
Changes to doc/console.n.
1 2 3 4 5 6 | '\" '\" Copyright (c) 2001 Donal K. Fellows '\" '\" See the file "license.terms" for information on usage and redistribution '\" of this file, and for a DISCLAIMER OF ALL WARRANTIES. '\" | | | | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | '\" '\" Copyright (c) 2001 Donal K. Fellows '\" '\" See the file "license.terms" for information on usage and redistribution '\" of this file, and for a DISCLAIMER OF ALL WARRANTIES. '\" '\" RCS: @(#) $Id: console.n,v 1.3.2.1 2002/06/10 05:38:23 wolfsuit Exp $ '\" .so man.macros .TH console n 8.4 Tk "Tk Built-In Commands" .BS '\" Note: do not modify the .SH NAME line immediately below! .SH NAME console \- Control the console on systems without a real console .SH SYNOPSIS \fBconsole title \fR?\fIstring\fR? .sp |
︙ | ︙ |
Changes to doc/getOpenFile.n.
1 2 3 4 5 6 | '\" '\" Copyright (c) 1996 Sun Microsystems, Inc. '\" '\" See the file "license.terms" for information on usage and redistribution '\" of this file, and for a DISCLAIMER OF ALL WARRANTIES. '\" | | | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 | '\" '\" Copyright (c) 1996 Sun Microsystems, Inc. '\" '\" See the file "license.terms" for information on usage and redistribution '\" of this file, and for a DISCLAIMER OF ALL WARRANTIES. '\" '\" RCS: @(#) $Id: getOpenFile.n,v 1.8.6.2 2002/06/10 05:38:23 wolfsuit Exp $ '\" .so man.macros .TH tk_getOpenFile n 4.2 Tk "Tk Built-In Commands" .BS '\" Note: do not modify the .SH NAME line immediately below! .SH NAME tk_getOpenFile, tk_getSaveFile \- pop up a dialog box for the user to select a file to open or save. |
︙ | ︙ | |||
73 74 75 76 77 78 79 | option is ignored on the Macintosh platform. .TP \fB\-multiple\fR Allows the user to choose multiple files from the Open dialog. On the Macintosh, this is only available when Navigation Services are installed. .TP | | | 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 | option is ignored on the Macintosh platform. .TP \fB\-multiple\fR Allows the user to choose multiple files from the Open dialog. On the Macintosh, this is only available when Navigation Services are installed. .TP \fB\-message\fR \fIstring\fR Specifies a message to include in the client area of the dialog. This is only available on the Macintosh, and only when Navigation Services are installed. .TP \fB\-parent\fR \fIwindow\fR Makes \fIwindow\fR the logical parent of the file dialog. The file dialog is displayed on top of its parent window. |
︙ | ︙ |
Changes to doc/panedwindow.n.
1 2 3 4 5 6 7 | '\" '\" Copyright (c) 1992 The Regents of the University of California. '\" Copyright (c) 1994-1996 Sun Microsystems, Inc. '\" '\" See the file "license.terms" for information on usage and redistribution '\" of this file, and for a DISCLAIMER OF ALL WARRANTIES. '\" | | | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | '\" '\" Copyright (c) 1992 The Regents of the University of California. '\" Copyright (c) 1994-1996 Sun Microsystems, Inc. '\" '\" See the file "license.terms" for information on usage and redistribution '\" of this file, and for a DISCLAIMER OF ALL WARRANTIES. '\" '\" RCS: @(#) $Id: panedwindow.n,v 1.1.4.2 2002/06/10 05:38:23 wolfsuit Exp $ '\" .so man.macros .TH panedwindow n 8.4 Tk "Tk Built-In Commands" .BS '\" Note: do not modify the .SH NAME line immediately below! .SH NAME panedwindow \- Create and manipulate panedwindow widgets |
︙ | ︙ |
Changes to doc/photo.n.
1 2 3 4 5 6 7 8 9 10 11 | '\" '\" Copyright (c) 1994 The Australian National University '\" Copyright (c) 1994-1997 Sun Microsystems, Inc. '\" '\" See the file "license.terms" for information on usage and redistribution '\" of this file, and for a DISCLAIMER OF ALL WARRANTIES. '\" '\" Author: Paul Mackerras ([email protected]), '\" Department of Computer Science, '\" Australian National University. '\" | | | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | '\" '\" Copyright (c) 1994 The Australian National University '\" Copyright (c) 1994-1997 Sun Microsystems, Inc. '\" '\" See the file "license.terms" for information on usage and redistribution '\" of this file, and for a DISCLAIMER OF ALL WARRANTIES. '\" '\" Author: Paul Mackerras ([email protected]), '\" Department of Computer Science, '\" Australian National University. '\" '\" RCS: @(#) $Id: photo.n,v 1.7.4.2 2002/06/10 05:38:23 wolfsuit Exp $ '\" .so man.macros .TH photo n 4.0 Tk "Tk Built-In Commands" .BS '\" Note: do not modify the .SH NAME line immediately below! .SH NAME photo \- Full-color images |
︙ | ︙ | |||
29 30 31 32 33 34 35 | data for a photo image can be obtained from a file or a string, or it can be supplied from C code through a procedural interface. At present, only GIF and PPM/PGM formats are supported, but an interface exists to allow additional image file formats to be added easily. A photo image is transparent in regions where no image data has been supplied .VS 8.4 | | | 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 | data for a photo image can be obtained from a file or a string, or it can be supplied from C code through a procedural interface. At present, only GIF and PPM/PGM formats are supported, but an interface exists to allow additional image file formats to be added easily. A photo image is transparent in regions where no image data has been supplied .VS 8.4 or where it has been set transparent by the \fBtransparency set\fR subcommand. .VE 8.4 .SH "CREATING PHOTOS" .PP Like all images, photos are created using the \fBimage create\fR command. |
︙ | ︙ | |||
317 318 319 320 321 322 323 | Allows examination and manipulation of the transparency information in the photo image. Several subcommands are available: .RS .TP \fIimageName \fBtransparency get \fIx y\fR Returns a boolean indicating if the pixel at (\fIx\fR,\fIy\fR) is transparent. | | | 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 | Allows examination and manipulation of the transparency information in the photo image. Several subcommands are available: .RS .TP \fIimageName \fBtransparency get \fIx y\fR Returns a boolean indicating if the pixel at (\fIx\fR,\fIy\fR) is transparent. \fIimageName \fBtransparency set \fIx y boolean\fR Makes the pixel at (\fIx\fR,\fIy\fR) transparent if \fIboolean\fR is true, and makes that pixel opaque otherwise. .RE .VE 8.4 .TP \fIimageName \fBwrite \fIfilename\fR ?\fIoption value(s) ...\fR? Writes image data from \fIimageName\fR to a file named \fIfilename\fR. |
︙ | ︙ |
Changes to doc/wm.n.
1 2 3 4 5 6 7 | '\" '\" Copyright (c) 1991-1994 The Regents of the University of California. '\" Copyright (c) 1994-1996 Sun Microsystems, Inc. '\" '\" See the file "license.terms" for information on usage and redistribution '\" of this file, and for a DISCLAIMER OF ALL WARRANTIES. '\" | | | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | '\" '\" Copyright (c) 1991-1994 The Regents of the University of California. '\" Copyright (c) 1994-1996 Sun Microsystems, Inc. '\" '\" See the file "license.terms" for information on usage and redistribution '\" of this file, and for a DISCLAIMER OF ALL WARRANTIES. '\" '\" RCS: @(#) $Id: wm.n,v 1.6.4.2 2002/06/10 05:38:23 wolfsuit Exp $ '\" .so man.macros .TH wm n 4.3 Tk "Tk Built-In Commands" .BS '\" Note: do not modify the .SH NAME line immediately below! .SH NAME wm \- Communicate with window manager |
︙ | ︙ | |||
396 397 398 399 400 401 402 | source is cancelled. If \fIwho\fR is specified, then the command returns an empty string. Otherwise it returns \fBuser\fR or \fBwindow\fR to indicate the source of the window's current size, or an empty string if no source has been specified yet. Most window managers interpret ``no source'' as equivalent to \fBprogram\fR. .TP | | | 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 | source is cancelled. If \fIwho\fR is specified, then the command returns an empty string. Otherwise it returns \fBuser\fR or \fBwindow\fR to indicate the source of the window's current size, or an empty string if no source has been specified yet. Most window managers interpret ``no source'' as equivalent to \fBprogram\fR. .TP \fBwm stackorder \fIwindow\fR ?\fIisabove|isbelow window\fR? The stackorder command returns a list of toplevel windows in stacking order, from lowest to highest. When a single toplevel window is passed, the returned list recursively includes all of the window's children that are toplevels. Only those toplevels that are currently mapped to the screen are returned. The stackorder command can also be used to determine if one toplevel is positioned above or below a second toplevel. |
︙ | ︙ |
Changes to generic/tk.decls.
1 2 3 4 5 6 7 8 9 10 11 12 13 | # tk.decls -- # # This file contains the declarations for all supported public # functions that are exported by the Tk library via the stubs table. # This file is used to generate the tkDecls.h, tkPlatDecls.h, # tkStub.c, and tkPlatStub.c files. # # # Copyright (c) 1998-2000 Ajuba Solutions. # # See the file "license.terms" for information on usage and redistribution # of this file, and for a DISCLAIMER OF ALL WARRANTIES. # | | | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | # tk.decls -- # # This file contains the declarations for all supported public # functions that are exported by the Tk library via the stubs table. # This file is used to generate the tkDecls.h, tkPlatDecls.h, # tkStub.c, and tkPlatStub.c files. # # # Copyright (c) 1998-2000 Ajuba Solutions. # # See the file "license.terms" for information on usage and redistribution # of this file, and for a DISCLAIMER OF ALL WARRANTIES. # # RCS: @(#) $Id: tk.decls,v 1.15.2.5 2002/06/10 05:38:23 wolfsuit Exp $ library tk # Define the tk interface with 3 sub interfaces: # tkPlat - platform specific public # tkInt - generic private # tkPlatInt - platform specific private |
︙ | ︙ | |||
1153 1154 1155 1156 1157 1158 1159 1160 1161 1162 1163 1164 1165 1166 | void Tk_SetInternalBorderEx (Tk_Window tkwin, int left, int right, \ int top, int bottom) } declare 244 generic { void Tk_SetMinimumRequestSize (Tk_Window tkwin, \ int minWidth, int minHeight) } # Define the platform specific public Tk interface. These functions are # only available on the designated platform. interface tkPlat # Unix specific functions | > > > > > > | 1153 1154 1155 1156 1157 1158 1159 1160 1161 1162 1163 1164 1165 1166 1167 1168 1169 1170 1171 1172 | void Tk_SetInternalBorderEx (Tk_Window tkwin, int left, int right, \ int top, int bottom) } declare 244 generic { void Tk_SetMinimumRequestSize (Tk_Window tkwin, \ int minWidth, int minHeight) } # New in 8.4a5 # declare 245 generic { void Tk_SetCaretPos (Tk_Window tkwin, int x, int y, int height) } # Define the platform specific public Tk interface. These functions are # only available on the designated platform. interface tkPlat # Unix specific functions |
︙ | ︙ |
Changes to generic/tk.h.
︙ | ︙ | |||
8 9 10 11 12 13 14 | * Copyright (c) 1994 The Australian National University. * Copyright (c) 1994-1998 Sun Microsystems, Inc. * Copyright (c) 1998-2000 Ajuba Solutions. * * See the file "license.terms" for information on usage and redistribution * of this file, and for a DISCLAIMER OF ALL WARRANTIES. * | | | 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | * Copyright (c) 1994 The Australian National University. * Copyright (c) 1994-1998 Sun Microsystems, Inc. * Copyright (c) 1998-2000 Ajuba Solutions. * * See the file "license.terms" for information on usage and redistribution * of this file, and for a DISCLAIMER OF ALL WARRANTIES. * * RCS: @(#) $Id: tk.h,v 1.57.2.3 2002/06/10 05:38:23 wolfsuit Exp $ */ #ifndef _TK #define _TK /* * For C++ compilers, use extern "C" |
︙ | ︙ | |||
44 45 46 47 48 49 50 | * You may also need to update some of these files when the numbers change * for the version of Tcl that this release of Tk is compiled against. */ #define TK_MAJOR_VERSION 8 #define TK_MINOR_VERSION 4 #define TK_RELEASE_LEVEL TCL_ALPHA_RELEASE | | | | 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 | * You may also need to update some of these files when the numbers change * for the version of Tcl that this release of Tk is compiled against. */ #define TK_MAJOR_VERSION 8 #define TK_MINOR_VERSION 4 #define TK_RELEASE_LEVEL TCL_ALPHA_RELEASE #define TK_RELEASE_SERIAL 5 #define TK_VERSION "8.4" #define TK_PATCH_LEVEL "8.4a5" /* * The following definitions set up the proper options for Macintosh * compilers. We use this method because there is no autoconf equivalent. */ #if defined(MAC_TCL) || defined(MAC_OSX_TK) |
︙ | ︙ |
Changes to generic/tkButton.c.
1 2 3 4 5 6 7 8 9 10 11 12 13 | /* * tkButton.c -- * * This module implements a collection of button-like * widgets for the Tk toolkit. The widgets implemented * include labels, buttons, checkbuttons, and radiobuttons. * * Copyright (c) 1990-1994 The Regents of the University of California. * Copyright (c) 1994-1998 Sun Microsystems, Inc. * * See the file "license.terms" for information on usage and redistribution * of this file, and for a DISCLAIMER OF ALL WARRANTIES. * | | | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | /* * tkButton.c -- * * This module implements a collection of button-like * widgets for the Tk toolkit. The widgets implemented * include labels, buttons, checkbuttons, and radiobuttons. * * Copyright (c) 1990-1994 The Regents of the University of California. * Copyright (c) 1994-1998 Sun Microsystems, Inc. * * See the file "license.terms" for information on usage and redistribution * of this file, and for a DISCLAIMER OF ALL WARRANTIES. * * RCS: @(#) $Id: tkButton.c,v 1.13.2.2 2002/06/10 05:38:23 wolfsuit Exp $ */ #include "tkButton.h" #include "default.h" typedef struct ThreadSpecificData { int defaultsInitialized; |
︙ | ︙ | |||
516 517 518 519 520 521 522 | static void ButtonImageProc _ANSI_ARGS_((ClientData clientData, int x, int y, int width, int height, int imgWidth, int imgHeight)); static void ButtonSelectImageProc _ANSI_ARGS_(( ClientData clientData, int x, int y, int width, int height, int imgWidth, int imgHeight)); static char * ButtonTextVarProc _ANSI_ARGS_((ClientData clientData, | | | | 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 | static void ButtonImageProc _ANSI_ARGS_((ClientData clientData, int x, int y, int width, int height, int imgWidth, int imgHeight)); static void ButtonSelectImageProc _ANSI_ARGS_(( ClientData clientData, int x, int y, int width, int height, int imgWidth, int imgHeight)); static char * ButtonTextVarProc _ANSI_ARGS_((ClientData clientData, Tcl_Interp *interp, char *name1, CONST char *name2, int flags)); static char * ButtonVarProc _ANSI_ARGS_((ClientData clientData, Tcl_Interp *interp, char *name1, CONST char *name2, int flags)); static int ButtonWidgetObjCmd _ANSI_ARGS_((ClientData clientData, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[])); static int ConfigureButton _ANSI_ARGS_((Tcl_Interp *interp, TkButton *butPtr, int objc, Tcl_Obj *CONST objv[])); |
︙ | ︙ | |||
1125 1126 1127 1128 1129 1130 1131 1132 1133 1134 1135 1136 1137 1138 | if (Tcl_ObjSetVar2(interp, namePtr, NULL, (butPtr->type == TYPE_CHECK_BUTTON) ? butPtr->offValuePtr : Tcl_NewObj(), TCL_GLOBAL_ONLY|TCL_LEAVE_ERR_MSG) == NULL) { continue; } } } /* * Get the images for the widget, if there are any. Allocate the * new images before freeing the old ones, so that the reference * counts don't go to zero and cause image data to be discarded. | > > > > > > > > > > | 1125 1126 1127 1128 1129 1130 1131 1132 1133 1134 1135 1136 1137 1138 1139 1140 1141 1142 1143 1144 1145 1146 1147 1148 | if (Tcl_ObjSetVar2(interp, namePtr, NULL, (butPtr->type == TYPE_CHECK_BUTTON) ? butPtr->offValuePtr : Tcl_NewObj(), TCL_GLOBAL_ONLY|TCL_LEAVE_ERR_MSG) == NULL) { continue; } /* * If a radiobutton has the empty string as value * it should be selected. */ if ((butPtr->type == TYPE_RADIO_BUTTON) && (*Tcl_GetString(butPtr->onValuePtr) == 0)) { butPtr->flags |= SELECTED; } } } /* * Get the images for the widget, if there are any. Allocate the * new images before freeing the old ones, so that the reference * counts don't go to zero and cause image data to be discarded. |
︙ | ︙ | |||
1535 1536 1537 1538 1539 1540 1541 | /* ARGSUSED */ static char * ButtonVarProc(clientData, interp, name1, name2, flags) ClientData clientData; /* Information about button. */ Tcl_Interp *interp; /* Interpreter containing variable. */ char *name1; /* Name of variable. */ | | | 1545 1546 1547 1548 1549 1550 1551 1552 1553 1554 1555 1556 1557 1558 1559 | /* ARGSUSED */ static char * ButtonVarProc(clientData, interp, name1, name2, flags) ClientData clientData; /* Information about button. */ Tcl_Interp *interp; /* Interpreter containing variable. */ char *name1; /* Name of variable. */ CONST char *name2; /* Second part of variable name. */ int flags; /* Information about what happened. */ { register TkButton *butPtr = (TkButton *) clientData; char *name, *value; Tcl_Obj *valuePtr; name = Tcl_GetString(butPtr->selVarNamePtr); |
︙ | ︙ | |||
1614 1615 1616 1617 1618 1619 1620 | /* ARGSUSED */ static char * ButtonTextVarProc(clientData, interp, name1, name2, flags) ClientData clientData; /* Information about button. */ Tcl_Interp *interp; /* Interpreter containing variable. */ char *name1; /* Not used. */ | | | 1624 1625 1626 1627 1628 1629 1630 1631 1632 1633 1634 1635 1636 1637 1638 | /* ARGSUSED */ static char * ButtonTextVarProc(clientData, interp, name1, name2, flags) ClientData clientData; /* Information about button. */ Tcl_Interp *interp; /* Interpreter containing variable. */ char *name1; /* Not used. */ CONST char *name2; /* Not used. */ int flags; /* Information about what happened. */ { TkButton *butPtr = (TkButton *) clientData; char *name; Tcl_Obj *valuePtr; if (butPtr->flags & BUTTON_DELETED) { |
︙ | ︙ |
Changes to generic/tkCanvText.c.
1 2 3 4 5 6 7 8 9 10 11 | /* * tkCanvText.c -- * * This file implements text items for canvas widgets. * * Copyright (c) 1991-1994 The Regents of the University of California. * Copyright (c) 1994-1997 Sun Microsystems, Inc. * * See the file "license.terms" for information on usage and redistribution * of this file, and for a DISCLAIMER OF ALL WARRANTIES. * | | | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | /* * tkCanvText.c -- * * This file implements text items for canvas widgets. * * Copyright (c) 1991-1994 The Regents of the University of California. * Copyright (c) 1994-1997 Sun Microsystems, Inc. * * See the file "license.terms" for information on usage and redistribution * of this file, and for a DISCLAIMER OF ALL WARRANTIES. * * RCS: @(#) $Id: tkCanvText.c,v 1.10.2.2 2002/06/10 05:38:23 wolfsuit Exp $ */ #include <stdio.h> #include "tkInt.h" #include "tkCanvas.h" #include "tkPort.h" #include "default.h" |
︙ | ︙ | |||
631 632 633 634 635 636 637 | } /* * Use overall geometry information to compute the top-left corner * of the bounding box for the text item. */ | | | | 631 632 633 634 635 636 637 638 639 640 641 642 643 644 645 646 | } /* * Use overall geometry information to compute the top-left corner * of the bounding box for the text item. */ leftX = (int) floor(textPtr->x + 0.5); topY = (int) floor(textPtr->y + 0.5); switch (textPtr->anchor) { case TK_ANCHOR_NW: case TK_ANCHOR_N: case TK_ANCHOR_NE: break; case TK_ANCHOR_W: |
︙ | ︙ | |||
824 825 826 827 828 829 830 831 832 833 834 835 836 837 | if (Tk_CharBbox(textPtr->textLayout, textPtr->insertPos, &x, &y, NULL, &height)) { Tk_CanvasDrawableCoords(canvas, (double) (textPtr->leftEdge + x - (textInfoPtr->insertWidth / 2)), (double) (textPtr->header.y1 + y), &drawableX, &drawableY); if (textInfoPtr->cursorOn) { Tk_Fill3DRectangle(Tk_CanvasTkwin(canvas), drawable, textInfoPtr->insertBorder, drawableX, drawableY, textInfoPtr->insertWidth, height, textInfoPtr->insertBorderWidth, TK_RELIEF_RAISED); } else if (textPtr->cursorOffGC != None) { | > > | 824 825 826 827 828 829 830 831 832 833 834 835 836 837 838 839 | if (Tk_CharBbox(textPtr->textLayout, textPtr->insertPos, &x, &y, NULL, &height)) { Tk_CanvasDrawableCoords(canvas, (double) (textPtr->leftEdge + x - (textInfoPtr->insertWidth / 2)), (double) (textPtr->header.y1 + y), &drawableX, &drawableY); Tk_SetCaretPos(Tk_CanvasTkwin(canvas), drawableX, drawableY, height); if (textInfoPtr->cursorOn) { Tk_Fill3DRectangle(Tk_CanvasTkwin(canvas), drawable, textInfoPtr->insertBorder, drawableX, drawableY, textInfoPtr->insertWidth, height, textInfoPtr->insertBorderWidth, TK_RELIEF_RAISED); } else if (textPtr->cursorOffGC != None) { |
︙ | ︙ |
Changes to generic/tkClipboard.c.
1 2 3 4 5 6 7 8 9 10 11 12 13 | /* * tkClipboard.c -- * * This file manages the clipboard for the Tk toolkit, * maintaining a collection of data buffers that will be * supplied on demand to requesting applications. * * Copyright (c) 1994 The Regents of the University of California. * Copyright (c) 1994-1997 Sun Microsystems, Inc. * * See the file "license.terms" for information on usage and redistribution * of this file, and for a DISCLAIMER OF ALL WARRANTIES. * | | | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | /* * tkClipboard.c -- * * This file manages the clipboard for the Tk toolkit, * maintaining a collection of data buffers that will be * supplied on demand to requesting applications. * * Copyright (c) 1994 The Regents of the University of California. * Copyright (c) 1994-1997 Sun Microsystems, Inc. * * See the file "license.terms" for information on usage and redistribution * of this file, and for a DISCLAIMER OF ALL WARRANTIES. * * RCS: @(#) $Id: tkClipboard.c,v 1.7.6.2 2002/06/10 05:38:23 wolfsuit Exp $ */ #include "tkInt.h" #include "tkPort.h" #include "tkSelect.h" /* |
︙ | ︙ | |||
615 616 617 618 619 620 621 622 623 624 625 626 627 628 | Tcl_DStringFree(&selBytes); } return result; } } return TCL_OK; } /* *---------------------------------------------------------------------- * * TkClipInit -- * * This procedure is called to initialize the window for claiming | > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 615 616 617 618 619 620 621 622 623 624 625 626 627 628 629 630 631 632 633 634 635 636 637 638 639 640 641 642 643 644 645 646 647 648 649 650 651 652 653 654 655 656 657 658 659 660 661 662 663 664 665 666 | Tcl_DStringFree(&selBytes); } return result; } } return TCL_OK; } /* *---------------------------------------------------------------------- * * TkClipCleanup -- * * This procedure is called to cleanup resources associated with * claiming clipboard ownership and for receiving selection get * results. This function is called in tkWindow.c. This has to be * called by the display cleanup function because we still need the * access display elements. * * Results: * None. * * Side effects: * Resources are freed - the clipboard may no longer be used. * *---------------------------------------------------------------------- */ void TkClipCleanup(dispPtr) TkDisplay *dispPtr; /* display associated with clipboard */ { if (dispPtr->clipWindow != NULL) { Tk_DeleteSelHandler(dispPtr->clipWindow, dispPtr->clipboardAtom, dispPtr->applicationAtom); Tk_DeleteSelHandler(dispPtr->clipWindow, dispPtr->clipboardAtom, dispPtr->windowAtom); /* * It may be too late to call Tk_DestroyWindow, so just free the * memory created directly. */ ckfree((char *) dispPtr->clipWindow); dispPtr->clipWindow = NULL; } } /* *---------------------------------------------------------------------- * * TkClipInit -- * * This procedure is called to initialize the window for claiming |
︙ | ︙ |
Changes to generic/tkCmds.c.
1 2 3 4 5 6 7 8 9 10 11 12 13 | /* * tkCmds.c -- * * This file contains a collection of Tk-related Tcl commands * that didn't fit in any particular file of the toolkit. * * Copyright (c) 1990-1994 The Regents of the University of California. * Copyright (c) 1994-1997 Sun Microsystems, Inc. * Copyright (c) 2000 Scriptics Corporation. * * See the file "license.terms" for information on usage and redistribution * of this file, and for a DISCLAIMER OF ALL WARRANTIES. * | | | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | /* * tkCmds.c -- * * This file contains a collection of Tk-related Tcl commands * that didn't fit in any particular file of the toolkit. * * Copyright (c) 1990-1994 The Regents of the University of California. * Copyright (c) 1994-1997 Sun Microsystems, Inc. * Copyright (c) 2000 Scriptics Corporation. * * See the file "license.terms" for information on usage and redistribution * of this file, and for a DISCLAIMER OF ALL WARRANTIES. * * RCS: @(#) $Id: tkCmds.c,v 1.20.2.4 2002/06/10 05:38:23 wolfsuit Exp $ */ #include "tkPort.h" #include "tkInt.h" #include <errno.h> #if defined(__WIN32__) |
︙ | ︙ | |||
30 31 32 33 34 35 36 | /* * Forward declarations for procedures defined later in this file: */ static TkWindow * GetToplevel _ANSI_ARGS_((Tk_Window tkwin)); static char * WaitVariableProc _ANSI_ARGS_((ClientData clientData, | | | 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 | /* * Forward declarations for procedures defined later in this file: */ static TkWindow * GetToplevel _ANSI_ARGS_((Tk_Window tkwin)); static char * WaitVariableProc _ANSI_ARGS_((ClientData clientData, Tcl_Interp *interp, char *name1, CONST char *name2, int flags)); static void WaitVisibilityProc _ANSI_ARGS_((ClientData clientData, XEvent *eventPtr)); static void WaitWindowProc _ANSI_ARGS_((ClientData clientData, XEvent *eventPtr)); /* |
︙ | ︙ | |||
303 304 305 306 307 308 309 310 311 312 313 314 315 316 | * A standard Tcl result. * * Side effects: * See the user documentation. * *---------------------------------------------------------------------- */ int Tk_BindtagsObjCmd(clientData, interp, objc, objv) ClientData clientData; /* Main window associated with interpreter. */ Tcl_Interp *interp; /* Current interpreter. */ int objc; /* Number of arguments. */ Tcl_Obj *CONST objv[]; /* Argument objects. */ { | > | 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 | * A standard Tcl result. * * Side effects: * See the user documentation. * *---------------------------------------------------------------------- */ int Tk_BindtagsObjCmd(clientData, interp, objc, objv) ClientData clientData; /* Main window associated with interpreter. */ Tcl_Interp *interp; /* Current interpreter. */ int objc; /* Number of arguments. */ Tcl_Obj *CONST objv[]; /* Argument objects. */ { |
︙ | ︙ | |||
387 388 389 390 391 392 393 | winPtr->tagPtr[i] = (ClientData) copy; } else { winPtr->tagPtr[i] = (ClientData) Tk_GetUid(p); } } return TCL_OK; } | | | 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 | winPtr->tagPtr[i] = (ClientData) copy; } else { winPtr->tagPtr[i] = (ClientData) Tk_GetUid(p); } } return TCL_OK; } /* *---------------------------------------------------------------------- * * TkFreeBindingTags -- * * This procedure is called to free all of the binding tags * associated with a window; typically it is only invoked where |
︙ | ︙ | |||
853 854 855 856 857 858 859 | /* ARGSUSED */ static char * WaitVariableProc(clientData, interp, name1, name2, flags) ClientData clientData; /* Pointer to integer to set to 1. */ Tcl_Interp *interp; /* Interpreter containing variable. */ char *name1; /* Name of variable. */ | | | 854 855 856 857 858 859 860 861 862 863 864 865 866 867 868 | /* ARGSUSED */ static char * WaitVariableProc(clientData, interp, name1, name2, flags) ClientData clientData; /* Pointer to integer to set to 1. */ Tcl_Interp *interp; /* Interpreter containing variable. */ char *name1; /* Name of variable. */ CONST char *name2; /* Second part of variable name. */ int flags; /* Information about what happened. */ { int *donePtr = (int *) clientData; *donePtr = 1; return (char *) NULL; } |
︙ | ︙ |
Changes to generic/tkConsole.c.
1 2 3 4 5 6 7 8 9 10 11 12 | /* * tkConsole.c -- * * This file implements a Tcl console for systems that may not * otherwise have access to a console. It uses the Text widget * and provides special access via a console command. * * Copyright (c) 1995-1996 Sun Microsystems, Inc. * * See the file "license.terms" for information on usage and redistribution * of this file, and for a DISCLAIMER OF ALL WARRANTIES. * | | | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | /* * tkConsole.c -- * * This file implements a Tcl console for systems that may not * otherwise have access to a console. It uses the Text widget * and provides special access via a console command. * * Copyright (c) 1995-1996 Sun Microsystems, Inc. * * See the file "license.terms" for information on usage and redistribution * of this file, and for a DISCLAIMER OF ALL WARRANTIES. * * RCS: @(#) $Id: tkConsole.c,v 1.13.2.2 2002/06/10 05:38:23 wolfsuit Exp $ */ #include "tk.h" #include <string.h> #include "tkInt.h" |
︙ | ︙ | |||
598 599 600 601 602 603 604 | if (argc == 3) { result = Tcl_Eval(consoleInterp, argv[2]); Tcl_AppendResult(interp, Tcl_GetStringResult(consoleInterp), (char *) NULL); } else { Tcl_AppendResult(interp, "wrong # args: should be \"", argv[0], " eval command\"", (char *) NULL); | | | 598 599 600 601 602 603 604 605 606 607 608 609 610 611 612 | if (argc == 3) { result = Tcl_Eval(consoleInterp, argv[2]); Tcl_AppendResult(interp, Tcl_GetStringResult(consoleInterp), (char *) NULL); } else { Tcl_AppendResult(interp, "wrong # args: should be \"", argv[0], " eval command\"", (char *) NULL); result = TCL_ERROR; } } else { Tcl_AppendResult(interp, "bad option \"", argv[1], "\": should be hide, show, or title", (char *) NULL); result = TCL_ERROR; } |
︙ | ︙ |
Changes to generic/tkDecls.h.
1 2 3 4 5 6 7 8 9 10 | /* * tkDecls.h -- * * Declarations of functions in the platform independent public Tcl API. * * Copyright (c) 1998-1999 by Scriptics Corporation. * * See the file "license.terms" for information on usage and redistribution * of this file, and for a DISCLAIMER OF ALL WARRANTIES. * | | | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | /* * tkDecls.h -- * * Declarations of functions in the platform independent public Tcl API. * * Copyright (c) 1998-1999 by Scriptics Corporation. * * See the file "license.terms" for information on usage and redistribution * of this file, and for a DISCLAIMER OF ALL WARRANTIES. * * RCS: @(#) $Id: tkDecls.h,v 1.15.2.2 2002/06/10 05:38:23 wolfsuit Exp $ */ #ifndef _TKDECLS #define _TKDECLS #ifdef BUILD_tk #undef TCL_STORAGE_CLASS |
︙ | ︙ | |||
839 840 841 842 843 844 845 846 847 848 849 850 851 852 | ClientData instanceData)); /* 243 */ EXTERN void Tk_SetInternalBorderEx _ANSI_ARGS_((Tk_Window tkwin, int left, int right, int top, int bottom)); /* 244 */ EXTERN void Tk_SetMinimumRequestSize _ANSI_ARGS_(( Tk_Window tkwin, int minWidth, int minHeight)); typedef struct TkStubHooks { struct TkPlatStubs *tkPlatStubs; struct TkIntStubs *tkIntStubs; struct TkIntPlatStubs *tkIntPlatStubs; struct TkIntXlibStubs *tkIntXlibStubs; } TkStubHooks; | > > > | 839 840 841 842 843 844 845 846 847 848 849 850 851 852 853 854 855 | ClientData instanceData)); /* 243 */ EXTERN void Tk_SetInternalBorderEx _ANSI_ARGS_((Tk_Window tkwin, int left, int right, int top, int bottom)); /* 244 */ EXTERN void Tk_SetMinimumRequestSize _ANSI_ARGS_(( Tk_Window tkwin, int minWidth, int minHeight)); /* 245 */ EXTERN void Tk_SetCaretPos _ANSI_ARGS_((Tk_Window tkwin, int x, int y, int height)); typedef struct TkStubHooks { struct TkPlatStubs *tkPlatStubs; struct TkIntStubs *tkIntStubs; struct TkIntPlatStubs *tkIntPlatStubs; struct TkIntXlibStubs *tkIntXlibStubs; } TkStubHooks; |
︙ | ︙ | |||
1096 1097 1098 1099 1100 1101 1102 1103 1104 1105 1106 1107 1108 1109 | int (*tk_PostscriptPhoto) _ANSI_ARGS_((Tcl_Interp * interp, Tk_PhotoImageBlock * blockPtr, Tk_PostscriptInfo psInfo, int width, int height)); /* 238 */ void (*tk_CreateClientMessageHandler) _ANSI_ARGS_((Tk_ClientMessageProc * proc)); /* 239 */ void (*tk_DeleteClientMessageHandler) _ANSI_ARGS_((Tk_ClientMessageProc * proc)); /* 240 */ Tk_Window (*tk_CreateAnonymousWindow) _ANSI_ARGS_((Tcl_Interp * interp, Tk_Window parent, char * screenName)); /* 241 */ void (*tk_SetClassProcs) _ANSI_ARGS_((Tk_Window tkwin, Tk_ClassProcs * procs, ClientData instanceData)); /* 242 */ void (*tk_SetInternalBorderEx) _ANSI_ARGS_((Tk_Window tkwin, int left, int right, int top, int bottom)); /* 243 */ void (*tk_SetMinimumRequestSize) _ANSI_ARGS_((Tk_Window tkwin, int minWidth, int minHeight)); /* 244 */ } TkStubs; #ifdef __cplusplus extern "C" { #endif extern TkStubs *tkStubsPtr; #ifdef __cplusplus | > | 1099 1100 1101 1102 1103 1104 1105 1106 1107 1108 1109 1110 1111 1112 1113 | int (*tk_PostscriptPhoto) _ANSI_ARGS_((Tcl_Interp * interp, Tk_PhotoImageBlock * blockPtr, Tk_PostscriptInfo psInfo, int width, int height)); /* 238 */ void (*tk_CreateClientMessageHandler) _ANSI_ARGS_((Tk_ClientMessageProc * proc)); /* 239 */ void (*tk_DeleteClientMessageHandler) _ANSI_ARGS_((Tk_ClientMessageProc * proc)); /* 240 */ Tk_Window (*tk_CreateAnonymousWindow) _ANSI_ARGS_((Tcl_Interp * interp, Tk_Window parent, char * screenName)); /* 241 */ void (*tk_SetClassProcs) _ANSI_ARGS_((Tk_Window tkwin, Tk_ClassProcs * procs, ClientData instanceData)); /* 242 */ void (*tk_SetInternalBorderEx) _ANSI_ARGS_((Tk_Window tkwin, int left, int right, int top, int bottom)); /* 243 */ void (*tk_SetMinimumRequestSize) _ANSI_ARGS_((Tk_Window tkwin, int minWidth, int minHeight)); /* 244 */ void (*tk_SetCaretPos) _ANSI_ARGS_((Tk_Window tkwin, int x, int y, int height)); /* 245 */ } TkStubs; #ifdef __cplusplus extern "C" { #endif extern TkStubs *tkStubsPtr; #ifdef __cplusplus |
︙ | ︙ | |||
2086 2087 2088 2089 2090 2091 2092 2093 2094 2095 2096 2097 2098 2099 2100 2101 2102 | #define Tk_SetInternalBorderEx \ (tkStubsPtr->tk_SetInternalBorderEx) /* 243 */ #endif #ifndef Tk_SetMinimumRequestSize #define Tk_SetMinimumRequestSize \ (tkStubsPtr->tk_SetMinimumRequestSize) /* 244 */ #endif #endif /* defined(USE_TK_STUBS) && !defined(USE_TK_STUB_PROCS) */ /* !END!: Do not edit above this line. */ #undef TCL_STORAGE_CLASS #define TCL_STORAGE_CLASS DLLIMPORT #endif /* _TKDECLS */ | > > > > | 2090 2091 2092 2093 2094 2095 2096 2097 2098 2099 2100 2101 2102 2103 2104 2105 2106 2107 2108 2109 2110 | #define Tk_SetInternalBorderEx \ (tkStubsPtr->tk_SetInternalBorderEx) /* 243 */ #endif #ifndef Tk_SetMinimumRequestSize #define Tk_SetMinimumRequestSize \ (tkStubsPtr->tk_SetMinimumRequestSize) /* 244 */ #endif #ifndef Tk_SetCaretPos #define Tk_SetCaretPos \ (tkStubsPtr->tk_SetCaretPos) /* 245 */ #endif #endif /* defined(USE_TK_STUBS) && !defined(USE_TK_STUB_PROCS) */ /* !END!: Do not edit above this line. */ #undef TCL_STORAGE_CLASS #define TCL_STORAGE_CLASS DLLIMPORT #endif /* _TKDECLS */ |
Changes to generic/tkEntry.c.
︙ | ︙ | |||
8 9 10 11 12 13 14 | * Copyright (c) 1990-1994 The Regents of the University of California. * Copyright (c) 1994-1997 Sun Microsystems, Inc. * Copyright (c) 2000 Ajuba Solutions. * * See the file "license.terms" for information on usage and redistribution * of this file, and for a DISCLAIMER OF ALL WARRANTIES. * | | | 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | * Copyright (c) 1990-1994 The Regents of the University of California. * Copyright (c) 1994-1997 Sun Microsystems, Inc. * Copyright (c) 2000 Ajuba Solutions. * * See the file "license.terms" for information on usage and redistribution * of this file, and for a DISCLAIMER OF ALL WARRANTIES. * * RCS: @(#) $Id: tkEntry.c,v 1.23.2.2 2002/06/10 05:38:23 wolfsuit Exp $ */ #include "tkInt.h" #include "default.h" enum EntryType { TK_ENTRY, TK_SPINBOX |
︙ | ︙ | |||
690 691 692 693 694 695 696 | static void EventuallyRedraw _ANSI_ARGS_((Entry *entryPtr)); static void EntryScanTo _ANSI_ARGS_((Entry *entryPtr, int y)); static void EntrySetValue _ANSI_ARGS_((Entry *entryPtr, CONST char *value)); static void EntrySelectTo _ANSI_ARGS_(( Entry *entryPtr, int index)); static char * EntryTextVarProc _ANSI_ARGS_((ClientData clientData, | | | 690 691 692 693 694 695 696 697 698 699 700 701 702 703 704 | static void EventuallyRedraw _ANSI_ARGS_((Entry *entryPtr)); static void EntryScanTo _ANSI_ARGS_((Entry *entryPtr, int y)); static void EntrySetValue _ANSI_ARGS_((Entry *entryPtr, CONST char *value)); static void EntrySelectTo _ANSI_ARGS_(( Entry *entryPtr, int index)); static char * EntryTextVarProc _ANSI_ARGS_((ClientData clientData, Tcl_Interp *interp, char *name1, CONST char *name2, int flags)); static void EntryUpdateScrollbar _ANSI_ARGS_((Entry *entryPtr)); static int EntryValidate _ANSI_ARGS_((Entry *entryPtr, char *cmd)); static int EntryValidateChange _ANSI_ARGS_((Entry *entryPtr, char *change, CONST char *new, int index, int type)); |
︙ | ︙ | |||
1890 1891 1892 1893 1894 1895 1896 | * even the selection background. As a special hack to keep the * cursor visible when the insertion cursor color is the same as * the color for selected text (e.g., on mono displays), write * background in the cursor area (instead of nothing) when the * cursor isn't on. Otherwise the selection would hide the cursor. */ | < < | > > > | | | | | | | > | | | | | > | 1890 1891 1892 1893 1894 1895 1896 1897 1898 1899 1900 1901 1902 1903 1904 1905 1906 1907 1908 1909 1910 1911 1912 1913 1914 1915 1916 1917 1918 1919 1920 1921 1922 1923 | * even the selection background. As a special hack to keep the * cursor visible when the insertion cursor color is the same as * the color for selected text (e.g., on mono displays), write * background in the cursor area (instead of nothing) when the * cursor isn't on. Otherwise the selection would hide the cursor. */ if ((entryPtr->state == STATE_NORMAL) && (entryPtr->flags & GOT_FOCUS)) { Tk_CharBbox(entryPtr->textLayout, entryPtr->insertPos, &cursorX, NULL, NULL, NULL); Tk_SetCaretPos(entryPtr->tkwin, cursorX, baseY - fm.ascent, fm.ascent + fm.descent); if (entryPtr->insertPos >= entryPtr->leftIndex) { cursorX += entryPtr->layoutX; cursorX -= (entryPtr->insertWidth)/2; if (cursorX < xBound) { if (entryPtr->flags & CURSOR_ON) { Tk_Fill3DRectangle(tkwin, pixmap, entryPtr->insertBorder, cursorX, baseY - fm.ascent, entryPtr->insertWidth, fm.ascent + fm.descent, entryPtr->insertBorderWidth, TK_RELIEF_RAISED); } else if (entryPtr->insertBorder == entryPtr->selBorder) { Tk_Fill3DRectangle(tkwin, pixmap, border, cursorX, baseY - fm.ascent, entryPtr->insertWidth, fm.ascent + fm.descent, 0, TK_RELIEF_FLAT); } } } } /* * Draw the text in two pieces: first the unselected portion, then the * selected portion on top of it. |
︙ | ︙ | |||
3273 3274 3275 3276 3277 3278 3279 | /* ARGSUSED */ static char * EntryTextVarProc(clientData, interp, name1, name2, flags) ClientData clientData; /* Information about button. */ Tcl_Interp *interp; /* Interpreter containing variable. */ char *name1; /* Not used. */ | | | 3276 3277 3278 3279 3280 3281 3282 3283 3284 3285 3286 3287 3288 3289 3290 | /* ARGSUSED */ static char * EntryTextVarProc(clientData, interp, name1, name2, flags) ClientData clientData; /* Information about button. */ Tcl_Interp *interp; /* Interpreter containing variable. */ char *name1; /* Not used. */ CONST char *name2; /* Not used. */ int flags; /* Information about what happened. */ { Entry *entryPtr = (Entry *) clientData; CONST char *value; /* * If the variable is unset, then immediately recreate it unless |
︙ | ︙ |
Changes to generic/tkEvent.c.
1 2 3 4 5 6 7 8 9 10 11 12 13 | /* * tkEvent.c -- * * This file provides basic low-level facilities for managing * X events in Tk. * * Copyright (c) 1990-1994 The Regents of the University of California. * Copyright (c) 1994-1995 Sun Microsystems, Inc. * Copyright (c) 1998-2000 Ajuba Solutions. * * See the file "license.terms" for information on usage and redistribution * of this file, and for a DISCLAIMER OF ALL WARRANTIES. * | | | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | /* * tkEvent.c -- * * This file provides basic low-level facilities for managing * X events in Tk. * * Copyright (c) 1990-1994 The Regents of the University of California. * Copyright (c) 1994-1995 Sun Microsystems, Inc. * Copyright (c) 1998-2000 Ajuba Solutions. * * See the file "license.terms" for information on usage and redistribution * of this file, and for a DISCLAIMER OF ALL WARRANTIES. * * RCS: @(#) $Id: tkEvent.c,v 1.8.6.1 2002/06/10 05:38:23 wolfsuit Exp $ */ #include "tkPort.h" #include "tkInt.h" #include <signal.h> /* |
︙ | ︙ | |||
745 746 747 748 749 750 751 | } #ifdef TK_USE_INPUT_METHODS /* * Pass the event to the input method(s), if there are any, and * discard the event if the input method(s) insist. Create the * input context for the window if it hasn't already been done | | > > | | > | > > > > > > > > > > > > > > > > > > > > > > | > > > > > > > | | | | > > < | 745 746 747 748 749 750 751 752 753 754 755 756 757 758 759 760 761 762 763 764 765 766 767 768 769 770 771 772 773 774 775 776 777 778 779 780 781 782 783 784 785 786 787 788 789 790 791 792 793 794 795 796 797 798 799 800 801 802 803 | } #ifdef TK_USE_INPUT_METHODS /* * Pass the event to the input method(s), if there are any, and * discard the event if the input method(s) insist. Create the * input context for the window if it hasn't already been done * (XFilterEvent needs this context). XIM is only ever enabled on * Unix, but this hasn't been factored out of the generic code yet. */ dispPtr = winPtr->dispPtr; if ((dispPtr->useInputMethods)) { if (!(winPtr->flags & (TK_CHECKED_IC|TK_ALREADY_DEAD))) { winPtr->flags |= TK_CHECKED_IC; if (dispPtr->inputMethod != NULL) { #if TK_XIM_SPOT XVaNestedList preedit_attr; XPoint spot = {0, 0}; if (dispPtr->inputXfs == NULL) { /* * We only need to create one XFontSet */ char **missing_list; int missing_count; char *def_string; dispPtr->inputXfs = XCreateFontSet(dispPtr->display, "-*-*-*-R-Normal--14-130-75-75-*-*", &missing_list, &missing_count, &def_string); if (missing_count > 0) { XFreeStringList(missing_list); } } preedit_attr = XVaCreateNestedList(0, XNSpotLocation, &spot, XNFontSet, dispPtr->inputXfs, NULL); winPtr->inputContext = XCreateIC(dispPtr->inputMethod, XNInputStyle, XIMPreeditPosition | XIMStatusNothing, XNClientWindow, winPtr->window, XNFocusWindow, winPtr->window, XNPreeditAttributes, preedit_attr, NULL); XFree(preedit_attr); #else winPtr->inputContext = XCreateIC(dispPtr->inputMethod, XNInputStyle, XIMPreeditNothing | XIMStatusNothing, XNClientWindow, winPtr->window, XNFocusWindow, winPtr->window, NULL); #endif } } if (XFilterEvent(eventPtr, None)) { goto done; } } #endif /* TK_USE_INPUT_METHODS */ |
︙ | ︙ |
Changes to generic/tkFocus.c.
1 2 3 4 5 6 7 8 9 10 11 12 | /* * tkFocus.c -- * * This file contains procedures that manage the input * focus for Tk. * * Copyright (c) 1990-1994 The Regents of the University of California. * Copyright (c) 1994-1997 Sun Microsystems, Inc. * * See the file "license.terms" for information on usage and redistribution * of this file, and for a DISCLAIMER OF ALL WARRANTIES. * | | | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | /* * tkFocus.c -- * * This file contains procedures that manage the input * focus for Tk. * * Copyright (c) 1990-1994 The Regents of the University of California. * Copyright (c) 1994-1997 Sun Microsystems, Inc. * * See the file "license.terms" for information on usage and redistribution * of this file, and for a DISCLAIMER OF ALL WARRANTIES. * * RCS: @(#) $Id: tkFocus.c,v 1.5.16.2 2002/06/10 05:38:23 wolfsuit Exp $ */ #include "tkInt.h" #include "tkPort.h" /* |
︙ | ︙ | |||
1008 1009 1010 1011 1012 1013 1014 | displayFocusPtr->focusOnMapPtr = NULL; displayFocusPtr->forceFocus = 0; displayFocusPtr->focusSerial = 0; displayFocusPtr->nextPtr = mainPtr->displayFocusPtr; mainPtr->displayFocusPtr = displayFocusPtr; return displayFocusPtr; } | > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1008 1009 1010 1011 1012 1013 1014 1015 1016 1017 1018 1019 1020 1021 1022 1023 1024 1025 1026 1027 1028 1029 1030 1031 1032 1033 1034 1035 1036 1037 1038 1039 1040 1041 1042 1043 1044 1045 1046 1047 1048 1049 1050 | displayFocusPtr->focusOnMapPtr = NULL; displayFocusPtr->forceFocus = 0; displayFocusPtr->focusSerial = 0; displayFocusPtr->nextPtr = mainPtr->displayFocusPtr; mainPtr->displayFocusPtr = displayFocusPtr; return displayFocusPtr; } /* *---------------------------------------------------------------------- * * TkFocusFree -- * * Free resources associated with maintaining the focus. * * Results: * None. * * Side effects: * This mainPtr should no long access focus information. * *---------------------------------------------------------------------- */ void TkFocusFree(mainPtr) TkMainInfo *mainPtr; /* Record that identifies a particular * application. */ { DisplayFocusInfo *displayFocusPtr; ToplevelFocusInfo *tlFocusPtr; while (mainPtr->displayFocusPtr != NULL) { displayFocusPtr = mainPtr->displayFocusPtr; mainPtr->displayFocusPtr = mainPtr->displayFocusPtr->nextPtr; ckfree((char *) displayFocusPtr); } while (mainPtr->tlFocusPtr != NULL) { tlFocusPtr = mainPtr->tlFocusPtr; mainPtr->tlFocusPtr = mainPtr->tlFocusPtr->nextPtr; ckfree((char *) tlFocusPtr); } } |
Changes to generic/tkFrame.c.
︙ | ︙ | |||
8 9 10 11 12 13 14 | * * Copyright (c) 1990-1994 The Regents of the University of California. * Copyright (c) 1994-1997 Sun Microsystems, Inc. * * See the file "license.terms" for information on usage and redistribution * of this file, and for a DISCLAIMER OF ALL WARRANTIES. * | | | 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | * * Copyright (c) 1990-1994 The Regents of the University of California. * Copyright (c) 1994-1997 Sun Microsystems, Inc. * * See the file "license.terms" for information on usage and redistribution * of this file, and for a DISCLAIMER OF ALL WARRANTIES. * * RCS: @(#) $Id: tkFrame.c,v 1.10.2.2 2002/06/10 05:38:23 wolfsuit Exp $ */ #include "default.h" #include "tkPort.h" #include "tkInt.h" /* |
︙ | ︙ | |||
916 917 918 919 920 921 922 | register Frame *framePtr; /* Information about widget; may or may * not already have values for some fields. */ int objc; /* Number of valid entries in objv. */ Tcl_Obj *CONST objv[]; /* Arguments. */ { Tk_SavedOptions savedOptions; char *oldMenuName; | | | 916 917 918 919 920 921 922 923 924 925 926 927 928 929 930 | register Frame *framePtr; /* Information about widget; may or may * not already have values for some fields. */ int objc; /* Number of valid entries in objv. */ Tcl_Obj *CONST objv[]; /* Arguments. */ { Tk_SavedOptions savedOptions; char *oldMenuName; Tk_Window oldWindow = NULL; Labelframe *labelframePtr = (Labelframe *) framePtr; /* * Need the old menubar name for the menu code to delete it. */ if (framePtr->menuName == NULL) { |
︙ | ︙ |
Changes to generic/tkGC.c.
1 2 3 4 5 6 7 8 9 10 11 12 | /* * tkGC.c -- * * This file maintains a database of read-only graphics contexts * for the Tk toolkit, in order to allow GC's to be shared. * * Copyright (c) 1990-1994 The Regents of the University of California. * Copyright (c) 1994 Sun Microsystems, Inc. * * See the file "license.terms" for information on usage and redistribution * of this file, and for a DISCLAIMER OF ALL WARRANTIES. * | | | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | /* * tkGC.c -- * * This file maintains a database of read-only graphics contexts * for the Tk toolkit, in order to allow GC's to be shared. * * Copyright (c) 1990-1994 The Regents of the University of California. * Copyright (c) 1994 Sun Microsystems, Inc. * * See the file "license.terms" for information on usage and redistribution * of this file, and for a DISCLAIMER OF ALL WARRANTIES. * * RCS: @(#) $Id: tkGC.c,v 1.3.18.1 2002/06/10 05:38:23 wolfsuit Exp $ */ #include "tkPort.h" #include "tkInt.h" /* * One of the following data structures exists for each GC that is |
︙ | ︙ | |||
80 81 82 83 84 85 86 | ValueKey valueKey; Tcl_HashEntry *valueHashPtr, *idHashPtr; register TkGC *gcPtr; int new; Drawable d, freeDrawable; TkDisplay *dispPtr = ((TkWindow *) tkwin)->dispPtr; | | | 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 | ValueKey valueKey; Tcl_HashEntry *valueHashPtr, *idHashPtr; register TkGC *gcPtr; int new; Drawable d, freeDrawable; TkDisplay *dispPtr = ((TkWindow *) tkwin)->dispPtr; if (dispPtr->gcInit <= 0) { GCInit(dispPtr); } /* * Must zero valueKey at start to clear out pad bytes that may be * part of structure on some systems. */ |
︙ | ︙ | |||
296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 | Tcl_HashEntry *idHashPtr; register TkGC *gcPtr; TkDisplay *dispPtr = TkGetDisplay(display); if (!dispPtr->gcInit) { panic("Tk_FreeGC called before Tk_GetGC"); } idHashPtr = Tcl_FindHashEntry(&dispPtr->gcIdTable, (char *) gc); if (idHashPtr == NULL) { panic("Tk_FreeGC received unknown gc argument"); } gcPtr = (TkGC *) Tcl_GetHashValue(idHashPtr); gcPtr->refCount--; if (gcPtr->refCount == 0) { Tk_FreeXId(gcPtr->display, (XID) XGContextFromGC(gcPtr->gc)); XFreeGC(gcPtr->display, gcPtr->gc); Tcl_DeleteHashEntry(gcPtr->valueHashPtr); Tcl_DeleteHashEntry(idHashPtr); ckfree((char *) gcPtr); } } /* *---------------------------------------------------------------------- * * GCInit -- * * Initialize the structures used for GC management. | > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 | Tcl_HashEntry *idHashPtr; register TkGC *gcPtr; TkDisplay *dispPtr = TkGetDisplay(display); if (!dispPtr->gcInit) { panic("Tk_FreeGC called before Tk_GetGC"); } if (dispPtr->gcInit < 0) { /* * The GCCleanup has been called, and remaining GCs have been * freed. This may still get called by other things shutting * down, but the GCs should no longer be in use. */ return; } idHashPtr = Tcl_FindHashEntry(&dispPtr->gcIdTable, (char *) gc); if (idHashPtr == NULL) { panic("Tk_FreeGC received unknown gc argument"); } gcPtr = (TkGC *) Tcl_GetHashValue(idHashPtr); gcPtr->refCount--; if (gcPtr->refCount == 0) { Tk_FreeXId(gcPtr->display, (XID) XGContextFromGC(gcPtr->gc)); XFreeGC(gcPtr->display, gcPtr->gc); Tcl_DeleteHashEntry(gcPtr->valueHashPtr); Tcl_DeleteHashEntry(idHashPtr); ckfree((char *) gcPtr); } } /* *---------------------------------------------------------------------- * * TkGCCleanup -- * * Frees the structures used for GC management. * We need to have it called near the end, when other cleanup that * calls Tk_FreeGC is all done. * * Results: * None. * * Side effects: * GC resources are freed. * *---------------------------------------------------------------------- */ void TkGCCleanup(dispPtr) TkDisplay *dispPtr; /* display to clean up resources in */ { Tcl_HashEntry *entryPtr; Tcl_HashSearch search; TkGC *gcPtr; for (entryPtr = Tcl_FirstHashEntry(&dispPtr->gcIdTable, &search); entryPtr != NULL; entryPtr = Tcl_NextHashEntry(&search)) { gcPtr = (TkGC *) Tcl_GetHashValue(entryPtr); /* * This call is not needed, as it is only used on Unix to restore * the Id to the stack pool, and we don't want to use them anymore. * Tk_FreeXId(gcPtr->display, (XID) XGContextFromGC(gcPtr->gc)); */ XFreeGC(gcPtr->display, gcPtr->gc); Tcl_DeleteHashEntry(gcPtr->valueHashPtr); Tcl_DeleteHashEntry(entryPtr); ckfree((char *) gcPtr); } Tcl_DeleteHashTable(&dispPtr->gcValueTable); Tcl_DeleteHashTable(&dispPtr->gcIdTable); dispPtr->gcInit = -1; } /* *---------------------------------------------------------------------- * * GCInit -- * * Initialize the structures used for GC management. |
︙ | ︙ | |||
332 333 334 335 336 337 338 339 340 341 342 | *---------------------------------------------------------------------- */ static void GCInit(dispPtr) TkDisplay *dispPtr; { dispPtr->gcInit = 1; Tcl_InitHashTable(&dispPtr->gcValueTable, sizeof(ValueKey)/sizeof(int)); Tcl_InitHashTable(&dispPtr->gcIdTable, TCL_ONE_WORD_KEYS); } | > > > | 385 386 387 388 389 390 391 392 393 394 395 396 397 398 | *---------------------------------------------------------------------- */ static void GCInit(dispPtr) TkDisplay *dispPtr; { if (dispPtr->gcInit < 0) { panic("called GCInit after GCCleanup"); } dispPtr->gcInit = 1; Tcl_InitHashTable(&dispPtr->gcValueTable, sizeof(ValueKey)/sizeof(int)); Tcl_InitHashTable(&dispPtr->gcIdTable, TCL_ONE_WORD_KEYS); } |
Changes to generic/tkGet.c.
︙ | ︙ | |||
9 10 11 12 13 14 15 | * * Copyright (c) 1991-1994 The Regents of the University of California. * Copyright (c) 1994-1997 Sun Microsystems, Inc. * * See the file "license.terms" for information on usage and redistribution * of this file, and for a DISCLAIMER OF ALL WARRANTIES. * | | > > | 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 | * * Copyright (c) 1991-1994 The Regents of the University of California. * Copyright (c) 1994-1997 Sun Microsystems, Inc. * * See the file "license.terms" for information on usage and redistribution * of this file, and for a DISCLAIMER OF ALL WARRANTIES. * * RCS: @(#) $Id: tkGet.c,v 1.6.8.2 2002/06/10 05:38:23 wolfsuit Exp $ */ #include "tkInt.h" #include "tkPort.h" /* * One of these structures is created per thread to store * thread-specific data. In this case, it is used to house the * Tk_Uid structs used by each thread. The "dataKey" below is * used to locate the ThreadSpecificData for the current thread. */ typedef struct ThreadSpecificData { int initialized; Tcl_HashTable uidTable; } ThreadSpecificData; static Tcl_ThreadDataKey dataKey; static void FreeUidThreadExitProc _ANSI_ARGS_((ClientData clientData)); /* * The following tables defines the string values for reliefs, which are * used by Tk_GetAnchorFromObj and Tk_GetJustifyFromObj. */ static CONST char *anchorStrings[] = { |
︙ | ︙ | |||
480 481 482 483 484 485 486 487 488 489 490 491 492 493 | } return "unknown justification style"; } /* *---------------------------------------------------------------------- * * Tk_GetUid -- * * Given a string, this procedure returns a unique identifier * for the string. * * Results: * This procedure returns a Tk_Uid corresponding to the "string" | > > > > > > > > > > > > > > > > > > > > > > > > > > | 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 | } return "unknown justification style"; } /* *---------------------------------------------------------------------- * * FreeUidThreadExitProc -- * * Cleans up memory used for Tk_Uids in the thread. * * Results: * None. * * Side effects: * All information in the identifier table is deleted. * *---------------------------------------------------------------------- */ static void FreeUidThreadExitProc(clientData) ClientData clientData; /* Not used. */ { ThreadSpecificData *tsdPtr = (ThreadSpecificData *) Tcl_GetThreadData(&dataKey, sizeof(ThreadSpecificData)); Tcl_DeleteHashTable(&tsdPtr->uidTable); tsdPtr->initialized = 0; } /* *---------------------------------------------------------------------- * * Tk_GetUid -- * * Given a string, this procedure returns a unique identifier * for the string. * * Results: * This procedure returns a Tk_Uid corresponding to the "string" |
︙ | ︙ | |||
511 512 513 514 515 516 517 518 519 520 521 522 523 524 | int dummy; ThreadSpecificData *tsdPtr = (ThreadSpecificData *) Tcl_GetThreadData(&dataKey, sizeof(ThreadSpecificData)); Tcl_HashTable *tablePtr = &tsdPtr->uidTable; if (!tsdPtr->initialized) { Tcl_InitHashTable(tablePtr, TCL_STRING_KEYS); tsdPtr->initialized = 1; } return (Tk_Uid) Tcl_GetHashKey(tablePtr, Tcl_CreateHashEntry(tablePtr, string, &dummy)); } /* | > | 539 540 541 542 543 544 545 546 547 548 549 550 551 552 553 | int dummy; ThreadSpecificData *tsdPtr = (ThreadSpecificData *) Tcl_GetThreadData(&dataKey, sizeof(ThreadSpecificData)); Tcl_HashTable *tablePtr = &tsdPtr->uidTable; if (!tsdPtr->initialized) { Tcl_InitHashTable(tablePtr, TCL_STRING_KEYS); Tcl_CreateThreadExitHandler(FreeUidThreadExitProc, NULL); tsdPtr->initialized = 1; } return (Tk_Uid) Tcl_GetHashKey(tablePtr, Tcl_CreateHashEntry(tablePtr, string, &dummy)); } /* |
︙ | ︙ |
Changes to generic/tkImgGIF.c.
︙ | ︙ | |||
15 16 17 18 19 20 21 | * * See the file "license.terms" for information on usage and redistribution * of this file, and for a DISCLAIMER OF ALL WARRANTIES. * * This file also contains code from the giftoppm program, which is * copyrighted as follows: * | | | | | | | | | | | | 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 | * * See the file "license.terms" for information on usage and redistribution * of this file, and for a DISCLAIMER OF ALL WARRANTIES. * * This file also contains code from the giftoppm program, which is * copyrighted as follows: * * +--------------------------------------------------------------------+ * | Copyright 1990, David Koblas. | * | Permission to use, copy, modify, and distribute this software | * | and its documentation for any purpose and without fee is hereby | * | granted, provided that the above copyright notice appear in all | * | copies and that both that copyright notice and this permission | * | notice appear in supporting documentation. This software is | * | provided "as is" without express or implied warranty. | * +-------------------------------------------------------------------+ * * RCS: @(#) $Id: tkImgGIF.c,v 1.18.2.2 2002/06/10 05:38:23 wolfsuit Exp $ */ /* * GIF's are represented as data in base64 format. * base64 strings consist of 4 6-bit characters -> 3 8 bit bytes. * A-Z, a-z, 0-9, + and / represent the 64 values (in order). * '=' is a trailing padding char when the un-encoded data is not a * multiple of 3 bytes. We'll ignore white space when encountered. * Any other invalid character is treated as an EOF */ #define GIF_SPECIAL (256) #define GIF_PAD (GIF_SPECIAL+1) #define GIF_SPACE (GIF_SPECIAL+2) #define GIF_BAD (GIF_SPECIAL+3) #define GIF_DONE (GIF_SPECIAL+4) /* * structure to "mimic" FILE for Mread, so we can look like fread. |
︙ | ︙ | |||
68 69 70 71 72 73 74 | * a few key bits are stashed in ASCII. If we try to compare those pieces * to the char they represent, it will fail on any non-ASCII (eg, EBCDIC) * system. To accomodate these systems, we test against the numeric value * of the ASCII characters instead of the characters themselves. This is * encoding independant. */ | | | > | | > | | | | | | | | | | | | | | 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 | * a few key bits are stashed in ASCII. If we try to compare those pieces * to the char they represent, it will fail on any non-ASCII (eg, EBCDIC) * system. To accomodate these systems, we test against the numeric value * of the ASCII characters instead of the characters themselves. This is * encoding independant. */ static CONST char GIF87a[] = { /* ASCII GIF87a */ 0x47, 0x49, 0x46, 0x38, 0x37, 0x61, 0x00 }; static CONST char GIF89a[] = { /* ASCII GIF89a */ 0x47, 0x49, 0x46, 0x38, 0x39, 0x61, 0x00 }; # define GIF_TERMINATOR 0x3b /* ASCII ; */ # define GIF_EXTENSION 0x21 /* ASCII ! */ # define GIF_START 0x2c /* ASCII , */ /* * HACK ALERT!! HACK ALERT!! HACK ALERT!! * This code is hard-wired for reading from files. In order to read * from a data stream, we'll trick fread so we can reuse the same code. * 0==from file; 1==from base64 encoded data; 2==from binary data */ typedef struct ThreadSpecificData { int fromData; } ThreadSpecificData; static Tcl_ThreadDataKey dataKey; /* * The format record for the GIF file format: */ static int FileMatchGIF _ANSI_ARGS_((Tcl_Channel chan, CONST char *fileName, Tcl_Obj *format, int *widthPtr, int *heightPtr, Tcl_Interp *interp)); static int FileReadGIF _ANSI_ARGS_((Tcl_Interp *interp, Tcl_Channel chan, CONST char *fileName, Tcl_Obj *format, Tk_PhotoHandle imageHandle, int destX, int destY, int width, int height, int srcX, int srcY)); static int StringMatchGIF _ANSI_ARGS_(( Tcl_Obj *dataObj, Tcl_Obj *format, int *widthPtr, int *heightPtr, Tcl_Interp *interp)); static int StringReadGIF _ANSI_ARGS_((Tcl_Interp *interp, Tcl_Obj *dataObj, Tcl_Obj *format, Tk_PhotoHandle imageHandle, int destX, int destY, int width, int height, int srcX, int srcY)); static int FileWriteGIF _ANSI_ARGS_((Tcl_Interp *interp, CONST char *filename, Tcl_Obj *format, Tk_PhotoImageBlock *blockPtr)); static int CommonWriteGIF _ANSI_ARGS_((Tcl_Interp *interp, Tcl_Channel handle, Tcl_Obj *format, Tk_PhotoImageBlock *blockPtr)); Tk_PhotoImageFormat tkImgFmtGIF = { "gif", /* name */ FileMatchGIF, /* fileMatchProc */ StringMatchGIF, /* stringMatchProc */ FileReadGIF, /* fileReadProc */ StringReadGIF, /* stringReadProc */ FileWriteGIF, /* fileWriteProc */ NULL, /* stringWriteProc */ }; #define INTERLACE 0x40 #define LOCALCOLORMAP 0x80 #define BitSet(byte, bit) (((byte) & (bit)) == (bit)) #define MAXCOLORMAPSIZE 256 #define CM_RED 0 #define CM_GREEN 1 #define CM_BLUE 2 #define CM_ALPHA 3 #define MAX_LWZ_BITS 12 #define LM_to_uint(a,b) (((b)<<8)|(a)) #define ReadOK(file,buffer,len) (Fread(buffer, len, 1, file) != 0) /* * Prototypes for local procedures defined in this file: */ static int DoExtension _ANSI_ARGS_((Tcl_Channel chan, int label, |
︙ | ︙ | |||
284 285 286 287 288 289 290 | } if (Fread(buf, 1, 3, chan) != 3) { return TCL_OK; } bitPixel = 2<<(buf[0]&0x07); | | | 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 | } if (Fread(buf, 1, 3, chan) != 3) { return TCL_OK; } bitPixel = 2<<(buf[0]&0x07); if (BitSet(buf[0], LOCALCOLORMAP)) { /* Global Colormap */ if (!ReadColorMap(chan, bitPixel, colorMap)) { Tcl_AppendResult(interp, "error reading color map", (char *) NULL); return TCL_ERROR; } } |
︙ | ︙ | |||
374 375 376 377 378 379 380 | fileWidth = LM_to_uint(buf[4],buf[5]); fileHeight = LM_to_uint(buf[6],buf[7]); bitPixel = 1<<((buf[8]&0x07)+1); if (index--) { | > | > > | > | | | | | > | | | | > | | | | | > | > | 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 | fileWidth = LM_to_uint(buf[4],buf[5]); fileHeight = LM_to_uint(buf[6],buf[7]); bitPixel = 1<<((buf[8]&0x07)+1); if (index--) { /* * This is not the image we want to read: skip it. */ if (BitSet(buf[8], LOCALCOLORMAP)) { if (!ReadColorMap(chan, bitPixel, colorMap)) { Tcl_AppendResult(interp, "error reading color map", (char *) NULL); goto error; } } /* * If we've not yet allocated a trash buffer, do so now. */ if (trashBuffer == NULL) { nBytes = fileWidth * fileHeight * 3; trashBuffer = (unsigned char *) ckalloc((unsigned int) nBytes); } /* * Slurp! Process the data for this image and stuff it in * a trash buffer. * * Yes, it might be more efficient here to *not* store the * data (we're just going to throw it away later). * However, I elected to implement it this way for good * reasons. First, I wanted to avoid duplicating the * (fairly complex) LWZ decoder in ReadImage. Fine, you * say, why didn't you just modify it to allow the use of * a NULL specifier for the output buffer? I tried that, * but it negatively impacted the performance of what I * think will be the common case: reading the first image * in the file. Rather than marginally improve the speed * of the less frequent case, I chose to maintain high * performance for the common case. */ if (ReadImage(interp, (char *) trashBuffer, chan, fileWidth, fileHeight, colorMap, 0, 0, 0, 0, 0, -1) != TCL_OK) { goto error; } continue; } /* * If a trash buffer has been allocated, free it now. */ if (trashBuffer != NULL) { ckfree((char *)trashBuffer); trashBuffer = NULL; } if (BitSet(buf[8], LOCALCOLORMAP)) { if (!ReadColorMap(chan, bitPixel, colorMap)) { Tcl_AppendResult(interp, "error reading color map", |
︙ | ︙ | |||
516 517 518 519 520 521 522 | { unsigned char *data, header[10]; int got, length; MFile handle; data = Tcl_GetByteArrayFromObj(dataObj, &length); | > | > | > | > | > | > | | | | | | | | | 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557 558 559 560 561 562 563 564 | { unsigned char *data, header[10]; int got, length; MFile handle; data = Tcl_GetByteArrayFromObj(dataObj, &length); /* * Header is a minimum of 10 bytes. */ if (length < 10) { return 0; } /* * Check whether the data is Base64 encoded. */ if ((strncmp(GIF87a, (char *) data, 6) != 0) && (strncmp(GIF89a, (char *) data, 6) != 0)) { /* * Try interpreting the data as Base64 encoded */ mInit((unsigned char *) data, &handle); got = Mread(header, 10, 1, &handle); if (got != 10 || ((strncmp(GIF87a, (char *) header, 6) != 0) && (strncmp(GIF89a, (char *) header, 6) != 0))) { return 0; } } else { memcpy((VOID *) header, (VOID *) data, 10); } *widthPtr = LM_to_uint(header[6],header[7]); *heightPtr = LM_to_uint(header[8],header[9]); return 1; } /* |
︙ | ︙ | |||
570 571 572 573 574 575 576 | StringReadGIF(interp, dataObj, format, imageHandle, destX, destY, width, height, srcX, srcY) Tcl_Interp *interp; /* interpreter for reporting errors in */ Tcl_Obj *dataObj; /* object containing the image */ Tcl_Obj *format; /* format object, or NULL */ Tk_PhotoHandle imageHandle; /* the image to write this data into */ int destX, destY; /* The rectangular region of the */ | | | | < | | 586 587 588 589 590 591 592 593 594 595 596 597 598 599 600 601 602 603 604 605 606 607 608 609 610 611 612 613 614 615 616 617 618 619 620 621 622 623 624 625 626 | StringReadGIF(interp, dataObj, format, imageHandle, destX, destY, width, height, srcX, srcY) Tcl_Interp *interp; /* interpreter for reporting errors in */ Tcl_Obj *dataObj; /* object containing the image */ Tcl_Obj *format; /* format object, or NULL */ Tk_PhotoHandle imageHandle; /* the image to write this data into */ int destX, destY; /* The rectangular region of the */ int width, height; /* image to copy */ int srcX, srcY; { int result; MFile handle; ThreadSpecificData *tsdPtr = (ThreadSpecificData *) Tcl_GetThreadData(&dataKey, sizeof(ThreadSpecificData)); Tcl_Channel dataSrc; char *data; /* * Check whether the data is Base64 encoded */ data = (char *) Tcl_GetByteArrayFromObj(dataObj, NULL); if ((strncmp(GIF87a, data, 6) != 0) && (strncmp(GIF89a, data, 6) != 0)) { mInit((unsigned char *)data, &handle); tsdPtr->fromData = 1; dataSrc = (Tcl_Channel) &handle; } else { tsdPtr->fromData = 2; mInit((unsigned char *)data, &handle); dataSrc = (Tcl_Channel) &handle; } result = FileReadGIF(interp, dataSrc, "inline data", format, imageHandle, destX, destY, width, height, srcX, srcY); tsdPtr->fromData = 0; return result; } /* *---------------------------------------------------------------------- * * ReadGIFHeader -- * |
︙ | ︙ | |||
652 653 654 655 656 657 658 | * The code below is copied from the giftoppm program and modified * just slightly. *----------------------------------------------------------------- */ static int ReadColorMap(chan, number, buffer) | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | 667 668 669 670 671 672 673 674 675 676 677 678 679 680 681 682 683 684 685 686 687 688 689 690 691 692 693 694 695 696 697 698 699 700 701 702 703 704 705 706 707 708 709 710 711 712 713 714 715 716 717 718 719 720 721 722 723 724 725 726 727 728 729 730 731 732 733 734 735 736 737 738 739 740 741 742 743 744 745 746 747 748 749 750 751 752 753 | * The code below is copied from the giftoppm program and modified * just slightly. *----------------------------------------------------------------- */ static int ReadColorMap(chan, number, buffer) Tcl_Channel chan; int number; unsigned char buffer[MAXCOLORMAPSIZE][4]; { int i; unsigned char rgb[3]; for (i = 0; i < number; ++i) { if (! ReadOK(chan, rgb, sizeof(rgb))) { return 0; } if (buffer) { buffer[i][CM_RED] = rgb[0] ; buffer[i][CM_GREEN] = rgb[1] ; buffer[i][CM_BLUE] = rgb[2] ; buffer[i][CM_ALPHA] = 255 ; } } return 1; } static int DoExtension(chan, label, transparent) Tcl_Channel chan; int label; int *transparent; { static unsigned char buf[256]; int count; switch (label) { case 0x01: /* Plain Text Extension */ break; case 0xff: /* Application Extension */ break; case 0xfe: /* Comment Extension */ do { count = GetDataBlock(chan, (unsigned char*) buf); } while (count > 0); return count; case 0xf9: /* Graphic Control Extension */ count = GetDataBlock(chan, (unsigned char*) buf); if (count < 0) { return 1; } if ((buf[0] & 0x1) != 0) { *transparent = buf[3]; } do { count = GetDataBlock(chan, (unsigned char*) buf); } while (count > 0); return count; } do { count = GetDataBlock(chan, (unsigned char*) buf); } while (count > 0); return count; } static int ZeroDataBlock = 0; static int GetDataBlock(chan, buf) Tcl_Channel chan; unsigned char *buf; { unsigned char count; if (! ReadOK(chan, &count,1)) { return -1; } |
︙ | ︙ | |||
749 750 751 752 753 754 755 | /* *---------------------------------------------------------------------- * * ReadImage -- * * Process a GIF image from a given source, with a given height, | | | | | | | | | | | | | | | | | | | | | | > | > | | | | | | | > | > > | > > | > | | | | | 764 765 766 767 768 769 770 771 772 773 774 775 776 777 778 779 780 781 782 783 784 785 786 787 788 789 790 791 792 793 794 795 796 797 798 799 800 801 802 803 804 805 806 807 808 809 810 811 812 813 814 815 816 817 818 819 820 821 822 823 824 825 826 827 828 829 830 831 832 833 834 835 836 837 838 839 840 841 842 843 844 845 846 847 848 849 850 851 852 853 854 855 856 857 858 859 860 861 862 863 864 865 866 867 868 869 870 871 872 873 874 875 876 877 878 879 880 881 882 883 884 885 886 887 888 889 890 891 892 893 894 895 896 897 898 899 900 901 902 903 904 905 906 907 908 909 910 911 912 913 | /* *---------------------------------------------------------------------- * * ReadImage -- * * Process a GIF image from a given source, with a given height, * width, transparency, etc. * * This code is based on the code found in the ImageMagick GIF decoder, * which is (c) 2000 ImageMagick Studio. * * Some thoughts on our implementation: * It sure would be nice if ReadImage didn't take 11 parameters! I think * that if we were smarter, we could avoid doing that. * * Possible further optimizations: we could pull the GetCode function * directly into ReadImage, which would improve our speed. * * Results: * Processes a GIF image and loads the pixel data into a memory array. * * Side effects: * None. * *---------------------------------------------------------------------- */ static int ReadImage(interp, imagePtr, chan, len, rows, cmap, width, height, srcX, srcY, interlace, transparent) Tcl_Interp *interp; char *imagePtr; Tcl_Channel chan; int len, rows; unsigned char cmap[MAXCOLORMAPSIZE][4]; int width, height; int srcX, srcY; int interlace; int transparent; { unsigned char initialCodeSize; int v; int xpos = 0, ypos = 0, pass = 0, i; register char *pixelPtr; CONST static int interlaceStep[] = { 8, 8, 4, 2 }; CONST static int interlaceStart[] = { 0, 4, 2, 1 }; unsigned short prefix[(1 << MAX_LWZ_BITS)]; unsigned char append[(1 << MAX_LWZ_BITS)]; unsigned char stack[(1 << MAX_LWZ_BITS)*2]; register unsigned char *top; int codeSize, clearCode, inCode, endCode, oldCode, maxCode; int code, firstCode; /* * Initialize the decoder */ if (! ReadOK(chan, &initialCodeSize, 1)) { Tcl_AppendResult(interp, "error reading GIF image: ", Tcl_PosixError(interp), (char *) NULL); return TCL_ERROR; } if (transparent != -1) { cmap[transparent][CM_RED] = 0; cmap[transparent][CM_GREEN] = 0; cmap[transparent][CM_BLUE] = 0; cmap[transparent][CM_ALPHA] = 0; } pixelPtr = imagePtr; /* * Initialize the decoder. * * Set values for "special" numbers: * clear code reset the decoder * end code stop decoding * code size size of the next code to retrieve * max code next available table position */ clearCode = 1 << (int) initialCodeSize; endCode = clearCode + 1; codeSize = (int) initialCodeSize + 1; maxCode = clearCode + 2; oldCode = -1; firstCode = -1; memset((void *)prefix, 0, (1 << MAX_LWZ_BITS) * sizeof(short)); memset((void *)append, 0, (1 << MAX_LWZ_BITS) * sizeof(char)); for (i = 0; i < clearCode; i++) { append[i] = i; } top = stack; GetCode(chan, 0, 1); /* * Read until we finish the image */ for (i = 0, ypos = 0; i < rows; i++) { for (xpos = 0; xpos < len; ) { if (top == stack) { /* * Bummer -- our stack is empty. Now we have to work! */ code = GetCode(chan, codeSize, 0); if (code < 0) { return TCL_OK; } if (code > maxCode || code == endCode) { /* * If we're doing things right, we should never * receive a code that is greater than our current * maximum code. If we do, bail, because our decoder * does not yet have that code set up. * * If the code is the magic endCode value, quit. */ return TCL_OK; } if (code == clearCode) { /* * Reset the decoder. */ codeSize = initialCodeSize + 1; maxCode = clearCode + 2; oldCode = -1; continue; } if (oldCode == -1) { /* * Last pass reset the decoder, so the first code we * see must be a singleton. Seed the stack with it, * and set up the old/first code pointers for * insertion into the string table. We can't just * roll this into the clearCode test above, because * at that point we have not yet read the next code. */ *top++ = append[code]; oldCode = code; firstCode = code; continue; } inCode = code; |
︙ | ︙ | |||
912 913 914 915 916 917 918 | * If there's no more room in our string table, quit. * Otherwise, add a new string to the table */ if (maxCode >= (1 << MAX_LWZ_BITS)) { return TCL_OK; } | > | > > | > > | > | > > | > | 935 936 937 938 939 940 941 942 943 944 945 946 947 948 949 950 951 952 953 954 955 956 957 958 959 960 961 962 963 964 965 966 967 968 969 970 971 972 973 974 975 976 977 978 979 980 981 982 983 984 985 986 987 988 989 990 991 992 993 994 995 996 997 998 999 | * If there's no more room in our string table, quit. * Otherwise, add a new string to the table */ if (maxCode >= (1 << MAX_LWZ_BITS)) { return TCL_OK; } /* * Push the head of the string onto the stack. */ *top++ = firstCode; /* * Add a new string to the string table */ prefix[maxCode] = oldCode; append[maxCode] = firstCode; maxCode++; /* * maxCode tells us the maximum code value we can accept. * If we see that we need more bits to represent it than * we are requesting from the unpacker, we need to increase * the number we ask for. */ if ((maxCode >= (1 << codeSize)) && (maxCode < (1<<MAX_LWZ_BITS))) { codeSize++; } oldCode = inCode; } /* * Pop the next color index off the stack. */ v = *(--top); if (v < 0) { return TCL_OK; } /* * If pixelPtr is null, we're skipping this image (presumably * there are more in the file and we will be called to read * one of them later) */ *pixelPtr++ = cmap[v][CM_RED]; *pixelPtr++ = cmap[v][CM_GREEN]; *pixelPtr++ = cmap[v][CM_BLUE]; if (transparent >= 0) { *pixelPtr++ = cmap[v][CM_ALPHA]; } xpos++; } /* * If interlacing, the next ypos is not just +1 */ if (interlace) { ypos += interlaceStep[pass]; while (ypos >= height) { pass++; if (pass > 3) { return TCL_OK; } |
︙ | ︙ | |||
977 978 979 980 981 982 983 | /* *---------------------------------------------------------------------- * * GetCode -- * | | | | | | | | | | | | | | | | | | | > | > > | > > | > > | > > | > > | > | 1009 1010 1011 1012 1013 1014 1015 1016 1017 1018 1019 1020 1021 1022 1023 1024 1025 1026 1027 1028 1029 1030 1031 1032 1033 1034 1035 1036 1037 1038 1039 1040 1041 1042 1043 1044 1045 1046 1047 1048 1049 1050 1051 1052 1053 1054 1055 1056 1057 1058 1059 1060 1061 1062 1063 1064 1065 1066 1067 1068 1069 1070 1071 1072 1073 1074 1075 1076 1077 1078 1079 1080 1081 1082 1083 1084 1085 1086 1087 1088 1089 1090 1091 1092 1093 1094 1095 1096 1097 1098 1099 1100 1101 1102 1103 1104 1105 1106 1107 1108 | /* *---------------------------------------------------------------------- * * GetCode -- * * Extract the next compression code from the file. In GIF's, the * compression codes are between 3 and 12 bits long and are then * packed into 8 bit bytes, left to right, for example: * bbbaaaaa * dcccccbb * eeeedddd * ... * We use a byte buffer read from the file and a sliding window * to unpack the bytes. Thanks to ImageMagick for the sliding window * idea. * args: chan the channel to read from * code_size size of the code to extract * flag boolean indicating whether the extractor * should be reset or not * * Results: * code the next compression code * * Side effects: * May consume more input from chan. * *---------------------------------------------------------------------- */ static int GetCode(chan, code_size, flag) Tcl_Channel chan; int code_size; int flag; { static unsigned char buf[280]; static int bytes = 0, done; static unsigned char *c; static unsigned int window; static int bitsInWindow = 0; int ret; if (flag) { /* * Initialize the decoder. */ bitsInWindow = 0; bytes = 0; window = 0; done = 0; c = NULL; return 0; } while (bitsInWindow < code_size) { /* * Not enough bits in our window to cover the request. */ if (done) { return -1; } if (bytes == 0) { /* * Not enough bytes in our buffer to add to the window. */ bytes = GetDataBlock(chan, buf); c = buf; if (bytes <= 0) { done = 1; break; } } /* * Tack another byte onto the window, see if that's enough. */ window += (*c) << bitsInWindow; c++; bitsInWindow += 8; bytes--; } /* * The next code will always be the last code_size bits of the window. */ ret = window & ((1 << code_size) - 1); /* * Shift data in the window to put the next code at the end. */ window >>= code_size; bitsInWindow -= code_size; return ret; } /* *---------------------------------------------------------------------- |
︙ | ︙ | |||
1140 1141 1142 1143 1144 1145 1146 | * The base64 handle will change state. * *---------------------------------------------------------------------- */ static int Mgetc(handle) | | | | | | | | | | | | | | | | | | | | | | | 1184 1185 1186 1187 1188 1189 1190 1191 1192 1193 1194 1195 1196 1197 1198 1199 1200 1201 1202 1203 1204 1205 1206 1207 1208 1209 1210 1211 1212 1213 1214 1215 1216 1217 1218 1219 1220 1221 1222 1223 1224 1225 1226 1227 1228 1229 1230 1231 1232 1233 1234 1235 1236 | * The base64 handle will change state. * *---------------------------------------------------------------------- */ static int Mgetc(handle) MFile *handle; /* Handle containing decoder data and state */ { int c; int result = 0; /* Initialization needed only to prevent * gcc compiler warning. */ if (handle->state == GIF_DONE) { return GIF_DONE; } do { c = char64(*handle->data); handle->data++; } while (c == GIF_SPACE); if (c>GIF_SPECIAL) { handle->state = GIF_DONE; return handle->c; } switch (handle->state++) { case 0: handle->c = c<<2; result = Mgetc(handle); break; case 1: result = handle->c | (c>>4); handle->c = (c&0xF)<<4; break; case 2: result = handle->c | (c>>2); handle->c = (c&0x3) << 6; break; case 3: result = handle->c | c; handle->state = 0; break; } return result; } /* *---------------------------------------------------------------------- * * char64 -- * |
︙ | ︙ | |||
1203 1204 1205 1206 1207 1208 1209 | */ static int char64(c) int c; { switch(c) { | | | | | | | | | | | | | | | | | | | | | | | | > | > | > | > | 1247 1248 1249 1250 1251 1252 1253 1254 1255 1256 1257 1258 1259 1260 1261 1262 1263 1264 1265 1266 1267 1268 1269 1270 1271 1272 1273 1274 1275 1276 1277 1278 1279 1280 1281 1282 1283 1284 1285 1286 1287 1288 1289 1290 1291 | */ static int char64(c) int c; { switch(c) { case 'A': return 0; case 'B': return 1; case 'C': return 2; case 'D': return 3; case 'E': return 4; case 'F': return 5; case 'G': return 6; case 'H': return 7; case 'I': return 8; case 'J': return 9; case 'K': return 10; case 'L': return 11; case 'M': return 12; case 'N': return 13; case 'O': return 14; case 'P': return 15; case 'Q': return 16; case 'R': return 17; case 'S': return 18; case 'T': return 19; case 'U': return 20; case 'V': return 21; case 'W': return 22; case 'X': return 23; case 'Y': return 24; case 'Z': return 25; case 'a': return 26; case 'b': return 27; case 'c': return 28; case 'd': return 29; case 'e': return 30; case 'f': return 31; case 'g': return 32; case 'h': return 33; case 'i': return 34; case 'j': return 35; case 'k': return 36; case 'l': return 37; case 'm': return 38; case 'n': return 39; case 'o': return 40; case 'p': return 41; case 'q': return 42; case 'r': return 43; case 's': return 44; case 't': return 45; case 'u': return 46; case 'v': return 47; case 'w': return 48; case 'x': return 49; case 'y': return 50; case 'z': return 51; case '0': return 52; case '1': return 53; case '2': return 54; case '3': return 55; case '4': return 56; case '5': return 57; case '6': return 58; case '7': return 59; case '8': return 60; case '9': return 61; case '+': return 62; case '/': return 63; case ' ': case '\t': case '\n': case '\r': case '\f': return GIF_SPACE; case '=': return GIF_PAD; case '\0': return GIF_DONE; default: return GIF_BAD; } } /* *---------------------------------------------------------------------- * * Fread -- |
︙ | ︙ | |||
1253 1254 1255 1256 1257 1258 1259 | static int Fread(dst, hunk, count, chan) unsigned char *dst; /* where to put the result */ size_t hunk,count; /* how many */ Tcl_Channel chan; { ThreadSpecificData *tsdPtr = (ThreadSpecificData *) | | | | | | | | | | | | | | 1301 1302 1303 1304 1305 1306 1307 1308 1309 1310 1311 1312 1313 1314 1315 1316 1317 1318 1319 1320 1321 1322 1323 1324 1325 1326 1327 1328 1329 1330 1331 1332 1333 1334 1335 1336 1337 1338 1339 1340 1341 | static int Fread(dst, hunk, count, chan) unsigned char *dst; /* where to put the result */ size_t hunk,count; /* how many */ Tcl_Channel chan; { ThreadSpecificData *tsdPtr = (ThreadSpecificData *) Tcl_GetThreadData(&dataKey, sizeof(ThreadSpecificData)); MFile *handle; switch (tsdPtr->fromData) { case 1: return Mread(dst, hunk, count, (MFile *) chan); case 2: handle = (MFile *) chan; memcpy((VOID *)dst, (VOID *) handle->data, (size_t) (hunk * count)); handle->data += hunk * count; return (int)(hunk * count); default: return Tcl_Read(chan, (char *) dst, (int) (hunk * count)); } } /* * ChanWriteGIF - writes a image in GIF format. *------------------------------------------------------------------------- * Author: Lolo * Engeneering Projects Area * Department of Mining * University of Oviedo * e-mail [email protected] * [email protected] * Date: Fri September 20 1996 * * Modified for transparency handling (gif89a) and miGIF compression * by Jan Nijtmans <[email protected]> * *---------------------------------------------------------------------- * FileWriteGIF- * |
︙ | ︙ | |||
1303 1304 1305 1306 1307 1308 1309 | /* * Types, defines and variables needed to write and compress a GIF. */ typedef int (* ifunptr) _ANSI_ARGS_((void)); | | | | | 1351 1352 1353 1354 1355 1356 1357 1358 1359 1360 1361 1362 1363 1364 1365 1366 1367 1368 1369 | /* * Types, defines and variables needed to write and compress a GIF. */ typedef int (* ifunptr) _ANSI_ARGS_((void)); #define LSB(a) ((unsigned char) (((short)(a)) & 0x00FF)) #define MSB(a) ((unsigned char) (((short)(a)) >> 8)) #define GIFBITS 12 #define HSIZE 5003 /* 80% occupancy */ static int ssize; static int csize; static int rsize; static unsigned char *pixelo; static int pixelSize; static int pixelPitch; |
︙ | ︙ | |||
1336 1337 1338 1339 1340 1341 1342 | static int nuevo _ANSI_ARGS_((int red, int green ,int blue, unsigned char mapa[MAXCOLORMAPSIZE][3])); static void savemap _ANSI_ARGS_((Tk_PhotoImageBlock *blockPtr, unsigned char mapa[MAXCOLORMAPSIZE][3])); static int ReadValue _ANSI_ARGS_((void)); static int | | | 1384 1385 1386 1387 1388 1389 1390 1391 1392 1393 1394 1395 1396 1397 1398 | static int nuevo _ANSI_ARGS_((int red, int green ,int blue, unsigned char mapa[MAXCOLORMAPSIZE][3])); static void savemap _ANSI_ARGS_((Tk_PhotoImageBlock *blockPtr, unsigned char mapa[MAXCOLORMAPSIZE][3])); static int ReadValue _ANSI_ARGS_((void)); static int FileWriteGIF(interp, filename, format, blockPtr) Tcl_Interp *interp; /* Interpreter to use for reporting errors. */ CONST char *filename; Tcl_Obj *format; Tk_PhotoImageBlock *blockPtr; { Tcl_Channel chan = NULL; int result; |
︙ | ︙ | |||
1379 1380 1381 1382 1383 1384 1385 | long width,height,x; unsigned char c; unsigned int top,left; top = 0; left = 0; | | | | | | | | | | | > > | | | | > | > > | > | | | | | | | | | | | | 1427 1428 1429 1430 1431 1432 1433 1434 1435 1436 1437 1438 1439 1440 1441 1442 1443 1444 1445 1446 1447 1448 1449 1450 1451 1452 1453 1454 1455 1456 1457 1458 1459 1460 1461 1462 1463 1464 1465 1466 1467 1468 1469 1470 1471 1472 1473 1474 1475 1476 1477 1478 1479 1480 1481 1482 1483 1484 1485 1486 1487 1488 1489 1490 1491 1492 1493 1494 1495 1496 1497 1498 1499 1500 1501 1502 1503 1504 1505 1506 1507 1508 1509 1510 1511 1512 1513 1514 1515 1516 1517 1518 1519 1520 1521 1522 1523 1524 1525 1526 1527 1528 1529 1530 1531 1532 1533 1534 1535 1536 1537 1538 1539 1540 1541 1542 1543 1544 1545 1546 1547 1548 | long width,height,x; unsigned char c; unsigned int top,left; top = 0; left = 0; pixelSize = blockPtr->pixelSize; greenOffset = blockPtr->offset[1]-blockPtr->offset[0]; blueOffset = blockPtr->offset[2]-blockPtr->offset[0]; alphaOffset = blockPtr->offset[0]; if (alphaOffset < blockPtr->offset[2]) { alphaOffset = blockPtr->offset[2]; } if (++alphaOffset < pixelSize) { alphaOffset -= blockPtr->offset[0]; } else { alphaOffset = 0; } Tcl_Write(handle, (char *) (alphaOffset ? GIF89a : GIF87a), 6); for (x=0 ; x<MAXCOLORMAPSIZE ; x++) { mapa[x][CM_RED] = 255; mapa[x][CM_GREEN] = 255; mapa[x][CM_BLUE] = 255; } width = blockPtr->width; height = blockPtr->height; pixelo = blockPtr->pixelPtr + blockPtr->offset[0]; pixelPitch = blockPtr->pitch; savemap(blockPtr,mapa); if (num >= MAXCOLORMAPSIZE) { Tcl_AppendResult(interp, "too many colors", (char *) NULL); return TCL_ERROR; } if (num<2) { num = 2; } c = LSB(width); Mputc(c,handle); c = MSB(width); Mputc(c,handle); c = LSB(height); Mputc(c,handle); c = MSB(height); Mputc(c,handle); resolution = 0; while (num >> resolution) { resolution++; } c = 111 + resolution * 17; Mputc(c,handle); num = 1 << resolution; /* * background color */ c = 0; Mputc(c,handle); /* * zero for future expansion. */ Mputc(c,handle); for (x=0 ; x<num ; x++) { c = mapa[x][CM_RED]; Mputc(c,handle); c = mapa[x][CM_GREEN]; Mputc(c,handle); c = mapa[x][CM_BLUE]; Mputc(c,handle); } /* * Write out extension for transparent colour index, if necessary. */ if (alphaOffset) { c = GIF_EXTENSION; Mputc(c, handle); Tcl_Write(handle, "\371\4\1\0\0\0", 7); } c = GIF_START; Mputc(c,handle); c = LSB(top); Mputc(c,handle); c = MSB(top); Mputc(c,handle); c = LSB(left); Mputc(c,handle); c = MSB(left); Mputc(c,handle); c = LSB(width); Mputc(c,handle); c = MSB(width); Mputc(c,handle); c = LSB(height); Mputc(c,handle); c = MSB(height); Mputc(c,handle); c = 0; Mputc(c,handle); c = resolution; Mputc(c,handle); ssize = rsize = blockPtr->width; csize = blockPtr->height; compress(resolution+1, handle, ReadValue); c = 0; |
︙ | ︙ | |||
1503 1504 1505 1506 1507 1508 1509 | color(red, green, blue, mapa) int red; int green; int blue; unsigned char mapa[MAXCOLORMAPSIZE][3]; { int x; | | | | < | > | | | | | | | | | | | | | > | | | | | | | | > | | | | | | | | | > | | | > | | | | | | | > | 1557 1558 1559 1560 1561 1562 1563 1564 1565 1566 1567 1568 1569 1570 1571 1572 1573 1574 1575 1576 1577 1578 1579 1580 1581 1582 1583 1584 1585 1586 1587 1588 1589 1590 1591 1592 1593 1594 1595 1596 1597 1598 1599 1600 1601 1602 1603 1604 1605 1606 1607 1608 1609 1610 1611 1612 1613 1614 1615 1616 1617 1618 1619 1620 1621 1622 1623 1624 1625 1626 1627 1628 1629 1630 1631 1632 1633 1634 1635 1636 1637 1638 1639 1640 1641 1642 1643 1644 1645 1646 1647 1648 1649 1650 1651 1652 1653 1654 1655 1656 1657 1658 1659 1660 1661 1662 1663 1664 1665 1666 1667 1668 1669 1670 1671 1672 1673 1674 1675 1676 1677 1678 1679 1680 1681 1682 1683 1684 1685 1686 1687 1688 1689 1690 1691 1692 1693 1694 1695 1696 1697 1698 1699 1700 1701 1702 1703 1704 1705 1706 1707 1708 1709 | color(red, green, blue, mapa) int red; int green; int blue; unsigned char mapa[MAXCOLORMAPSIZE][3]; { int x; for (x=(alphaOffset != 0) ; x<=MAXCOLORMAPSIZE ; x++) { if ((mapa[x][CM_RED] == red) && (mapa[x][CM_GREEN] == green) && (mapa[x][CM_BLUE] == blue)) { return x; } } return -1; } static int nuevo(red, green, blue, mapa) int red,green,blue; unsigned char mapa[MAXCOLORMAPSIZE][3]; { int x = (alphaOffset != 0); for (; x<=num ; x++) { if ((mapa[x][CM_RED] == red) && (mapa[x][CM_GREEN] == green) && (mapa[x][CM_BLUE] == blue)) { return 0; } } return 1; } static void savemap(blockPtr,mapa) Tk_PhotoImageBlock *blockPtr; unsigned char mapa[MAXCOLORMAPSIZE][3]; { unsigned char *colores; int x,y; unsigned char red,green,blue; if (alphaOffset) { num = 0; mapa[0][CM_RED] = 0xd9; mapa[0][CM_GREEN] = 0xd9; mapa[0][CM_BLUE] = 0xd9; } else { num = -1; } for(y=0 ; y<blockPtr->height ; y++) { colores = blockPtr->pixelPtr + blockPtr->offset[0] + y * blockPtr->pitch; for(x=0 ; x<blockPtr->width ; x++) { if (!alphaOffset || (colores[alphaOffset] != 0)) { red = colores[0]; green = colores[greenOffset]; blue = colores[blueOffset]; if (nuevo(red,green,blue,mapa)) { num++; if (num >= MAXCOLORMAPSIZE) { return; } mapa[num][CM_RED] = red; mapa[num][CM_GREEN] = green; mapa[num][CM_BLUE] = blue; } } colores += pixelSize; } } return; } static int ReadValue() { unsigned int col; if (csize == 0) { return EOF; } if (alphaOffset && (pixelo[alphaOffset] == 0)) { col = 0; } else { col = color(pixelo[0], pixelo[greenOffset], pixelo[blueOffset], mapa); } pixelo += pixelSize; if (--ssize <= 0) { ssize = rsize; csize--; pixelo += pixelPitch - (rsize * pixelSize); } return col; } /* *----------------------------------------------------------------------- * * miGIF Compression - mouse and ivo's GIF-compatible compression * * -run length encoding compression routines- * * Copyright (C) 1998 Hutchison Avenue Software Corporation * http://www.hasc.com * [email protected] * * Permission to use, copy, modify, and distribute this software and * its documentation for any purpose and without fee is hereby * granted, provided that the above copyright notice appear in all * copies and that both that copyright notice and this permission * notice appear in supporting documentation. This software is * provided "AS IS." The Hutchison Avenue Software Corporation * disclaims all warranties, either express or implied, including but * not limited to implied warranties of merchantability and fitness * for a particular purpose, with respect to this code and * accompanying documentation. * * The miGIF compression routines do not, strictly speaking, generate * files conforming to the GIF spec, since the image data is not * LZW-compressed (this is the point: in order to avoid transgression * of the Unisys patent on the LZW algorithm.) However, miGIF * generates data streams that any reasonably sane LZW decompresser * will decompress to what we want. * * miGIF compression uses run length encoding. It compresses * horizontal runs of pixels of the same color. This type of * compression gives good results on images with many runs, for * example images with lines, text and solid shapes on a solid-colored * background. It gives little or no compression on images with few * runs, for example digital or scanned photos. * * der Mouse * [email protected] * 7D C8 61 52 5D E7 2D 39 4E F1 31 3E E8 B3 27 4B * * [email protected] * * The Graphics Interchange Format(c) is the Copyright property of * CompuServe Incorporated. GIF(sm) is a Service Mark property of * CompuServe Incorporated. * *----------------------------------------------------------------------- */ static int rl_pixel; static int rl_basecode; static int rl_count; static int rl_table_pixel; static int rl_table_max; |
︙ | ︙ | |||
1661 1662 1663 1664 1665 1666 1667 | static int code_eof; static unsigned int obuf; static int obits; static Tcl_Channel ofile; static unsigned char oblock[256]; static int oblen; | > | > | | | > | > | | | < < < < < < < | | | | | | | > > | | | | > | > | | > > > > > > > | > | | | | > | > | | | | | | | | | > | | > | > | | > | | > | > | > | | | | | | | | | > | | > > | | > | | | | | | | | | | | | | | | | | | | | > | | | > > | | | > | > | | | | | | | | | | | | | | > > | > > | | | | > | | > | | | | | | | | | | | | | | | < | | | | < | | | | > > > > | > > | | < < | < | | | > | | | | | | | | < | > | | | | > > | | | | | | | | | | | | | | > | | | | | | | > | > | | | < | | < | | | | | | > | | | | | | | | | < | | < | | | | | > | | | | | | | | | | > | | > | | > | | | | | | | | | | | | | | | > > | > > | | < | | | | | | | > | | > | 1720 1721 1722 1723 1724 1725 1726 1727 1728 1729 1730 1731 1732 1733 1734 1735 1736 1737 1738 1739 1740 1741 1742 1743 1744 1745 1746 1747 1748 1749 1750 1751 1752 1753 1754 1755 1756 1757 1758 1759 1760 1761 1762 1763 1764 1765 1766 1767 1768 1769 1770 1771 1772 1773 1774 1775 1776 1777 1778 1779 1780 1781 1782 1783 1784 1785 1786 1787 1788 1789 1790 1791 1792 1793 1794 1795 1796 1797 1798 1799 1800 1801 1802 1803 1804 1805 1806 1807 1808 1809 1810 1811 1812 1813 1814 1815 1816 1817 1818 1819 1820 1821 1822 1823 1824 1825 1826 1827 1828 1829 1830 1831 1832 1833 1834 1835 1836 1837 1838 1839 1840 1841 1842 1843 1844 1845 1846 1847 1848 1849 1850 1851 1852 1853 1854 1855 1856 1857 1858 1859 1860 1861 1862 1863 1864 1865 1866 1867 1868 1869 1870 1871 1872 1873 1874 1875 1876 1877 1878 1879 1880 1881 1882 1883 1884 1885 1886 1887 1888 1889 1890 1891 1892 1893 1894 1895 1896 1897 1898 1899 1900 1901 1902 1903 1904 1905 1906 1907 1908 1909 1910 1911 1912 1913 1914 1915 1916 1917 1918 1919 1920 1921 1922 1923 1924 1925 1926 1927 1928 1929 1930 1931 1932 1933 1934 1935 1936 1937 1938 1939 1940 1941 1942 1943 1944 1945 1946 1947 1948 1949 1950 1951 1952 1953 1954 1955 1956 1957 1958 1959 1960 1961 1962 1963 1964 1965 1966 1967 1968 1969 1970 1971 1972 1973 1974 1975 1976 1977 1978 1979 1980 1981 1982 1983 1984 1985 1986 1987 1988 1989 1990 1991 1992 1993 1994 1995 1996 1997 1998 1999 2000 2001 2002 2003 2004 2005 2006 2007 2008 2009 2010 2011 2012 2013 2014 2015 2016 2017 2018 2019 2020 2021 2022 2023 2024 2025 2026 2027 2028 2029 2030 2031 2032 2033 2034 2035 2036 2037 2038 2039 2040 2041 2042 2043 2044 2045 2046 2047 2048 2049 2050 2051 2052 2053 2054 2055 2056 2057 2058 2059 2060 2061 2062 2063 2064 2065 2066 2067 2068 2069 2070 2071 2072 2073 2074 2075 2076 2077 2078 2079 2080 2081 2082 2083 2084 2085 2086 2087 2088 2089 2090 2091 2092 2093 2094 2095 2096 2097 2098 2099 2100 2101 2102 2103 2104 2105 2106 2107 2108 2109 2110 2111 2112 2113 2114 2115 2116 2117 2118 2119 2120 | static int code_eof; static unsigned int obuf; static int obits; static Tcl_Channel ofile; static unsigned char oblock[256]; static int oblen; /* * Used only when debugging GIF compression code */ /* #define MIGIF_DEBUGGING_ENVARS */ #ifdef MIGIF_DEBUGGING_ENVARS static int verbose_set = 0; static int verbose; #define MIGIF_VERBOSE (verbose_set?verbose:set_verbose()) #define DEBUGMSG(printf_args) if (MIGIF_VERBOSE) { printf printf_args; } static int set_verbose(void) { verbose = !!getenv("MIGIF_VERBOSE"); verbose_set = 1; return verbose; } static CONST char * binformat(v, nbits) unsigned int v; int nbits; { static char bufs[8][64]; static int bhand = 0; unsigned int bit; int bno; char *bp; bhand--; if (bhand < 0) { bhand = (sizeof(bufs) / sizeof(bufs[0])) - 1; } bp = &bufs[bhand][0]; for (bno=nbits-1,bit=((unsigned int)1)<<bno ; bno>=0 ; bno--,bit>>=1) { *bp++ = (v & bit) ? '1' : '0'; if (((bno&3) == 0) && (bno != 0)) { *bp++ = '.'; } } *bp = '\0'; return &bufs[bhand][0]; } #else #define MIGIF_VERBOSE 0 #define DEBUGMSG(printf_args) /* do nothing */ #endif static void write_block() { int i; unsigned char c; if (MIGIF_VERBOSE) { printf("write_block %d:", oblen); for (i=0 ; i<oblen ; i++) { printf(" %02x", oblock[i]); } printf("\n"); } c = oblen; Tcl_Write(ofile, (char *) &c, 1); Tcl_Write(ofile, (char *) &oblock[0], oblen); oblen = 0; } static void block_out(c) unsigned char c; { DEBUGMSG(("block_out %s\n", binformat(c, 8))); oblock[oblen++] = c; if (oblen >= 255) { write_block(); } } static void block_flush() { DEBUGMSG(("block_flush\n")); if (oblen > 0) { write_block(); } } static void output(val) int val; { DEBUGMSG(("output %s [%s %d %d]\n", binformat(val, out_bits), binformat(obuf, obits), obits, out_bits)); obuf |= val << obits; obits += out_bits; while (obits >= 8) { block_out(obuf&0xff); obuf >>= 8; obits -= 8; } DEBUGMSG(("output leaving [%s %d]\n", binformat(obuf, obits), obits)); } static void output_flush() { DEBUGMSG(("output_flush\n")); if (obits > 0) { block_out(obuf); } block_flush(); } static void did_clear() { DEBUGMSG(("did_clear\n")); out_bits = out_bits_init; out_bump = out_bump_init; out_clear = out_clear_init; out_count = 0; rl_table_max = 0; just_cleared = 1; } static void output_plain(c) int c; { DEBUGMSG(("output_plain %s\n", binformat(c, out_bits))); just_cleared = 0; output(c); out_count++; if (out_count >= out_bump) { out_bits++; out_bump += 1 << (out_bits - 1); } if (out_count >= out_clear) { output(code_clear); did_clear(); } } static unsigned int isqrt(x) unsigned int x; { unsigned int r; unsigned int v; if (x < 2) { return x; } for (v=x,r=1 ; v ; v>>=2,r<<=1); while (1) { v = ((x / r) + r) / 2; if (v==r || v==r+1) { return r; } r = v; } } static unsigned int compute_triangle_count(count, nrepcodes) unsigned int count; unsigned int nrepcodes; { unsigned int perrep; unsigned int cost; cost = 0; perrep = (nrepcodes * (nrepcodes+1)) / 2; while (count >= perrep) { cost += nrepcodes; count -= perrep; } if (count > 0) { unsigned int n; n = isqrt(count); while (n*(n+1) >= 2*count) { n--; } while (n*(n+1) < 2*count) { n++; } cost += n; } return cost; } static void max_out_clear() { out_clear = max_ocodes; } static void reset_out_clear() { out_clear = out_clear_init; if (out_count >= out_clear) { output(code_clear); did_clear(); } } static void rl_flush_fromclear(count) int count; { int n; DEBUGMSG(("rl_flush_fromclear %d\n", count)); max_out_clear(); rl_table_pixel = rl_pixel; n = 1; while (count > 0) { if (n == 1) { rl_table_max = 1; output_plain(rl_pixel); count--; } else if (count >= n) { rl_table_max = n; output_plain(rl_basecode+n-2); count -= n; } else if (count == 1) { rl_table_max++; output_plain(rl_pixel); count = 0; } else { rl_table_max++; output_plain(rl_basecode+count-2); count = 0; } if (out_count == 0) { n = 1; } else { n++; } } reset_out_clear(); DEBUGMSG(("rl_flush_fromclear leaving table_max=%d\n", rl_table_max)); } static void rl_flush_clearorrep(count) int count; { int withclr; DEBUGMSG(("rl_flush_clearorrep %d\n", count)); withclr = 1 + compute_triangle_count(count, max_ocodes); if (withclr < count) { output(code_clear); did_clear(); rl_flush_fromclear(count); } else { for (; count>0 ; count--) { output_plain(rl_pixel); } } } static void rl_flush_withtable(count) int count; { int repmax; int repleft; int leftover; DEBUGMSG(("rl_flush_withtable %d\n", count)); repmax = count / rl_table_max; leftover = count % rl_table_max; repleft = (leftover ? 1 : 0); if (out_count+repmax+repleft > max_ocodes) { repmax = max_ocodes - out_count; leftover = count - (repmax * rl_table_max); repleft = 1 + compute_triangle_count(leftover, max_ocodes); } DEBUGMSG(("rl_flush_withtable repmax=%d leftover=%d repleft=%d\n", repmax, leftover, repleft)); if (1+(int)compute_triangle_count(count, max_ocodes) < repmax+repleft) { output(code_clear); did_clear(); rl_flush_fromclear(count); return; } max_out_clear(); for (; repmax>0 ; repmax--) { output_plain(rl_basecode + rl_table_max - 2); } if (leftover) { if (just_cleared) { rl_flush_fromclear(leftover); } else if (leftover == 1) { output_plain(rl_pixel); } else { output_plain(rl_basecode + leftover - 2); } } reset_out_clear(); } static void rl_flush() { DEBUGMSG(("rl_flush [ %d %d\n", rl_count, rl_pixel)); if (rl_count == 1) { output_plain(rl_pixel); rl_count = 0; DEBUGMSG(("rl_flush ]\n")); return; } if (just_cleared) { rl_flush_fromclear(rl_count); } else if ((rl_table_max < 2) || (rl_table_pixel != rl_pixel)) { rl_flush_clearorrep(rl_count); } else { rl_flush_withtable(rl_count); } DEBUGMSG(("rl_flush ]\n")); rl_count = 0; } static void compress(init_bits, handle, readValue) int init_bits; Tcl_Channel handle; ifunptr readValue; { int c; ofile = handle; obuf = 0; obits = 0; oblen = 0; code_clear = 1 << (init_bits - 1); code_eof = code_clear + 1; rl_basecode = code_eof + 1; out_bump_init = (1 << (init_bits - 1)) - 1; /* * For images with a lot of runs, making out_clear_init larger * will give better compression. */ out_clear_init = (init_bits <= 3) ? 9 : (out_bump_init-1); #ifdef MIGIF_DEBUGGING_ENVARS { const char *ocienv; ocienv = getenv("MIGIF_OUT_CLEAR_INIT"); if (ocienv) { out_clear_init = atoi(ocienv); DEBUGMSG(("[overriding out_clear_init to %d]\n", out_clear_init)); } } #endif out_bits_init = init_bits; max_ocodes = (1 << GIFBITS) - ((1 << (out_bits_init - 1)) + 3); did_clear(); output(code_clear); rl_count = 0; while (1) { c = readValue(); if ((rl_count > 0) && (c != rl_pixel)) { rl_flush(); } if (c == EOF) { break; } if (rl_pixel == c) { rl_count++; } else { rl_pixel = c; rl_count = 1; } } output(code_eof); output_flush(); } /* *----------------------------------------------------------------------- * * End of miGIF section - See copyright notice at start of section. * *----------------------------------------------------------------------- */ |
Changes to generic/tkImgPPM.c.
︙ | ︙ | |||
9 10 11 12 13 14 15 | * See the file "license.terms" for information on usage and redistribution * of this file, and for a DISCLAIMER OF ALL WARRANTIES. * * Author: Paul Mackerras ([email protected]), * Department of Computer Science, * Australian National University. * | | | 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | * See the file "license.terms" for information on usage and redistribution * of this file, and for a DISCLAIMER OF ALL WARRANTIES. * * Author: Paul Mackerras ([email protected]), * Department of Computer Science, * Australian National University. * * RCS: @(#) $Id: tkImgPPM.c,v 1.8.2.1 2002/06/10 05:38:23 wolfsuit Exp $ */ #define USE_OLD_IMAGE #include "tkInt.h" #include "tkPort.h" |
︙ | ︙ | |||
188 189 190 191 192 193 194 | block.offset[3] = 0; block.width = width; block.pitch = block.pixelSize * fileWidth; Tk_PhotoExpand(imageHandle, destX + width, destY + height); if (srcY > 0) { | | | 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 | block.offset[3] = 0; block.width = width; block.pitch = block.pixelSize * fileWidth; Tk_PhotoExpand(imageHandle, destX + width, destY + height); if (srcY > 0) { Tcl_Seek(chan, (Tcl_WideInt)(srcY * block.pitch), SEEK_CUR); } nLines = (MAX_MEMORY + block.pitch - 1) / block.pitch; if (nLines > height) { nLines = height; } if (nLines <= 0) { |
︙ | ︙ |
Changes to generic/tkImgPhoto.c.
︙ | ︙ | |||
12 13 14 15 16 17 18 | * See the file "license.terms" for information on usage and redistribution * of this file, and for a DISCLAIMER OF ALL WARRANTIES. * * Author: Paul Mackerras ([email protected]), * Department of Computer Science, * Australian National University. * | | | 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 | * See the file "license.terms" for information on usage and redistribution * of this file, and for a DISCLAIMER OF ALL WARRANTIES. * * Author: Paul Mackerras ([email protected]), * Department of Computer Science, * Australian National University. * * RCS: @(#) $Id: tkImgPhoto.c,v 1.24.2.2 2002/06/10 05:38:23 wolfsuit Exp $ */ #include "tkInt.h" #include "tkPort.h" #include "tclMath.h" #include <ctype.h> |
︙ | ︙ | |||
311 312 313 314 315 316 317 318 319 320 321 322 323 324 | }; typedef struct ThreadSpecificData { Tk_PhotoImageFormat *formatList; /* Pointer to the first in the * list of known photo image formats.*/ Tk_PhotoImageFormat *oldFormatList; /* Pointer to the first in the * list of known photo image formats.*/ } ThreadSpecificData; static Tcl_ThreadDataKey dataKey; /* * Default configuration */ | > | 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 | }; typedef struct ThreadSpecificData { Tk_PhotoImageFormat *formatList; /* Pointer to the first in the * list of known photo image formats.*/ Tk_PhotoImageFormat *oldFormatList; /* Pointer to the first in the * list of known photo image formats.*/ int initialized; /* set to 1 if we've initialized the strucuture */ } ThreadSpecificData; static Tcl_ThreadDataKey dataKey; /* * Default configuration */ |
︙ | ︙ | |||
354 355 356 357 358 359 360 361 362 363 364 365 366 367 | static int imgPhotoColorHashInitialized; #define N_COLOR_HASH (sizeof(ColorTableId) / sizeof(int)) /* * Forward declarations */ static int ImgPhotoCmd _ANSI_ARGS_((ClientData clientData, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[])); static int ParseSubcommandOptions _ANSI_ARGS_(( struct SubcommandOptions *optPtr, Tcl_Interp *interp, int allowedOptions, int *indexPtr, int objc, Tcl_Obj *CONST objv[])); static void ImgPhotoCmdDeletedProc _ANSI_ARGS_(( | > > | 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 | static int imgPhotoColorHashInitialized; #define N_COLOR_HASH (sizeof(ColorTableId) / sizeof(int)) /* * Forward declarations */ static void PhotoFormatThreadExitProc _ANSI_ARGS_(( ClientData clientData)); static int ImgPhotoCmd _ANSI_ARGS_((ClientData clientData, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[])); static int ParseSubcommandOptions _ANSI_ARGS_(( struct SubcommandOptions *optPtr, Tcl_Interp *interp, int allowedOptions, int *indexPtr, int objc, Tcl_Obj *CONST objv[])); static void ImgPhotoCmdDeletedProc _ANSI_ARGS_(( |
︙ | ︙ | |||
427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 | * * Side effects: * The new image file format is entered into a table used in the * photo image "read" and "write" subcommands. * *---------------------------------------------------------------------- */ void Tk_CreateOldPhotoImageFormat(formatPtr) Tk_PhotoImageFormat *formatPtr; /* Structure describing the format. All of * the fields except "nextPtr" must be filled * in by caller. Must not have been passed * to Tk_CreatePhotoImageFormat previously. */ { Tk_PhotoImageFormat *copyPtr; ThreadSpecificData *tsdPtr = (ThreadSpecificData *) Tcl_GetThreadData(&dataKey, sizeof(ThreadSpecificData)); copyPtr = (Tk_PhotoImageFormat *) ckalloc(sizeof(Tk_PhotoImageFormat)); *copyPtr = *formatPtr; copyPtr->name = (char *) ckalloc((unsigned) (strlen(formatPtr->name) + 1)); strcpy(copyPtr->name, formatPtr->name); copyPtr->nextPtr = tsdPtr->oldFormatList; tsdPtr->oldFormatList = copyPtr; } void Tk_CreatePhotoImageFormat(formatPtr) Tk_PhotoImageFormat *formatPtr; /* Structure describing the format. All of * the fields except "nextPtr" must be filled * in by caller. Must not have been passed * to Tk_CreatePhotoImageFormat previously. */ { Tk_PhotoImageFormat *copyPtr; ThreadSpecificData *tsdPtr = (ThreadSpecificData *) Tcl_GetThreadData(&dataKey, sizeof(ThreadSpecificData)); copyPtr = (Tk_PhotoImageFormat *) ckalloc(sizeof(Tk_PhotoImageFormat)); *copyPtr = *formatPtr; copyPtr->name = (char *) ckalloc((unsigned) (strlen(formatPtr->name) + 1)); strcpy(copyPtr->name, formatPtr->name); if (isupper((unsigned char) *formatPtr->name)) { copyPtr->nextPtr = tsdPtr->oldFormatList; tsdPtr->oldFormatList = copyPtr; | > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 | * * Side effects: * The new image file format is entered into a table used in the * photo image "read" and "write" subcommands. * *---------------------------------------------------------------------- */ static void PhotoFormatThreadExitProc(clientData) ClientData clientData; /* not used */ { Tk_PhotoImageFormat *freePtr; ThreadSpecificData *tsdPtr = (ThreadSpecificData *) Tcl_GetThreadData(&dataKey, sizeof(ThreadSpecificData)); while (tsdPtr->oldFormatList != NULL) { freePtr = tsdPtr->oldFormatList; tsdPtr->oldFormatList = tsdPtr->oldFormatList->nextPtr; ckfree((char *) freePtr->name); ckfree((char *) freePtr); } while (tsdPtr->formatList != NULL) { freePtr = tsdPtr->formatList; tsdPtr->formatList = tsdPtr->formatList->nextPtr; ckfree((char *) freePtr->name); ckfree((char *) freePtr); } } /* *---------------------------------------------------------------------- * * Tk_CreateOldPhotoImageFormat, Tk_CreatePhotoImageFormat -- * * This procedure is invoked by an image file handler to register * a new photo image format and the procedures that handle the * new format. The procedure is typically invoked during * Tcl_AppInit. * * Results: * None. * * Side effects: * The new image file format is entered into a table used in the * photo image "read" and "write" subcommands. * *---------------------------------------------------------------------- */ void Tk_CreateOldPhotoImageFormat(formatPtr) Tk_PhotoImageFormat *formatPtr; /* Structure describing the format. All of * the fields except "nextPtr" must be filled * in by caller. Must not have been passed * to Tk_CreatePhotoImageFormat previously. */ { Tk_PhotoImageFormat *copyPtr; ThreadSpecificData *tsdPtr = (ThreadSpecificData *) Tcl_GetThreadData(&dataKey, sizeof(ThreadSpecificData)); if (!tsdPtr->initialized) { tsdPtr->initialized = 1; Tcl_CreateThreadExitHandler(PhotoFormatThreadExitProc, NULL); } copyPtr = (Tk_PhotoImageFormat *) ckalloc(sizeof(Tk_PhotoImageFormat)); *copyPtr = *formatPtr; copyPtr->name = (char *) ckalloc((unsigned) (strlen(formatPtr->name) + 1)); strcpy(copyPtr->name, formatPtr->name); copyPtr->nextPtr = tsdPtr->oldFormatList; tsdPtr->oldFormatList = copyPtr; } void Tk_CreatePhotoImageFormat(formatPtr) Tk_PhotoImageFormat *formatPtr; /* Structure describing the format. All of * the fields except "nextPtr" must be filled * in by caller. Must not have been passed * to Tk_CreatePhotoImageFormat previously. */ { Tk_PhotoImageFormat *copyPtr; ThreadSpecificData *tsdPtr = (ThreadSpecificData *) Tcl_GetThreadData(&dataKey, sizeof(ThreadSpecificData)); if (!tsdPtr->initialized) { tsdPtr->initialized = 1; Tcl_CreateThreadExitHandler(PhotoFormatThreadExitProc, NULL); } copyPtr = (Tk_PhotoImageFormat *) ckalloc(sizeof(Tk_PhotoImageFormat)); *copyPtr = *formatPtr; copyPtr->name = (char *) ckalloc((unsigned) (strlen(formatPtr->name) + 1)); strcpy(copyPtr->name, formatPtr->name); if (isupper((unsigned char) *formatPtr->name)) { copyPtr->nextPtr = tsdPtr->oldFormatList; tsdPtr->oldFormatList = copyPtr; |
︙ | ︙ | |||
1845 1846 1847 1848 1849 1850 1851 | return TCL_ERROR; } chan = Tcl_OpenFileChannel(interp, masterPtr->fileString, "r", 0); if (chan == NULL) { return TCL_ERROR; } | > | < < < < > | | < < < | | | | 1898 1899 1900 1901 1902 1903 1904 1905 1906 1907 1908 1909 1910 1911 1912 1913 1914 1915 1916 1917 1918 1919 | return TCL_ERROR; } chan = Tcl_OpenFileChannel(interp, masterPtr->fileString, "r", 0); if (chan == NULL) { return TCL_ERROR; } /* * -translation binary also sets -encoding binary */ if ((Tcl_SetChannelOption(interp, chan, "-translation", "binary") != TCL_OK) || (MatchFileFormat(interp, chan, masterPtr->fileString, masterPtr->format, &imageFormat, &imageWidth, &imageHeight, &oldformat) != TCL_OK)) { Tcl_Close(NULL, chan); return TCL_ERROR; } ImgPhotoSetSize(masterPtr, imageWidth, imageHeight); tempformat = masterPtr->format; if (oldformat && tempformat) { tempformat = (Tcl_Obj *) Tcl_GetString(tempformat); |
︙ | ︙ | |||
1881 1882 1883 1884 1885 1886 1887 | Tcl_ResetResult(interp); masterPtr->flags |= IMAGE_CHANGED; } if ((masterPtr->fileString == NULL) && (masterPtr->dataString != NULL) && ((masterPtr->dataString != oldData) | | | 1929 1930 1931 1932 1933 1934 1935 1936 1937 1938 1939 1940 1941 1942 1943 | Tcl_ResetResult(interp); masterPtr->flags |= IMAGE_CHANGED; } if ((masterPtr->fileString == NULL) && (masterPtr->dataString != NULL) && ((masterPtr->dataString != oldData) || (masterPtr->format != oldFormat))) { if (MatchStringFormat(interp, masterPtr->dataString, masterPtr->format, &imageFormat, &imageWidth, &imageHeight, &oldformat) != TCL_OK) { return TCL_ERROR; } ImgPhotoSetSize(masterPtr, imageWidth, imageHeight); |
︙ | ︙ | |||
3568 3569 3570 3571 3572 3573 3574 | if (formatPtr->fileMatchProc == NULL) { Tcl_AppendResult(interp, "-file option isn't supported for ", formatString, " images", (char *) NULL); return TCL_ERROR; } } if (formatPtr->fileMatchProc != NULL) { | | | 3616 3617 3618 3619 3620 3621 3622 3623 3624 3625 3626 3627 3628 3629 3630 | if (formatPtr->fileMatchProc == NULL) { Tcl_AppendResult(interp, "-file option isn't supported for ", formatString, " images", (char *) NULL); return TCL_ERROR; } } if (formatPtr->fileMatchProc != NULL) { (void) Tcl_Seek(chan, Tcl_LongAsWide(0L), SEEK_SET); if ((*formatPtr->fileMatchProc)(chan, fileName, formatObj, widthPtr, heightPtr, interp)) { if (*widthPtr < 1) { *widthPtr = 1; } if (*heightPtr < 1) { |
︙ | ︙ | |||
3599 3600 3601 3602 3603 3604 3605 | if (formatPtr->fileMatchProc == NULL) { Tcl_AppendResult(interp, "-file option isn't supported for ", formatString, " images", (char *) NULL); return TCL_ERROR; } } if (formatPtr->fileMatchProc != NULL) { | | | 3647 3648 3649 3650 3651 3652 3653 3654 3655 3656 3657 3658 3659 3660 3661 | if (formatPtr->fileMatchProc == NULL) { Tcl_AppendResult(interp, "-file option isn't supported for ", formatString, " images", (char *) NULL); return TCL_ERROR; } } if (formatPtr->fileMatchProc != NULL) { (void) Tcl_Seek(chan, Tcl_LongAsWide(0L), SEEK_SET); if ((*formatPtr->fileMatchProc)(chan, fileName, (Tcl_Obj *) formatString, widthPtr, heightPtr, interp)) { if (*widthPtr < 1) { *widthPtr = 1; } if (*heightPtr < 1) { *heightPtr = 1; |
︙ | ︙ | |||
3629 3630 3631 3632 3633 3634 3635 | fileName, "\"", (char *) NULL); } return TCL_ERROR; } *imageFormatPtr = formatPtr; *oldformat = useoldformat; | | | 3677 3678 3679 3680 3681 3682 3683 3684 3685 3686 3687 3688 3689 3690 3691 | fileName, "\"", (char *) NULL); } return TCL_ERROR; } *imageFormatPtr = formatPtr; *oldformat = useoldformat; (void) Tcl_Seek(chan, Tcl_LongAsWide(0L), SEEK_SET); return TCL_OK; } /* *---------------------------------------------------------------------- * * MatchStringFormat -- |
︙ | ︙ | |||
3890 3891 3892 3893 3894 3895 3896 3897 3898 3899 3900 3901 3902 3903 3904 3905 3906 3907 | && (width <= blockPtr->width) && (height <= blockPtr->height) && ((height == 1) || ((x == 0) && (width == masterPtr->width) && (blockPtr->pitch == pitch)))) { memcpy((VOID *) destLinePtr, (VOID *) (blockPtr->pixelPtr + blockPtr->offset[0]), (size_t) (height * width * 4)); } else { for (hLeft = height; hLeft > 0;) { srcLinePtr = blockPtr->pixelPtr + blockPtr->offset[0]; hCopy = MIN(hLeft, blockPtr->height); hLeft -= hCopy; for (; hCopy > 0; --hCopy) { destPtr = destLinePtr; for (wLeft = width; wLeft > 0;) { wCopy = MIN(wLeft, blockPtr->width); wLeft -= wCopy; srcPtr = srcLinePtr; for (; wCopy > 0; --wCopy) { | > > | | | | > | | | | | | | | | | | > > > | | | | | | | | | | | | | | | | | | | | | | > | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | 3938 3939 3940 3941 3942 3943 3944 3945 3946 3947 3948 3949 3950 3951 3952 3953 3954 3955 3956 3957 3958 3959 3960 3961 3962 3963 3964 3965 3966 3967 3968 3969 3970 3971 3972 3973 3974 3975 3976 3977 3978 3979 3980 3981 3982 3983 3984 3985 3986 3987 3988 3989 3990 3991 3992 3993 3994 3995 3996 3997 3998 3999 4000 4001 4002 4003 4004 4005 4006 4007 4008 4009 4010 4011 4012 4013 4014 4015 4016 4017 4018 4019 4020 4021 4022 4023 4024 4025 4026 4027 4028 4029 4030 4031 4032 4033 4034 4035 4036 4037 4038 4039 4040 4041 4042 4043 4044 4045 4046 4047 4048 4049 4050 4051 4052 4053 4054 | && (width <= blockPtr->width) && (height <= blockPtr->height) && ((height == 1) || ((x == 0) && (width == masterPtr->width) && (blockPtr->pitch == pitch)))) { memcpy((VOID *) destLinePtr, (VOID *) (blockPtr->pixelPtr + blockPtr->offset[0]), (size_t) (height * width * 4)); } else { int alpha; for (hLeft = height; hLeft > 0;) { srcLinePtr = blockPtr->pixelPtr + blockPtr->offset[0]; hCopy = MIN(hLeft, blockPtr->height); hLeft -= hCopy; for (; hCopy > 0; --hCopy) { destPtr = destLinePtr; for (wLeft = width; wLeft > 0;) { wCopy = MIN(wLeft, blockPtr->width); wLeft -= wCopy; srcPtr = srcLinePtr; for (; wCopy > 0; --wCopy) { alpha = srcPtr[alphaOffset]; if (!destPtr[3]) { destPtr[0] = destPtr[1] = destPtr[2] = 0xd9; } if (!alphaOffset || (alpha == 255)) { /* new solid part of the image */ *destPtr++ = srcPtr[0]; *destPtr++ = srcPtr[greenOffset]; *destPtr++ = srcPtr[blueOffset]; *destPtr++ = 255; } else { if (alpha) { destPtr[0] += (srcPtr[0] - destPtr[0]) * alpha / 255; destPtr[1] += (srcPtr[greenOffset] - destPtr[1]) * alpha / 255; destPtr[2] += (srcPtr[blueOffset] - destPtr[2]) * alpha / 255; destPtr[3] += (255 - destPtr[3]) * alpha / 255; } /* * else should be empty space */ destPtr += 4; } srcPtr += blockPtr->pixelSize; } } srcLinePtr += blockPtr->pitch; destLinePtr += pitch; } } } /* * Add this new block to the region which specifies which data is valid. */ if (alphaOffset) { int x1, y1, end; /* * This block is grossly inefficient. For each row in the image, it * finds each continguous string of nontransparent pixels, then marks * those areas as valid in the validRegion mask. This makes drawing * very efficient, because of the way we use X: we just say, here's * your mask, and here's your data. We need not worry about the * current background color, etc. But this costs us a lot on the * image setup. Still, image setup only happens once, whereas the * drawing happens many times, so this might be the best way to go. * * An alternative might be to not set up this mask, and instead, at * drawing time, for each transparent pixel, set its color to the * color of the background behind that pixel. This is what I suspect * most of programs do. However, they don't have to deal with the * canvas, which could have many different background colors. * Determining the correct bg color for a given pixel might be * expensive. */ destLinePtr = masterPtr->pix24 + (y * masterPtr->width + x) * 4 + 3; for (y1 = 0; y1 < height; y1++) { x1 = 0; destPtr = destLinePtr; while (x1 < width) { /* search for first non-transparent pixel */ while ((x1 < width) && !*destPtr) { x1++; destPtr += 4; } end = x1; /* search for first transparent pixel */ while ((end < width) && *destPtr) { end++; destPtr += 4; } if (end > x1) { rect.x = x + x1; rect.y = y + y1; rect.width = end - x1; rect.height = 1; TkUnionRectWithRegion(&rect, masterPtr->validRegion, masterPtr->validRegion); } x1 = end; } destLinePtr += masterPtr->width * 4; } } else { rect.x = x; rect.y = y; rect.width = width; rect.height = height; TkUnionRectWithRegion(&rect, masterPtr->validRegion, masterPtr->validRegion); } /* * Update each instance. */ Tk_DitherPhoto((Tk_PhotoHandle)masterPtr, x, y, width, height); |
︙ | ︙ | |||
4186 4187 4188 4189 4190 4191 4192 | } } /* * Add this new block to the region that specifies which data is valid. */ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | 4241 4242 4243 4244 4245 4246 4247 4248 4249 4250 4251 4252 4253 4254 4255 4256 4257 4258 4259 4260 4261 4262 4263 4264 4265 4266 4267 4268 4269 4270 4271 4272 4273 4274 4275 4276 4277 4278 4279 4280 4281 4282 4283 4284 4285 4286 4287 4288 4289 4290 4291 | } } /* * Add this new block to the region that specifies which data is valid. */ if (alphaOffset) { int x1, y1, end; destLinePtr = masterPtr->pix24 + (y * masterPtr->width + x) * 4 + 3; for (y1 = 0; y1 < height; y1++) { x1 = 0; destPtr = destLinePtr; while (x1 < width) { /* search for first non-transparent pixel */ while ((x1 < width) && !*destPtr) { x1++; destPtr += 4; } end = x1; /* search for first transparent pixel */ while ((end < width) && *destPtr) { end++; destPtr += 4; } if (end > x1) { rect.x = x + x1; rect.y = y + y1; rect.width = end - x1; rect.height = 1; TkUnionRectWithRegion(&rect, masterPtr->validRegion, masterPtr->validRegion); } x1 = end; } destLinePtr += masterPtr->width * 4; } } else { rect.x = x; rect.y = y; rect.width = width; rect.height = height; TkUnionRectWithRegion(&rect, masterPtr->validRegion, masterPtr->validRegion); } /* * Update each instance. */ Tk_DitherPhoto((Tk_PhotoHandle)masterPtr, x, y, width, height); |
︙ | ︙ |
Changes to generic/tkInt.decls.
1 2 3 4 5 6 7 8 9 10 11 | # tkInt.decls -- # # This file contains the declarations for all unsupported # functions that are exported by the Tk library. This file # is used to generate the tkIntDecls.h, tkIntPlatDecls.h, # tkIntStub.c, and tkPlatStub.c files. # # Copyright (c) 1998-1999 by Scriptics Corporation. # See the file "license.terms" for information on usage and redistribution # of this file, and for a DISCLAIMER OF ALL WARRANTIES. # | | | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | # tkInt.decls -- # # This file contains the declarations for all unsupported # functions that are exported by the Tk library. This file # is used to generate the tkIntDecls.h, tkIntPlatDecls.h, # tkIntStub.c, and tkPlatStub.c files. # # Copyright (c) 1998-1999 by Scriptics Corporation. # See the file "license.terms" for information on usage and redistribution # of this file, and for a DISCLAIMER OF ALL WARRANTIES. # # RCS: @(#) $Id: tkInt.decls,v 1.21.2.4 2002/06/10 05:38:23 wolfsuit Exp $ library tk # Define the unsupported generic interfaces. interface tkInt |
︙ | ︙ | |||
640 641 642 643 644 645 646 647 648 649 650 651 652 653 | declare 140 generic { TkRegion TkPhotoGetValidRegion (Tk_PhotoHandle handle) } declare 141 generic { TkWindow ** TkWmStackorderToplevel(TkWindow *parentPtr) } ############################################################################## # Define the platform specific internal Tcl interface. These functions are # only available on the designated platform. interface tkIntPlat | > > > > > > > > > > > > | 640 641 642 643 644 645 646 647 648 649 650 651 652 653 654 655 656 657 658 659 660 661 662 663 664 665 | declare 140 generic { TkRegion TkPhotoGetValidRegion (Tk_PhotoHandle handle) } declare 141 generic { TkWindow ** TkWmStackorderToplevel(TkWindow *parentPtr) } declare 142 generic { void TkFocusFree(TkMainInfo *mainPtr) } declare 143 generic { void TkClipCleanup(TkDisplay *dispPtr) } declare 144 generic { void TkGCCleanup(TkDisplay *dispPtr) } ############################################################################## # Define the platform specific internal Tcl interface. These functions are # only available on the designated platform. interface tkIntPlat |
︙ | ︙ | |||
686 687 688 689 690 691 692 693 694 695 696 697 698 699 | declare 7 unix { void TkUnixSetMenubar (Tk_Window tkwin, Tk_Window menubar) } declare 8 unix { int TkpScanWindowId (Tcl_Interp *interp, CONST char *string, Window *idPtr) } ############################ # Windows specific functions declare 0 win { char * TkAlignImageData (XImage *image, int alignment, int bitOrder) } | > > > > > > > > > > > > > > > > | 698 699 700 701 702 703 704 705 706 707 708 709 710 711 712 713 714 715 716 717 718 719 720 721 722 723 724 725 726 727 | declare 7 unix { void TkUnixSetMenubar (Tk_Window tkwin, Tk_Window menubar) } declare 8 unix { int TkpScanWindowId (Tcl_Interp *interp, CONST char *string, Window *idPtr) } declare 9 unix { void TkWmCleanup (TkDisplay *dispPtr) } declare 10 unix { void TkSendCleanup (TkDisplay *dispPtr) } declare 11 unix { void TkFreeXId (TkDisplay *dispPtr) } declare 12 unix { int TkpWmSetState (TkWindow *winPtr, int state) } ############################ # Windows specific functions declare 0 win { char * TkAlignImageData (XImage *image, int alignment, int bitOrder) } |
︙ | ︙ |
Changes to generic/tkInt.h.
1 2 3 4 5 6 7 8 9 10 11 12 13 | /* * tkInt.h -- * * Declarations for things used internally by the Tk * procedures but not exported outside the module. * * Copyright (c) 1990-1994 The Regents of the University of California. * Copyright (c) 1994-1997 Sun Microsystems, Inc. * Copyright (c) 1998 by Scriptics Corporation. * * See the file "license.terms" for information on usage and redistribution * of this file, and for a DISCLAIMER OF ALL WARRANTIES. * | | | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | /* * tkInt.h -- * * Declarations for things used internally by the Tk * procedures but not exported outside the module. * * Copyright (c) 1990-1994 The Regents of the University of California. * Copyright (c) 1994-1997 Sun Microsystems, Inc. * Copyright (c) 1998 by Scriptics Corporation. * * See the file "license.terms" for information on usage and redistribution * of this file, and for a DISCLAIMER OF ALL WARRANTIES. * * RCS: $Id: tkInt.h,v 1.40.2.2 2002/06/10 05:38:23 wolfsuit Exp $ */ #ifndef _TKINT #define _TKINT #ifndef _TK #include "tk.h" |
︙ | ︙ | |||
77 78 79 80 81 82 83 84 85 86 87 88 89 90 | * (needed when deleting). */ struct TkCursor *nextPtr; /* Points to the next TkCursor structure with * the same name. Cursors with the same * name but different displays are chained * together off a single hash table entry. */ } TkCursor; /* * One of the following structures is maintained for each display * containing a window managed by Tk. In part, the structure is * used to store thread-specific data, since each thread will have * its own TkDisplay structure. */ | > > > > > > > > > > | 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 | * (needed when deleting). */ struct TkCursor *nextPtr; /* Points to the next TkCursor structure with * the same name. Cursors with the same * name but different displays are chained * together off a single hash table entry. */ } TkCursor; /* * This defines whether we should try to use XIM over-the-spot style * input. Allow users to override it. It is a much more elegant use * of XIM, but uses a bit more memory. */ #ifndef TK_XIM_SPOT # define TK_XIM_SPOT 1 #endif /* * One of the following structures is maintained for each display * containing a window managed by Tk. In part, the structure is * used to store thread-specific data, since each thread will have * its own TkDisplay structure. */ |
︙ | ︙ | |||
409 410 411 412 413 414 415 | * resources. */ XID (*defaultAllocProc) _ANSI_ARGS_((Display *display)); /* Default resource allocator for display. */ struct TkIdStack *windowStackPtr; /* First in list of chunks of window * identifers that can't be reused right * now. */ | > | | | 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 | * resources. */ XID (*defaultAllocProc) _ANSI_ARGS_((Display *display)); /* Default resource allocator for display. */ struct TkIdStack *windowStackPtr; /* First in list of chunks of window * identifers that can't be reused right * now. */ Tcl_TimerToken idCleanupScheduled; /* If set, it means a call to WindowIdCleanup * has already been scheduled, 0 means it * hasn't. */ /* * Information used by tkUnixWm.c and tkWinWm.c only: */ int wmTracing; /* Used to enable or disable tracing in |
︙ | ︙ | |||
452 453 454 455 456 457 458 459 460 461 462 463 464 465 | /* * Miscellaneous information: */ #ifdef TK_USE_INPUT_METHODS XIM inputMethod; /* Input method for this display */ #endif /* TK_USE_INPUT_METHODS */ Tcl_HashTable winTable; /* Maps from X window ids to TkWindow ptrs. */ int refCount; /* Reference count of how many Tk applications * are using this display. Used to clean up * the display when we no longer have any * Tk applications using it. | > > > | 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 | /* * Miscellaneous information: */ #ifdef TK_USE_INPUT_METHODS XIM inputMethod; /* Input method for this display */ #if TK_XIM_SPOT XFontSet inputXfs; /* XFontSet cached for over-the-spot XIM. */ #endif #endif /* TK_USE_INPUT_METHODS */ Tcl_HashTable winTable; /* Maps from X window ids to TkWindow ptrs. */ int refCount; /* Reference count of how many Tk applications * are using this display. Used to clean up * the display when we no longer have any * Tk applications using it. |
︙ | ︙ | |||
476 477 478 479 480 481 482 483 484 485 486 487 488 489 | int useInputMethods; /* Whether to use input methods */ /* * The following field(s) were all added for Tk8.4 */ long deletionEpoch; /* Incremented by window deletions */ } TkDisplay; /* * One of the following structures exists for each error handler * created by a call to Tk_CreateErrorHandler. The structure * is managed by tkError.c. */ | > | 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 | int useInputMethods; /* Whether to use input methods */ /* * The following field(s) were all added for Tk8.4 */ long deletionEpoch; /* Incremented by window deletions */ } TkDisplay; /* * One of the following structures exists for each error handler * created by a call to Tk_CreateErrorHandler. The structure * is managed by tkError.c. */ |
︙ | ︙ | |||
511 512 513 514 515 516 517 | ClientData clientData; /* Arbitrary value to pass to * errorProc. */ struct TkErrorHandler *nextPtr; /* Pointer to next older handler for * this display, or NULL for end of * list. */ } TkErrorHandler; | < < | 526 527 528 529 530 531 532 533 534 535 536 537 538 539 | ClientData clientData; /* Arbitrary value to pass to * errorProc. */ struct TkErrorHandler *nextPtr; /* Pointer to next older handler for * this display, or NULL for end of * list. */ } TkErrorHandler; /* * One of the following structures exists for each event handler * created by calling Tk_CreateEventHandler. This information * is used by tkEvent.c only. */ |
︙ | ︙ | |||
696 697 698 699 700 701 702 | * Information kept by the event manager (tkEvent.c): */ TkEventHandler *handlerList;/* First in list of event handlers * declared for this window, or * NULL if none. */ #ifdef TK_USE_INPUT_METHODS | | | 709 710 711 712 713 714 715 716 717 718 719 720 721 722 723 | * Information kept by the event manager (tkEvent.c): */ TkEventHandler *handlerList;/* First in list of event handlers * declared for this window, or * NULL if none. */ #ifdef TK_USE_INPUT_METHODS XIC inputContext; /* XIM input context. */ #endif /* TK_USE_INPUT_METHODS */ /* * Information used for event bindings (see "bind" and "bindtags" * commands in tkCmds.c): */ |
︙ | ︙ | |||
977 978 979 980 981 982 983 984 985 986 987 988 989 990 | EXTERN int Tk_MenubuttonObjCmd _ANSI_ARGS_((ClientData clientData, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[])); EXTERN int Tk_MessageBoxObjCmd _ANSI_ARGS_((ClientData clientData, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[])); EXTERN int Tk_MessageObjCmd _ANSI_ARGS_((ClientData clientData, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[])); EXTERN int Tk_OptionObjCmd _ANSI_ARGS_((ClientData clientData, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[])); EXTERN int Tk_PackObjCmd _ANSI_ARGS_((ClientData clientData, Tcl_Interp *interp, int objc, | > > > > | 990 991 992 993 994 995 996 997 998 999 1000 1001 1002 1003 1004 1005 1006 1007 | EXTERN int Tk_MenubuttonObjCmd _ANSI_ARGS_((ClientData clientData, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[])); EXTERN int Tk_MessageBoxObjCmd _ANSI_ARGS_((ClientData clientData, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[])); EXTERN int Tk_MessageObjCmd _ANSI_ARGS_((ClientData clientData, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[])); EXTERN int Tk_PanedWindowObjCmd _ANSI_ARGS_(( ClientData clientData, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[])); EXTERN int Tk_OptionObjCmd _ANSI_ARGS_((ClientData clientData, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[])); EXTERN int Tk_PackObjCmd _ANSI_ARGS_((ClientData clientData, Tcl_Interp *interp, int objc, |
︙ | ︙ |
Changes to generic/tkIntDecls.h.
1 2 3 4 5 6 7 8 9 10 11 12 13 | /* * tkIntDecls.h -- * * This file contains the declarations for all unsupported * functions that are exported by the Tk library. These * interfaces are not guaranteed to remain the same between * versions. Use at your own risk. * * Copyright (c) 1998-1999 by Scriptics Corporation. * * See the file "license.terms" for information on usage and redistribution * of this file, and for a DISCLAIMER OF ALL WARRANTIES. * | | | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | /* * tkIntDecls.h -- * * This file contains the declarations for all unsupported * functions that are exported by the Tk library. These * interfaces are not guaranteed to remain the same between * versions. Use at your own risk. * * Copyright (c) 1998-1999 by Scriptics Corporation. * * See the file "license.terms" for information on usage and redistribution * of this file, and for a DISCLAIMER OF ALL WARRANTIES. * * RCS: @(#) $Id: tkIntDecls.h,v 1.13.2.5 2002/06/10 05:38:23 wolfsuit Exp $ */ #ifndef _TKINTDECLS #define _TKINTDECLS #ifdef BUILD_tk #undef TCL_STORAGE_CLASS |
︙ | ︙ | |||
527 528 529 530 531 532 533 534 535 536 537 538 539 540 | EXTERN void TkpInitKeymapInfo _ANSI_ARGS_((TkDisplay * dispPtr)); /* 140 */ EXTERN TkRegion TkPhotoGetValidRegion _ANSI_ARGS_(( Tk_PhotoHandle handle)); /* 141 */ EXTERN TkWindow ** TkWmStackorderToplevel _ANSI_ARGS_(( TkWindow * parentPtr)); typedef struct TkIntStubs { int magic; struct TkIntStubHooks *hooks; TkWindow * (*tkAllocWindow) _ANSI_ARGS_((TkDisplay * dispPtr, int screenNum, TkWindow * parentPtr)); /* 0 */ void (*tkBezierPoints) _ANSI_ARGS_((double control[], int numSteps, double * coordPtr)); /* 1 */ | > > > > > > | 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541 542 543 544 545 546 | EXTERN void TkpInitKeymapInfo _ANSI_ARGS_((TkDisplay * dispPtr)); /* 140 */ EXTERN TkRegion TkPhotoGetValidRegion _ANSI_ARGS_(( Tk_PhotoHandle handle)); /* 141 */ EXTERN TkWindow ** TkWmStackorderToplevel _ANSI_ARGS_(( TkWindow * parentPtr)); /* 142 */ EXTERN void TkFocusFree _ANSI_ARGS_((TkMainInfo * mainPtr)); /* 143 */ EXTERN void TkClipCleanup _ANSI_ARGS_((TkDisplay * dispPtr)); /* 144 */ EXTERN void TkGCCleanup _ANSI_ARGS_((TkDisplay * dispPtr)); typedef struct TkIntStubs { int magic; struct TkIntStubHooks *hooks; TkWindow * (*tkAllocWindow) _ANSI_ARGS_((TkDisplay * dispPtr, int screenNum, TkWindow * parentPtr)); /* 0 */ void (*tkBezierPoints) _ANSI_ARGS_((double control[], int numSteps, double * coordPtr)); /* 1 */ |
︙ | ︙ | |||
784 785 786 787 788 789 790 791 792 793 794 795 796 797 | void (*tkpDrawHighlightBorder) _ANSI_ARGS_((Tk_Window tkwin, GC fgGC, GC bgGC, int highlightWidth, Drawable drawable)); /* 135 */ void (*tkSetFocusWin) _ANSI_ARGS_((TkWindow * winPtr, int force)); /* 136 */ void (*tkpSetKeycodeAndState) _ANSI_ARGS_((Tk_Window tkwin, KeySym keySym, XEvent * eventPtr)); /* 137 */ KeySym (*tkpGetKeySym) _ANSI_ARGS_((TkDisplay * dispPtr, XEvent * eventPtr)); /* 138 */ void (*tkpInitKeymapInfo) _ANSI_ARGS_((TkDisplay * dispPtr)); /* 139 */ TkRegion (*tkPhotoGetValidRegion) _ANSI_ARGS_((Tk_PhotoHandle handle)); /* 140 */ TkWindow ** (*tkWmStackorderToplevel) _ANSI_ARGS_((TkWindow * parentPtr)); /* 141 */ } TkIntStubs; #ifdef __cplusplus extern "C" { #endif extern TkIntStubs *tkIntStubsPtr; #ifdef __cplusplus | > > > | 790 791 792 793 794 795 796 797 798 799 800 801 802 803 804 805 806 | void (*tkpDrawHighlightBorder) _ANSI_ARGS_((Tk_Window tkwin, GC fgGC, GC bgGC, int highlightWidth, Drawable drawable)); /* 135 */ void (*tkSetFocusWin) _ANSI_ARGS_((TkWindow * winPtr, int force)); /* 136 */ void (*tkpSetKeycodeAndState) _ANSI_ARGS_((Tk_Window tkwin, KeySym keySym, XEvent * eventPtr)); /* 137 */ KeySym (*tkpGetKeySym) _ANSI_ARGS_((TkDisplay * dispPtr, XEvent * eventPtr)); /* 138 */ void (*tkpInitKeymapInfo) _ANSI_ARGS_((TkDisplay * dispPtr)); /* 139 */ TkRegion (*tkPhotoGetValidRegion) _ANSI_ARGS_((Tk_PhotoHandle handle)); /* 140 */ TkWindow ** (*tkWmStackorderToplevel) _ANSI_ARGS_((TkWindow * parentPtr)); /* 141 */ void (*tkFocusFree) _ANSI_ARGS_((TkMainInfo * mainPtr)); /* 142 */ void (*tkClipCleanup) _ANSI_ARGS_((TkDisplay * dispPtr)); /* 143 */ void (*tkGCCleanup) _ANSI_ARGS_((TkDisplay * dispPtr)); /* 144 */ } TkIntStubs; #ifdef __cplusplus extern "C" { #endif extern TkIntStubs *tkIntStubsPtr; #ifdef __cplusplus |
︙ | ︙ | |||
1451 1452 1453 1454 1455 1456 1457 1458 1459 1460 1461 1462 1463 1464 1465 1466 1467 | #define TkPhotoGetValidRegion \ (tkIntStubsPtr->tkPhotoGetValidRegion) /* 140 */ #endif #ifndef TkWmStackorderToplevel #define TkWmStackorderToplevel \ (tkIntStubsPtr->tkWmStackorderToplevel) /* 141 */ #endif #endif /* defined(USE_TK_STUBS) && !defined(USE_TK_STUB_PROCS) */ /* !END!: Do not edit above this line. */ #undef TCL_STORAGE_CLASS #define TCL_STORAGE_CLASS DLLIMPORT #endif /* _TKINTDECLS */ | > > > > > > > > > > > > | 1460 1461 1462 1463 1464 1465 1466 1467 1468 1469 1470 1471 1472 1473 1474 1475 1476 1477 1478 1479 1480 1481 1482 1483 1484 1485 1486 1487 1488 | #define TkPhotoGetValidRegion \ (tkIntStubsPtr->tkPhotoGetValidRegion) /* 140 */ #endif #ifndef TkWmStackorderToplevel #define TkWmStackorderToplevel \ (tkIntStubsPtr->tkWmStackorderToplevel) /* 141 */ #endif #ifndef TkFocusFree #define TkFocusFree \ (tkIntStubsPtr->tkFocusFree) /* 142 */ #endif #ifndef TkClipCleanup #define TkClipCleanup \ (tkIntStubsPtr->tkClipCleanup) /* 143 */ #endif #ifndef TkGCCleanup #define TkGCCleanup \ (tkIntStubsPtr->tkGCCleanup) /* 144 */ #endif #endif /* defined(USE_TK_STUBS) && !defined(USE_TK_STUB_PROCS) */ /* !END!: Do not edit above this line. */ #undef TCL_STORAGE_CLASS #define TCL_STORAGE_CLASS DLLIMPORT #endif /* _TKINTDECLS */ |
Changes to generic/tkIntPlatDecls.h.
1 2 3 4 5 6 7 8 9 10 11 | /* * tkIntPlatDecls.h -- * * This file contains the declarations for all platform dependent * unsupported functions that are exported by the Tk library. These * interfaces are not guaranteed to remain the same between * versions. Use at your own risk. * * Copyright (c) 1998-1999 by Scriptics Corporation. * All rights reserved. * | | | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | /* * tkIntPlatDecls.h -- * * This file contains the declarations for all platform dependent * unsupported functions that are exported by the Tk library. These * interfaces are not guaranteed to remain the same between * versions. Use at your own risk. * * Copyright (c) 1998-1999 by Scriptics Corporation. * All rights reserved. * * RCS: @(#) $Id: tkIntPlatDecls.h,v 1.9.2.4 2002/06/10 05:38:23 wolfsuit Exp $ */ #ifndef _TKINTPLATDECLS #define _TKINTPLATDECLS #ifdef BUILD_tk #undef TCL_STORAGE_CLASS |
︙ | ︙ | |||
51 52 53 54 55 56 57 58 59 60 61 62 63 64 | EXTERN int TkUnixDoOneXEvent _ANSI_ARGS_((Tcl_Time * timePtr)); /* 7 */ EXTERN void TkUnixSetMenubar _ANSI_ARGS_((Tk_Window tkwin, Tk_Window menubar)); /* 8 */ EXTERN int TkpScanWindowId _ANSI_ARGS_((Tcl_Interp * interp, CONST char * string, Window * idPtr)); #endif /* UNIX */ #ifdef __WIN32__ /* 0 */ EXTERN char * TkAlignImageData _ANSI_ARGS_((XImage * image, int alignment, int bitOrder)); /* Slot 1 is reserved */ /* 2 */ | > > > > > > > > > | 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 | EXTERN int TkUnixDoOneXEvent _ANSI_ARGS_((Tcl_Time * timePtr)); /* 7 */ EXTERN void TkUnixSetMenubar _ANSI_ARGS_((Tk_Window tkwin, Tk_Window menubar)); /* 8 */ EXTERN int TkpScanWindowId _ANSI_ARGS_((Tcl_Interp * interp, CONST char * string, Window * idPtr)); /* 9 */ EXTERN void TkWmCleanup _ANSI_ARGS_((TkDisplay * dispPtr)); /* 10 */ EXTERN void TkSendCleanup _ANSI_ARGS_((TkDisplay * dispPtr)); /* 11 */ EXTERN void TkFreeXId _ANSI_ARGS_((TkDisplay * dispPtr)); /* 12 */ EXTERN int TkpWmSetState _ANSI_ARGS_((TkWindow * winPtr, int state)); #endif /* UNIX */ #ifdef __WIN32__ /* 0 */ EXTERN char * TkAlignImageData _ANSI_ARGS_((XImage * image, int alignment, int bitOrder)); /* Slot 1 is reserved */ /* 2 */ |
︙ | ︙ | |||
433 434 435 436 437 438 439 440 441 442 443 444 445 446 | void (*tkInitXId) _ANSI_ARGS_((TkDisplay * dispPtr)); /* 2 */ int (*tkpCmapStressed) _ANSI_ARGS_((Tk_Window tkwin, Colormap colormap)); /* 3 */ void (*tkpSync) _ANSI_ARGS_((Display * display)); /* 4 */ Window (*tkUnixContainerId) _ANSI_ARGS_((TkWindow * winPtr)); /* 5 */ int (*tkUnixDoOneXEvent) _ANSI_ARGS_((Tcl_Time * timePtr)); /* 6 */ void (*tkUnixSetMenubar) _ANSI_ARGS_((Tk_Window tkwin, Tk_Window menubar)); /* 7 */ int (*tkpScanWindowId) _ANSI_ARGS_((Tcl_Interp * interp, CONST char * string, Window * idPtr)); /* 8 */ #endif /* UNIX */ #ifdef __WIN32__ char * (*tkAlignImageData) _ANSI_ARGS_((XImage * image, int alignment, int bitOrder)); /* 0 */ void *reserved1; void (*tkGenerateActivateEvents) _ANSI_ARGS_((TkWindow * winPtr, int active)); /* 2 */ unsigned long (*tkpGetMS) _ANSI_ARGS_((void)); /* 3 */ void (*tkPointerDeadWindow) _ANSI_ARGS_((TkWindow * winPtr)); /* 4 */ | > > > > | 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 | void (*tkInitXId) _ANSI_ARGS_((TkDisplay * dispPtr)); /* 2 */ int (*tkpCmapStressed) _ANSI_ARGS_((Tk_Window tkwin, Colormap colormap)); /* 3 */ void (*tkpSync) _ANSI_ARGS_((Display * display)); /* 4 */ Window (*tkUnixContainerId) _ANSI_ARGS_((TkWindow * winPtr)); /* 5 */ int (*tkUnixDoOneXEvent) _ANSI_ARGS_((Tcl_Time * timePtr)); /* 6 */ void (*tkUnixSetMenubar) _ANSI_ARGS_((Tk_Window tkwin, Tk_Window menubar)); /* 7 */ int (*tkpScanWindowId) _ANSI_ARGS_((Tcl_Interp * interp, CONST char * string, Window * idPtr)); /* 8 */ void (*tkWmCleanup) _ANSI_ARGS_((TkDisplay * dispPtr)); /* 9 */ void (*tkSendCleanup) _ANSI_ARGS_((TkDisplay * dispPtr)); /* 10 */ void (*tkFreeXId) _ANSI_ARGS_((TkDisplay * dispPtr)); /* 11 */ int (*tkpWmSetState) _ANSI_ARGS_((TkWindow * winPtr, int state)); /* 12 */ #endif /* UNIX */ #ifdef __WIN32__ char * (*tkAlignImageData) _ANSI_ARGS_((XImage * image, int alignment, int bitOrder)); /* 0 */ void *reserved1; void (*tkGenerateActivateEvents) _ANSI_ARGS_((TkWindow * winPtr, int active)); /* 2 */ unsigned long (*tkpGetMS) _ANSI_ARGS_((void)); /* 3 */ void (*tkPointerDeadWindow) _ANSI_ARGS_((TkWindow * winPtr)); /* 4 */ |
︙ | ︙ | |||
648 649 650 651 652 653 654 655 656 657 658 659 660 661 | #define TkUnixSetMenubar \ (tkIntPlatStubsPtr->tkUnixSetMenubar) /* 7 */ #endif #ifndef TkpScanWindowId #define TkpScanWindowId \ (tkIntPlatStubsPtr->tkpScanWindowId) /* 8 */ #endif #endif /* UNIX */ #ifdef __WIN32__ #ifndef TkAlignImageData #define TkAlignImageData \ (tkIntPlatStubsPtr->tkAlignImageData) /* 0 */ #endif /* Slot 1 is reserved */ | > > > > > > > > > > > > > > > > | 661 662 663 664 665 666 667 668 669 670 671 672 673 674 675 676 677 678 679 680 681 682 683 684 685 686 687 688 689 690 | #define TkUnixSetMenubar \ (tkIntPlatStubsPtr->tkUnixSetMenubar) /* 7 */ #endif #ifndef TkpScanWindowId #define TkpScanWindowId \ (tkIntPlatStubsPtr->tkpScanWindowId) /* 8 */ #endif #ifndef TkWmCleanup #define TkWmCleanup \ (tkIntPlatStubsPtr->tkWmCleanup) /* 9 */ #endif #ifndef TkSendCleanup #define TkSendCleanup \ (tkIntPlatStubsPtr->tkSendCleanup) /* 10 */ #endif #ifndef TkFreeXId #define TkFreeXId \ (tkIntPlatStubsPtr->tkFreeXId) /* 11 */ #endif #ifndef TkpWmSetState #define TkpWmSetState \ (tkIntPlatStubsPtr->tkpWmSetState) /* 12 */ #endif #endif /* UNIX */ #ifdef __WIN32__ #ifndef TkAlignImageData #define TkAlignImageData \ (tkIntPlatStubsPtr->tkAlignImageData) /* 0 */ #endif /* Slot 1 is reserved */ |
︙ | ︙ |
Changes to generic/tkListbox.c.
1 2 3 4 5 6 7 8 9 10 11 12 13 | /* * tkListbox.c -- * * This module implements listbox widgets for the Tk * toolkit. A listbox displays a collection of strings, * one per line, and provides scrolling and selection. * * Copyright (c) 1990-1994 The Regents of the University of California. * Copyright (c) 1994-1997 Sun Microsystems, Inc. * * See the file "license.terms" for information on usage and redistribution * of this file, and for a DISCLAIMER OF ALL WARRANTIES. * | | | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | /* * tkListbox.c -- * * This module implements listbox widgets for the Tk * toolkit. A listbox displays a collection of strings, * one per line, and provides scrolling and selection. * * Copyright (c) 1990-1994 The Regents of the University of California. * Copyright (c) 1994-1997 Sun Microsystems, Inc. * * See the file "license.terms" for information on usage and redistribution * of this file, and for a DISCLAIMER OF ALL WARRANTIES. * * RCS: @(#) $Id: tkListbox.c,v 1.22.2.2 2002/06/10 05:38:23 wolfsuit Exp $ */ #include "tkPort.h" #include "default.h" #include "tkInt.h" typedef struct { |
︙ | ︙ | |||
421 422 423 424 425 426 427 | static ItemAttr * ListboxGetItemAttributes _ANSI_ARGS_ ( (Tcl_Interp *interp, Listbox *listPtr, int index)); static void ListboxWorldChanged _ANSI_ARGS_(( ClientData instanceData)); static int NearestListboxElement _ANSI_ARGS_((Listbox *listPtr, int y)); static char * ListboxListVarProc _ANSI_ARGS_ ((ClientData clientData, | | | 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 | static ItemAttr * ListboxGetItemAttributes _ANSI_ARGS_ ( (Tcl_Interp *interp, Listbox *listPtr, int index)); static void ListboxWorldChanged _ANSI_ARGS_(( ClientData instanceData)); static int NearestListboxElement _ANSI_ARGS_((Listbox *listPtr, int y)); static char * ListboxListVarProc _ANSI_ARGS_ ((ClientData clientData, Tcl_Interp *interp, char *name1, CONST char *name2, int flags)); static void MigrateHashEntries _ANSI_ARGS_ ((Tcl_HashTable *table, int first, int last, int offset)); /* * The structure below defines button class behavior by means of procedures * that can be invoked from generic window code. */ |
︙ | ︙ | |||
1525 1526 1527 1528 1529 1530 1531 | * not already have values for some fields. */ int objc; /* Number of valid entries in argv. */ Tcl_Obj *CONST objv[]; /* Arguments. */ int flags; /* Flags to pass to Tk_ConfigureWidget. */ { Tk_SavedOptions savedOptions; Tcl_Obj *oldListObj = NULL; | > | | > > > > > > | | | > > > > > > > > > | < | | | | | | | | | | | | | | | | | | | | < | | | | | | | | | | | | | | | | | | | | | < < < | < | | > > | < < | > | > | | < > | | < > | | | | | | < | < | | | > > > > > | > > > > | | > | 1525 1526 1527 1528 1529 1530 1531 1532 1533 1534 1535 1536 1537 1538 1539 1540 1541 1542 1543 1544 1545 1546 1547 1548 1549 1550 1551 1552 1553 1554 1555 1556 1557 1558 1559 1560 1561 1562 1563 1564 1565 1566 1567 1568 1569 1570 1571 1572 1573 1574 1575 1576 1577 1578 1579 1580 1581 1582 1583 1584 1585 1586 1587 1588 1589 1590 1591 1592 1593 1594 1595 1596 1597 1598 1599 1600 1601 1602 1603 1604 1605 1606 1607 1608 1609 1610 1611 1612 1613 1614 1615 1616 1617 1618 1619 1620 1621 1622 1623 1624 1625 1626 1627 1628 1629 1630 1631 1632 1633 1634 1635 1636 1637 1638 1639 1640 1641 1642 1643 1644 1645 1646 1647 1648 1649 1650 1651 1652 1653 1654 1655 1656 1657 1658 1659 | * not already have values for some fields. */ int objc; /* Number of valid entries in argv. */ Tcl_Obj *CONST objv[]; /* Arguments. */ int flags; /* Flags to pass to Tk_ConfigureWidget. */ { Tk_SavedOptions savedOptions; Tcl_Obj *oldListObj = NULL; Tcl_Obj *errorResult = NULL; int oldExport, error; oldExport = listPtr->exportSelection; if (listPtr->listVarName != NULL) { Tcl_UntraceVar(interp, listPtr->listVarName, TCL_GLOBAL_ONLY|TCL_TRACE_WRITES|TCL_TRACE_UNSETS, ListboxListVarProc, (ClientData) listPtr); } for (error = 0; error <= 1; error++) { if (!error) { /* * First pass: set options to new values. */ if (Tk_SetOptions(interp, (char *) listPtr, listPtr->optionTable, objc, objv, listPtr->tkwin, &savedOptions, (int *) NULL) != TCL_OK) { continue; } } else { /* * Second pass: restore options to old values. */ errorResult = Tcl_GetObjResult(interp); Tcl_IncrRefCount(errorResult); Tk_RestoreSavedOptions(&savedOptions); } /* * A few options need special processing, such as setting the * background from a 3-D border. */ Tk_SetBackgroundFromBorder(listPtr->tkwin, listPtr->normalBorder); if (listPtr->highlightWidth < 0) { listPtr->highlightWidth = 0; } listPtr->inset = listPtr->highlightWidth + listPtr->borderWidth; /* * Claim the selection if we've suddenly started exporting it and * there is a selection to export. */ if (listPtr->exportSelection && !oldExport && (listPtr->numSelected != 0)) { Tk_OwnSelection(listPtr->tkwin, XA_PRIMARY, ListboxLostSelection, (ClientData) listPtr); } /* Verify the current status of the list var. * PREVIOUS STATE | NEW STATE | ACTION * ---------------+------------+---------------------------------- * no listvar | listvar | If listvar does not exist, create * it and copy the internal list obj's * content to the new var. If it does * exist, toss the internal list obj. * * listvar | no listvar | Copy old listvar content to the * internal list obj * * listvar | listvar | no special action * * no listvar | no listvar | no special action */ oldListObj = listPtr->listObj; if (listPtr->listVarName != NULL) { Tcl_Obj *listVarObj = Tcl_GetVar2Ex(interp, listPtr->listVarName, (char *) NULL, TCL_GLOBAL_ONLY); int dummy; if (listVarObj == NULL) { listVarObj = (oldListObj ? oldListObj : Tcl_NewObj()); if (Tcl_SetVar2Ex(interp, listPtr->listVarName, (char *) NULL, listVarObj, TCL_GLOBAL_ONLY|TCL_LEAVE_ERR_MSG) == NULL) { if (oldListObj == NULL) { Tcl_DecrRefCount(listVarObj); } continue; } } /* Make sure the object is a good list object */ if (Tcl_ListObjLength(listPtr->interp, listVarObj, &dummy) != TCL_OK) { Tcl_AppendResult(listPtr->interp, ": invalid -listvariable value", (char *) NULL); continue; } listPtr->listObj = listVarObj; Tcl_TraceVar(listPtr->interp, listPtr->listVarName, TCL_GLOBAL_ONLY|TCL_TRACE_WRITES|TCL_TRACE_UNSETS, ListboxListVarProc, (ClientData) listPtr); } else if (listPtr->listObj == NULL) { listPtr->listObj = Tcl_NewObj(); } Tcl_IncrRefCount(listPtr->listObj); if (oldListObj != NULL) { Tcl_DecrRefCount(oldListObj); } break; } if (!error) { Tk_FreeSavedOptions(&savedOptions); } /* Make sure that the list length is correct */ Tcl_ListObjLength(listPtr->interp, listPtr->listObj, &listPtr->nElements); if (error) { Tcl_SetObjResult(interp, errorResult); Tcl_DecrRefCount(errorResult); return TCL_ERROR; } else { ListboxWorldChanged((ClientData) listPtr); return TCL_OK; } } /* *---------------------------------------------------------------------- * * ConfigureListboxItem -- * |
︙ | ︙ | |||
3200 3201 3202 3203 3204 3205 3206 | */ static char * ListboxListVarProc(clientData, interp, name1, name2, flags) ClientData clientData; /* Information about button. */ Tcl_Interp *interp; /* Interpreter containing variable. */ char *name1; /* Not used. */ | | | 3220 3221 3222 3223 3224 3225 3226 3227 3228 3229 3230 3231 3232 3233 3234 | */ static char * ListboxListVarProc(clientData, interp, name1, name2, flags) ClientData clientData; /* Information about button. */ Tcl_Interp *interp; /* Interpreter containing variable. */ char *name1; /* Not used. */ CONST char *name2; /* Not used. */ int flags; /* Information about what happened. */ { Listbox *listPtr = (Listbox *)clientData; Tcl_Obj *oldListObj, *varListObj; int oldLength; int i; Tcl_HashEntry *entry; |
︙ | ︙ |
Changes to generic/tkMain.c.
︙ | ︙ | |||
9 10 11 12 13 14 15 | * * Copyright (c) 1990-1994 The Regents of the University of California. * Copyright (c) 1994-1997 Sun Microsystems, Inc. * * See the file "license.terms" for information on usage and redistribution * of this file, and for a DISCLAIMER OF ALL WARRANTIES. * | | | 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | * * Copyright (c) 1990-1994 The Regents of the University of California. * Copyright (c) 1994-1997 Sun Microsystems, Inc. * * See the file "license.terms" for information on usage and redistribution * of this file, and for a DISCLAIMER OF ALL WARRANTIES. * * RCS: @(#) $Id: tkMain.c,v 1.9.2.3 2002/06/10 05:38:23 wolfsuit Exp $ */ #include <ctype.h> #include <stdio.h> #include <string.h> #include <tcl.h> #include <tclInt.h> |
︙ | ︙ | |||
331 332 333 334 335 336 337 | } return; } } (void) Tcl_DStringAppend(&tsdPtr->command, Tcl_DStringValue( &tsdPtr->line), -1); | | < | 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 | } return; } } (void) Tcl_DStringAppend(&tsdPtr->command, Tcl_DStringValue( &tsdPtr->line), -1); cmd = Tcl_DStringAppend(&tsdPtr->command, "\n", -1); Tcl_DStringFree(&tsdPtr->line); if (!Tcl_CommandComplete(cmd)) { gotPartial = 1; goto prompt; } gotPartial = 0; |
︙ | ︙ |
Changes to generic/tkMenu.c.
︙ | ︙ | |||
8 9 10 11 12 13 14 | * * Copyright (c) 1990-1994 The Regents of the University of California. * Copyright (c) 1994-1998 Sun Microsystems, Inc. * * See the file "license.terms" for information on usage and redistribution * of this file, and for a DISCLAIMER OF ALL WARRANTIES. * | | | 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | * * Copyright (c) 1990-1994 The Regents of the University of California. * Copyright (c) 1994-1998 Sun Microsystems, Inc. * * See the file "license.terms" for information on usage and redistribution * of this file, and for a DISCLAIMER OF ALL WARRANTIES. * * RCS: @(#) $Id: tkMenu.c,v 1.13.2.2 2002/06/10 05:38:23 wolfsuit Exp $ */ /* * Notes on implementation of menus: * * Menus can be used in three ways: * - as a popup menu, either as part of a menubutton or standalone. |
︙ | ︙ | |||
356 357 358 359 360 361 362 | Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[])); static void MenuCmdDeletedProc _ANSI_ARGS_(( ClientData clientData)); static TkMenuEntry * MenuNewEntry _ANSI_ARGS_((TkMenu *menuPtr, int index, int type)); static char * MenuVarProc _ANSI_ARGS_((ClientData clientData, | | | 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 | Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[])); static void MenuCmdDeletedProc _ANSI_ARGS_(( ClientData clientData)); static TkMenuEntry * MenuNewEntry _ANSI_ARGS_((TkMenu *menuPtr, int index, int type)); static char * MenuVarProc _ANSI_ARGS_((ClientData clientData, Tcl_Interp *interp, char *name1, CONST char *name2, int flags)); static int MenuWidgetObjCmd _ANSI_ARGS_((ClientData clientData, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[])); static void MenuWorldChanged _ANSI_ARGS_(( ClientData instanceData)); static int PostProcessEntry _ANSI_ARGS_((TkMenuEntry *mePtr)); |
︙ | ︙ | |||
1532 1533 1534 1535 1536 1537 1538 1539 1540 1541 1542 1543 1544 1545 | for (cleanupPtr = menuPtr->masterMenuPtr; cleanupPtr != menuListPtr; cleanupPtr = cleanupPtr->nextInstancePtr) { Tk_RestoreSavedOptions(cleanupPtr->errorStructPtr); ckfree((char *) cleanupPtr->errorStructPtr); cleanupPtr->errorStructPtr = NULL; } return TCL_ERROR; } /* * When a menu is created, the type is in all of the arguments * to the menu command. Let Tk_ConfigureWidget take care of * parsing them, and then set the type after we can look at | > > > > > | 1532 1533 1534 1535 1536 1537 1538 1539 1540 1541 1542 1543 1544 1545 1546 1547 1548 1549 1550 | for (cleanupPtr = menuPtr->masterMenuPtr; cleanupPtr != menuListPtr; cleanupPtr = cleanupPtr->nextInstancePtr) { Tk_RestoreSavedOptions(cleanupPtr->errorStructPtr); ckfree((char *) cleanupPtr->errorStructPtr); cleanupPtr->errorStructPtr = NULL; } if (menuListPtr->errorStructPtr != NULL) { Tk_RestoreSavedOptions(menuListPtr->errorStructPtr); ckfree((char *) menuListPtr->errorStructPtr); menuListPtr->errorStructPtr = NULL; } return TCL_ERROR; } /* * When a menu is created, the type is in all of the arguments * to the menu command. Let Tk_ConfigureWidget take care of * parsing them, and then set the type after we can look at |
︙ | ︙ | |||
1572 1573 1574 1575 1576 1577 1578 | * isn't an initial tear-off entry at the beginning of the menu. */ if (menuListPtr->tearoff) { if ((menuListPtr->numEntries == 0) || (menuListPtr->entries[0]->type != TEAROFF_ENTRY)) { if (MenuNewEntry(menuListPtr, 0, TEAROFF_ENTRY) == NULL) { | < | | | < < < < > > > > > | 1577 1578 1579 1580 1581 1582 1583 1584 1585 1586 1587 1588 1589 1590 1591 1592 1593 1594 1595 1596 1597 1598 1599 1600 1601 | * isn't an initial tear-off entry at the beginning of the menu. */ if (menuListPtr->tearoff) { if ((menuListPtr->numEntries == 0) || (menuListPtr->entries[0]->type != TEAROFF_ENTRY)) { if (MenuNewEntry(menuListPtr, 0, TEAROFF_ENTRY) == NULL) { for (cleanupPtr = menuPtr->masterMenuPtr; cleanupPtr != menuListPtr; cleanupPtr = cleanupPtr->nextInstancePtr) { Tk_RestoreSavedOptions(cleanupPtr->errorStructPtr); ckfree((char *) cleanupPtr->errorStructPtr); cleanupPtr->errorStructPtr = NULL; } if (menuListPtr->errorStructPtr != NULL) { Tk_RestoreSavedOptions(menuListPtr->errorStructPtr); ckfree((char *) menuListPtr->errorStructPtr); menuListPtr->errorStructPtr = NULL; } return TCL_ERROR; } } } else if ((menuListPtr->numEntries > 0) && (menuListPtr->entries[0]->type == TEAROFF_ENTRY)) { int i; |
︙ | ︙ | |||
2460 2461 2462 2463 2464 2465 2466 | */ static char * MenuVarProc(clientData, interp, name1, name2, flags) ClientData clientData; /* Information about menu entry. */ Tcl_Interp *interp; /* Interpreter containing variable. */ char *name1; /* First part of variable's name. */ | | | 2465 2466 2467 2468 2469 2470 2471 2472 2473 2474 2475 2476 2477 2478 2479 | */ static char * MenuVarProc(clientData, interp, name1, name2, flags) ClientData clientData; /* Information about menu entry. */ Tcl_Interp *interp; /* Interpreter containing variable. */ char *name1; /* First part of variable's name. */ CONST char *name2; /* Second part of variable's name. */ int flags; /* Describes what just happened. */ { TkMenuEntry *mePtr = (TkMenuEntry *) clientData; TkMenu *menuPtr; CONST char *value; char *name = Tcl_GetStringFromObj(mePtr->namePtr, NULL); char *onValue; |
︙ | ︙ |
Changes to generic/tkMenubutton.c.
1 2 3 4 5 6 7 8 9 10 11 12 | /* * tkMenubutton.c -- * * This module implements button-like widgets that are used * to invoke pull-down menus. * * Copyright (c) 1990-1994 The Regents of the University of California. * Copyright (c) 1994-1997 Sun Microsystems, Inc. * * See the file "license.terms" for information on usage and redistribution * of this file, and for a DISCLAIMER OF ALL WARRANTIES. * | | | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | /* * tkMenubutton.c -- * * This module implements button-like widgets that are used * to invoke pull-down menus. * * Copyright (c) 1990-1994 The Regents of the University of California. * Copyright (c) 1994-1997 Sun Microsystems, Inc. * * See the file "license.terms" for information on usage and redistribution * of this file, and for a DISCLAIMER OF ALL WARRANTIES. * * RCS: @(#) $Id: tkMenubutton.c,v 1.8.2.2 2002/06/10 05:38:23 wolfsuit Exp $ */ #include "tkMenubutton.h" #include "tkPort.h" #include "default.h" /* |
︙ | ︙ | |||
172 173 174 175 176 177 178 | static void MenuButtonEventProc _ANSI_ARGS_((ClientData clientData, XEvent *eventPtr)); static void MenuButtonImageProc _ANSI_ARGS_((ClientData clientData, int x, int y, int width, int height, int imgWidth, int imgHeight)); static char * MenuButtonTextVarProc _ANSI_ARGS_(( ClientData clientData, Tcl_Interp *interp, | | | 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 | static void MenuButtonEventProc _ANSI_ARGS_((ClientData clientData, XEvent *eventPtr)); static void MenuButtonImageProc _ANSI_ARGS_((ClientData clientData, int x, int y, int width, int height, int imgWidth, int imgHeight)); static char * MenuButtonTextVarProc _ANSI_ARGS_(( ClientData clientData, Tcl_Interp *interp, char *name1, CONST char *name2, int flags)); static int MenuButtonWidgetObjCmd _ANSI_ARGS_(( ClientData clientData, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[])); static int ConfigureMenuButton _ANSI_ARGS_((Tcl_Interp *interp, TkMenuButton *mbPtr, int objc, Tcl_Obj *CONST objv[])); static void DestroyMenuButton _ANSI_ARGS_((char *memPtr)); |
︙ | ︙ | |||
864 865 866 867 868 869 870 | /* ARGSUSED */ static char * MenuButtonTextVarProc(clientData, interp, name1, name2, flags) ClientData clientData; /* Information about button. */ Tcl_Interp *interp; /* Interpreter containing variable. */ char *name1; /* Name of variable. */ | | | 864 865 866 867 868 869 870 871 872 873 874 875 876 877 878 | /* ARGSUSED */ static char * MenuButtonTextVarProc(clientData, interp, name1, name2, flags) ClientData clientData; /* Information about button. */ Tcl_Interp *interp; /* Interpreter containing variable. */ char *name1; /* Name of variable. */ CONST char *name2; /* Second part of variable name. */ int flags; /* Information about what happened. */ { register TkMenuButton *mbPtr = (TkMenuButton *) clientData; CONST char *value; /* * If the variable is unset, then immediately recreate it unless |
︙ | ︙ |
Changes to generic/tkMessage.c.
︙ | ︙ | |||
8 9 10 11 12 13 14 | * Copyright (c) 1990-1994 The Regents of the University of California. * Copyright (c) 1994-1997 Sun Microsystems, Inc. * Copyright (c) 1998-2000 by Ajuba Solutions. * * See the file "license.terms" for information on usage and redistribution * of this file, and for a DISCLAIMER OF ALL WARRANTIES. * | | | 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | * Copyright (c) 1990-1994 The Regents of the University of California. * Copyright (c) 1994-1997 Sun Microsystems, Inc. * Copyright (c) 1998-2000 by Ajuba Solutions. * * See the file "license.terms" for information on usage and redistribution * of this file, and for a DISCLAIMER OF ALL WARRANTIES. * * RCS: @(#) $Id: tkMessage.c,v 1.10.2.2 2002/06/10 05:38:23 wolfsuit Exp $ */ #include "tkPort.h" #include "default.h" #include "tkInt.h" /* |
︙ | ︙ | |||
172 173 174 175 176 177 178 | */ static void MessageCmdDeletedProc _ANSI_ARGS_(( ClientData clientData)); static void MessageEventProc _ANSI_ARGS_((ClientData clientData, XEvent *eventPtr)); static char * MessageTextVarProc _ANSI_ARGS_((ClientData clientData, | | | 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 | */ static void MessageCmdDeletedProc _ANSI_ARGS_(( ClientData clientData)); static void MessageEventProc _ANSI_ARGS_((ClientData clientData, XEvent *eventPtr)); static char * MessageTextVarProc _ANSI_ARGS_((ClientData clientData, Tcl_Interp *interp, char *name1, CONST char *name2, int flags)); static int MessageWidgetObjCmd _ANSI_ARGS_((ClientData clientData, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[])); static void MessageWorldChanged _ANSI_ARGS_(( ClientData instanceData)); static void ComputeMessageGeometry _ANSI_ARGS_((Message *msgPtr)); |
︙ | ︙ | |||
844 845 846 847 848 849 850 | /* ARGSUSED */ static char * MessageTextVarProc(clientData, interp, name1, name2, flags) ClientData clientData; /* Information about message. */ Tcl_Interp *interp; /* Interpreter containing variable. */ char *name1; /* Name of variable. */ | | | 844 845 846 847 848 849 850 851 852 853 854 855 856 857 858 | /* ARGSUSED */ static char * MessageTextVarProc(clientData, interp, name1, name2, flags) ClientData clientData; /* Information about message. */ Tcl_Interp *interp; /* Interpreter containing variable. */ char *name1; /* Name of variable. */ CONST char *name2; /* Second part of variable name. */ int flags; /* Information about what happened. */ { register Message *msgPtr = (Message *) clientData; CONST char *value; /* * If the variable is unset, then immediately recreate it unless |
︙ | ︙ |
Changes to generic/tkOldConfig.c.
1 2 3 4 5 6 7 8 9 10 11 12 13 | /* * tkOldConfig.c -- * * This file contains the Tk_ConfigureWidget procedure. THIS FILE * IS HERE FOR BACKWARD COMPATIBILITY; THE NEW CONFIGURATION * PACKAGE SHOULD BE USED FOR NEW PROJECTS. * * Copyright (c) 1990-1994 The Regents of the University of California. * Copyright (c) 1994-1997 Sun Microsystems, Inc. * * See the file "license.terms" for information on usage and redistribution * of this file, and for a DISCLAIMER OF ALL WARRANTIES. * | | | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | /* * tkOldConfig.c -- * * This file contains the Tk_ConfigureWidget procedure. THIS FILE * IS HERE FOR BACKWARD COMPATIBILITY; THE NEW CONFIGURATION * PACKAGE SHOULD BE USED FOR NEW PROJECTS. * * Copyright (c) 1990-1994 The Regents of the University of California. * Copyright (c) 1994-1997 Sun Microsystems, Inc. * * See the file "license.terms" for information on usage and redistribution * of this file, and for a DISCLAIMER OF ALL WARRANTIES. * * RCS: @(#) $Id: tkOldConfig.c,v 1.9.6.2 2002/06/10 05:38:23 wolfsuit Exp $ */ #include "tkPort.h" #include "tk.h" /* * Values for "flags" field of Tk_ConfigSpec structures. Be sure |
︙ | ︙ | |||
937 938 939 940 941 942 943 944 945 946 947 948 949 950 | } specPtr = FindConfigSpec(interp, specs, argvName, needFlags, hateFlags); if (specPtr == NULL) { return TCL_ERROR; } interp->result = FormatConfigValue(interp, tkwin, specPtr, widgRec, interp->result, &interp->freeProc); return TCL_OK; } /* *---------------------------------------------------------------------- * * Tk_FreeOptions -- | > > > > > > | 937 938 939 940 941 942 943 944 945 946 947 948 949 950 951 952 953 954 955 956 | } specPtr = FindConfigSpec(interp, specs, argvName, needFlags, hateFlags); if (specPtr == NULL) { return TCL_ERROR; } interp->result = FormatConfigValue(interp, tkwin, specPtr, widgRec, interp->result, &interp->freeProc); /* * Don't let the interp->result be NULL. */ if (interp->result == NULL) { interp->result = ""; } return TCL_OK; } /* *---------------------------------------------------------------------- * * Tk_FreeOptions -- |
︙ | ︙ |
Changes to generic/tkOption.c.
1 2 3 4 5 6 7 8 9 10 11 12 13 | /* * tkOption.c -- * * This module contains procedures to manage the option * database, which allows various strings to be associated * with windows either by name or by class or both. * * Copyright (c) 1990-1994 The Regents of the University of California. * Copyright (c) 1994-1997 Sun Microsystems, Inc. * * See the file "license.terms" for information on usage and redistribution * of this file, and for a DISCLAIMER OF ALL WARRANTIES. * | | | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | /* * tkOption.c -- * * This module contains procedures to manage the option * database, which allows various strings to be associated * with windows either by name or by class or both. * * Copyright (c) 1990-1994 The Regents of the University of California. * Copyright (c) 1994-1997 Sun Microsystems, Inc. * * See the file "license.terms" for information on usage and redistribution * of this file, and for a DISCLAIMER OF ALL WARRANTIES. * * RCS: @(#) $Id: tkOption.c,v 1.8.6.2 2002/06/10 05:38:23 wolfsuit Exp $ */ #include "tkPort.h" #include "tkInt.h" /* * The option database is stored as one tree for each main window. |
︙ | ︙ | |||
231 232 233 234 235 236 237 238 239 240 241 242 243 244 | static ElArray * ExtendArray _ANSI_ARGS_((ElArray *arrayPtr, Element *elPtr)); static void ExtendStacks _ANSI_ARGS_((ElArray *arrayPtr, int leaf)); static int GetDefaultOptions _ANSI_ARGS_((Tcl_Interp *interp, TkWindow *winPtr)); static ElArray * NewArray _ANSI_ARGS_((int numEls)); static void OptionInit _ANSI_ARGS_((TkMainInfo *mainPtr)); static int ParsePriority _ANSI_ARGS_((Tcl_Interp *interp, char *string)); static int ReadOptionFile _ANSI_ARGS_((Tcl_Interp *interp, Tk_Window tkwin, char *fileName, int priority)); static void SetupStacks _ANSI_ARGS_((TkWindow *winPtr, int leaf)); | > > | 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 | static ElArray * ExtendArray _ANSI_ARGS_((ElArray *arrayPtr, Element *elPtr)); static void ExtendStacks _ANSI_ARGS_((ElArray *arrayPtr, int leaf)); static int GetDefaultOptions _ANSI_ARGS_((Tcl_Interp *interp, TkWindow *winPtr)); static ElArray * NewArray _ANSI_ARGS_((int numEls)); static void OptionThreadExitProc _ANSI_ARGS_(( ClientData clientData)); static void OptionInit _ANSI_ARGS_((TkMainInfo *mainPtr)); static int ParsePriority _ANSI_ARGS_((Tcl_Interp *interp, char *string)); static int ReadOptionFile _ANSI_ARGS_((Tcl_Interp *interp, Tk_Window tkwin, char *fileName, int priority)); static void SetupStacks _ANSI_ARGS_((TkWindow *winPtr, int leaf)); |
︙ | ︙ | |||
554 555 556 557 558 559 560 561 562 563 564 565 566 567 | classNameLength = (unsigned int)(masqName - name); masqClass = (char *)malloc(classNameLength + 1); strncpy(masqClass, name, classNameLength); masqClass[classNameLength] = '\0'; winClassId = Tk_GetUid(masqClass); winNameId = ((TkWindow *)tkwin)->nameUid; levelPtr = &tsdPtr->levels[tsdPtr->curLevel]; for (currentPtr = searchOrder; *currentPtr != -1; currentPtr++) { currentStack = *currentPtr; nodePtr = tsdPtr->stacks[currentStack]->els; | > | 556 557 558 559 560 561 562 563 564 565 566 567 568 569 570 | classNameLength = (unsigned int)(masqName - name); masqClass = (char *)malloc(classNameLength + 1); strncpy(masqClass, name, classNameLength); masqClass[classNameLength] = '\0'; winClassId = Tk_GetUid(masqClass); ckfree(masqClass); winNameId = ((TkWindow *)tkwin)->nameUid; levelPtr = &tsdPtr->levels[tsdPtr->curLevel]; for (currentPtr = searchOrder; *currentPtr != -1; currentPtr++) { currentStack = *currentPtr; nodePtr = tsdPtr->stacks[currentStack]->els; |
︙ | ︙ | |||
1121 1122 1123 1124 1125 1126 1127 | } /* * Compute size of file by seeking to the end of the file. This will * overallocate if we are performing CRLF translation. */ | | | | 1124 1125 1126 1127 1128 1129 1130 1131 1132 1133 1134 1135 1136 1137 1138 1139 | } /* * Compute size of file by seeking to the end of the file. This will * overallocate if we are performing CRLF translation. */ bufferSize = (int) Tcl_Seek(chan, (Tcl_WideInt) 0, SEEK_END); (void) Tcl_Seek(chan, (Tcl_WideInt) 0, SEEK_SET); if (bufferSize < 0) { Tcl_AppendResult(interp, "error seeking to end of file \"", fileName, "\":", Tcl_PosixError(interp), (char *) NULL); Tcl_Close(NULL, chan); return TCL_ERROR; |
︙ | ︙ | |||
1433 1434 1435 1436 1437 1438 1439 1440 1441 1442 1443 1444 1445 1446 | tsdPtr->stacks[elPtr->flags], elPtr); } } /* *-------------------------------------------------------------- * * OptionInit -- * * Initialize data structures for option handling. * * Results: * None. * | > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1436 1437 1438 1439 1440 1441 1442 1443 1444 1445 1446 1447 1448 1449 1450 1451 1452 1453 1454 1455 1456 1457 1458 1459 1460 1461 1462 1463 1464 1465 1466 1467 1468 1469 1470 1471 1472 1473 1474 1475 1476 1477 1478 1479 1480 1481 1482 | tsdPtr->stacks[elPtr->flags], elPtr); } } /* *-------------------------------------------------------------- * * OptionThreadExitProc -- * * Free data structures for option handling. * * Results: * None. * * Side effects: * Option-related data structures get freed. * *-------------------------------------------------------------- */ static void OptionThreadExitProc(clientData) ClientData clientData; /* not used */ { ThreadSpecificData *tsdPtr = (ThreadSpecificData *) Tcl_GetThreadData(&dataKey, sizeof(ThreadSpecificData)); if (tsdPtr->initialized) { int i; for (i = 0; i < NUM_STACKS; i++) { ckfree((char *) tsdPtr->stacks[i]); } ckfree((char *) tsdPtr->levels); tsdPtr->initialized = 0; } } /* *-------------------------------------------------------------- * * OptionInit -- * * Initialize data structures for option handling. * * Results: * None. * |
︙ | ︙ | |||
1480 1481 1482 1483 1484 1485 1486 1487 1488 1489 1490 1491 1492 1493 | tsdPtr->levels[0].bases[i] = 0; } defaultMatchPtr->nameUid = NULL; defaultMatchPtr->child.valueUid = NULL; defaultMatchPtr->priority = -1; defaultMatchPtr->flags = 0; } /* * Then, per-main-window initialization. Create and delete dummy * interpreter for message logging. */ | > | 1516 1517 1518 1519 1520 1521 1522 1523 1524 1525 1526 1527 1528 1529 1530 | tsdPtr->levels[0].bases[i] = 0; } defaultMatchPtr->nameUid = NULL; defaultMatchPtr->child.valueUid = NULL; defaultMatchPtr->priority = -1; defaultMatchPtr->flags = 0; Tcl_CreateThreadExitHandler(OptionThreadExitProc, NULL); } /* * Then, per-main-window initialization. Create and delete dummy * interpreter for message logging. */ |
︙ | ︙ |
Changes to generic/tkPanedWindow.c.
︙ | ︙ | |||
8 9 10 11 12 13 14 | * * Copyright (c) 1997 Sun Microsystems, Inc. * Copyright (c) 2000 Ajuba Solutions. * * See the file "license.terms" for information on usage and redistribution * of this file, and for a DISCLAIMER OF ALL WARRANTIES. * | | | 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | * * Copyright (c) 1997 Sun Microsystems, Inc. * Copyright (c) 2000 Ajuba Solutions. * * See the file "license.terms" for information on usage and redistribution * of this file, and for a DISCLAIMER OF ALL WARRANTIES. * * RCS: @(#) $Id: tkPanedWindow.c,v 1.3.2.2 2002/06/10 05:38:23 wolfsuit Exp $ */ #include "tkPort.h" #include "default.h" #include "tkInt.h" #if ((TCL_MAJOR_VERSION > 8) || (TCL_MAJOR_VERSION == 8 && TCL_MINOR_VERSION >= 4)) |
︙ | ︙ |
Changes to generic/tkScale.c.
︙ | ︙ | |||
14 15 16 17 18 19 20 | * Copyright (c) 1990-1994 The Regents of the University of California. * Copyright (c) 1994-1997 Sun Microsystems, Inc. * Copyright (c) 1998-2000 by Scriptics Corporation. * * See the file "license.terms" for information on usage and redistribution * of this file, and for a DISCLAIMER OF ALL WARRANTIES. * | | | 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 | * Copyright (c) 1990-1994 The Regents of the University of California. * Copyright (c) 1994-1997 Sun Microsystems, Inc. * Copyright (c) 1998-2000 by Scriptics Corporation. * * See the file "license.terms" for information on usage and redistribution * of this file, and for a DISCLAIMER OF ALL WARRANTIES. * * RCS: @(#) $Id: tkScale.c,v 1.14.2.2 2002/06/10 05:38:23 wolfsuit Exp $ */ #include "tkPort.h" #include "default.h" #include "tkInt.h" #include "tclMath.h" #include "tkScale.h" |
︙ | ︙ | |||
167 168 169 170 171 172 173 | Tcl_Obj *CONST objv[])); static void DestroyScale _ANSI_ARGS_((char *memPtr)); static void ScaleCmdDeletedProc _ANSI_ARGS_(( ClientData clientData)); static void ScaleEventProc _ANSI_ARGS_((ClientData clientData, XEvent *eventPtr)); static char * ScaleVarProc _ANSI_ARGS_((ClientData clientData, | | | 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 | Tcl_Obj *CONST objv[])); static void DestroyScale _ANSI_ARGS_((char *memPtr)); static void ScaleCmdDeletedProc _ANSI_ARGS_(( ClientData clientData)); static void ScaleEventProc _ANSI_ARGS_((ClientData clientData, XEvent *eventPtr)); static char * ScaleVarProc _ANSI_ARGS_((ClientData clientData, Tcl_Interp *interp, char *name1, CONST char *name2, int flags)); static int ScaleWidgetObjCmd _ANSI_ARGS_((ClientData clientData, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[])); static void ScaleWorldChanged _ANSI_ARGS_(( ClientData instanceData)); static void ScaleSetVariable _ANSI_ARGS_((TkScale *scalePtr)); |
︙ | ︙ | |||
1182 1183 1184 1185 1186 1187 1188 | /* ARGSUSED */ static char * ScaleVarProc(clientData, interp, name1, name2, flags) ClientData clientData; /* Information about button. */ Tcl_Interp *interp; /* Interpreter containing variable. */ char *name1; /* Name of variable. */ | | | 1182 1183 1184 1185 1186 1187 1188 1189 1190 1191 1192 1193 1194 1195 1196 | /* ARGSUSED */ static char * ScaleVarProc(clientData, interp, name1, name2, flags) ClientData clientData; /* Information about button. */ Tcl_Interp *interp; /* Interpreter containing variable. */ char *name1; /* Name of variable. */ CONST char *name2; /* Second part of variable name. */ int flags; /* Information about what happened. */ { register TkScale *scalePtr = (TkScale *) clientData; char *resultStr; double value; Tcl_Obj *valuePtr; int result; |
︙ | ︙ |
Changes to generic/tkStubInit.c.
1 2 3 4 5 6 7 8 9 10 | /* * tkStubInit.c -- * * This file contains the initializers for the Tk stub vectors. * * Copyright (c) 1998-1999 by Scriptics Corporation. * * See the file "license.terms" for information on usage and redistribution * of this file, and for a DISCLAIMER OF ALL WARRANTIES. * | | | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | /* * tkStubInit.c -- * * This file contains the initializers for the Tk stub vectors. * * Copyright (c) 1998-1999 by Scriptics Corporation. * * See the file "license.terms" for information on usage and redistribution * of this file, and for a DISCLAIMER OF ALL WARRANTIES. * * RCS: @(#) $Id: tkStubInit.c,v 1.28.2.5 2002/06/10 05:38:24 wolfsuit Exp $ */ #include "tkInt.h" #include "tkPort.h" #if !(defined(__WIN32__) && defined(MAC_TCL) || defined(MAC_OSX_TK)) /* UNIX */ |
︙ | ︙ | |||
307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 | TkpDrawHighlightBorder, /* 135 */ TkSetFocusWin, /* 136 */ TkpSetKeycodeAndState, /* 137 */ TkpGetKeySym, /* 138 */ TkpInitKeymapInfo, /* 139 */ TkPhotoGetValidRegion, /* 140 */ TkWmStackorderToplevel, /* 141 */ }; TkIntPlatStubs tkIntPlatStubs = { TCL_STUB_MAGIC, NULL, #if !(defined(__WIN32__) || defined(MAC_TCL) || defined(MAC_OSX_TK))/* UNIX */ TkCreateXEventSource, /* 0 */ TkFreeWindowId, /* 1 */ TkInitXId, /* 2 */ TkpCmapStressed, /* 3 */ TkpSync, /* 4 */ TkUnixContainerId, /* 5 */ TkUnixDoOneXEvent, /* 6 */ TkUnixSetMenubar, /* 7 */ TkpScanWindowId, /* 8 */ #endif /* UNIX */ #ifdef __WIN32__ TkAlignImageData, /* 0 */ NULL, /* 1 */ TkGenerateActivateEvents, /* 2 */ TkpGetMS, /* 3 */ TkPointerDeadWindow, /* 4 */ | > > > > > > > | 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 | TkpDrawHighlightBorder, /* 135 */ TkSetFocusWin, /* 136 */ TkpSetKeycodeAndState, /* 137 */ TkpGetKeySym, /* 138 */ TkpInitKeymapInfo, /* 139 */ TkPhotoGetValidRegion, /* 140 */ TkWmStackorderToplevel, /* 141 */ TkFocusFree, /* 142 */ TkClipCleanup, /* 143 */ TkGCCleanup, /* 144 */ }; TkIntPlatStubs tkIntPlatStubs = { TCL_STUB_MAGIC, NULL, #if !(defined(__WIN32__) || defined(MAC_TCL) || defined(MAC_OSX_TK))/* UNIX */ TkCreateXEventSource, /* 0 */ TkFreeWindowId, /* 1 */ TkInitXId, /* 2 */ TkpCmapStressed, /* 3 */ TkpSync, /* 4 */ TkUnixContainerId, /* 5 */ TkUnixDoOneXEvent, /* 6 */ TkUnixSetMenubar, /* 7 */ TkpScanWindowId, /* 8 */ TkWmCleanup, /* 9 */ TkSendCleanup, /* 10 */ TkFreeXId, /* 11 */ TkpWmSetState, /* 12 */ #endif /* UNIX */ #ifdef __WIN32__ TkAlignImageData, /* 0 */ NULL, /* 1 */ TkGenerateActivateEvents, /* 2 */ TkpGetMS, /* 3 */ TkPointerDeadWindow, /* 4 */ |
︙ | ︙ | |||
1078 1079 1080 1081 1082 1083 1084 1085 1086 1087 1088 1089 1090 1091 | Tk_PostscriptPhoto, /* 238 */ Tk_CreateClientMessageHandler, /* 239 */ Tk_DeleteClientMessageHandler, /* 240 */ Tk_CreateAnonymousWindow, /* 241 */ Tk_SetClassProcs, /* 242 */ Tk_SetInternalBorderEx, /* 243 */ Tk_SetMinimumRequestSize, /* 244 */ }; /* !END!: Do not edit above this line. */ #undef UNIX_TK #undef MAC_TK #undef MAC_OSX_TK | > | 1085 1086 1087 1088 1089 1090 1091 1092 1093 1094 1095 1096 1097 1098 1099 | Tk_PostscriptPhoto, /* 238 */ Tk_CreateClientMessageHandler, /* 239 */ Tk_DeleteClientMessageHandler, /* 240 */ Tk_CreateAnonymousWindow, /* 241 */ Tk_SetClassProcs, /* 242 */ Tk_SetInternalBorderEx, /* 243 */ Tk_SetMinimumRequestSize, /* 244 */ Tk_SetCaretPos, /* 245 */ }; /* !END!: Do not edit above this line. */ #undef UNIX_TK #undef MAC_TK #undef MAC_OSX_TK |
Changes to generic/tkText.c.
︙ | ︙ | |||
10 11 12 13 14 15 16 | * Copyright (c) 1992-1994 The Regents of the University of California. * Copyright (c) 1994-1996 Sun Microsystems, Inc. * Copyright (c) 1999 by Scriptics Corporation. * * See the file "license.terms" for information on usage and redistribution * of this file, and for a DISCLAIMER OF ALL WARRANTIES. * | | | 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 | * Copyright (c) 1992-1994 The Regents of the University of California. * Copyright (c) 1994-1996 Sun Microsystems, Inc. * Copyright (c) 1999 by Scriptics Corporation. * * See the file "license.terms" for information on usage and redistribution * of this file, and for a DISCLAIMER OF ALL WARRANTIES. * * RCS: @(#) $Id: tkText.c,v 1.18.4.4 2002/06/10 05:38:24 wolfsuit Exp $ */ #include "default.h" #include "tkPort.h" #include "tkInt.h" #if defined(MAC_TCL) || defined(MAC_OSX_TK) |
︙ | ︙ | |||
966 967 968 969 970 971 972 973 974 975 976 977 978 979 | if (TkBTreeCharTagged(&first, textPtr->selTagPtr) || TkBTreeNextTag(&search)) { Tk_OwnSelection(textPtr->tkwin, XA_PRIMARY, TkTextLostSelection, (ClientData) textPtr); textPtr->flags |= GOT_SELECTION; } } /* * Register the desired geometry for the window, and arrange for * the window to be redisplayed. */ if (textPtr->width <= 0) { | > > > > > > > > > > | 966 967 968 969 970 971 972 973 974 975 976 977 978 979 980 981 982 983 984 985 986 987 988 989 | if (TkBTreeCharTagged(&first, textPtr->selTagPtr) || TkBTreeNextTag(&search)) { Tk_OwnSelection(textPtr->tkwin, XA_PRIMARY, TkTextLostSelection, (ClientData) textPtr); textPtr->flags |= GOT_SELECTION; } } /* * Account for state changes that would reenable blinking cursor state. */ if (textPtr->flags & GOT_FOCUS) { Tcl_DeleteTimerHandler(textPtr->insertBlinkHandler); textPtr->insertBlinkHandler = (Tcl_TimerToken) NULL; TextBlinkProc((ClientData) textPtr); } /* * Register the desired geometry for the window, and arrange for * the window to be redisplayed. */ if (textPtr->width <= 0) { |
︙ | ︙ |
Changes to generic/tkTextDisp.c.
1 2 3 4 5 6 7 8 9 10 11 12 13 | /* * tkTextDisp.c -- * * This module provides facilities to display text widgets. It is * the only place where information is kept about the screen layout * of text widgets. * * Copyright (c) 1992-1994 The Regents of the University of California. * Copyright (c) 1994-1997 Sun Microsystems, Inc. * * See the file "license.terms" for information on usage and redistribution * of this file, and for a DISCLAIMER OF ALL WARRANTIES. * | | | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | /* * tkTextDisp.c -- * * This module provides facilities to display text widgets. It is * the only place where information is kept about the screen layout * of text widgets. * * Copyright (c) 1992-1994 The Regents of the University of California. * Copyright (c) 1994-1997 Sun Microsystems, Inc. * * See the file "license.terms" for information on usage and redistribution * of this file, and for a DISCLAIMER OF ALL WARRANTIES. * * RCS: @(#) $Id: tkTextDisp.c,v 1.9.8.1 2002/06/10 05:38:24 wolfsuit Exp $ */ #include "tkPort.h" #include "tkInt.h" #include "tkText.h" #ifdef __WIN32__ |
︙ | ︙ | |||
91 92 93 94 95 96 97 98 99 100 101 102 103 104 | #define SAME_BACKGROUND(s1, s2) \ (((s1)->sValuePtr->border == (s2)->sValuePtr->border) \ && ((s1)->sValuePtr->borderWidth == (s2)->sValuePtr->borderWidth) \ && ((s1)->sValuePtr->relief == (s2)->sValuePtr->relief) \ && ((s1)->sValuePtr->bgStipple == (s2)->sValuePtr->bgStipple)) /* * The following structure describes one line of the display, which may * be either part or all of one line of the text. */ typedef struct DLine { TkTextIndex index; /* Identifies first character in text | > > > > > > > > > > | 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 | #define SAME_BACKGROUND(s1, s2) \ (((s1)->sValuePtr->border == (s2)->sValuePtr->border) \ && ((s1)->sValuePtr->borderWidth == (s2)->sValuePtr->borderWidth) \ && ((s1)->sValuePtr->relief == (s2)->sValuePtr->relief) \ && ((s1)->sValuePtr->bgStipple == (s2)->sValuePtr->bgStipple)) /* * The following macro is used to compare two floating-point numbers * to within a certain degree of scale. Direct comparison fails on * processors where the processor and memory representations of FP * numbers of a particular precision is different (e.g. Intel) */ #define FP_EQUAL_SCALE(double1, double2, scaleFactor) \ (fabs((double1)-(double2))*((scaleFactor)+1.0) < 0.3) /* * The following structure describes one line of the display, which may * be either part or all of one line of the text. */ typedef struct DLine { TkTextIndex index; /* Identifies first character in text |
︙ | ︙ | |||
1876 1877 1878 1879 1880 1881 1882 1883 1884 1885 1886 1887 1888 1889 | } sValuePtr = chunkPtr->stylePtr->sValuePtr; rightX = chunkPtr->x + chunkPtr->width; if ((chunkPtr->nextPtr == NULL) && (rightX < maxX)) { rightX = maxX; } if (chunkPtr->stylePtr->bgGC != None) { XFillRectangle(display, pixmap, chunkPtr->stylePtr->bgGC, leftX + xOffset, 0, (unsigned int) (rightX - leftX), (unsigned int) dlPtr->height); if (sValuePtr->relief != TK_RELIEF_FLAT) { Tk_3DVerticalBevel(textPtr->tkwin, pixmap, sValuePtr->border, leftX + xOffset, 0, sValuePtr->borderWidth, dlPtr->height, 1, sValuePtr->relief); | > > > > > > > > > > > > > > > > > > > | 1886 1887 1888 1889 1890 1891 1892 1893 1894 1895 1896 1897 1898 1899 1900 1901 1902 1903 1904 1905 1906 1907 1908 1909 1910 1911 1912 1913 1914 1915 1916 1917 1918 | } sValuePtr = chunkPtr->stylePtr->sValuePtr; rightX = chunkPtr->x + chunkPtr->width; if ((chunkPtr->nextPtr == NULL) && (rightX < maxX)) { rightX = maxX; } if (chunkPtr->stylePtr->bgGC != None) { /* Not visible - bail out now */ if (rightX + xOffset <= 0) { leftX = rightX; continue; } /* * Trim the start position for drawing to be no further away than * -borderWidth. The reason is that on many X servers drawing from * -32768 (or less) to +something simply does not display * correctly. [Patch #541999] */ if ((leftX + xOffset) < -(sValuePtr->borderWidth)) { leftX = -sValuePtr->borderWidth - xOffset; } if ((rightX - leftX) > 32767) { rightX = leftX + 32767; } XFillRectangle(display, pixmap, chunkPtr->stylePtr->bgGC, leftX + xOffset, 0, (unsigned int) (rightX - leftX), (unsigned int) dlPtr->height); if (sValuePtr->relief != TK_RELIEF_FLAT) { Tk_3DVerticalBevel(textPtr->tkwin, pixmap, sValuePtr->border, leftX + xOffset, 0, sValuePtr->borderWidth, dlPtr->height, 1, sValuePtr->relief); |
︙ | ︙ | |||
3861 3862 3863 3864 3865 3866 3867 | * describing visible range gets * stored in the interp's result. */ TkText *textPtr; /* Information about text widget. */ int report; /* Non-zero means report info to * scrollbar if it has changed. */ { TextDInfo *dInfoPtr = textPtr->dInfoPtr; | | | > | 3890 3891 3892 3893 3894 3895 3896 3897 3898 3899 3900 3901 3902 3903 3904 3905 3906 3907 3908 3909 3910 3911 3912 3913 3914 3915 3916 3917 3918 3919 3920 3921 3922 3923 3924 3925 3926 | * describing visible range gets * stored in the interp's result. */ TkText *textPtr; /* Information about text widget. */ int report; /* Non-zero means report info to * scrollbar if it has changed. */ { TextDInfo *dInfoPtr = textPtr->dInfoPtr; char buffer[TCL_DOUBLE_SPACE * 2 + 1]; double first, last; int code; if (dInfoPtr->maxLength > 0) { first = ((double) dInfoPtr->curPixelOffset) / dInfoPtr->maxLength; last = first + ((double) (dInfoPtr->maxX - dInfoPtr->x)) / dInfoPtr->maxLength; if (last > 1.0) { last = 1.0; } } else { first = 0; last = 1.0; } if (!report) { sprintf(buffer, "%g %g", first, last); Tcl_SetResult(interp, buffer, TCL_VOLATILE); return; } if (FP_EQUAL_SCALE(first, dInfoPtr->xScrollFirst, dInfoPtr->maxLength) && FP_EQUAL_SCALE(last, dInfoPtr->xScrollLast, dInfoPtr->maxLength)) { return; } dInfoPtr->xScrollFirst = first; dInfoPtr->xScrollLast = last; sprintf(buffer, " %g %g", first, last); code = Tcl_VarEval(interp, textPtr->xScrollCmd, buffer, (char *) NULL); |
︙ | ︙ | |||
3932 3933 3934 3935 3936 3937 3938 | * describing visible range gets * stored in the interp's result. */ TkText *textPtr; /* Information about text widget. */ int report; /* Non-zero means report info to * scrollbar if it has changed. */ { TextDInfo *dInfoPtr = textPtr->dInfoPtr; | | | 3962 3963 3964 3965 3966 3967 3968 3969 3970 3971 3972 3973 3974 3975 3976 | * describing visible range gets * stored in the interp's result. */ TkText *textPtr; /* Information about text widget. */ int report; /* Non-zero means report info to * scrollbar if it has changed. */ { TextDInfo *dInfoPtr = textPtr->dInfoPtr; char buffer[TCL_DOUBLE_SPACE * 2 + 1]; double first, last; DLine *dlPtr; int totalLines, code, count; dlPtr = dInfoPtr->dLinePtr; totalLines = TkBTreeNumLines(textPtr->tree); first = (double) TkBTreeLineIndex(dlPtr->index.linePtr) |
︙ | ︙ | |||
3967 3968 3969 3970 3971 3972 3973 | / (TkBTreeBytesInLine(dlPtr->index.linePtr)); last /= totalLines; if (!report) { sprintf(buffer, "%g %g", first, last); Tcl_SetResult(interp, buffer, TCL_VOLATILE); return; } | | > | 3997 3998 3999 4000 4001 4002 4003 4004 4005 4006 4007 4008 4009 4010 4011 4012 | / (TkBTreeBytesInLine(dlPtr->index.linePtr)); last /= totalLines; if (!report) { sprintf(buffer, "%g %g", first, last); Tcl_SetResult(interp, buffer, TCL_VOLATILE); return; } if (FP_EQUAL_SCALE(first, dInfoPtr->yScrollFirst, totalLines) && FP_EQUAL_SCALE(last, dInfoPtr->yScrollLast, totalLines)) { return; } dInfoPtr->yScrollFirst = first; dInfoPtr->yScrollLast = last; sprintf(buffer, " %g %g", first, last); code = Tcl_VarEval(interp, textPtr->yScrollCmd, buffer, (char *) NULL); if (code != TCL_OK) { |
︙ | ︙ |
Changes to generic/tkTextMark.c.
1 2 3 4 5 6 7 8 9 10 11 12 | /* * tkTextMark.c -- * * This file contains the procedure that implement marks for * text widgets. * * Copyright (c) 1994 The Regents of the University of California. * Copyright (c) 1994-1997 Sun Microsystems, Inc. * * See the file "license.terms" for information on usage and redistribution * of this file, and for a DISCLAIMER OF ALL WARRANTIES. * | | | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | /* * tkTextMark.c -- * * This file contains the procedure that implement marks for * text widgets. * * Copyright (c) 1994 The Regents of the University of California. * Copyright (c) 1994-1997 Sun Microsystems, Inc. * * See the file "license.terms" for information on usage and redistribution * of this file, and for a DISCLAIMER OF ALL WARRANTIES. * * RCS: @(#) $Id: tkTextMark.c,v 1.4.8.1 2002/06/10 05:38:24 wolfsuit Exp $ */ #include "tkInt.h" #include "tkText.h" #include "tkPort.h" /* |
︙ | ︙ | |||
522 523 524 525 526 527 528 | * corresponds to y. */ { TkText *textPtr = (TkText *) chunkPtr->clientData; int halfWidth = textPtr->insertWidth/2; if ((x + halfWidth) < 0) { /* | | > > > > | | | | | 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557 558 559 560 561 | * corresponds to y. */ { TkText *textPtr = (TkText *) chunkPtr->clientData; int halfWidth = textPtr->insertWidth/2; if ((x + halfWidth) < 0) { /* * The insertion cursor is off-screen. * Indicate caret at 0,0 and return. */ Tk_SetCaretPos(textPtr->tkwin, 0, 0, height); return; } Tk_SetCaretPos(textPtr->tkwin, x - halfWidth, screenY, height); /* * As a special hack to keep the cursor visible on mono displays * (or anywhere else that the selection and insertion cursors * have the same color) write the default background in the cursor * area (instead of nothing) when the cursor isn't on. Otherwise * the selection might hide the cursor. */ if (textPtr->flags & INSERT_ON) { Tk_Fill3DRectangle(textPtr->tkwin, dst, textPtr->insertBorder, x - halfWidth, y, textPtr->insertWidth, height, textPtr->insertBorderWidth, TK_RELIEF_RAISED); } else if (textPtr->selBorder == textPtr->insertBorder) { Tk_Fill3DRectangle(textPtr->tkwin, dst, textPtr->border, x - halfWidth, y, textPtr->insertWidth, height, 0, TK_RELIEF_FLAT); } } /* *-------------------------------------------------------------- * * InsertUndisplayProc -- |
︙ | ︙ |
Changes to generic/tkWindow.c.
︙ | ︙ | |||
8 9 10 11 12 13 14 | * * Copyright (c) 1989-1994 The Regents of the University of California. * Copyright (c) 1994-1997 Sun Microsystems, Inc. * * See the file "license.terms" for information on usage and redistribution * of this file, and for a DISCLAIMER OF ALL WARRANTIES. * | | | 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | * * Copyright (c) 1989-1994 The Regents of the University of California. * Copyright (c) 1994-1997 Sun Microsystems, Inc. * * See the file "license.terms" for information on usage and redistribution * of this file, and for a DISCLAIMER OF ALL WARRANTIES. * * RCS: @(#) $Id: tkWindow.c,v 1.39.2.4 2002/06/10 05:38:24 wolfsuit Exp $ */ #include "tkPort.h" #include "tkInt.h" #if !( defined(__WIN32__) || defined(MAC_TCL) || defined(MAC_OSX_TK)) #include "tkUnixInt.h" |
︙ | ︙ | |||
139 140 141 142 143 144 145 146 147 148 149 150 151 152 | {"entry", NULL, Tk_EntryObjCmd, 1, 0}, {"frame", NULL, Tk_FrameObjCmd, 1, 0}, {"label", NULL, Tk_LabelObjCmd, 1, 0}, {"labelframe", NULL, Tk_LabelframeObjCmd, 1, 0}, {"listbox", NULL, Tk_ListboxObjCmd, 1, 0}, {"menubutton", NULL, Tk_MenubuttonObjCmd, 1, 0}, {"message", NULL, Tk_MessageObjCmd, 1, 0}, {"radiobutton", NULL, Tk_RadiobuttonObjCmd, 1, 0}, {"scale", NULL, Tk_ScaleObjCmd, 1, 0}, {"scrollbar", Tk_ScrollbarCmd, NULL, 1, 1}, {"spinbox", NULL, Tk_SpinboxObjCmd, 1, 0}, {"text", Tk_TextCmd, NULL, 1, 1}, {"toplevel", NULL, Tk_ToplevelObjCmd, 0, 0}, | > | 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 | {"entry", NULL, Tk_EntryObjCmd, 1, 0}, {"frame", NULL, Tk_FrameObjCmd, 1, 0}, {"label", NULL, Tk_LabelObjCmd, 1, 0}, {"labelframe", NULL, Tk_LabelframeObjCmd, 1, 0}, {"listbox", NULL, Tk_ListboxObjCmd, 1, 0}, {"menubutton", NULL, Tk_MenubuttonObjCmd, 1, 0}, {"message", NULL, Tk_MessageObjCmd, 1, 0}, {"panedwindow", NULL, Tk_PanedWindowObjCmd, 1, 0}, {"radiobutton", NULL, Tk_RadiobuttonObjCmd, 1, 0}, {"scale", NULL, Tk_ScaleObjCmd, 1, 0}, {"scrollbar", Tk_ScrollbarCmd, NULL, 1, 1}, {"spinbox", NULL, Tk_SpinboxObjCmd, 1, 0}, {"text", Tk_TextCmd, NULL, 1, 1}, {"toplevel", NULL, Tk_ToplevelObjCmd, 0, 0}, |
︙ | ︙ | |||
207 208 209 210 211 212 213 | ClientData clientData)); static TkDisplay * GetScreen _ANSI_ARGS_((Tcl_Interp *interp, CONST char *screenName, int *screenPtr)); static int Initialize _ANSI_ARGS_((Tcl_Interp *interp)); static int NameWindow _ANSI_ARGS_((Tcl_Interp *interp, TkWindow *winPtr, TkWindow *parentPtr, char *name)); | < > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 | ClientData clientData)); static TkDisplay * GetScreen _ANSI_ARGS_((Tcl_Interp *interp, CONST char *screenName, int *screenPtr)); static int Initialize _ANSI_ARGS_((Tcl_Interp *interp)); static int NameWindow _ANSI_ARGS_((Tcl_Interp *interp, TkWindow *winPtr, TkWindow *parentPtr, char *name)); static void UnlinkWindow _ANSI_ARGS_((TkWindow *winPtr)); /* *---------------------------------------------------------------------- * * TkCloseDisplay -- * Closing the display can lead to order of deletion problems. * We defer it until exit handling for Mac/Win, but since Unix can * use many displays, try and clean it up as best as possible. * * Results: * None. * * Side effects: * Resources associated with the display will be free. * The display may not be referenced at all after this. *---------------------------------------------------------------------- */ static void TkCloseDisplay(TkDisplay *dispPtr) { TkClipCleanup(dispPtr); if (dispPtr->name != NULL) { ckfree(dispPtr->name); } Tcl_DeleteHashTable(&dispPtr->winTable); if (dispPtr->atomInit) { Tcl_DeleteHashTable(&dispPtr->nameTable); Tcl_DeleteHashTable(&dispPtr->atomTable); dispPtr->atomInit = 0; } if (dispPtr->errorPtr != NULL) { TkErrorHandler *errorPtr; for (errorPtr = dispPtr->errorPtr; errorPtr != NULL; errorPtr = dispPtr->errorPtr) { dispPtr->errorPtr = errorPtr->nextPtr; ckfree((char *) errorPtr); } } TkGCCleanup(dispPtr); TkpCloseDisplay(dispPtr); /* * There is more to clean up, we leave it at this for the time being. */ } /* *---------------------------------------------------------------------- * * CreateTopLevelWindow -- * * Make a new window that will be at top-level (its parent will |
︙ | ︙ | |||
393 394 395 396 397 398 399 | } /* * See if we already have a connection to this display. If not, * then open a new connection. */ | | > > > > | > | < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < | < < < < < < < < < < | | < < < < | 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 | } /* * See if we already have a connection to this display. If not, * then open a new connection. */ for (dispPtr = tsdPtr->displayList; ; dispPtr = dispPtr->nextPtr) { if (dispPtr == NULL) { /* * The private function zeros out dispPtr when it is created, * so we only need to initialize the non-zero items. */ dispPtr = TkpOpenDisplay(screenName); if (dispPtr == NULL) { Tcl_AppendResult(interp, "couldn't connect to display \"", screenName, "\"", (char *) NULL); return (TkDisplay *) NULL; } dispPtr->nextPtr = tsdPtr->displayList; /* TkGetDisplayList(); */ tsdPtr->displayList = dispPtr; dispPtr->lastEventTime = CurrentTime; dispPtr->bindInfoStale = 1; dispPtr->cursorFont = None; dispPtr->warpWindow = None; dispPtr->multipleAtom = None; Tcl_InitHashTable(&dispPtr->winTable, TCL_ONE_WORD_KEYS); dispPtr->name = (char *) ckalloc((unsigned) (length+1)); strncpy(dispPtr->name, screenName, length); dispPtr->name[length] = '\0'; TkInitXId(dispPtr); break; } if ((strncmp(dispPtr->name, screenName, length) == 0) && (dispPtr->name[length] == '\0')) { break; } } |
︙ | ︙ | |||
1425 1426 1427 1428 1429 1430 1431 1432 1433 1434 1435 1436 1437 1438 1439 1440 | Tcl_UnlinkVar(winPtr->mainPtr->interp, "tk_strictMotif"); } Tcl_DeleteHashTable(&winPtr->mainPtr->nameTable); TkBindFree(winPtr->mainPtr); TkDeleteAllImages(winPtr->mainPtr); TkFontPkgFree(winPtr->mainPtr); /* * When embedding Tk into other applications, make sure * that all destroy events reach the server. Otherwise * the embedding application may also attempt to destroy * the windows, resulting in an X error */ if (winPtr->flags & TK_EMBEDDED) { | > | | > < | > > > > > > > | | | | < | < | < | < | < < < < > | | < < < < < | 1429 1430 1431 1432 1433 1434 1435 1436 1437 1438 1439 1440 1441 1442 1443 1444 1445 1446 1447 1448 1449 1450 1451 1452 1453 1454 1455 1456 1457 1458 1459 1460 1461 1462 1463 1464 1465 1466 1467 1468 1469 1470 1471 1472 1473 1474 1475 1476 1477 1478 1479 1480 1481 1482 1483 1484 1485 1486 1487 1488 1489 1490 1491 1492 1493 1494 1495 1496 1497 1498 1499 1500 1501 1502 1503 1504 1505 1506 1507 1508 1509 1510 1511 | Tcl_UnlinkVar(winPtr->mainPtr->interp, "tk_strictMotif"); } Tcl_DeleteHashTable(&winPtr->mainPtr->nameTable); TkBindFree(winPtr->mainPtr); TkDeleteAllImages(winPtr->mainPtr); TkFontPkgFree(winPtr->mainPtr); TkFocusFree(winPtr->mainPtr); /* * When embedding Tk into other applications, make sure * that all destroy events reach the server. Otherwise * the embedding application may also attempt to destroy * the windows, resulting in an X error */ if (winPtr->flags & TK_EMBEDDED) { XSync(winPtr->display, False); } ckfree((char *) winPtr->mainPtr); /* * If no other applications are using the display, close the * display now and relinquish its data structures. */ #if !defined(WIN32) && !defined(MAC_TCL) && defined(NOT_YET) if (dispPtr->refCount <= 0) { /* * I have disabled this code because on Windows there are * still order dependencies in close-down. All displays * and resources will get closed down properly anyway at * exit, through the exit handler. -- jyl */ /* * Ideally this should be enabled, as unix Tk can use multiple * displays. However, there are order issues still, as well * as the handling of queued events and such that must be * addressed before this can be enabled. The current cleanup * works except for send event issues. -- hobbs 04/2002 */ TkDisplay *theDispPtr, *backDispPtr; /* * Splice this display out of the list of displays. */ for (theDispPtr = tsdPtr->displayList, backDispPtr = NULL; (theDispPtr != winPtr->dispPtr) && (theDispPtr != NULL); theDispPtr = theDispPtr->nextPtr) { backDispPtr = theDispPtr; } if (theDispPtr == NULL) { panic("could not find display to close!"); } if (backDispPtr == NULL) { tsdPtr->displayList = theDispPtr->nextPtr; } else { backDispPtr->nextPtr = theDispPtr->nextPtr; } /* * Calling XSync creates X server traffic, but addresses a * focus issue on close (but not the send issue). -- hobbs XSync(dispPtr->display, True); */ /* * Found and spliced it out, now actually do the cleanup. */ TkCloseDisplay(dispPtr); } #endif } } Tcl_EventuallyFree((ClientData) winPtr, TCL_DYNAMIC); } /* *-------------------------------------------------------------- |
︙ | ︙ | |||
1612 1613 1614 1615 1616 1617 1618 | } hPtr = Tcl_CreateHashEntry(&winPtr->dispPtr->winTable, (char *) winPtr->window, &new); Tcl_SetHashValue(hPtr, winPtr); winPtr->dirtyAtts = 0; winPtr->dirtyChanges = 0; | < < < | 1612 1613 1614 1615 1616 1617 1618 1619 1620 1621 1622 1623 1624 1625 | } hPtr = Tcl_CreateHashEntry(&winPtr->dispPtr->winTable, (char *) winPtr->window, &new); Tcl_SetHashValue(hPtr, winPtr); winPtr->dirtyAtts = 0; winPtr->dirtyChanges = 0; if (!(winPtr->flags & TK_TOP_LEVEL)) { /* * If any siblings higher up in the stacking order have already * been created then move this window to its rightful position * in the stacking order. * |
︙ | ︙ | |||
1661 1662 1663 1664 1665 1666 1667 | * Issue a ConfigureNotify event if there were deferred configuration * changes (but skip it if the window is being deleted; the * ConfigureNotify event could cause problems if we're being called * from Tk_DestroyWindow under some conditions). */ if ((winPtr->flags & TK_NEED_CONFIG_NOTIFY) | | | 1658 1659 1660 1661 1662 1663 1664 1665 1666 1667 1668 1669 1670 1671 1672 | * Issue a ConfigureNotify event if there were deferred configuration * changes (but skip it if the window is being deleted; the * ConfigureNotify event could cause problems if we're being called * from Tk_DestroyWindow under some conditions). */ if ((winPtr->flags & TK_NEED_CONFIG_NOTIFY) && !(winPtr->flags & TK_ALREADY_DEAD)) { winPtr->flags &= ~TK_NEED_CONFIG_NOTIFY; TkDoConfigureNotify(winPtr); } } /* *-------------------------------------------------------------- |
︙ | ︙ | |||
2498 2499 2500 2501 2502 2503 2504 | Tk_Window Tk_MainWindow(interp) Tcl_Interp *interp; /* Interpreter that embodies the * application. Used for error * reporting also. */ { TkMainInfo *mainPtr; | | > > > > > > > > > > | | 2495 2496 2497 2498 2499 2500 2501 2502 2503 2504 2505 2506 2507 2508 2509 2510 2511 2512 2513 2514 2515 2516 2517 2518 2519 2520 | Tk_Window Tk_MainWindow(interp) Tcl_Interp *interp; /* Interpreter that embodies the * application. Used for error * reporting also. */ { TkMainInfo *mainPtr; ThreadSpecificData *tsdPtr; if (interp == NULL) { return NULL; } #ifdef USE_TCL_STUBS if (tclStubsPtr == NULL) { return NULL; } #endif tsdPtr = (ThreadSpecificData *) Tcl_GetThreadData(&dataKey, sizeof(ThreadSpecificData)); for (mainPtr = tsdPtr->mainWindowList; mainPtr != NULL; mainPtr = mainPtr->nextPtr) { if (mainPtr->interp == interp) { return (Tk_Window) mainPtr->winPtr; } } |
︙ | ︙ | |||
2538 2539 2540 2541 2542 2543 2544 | int Tk_StrictMotif(tkwin) Tk_Window tkwin; /* Window whose application is * to be checked. */ { return ((TkWindow *) tkwin)->mainPtr->strictMotif; } | < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < | 2545 2546 2547 2548 2549 2550 2551 2552 2553 2554 2555 2556 2557 2558 | int Tk_StrictMotif(tkwin) Tk_Window tkwin; /* Window whose application is * to be checked. */ { return ((TkWindow *) tkwin)->mainPtr->strictMotif; } /* *---------------------------------------------------------------------- * * Tk_GetNumMainWindows -- * * This procedure returns the number of main windows currently |
︙ | ︙ | |||
2623 2624 2625 2626 2627 2628 2629 | * *---------------------------------------------------------------------- */ int Tk_GetNumMainWindows() { | | > > > > > > > > | | 2566 2567 2568 2569 2570 2571 2572 2573 2574 2575 2576 2577 2578 2579 2580 2581 2582 2583 2584 2585 2586 2587 2588 2589 | * *---------------------------------------------------------------------- */ int Tk_GetNumMainWindows() { ThreadSpecificData *tsdPtr; #ifdef USE_TCL_STUBS if (tclStubsPtr == NULL) { return 0; } #endif tsdPtr = (ThreadSpecificData *) Tcl_GetThreadData(&dataKey, sizeof(ThreadSpecificData)); return tsdPtr->numMainWindows; } /* *---------------------------------------------------------------------- * |
︙ | ︙ | |||
2650 2651 2652 2653 2654 2655 2656 | *---------------------------------------------------------------------- */ static void DeleteWindowsExitProc(clientData) ClientData clientData; /* Not used. */ { | | | | < < < | | | | < | | | | < < < < | | | 2601 2602 2603 2604 2605 2606 2607 2608 2609 2610 2611 2612 2613 2614 2615 2616 2617 2618 2619 2620 2621 2622 2623 2624 2625 2626 2627 2628 2629 2630 2631 2632 2633 2634 2635 2636 2637 2638 2639 2640 2641 2642 2643 2644 2645 2646 2647 2648 2649 2650 2651 2652 2653 2654 2655 2656 2657 2658 2659 | *---------------------------------------------------------------------- */ static void DeleteWindowsExitProc(clientData) ClientData clientData; /* Not used. */ { TkDisplay *dispPtr, *nextPtr; Tcl_Interp *interp; ThreadSpecificData *tsdPtr = (ThreadSpecificData *) Tcl_GetThreadData(&dataKey, sizeof(ThreadSpecificData)); while (tsdPtr->mainWindowList != NULL) { /* * We must protect the interpreter while deleting the window, * because of <Destroy> bindings which could destroy the interpreter * while the window is being deleted. This would leave frames on * the call stack pointing at deleted memory, causing core dumps. */ interp = tsdPtr->mainWindowList->winPtr->mainPtr->interp; Tcl_Preserve((ClientData) interp); Tk_DestroyWindow((Tk_Window) tsdPtr->mainWindowList->winPtr); Tcl_Release((ClientData) interp); } /* * Iterate destroying the displays until no more displays remain. * It is possible for displays to get recreated during exit by any * code that calls GetScreen, so we must destroy these new displays * as well as the old ones. */ for (dispPtr = tsdPtr->displayList; dispPtr != NULL; dispPtr = tsdPtr->displayList) { /* * Now iterate over the current list of open displays, and first * set the global pointer to NULL so we will be able to notice if * any new displays got created during deletion of the current set. * We must also do this to ensure that Tk_IdToWindow does not find * the old display as it is being destroyed, when it wants to see * if it needs to dispatch a message. */ for (tsdPtr->displayList = NULL; dispPtr != NULL; dispPtr = nextPtr) { nextPtr = dispPtr->nextPtr; TkCloseDisplay(dispPtr); } } tsdPtr->numMainWindows = 0; tsdPtr->mainWindowList = NULL; tsdPtr->initialized = 0; } /* *---------------------------------------------------------------------- |
︙ | ︙ |
Changes to library/bgerror.tcl.
1 2 3 4 5 6 7 8 9 10 11 | # bgerror.tcl -- # # Implementation of the bgerror procedure. It posts a dialog box with # the error message and gives the user a chance to see a more detailed # stack trace, and possible do something more interesting with that # trace (like save it to a log). This is adapted from work done by # Donal K. Fellows. # # Copyright (c) 1998-2000 by Ajuba Solutions. # All rights reserved. # | | | > > > > > | | | | < < < > > | | | | < < < < | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 | # bgerror.tcl -- # # Implementation of the bgerror procedure. It posts a dialog box with # the error message and gives the user a chance to see a more detailed # stack trace, and possible do something more interesting with that # trace (like save it to a log). This is adapted from work done by # Donal K. Fellows. # # Copyright (c) 1998-2000 by Ajuba Solutions. # All rights reserved. # # RCS: @(#) $Id: bgerror.tcl,v 1.17.2.3 2002/06/10 05:38:24 wolfsuit Exp $ # $Id: bgerror.tcl,v 1.17.2.3 2002/06/10 05:38:24 wolfsuit Exp $ namespace eval ::tk { namespace eval dialog { namespace eval error { namespace import ::tk::msgcat::* namespace export bgerror option add *ErrorDialog.function.text [mc "Save To Log"] \ widgetDefault option add *ErrorDialog.function.command [namespace code SaveToLog] } } } proc ::tk::dialog::error::Return {} { variable button .bgerrorDialog.ok configure -state active -relief sunken update idletasks after 100 set button 0 } proc ::tk::dialog::error::Details {} { set w .bgerrorDialog set caption [option get $w.function text {}] set command [option get $w.function command {}] if { ($caption eq "") || ($command eq "") } { grid forget $w.function } $w.function configure -text $caption -command \ "$command [list [.bgerrorDialog.top.info.text get 1.0 end]]" grid $w.top.info - -sticky nsew -padx 3m -pady 3m } proc ::tk::dialog::error::SaveToLog {text} { if { $::tcl_platform(platform) eq "windows" } { set allFiles *.* } else { set allFiles * } set types [list \ [list [mc "Log Files"] .log] \ [list [mc "Text Files"] .txt] \ [list [mc "All Files"] $allFiles] \ ] set filename [tk_getSaveFile -title [mc "Select Log File"] \ -filetypes $types -defaultextension .log -parent .bgerrorDialog] if {![string length $filename]} { return } set f [open $filename w] puts -nonewline $f $text close $f } proc ::tk::dialog::error::Destroy {w} { if {$w eq ".bgerrorDialog"} { variable button set button -1 } } # ::tk::dialog::error::bgerror -- # This is the default version of bgerror. # It tries to execute tkerror, if that fails it posts a dialog box containing # the error message and gives the user a chance to ask to see a stack # trace. # Arguments: # err - The error message. proc ::tk::dialog::error::bgerror err { global errorInfo tcl_platform variable button set info $errorInfo set ret [catch {::tkerror $err} msg]; if {$ret != 1} {return -code $ret $msg} # Ok the application's tkerror either failed or was not found # we use the default dialog then : if {($tcl_platform(platform) eq "macintosh") || ($tcl_platform(windowingsystem) eq "aqua")} { set ok [mc Ok] set messageFont system set textRelief flat set textHilight 0 } else { set ok [mc OK] set messageFont {Times -18} set textRelief sunken set textHilight 1 } # Truncate the message if it is too wide (longer than 30 characacters) or # too tall (more than 4 newlines). Truncation occurs at the first point at # which one of those conditions is met. set displayedErr "" set lines 0 foreach line [split $err \n] { if { [string length $line] > 30 } { append displayedErr "[string range $line 0 29]..." break } if { $lines > 4 } { append displayedErr "..." break } else { append displayedErr "${line}\n" } incr lines } set w .bgerrorDialog set title [mc "Application Error"] set text [mc {Error: %1$s} $err] set buttons [list ok $ok dismiss [mc "Skip Messages"] \ function [mc "Details >>"]] # 1. Create the top-level window and divide it into top # and bottom parts. catch {destroy .bgerrorDialog} toplevel .bgerrorDialog -class ErrorDialog wm title .bgerrorDialog $title wm iconname .bgerrorDialog ErrorDialog wm protocol .bgerrorDialog WM_DELETE_WINDOW { } # The following, though surprising, works. wm transient .bgerrorDialog .bgerrorDialog if {($tcl_platform(platform) eq "macintosh") || ($tcl_platform(windowingsystem) eq "aqua")} { ::tk::unsupported::MacWindowStyle style .bgerrorDialog dBoxProc } frame .bgerrorDialog.bot frame .bgerrorDialog.top if {$tcl_platform(windowingsystem) eq "x11"} { .bgerrorDialog.bot configure -relief raised -bd 1 .bgerrorDialog.top configure -relief raised -bd 1 } pack .bgerrorDialog.bot -side bottom -fill both pack .bgerrorDialog.top -side top -fill both -expand 1 set W [frame $w.top.info] text $W.text \ -bd 2 \ -yscrollcommand [list $W.scroll set]\ -setgrid true \ -width 40 \ -height 10 \ -state normal \ -relief $textRelief \ -highlightthickness $textHilight \ -wrap char scrollbar $W.scroll -relief sunken -command [list $W.text yview] pack $W.scroll -side right -fill y pack $W.text -side left -expand yes -fill both $W.text insert 0.0 "$err\n$info" $W.text mark set insert 0.0 bind $W.text <ButtonPress-1> { focus %W } $W.text configure -state disabled # 2. Fill the top part with bitmap and message label .bgerrorDialog.msg -justify left -text $text -font $messageFont if {($tcl_platform(platform) eq "macintosh") || ($tcl_platform(windowingsystem) eq "aqua")} { # On the Macintosh, use the stop bitmap label .bgerrorDialog.bitmap -bitmap stop } else { # On other platforms, make the error icon canvas .bgerrorDialog.bitmap -width 32 -height 32 -highlightthickness 0 .bgerrorDialog.bitmap create oval 0 0 31 31 -fill red -outline black .bgerrorDialog.bitmap create line 9 9 23 23 -fill white -width 4 |
︙ | ︙ | |||
203 204 205 206 207 208 209 | # 3. Create a row of buttons at the bottom of the dialog. set i 0 foreach {name caption} $buttons { button .bgerrorDialog.$name \ -text $caption \ -default normal \ | | | | | < | | | < | 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 | # 3. Create a row of buttons at the bottom of the dialog. set i 0 foreach {name caption} $buttons { button .bgerrorDialog.$name \ -text $caption \ -default normal \ -command [namespace code "set button $i"] grid .bgerrorDialog.$name \ -in .bgerrorDialog.bot \ -column $i \ -row 0 \ -sticky ew \ -padx 10 grid columnconfigure .bgerrorDialog.bot $i -weight 1 # We boost the size of some Mac buttons for l&f if {($tcl_platform(platform) eq "macintosh") || ($tcl_platform(windowingsystem) eq "aqua")} { if {($name eq "ok") || ($name eq "dismiss")} { grid columnconfigure .bgerrorDialog.bot $i -minsize 79 } } incr i } # The "OK" button is the default for this dialog. .bgerrorDialog.ok configure -default active bind .bgerrorDialog <Return> [namespace code Return] bind .bgerrorDialog <Destroy> [namespace code [list Destroy %W]] .bgerrorDialog.function configure -command [namespace code Details] # 6. Withdraw the window, then update all the geometry information # so we know how big it wants to be, then center the window in the # display and de-iconify it. wm withdraw .bgerrorDialog update idletasks |
︙ | ︙ | |||
262 263 264 265 266 267 268 | # 8. Wait for the user to respond, then restore the focus and # return the index of the selected button. Restore the focus # before deleting the window, since otherwise the window manager # may take the focus away so we can't redirect it. Finally, # restore any grab that was in effect. | | | | | | > > > > > > > | 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 | # 8. Wait for the user to respond, then restore the focus and # return the index of the selected button. Restore the focus # before deleting the window, since otherwise the window manager # may take the focus away so we can't redirect it. Finally, # restore any grab that was in effect. vwait [namespace which -variable button] set copy $button; # Save a copy... catch {focus $oldFocus} catch {destroy .bgerrorDialog} if {$oldGrab ne ""} { if {$grabStatus eq "global"} { grab -global $oldGrab } else { grab $oldGrab } } if {$copy == 1} { return -code break } } namespace eval :: { # Fool the indexer proc bgerror err {} rename bgerror {} namespace import ::tk::dialog::error::bgerror } |
Changes to library/button.tcl.
1 2 3 4 5 6 | # button.tcl -- # # This file defines the default bindings for Tk label, button, # checkbutton, and radiobutton widgets and provides procedures # that help in implementing those bindings. # | | | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 | # button.tcl -- # # This file defines the default bindings for Tk label, button, # checkbutton, and radiobutton widgets and provides procedures # that help in implementing those bindings. # # RCS: @(#) $Id: button.tcl,v 1.11.2.3 2002/06/10 05:38:24 wolfsuit Exp $ # # Copyright (c) 1992-1994 The Regents of the University of California. # Copyright (c) 1994-1996 Sun Microsystems, Inc. # # See the file "license.terms" for information on usage and redistribution # of this file, and for a DISCLAIMER OF ALL WARRANTIES. # |
︙ | ︙ | |||
146 147 148 149 150 151 152 | if {[string compare [$w cget -state] "disabled"] } { # If the mouse button is down, set the relief to sunken on entry. # Overwise, if there's an -overrelief value, set the relief to that. if {[string equal $Priv(buttonWindow) $w]} { $w configure -state active -relief sunken | | | 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 | if {[string compare [$w cget -state] "disabled"] } { # If the mouse button is down, set the relief to sunken on entry. # Overwise, if there's an -overrelief value, set the relief to that. if {[string equal $Priv(buttonWindow) $w]} { $w configure -state active -relief sunken } elseif {[$w cget -overrelief] ne ""} { set Priv(relief) [$w cget -relief] $w configure -relief [$w cget -overrelief] } } set Priv(window) $w } |
︙ | ︙ | |||
173 174 175 176 177 178 179 | if {[string compare [$w cget -state] "disabled"]} { $w configure -state normal } # Restore the original button relief if the mouse button is down # or there is an -overrelief value. | | | | 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 | if {[string compare [$w cget -state] "disabled"]} { $w configure -state normal } # Restore the original button relief if the mouse button is down # or there is an -overrelief value. if {[info exists Priv(relief)] && (($Priv(buttonWindow) eq $w) || \ ([$w cget -overrelief] ne ""))} { $w configure -relief $Priv(relief) } set Priv(window) "" } # ::tk::CheckRadioEnter -- |
︙ | ︙ | |||
324 325 326 327 328 329 330 | $w configure -state active # If the mouse button is down, set the relief to sunken on entry. # Overwise, if there's an -overrelief value, set the relief to that. if {[string equal $Priv(buttonWindow) $w]} { $w configure -state active -relief sunken | | | 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 | $w configure -state active # If the mouse button is down, set the relief to sunken on entry. # Overwise, if there's an -overrelief value, set the relief to that. if {[string equal $Priv(buttonWindow) $w]} { $w configure -state active -relief sunken } elseif {[$w cget -overrelief] ne ""} { set Priv(relief) [$w cget -relief] $w configure -relief [$w cget -overrelief] } } set Priv(window) $w } |
︙ | ︙ | |||
348 349 350 351 352 353 354 | # w - The name of the widget. proc ::tk::ButtonLeave w { variable ::tk::Priv if {[string compare [$w cget -state] "disabled"]} { $w configure -state normal } | | | | | 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 | # w - The name of the widget. proc ::tk::ButtonLeave w { variable ::tk::Priv if {[string compare [$w cget -state] "disabled"]} { $w configure -state normal } # Restore the original button relief if the mouse button is down # or there is an -overrelief value. if {[info exists Priv(relief)] && (($Priv(buttonWindow) eq $w) || \ ([$w cget -overrelief] ne ""))} { $w configure -relief $Priv(relief) } set Priv(window) "" } # ::tk::ButtonDown -- |
︙ | ︙ | |||
455 456 457 458 459 460 461 | # w - The name of the widget. proc ::tk::ButtonEnter {w} { variable ::tk::Priv if {[string compare [$w cget -state] "disabled"]} { if {[string equal $w $Priv(buttonWindow)]} { $w configure -state active | | | 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 | # w - The name of the widget. proc ::tk::ButtonEnter {w} { variable ::tk::Priv if {[string compare [$w cget -state] "disabled"]} { if {[string equal $w $Priv(buttonWindow)]} { $w configure -state active } elseif {[$w cget -overrelief] ne ""} { set Priv(relief) [$w cget -relief] $w configure -relief [$w cget -overrelief] } } set Priv(window) $w } |
︙ | ︙ | |||
478 479 480 481 482 483 484 | # w - The name of the widget. proc ::tk::ButtonLeave w { variable ::tk::Priv if {[string equal $w $Priv(buttonWindow)]} { $w configure -state normal } | > | | 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 | # w - The name of the widget. proc ::tk::ButtonLeave w { variable ::tk::Priv if {[string equal $w $Priv(buttonWindow)]} { $w configure -state normal } if {[info exists Priv(relief)] && (($Priv(buttonWindow) eq $w) || \ ([$w cget -overrelief] ne ""))} { $w configure -relief $Priv(relief) } set Priv(window) "" } # ::tk::ButtonDown -- # The procedure below is invoked when the mouse button is pressed in |
︙ | ︙ |
Changes to library/choosedir.tcl.
1 2 3 4 5 6 7 | # choosedir.tcl -- # # Choose directory dialog implementation for Unix/Mac. # # Copyright (c) 1998-2000 by Scriptics Corporation. # All rights reserved. # | | > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | # choosedir.tcl -- # # Choose directory dialog implementation for Unix/Mac. # # Copyright (c) 1998-2000 by Scriptics Corporation. # All rights reserved. # # RCS: @(#) $Id: choosedir.tcl,v 1.11.2.1 2002/06/10 05:38:24 wolfsuit Exp $ # Make sure the tk::dialog namespace, in which all dialogs should live, exists namespace eval ::tk::dialog {} namespace eval ::tk::dialog::file {} # Make the chooseDir namespace inside the dialog namespace namespace eval ::tk::dialog::file::chooseDir { namespace import ::tk::msgcat::* } # ::tk::dialog::file::chooseDir:: -- # # Implements the TK directory selection dialog. # # Arguments: |
︙ | ︙ | |||
131 132 133 134 135 136 137 | } # 3: parse the arguments # tclParseConfigSpec ::tk::dialog::file::$dataName $specs "" $argList if {$data(-title) == ""} { | | | | 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 | } # 3: parse the arguments # tclParseConfigSpec ::tk::dialog::file::$dataName $specs "" $argList if {$data(-title) == ""} { set data(-title) "[mc "Choose Directory"]" } # Stub out the -multiple value for the dialog; it doesn't make sense for # choose directory dialogs, but we have to have something there because we # share so much code with the file dialogs. set data(-multiple) 0 # 4: set the default directory and selection according to the -initial # settings |
︙ | ︙ |
Changes to library/clrpick.tcl.
1 2 3 4 5 | # clrpick.tcl -- # # Color selection dialog for platforms that do not support a # standard color selection dialog. # | | | > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 | # clrpick.tcl -- # # Color selection dialog for platforms that do not support a # standard color selection dialog. # # RCS: @(#) $Id: clrpick.tcl,v 1.13.2.2 2002/06/10 05:38:24 wolfsuit Exp $ # # Copyright (c) 1996 Sun Microsystems, Inc. # # See the file "license.terms" for information on usage and redistribution # of this file, and for a DISCLAIMER OF ALL WARRANTIES. # # ToDo: # # (1): Find out how many free colors are left in the colormap and # don't allocate too many colors. # (2): Implement HSV color selection. # # Make sure namespaces exist namespace eval ::tk {} namespace eval ::tk::dialog {} namespace eval ::tk::dialog::color { namespace import ::tk::msgcat::* } # ::tk::dialog::color:: -- # # Create a color dialog and let the user choose a color. This function # should not be called directly. It is called by the tk_chooseColor # function when a native color selector widget does not exist # |
︙ | ︙ | |||
166 167 168 169 170 171 172 | } else { set defaultColor [. cget -background] } set specs [list \ [list -initialcolor "" "" $defaultColor] \ [list -parent "" "" "."] \ | | | 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 | } else { set defaultColor [. cget -background] } set specs [list \ [list -initialcolor "" "" $defaultColor] \ [list -parent "" "" "."] \ [list -title "" "" [mc "Color"]] \ ] # 2: parse the arguments # tclParseConfigSpec ::tk::dialog::color::$dataName $specs "" $argList if {[string equal $data(-title) ""]} { |
︙ | ︙ | |||
199 200 201 202 203 204 205 | # TopFrame contains the color strips and the color selection # set topFrame [frame $w.top -relief raised -bd 1] # StripsFrame contains the colorstrips and the individual RGB entries set stripsFrame [frame $topFrame.colorStrip] | | | | | | 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 | # TopFrame contains the color strips and the color selection # set topFrame [frame $w.top -relief raised -bd 1] # StripsFrame contains the colorstrips and the individual RGB entries set stripsFrame [frame $topFrame.colorStrip] set maxWidth [mcmax Red Green Blue] set maxWidth [expr {$maxWidth<6?6:$maxWidth}] set colorList [list \ red [mc "Red"] \ green [mc "Green"] \ blue [mc "Blue"] \ ] foreach {color l} $colorList { # each f frame contains an [R|G|B] entry and the equiv. color strip. set f [frame $stripsFrame.$color] # The box frame contains the label and entry widget for an [R|G|B] set box [frame $f.box] |
︙ | ︙ | |||
259 260 261 262 263 264 265 | pack $stripsFrame -side left -fill both -padx 4 -pady 10 # The selFrame contains a frame that demonstrates the currently # selected color # set selFrame [frame $topFrame.sel] | | | | | | 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 | pack $stripsFrame -side left -fill both -padx 4 -pady 10 # The selFrame contains a frame that demonstrates the currently # selected color # set selFrame [frame $topFrame.sel] set lab [label $selFrame.lab -text [mc "Selection:"] \ -under 0 -anchor sw] set ent [entry $selFrame.ent \ -textvariable ::tk::dialog::color::[winfo name $w](selection) \ -width 16] set f1 [frame $selFrame.f1 -relief sunken -bd 2] set data(finalCanvas) [frame $f1.demo -bd 0 -width 100 -height 70] pack $lab $ent -side top -fill x -padx 4 -pady 2 pack $f1 -expand yes -anchor nw -fill both -padx 6 -pady 10 pack $data(finalCanvas) -expand yes -fill both bind $ent <Return> [list tk::dialog::color::HandleSelEntry $w] pack $selFrame -side left -fill none -anchor nw pack $topFrame -side top -expand yes -fill both -anchor nw # the botFrame frame contains the buttons # set botFrame [frame $w.bot -relief raised -bd 1] set maxWidth [mcmax OK Cancel] set maxWidth [expr {$maxWidth<8?8:$maxWidth}] button $botFrame.ok -text [mc "OK"] \ -width $maxWidth -under 0 \ -command [list tk::dialog::color::OkCmd $w] button $botFrame.cancel -text [mc "Cancel"] \ -width $maxWidth -under 0 \ -command [list tk::dialog::color::CancelCmd $w] set data(okBtn) $botFrame.ok set data(cancelBtn) $botFrame.cancel pack $botFrame.ok $botFrame.cancel \ |
︙ | ︙ |
Changes to library/console.tcl.
1 2 3 4 5 6 | # console.tcl -- # # This code constructs the console window for an application. It # can be used by non-unix systems that do not have built-in support # for shells. # | | | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 | # console.tcl -- # # This code constructs the console window for an application. It # can be used by non-unix systems that do not have built-in support # for shells. # # RCS: @(#) $Id: console.tcl,v 1.13.2.3 2002/06/10 05:38:24 wolfsuit Exp $ # # Copyright (c) 1995-1997 Sun Microsystems, Inc. # Copyright (c) 1998-2000 Ajuba Solutions. # # See the file "license.terms" for information on usage and redistribution # of this file, and for a DISCLAIMER OF ALL WARRANTIES. # |
︙ | ︙ | |||
38 39 40 41 42 43 44 | # ::tk::ConsoleInit -- # This procedure constructs and configures the console windows. # # Arguments: # None. | < < | | | | | | | | | | | | | | | | | | | | 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 | # ::tk::ConsoleInit -- # This procedure constructs and configures the console windows. # # Arguments: # None. proc ::tk::ConsoleInit {} { global tcl_platform if {![consoleinterp eval {set tcl_interactive}]} { wm withdraw . } if {[string equal $tcl_platform(platform) "macintosh"] || [string equal $tcl_platform(windowingsystem) "aqua"]} { set mod "Cmd" } else { set mod "Ctrl" } if {[catch {menu .menubar} err]} { bgerror "INIT: $err" } .menubar add cascade -label File -menu .menubar.file -underline 0 .menubar add cascade -label Edit -menu .menubar.edit -underline 0 menu .menubar.file -tearoff 0 .menubar.file add command -label [mc "Source..."] \ -underline 0 -command tk::ConsoleSource .menubar.file add command -label [mc "Hide Console"] \ -underline 0 -command {wm withdraw .} .menubar.file add command -label [mc "Clear Console"] \ -underline 0 -command {.console delete 1.0 "promptEnd linestart"} if {[string equal $tcl_platform(platform) "macintosh"] || [string equal $tcl_platform(windowingsystem) "aqua"]} { .menubar.file add command -label [mc "Quit"] \ -command exit -accel Cmd-Q } else { .menubar.file add command -label [mc "Exit"] \ -underline 1 -command exit } menu .menubar.edit -tearoff 0 .menubar.edit add command -label [mc "Cut"] -underline 2 \ -command { event generate .console <<Cut>> } -accel "$mod+X" .menubar.edit add command -label [mc "Copy"] -underline 0 \ -command { event generate .console <<Copy>> } -accel "$mod+C" .menubar.edit add command -label [mc "Paste"] -underline 1 \ -command { event generate .console <<Paste>> } -accel "$mod+V" if {[string compare $tcl_platform(platform) "windows"]} { .menubar.edit add command -label [mc "Clear"] -underline 2 \ -command { event generate .console <<Clear>> } } else { .menubar.edit add command -label [mc "Delete"] -underline 0 \ -command { event generate .console <<Clear>> } -accel "Del" .menubar add cascade -label Help -menu .menubar.help -underline 0 menu .menubar.help -tearoff 0 .menubar.help add command -label [mc "About..."] \ -underline 0 -command tk::ConsoleAbout } . configure -menu .menubar set con [text .console -yscrollcommand [list .sb set] -setgrid true] scrollbar .sb -command [list $con yview] pack .sb -side right -fill both pack $con -fill both -expand 1 -side left switch -exact $tcl_platform(platform) { "macintosh" { $con configure -font {Monaco 9 normal} -highlightthickness 0 } "windows" { $con configure -font systemfixed } "unix" { if {[string equal $tcl_platform(windowingsystem) "aqua"]} { $con configure -font {Monaco 9 normal} -highlightthickness 0 } } } ConsoleBind $con $con tag configure stderr -foreground red $con tag configure stdin -foreground blue $con tag configure prompt -foreground \#8F4433 $con tag configure proc -foreground \#008800 $con tag configure var -background \#FFC0D0 $con tag raise sel $con tag configure blink -background \#FFFF00 $con tag configure find -background \#FFFF00 focus $con wm protocol . WM_DELETE_WINDOW { wm withdraw . } wm title . [mc "Console"] flush stdout $con mark set output [$con index "end - 1 char"] tk::TextSetCursor $con end $con mark set promptEnd insert $con mark gravity promptEnd left } # ::tk::ConsoleSource -- # # Prompts the user for a file to source in the main interpreter. # # Arguments: # None. proc ::tk::ConsoleSource {} { set filename [tk_getOpenFile -defaultextension .tcl -parent . \ -title [mc "Select a file to source"] \ -filetypes [list \ [list [mc "Tcl Scripts"] .tcl] \ [list [mc "All Files"] *]]] if {[string compare $filename ""]} { set cmd [list source $filename] if {[catch {consoleinterp eval $cmd} result]} { ConsoleOutput stderr "$result\n" } } } |
︙ | ︙ | |||
294 295 296 297 298 299 300 | # None. proc ::tk::ConsoleBind {w} { bindtags $w [list $w Console PostConsole [winfo toplevel $w] all] ## Get all Text bindings into Console foreach ev [bind Text] { bind Console $ev [bind Text $ev] } | | > > | 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 | # None. proc ::tk::ConsoleBind {w} { bindtags $w [list $w Console PostConsole [winfo toplevel $w] all] ## Get all Text bindings into Console foreach ev [bind Text] { bind Console $ev [bind Text $ev] } ## We really didn't want the newline insertion... bind Console <Control-Key-o> {} ## ...or any Control-v binding (would block <<Paste>>) bind Console <Control-Key-v> {} # For the moment, transpose isn't enabled until the console # gets and overhaul of how it handles input -- hobbs bind Console <Control-Key-t> {} # Ignore all Alt, Meta, and Control keypresses unless explicitly bound. # Otherwise, if a widget binding for one of these is defined, the |
︙ | ︙ | |||
451 452 453 454 455 456 457 | } bind Console <KeyPress> { tk::ConsoleInsert %W %A } bind Console <F9> { eval destroy [winfo child .] if {[string equal $tcl_platform(platform) "macintosh"]} { | | | 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 | } bind Console <KeyPress> { tk::ConsoleInsert %W %A } bind Console <F9> { eval destroy [winfo child .] if {[string equal $tcl_platform(platform) "macintosh"]} { if {[catch {source [file join $tk_library console.tcl]}]} {source -rsrc console} } else { source [file join $tk_library console.tcl] } } bind Console <<Cut>> { # Same as the copy event if {![catch {set data [%W get sel.first sel.last]}]} { |
︙ | ︙ | |||
580 581 582 583 584 585 586 | # # This routine displays an About box to show Tcl/Tk version info. # # Arguments: # None. proc ::tk::ConsoleAbout {} { | | | 580 581 582 583 584 585 586 587 588 589 590 591 592 593 594 | # # This routine displays an About box to show Tcl/Tk version info. # # Arguments: # None. proc ::tk::ConsoleAbout {} { tk_messageBox -type ok -message "[mc {Tcl for Windows}] Tcl $::tcl_patchLevel Tk $::tk_patchLevel" } # ::tk::console::TagProc -- # |
︙ | ︙ |
Changes to library/demos/paned1.tcl.
1 2 3 4 5 | # paned1.tcl -- # # This demonstration script creates a toplevel window containing # a paned window that separates two windows horizontally. # | | | 1 2 3 4 5 6 7 8 9 10 11 12 13 | # paned1.tcl -- # # This demonstration script creates a toplevel window containing # a paned window that separates two windows horizontally. # # RCS: @(#) $Id: paned1.tcl,v 1.1.4.2 2002/06/10 05:38:24 wolfsuit Exp $ if {![info exists widgetDemo]} { error "This script should be run from the \"widget\" demo." } set w .paned1 catch {destroy $w} |
︙ | ︙ |
Changes to library/demos/paned2.tcl.
1 2 3 4 5 | # paned2.tcl -- # # This demonstration script creates a toplevel window containing # a paned window that separates two windows vertically. # | | | 1 2 3 4 5 6 7 8 9 10 11 12 13 | # paned2.tcl -- # # This demonstration script creates a toplevel window containing # a paned window that separates two windows vertically. # # RCS: @(#) $Id: paned2.tcl,v 1.1.4.2 2002/06/10 05:38:24 wolfsuit Exp $ if {![info exists widgetDemo]} { error "This script should be run from the \"widget\" demo." } set w .paned2 catch {destroy $w} |
︙ | ︙ |
Changes to library/demos/widget.
1 2 3 4 5 6 7 8 9 10 11 12 13 | #!/bin/sh # the next line restarts using wish \ exec wish "$0" "$@" # widget -- # This script demonstrates the various widgets provided by Tk, # along with many of the features of the Tk toolkit. This file # only contains code to generate the main window for the # application, which invokes individual demonstrations. The # code for the actual demonstrations is contained in separate # ".tcl" files is this directory, which are sourced by this script # as needed. # | | | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | #!/bin/sh # the next line restarts using wish \ exec wish "$0" "$@" # widget -- # This script demonstrates the various widgets provided by Tk, # along with many of the features of the Tk toolkit. This file # only contains code to generate the main window for the # application, which invokes individual demonstrations. The # code for the actual demonstrations is contained in separate # ".tcl" files is this directory, which are sourced by this script # as needed. # # RCS: @(#) $Id: widget,v 1.3.2.3 2002/06/10 05:38:24 wolfsuit Exp $ eval destroy [winfo child .] wm title . "Widget Demonstration" if {$tcl_platform(platform) eq "unix"} { # This won't work everywhere, but there's no other way in core Tk # at the moment to display a coloured icon. image create photo TclPowered \ |
︙ | ︙ | |||
195 196 197 198 199 200 201 202 | ctext "Text items in canvases" arrow "An editor for arrowheads on canvas lines" ruler "A ruler with adjustable tab stops" floor "A building floor plan" cscroll "A simple scrollable canvas" } addDemoSection "Scales" { vscale "Vertical scale" | > > > | > | 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 | ctext "Text items in canvases" arrow "An editor for arrowheads on canvas lines" ruler "A ruler with adjustable tab stops" floor "A building floor plan" cscroll "A simple scrollable canvas" } addDemoSection "Scales" { hscale "Horizontal scale" vscale "Vertical scale" } addDemoSection "Paned Windows" { paned1 "Horizontal paned window" paned2 "Vertical paned window" } addDemoSection "Menus" { menu "Menus and cascades (sub-menus)" menubu "Menu-buttons" } addDemoSection "Common Dialogs" { msgbox "Message boxes" |
︙ | ︙ | |||
377 378 379 380 381 382 383 | tk_messageBox -icon info -type ok -title "About Widget Demo" -message \ "Tk widget demonstration Copyright (c) 1996-1997 Sun Microsystems, Inc. Copyright (c) 1997-2000 Ajuba Solutions, Inc. | | | 381 382 383 384 385 386 387 388 389 390 391 392 393 | tk_messageBox -icon info -type ok -title "About Widget Demo" -message \ "Tk widget demonstration Copyright (c) 1996-1997 Sun Microsystems, Inc. Copyright (c) 1997-2000 Ajuba Solutions, Inc. Copyright (c) 2001-2002 Donal K. Fellows" } # Local Variables: # mode: tcl # End: |
Changes to library/entry.tcl.
1 2 3 4 5 | # entry.tcl -- # # This file defines the default bindings for Tk entry widgets and provides # procedures that help in implementing those bindings. # | | | 1 2 3 4 5 6 7 8 9 10 11 12 13 | # entry.tcl -- # # This file defines the default bindings for Tk entry widgets and provides # procedures that help in implementing those bindings. # # RCS: @(#) $Id: entry.tcl,v 1.16.2.3 2002/06/10 05:38:24 wolfsuit Exp $ # # Copyright (c) 1992-1994 The Regents of the University of California. # Copyright (c) 1994-1997 Sun Microsystems, Inc. # # See the file "license.terms" for information on usage and redistribution # of this file, and for a DISCLAIMER OF ALL WARRANTIES. # |
︙ | ︙ | |||
78 79 80 81 82 83 84 | bind Entry <B1-Motion> { set tk::Priv(x) %x tk::EntryMouseSelect %W %x } bind Entry <Double-1> { set tk::Priv(selectMode) word tk::EntryMouseSelect %W %x | | | | 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 | bind Entry <B1-Motion> { set tk::Priv(x) %x tk::EntryMouseSelect %W %x } bind Entry <Double-1> { set tk::Priv(selectMode) word tk::EntryMouseSelect %W %x catch {%W icursor sel.last} } bind Entry <Triple-1> { set tk::Priv(selectMode) line tk::EntryMouseSelect %W %x catch {%W icursor sel.last} } bind Entry <Shift-1> { set tk::Priv(selectMode) char %W selection adjust @%x } bind Entry <Double-Shift-1> { set tk::Priv(selectMode) word |
︙ | ︙ |
Changes to library/msgbox.tcl.
1 2 3 4 5 | # msgbox.tcl -- # # Implements messageboxes for platforms that do not have native # messagebox support. # | | | 1 2 3 4 5 6 7 8 9 10 11 12 13 | # msgbox.tcl -- # # Implements messageboxes for platforms that do not have native # messagebox support. # # RCS: @(#) $Id: msgbox.tcl,v 1.15.2.2 2002/06/10 05:38:24 wolfsuit Exp $ # # Copyright (c) 1994-1997 Sun Microsystems, Inc. # # See the file "license.terms" for information on usage and redistribution # of this file, and for a DISCLAIMER OF ALL WARRANTIES. # |
︙ | ︙ | |||
168 169 170 171 172 173 174 | if {![winfo exists $data(-parent)]} { error "bad window path name \"$data(-parent)\"" } switch -- $data(-type) { abortretryignore { | | | | | | | | | | | | | | | | | | | | | 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 | if {![winfo exists $data(-parent)]} { error "bad window path name \"$data(-parent)\"" } switch -- $data(-type) { abortretryignore { set maxWidth [mcmax Abort Retry Ignore] set maxWidth [expr {$maxWidth<6?6:$maxWidth}] set buttons [list \ [list abort -width $maxWidth -text [mc "Abort"] \ -under 0]\ [list retry -width $maxWidth -text [mc "Retry"] \ -under 0]\ [list ignore -width $maxWidth -text [mc "Ignore"] \ -under 0]\ ] } ok { set buttons [list \ [list ok -width [mcmax OK] \ -text [mc {OK}] -under 0] \ ] if {[string equal $data(-default) ""]} { set data(-default) "ok" } } okcancel { set maxWidth [mcmax OK Cancel] set maxWidth [expr {$maxWidth<6?6:$maxWidth}] set buttons [list \ [list ok -width $maxWidth \ -text [mc "OK"] -under 0] \ [list cancel -width $maxWidth \ -text [mc "Cancel"] -under 0] \ ] } retrycancel { set maxWidth [mcmax Retry Cancel] set maxWidth [expr {$maxWidth<6?6:$maxWidth}] set buttons [list \ [list retry -width $maxWidth \ -text [mc "Retry"] -under 0] \ [list cancel -width $maxWidth \ -text [mc "Cancel"] -under 0] \ ] } yesno { set maxWidth [mcmax Yes No] set maxWidth [expr {$maxWidth<6?6:$maxWidth}] set buttons [list \ [list yes -width $maxWidth \ -text [mc "Yes"] -under 0]\ [list no -width $maxWidth \ -text [mc "No"] -under 0]\ ] } yesnocancel { set maxWidth [mcmax Yes No Cancel] set maxWidth [expr {$maxWidth<6?6:$maxWidth}] set buttons [list \ [list yes -width $maxWidth \ -text [mc "Yes"] -under 0]\ [list no -width $maxWidth \ -text [mc "No"] -under 0]\ [list cancel -width $maxWidth \ -text [mc "Cancel"] -under 0]\ ] } default { error "bad -type value \"$data(-type)\": must be abortretryignore, ok, okcancel, retrycancel, yesno, or yesnocancel" } } |
︙ | ︙ | |||
370 371 372 373 374 375 376 377 378 379 380 381 382 383 | set opts [list -text $capName] } eval button [list $w.$name] $opts [list -command [list set tk::Priv(button) $name]] if {[string equal $name $data(-default)]} { $w.$name configure -default active } pack $w.$name -in $w.bot -side left -expand 1 -padx 3m -pady 2m # create the binding for the key accelerator, based on the underline # set underIdx [$w.$name cget -under] if {$underIdx >= 0} { | > > | 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 | set opts [list -text $capName] } eval button [list $w.$name] $opts [list -command [list set tk::Priv(button) $name]] if {[string equal $name $data(-default)]} { $w.$name configure -default active } else { $w.$name configure -default normal } pack $w.$name -in $w.bot -side left -expand 1 -padx 3m -pady 2m # create the binding for the key accelerator, based on the underline # set underIdx [$w.$name cget -under] if {$underIdx >= 0} { |
︙ | ︙ |
Changes to library/msgs/cs.msg.
|
| > | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 | namespace eval ::tk { ::msgcat::mcset cs "Abort" "P\u0159eru\u0161it" ::msgcat::mcset cs "About..." "O programu..." ::msgcat::mcset cs "All Files" "V\u0161echny soubory" ::msgcat::mcset cs "Application Error" "Chyba programu" ::msgcat::mcset cs "Blue" "Modr\341" ::msgcat::mcset cs "Cancel" "Zru\u0161it" ::msgcat::mcset cs "Cannot change to the directory \"%1\$s\".\nPermission denied." "Nemohu zm\u011bnit atku\341ln\355 adres\341\u0159 na \"%1\$s\".\nP\u0159\355stup odm\355tnut." ::msgcat::mcset cs "Choose Directory" "V\375b\u011br adres\341\u0159e" ::msgcat::mcset cs "Clear" "Smazat" ::msgcat::mcset cs "Color" "Barva" ::msgcat::mcset cs "Console" "Konzole" ::msgcat::mcset cs "Copy" "Kop\355rovat" ::msgcat::mcset cs "Cut" "Vy\u0159\355znout" ::msgcat::mcset cs "Delete" "Smazat" ::msgcat::mcset cs "Details >>" "Detaily >>" ::msgcat::mcset cs "Directory \"%1\$s\" does not exist." "Adres\341\u0159 \"%1\$s\" neexistuje." ::msgcat::mcset cs "Directory:" "Adres\341\u0159:" ::msgcat::mcset cs "Error: %1\$s" "Chyba: %1\$s" ::msgcat::mcset cs "Exit" "Konec" ::msgcat::mcset cs "File \"%1\$s\" already exists.\n\n" "Soubor \"%1\$s\" ji\u017e existuje.\n\n" ::msgcat::mcset cs "File \"%1\$s\" already exists.\nDo you want to overwrite it?" "Soubor \"%1\$s\" ji\u017e existuje.\nChcete jej p\u0159epsat?" ::msgcat::mcset cs "File \"%1\$s\" does not exist." "Soubor \"%1\$s\" neexistuje." ::msgcat::mcset cs "File name:" "Jm\351no souboru:" ::msgcat::mcset cs "File names:" "Jm\351na soubor\u016f:" ::msgcat::mcset cs "Files of type:" "Typy soubor\u016f:" ::msgcat::mcset cs "Files:" "Soubory:" ::msgcat::mcset cs "Filter" "Filtr" ::msgcat::mcset cs "Filter:" "Filtr:" ::msgcat::mcset cs "Green" "Zelen\341" ::msgcat::mcset cs "Hi" ::msgcat::mcset cs "Hide Console" "Skr\375t konsolu" ::msgcat::mcset cs "Ignore" "Ignorovat" ::msgcat::mcset cs "Invalid file name \"%1\$s\"." "\u0160patn\351 jm\351no souboru \"%1\$s\"." ::msgcat::mcset cs "Log Files" "Log soubory" ::msgcat::mcset cs "No" "Ne" ::msgcat::mcset cs "OK" ::msgcat::mcset cs "Ok" ::msgcat::mcset cs "Open" "Otev\u0159\355t" ::msgcat::mcset cs "Open Multiple Files" "Otev\u0159\355t v\355ce soubor\u016f" ::msgcat::mcset cs "Paste" "Vlo\u017eit" ::msgcat::mcset cs "Quit" "Skon\u010dit" ::msgcat::mcset cs "Red" "\u010cerven\341" ::msgcat::mcset cs "Replace existing file?" "Nahradit st\341vaj\355c\355 soubor?" ::msgcat::mcset cs "Retry" "Znovu" ::msgcat::mcset cs "Save" "Ulo\u017eit" ::msgcat::mcset cs "Save As" "Ulo\u017eit jako" ::msgcat::mcset cs "Save To Log" "Ulo\u017eit do logu" ::msgcat::mcset cs "Select Log File" "Vybrat log soubor" ::msgcat::mcset cs "Select a file to source" "Vybrat soubor k nahr\341n\355" ::msgcat::mcset cs "Selection:" "V\375b\u011br:" ::msgcat::mcset cs "Skip Messages" "P\u0159esko\u010dit zpr\341vy" ::msgcat::mcset cs "Source..." "Nahr\341t..." ::msgcat::mcset cs "Tcl Scripts" "Tcl skripty" ::msgcat::mcset cs "Tcl for Windows" "Tcl pro Windows" ::msgcat::mcset cs "Text Files" "Textov\351 soubory" ::msgcat::mcset cs "Yes" "Ano" ::msgcat::mcset cs "abort" "p\u0159eru\u0161it" ::msgcat::mcset cs "blue" "modr\341" ::msgcat::mcset cs "cancel" "zru\u0161it" ::msgcat::mcset cs "extension" "p\u0159\355pona" ::msgcat::mcset cs "extensions" "p\u0159\355pony" ::msgcat::mcset cs "green" "zelen\341" ::msgcat::mcset cs "ignore" "ignorovat" ::msgcat::mcset cs "ok" ::msgcat::mcset cs "red" "\u010derven\341" ::msgcat::mcset cs "retry" "znovu" ::msgcat::mcset cs "yes" "ano" } |
Changes to library/msgs/de.msg.
|
| > | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 | namespace eval ::tk { ::msgcat::mcset de "Abort" "Abbruch" ::msgcat::mcset de "About..." "\u00dcber..." ::msgcat::mcset de "All Files" "Alle Dateien" ::msgcat::mcset de "Application Error" "Applikationsfehler" ::msgcat::mcset de "Blue" "Blau" ::msgcat::mcset de "Cancel" "Abbruch" ::msgcat::mcset de "Cannot change to the directory \"%1\$s\".\nPermission denied." "Kann nicht in das Verzeichnis \"%1\$s\" wechseln.\nKeine Rechte vorhanden." ::msgcat::mcset de "Choose Directory" "W\u00e4hle Verzeichnis" ::msgcat::mcset de "Clear" "R\u00fccksetzen" ::msgcat::mcset de "Color" "Farbe" ::msgcat::mcset de "Console" "Konsole" ::msgcat::mcset de "Copy" "Kopieren" ::msgcat::mcset de "Cut" "Ausschneiden" ::msgcat::mcset de "Delete" "L\u00f6schen" ::msgcat::mcset de "Details >>" ::msgcat::mcset de "Directory \"%1\$s\" does not exist." "Das Verzeichnis \"%1\$s\" existiert nicht." ::msgcat::mcset de "Directory:" "Verzeichnis:" ::msgcat::mcset de "Error: %1\$s" "Fehler: %1\$s" ::msgcat::mcset de "Exit" "Ende" ::msgcat::mcset de "File \"%1\$s\" already exists.\nDo you want to overwrite it?" "Die Datei \"%1\$s\" ist bereits vorhanden.\nWollen sie diese Datei \u00fcberschreiben ?" ::msgcat::mcset de "File \"%1\$s\" already exists.\n\n" "Die Datei \"%1\$s\" ist bereits vorhanden.\n\n" ::msgcat::mcset de "File \"%1\$s\" does not exist." "Die Datei \"%1\$s\" existiert nicht." ::msgcat::mcset de "File name:" "Dateiname:" ::msgcat::mcset de "File names:" "Dateinamen:" ::msgcat::mcset de "Files of type:" "Dateien des Typs:" ::msgcat::mcset de "Files:" "Dateien:" ::msgcat::mcset de "Filter" ::msgcat::mcset de "Filter:" ::msgcat::mcset de "Green" "Gr\u00fcn" ::msgcat::mcset de "Hi" "Hallo" ::msgcat::mcset de "Hide Console" "Konsole unsichtbar machen" ::msgcat::mcset de "Ignore" "Ignorieren" ::msgcat::mcset de "Invalid file name \"%1\$s\"." "Ung\u00fcltiger Dateiname \"%1\$s\"." ::msgcat::mcset de "Log Files" "Protokolldatei" ::msgcat::mcset de "No" "Nein" ::msgcat::mcset de "OK" ::msgcat::mcset de "Ok" ::msgcat::mcset de "Open" "\u00d6ffnen" ::msgcat::mcset de "Open Multiple Files" ::msgcat::mcset de "Paste" "Einf\u00fcgen" ::msgcat::mcset de "Quit" "Beenden" ::msgcat::mcset de "Red" "Rot" ::msgcat::mcset de "Replace existing file?" "Existierende Datei ersetzen?" ::msgcat::mcset de "Retry" "Wiederholen" ::msgcat::mcset de "Save" "Speichern" ::msgcat::mcset de "Save As" "Speichern unter" ::msgcat::mcset de "Save To Log" "In Protokoll speichern" ::msgcat::mcset de "Select Log File" "Protokolldatei ausw\u00e4hlen" ::msgcat::mcset de "Select a file to source" "Auszuf\u00fchrende Datei ausw\u00e4hlen" ::msgcat::mcset de "Selection:" "Auswahl:" ::msgcat::mcset de "Skip Messages" "Weitere Nachrichten \u00fcberspringen" ::msgcat::mcset de "Source..." "Ausf\u00fchren..." ::msgcat::mcset de "Tcl Scripts" "Tcl-Skripte" ::msgcat::mcset de "Tcl for Windows" "Tcl f\u00fcr Windows" ::msgcat::mcset de "Text Files" "Textdateien" ::msgcat::mcset de "Yes" "Ja" ::msgcat::mcset de "abort" "abbrechen" ::msgcat::mcset de "blue" "blau" ::msgcat::mcset de "cancel" "abbrechen" ::msgcat::mcset de "extension" "Erweiterung" ::msgcat::mcset de "extensions" "Erweiterungen" ::msgcat::mcset de "green" "gr\u00fcn" ::msgcat::mcset de "ignore" "ignorieren" ::msgcat::mcset de "ok" ::msgcat::mcset de "red" "rot" ::msgcat::mcset de "retry" "wiederholen" ::msgcat::mcset de "yes" "ja" } |
Changes to library/msgs/el.msg.
1 2 3 4 | ## Messages for the Greek (Hellenic - "el") language. ## Please report any changes/suggestions to: ## [email protected] | > | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 | ## Messages for the Greek (Hellenic - "el") language. ## Please report any changes/suggestions to: ## [email protected] namespace eval ::tk { ::msgcat::mcset el "Abort" "\u03a4\u03b5\u03c1\u03bc\u03b1\u03c4\u03b9\u03c3\u03bc\u03cc\u03c2" ::msgcat::mcset el "About..." "\u03a3\u03c7\u03b5\u03c4\u03b9\u03ba\u03ac..." ::msgcat::mcset el "All Files" "\u038c\u03bb\u03b1 \u03c4\u03b1 \u0391\u03c1\u03c7\u03b5\u03af\u03b1" ::msgcat::mcset el "Application Error" "\u039b\u03ac\u03b8\u03bf\u03c2 \u0395\u03c6\u03b1\u03c1\u03bc\u03bf\u03b3\u03ae\u03c2" ::msgcat::mcset el "Blue" "\u039c\u03c0\u03bb\u03b5" ::msgcat::mcset el "Cancel" "\u0391\u03ba\u03cd\u03c1\u03c9\u03c3\u03b7" ::msgcat::mcset el \ "Cannot change to the directory \"%1\$s\".\nPermission denied." \ "\u0394\u03b5\u03bd \u03b5\u03af\u03bd\u03b1\u03b9 \u03b4\u03c5\u03bd\u03b1\u03c4\u03ae \u03b7 \u03b1\u03bb\u03bb\u03b1\u03b3\u03ae \u03ba\u03b1\u03c4\u03b1\u03bb\u03cc\u03b3\u03bf\u03c5 \u03c3\u03b5 \"%1\$s\".\n\u0397 \u03c0\u03c1\u03cc\u03c3\u03b2\u03b1\u03c3\u03b7 \u03b4\u03b5\u03bd \u03b5\u03c0\u03b9\u03c4\u03c1\u03ad\u03c0\u03b5\u03c4\u03b1\u03b9." ::msgcat::mcset el "Choose Directory" "\u0395\u03c0\u03b9\u03bb\u03bf\u03b3\u03ae \u039a\u03b1\u03c4\u03b1\u03bb\u03cc\u03b3\u03bf\u03c5" ::msgcat::mcset el "Clear" "\u039a\u03b1\u03b8\u03b1\u03c1\u03b9\u03c3\u03bc\u03cc\u03c2" ::msgcat::mcset el "Color" "\u03a7\u03c1\u03ce\u03bc\u03b1" ::msgcat::mcset el "Console" "\u039a\u03bf\u03bd\u03c3\u03cc\u03bb\u03b1" ::msgcat::mcset el "Copy" "\u0391\u03bd\u03c4\u03b9\u03b3\u03c1\u03b1\u03c6\u03ae" ::msgcat::mcset el "Cut" "\u0391\u03c0\u03bf\u03ba\u03bf\u03c0\u03ae" ::msgcat::mcset el "Delete" "\u0394\u03b9\u03b1\u03b3\u03c1\u03b1\u03c6\u03ae" ::msgcat::mcset el "Details >>" "\u039b\u03b5\u03c0\u03c4\u03bf\u03bc\u03ad\u03c1\u03b5\u03b9\u03b5\u03c2 >>" ::msgcat::mcset el "Directory \"%1\$s\" does not exist." \ "\u039f \u03ba\u03b1\u03c4\u03ac\u03bb\u03bf\u03b3\u03bf\u03c2 \"%1\$s\" \u03b4\u03b5\u03bd \u03c5\u03c0\u03ac\u03c1\u03c7\u03b5\u03b9." ::msgcat::mcset el "Directory:" "\u039a\u03b1\u03c4\u03ac\u03bb\u03bf\u03b3\u03bf\u03c2:" ::msgcat::mcset el "Error: %1\$s" "\u039b\u03ac\u03b8\u03bf\u03c2: %1\$s" ::msgcat::mcset el "Exit" "\u0388\u03be\u03bf\u03b4\u03bf\u03c2" ::msgcat::mcset el \ "File \"%1\$s\" already exists.\nDo you want to overwrite it?" \ "\u03a4\u03bf \u03b1\u03c1\u03c7\u03b5\u03af\u03bf \"%1\$s\" \u03ae\u03b4\u03b7 \u03c5\u03c0\u03ac\u03c1\u03c7\u03b5\u03b9.\n\u0398\u03ad\u03bb\u03b5\u03c4\u03b5 \u03bd\u03b1 \u03b5\u03c0\u03b9\u03ba\u03b1\u03bb\u03c5\u03c6\u03b8\u03b5\u03af;" ::msgcat::mcset el "File \"%1\$s\" already exists.\n\n" \ "\u03a4\u03bf \u03b1\u03c1\u03c7\u03b5\u03af\u03bf \"%1\$s\" \u03ae\u03b4\u03b7 \u03c5\u03c0\u03ac\u03c1\u03c7\u03b5\u03b9.\n\n" ::msgcat::mcset el "File \"%1\$s\" does not exist." \ "\u03a4\u03bf \u03b1\u03c1\u03c7\u03b5\u03af\u03bf \"%1\$s\" \u03b4\u03b5\u03bd \u03c5\u03c0\u03ac\u03c1\u03c7\u03b5\u03b9." ::msgcat::mcset el "File name:" "\u038c\u03bd\u03bf\u03bc\u03b1 \u03b1\u03c1\u03c7\u03b5\u03af\u03bf\u03c5:" ::msgcat::mcset el "File names:" "\u038c\u03bd\u03bf\u03bc\u03b1 \u03b1\u03c1\u03c7\u03b5\u03af\u03c9\u03bd:" ::msgcat::mcset el "Files of type:" "\u0391\u03c1\u03c7\u03b5\u03af\u03b1 \u03c4\u03bf\u03c5 \u03c4\u03cd\u03c0\u03bf\u03c5:" ::msgcat::mcset el "Files:" "\u0391\u03c1\u03c7\u03b5\u03af\u03b1:" ::msgcat::mcset el "Filter" "\u03a6\u03af\u03bb\u03c4\u03c1\u03bf" ::msgcat::mcset el "Filter:" "\u03a6\u03af\u03bb\u03c4\u03c1\u03bf:" ::msgcat::mcset el "Green" "\u03a0\u03c1\u03ac\u03c3\u03b9\u03bd\u03bf" ::msgcat::mcset el "Hi" "\u0393\u03b5\u03b9\u03b1" ::msgcat::mcset el "Hide Console" "\u0391\u03c0\u03cc\u03ba\u03c1\u03c5\u03c8\u03b7 \u03ba\u03bf\u03bd\u03c3\u03cc\u03bb\u03b1\u03c2" ::msgcat::mcset el "Ignore" "\u0391\u03b3\u03bd\u03cc\u03b7\u03c3\u03b7" ::msgcat::mcset el "Invalid file name \"%1\$s\"." \ "\u0386\u03ba\u03c5\u03c1\u03bf \u03cc\u03bd\u03bf\u03bc\u03b1 \u03b1\u03c1\u03c7\u03b5\u03af\u03bf\u03c5 \"%1\$s\"." ::msgcat::mcset el "Log Files" "\u0391\u03c1\u03c7\u03b5\u03af\u03b1 \u039a\u03b1\u03c4\u03b1\u03b3\u03c1\u03b1\u03c6\u03ae\u03c2" ::msgcat::mcset el "No" "\u038c\u03c7\u03b9" ::msgcat::mcset el "OK" "\u0395\u03bd\u03c4\u03ac\u03be\u03b5\u03b9" ::msgcat::mcset el "Ok" "\u0395\u03bd\u03c4\u03ac\u03be\u03b5\u03b9" ::msgcat::mcset el "Open" "\u0386\u03bd\u03bf\u03b9\u03b3\u03bc\u03b1" ::msgcat::mcset el "Open Multiple Files" \ "\u0386\u03bd\u03bf\u03b9\u03b3\u03bc\u03b1 \u03c0\u03bf\u03bb\u03bb\u03b1\u03c0\u03bb\u03ce\u03bd \u03b1\u03c1\u03c7\u03b5\u03af\u03c9\u03bd" ::msgcat::mcset el "Paste" "\u0395\u03c0\u03b9\u03ba\u03cc\u03bb\u03bb\u03b7\u03c3\u03b7" ::msgcat::mcset el "Quit" "\u0388\u03be\u03bf\u03b4\u03bf\u03c2" ::msgcat::mcset el "Red" "\u039a\u03cc\u03ba\u03ba\u03b9\u03bd\u03bf" ::msgcat::mcset el "Replace existing file?" \ "\u0395\u03c0\u03b9\u03ba\u03ac\u03bb\u03c5\u03c8\u03b7 \u03c5\u03c0\u03ac\u03c1\u03c7\u03bf\u03bd\u03c4\u03bf\u03c2 \u03b1\u03c1\u03c7\u03b5\u03af\u03bf\u03c5;" ::msgcat::mcset el "Retry" "\u03a0\u03c1\u03bf\u03c3\u03c0\u03ac\u03b8\u03b7\u03c3\u03b5 \u03be\u03b1\u03bd\u03ac" ::msgcat::mcset el "Save" "\u0391\u03c0\u03bf\u03b8\u03ae\u03ba\u03b5\u03c5\u03c3\u03b7" ::msgcat::mcset el "Save As" "\u0391\u03c0\u03bf\u03b8\u03ae\u03ba\u03b5\u03c5\u03c3\u03b7 \u03c3\u03b1\u03bd" ::msgcat::mcset el "Save To Log" "\u0391\u03c0\u03bf\u03b8\u03ae\u03ba\u03b5\u03c5\u03c3\u03b7 \u03c3\u03c4\u03bf \u03b1\u03c1\u03c7\u03b5\u03af\u03bf \u03ba\u03b1\u03c4\u03b1\u03b3\u03c1\u03b1\u03c6\u03ae\u03c2" ::msgcat::mcset el "Select Log File" "\u0395\u03c0\u03b9\u03bb\u03bf\u03b3\u03ae \u03b1\u03c1\u03c7\u03b5\u03af\u03bf\u03c5 \u03ba\u03b1\u03c4\u03b1\u03b3\u03c1\u03b1\u03c6\u03ae\u03c2" ::msgcat::mcset el "Select a file to source" \ "\u0395\u03c0\u03b9\u03bb\u03ad\u03be\u03c4\u03b5 \u03b1\u03c1\u03c7\u03b5\u03af\u03bf \u03b3\u03b9\u03b1 \u03b5\u03ba\u03c4\u03ad\u03bb\u03b5\u03c3\u03b7" ::msgcat::mcset el "Selection:" "\u0395\u03c0\u03b9\u03bb\u03bf\u03b3\u03ae:" ::msgcat::mcset el "Skip Messages" "\u0391\u03c0\u03bf\u03c6\u03c5\u03b3\u03ae \u03bc\u03c5\u03bd\u03b7\u03bc\u03ac\u03c4\u03c9\u03bd" ::msgcat::mcset el "Source..." "\u0395\u03ba\u03c4\u03ad\u03bb\u03b5\u03c3\u03b7..." ::msgcat::mcset el "Tcl Scripts" "Tcl Scripts" ::msgcat::mcset el "Tcl for Windows" "Tcl \u03b3\u03b9\u03b1 Windows" ::msgcat::mcset el "Text Files" "\u0391\u03c1\u03c7\u03b5\u03af\u03b1 \u039a\u03b5\u03b9\u03bc\u03ad\u03bd\u03bf\u03c5" ::msgcat::mcset el "Yes" "\u039d\u03b1\u03b9" ::msgcat::mcset el "abort" "\u03c4\u03b5\u03c1\u03bc\u03b1\u03c4\u03b9\u03c3\u03bc\u03cc\u03c2" ::msgcat::mcset el "blue" "\u03bc\u03c0\u03bb\u03b5" ::msgcat::mcset el "cancel" "\u03b1\u03ba\u03cd\u03c1\u03c9\u03c3\u03b7" ::msgcat::mcset el "extension" "\u03b5\u03c0\u03ad\u03ba\u03c4\u03b1\u03c3\u03b7" ::msgcat::mcset el "extensions" "\u03b5\u03c0\u03b5\u03ba\u03c4\u03ac\u03c3\u03b5\u03b9\u03c2" ::msgcat::mcset el "green" "\u03c0\u03c1\u03ac\u03c3\u03b9\u03bd\u03bf" ::msgcat::mcset el "ignore" "\u03b1\u03b3\u03bd\u03cc\u03b7\u03c3\u03b7" ::msgcat::mcset el "ok" "\u03b5\u03bd\u03c4\u03ac\u03be\u03b5\u03b9" ::msgcat::mcset el "red" "\u03ba\u03cc\u03ba\u03ba\u03b9\u03bd\u03bf" ::msgcat::mcset el "retry" "\u03c0\u03c1\u03bf\u03c3\u03c0\u03ac\u03b8\u03b7\u03c3\u03b5 \u03be\u03b1\u03bd\u03ac" ::msgcat::mcset el "yes" "\u03bd\u03b1\u03b9" } |
Changes to library/msgs/en.msg.
|
| > | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 | namespace eval ::tk { ::msgcat::mcset en "Abort" ::msgcat::mcset en "About..." ::msgcat::mcset en "All Files" ::msgcat::mcset en "Application Error" ::msgcat::mcset en "Blue" ::msgcat::mcset en "Cancel" ::msgcat::mcset en "Cannot change to the directory \"%1\$s\".\nPermission denied." ::msgcat::mcset en "Choose Directory" ::msgcat::mcset en "Clear" ::msgcat::mcset en "Color" ::msgcat::mcset en "Console" ::msgcat::mcset en "Copy" ::msgcat::mcset en "Cut" ::msgcat::mcset en "Delete" ::msgcat::mcset en "Details >>" ::msgcat::mcset en "Directory \"%1\$s\" does not exist." ::msgcat::mcset en "Directory:" ::msgcat::mcset en "Error: %1\$s" ::msgcat::mcset en "Exit" ::msgcat::mcset en "File \"%1\$s\" already exists.\nDo you want to overwrite it?" ::msgcat::mcset en "File \"%1\$s\" already exists.\n\n" ::msgcat::mcset en "File \"%1\$s\" does not exist." ::msgcat::mcset en "File name:" ::msgcat::mcset en "File names:" ::msgcat::mcset en "Files of type:" ::msgcat::mcset en "Files:" ::msgcat::mcset en "Filter" ::msgcat::mcset en "Filter:" ::msgcat::mcset en "Green" ::msgcat::mcset en "Hi" ::msgcat::mcset en "Hide Console" ::msgcat::mcset en "Ignore" ::msgcat::mcset en "Invalid file name \"%1\$s\"." ::msgcat::mcset en "Log Files" ::msgcat::mcset en "No" ::msgcat::mcset en "OK" ::msgcat::mcset en "Ok" ::msgcat::mcset en "Open" ::msgcat::mcset en "Open Multiple Files" ::msgcat::mcset en "Paste" ::msgcat::mcset en "Quit" ::msgcat::mcset en "Red" ::msgcat::mcset en "Replace existing file?" ::msgcat::mcset en "Retry" ::msgcat::mcset en "Save" ::msgcat::mcset en "Save As" ::msgcat::mcset en "Save To Log" ::msgcat::mcset en "Select Log File" ::msgcat::mcset en "Select a file to source" ::msgcat::mcset en "Selection:" ::msgcat::mcset en "Skip Messages" ::msgcat::mcset en "Source..." ::msgcat::mcset en "Tcl Scripts" ::msgcat::mcset en "Tcl for Windows" ::msgcat::mcset en "Text Files" ::msgcat::mcset en "Yes" ::msgcat::mcset en "abort" ::msgcat::mcset en "blue" ::msgcat::mcset en "cancel" ::msgcat::mcset en "extension" ::msgcat::mcset en "extensions" ::msgcat::mcset en "green" ::msgcat::mcset en "ignore" ::msgcat::mcset en "ok" ::msgcat::mcset en "red" ::msgcat::mcset en "retry" ::msgcat::mcset en "yes" } |
Changes to library/msgs/es.msg.
|
| > | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 | namespace eval ::tk { ::msgcat::mcset es "Abort" "Abortar" ::msgcat::mcset es "About..." "Acerca de ..." ::msgcat::mcset es "All Files" "Todos los archivos" ::msgcat::mcset es "Application Error" "Error de la aplicaci\u00f3n" ::msgcat::mcset es "Blue" "Azul" ::msgcat::mcset es "Cancel" "Cancelar" ::msgcat::mcset es "Cannot change to the directory \"%1\$s\".\nPermission denied." "No es posible acceder al directorio \"%1\$s\".\nPermiso denegado." ::msgcat::mcset es "Choose Directory" "Elegir directorio" ::msgcat::mcset es "Clear" "Borrar" ::msgcat::mcset es "Color" "Color" ::msgcat::mcset es "Console" "Consola" ::msgcat::mcset es "Copy" "Copiar" ::msgcat::mcset es "Cut" "Cortar" ::msgcat::mcset es "Delete" "Borrar" ::msgcat::mcset es "Details >>" "Detalles >>" ::msgcat::mcset es "Directory \"%1\$s\" does not exist." "El directorio \"%1\$s\" no existe." ::msgcat::mcset es "Directory:" "Directorio:" ::msgcat::mcset es "Error: %1\$s" "Error: %1\$s" ::msgcat::mcset es "Exit" "Salir" ::msgcat::mcset es "File \"%1\$s\" already exists.\nDo you want to overwrite it?" "El archivo \"%1\$s\" ya existe.\nDesea sobreescribirlo?" ::msgcat::mcset es "File \"%1\$s\" already exists.\n\n" "El archivo \"%1\$s\" ya existe.\n\n" ::msgcat::mcset es "File \"%1\$s\" does not exist." "El archivo \"%1\$s\" no existe." ::msgcat::mcset es "File name:" "Nombre de archivo:" ::msgcat::mcset es "File names:" "Nombres de archivo:" ::msgcat::mcset es "Files of type:" "Archivos de tipo:" ::msgcat::mcset es "Files:" "Archivos:" ::msgcat::mcset es "Filter" "Filtro" ::msgcat::mcset es "Filter:" "Filtro:" ::msgcat::mcset es "Green" "Verde" ::msgcat::mcset es "Hi" "Hola" ::msgcat::mcset es "Hide Console" "Esconder la consola" ::msgcat::mcset es "Ignore" "Ignorar" ::msgcat::mcset es "Invalid file name \"%1\$s\"." "Nombre de archivo inv\u00e1lido \"%1\$s\"." ::msgcat::mcset es "Log Files" "Ficheros de traza" ::msgcat::mcset es "No" "No" ::msgcat::mcset es "OK" "OK" ::msgcat::mcset es "Ok" "Ok" ::msgcat::mcset es "Open" "Abrir" ::msgcat::mcset es "Open Multiple Files" "Abrir m\u00faltiples archivos" ::msgcat::mcset es "Paste" "Pegar" ::msgcat::mcset es "Quit" "Abandonar" ::msgcat::mcset es "Red" "Rojo" ::msgcat::mcset es "Replace existing file?" "Reemplazar el archivo existente?" ::msgcat::mcset es "Retry" "Reintentar" ::msgcat::mcset es "Save" "Salvar" ::msgcat::mcset es "Save As" "Salvar como" ::msgcat::mcset es "Save To Log" "Salvar al archivo de traza" ::msgcat::mcset es "Select Log File" "Elegir un archivo de traza" ::msgcat::mcset es "Select a file to source" "Seleccionar un archivo a evaluar" ::msgcat::mcset es "Selection:" "Selecci\u00f3n:" ::msgcat::mcset es "Skip Messages" "Omitir los mensajes" ::msgcat::mcset es "Source..." "Evaluar..." ::msgcat::mcset es "Tcl Scripts" "Scripts Tcl" ::msgcat::mcset es "Tcl for Windows" "Tcl para Windows" ::msgcat::mcset es "Text Files" "Archivos de texto" ::msgcat::mcset es "Yes" "S\u00ed" ::msgcat::mcset es "abort" "abortar" ::msgcat::mcset es "blue" "azul" ::msgcat::mcset es "cancel" "cancelar" ::msgcat::mcset es "extension" "extensi\u00f3n" ::msgcat::mcset es "extensions" "extensiones" ::msgcat::mcset es "green" "verde" ::msgcat::mcset es "ignore" "ignorar" ::msgcat::mcset es "ok" "ok" ::msgcat::mcset es "red" "rojo" ::msgcat::mcset es "retry" "reintentar" ::msgcat::mcset es "yes" "s\u00ed" } |
Changes to library/msgs/fr.msg.
|
| > | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 | namespace eval ::tk { ::msgcat::mcset fr "Abort" "Annuler" ::msgcat::mcset fr "About..." "\u00c0 propos..." ::msgcat::mcset fr "All Files" "Tous les fichiers" ::msgcat::mcset fr "Application Error" "Erreur d'application" ::msgcat::mcset fr "Blue" "Bleu" ::msgcat::mcset fr "Cancel" "Annuler" ::msgcat::mcset fr "Cannot change to the directory \"%1\$s\".\nPermission denied." "Impossible d'acc\u00e9der au r\u00e9pertoire \"%1\$s\".\nPermission refus\u00e9e." ::msgcat::mcset fr "Choose Directory" "Choisir r\u00e9pertoire" ::msgcat::mcset fr "Clear" "Effacer" ::msgcat::mcset fr "Color" "Couleur" ::msgcat::mcset fr "Console" ::msgcat::mcset fr "Copy" "Copier" ::msgcat::mcset fr "Cut" "Couper" ::msgcat::mcset fr "Delete" "Effacer" ::msgcat::mcset fr "Details >>" "D\u00e9tails >>" ::msgcat::mcset fr "Directory \"%1\$s\" does not exist." ::msgcat::mcset fr "Directory:" "R\u00e9pertoire:" ::msgcat::mcset fr "Error: %1\$s" ::msgcat::mcset fr "Exit" ::msgcat::mcset fr "File \"%1\$s\" already exists.\nDo you want to overwrite it?" "Le fichier \"%1\$s\" existe d\u00e9j\u00e0.\nVoulez-vous l'\u00e9craser?" ::msgcat::mcset fr "File \"%1\$s\" already exists.\n\n" "Le fichier \"%1\$s\" existe d\u00e9j\u00e0.\n\n" ::msgcat::mcset fr "File \"%1\$s\" does not exist." "Le fichier \"%1\$s\" n'existe pas." ::msgcat::mcset fr "File name:" "Nom de fichier:" ::msgcat::mcset fr "File names:" "Noms de fichiers:" ::msgcat::mcset fr "Files of type:" "Type de fichiers:" ::msgcat::mcset fr "Files:" "Fichiers:" ::msgcat::mcset fr "Filter" "Filtre" ::msgcat::mcset fr "Filter:" "Filtre:" ::msgcat::mcset fr "Green" "Vert" ::msgcat::mcset fr "Hi" "All\u00f4" ::msgcat::mcset fr "Hide Console" "Cacher la Console" ::msgcat::mcset fr "Ignore" "Ignorer" ::msgcat::mcset fr "Invalid file name \"%1\$s\"." "Nom de fichier invalide \"%1\$s\"." ::msgcat::mcset fr "Log Files" "Fichiers de trace" ::msgcat::mcset fr "No" "Non" ::msgcat::mcset fr "OK" ::msgcat::mcset fr "Ok" ::msgcat::mcset fr "Open" "Ouvrir" ::msgcat::mcset fr "Open Multiple Files" "Ouvrir plusieurs fichiers" ::msgcat::mcset fr "Paste" "Coller" ::msgcat::mcset fr "Quit" "Abandonner" ::msgcat::mcset fr "Red" "Rouge" ::msgcat::mcset fr "Replace existing file?" "Remplacer fichier existant?" ::msgcat::mcset fr "Retry" "R\u00e9-essayer" ::msgcat::mcset fr "Save" "Sauvegarder" ::msgcat::mcset fr "Save As" "Sauvegarder sous" ::msgcat::mcset fr "Save To Log" "Sauvegarde au fichier de trace" ::msgcat::mcset fr "Select Log File" "Choisir un fichier de trace" ::msgcat::mcset fr "Select a file to source" "Choisir un fichier \u00e0 \u00e9valuer" ::msgcat::mcset fr "Selection:" "S\u00e9lection:" ::msgcat::mcset fr "Skip Messages" "Omettre les messages" ::msgcat::mcset fr "Source..." "\u00c9valuer..." ::msgcat::mcset fr "Tcl Scripts" "Scripts Tcl" ::msgcat::mcset fr "Tcl for Windows" "Tcl pour Windows" ::msgcat::mcset fr "Text Files" "Fichiers texte" ::msgcat::mcset fr "Yes" "Oui" ::msgcat::mcset fr "abort" "annuler" ::msgcat::mcset fr "blue" "bleu" ::msgcat::mcset fr "cancel" "annuler" ::msgcat::mcset fr "extension" ::msgcat::mcset fr "extensions" ::msgcat::mcset fr "green" "vert" ::msgcat::mcset fr "ignore" "ignorer" ::msgcat::mcset fr "ok" ::msgcat::mcset fr "red" "rouge" ::msgcat::mcset fr "retry" "r\u00e9-essayer" ::msgcat::mcset fr "yes" "oui" } |
Changes to library/msgs/it.msg.
|
| > | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 | namespace eval ::tk { ::msgcat::mcset it "Abort" "Interrompi" ::msgcat::mcset it "About..." "Informazioni ..." ::msgcat::mcset it "All Files" "Tutti i file" ::msgcat::mcset it "Application Error" "Errore dell' applicazione" ::msgcat::mcset it "Blue" "Blu" ::msgcat::mcset it "Cancel" "Annulla" ::msgcat::mcset it "Cannot change to the directory \"%1\$s\".\nPermission denied." "Impossibile accedere alla directory \"%1\$s\".\nPermesso negato." ::msgcat::mcset it "Choose Directory" "Scegli directory" ::msgcat::mcset it "Clear" "Azzera" ::msgcat::mcset it "Color" "Colore" ::msgcat::mcset it "Console" ::msgcat::mcset it "Copy" "Copia" ::msgcat::mcset it "Cut" "Taglia" ::msgcat::mcset it "Delete" "Incolla" ::msgcat::mcset it "Details >>" "Dettagli >>" ::msgcat::mcset it "Directory \"%1\$s\" does not exist." "La directory \"%1\$s\" non esiste." ::msgcat::mcset it "Directory:" ::msgcat::mcset it "Error: %1\$s" "Errore: %1\$s" ::msgcat::mcset it "Exit" "Esci" ::msgcat::mcset it "File \"%1\$s\" already exists.\nDo you want to overwrite it?" "Il file \"%1\$s\" esiste gi\u00e0.\nVuoi sovrascriverlo?" ::msgcat::mcset it "File \"%1\$s\" already exists.\n\n" "Il file \"%1\$s\" esiste gi\u00e0.\n\n" ::msgcat::mcset it "File \"%1\$s\" does not exist." "Il file \"%1\$s\" non esiste." ::msgcat::mcset it "File name:" "Nome del file:" ::msgcat::mcset it "File names:" "Nomi dei file:" ::msgcat::mcset it "Files of type:" "File di tipo:" ::msgcat::mcset it "Files:" "File:" ::msgcat::mcset it "Filter" "Filtro" ::msgcat::mcset it "Filter:" "Filtro:" ::msgcat::mcset it "Green" "Verde" ::msgcat::mcset it "Hi" "Salve" ::msgcat::mcset it "Hide Console" "Nascondi la console" ::msgcat::mcset it "Ignore" "Ignora" ::msgcat::mcset it "Invalid file name \"%1\$s\"." "Nome di file non valido \"%1\$s\"." ::msgcat::mcset it "Log Files" "File di log" ::msgcat::mcset it "No" ::msgcat::mcset it "OK" ::msgcat::mcset it "Ok" ::msgcat::mcset it "Open" "Apri" ::msgcat::mcset it "Open Multiple Files" "Apri file multipli" ::msgcat::mcset it "Paste" "Incolla" ::msgcat::mcset it "Quit" "Esci" ::msgcat::mcset it "Red" "Rosso" ::msgcat::mcset it "Replace existing file?" "Sostituisci il file esistente?" ::msgcat::mcset it "Retry" "Riprova" ::msgcat::mcset it "Save" "Salva" ::msgcat::mcset it "Save As" "Salva come" ::msgcat::mcset it "Save To Log" "Salva il log" ::msgcat::mcset it "Select Log File" "Scegli un file di log" ::msgcat::mcset it "Select a file to source" "Scegli un file da eseguire" ::msgcat::mcset it "Selection:" "Selezione:" ::msgcat::mcset it "Skip Messages" "Salta i messaggi" ::msgcat::mcset it "Source..." "Esegui..." ::msgcat::mcset it "Tcl Scripts" "Scripts Tcl" ::msgcat::mcset it "Tcl for Windows" "Tcl per Windows" ::msgcat::mcset it "Text Files" "File di testo" ::msgcat::mcset it "Yes" "Si" ::msgcat::mcset it "abort" "interrompi" ::msgcat::mcset it "blue" "blu" ::msgcat::mcset it "cancel" "annulla" ::msgcat::mcset it "extension" "estensione" ::msgcat::mcset it "extensions" "estensioni" ::msgcat::mcset it "green" "verde" ::msgcat::mcset it "ignore" "ignora" ::msgcat::mcset it "ok" ::msgcat::mcset it "red" "rosso" ::msgcat::mcset it "retry" "riprova" ::msgcat::mcset it "yes" "si" } |
Changes to library/msgs/nl.msg.
|
| > | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 | namespace eval ::tk { ::msgcat::mcset nl "\"%1\$s\" must be an absolute pathname" "\"%1\$s\" moet een absolute pad-naam zijn" ::msgcat::mcset nl "%1\$s is not a toplevel window" "%1\$s is geen toplevel window" ::msgcat::mcset nl ", or" ", of" ::msgcat::mcset nl "-default, -icon, -message, -parent, -title, or -type" "-default, -icon, -message, -parent, -title, of -type" ::msgcat::mcset nl "-initialdir, -mustexist, -parent, or -title" "-initialdir, -mustexist, -parent, of -title" ::msgcat::mcset nl "Abort" "Afbreken" ::msgcat::mcset nl "About..." "Over..." ::msgcat::mcset nl "All Files" "Alle Bestanden" ::msgcat::mcset nl "Application Error" "Toepassingsfout" ::msgcat::mcset nl "Blue" "Blauw" ::msgcat::mcset nl "Cancel" "Annuleren" ::msgcat::mcset nl "Cannot change to the directory \"%1\$s\".\nPermission denied." "Kan niet naar map \"%1\$s\" gaan.\nU heeft geen toestemming hiervoor." ::msgcat::mcset nl "Choose Directory" "Kies map" ::msgcat::mcset nl "Clear" "Wissen" ::msgcat::mcset nl "Clear entry, Press OK; Enter %1\$s, press OK" "Wis veld, Druk op OK; Geef %1\$s in, druk op OK" ::msgcat::mcset nl "Color" "Kleur" ::msgcat::mcset nl "Console" ::msgcat::mcset nl "Copy" "Copi\u00ebren" ::msgcat::mcset nl "Cut" "Knippen" ::msgcat::mcset nl "Delete" "Wissen" ::msgcat::mcset nl "Details" ::msgcat::mcset nl "Details >>" ::msgcat::mcset nl "Directory \"%1\$s\" does not exist." "Map \"%1\$s\" bestaat niet." ::msgcat::mcset nl "Directory:" "Map:" ::msgcat::mcset nl "Enter \"%1\$s\", press OK" "Toets \"%1\$s\", druk op OK" ::msgcat::mcset nl "Enter \"%1\$s\", press OK, enter \"%2\$s\", press OK" "Toets \"%1\$s\", druk op OK, toets \"%2\$s\", druk op OK" ::msgcat::mcset nl "Error: %1\$s" "Fout: %1\$s" ::msgcat::mcset nl "Exit" "Be\u00ebindigen" ::msgcat::mcset nl "File \"%1\$s\" already exists.\n\n" "Bestand \"%1\$s\" bestaat al.\n\n" ::msgcat::mcset nl "File \"%1\$s\" already exists.\nDo you want to overwrite it?" "Bestand \"%1\$s\" bestaat al.\nWilt u het overschrijven?" ::msgcat::mcset nl "File \"%1\$s\" does not exist." "Bestand \"%1\$s\" bestaat niet." ::msgcat::mcset nl "File name:" "Bestandsnaam:" ::msgcat::mcset nl "File names:" "Bestandsnamen:" ::msgcat::mcset nl "Files of type:" "Bestanden van het type:" ::msgcat::mcset nl "Files:" "Bestanden:" ::msgcat::mcset nl "Filter" ::msgcat::mcset nl "Filter:" ::msgcat::mcset nl "Green" "Groen" ::msgcat::mcset nl "Hi" "H\u00e9" ::msgcat::mcset nl "Hide Console" "Verberg Console" ::msgcat::mcset nl "Ignore" ::msgcat::mcset nl "Invalid file name \"%1\$s\"." "Ongeldige bestandsnaam \"%1\$s\"." ::msgcat::mcset nl "Log Files" "Log Bestanden" ::msgcat::mcset nl "No" "Nee" ::msgcat::mcset nl "OK" ::msgcat::mcset nl "Ok" ::msgcat::mcset nl "Open" "Openen" ::msgcat::mcset nl "Open Multiple Files" "Open meerdere bestanden" ::msgcat::mcset nl "Paste" "Plakken" ::msgcat::mcset nl "Please press %1\$s" "Druk op %1\$s, A.U.B." ::msgcat::mcset nl "Please press ok" "Druk op ok, A.U.B." ::msgcat::mcset nl "Press Cancel" "Druk op Annuleren" ::msgcat::mcset nl "Press Ok" "Druk op Ok" ::msgcat::mcset nl "Quit" "Stoppen" ::msgcat::mcset nl "Red" "Rood" ::msgcat::mcset nl "Replace existing file?" "Vervang bestaand bestand?" ::msgcat::mcset nl "Retry" "Opnieuw" ::msgcat::mcset nl "Save" "Opslaan" ::msgcat::mcset nl "Save As" "Opslaan als" ::msgcat::mcset nl "Save To Log" "Opslaan naar Log" ::msgcat::mcset nl "Select Log File" "Selecteer Log bestand" ::msgcat::mcset nl "Select a file to source" "Selecteer bronbestand" ::msgcat::mcset nl "Selection:" "Selectie:" ::msgcat::mcset nl "Skip Messages" "Berichten overslaan" ::msgcat::mcset nl "Source..." "Bron..." ::msgcat::mcset nl "Tcl Scripts" ::msgcat::mcset nl "Tcl for Windows" "Tcl voor Windows" ::msgcat::mcset nl "Text Files" "Tekst Bestanden" ::msgcat::mcset nl "Yes" "Ja" ::msgcat::mcset nl "abort" "afbreken" ::msgcat::mcset nl "abort, retry, ignore, ok, cancel, no, or yes" "afbreken, opnieuw, negeren, ok, annuleren, nee, of ja" ::msgcat::mcset nl "abortretryignore, ok, okcancel, retrycancel, yesno, or yesnocancel" "abortretryignore, ok, okcancel, retrycancel, yesno, of yesnocancel" ::msgcat::mcset nl "bad %1\$s value \"%2\$s\": must be %3\$s" "foutieve %1\$s waarde \"%2\$s\": moet zijn %3\$s" ::msgcat::mcset nl "bad file type \"%1\$s\", should be" "foutief bestandstype \"%1\$s\", moet zijn" ::msgcat::mcset nl "bad option \"%1\$s\": should be %2\$s" "foutieve optie \"%1\$s\": moet zijn %2\$s" ::msgcat::mcset nl "bad window path name \"%1\$s\"" "foutieve window pad naam \"%1\$s\"" ::msgcat::mcset nl "blue" "blauw" ::msgcat::mcset nl "can't post %1\$s: it isn't a descendant of %2\$s (this is a new requirement in Tk versions 3.0 and later)" "kan %1\$s niet verzenden: het is geen afstammeling van %2\$s (dit is een niewe verplichting in Tk versies 3.0 en later)" ::msgcat::mcset nl "cancel" "annuleren" ::msgcat::mcset nl "default button index greater than number of buttons specified for tk_dialog" "default knop index is groter dan het aantal knoppen beschikbaar voor tk_dialog" ::msgcat::mcset nl "display name to use (current one otherwise)" "te gebruiken schermnaam (anders huidige scherm)" ::msgcat::mcset nl "error, info, question, or warning" "error, info, question, of warning" ::msgcat::mcset nl "extension" ::msgcat::mcset nl "extensions" ::msgcat::mcset nl "focus group \"%1\$s\" doesn't exist" "focus groep \"%1\$s\" bestaat niet" ::msgcat::mcset nl "green" "groen" ::msgcat::mcset nl "history event %1\$s" ::msgcat::mcset nl "ignore" "negeren" ::msgcat::mcset nl "invalid default button \"%1\$s\"" "ongeldige default knop \"%1\$s\"" ::msgcat::mcset nl "macType" ::msgcat::mcset nl "macTypes" ::msgcat::mcset nl "must specify a background color" "een achtergrondkleur is verplicht" ::msgcat::mcset nl "name of the slave interpreter" "naam van de slaaf interpreter" ::msgcat::mcset nl "no winfo screen . nor env(DISPLAY)" "geen winfo scherm . noch env(DISPLAY)" ::msgcat::mcset nl "ok" ::msgcat::mcset nl "red" "rood" ::msgcat::mcset nl "retry" "opnieuw" ::msgcat::mcset nl "should contain 5 or 4 elements" "moet 4 of 5 elementen bevatten" ::msgcat::mcset nl "spec" ::msgcat::mcset nl "tk_chooseDirectory command" "tk_chooseDirectory commando" ::msgcat::mcset nl "tk_chooseDirectory command, cancel gives null" "tk_chooseDirectory commando, annuleren geeft lege waarde" ::msgcat::mcset nl "tk_chooseDirectory command, initialdir" "tk_chooseDirectory commando, initi\u00eble map" ::msgcat::mcset nl "yes" "ja" } |
Changes to library/panedwindow.tcl.
1 2 3 4 5 | # panedwindow.tcl -- # # This file defines the default bindings for Tk panedwindow widgets and # provides procedures that help in implementing those bindings. # | | | 1 2 3 4 5 6 7 8 9 10 11 12 13 | # panedwindow.tcl -- # # This file defines the default bindings for Tk panedwindow widgets and # provides procedures that help in implementing those bindings. # # RCS: @(#) $Id: panedwindow.tcl,v 1.5.4.2 2002/06/10 05:38:24 wolfsuit Exp $ # bind PanedWindow <Button-1> { ::tk::panedwindow::MarkSash %W %x %y 1 } bind PanedWindow <Button-2> { ::tk::panedwindow::MarkSash %W %x %y 0 } bind PanedWindow <B1-Motion> { ::tk::panedwindow::DragSash %W %x %y 1 } bind PanedWindow <B2-Motion> { ::tk::panedwindow::DragSash %W %x %y 0 } |
︙ | ︙ |
Changes to library/scale.tcl.
1 2 3 4 5 | # scale.tcl -- # # This file defines the default bindings for Tk scale widgets and provides # procedures that help in implementing the bindings. # | | | 1 2 3 4 5 6 7 8 9 10 11 12 13 | # scale.tcl -- # # This file defines the default bindings for Tk scale widgets and provides # procedures that help in implementing the bindings. # # RCS: @(#) $Id: scale.tcl,v 1.8.2.1 2002/06/10 05:38:24 wolfsuit Exp $ # # Copyright (c) 1994 The Regents of the University of California. # Copyright (c) 1994-1995 Sun Microsystems, Inc. # # See the file "license.terms" for information on usage and redistribution # of this file, and for a DISCLAIMER OF ALL WARRANTIES. # |
︙ | ︙ | |||
58 59 60 61 62 63 64 65 66 67 68 69 70 71 | bind Scale <B2-Leave> { } bind Scale <B2-Enter> { } bind Scale <ButtonRelease-2> { tk::CancelRepeat tk::ScaleEndDrag %W tk::ScaleActivate %W %x %y } bind Scale <Control-1> { tk::ScaleControlPress %W %x %y } bind Scale <Up> { tk::ScaleIncrement %W up little noRepeat } bind Scale <Down> { | > > > > > > > > | 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 | bind Scale <B2-Leave> { } bind Scale <B2-Enter> { } bind Scale <ButtonRelease-2> { tk::CancelRepeat tk::ScaleEndDrag %W tk::ScaleActivate %W %x %y } if {[string equal $tcl_platform(platform) "windows"]} { # On Windows do the same with button 3, as that is the right mouse button bind Scale <3> [bind Scale <2>] bind Scale <B3-Motion> [bind Scale <B2-Motion>] bind Scale <B3-Leave> [bind Scale <B2-Leave>] bind Scale <B3-Enter> [bind Scale <B2-Enter>] bind Scale <ButtonRelease-3> [bind Scale <ButtonRelease-2>] } bind Scale <Control-1> { tk::ScaleControlPress %W %x %y } bind Scale <Up> { tk::ScaleIncrement %W up little noRepeat } bind Scale <Down> { |
︙ | ︙ |
Changes to library/tclIndex.
1 2 3 4 5 6 7 8 9 | # Tcl autoload index file, version 2.0 # This file is generated by the "auto_mkindex" command # and sourced to set up indexing information for one or # more commands. Typically each line is a command that # sets an element in the auto_index array, where the # element name is the name of a command and the value is # a script that loads the command. set auto_index(::tk::dialog::error::Return) [list source [file join $dir bgerror.tcl]] | | < | > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | # Tcl autoload index file, version 2.0 # This file is generated by the "auto_mkindex" command # and sourced to set up indexing information for one or # more commands. Typically each line is a command that # sets an element in the auto_index array, where the # element name is the name of a command and the value is # a script that loads the command. set auto_index(::tk::dialog::error::Return) [list source [file join $dir bgerror.tcl]] set auto_index(::tk::dialog::error::Details) [list source [file join $dir bgerror.tcl]] set auto_index(::tk::dialog::error::SaveToLog) [list source [file join $dir bgerror.tcl]] set auto_index(::tk::dialog::error::Destroy) [list source [file join $dir bgerror.tcl]] set auto_index(::tk::dialog::error::bgerror) [list source [file join $dir bgerror.tcl]] set auto_index(bgerror) [list source [file join $dir bgerror.tcl]] set auto_index(::tk::ButtonInvoke) [list source [file join $dir button.tcl]] set auto_index(::tk::ButtonAutoInvoke) [list source [file join $dir button.tcl]] set auto_index(::tk::CheckRadioInvoke) [list source [file join $dir button.tcl]] set auto_index(::tk::dialog::file::chooseDir::) [list source [file join $dir choosedir.tcl]] set auto_index(::tk::dialog::file::chooseDir::Config) [list source [file join $dir choosedir.tcl]] set auto_index(::tk::dialog::file::chooseDir::OkCmd) [list source [file join $dir choosedir.tcl]] |
︙ | ︙ |
Changes to library/text.tcl.
1 2 3 4 5 | # text.tcl -- # # This file defines the default bindings for Tk text widgets and provides # procedures that help in implementing the bindings. # | | | 1 2 3 4 5 6 7 8 9 10 11 12 13 | # text.tcl -- # # This file defines the default bindings for Tk text widgets and provides # procedures that help in implementing the bindings. # # RCS: @(#) $Id: text.tcl,v 1.17.2.3 2002/06/10 05:38:24 wolfsuit Exp $ # # Copyright (c) 1992-1994 The Regents of the University of California. # Copyright (c) 1994-1997 Sun Microsystems, Inc. # Copyright (c) 1998 by Scriptics Corporation. # # See the file "license.terms" for information on usage and redistribution # of this file, and for a DISCLAIMER OF ALL WARRANTIES. |
︙ | ︙ | |||
50 51 52 53 54 55 56 | set tk::Priv(y) %y tk::TextSelectTo %W %x %y } bind Text <Double-1> { set tk::Priv(selectMode) word tk::TextSelectTo %W %x %y catch {%W mark set insert sel.last} | < < | 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 | set tk::Priv(y) %y tk::TextSelectTo %W %x %y } bind Text <Double-1> { set tk::Priv(selectMode) word tk::TextSelectTo %W %x %y catch {%W mark set insert sel.last} } bind Text <Triple-1> { set tk::Priv(selectMode) line tk::TextSelectTo %W %x %y catch {%W mark set insert sel.last} } bind Text <Shift-1> { tk::TextResetAnchor %W @%x,%y set tk::Priv(selectMode) char tk::TextSelectTo %W %x %y } bind Text <Double-Shift-1> { |
︙ | ︙ | |||
254 255 256 257 258 259 260 | } bind Text <<Clear>> { catch {%W delete sel.first sel.last} } bind Text <<PasteSelection>> { if {$tk_strictMotif || ![info exists tk::Priv(mouseMoved)] || !$tk::Priv(mouseMoved)} { | | | 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 | } bind Text <<Clear>> { catch {%W delete sel.first sel.last} } bind Text <<PasteSelection>> { if {$tk_strictMotif || ![info exists tk::Priv(mouseMoved)] || !$tk::Priv(mouseMoved)} { tk::TextPasteSelection %W %x %y } } bind Text <Insert> { catch {tk::TextInsert %W [::tk::GetSelection %W PRIMARY]} } bind Text <KeyPress> { tk::TextInsert %W %A |
︙ | ︙ | |||
626 627 628 629 630 631 632 | set last $cur } $w tag remove sel 0.0 $first $w tag add sel $first $last $w tag remove sel $last end } | | | | < | | 624 625 626 627 628 629 630 631 632 633 634 635 636 637 638 639 640 641 642 643 644 645 646 647 648 649 650 651 652 653 654 | set last $cur } $w tag remove sel 0.0 $first $w tag add sel $first $last $w tag remove sel $last end } # ::tk::TextPasteSelection -- # This procedure sets the insertion cursor to the mouse position, # inserts the selection, and sets the focus to the window. # # Arguments: # w - The text window. # x, y - Position of the mouse. proc ::tk::TextPasteSelection {w x y} { $w mark set insert [TextClosestGap $w $x $y] if {![catch {::tk::GetSelection $w PRIMARY} sel]} { set oldSeparator [$w cget -autoseparators] if {$oldSeparator} { $w configure -autoseparators 0 $w edit separator } $w insert insert $sel if {$oldSeparator} { $w edit separator $w configure -autoseparators 1 } } if {[string equal [$w cget -state] "normal"]} {focus $w} } |
︙ | ︙ | |||
998 999 1000 1001 1002 1003 1004 | # point in a text widget. # # Arguments: # w - Name of a text widget. proc ::tk_textPaste w { global tcl_platform | | | | 995 996 997 998 999 1000 1001 1002 1003 1004 1005 1006 1007 1008 1009 1010 1011 1012 1013 1014 1015 1016 1017 1018 | # point in a text widget. # # Arguments: # w - Name of a text widget. proc ::tk_textPaste w { global tcl_platform if {![catch {::tk::GetSelection $w CLIPBOARD} sel]} { set oldSeparator [$w cget -autoseparators] if { $oldSeparator } { $w configure -autoseparators 0 $w edit separator } if {[string compare $tcl_platform(windowingsystem) "x11"]} { catch { $w delete sel.first sel.last } } $w insert insert $sel if { $oldSeparator } { $w edit separator $w configure -autoseparators 1 } } } |
︙ | ︙ |
Changes to library/tk.tcl.
1 2 3 4 5 | # tk.tcl -- # # Initialization script normally executed in the interpreter for each # Tk-based application. Arranges class bindings for widgets. # | | | > > > > > | > > > > > > > > > > > > > > > > > > > | > > > < < < < < | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 | # tk.tcl -- # # Initialization script normally executed in the interpreter for each # Tk-based application. Arranges class bindings for widgets. # # RCS: @(#) $Id: tk.tcl,v 1.31.2.3 2002/06/10 05:38:24 wolfsuit Exp $ # # Copyright (c) 1992-1994 The Regents of the University of California. # Copyright (c) 1994-1996 Sun Microsystems, Inc. # Copyright (c) 1998-2000 Ajuba Solutions. # # See the file "license.terms" for information on usage and redistribution # of this file, and for a DISCLAIMER OF ALL WARRANTIES. # Insist on running with compatible versions of Tcl and Tk. package require -exact Tk 8.4 package require -exact Tcl 8.4 # Create a ::tk namespace namespace eval ::tk { # Set up the msgcat commands namespace eval msgcat { namespace export mc mcmax if {[interp issafe] || [catch {package require msgcat}]} { # The msgcat package is not available. Supply our own # minimal replacement. proc mc {src args} { return [eval [list format $src] $args] } proc mcmax {args} { set max 0 foreach string $args { set len [string length $string] if {$len>$max} { set max $len } } return $max } } else { # Get the commands from the msgcat package that Tk uses. namespace import ::msgcat::mc namespace import ::msgcat::mcmax ::msgcat::mcload [file join $::tk_library msgs] } } namespace import ::tk::msgcat::* } # Add Tk's directory to the end of the auto-load search path, if it # isn't already on the path: if {[info exists ::auto_path] && [string compare {} $::tk_library] && \ [lsearch -exact $::auto_path $::tk_library] < 0} { lappend ::auto_path $::tk_library } # Turn off strict Motif look and feel as a default. set ::tk_strictMotif 0 # Turn on useinputmethods (X Input Methods) by default. # We catch this because safe interpreters may not allow the call. catch {tk useinputmethods 1} # ::tk::PlaceWindow -- # place a toplevel at a particular position # Arguments: # toplevel name of toplevel window # ?placement? pointer ?center? ; places $w centered on the pointer # widget widgetPath ; centers $w over widget_name # defaults to placing toplevel in the middle of the screen |
︙ | ︙ | |||
322 323 324 325 326 327 328 | # PrevWindow event. # The info exists is necessary, because tcl_platform(os) doesn't # exist in safe interpreters. if {[info exists tcl_platform(os)]} { switch $tcl_platform(os) { "IRIX" - "Linux" { event add <<PrevWindow>> <ISO_Left_Tab> } | | | | | | 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 | # PrevWindow event. # The info exists is necessary, because tcl_platform(os) doesn't # exist in safe interpreters. if {[info exists tcl_platform(os)]} { switch $tcl_platform(os) { "IRIX" - "Linux" { event add <<PrevWindow>> <ISO_Left_Tab> } "HP-UX" { # This seems to be correct on *some* HP systems. catch { event add <<PrevWindow>> <hpBackTab> } } } } trace variable ::tk_strictMotif w ::tk::EventMotifBindings set ::tk_strictMotif $::tk_strictMotif } "win32" { event add <<Cut>> <Control-Key-x> <Shift-Key-Delete> |
︙ | ︙ | |||
356 357 358 359 360 361 362 | event add <<Paste>> <Control-Key-v> <Key-F4> event add <<PasteSelection>> <ButtonRelease-2> event add <<Clear>> <Clear> event add <<Undo>> <Control-Key-z> <Key-F1> event add <<Redo>> <Control-Key-Z> } } | < | | > > > > | > > > > > > | > > > > > | | > | | | | | | | 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 | event add <<Paste>> <Control-Key-v> <Key-F4> event add <<PasteSelection>> <ButtonRelease-2> event add <<Clear>> <Clear> event add <<Undo>> <Control-Key-z> <Key-F1> event add <<Redo>> <Control-Key-Z> } } # ---------------------------------------------------------------------- # Read in files that define all of the class bindings. # ---------------------------------------------------------------------- if {$::tk_library ne ""} { if {[string equal $tcl_platform(platform) "macintosh"]} { proc ::tk::SourceLibFile {file} { if {[catch { namespace eval :: \ [list source [file join $::tk_library $file.tcl]] }]} { namespace eval :: [list source -rsrc $file] } } } else { proc ::tk::SourceLibFile {file} { namespace eval :: [list source [file join $::tk_library $file.tcl]] } } namespace eval ::tk { SourceLibFile button SourceLibFile entry SourceLibFile listbox SourceLibFile menu SourceLibFile panedwindow SourceLibFile scale SourceLibFile scrlbar SourceLibFile spinbox SourceLibFile text } } # ---------------------------------------------------------------------- # Default bindings for keyboard traversal. # ---------------------------------------------------------------------- event add <<PrevWindow>> <Shift-Tab> bind all <Tab> {tk::TabToWindow [tk_focusNext %W]} bind all <<PrevWindow>> {tk::TabToWindow [tk_focusPrev %W]} |
︙ | ︙ |
Changes to library/tkfbox.tcl.
1 2 3 4 5 6 7 8 9 10 11 12 13 | # tkfbox.tcl -- # # Implements the "TK" standard file selection dialog box. This # dialog box is used on the Unix platforms whenever the tk_strictMotif # flag is not set. # # The "TK" standard file selection dialog box is similar to the # file selection dialog box on Win95(TM). The user can navigate # the directories by clicking on the folder icons or by # selecting the "Directory" option menu. The user can select # files by clicking on the file icons or by entering a filename # in the "Filename:" entry. # | | | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | # tkfbox.tcl -- # # Implements the "TK" standard file selection dialog box. This # dialog box is used on the Unix platforms whenever the tk_strictMotif # flag is not set. # # The "TK" standard file selection dialog box is similar to the # file selection dialog box on Win95(TM). The user can navigate # the directories by clicking on the folder icons or by # selecting the "Directory" option menu. The user can select # files by clicking on the file icons or by entering a filename # in the "Filename:" entry. # # RCS: @(#) $Id: tkfbox.tcl,v 1.31.2.2 2002/06/10 05:38:24 wolfsuit Exp $ # # Copyright (c) 1994-1998 Sun Microsystems, Inc. # # See the file "license.terms" for information on usage and redistribution # of this file, and for a DISCLAIMER OF ALL WARRANTIES. # |
︙ | ︙ | |||
762 763 764 765 766 767 768 | #---------------------------------------------------------------------- # # F I L E D I A L O G # #---------------------------------------------------------------------- namespace eval ::tk::dialog {} | | > > | 762 763 764 765 766 767 768 769 770 771 772 773 774 775 776 777 778 | #---------------------------------------------------------------------- # # F I L E D I A L O G # #---------------------------------------------------------------------- namespace eval ::tk::dialog {} namespace eval ::tk::dialog::file { namespace import ::tk::msgcat::* } # ::tk::dialog::file:: -- # # Implements the TK file selection dialog. This dialog is used when # the tk_strictMotif flag is set to false. This procedure shouldn't # be called directly. Call tk_getOpenFile or tk_getSaveFile instead. # |
︙ | ︙ | |||
921 922 923 924 925 926 927 | # 3: parse the arguments # tclParseConfigSpec ::tk::dialog::file::$dataName $specs "" $argList if {$data(-title) == ""} { if {[string equal $type "open"]} { | | | | 923 924 925 926 927 928 929 930 931 932 933 934 935 936 937 938 939 | # 3: parse the arguments # tclParseConfigSpec ::tk::dialog::file::$dataName $specs "" $argList if {$data(-title) == ""} { if {[string equal $type "open"]} { set data(-title) "[mc "Open"]" } else { set data(-title) "[mc "Save As"]" } } # 4: set the default directory and selection according to the -initial # settings # if {$data(-initialdir) != ""} { |
︙ | ︙ | |||
973 974 975 976 977 978 979 | global tk_library toplevel $w -class $class # f1: the frame with the directory option menu # set f1 [frame $w.f1] | | | 975 976 977 978 979 980 981 982 983 984 985 986 987 988 989 | global tk_library toplevel $w -class $class # f1: the frame with the directory option menu # set f1 [frame $w.f1] label $f1.lab -text "[mc "Directory:"]" -under 0 set data(dirMenuBtn) $f1.menu set data(dirMenu) [tk_optionMenu $f1.menu [format %s(selectPath) ::tk::dialog::file::$dataName] ""] set data(upBtn) [button $f1.up] if {![info exists Priv(updirImage)]} { set Priv(updirImage) [image create bitmap -data { #define updir_width 28 #define updir_height 16 |
︙ | ︙ | |||
1001 1002 1003 1004 1005 1006 1007 | pack $f1.lab -side left -padx 4 -fill both pack $f1.menu -expand yes -fill both -padx 4 # data(icons): the IconList that list the files and directories. # if { [string equal $class TkFDialog] } { if { $data(-multiple) } { | | | | | | | 1003 1004 1005 1006 1007 1008 1009 1010 1011 1012 1013 1014 1015 1016 1017 1018 1019 1020 1021 1022 1023 1024 1025 1026 1027 | pack $f1.lab -side left -padx 4 -fill both pack $f1.menu -expand yes -fill both -padx 4 # data(icons): the IconList that list the files and directories. # if { [string equal $class TkFDialog] } { if { $data(-multiple) } { set fNameCaption "[mc {File names:}]" } else { set fNameCaption "[mc {File name:}]" } set fTypeCaption [mc "Files of type:"] set fCaptionWidth [mcmax $fNameCaption $fTypeCaption] set fCaptionWidth [expr {$fCaptionWidth<14?14:$fCaptionWidth}] set fNameUnder 5 set iconListCommand [list ::tk::dialog::file::OkCmd $w] } else { set fNameCaption [mc "Selection:"] set fNameUnder 0 set fCaptionWidth [string length $fNameCaption] set iconListCommand [list ::tk::dialog::file::chooseDir::DblClick $w] } set data(icons) [::tk::IconList $w.icons \ -command $iconListCommand \ -multiple $data(-multiple)] |
︙ | ︙ | |||
1064 1065 1066 1067 1068 1069 1070 | set data(typeMenu) [menu $data(typeMenuBtn).m -tearoff 0] $data(typeMenuBtn) config -takefocus 1 -highlightthickness 2 \ -relief raised -bd 2 -anchor w } # the okBtn is created after the typeMenu so that the keyboard traversal # is in the right order | | | | | 1066 1067 1068 1069 1070 1071 1072 1073 1074 1075 1076 1077 1078 1079 1080 1081 1082 1083 1084 | set data(typeMenu) [menu $data(typeMenuBtn).m -tearoff 0] $data(typeMenuBtn) config -takefocus 1 -highlightthickness 2 \ -relief raised -bd 2 -anchor w } # the okBtn is created after the typeMenu so that the keyboard traversal # is in the right order set maxWidth [mcmax OK Cancel] set maxWidth [expr {$maxWidth<6?6:$maxWidth}] set data(okBtn) [button $f2.ok -text "[mc "OK"]" \ -under 0 -width $maxWidth -default active -pady 3] set data(cancelBtn) [button $f3.cancel -text "[mc "Cancel"]" \ -under 0 -width $maxWidth -default normal -pady 3] # pack the widgets in f2 and f3 # pack $data(okBtn) -side right -padx 4 -anchor e pack $f2.lab -side left -padx 4 pack $f2.ent -expand yes -fill x -padx 2 -pady 0 |
︙ | ︙ | |||
1144 1145 1146 1147 1148 1149 1150 | # Results: # None. proc ::tk::dialog::file::SetSelectMode {w multi} { set dataName __tk_filedialog upvar ::tk::dialog::file::$dataName data if { $multi } { | | | | 1146 1147 1148 1149 1150 1151 1152 1153 1154 1155 1156 1157 1158 1159 1160 1161 1162 | # Results: # None. proc ::tk::dialog::file::SetSelectMode {w multi} { set dataName __tk_filedialog upvar ::tk::dialog::file::$dataName data if { $multi } { set fNameCaption "[mc {File names:}]" } else { set fNameCaption "[mc {File name:}]" } set fNameUnder 5 set iconListCommand [list ::tk::dialog::file::OkCmd $w] $w.f2.lab configure -text $fNameCaption -under $fNameUnder ::tk::IconList_Config $data(icons) \ [list -multiple $multi -command $iconListCommand] return |
︙ | ︙ | |||
1218 1219 1220 1221 1222 1223 1224 | cd $data(selectPath) }]} { # We cannot change directory to $data(selectPath). $data(selectPath) # should have been checked before ::tk::dialog::file::Update is called, so # we normally won't come to here. Anyways, give an error and abort # action. tk_messageBox -type ok -parent $w -message \ | | | 1220 1221 1222 1223 1224 1225 1226 1227 1228 1229 1230 1231 1232 1233 1234 | cd $data(selectPath) }]} { # We cannot change directory to $data(selectPath). $data(selectPath) # should have been checked before ::tk::dialog::file::Update is called, so # we normally won't come to here. Anyways, give an error and abort # action. tk_messageBox -type ok -parent $w -message \ "[mc "Cannot change to the directory \"%1\$s\".\nPermission denied." $data(selectPath)]"\ -icon warning cd $appPWD return } # Turn on the busy cursor. BUG?? We haven't disabled X events, though, # so the user may still click and cause havoc ... |
︙ | ︙ | |||
1301 1302 1303 1304 1305 1306 1307 | # cd $appPWD if { [string equal $class TkFDialog] } { # Restore the Open/Save Button if this is a File Dialog # if {[string equal $data(type) open]} { | | | | | | 1303 1304 1305 1306 1307 1308 1309 1310 1311 1312 1313 1314 1315 1316 1317 1318 1319 1320 1321 1322 1323 1324 1325 | # cd $appPWD if { [string equal $class TkFDialog] } { # Restore the Open/Save Button if this is a File Dialog # if {[string equal $data(type) open]} { $data(okBtn) config -text "[mc "Open"]" set maxWidth [string length [mc "Open"]] if {$maxWidth>[$data(okBtn) cget -width]} { $data(okBtn) config -width $maxWidth $data(cancelBtn) config -width $maxWidth } } else { $data(okBtn) config -text "[mc "Save"]" set maxWidth [string length [mc "Save"]] if {$maxWidth>[$data(okBtn) cget -width]} { $data(okBtn) config -width $maxWidth $data(cancelBtn) config -width $maxWidth } } } |
︙ | ︙ | |||
1502 1503 1504 1505 1506 1507 1508 | } else { $data(ent) selection clear } if { [string equal [winfo class $w] TkFDialog] } { # If this is a File Dialog, make sure the buttons are labeled right. if {[string equal $data(type) open]} { | | | | 1504 1505 1506 1507 1508 1509 1510 1511 1512 1513 1514 1515 1516 1517 1518 1519 1520 | } else { $data(ent) selection clear } if { [string equal [winfo class $w] TkFDialog] } { # If this is a File Dialog, make sure the buttons are labeled right. if {[string equal $data(type) open]} { $data(okBtn) config -text "[mc "Open"]" } else { $data(okBtn) config -text "[mc "Save"]" } } } proc ::tk::dialog::file::EntFocusOut {w} { upvar ::tk::dialog::file::[winfo name $w] data |
︙ | ︙ | |||
1571 1572 1573 1574 1575 1576 1577 | PATTERN { set data(selectPath) $path set data(filter) $file } FILE { if {[string equal $data(type) open]} { tk_messageBox -icon warning -type ok -parent $w \ | | | | | | 1573 1574 1575 1576 1577 1578 1579 1580 1581 1582 1583 1584 1585 1586 1587 1588 1589 1590 1591 1592 1593 1594 1595 1596 1597 1598 1599 1600 1601 1602 1603 1604 1605 1606 1607 1608 1609 1610 1611 1612 1613 1614 1615 | PATTERN { set data(selectPath) $path set data(filter) $file } FILE { if {[string equal $data(type) open]} { tk_messageBox -icon warning -type ok -parent $w \ -message "[mc "File \"%1\$s\" does not exist." [file join $path $file]]" $data(ent) selection range 0 end $data(ent) icursor end } else { ::tk::dialog::file::SetPathSilently $w $path if {$data(-multiple)} { lappend data(selectFile) $file } else { set data(selectFile) $file } ::tk::dialog::file::Done $w } } PATH { tk_messageBox -icon warning -type ok -parent $w \ -message "[mc "Directory \"%1\$s\" does not exist." $path]" $data(ent) selection range 0 end $data(ent) icursor end } CHDIR { tk_messageBox -type ok -parent $w -message \ "[mc "Cannot change to the directory \"%1\$s\".\nPermission denied." $path]"\ -icon warning $data(ent) selection range 0 end $data(ent) icursor end } ERROR { tk_messageBox -type ok -parent $w -message \ "[mc "Invalid file name \"%1\$s\"." $path]"\ -icon warning $data(ent) selection range 0 end $data(ent) icursor end } } } |
︙ | ︙ | |||
1704 1705 1706 1707 1708 1709 1710 | } if {!$isDir} { $data(ent) delete 0 end $data(ent) insert 0 $text if { [string equal [winfo class $w] TkFDialog] } { if {[string equal $data(type) open]} { | | | | | 1706 1707 1708 1709 1710 1711 1712 1713 1714 1715 1716 1717 1718 1719 1720 1721 1722 1723 1724 1725 1726 1727 | } if {!$isDir} { $data(ent) delete 0 end $data(ent) insert 0 $text if { [string equal [winfo class $w] TkFDialog] } { if {[string equal $data(type) open]} { $data(okBtn) config -text "[mc "Open"]" } else { $data(okBtn) config -text "[mc "Save"]" } } } else { if { [string equal [winfo class $w] TkFDialog] } { $data(okBtn) config -text "[mc "Open"]" } } } # Gets called when user invokes the IconList widget (double-click, # Return key, etc) # |
︙ | ︙ | |||
1734 1735 1736 1737 1738 1739 1740 | [lindex $filenames 0]] set class [winfo class $w] if {[string equal $class TkChooseDir] || [file isdirectory $file]} { set appPWD [pwd] if {[catch {cd $file}]} { tk_messageBox -type ok -parent $w -message \ | | | 1736 1737 1738 1739 1740 1741 1742 1743 1744 1745 1746 1747 1748 1749 1750 | [lindex $filenames 0]] set class [winfo class $w] if {[string equal $class TkChooseDir] || [file isdirectory $file]} { set appPWD [pwd] if {[catch {cd $file}]} { tk_messageBox -type ok -parent $w -message \ "[mc "Cannot change to the directory \"%1\$s\".\nPermission denied." $file]"\ -icon warning } else { cd $appPWD set data(selectPath) $file } } else { if {$data(-multiple)} { |
︙ | ︙ | |||
1781 1782 1783 1784 1785 1786 1787 | set Priv(selectFile) $data(selectFile) set Priv(selectPath) $data(selectPath) if {[string equal $data(type) save]} { if {[file exists $selectFilePath]} { set reply [tk_messageBox -icon warning -type yesno\ -parent $w -message \ | | | 1783 1784 1785 1786 1787 1788 1789 1790 1791 1792 1793 1794 1795 1796 1797 1798 | set Priv(selectFile) $data(selectFile) set Priv(selectPath) $data(selectPath) if {[string equal $data(type) save]} { if {[file exists $selectFilePath]} { set reply [tk_messageBox -icon warning -type yesno\ -parent $w -message \ "[mc "File \"%1\$s\" already exists.\nDo you want to overwrite it?" $selectFilePath]"] if {[string equal $reply "no"]} { return } } } } set Priv(selectFilePath) $selectFilePath } |
Changes to library/xmfbox.tcl.
1 2 3 4 5 6 | # xmfbox.tcl -- # # Implements the "Motif" style file selection dialog for the # Unix platform. This implementation is used only if the # "::tk_strictMotif" flag is set. # | | | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 | # xmfbox.tcl -- # # Implements the "Motif" style file selection dialog for the # Unix platform. This implementation is used only if the # "::tk_strictMotif" flag is set. # # RCS: @(#) $Id: xmfbox.tcl,v 1.17.2.2 2002/06/10 05:38:24 wolfsuit Exp $ # # Copyright (c) 1996 Sun Microsystems, Inc. # Copyright (c) 1998-2000 Scriptics Corporation # # See the file "license.terms" for information on usage and redistribution # of this file, and for a DISCLAIMER OF ALL WARRANTIES. |
︙ | ︙ | |||
233 234 235 236 237 238 239 | # 3: parse the arguments # tclParseConfigSpec ::tk::dialog::file::$dataName $specs "" $argList if {[string equal $data(-title) ""]} { if {[string equal $type "open"]} { if {$data(-multiple) != 0} { | | | | | 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 | # 3: parse the arguments # tclParseConfigSpec ::tk::dialog::file::$dataName $specs "" $argList if {[string equal $data(-title) ""]} { if {[string equal $type "open"]} { if {$data(-multiple) != 0} { set data(-title) "[mc {Open Multiple Files}]" } else { set data(-title) [mc "Open"] } } else { set data(-title) [mc "Save As"] } } # 4: set the default directory and selection according to the -initial # settings # if {[string compare $data(-initialdir) ""]} { |
︙ | ︙ | |||
319 320 321 322 323 324 325 | -sticky news grid rowconfig $f2 0 -minsize 0 -weight 1 grid columnconfig $f2 0 -minsize 0 -weight 1 grid columnconfig $f2 1 -minsize 150 -weight 2 # The Filter box # | | | | | | | | | | 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 | -sticky news grid rowconfig $f2 0 -minsize 0 -weight 1 grid columnconfig $f2 0 -minsize 0 -weight 1 grid columnconfig $f2 1 -minsize 150 -weight 2 # The Filter box # label $f1.lab -text [mc "Filter:"] -under 3 -anchor w entry $f1.ent pack $f1.lab -side top -fill x -padx 6 -pady 4 pack $f1.ent -side top -fill x -padx 4 -pady 0 set data(fEnt) $f1.ent # The file and directory lists # set data(dList) [MotifFDialog_MakeSList $w $f2a \ [mc "Directory:"] 0 DList] set data(fList) [MotifFDialog_MakeSList $w $f2b \ [mc "Files:"] 2 FList] # The Selection box # label $f3.lab -text [mc "Selection:"] -under 0 -anchor w entry $f3.ent pack $f3.lab -side top -fill x -padx 6 -pady 0 pack $f3.ent -side top -fill x -padx 4 -pady 4 set data(sEnt) $f3.ent # The buttons # set maxWidth [mcmax OK Filter Cancel] set maxWidth [expr {$maxWidth<6?6:$maxWidth}] set data(okBtn) [button $bot.ok -text [mc "OK"] \ -width $maxWidth -under 0 \ -command [list tk::MotifFDialog_OkCmd $w]] set data(filterBtn) [button $bot.filter -text [mc "Filter"] \ -width $maxWidth -under 0 \ -command [list tk::MotifFDialog_FilterCmd $w]] set data(cancelBtn) [button $bot.cancel -text [mc "Cancel"] \ -width $maxWidth -under 0 \ -command [list tk::MotifFDialog_CancelCmd $w]] pack $bot.ok $bot.filter $bot.cancel -padx 10 -pady 10 -expand yes \ -side left # Create the bindings: |
︙ | ︙ | |||
808 809 810 811 812 813 814 | set newFileList "" foreach item $selectFilePath { if {[string compare [file pathtype $item] "absolute"]} { set item [file join $data(selectPath) $item] } elseif {![file exists [file dirname $item]]} { tk_messageBox -icon warning -type ok \ | | | | | | 808 809 810 811 812 813 814 815 816 817 818 819 820 821 822 823 824 825 826 827 828 829 830 831 832 833 834 835 836 837 838 839 | set newFileList "" foreach item $selectFilePath { if {[string compare [file pathtype $item] "absolute"]} { set item [file join $data(selectPath) $item] } elseif {![file exists [file dirname $item]]} { tk_messageBox -icon warning -type ok \ -message [mc {Directory "%1$s" does not exist.} \ [file dirname $item]] return } if {![file exists $item]} { if {[string equal $data(type) open]} { tk_messageBox -icon warning -type ok \ -message [mc {File "$item" does not exist.} \ $item] return } } else { if {[string equal $data(type) save]} { set message [format %s%s \ [mc {File "%1$s" already exists.\n\n} \ $selectFilePath ] \ [mc {Replace existing file?}]] set answer [tk_messageBox -icon warning -type yesno \ -message $message] if {[string equal $answer "no"]} { return } } } |
︙ | ︙ |
Changes to mac/README.
1 2 3 4 5 | Tk 8.4 for Macintosh Originally by Ray Johnson while at Sun Microsystems Labs with major help from Jim Ingham while at Cygnus Solutions | | | | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | Tk 8.4 for Macintosh Originally by Ray Johnson while at Sun Microsystems Labs with major help from Jim Ingham while at Cygnus Solutions RCS: @(#) $Id: README,v 1.16.2.1 2002/06/10 05:38:24 wolfsuit Exp $ 1. Introduction --------------- This is the README file for the Macintosh version of the Tk extension for the Tcl scripting language. The file consists of information specific to the Macintosh version of Tcl and Tk. For more general information please read the README file in the main Tk directory. 3. Mac specific features ------------------------ There are several features or enhancements in Tk that are unique to the Macintosh version of Tk. The list of these features is maintained at http://www.tcl.tk/software/mac/features.html 4. The Distribution ------------------- Macintosh Tk is distributed in three different forms. This should make it easier to only download what you need. Replace <version> with the current version of Tk. The packages are as follows: |
︙ | ︙ |
Changes to mac/tkMacAppInit.c.
1 2 3 4 5 6 7 8 9 10 11 | /* * tkMacAppInit.c -- * * Provides a version of the Tcl_AppInit procedure for the example shell. * * Copyright (c) 1993-1994 Lockheed Missle & Space Company, AI Center * Copyright (c) 1995-1997 Sun Microsystems, Inc. * * See the file "license.terms" for information on usage and redistribution * of this file, and for a DISCLAIMER OF ALL WARRANTIES. * | | > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 | /* * tkMacAppInit.c -- * * Provides a version of the Tcl_AppInit procedure for the example shell. * * Copyright (c) 1993-1994 Lockheed Missle & Space Company, AI Center * Copyright (c) 1995-1997 Sun Microsystems, Inc. * * See the file "license.terms" for information on usage and redistribution * of this file, and for a DISCLAIMER OF ALL WARRANTIES. * * RCS: @(#) $Id: tkMacAppInit.c,v 1.12.8.2 2002/06/10 05:38:24 wolfsuit Exp $ */ #include <Gestalt.h> #include <ToolUtils.h> #include <Fonts.h> #include <Dialogs.h> #include <SegLoad.h> #include <Traps.h> #include <Appearance.h> #include "tk.h" #include "tkInt.h" #include "tkMacInt.h" #include "tclInt.h" #include "tclMac.h" #include "tclMacInt.h" #ifdef TK_TEST extern int Tktest_Init _ANSI_ARGS_((Tcl_Interp *interp)); #endif /* TK_TEST */ #ifdef TCL_TEST extern int Procbodytest_Init _ANSI_ARGS_((Tcl_Interp *interp)); |
︙ | ︙ | |||
45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 | * Prototypes for functions the ANSI library needs to link against. */ short InstallConsole _ANSI_ARGS_((short fd)); void RemoveConsole _ANSI_ARGS_((void)); long WriteCharsToConsole _ANSI_ARGS_((char *buff, long n)); long ReadCharsFromConsole _ANSI_ARGS_((char *buff, long n)); extern char * __ttyname _ANSI_ARGS_((long fildes)); short SIOUXHandleOneEvent _ANSI_ARGS_((EventRecord *event)); /* * Forward declarations for procedures defined later in this file: */ static int MacintoshInit _ANSI_ARGS_((void)); static int SetupMainInterp _ANSI_ARGS_((Tcl_Interp *interp)); /* *---------------------------------------------------------------------- * * main -- * * Main program for Wish. | > > > > > > > | 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 | * Prototypes for functions the ANSI library needs to link against. */ short InstallConsole _ANSI_ARGS_((short fd)); void RemoveConsole _ANSI_ARGS_((void)); long WriteCharsToConsole _ANSI_ARGS_((char *buff, long n)); long ReadCharsFromConsole _ANSI_ARGS_((char *buff, long n)); extern char * __ttyname _ANSI_ARGS_((long fildes)); int kbhit _ANSI_ARGS_((void)); int getch _ANSI_ARGS_((void)); void clrscr _ANSI_ARGS_((void)); short SIOUXHandleOneEvent _ANSI_ARGS_((EventRecord *event)); /* * Forward declarations for procedures defined later in this file: */ static int MacintoshInit _ANSI_ARGS_((void)); static int SetupMainInterp _ANSI_ARGS_((Tcl_Interp *interp)); static void SetupSIOUX _ANSI_ARGS_((void)); static int inMacExit = 0; static pascal void NoMoreOutput() { inMacExit = 1; } /* *---------------------------------------------------------------------- * * main -- * * Main program for Wish. |
︙ | ︙ | |||
315 316 317 318 319 320 321 322 323 324 325 326 327 328 | TkMacInitMenus(interp); if (strcmp(Tcl_GetVar(interp, "tcl_interactive", TCL_GLOBAL_ONLY), "1") == 0) { if (Tk_CreateConsoleWindow(interp) == TCL_ERROR) { goto error; } } /* * Attach the global interpreter to tk's expected global console */ gStdoutInterp = interp; | > > | 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 | TkMacInitMenus(interp); if (strcmp(Tcl_GetVar(interp, "tcl_interactive", TCL_GLOBAL_ONLY), "1") == 0) { if (Tk_CreateConsoleWindow(interp) == TCL_ERROR) { goto error; } SetupSIOUX(); TclMacInstallExitToShellPatch(NoMoreOutput); } /* * Attach the global interpreter to tk's expected global console */ gStdoutInterp = interp; |
︙ | ︙ | |||
364 365 366 367 368 369 370 | RemoveConsole(void) { } long WriteCharsToConsole(char *buffer, long n) { | > > > | > | > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 | RemoveConsole(void) { } long WriteCharsToConsole(char *buffer, long n) { if (!inMacExit) { Tcl_DString ds; Tcl_ExternalToUtfDString(NULL, buffer, n, &ds); TkConsolePrint(gStdoutInterp, TCL_STDOUT, Tcl_DStringValue(&ds), Tcl_DStringLength(&ds)); Tcl_DStringFree(&ds); return n; } else { return 0; } } long ReadCharsFromConsole(char *buffer, long n) { return 0; } extern char * __ttyname(long fildes) { static char *__devicename = "null device"; if (fildes >= 0 && fildes <= 2) { return (__devicename); } return (0L); } int kbhit(void) { return 0; } int getch(void) { return 0; } void clrscr(void) { return; } short SIOUXHandleOneEvent(EventRecord *event) { return 0; } static void SetupSIOUX(void) { #ifndef STATIC_BUILD extern DLLIMPORT void SetupConsolePlugins(void*, void*, void*, void*, void*, void*, void*, void*); SetupConsolePlugins( &InstallConsole, &RemoveConsole, &WriteCharsToConsole, &ReadCharsFromConsole, &__ttyname, &kbhit, &getch, &clrscr); #endif } |
Changes to mac/tkMacDefault.h.
1 2 3 4 5 6 7 8 9 10 11 12 | /* * tkMacDefault.h -- * * This file defines the defaults for all options for all of * the Tk widgets. * * Copyright (c) 1991-1994 The Regents of the University of California. * Copyright (c) 1994-1997 Sun Microsystems, Inc. * * See the file "license.terms" for information on usage and redistribution * of this file, and for a DISCLAIMER OF ALL WARRANTIES. * | | | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | /* * tkMacDefault.h -- * * This file defines the defaults for all options for all of * the Tk widgets. * * Copyright (c) 1991-1994 The Regents of the University of California. * Copyright (c) 1994-1997 Sun Microsystems, Inc. * * See the file "license.terms" for information on usage and redistribution * of this file, and for a DISCLAIMER OF ALL WARRANTIES. * * RCS: @(#) $Id: tkMacDefault.h,v 1.11.2.2 2002/06/10 05:38:24 wolfsuit Exp $ */ #ifndef _TKMACDEFAULT #define _TKMACDEFAULT /* * The definitions below provide symbolic names for the default colors. |
︙ | ︙ | |||
355 356 357 358 359 360 361 362 363 364 365 366 367 368 | #define DEF_MESSAGE_PADY "-1" #define DEF_MESSAGE_RELIEF "flat" #define DEF_MESSAGE_TAKE_FOCUS "0" #define DEF_MESSAGE_TEXT "" #define DEF_MESSAGE_TEXT_VARIABLE "" #define DEF_MESSAGE_WIDTH "0" /* * Defaults for scales: */ #define DEF_SCALE_ACTIVE_BG_COLOR ACTIVE_BG #define DEF_SCALE_ACTIVE_BG_MONO BLACK #define DEF_SCALE_BG_COLOR NORMAL_BG | > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 | #define DEF_MESSAGE_PADY "-1" #define DEF_MESSAGE_RELIEF "flat" #define DEF_MESSAGE_TAKE_FOCUS "0" #define DEF_MESSAGE_TEXT "" #define DEF_MESSAGE_TEXT_VARIABLE "" #define DEF_MESSAGE_WIDTH "0" /* * Defaults for panedwindows */ #define DEF_PANEDWINDOW_BG_COLOR NORMAL_BG #define DEF_PANEDWINDOW_BG_MONO WHITE #define DEF_PANEDWINDOW_BORDERWIDTH "2" #define DEF_PANEDWINDOW_CURSOR "" #define DEF_PANEDWINDOW_HANDLEPAD "8" #define DEF_PANEDWINDOW_HANDLESIZE "8" #define DEF_PANEDWINDOW_HEIGHT "" #define DEF_PANEDWINDOW_OPAQUERESIZE "0" #define DEF_PANEDWINDOW_ORIENT "horizontal" #define DEF_PANEDWINDOW_RELIEF "flat" #define DEF_PANEDWINDOW_SASHCURSOR "" #define DEF_PANEDWINDOW_SASHPAD "2" #define DEF_PANEDWINDOW_SASHRELIEF "raised" #define DEF_PANEDWINDOW_SASHWIDTH "2" #define DEF_PANEDWINDOW_SHOWHANDLE "0" #define DEF_PANEDWINDOW_WIDTH "" /* * Defaults for panedwindow panes */ #define DEF_PANEDWINDOW_PANE_AFTER "" #define DEF_PANEDWINDOW_PANE_BEFORE "" #define DEF_PANEDWINDOW_PANE_HEIGHT "" #define DEF_PANEDWINDOW_PANE_MINSIZE "0" #define DEF_PANEDWINDOW_PANE_PADX "0" #define DEF_PANEDWINDOW_PANE_PADY "0" #define DEF_PANEDWINDOW_PANE_STICKY "nsew" #define DEF_PANEDWINDOW_PANE_WIDTH "" /* * Defaults for scales: */ #define DEF_SCALE_ACTIVE_BG_COLOR ACTIVE_BG #define DEF_SCALE_ACTIVE_BG_MONO BLACK #define DEF_SCALE_BG_COLOR NORMAL_BG |
︙ | ︙ |
Changes to mac/tkMacDialog.c.
1 2 3 4 5 6 7 8 9 10 | /* * tkMacDialog.c -- * * Contains the Mac implementation of the common dialog boxes. * * Copyright (c) 1996-1997 Sun Microsystems, Inc. * * See the file "license.terms" for information on usage and redistribution * of this file, and for a DISCLAIMER OF ALL WARRANTIES. * | | | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | /* * tkMacDialog.c -- * * Contains the Mac implementation of the common dialog boxes. * * Copyright (c) 1996-1997 Sun Microsystems, Inc. * * See the file "license.terms" for information on usage and redistribution * of this file, and for a DISCLAIMER OF ALL WARRANTIES. * * RCS: @(#) $Id: tkMacDialog.c,v 1.6.8.2 2002/06/10 05:38:24 wolfsuit Exp $ */ #include <Gestalt.h> #include <Aliases.h> #include <Errors.h> #include <Strings.h> #include <MoreFiles.h> |
︙ | ︙ | |||
1046 1047 1048 1049 1050 1051 1052 | OpenEventProc( NavEventCallbackMessage callBackSelector, NavCBRecPtr callBackParams, NavCallBackUserData callBackUD ) { NavMenuItemSpec *chosenItem; OpenFileData *ofd = (OpenFileData *) callBackUD; | < < < < < < < | 1046 1047 1048 1049 1050 1051 1052 1053 1054 1055 1056 1057 1058 1059 1060 1061 1062 1063 | OpenEventProc( NavEventCallbackMessage callBackSelector, NavCBRecPtr callBackParams, NavCallBackUserData callBackUD ) { NavMenuItemSpec *chosenItem; OpenFileData *ofd = (OpenFileData *) callBackUD; if (callBackSelector == kNavCBPopupMenuSelect) { chosenItem = (NavMenuItemSpec *) callBackParams->eventData.eventDataParms.param; ofd->curType = chosenItem->menuType; } else if (callBackSelector == kNavCBEvent) { if (callBackParams->eventData.eventDataParms.event->what == updateEvt) { if (TkMacConvertEvent( callBackParams->eventData.eventDataParms.event)) { while (Tcl_DoOneEvent(TCL_IDLE_EVENTS|TCL_DONT_WAIT|TCL_WINDOW_EVENTS)) { /* Empty Body */ } } |
︙ | ︙ |
Changes to mac/tkMacDraw.c.
1 2 3 4 5 6 7 8 9 10 11 12 | /* * tkMacDraw.c -- * * This file contains functions that preform drawing to * Xlib windows. Most of the functions simple emulate * Xlib functions. * * Copyright (c) 1995-1997 Sun Microsystems, Inc. * * See the file "license.terms" for information on usage and redistribution * of this file, and for a DISCLAIMER OF ALL WARRANTIES. * | | | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | /* * tkMacDraw.c -- * * This file contains functions that preform drawing to * Xlib windows. Most of the functions simple emulate * Xlib functions. * * Copyright (c) 1995-1997 Sun Microsystems, Inc. * * See the file "license.terms" for information on usage and redistribution * of this file, and for a DISCLAIMER OF ALL WARRANTIES. * * RCS: @(#) $Id: tkMacDraw.c,v 1.8.8.1 2002/06/10 05:38:24 wolfsuit Exp $ */ #include "tkInt.h" #include "X.h" #include "Xlib.h" #include <stdio.h> #include <tcl.h> |
︙ | ︙ | |||
366 367 368 369 370 371 372 373 374 375 376 377 378 379 | pixmap.pixelSize = 32; pixmap.cmpCount = 3; pixmap.cmpSize = 8; pixmap.planeBytes = 0; pixmap.pmTable = NULL; pixmap.pmReserved = 0; pixmap.baseAddr = image->data; pixmap.rowBytes = image->bytes_per_line | 0x8000; CopyBits((BitMap *) &pixmap, &((GrafPtr) destPort)->portBits, &srcRect, &destRect, srcCopy, NULL); } if (newData != NULL) { | > > > | 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 | pixmap.pixelSize = 32; pixmap.cmpCount = 3; pixmap.cmpSize = 8; pixmap.planeBytes = 0; pixmap.pmTable = NULL; pixmap.pmReserved = 0; pixmap.baseAddr = image->data; if (image->bytes_per_line >= 0x4000) { panic("TkImage too wide!"); } pixmap.rowBytes = image->bytes_per_line | 0x8000; CopyBits((BitMap *) &pixmap, &((GrafPtr) destPort)->portBits, &srcRect, &destRect, srcCopy, NULL); } if (newData != NULL) { |
︙ | ︙ |
Changes to mac/tkMacInit.c.
1 2 3 4 5 6 7 8 9 10 11 | /* * tkMacInit.c -- * * This file contains Mac-specific interpreter initialization * functions. * * Copyright (c) 1995-1997 Sun Microsystems, Inc. * * See the file "license.terms" for information on usage and redistribution * of this file, and for a DISCLAIMER OF ALL WARRANTIES. * | | | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | /* * tkMacInit.c -- * * This file contains Mac-specific interpreter initialization * functions. * * Copyright (c) 1995-1997 Sun Microsystems, Inc. * * See the file "license.terms" for information on usage and redistribution * of this file, and for a DISCLAIMER OF ALL WARRANTIES. * * RCS: @(#) $Id: tkMacInit.c,v 1.3.18.3 2002/06/10 05:38:24 wolfsuit Exp $ */ #include <Resources.h> #include <Files.h> #include <TextUtils.h> #include <Strings.h> #include "tkInt.h" |
︙ | ︙ | |||
71 72 73 74 75 76 77 | rename sourcePath {}\n\ set msg \"Can't find $file resource or a usable $file.tcl file\"\n\ append msg \" perhaps you need to install Tk or set your\"\n\ append msg \" TK_LIBRARY environment variable?\"\n\ error $msg\n\ }\n\ sourcePath tk\n\ | < < < < < < | < < | 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 | rename sourcePath {}\n\ set msg \"Can't find $file resource or a usable $file.tcl file\"\n\ append msg \" perhaps you need to install Tk or set your\"\n\ append msg \" TK_LIBRARY environment variable?\"\n\ error $msg\n\ }\n\ sourcePath tk\n\ sourcePath dialog\n\ sourcePath focus\n\ sourcePath optMenu\n\ sourcePath palette\n\ sourcePath tearoff\n\ if {[catch {package require msgcat}]} {sourcePath msgcat}\n\ sourcePath bgerror\n\ sourcePath msgbox\n\ sourcePath comdlg\n\ rename sourcePath {}\n\ rename tkInit {}\n\ } }\n\ tkInit"; Tcl_DStringInit(&path); Tcl_DStringInit(&ds); /* * The tk_library path can be found in several places. Here is the order * in which the are searched. * 1) the variable may already exist |
︙ | ︙ | |||
118 119 120 121 122 123 124 | Tcl_DString libPath; CONST char *argv[3]; argv[0] = tempPath; argv[1] = "Tool Command Language"; Tcl_DStringInit(&libPath); Tcl_DStringAppend(&libPath, "tk", -1); | | < | < | 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 | Tcl_DString libPath; CONST char *argv[3]; argv[0] = tempPath; argv[1] = "Tool Command Language"; Tcl_DStringInit(&libPath); Tcl_DStringAppend(&libPath, "tk", -1); argv[2] = Tcl_DStringAppend(&libPath, TK_VERSION, -1); libDir = Tcl_JoinPath(3, argv, &path); Tcl_DStringFree(&libPath); } } if (libDir == NULL) { libDir = "no library"; } /* |
︙ | ︙ |
Changes to mac/tkMacKeyboard.c.
1 2 3 4 5 6 7 8 9 10 | /* * tkMacKeyboard.c -- * * Routines to support keyboard events on the Macintosh. * * Copyright (c) 1995-1997 Sun Microsystems, Inc. * * See the file "license.terms" for information on usage and redistribution * of this file, and for a DISCLAIMER OF ALL WARRANTIES. * | | | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | /* * tkMacKeyboard.c -- * * Routines to support keyboard events on the Macintosh. * * Copyright (c) 1995-1997 Sun Microsystems, Inc. * * See the file "license.terms" for information on usage and redistribution * of this file, and for a DISCLAIMER OF ALL WARRANTIES. * * RCS: @(#) $Id: tkMacKeyboard.c,v 1.6.8.2 2002/06/10 05:38:24 wolfsuit Exp $ */ #include "tkInt.h" #include "Xlib.h" #include "keysym.h" #include <Events.h> |
︙ | ︙ | |||
243 244 245 246 247 248 249 | len = 0; } else { hPtr = Tcl_FindHashEntry(&keycodeTable, (char *) virtualKey); if (hPtr != NULL) { len = 0; } } | | < | 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 | len = 0; } else { hPtr = Tcl_FindHashEntry(&keycodeTable, (char *) virtualKey); if (hPtr != NULL) { len = 0; } } return Tcl_ExternalToUtfDString(NULL, string, len, dsPtr); } /* *---------------------------------------------------------------------- * * XGetModifierMapping -- * |
︙ | ︙ |
Changes to mac/tkMacMenu.c.
1 2 3 4 5 6 7 8 9 10 | /* * tkMacMenu.c -- * * This module implements the Mac-platform specific features of menus. * * Copyright (c) 1996-1997 by Sun Microsystems, Inc. * * See the file "license.terms" for information on usage and redistribution * of this file, and for a DISCLAIMER OF ALL WARRANTIES. * | | | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | /* * tkMacMenu.c -- * * This module implements the Mac-platform specific features of menus. * * Copyright (c) 1996-1997 by Sun Microsystems, Inc. * * See the file "license.terms" for information on usage and redistribution * of this file, and for a DISCLAIMER OF ALL WARRANTIES. * * RCS: @(#) $Id: tkMacMenu.c,v 1.20.2.3 2002/06/10 05:38:24 wolfsuit Exp $ */ #include "tkMacInt.h" #include "tkMenu.h" #include "tkMenuButton.h" #include "tkColor.h" #include "tkMacInt.h" |
︙ | ︙ | |||
1401 1402 1403 1404 1405 1406 1407 | menuID = HiWord(popUpResult); if (menuID != 0) { result = TkMacDispatchMenuEvent(menuID, LoWord(popUpResult)); } else { TkMacHandleTearoffMenu(); result = TCL_OK; } | < < < < < < < | | | < | 1401 1402 1403 1404 1405 1406 1407 1408 1409 1410 1411 1412 1413 1414 1415 1416 1417 | menuID = HiWord(popUpResult); if (menuID != 0) { result = TkMacDispatchMenuEvent(menuID, LoWord(popUpResult)); } else { TkMacHandleTearoffMenu(); result = TCL_OK; } InvalidateMDEFRgns(); RecursivelyClearActiveMenu(menuPtr); inPostMenu--; } return result; } /* *---------------------------------------------------------------------- |
︙ | ︙ |
Changes to mac/tkMacProjects.sea.hqx.
1 | (This file must be converted with BinHex 4.0) | | | | | | | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 | (This file must be converted with BinHex 4.0) :%A4V6@&M8(*[DQ9MG(-ZFf9K!%&38%aKGA0d)3!!!55`!!'FbmEa8h4eCQC*G#! SBbNa16Nh,6)`-$%J3@aKC'4TEL"6HA0dC@ec,#"*EQ-Z,#"SG(4`1Lm[Gj!$,Q& XB@4ND@jcHA-ZBfpY,e0dG@CQ5A3[$3SD!!83!!%NX!#3!h)!!3#3!h*$LJfPT9* PFf9bGQ9NTD8!TC!%!3!!1!"%Y[&1mlEa6e`!N!d)([`!N!21!#T5+!!")q)!!Ld q)%*eD@aN!!#6j`"h!!-"K3)M!F$rN!3$([rirr$,4!!!J!#3"k@3"!%!!$8!4,3 GFA1ieiZ4!*!$FJ!")jN!N!0b!!A&[!!!!5F!+P"#!!%LFJ!',6iJG'X!!&%D!(d !%!(C!IS"`2q3"!)HrrMrm-Y!!!#!!*!(TC!%!3!!1J#!Y+(T3,G0'[)!N!21!!! 0p`#3!mi!#TmI!!#ULJ!!$()!N!32!&4VAde%48BZci!!!%#b68e3FN0A588"!2q 3"!#3#S"`!*!'3X(8V`#MIfe6h,C[6F[BU8PkVQmm&A9!cS#KIR"DLBeM9H,PPS9 d$9l$pX31ecFM`r`D9A%EPU'2`AfrXQc3kZLVbRrdF`ZFFdJTQa6FP4TP[+DkdKd $UL5rmEZA21frG`99bH&Rc3X-)&5'bmT3#bhE*GM,D2h8md6[acq`JM[fj)P2i,b Y9q)BrZ)45'D(mZBINfb*PEL)kXC15Kp82)Z+R-6-jSbG'A-$6RfjrM#H1rHJCSe 1j(-'6DT5f06B4Vm$i0PlE02VVDF&!LJh3&Sd9X*IL,`M,S$%&3!R14*QPjmC2V+ |
︙ | ︙ | |||
153 154 155 156 157 158 159 | B(2*@#`hZ6TX@%UecE0J&!`VeRa3kDAm%4%)kAB6D'8NRI$KEDZ&SFi3D86LAdLr h!TH2mI*Bh3M1%-3Q0$3[XZ2`r`"Lf45V1#@4DBbkGrLebcC[S+H(BrEk$FJrZAb M8Yr5c8Qc#mjeQM5B-Br!%0QP6kE5c*ME@Q"HN!$MA$aQLkf6'@Yj%kL`)Vbi,6# 3!(9cA[I5f`fUAS!eI%k[,)9+Q%kGZ%1e#%GJ$Qjkd)2rbX4%llkAf@eJh+,c@l5 CB$dUpE6@FAP614b)9)08G0HbCXb3!,HrT,%F!1N5dkEq@i)b))mN'bRJd4KUXYr #cNU`&-!Cc"XU+he@PR5rbQK,9hrLDH8rB3XYpY)Blm#I*L!&''VDGf6!MJ2Ml[E c"(hYXh8YZJ3raeM-PQ-9USfdij2lI3TZ30'PE%'3!#519jQba!SN@A!1K"PJchi | | | | | | | | | | | | | | | | | | | | | | | | | | | < | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | < | | | | | | | | | | | | | | | | | | | | | | | | | | < | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | < | | | | | | | | | | | | | | | | | | | | | | | | | | < | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | < | | | | | | | | | | | | | | | | | | | | | | | | | | < | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | < | | | | | | | | | | | | | | | | | | | | | | | | | | < | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | < | | | | | | | | | | | | | | | | | | | | | | | | | | < | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | < | | | | | | | | | | | | | | | | | | | | | | | | | | < | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | < | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | < | | | | | | | | | | | | | | | | | | | | | | | | | | < | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | < | | | | | | | | | | | | | | | | | | | | | | | | | | < | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | < | | | | | | | | | | | | | | | | | | | | | | | | | | < | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | < | | | | | | | | | | | | | | | | | | | | | | | | | | < | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | < | | | | | | | | | | | | | | | | | | | | | | | | | | < | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | < | | | | | | | | | | | | | | | | | | | | | | | | | | < | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | > > > | < < < | | | | | | | | | | | | | | | | | < | | | | | | | | | | | | | | | | | | | | | | | | | | < | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | < | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | < | | | | | | | | | | | | | | | | | | | | | | | | | | < | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | < | | | | | | | | | | | | | | | | | | | | | | | | | | < | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | < | | | | | | | | | | | | | | | | | | | | | | | | | | < | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | < | | | | | | | | | | | | | | | | | | | | | | | | | | < | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | < | | | | | | | | | | | | | | | | | | | | | | | | | | < | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | < | | | | | | | | | | | | | | | | | | | | | | | | | | < | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | < | | | | | | | | | | | | | | | | | | | | | | | | | | < | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | < | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | < | | | | | | | | | | | | | | | | | | | | | | | | | | < | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | < | | | | | | | | | | | | | | | | | | | | | | | | | | | < | | | | | | | | | | | | | | | | | | | | | | | | | | < | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | < < < < < < < < < < < < < | | | | | | > > > > > > > > > > > > | | | | | | | | | | | | | | | | | | | | | | | | < < < | | | | | | | | | | | | | | | | | | | | | | | | < < < | | | | | | | | | | | | | | | | | | | | | | | | < < < | | | | | | | | | | | | | | | | | | | | | < < < | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | > > | | | | | | | | | | | | | | | | | | | | | | | | | | | > > | | | | | | | | | | | | | | | | | | | | | | | | | | | > > | | | | | | | | | | | | | | | | | | | | | | | | | | | | > > | | | | | | | | | | | | | | | | | | | | | | | | | | < | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | < | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | < | | | | | | | | | | | | | | | | | | | | | | | | | | < | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | < | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | < | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | < | | 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557 558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 574 575 576 577 578 579 580 581 582 583 584 585 586 587 588 589 590 591 592 593 594 595 596 597 598 599 600 601 602 603 604 605 606 607 608 609 610 611 612 613 614 615 616 617 618 619 620 621 622 623 624 625 626 627 628 629 630 631 632 633 634 635 636 637 638 639 640 641 642 643 644 645 646 647 648 649 650 651 652 653 654 655 656 657 658 659 660 661 662 663 664 665 666 667 668 669 670 671 672 673 674 675 676 677 678 679 680 681 682 683 684 685 686 687 688 689 690 691 692 693 694 695 696 697 698 699 700 701 702 703 704 705 706 707 708 709 710 711 712 713 714 715 716 717 718 719 720 721 722 723 724 725 726 727 728 729 730 731 732 733 734 735 736 737 738 739 740 741 742 743 744 745 746 747 748 749 750 751 752 753 754 755 756 757 758 759 760 761 762 763 764 765 766 767 768 769 770 771 772 773 774 775 776 777 778 779 780 781 782 783 784 785 786 787 788 789 790 791 792 793 794 795 796 797 798 799 800 801 802 803 804 805 806 807 808 809 810 811 812 813 814 815 816 817 818 819 820 821 822 823 824 825 826 827 828 829 830 831 832 833 834 835 836 837 838 839 840 841 842 843 844 845 846 847 848 849 850 851 852 853 854 855 856 857 858 859 860 861 862 863 864 865 866 867 868 869 870 871 872 873 874 875 876 877 878 879 880 881 882 883 884 885 886 887 888 889 890 891 892 893 894 895 896 897 898 899 900 901 902 903 904 905 906 907 908 909 910 911 912 913 914 915 916 917 918 919 920 921 922 923 924 925 926 927 928 929 930 931 932 933 934 935 936 937 938 939 940 941 942 943 944 945 946 947 948 949 950 951 952 953 954 955 956 957 958 959 960 961 962 963 964 965 966 967 968 969 970 971 972 973 974 975 976 977 978 979 980 981 982 983 984 985 986 987 988 989 990 991 992 993 994 995 996 997 998 999 1000 1001 1002 1003 1004 1005 1006 1007 1008 1009 1010 1011 1012 1013 1014 1015 1016 1017 1018 1019 1020 1021 1022 1023 1024 1025 1026 1027 1028 1029 1030 1031 1032 1033 1034 1035 1036 1037 1038 1039 1040 1041 1042 1043 1044 1045 1046 1047 1048 1049 1050 1051 1052 1053 1054 1055 1056 1057 1058 1059 1060 1061 1062 1063 1064 1065 1066 1067 1068 1069 1070 1071 1072 1073 1074 1075 1076 1077 1078 1079 1080 1081 1082 1083 1084 1085 1086 1087 1088 1089 1090 1091 1092 1093 1094 1095 1096 1097 1098 1099 1100 1101 1102 1103 1104 1105 1106 1107 1108 1109 1110 1111 1112 1113 1114 1115 1116 1117 1118 1119 1120 1121 1122 1123 1124 1125 1126 1127 1128 1129 1130 1131 1132 1133 1134 1135 1136 1137 1138 1139 1140 1141 1142 1143 1144 1145 1146 1147 1148 1149 1150 1151 1152 1153 1154 1155 1156 1157 1158 1159 1160 1161 1162 1163 1164 1165 1166 1167 1168 1169 1170 1171 1172 1173 1174 1175 1176 1177 1178 1179 1180 1181 1182 1183 1184 1185 1186 1187 1188 1189 1190 1191 1192 1193 1194 1195 1196 1197 1198 1199 1200 1201 1202 1203 1204 1205 1206 1207 1208 1209 1210 1211 1212 1213 1214 1215 1216 1217 1218 1219 1220 1221 1222 1223 1224 1225 1226 1227 1228 1229 1230 1231 1232 1233 1234 1235 1236 1237 1238 1239 1240 1241 1242 1243 1244 1245 1246 1247 1248 1249 1250 1251 1252 1253 1254 1255 1256 1257 1258 1259 1260 1261 1262 1263 1264 1265 1266 1267 1268 1269 1270 1271 1272 1273 1274 1275 1276 1277 1278 1279 1280 1281 1282 1283 1284 1285 1286 1287 1288 1289 1290 1291 1292 1293 1294 1295 1296 1297 1298 1299 1300 1301 1302 1303 1304 1305 1306 1307 1308 1309 1310 1311 1312 1313 1314 1315 1316 1317 1318 1319 1320 1321 1322 1323 1324 1325 1326 1327 1328 1329 1330 1331 1332 1333 1334 1335 1336 1337 1338 1339 1340 1341 1342 1343 1344 1345 1346 1347 1348 1349 1350 1351 1352 1353 1354 1355 1356 1357 1358 1359 1360 1361 1362 1363 1364 1365 1366 1367 1368 1369 1370 1371 1372 1373 1374 1375 1376 1377 1378 1379 1380 1381 1382 1383 1384 1385 1386 1387 1388 1389 1390 1391 1392 1393 1394 1395 1396 1397 1398 1399 1400 1401 1402 1403 1404 1405 1406 1407 1408 1409 1410 1411 1412 1413 1414 1415 1416 1417 1418 1419 1420 1421 1422 1423 1424 1425 1426 1427 1428 1429 1430 1431 1432 1433 1434 1435 1436 1437 1438 1439 1440 1441 1442 1443 1444 1445 1446 1447 1448 1449 1450 1451 1452 1453 1454 1455 1456 1457 1458 1459 1460 1461 1462 1463 1464 1465 1466 1467 1468 1469 1470 1471 1472 1473 1474 1475 1476 1477 1478 1479 1480 1481 1482 1483 1484 1485 1486 1487 1488 1489 1490 1491 1492 1493 1494 1495 1496 1497 1498 1499 1500 1501 1502 1503 1504 1505 1506 1507 1508 1509 1510 1511 1512 1513 1514 1515 1516 1517 1518 1519 1520 1521 1522 1523 1524 1525 1526 1527 1528 1529 1530 1531 1532 1533 1534 1535 1536 1537 1538 1539 1540 1541 1542 1543 1544 1545 1546 1547 1548 1549 1550 1551 1552 1553 1554 1555 1556 1557 1558 1559 1560 1561 1562 1563 1564 1565 1566 1567 1568 1569 1570 1571 1572 1573 1574 1575 1576 1577 1578 1579 1580 1581 1582 1583 1584 1585 1586 1587 1588 1589 1590 1591 1592 1593 1594 1595 1596 1597 1598 1599 1600 1601 1602 1603 1604 1605 1606 1607 1608 1609 1610 1611 1612 1613 1614 1615 1616 1617 1618 1619 1620 1621 1622 1623 1624 1625 1626 1627 1628 1629 1630 1631 1632 1633 1634 1635 1636 1637 1638 1639 1640 1641 1642 1643 1644 1645 1646 1647 1648 1649 1650 1651 1652 1653 1654 1655 1656 1657 1658 1659 1660 1661 1662 1663 1664 1665 1666 1667 1668 1669 1670 1671 1672 1673 1674 1675 1676 1677 1678 1679 1680 1681 1682 1683 1684 1685 1686 1687 1688 1689 1690 1691 1692 1693 1694 1695 1696 1697 1698 1699 1700 1701 1702 1703 1704 1705 1706 1707 1708 1709 1710 1711 1712 1713 1714 1715 1716 1717 1718 1719 1720 1721 1722 1723 1724 1725 1726 1727 1728 1729 1730 1731 1732 1733 1734 1735 1736 1737 1738 1739 1740 1741 1742 1743 1744 1745 1746 1747 1748 1749 1750 1751 1752 1753 1754 1755 1756 1757 1758 1759 1760 1761 1762 1763 1764 1765 1766 1767 1768 1769 1770 1771 1772 1773 1774 1775 1776 1777 1778 1779 1780 1781 1782 1783 1784 1785 1786 1787 1788 1789 1790 1791 1792 1793 1794 1795 1796 1797 1798 1799 1800 1801 1802 1803 1804 1805 1806 1807 1808 1809 1810 1811 1812 1813 1814 1815 1816 1817 1818 1819 1820 1821 1822 1823 1824 1825 1826 1827 1828 1829 1830 1831 1832 1833 1834 1835 1836 1837 1838 1839 1840 1841 1842 1843 1844 1845 1846 1847 1848 1849 1850 1851 1852 1853 1854 1855 1856 1857 1858 1859 1860 1861 1862 1863 1864 1865 1866 1867 1868 1869 1870 1871 1872 1873 1874 1875 1876 1877 1878 1879 1880 1881 1882 1883 1884 1885 1886 1887 1888 1889 1890 1891 1892 1893 1894 1895 1896 1897 1898 1899 1900 1901 1902 1903 1904 1905 1906 1907 1908 1909 1910 1911 1912 1913 1914 1915 1916 1917 1918 1919 1920 1921 1922 1923 1924 1925 1926 1927 1928 1929 1930 1931 1932 1933 1934 1935 1936 1937 1938 1939 1940 1941 1942 1943 1944 1945 1946 1947 1948 1949 1950 1951 1952 1953 1954 1955 1956 1957 1958 1959 1960 1961 1962 1963 1964 1965 1966 1967 1968 1969 1970 1971 1972 1973 1974 1975 1976 1977 1978 1979 1980 1981 1982 1983 1984 1985 1986 1987 1988 1989 1990 1991 1992 1993 1994 1995 1996 1997 1998 1999 2000 2001 2002 2003 2004 2005 2006 2007 2008 2009 2010 2011 2012 2013 2014 2015 2016 2017 2018 2019 2020 2021 2022 2023 2024 2025 2026 2027 2028 2029 2030 2031 2032 2033 2034 2035 2036 2037 2038 2039 2040 2041 2042 2043 2044 2045 2046 2047 2048 2049 2050 2051 2052 2053 2054 2055 2056 2057 2058 2059 2060 2061 2062 2063 2064 2065 2066 2067 2068 2069 2070 2071 2072 2073 2074 2075 2076 2077 2078 2079 2080 2081 2082 2083 2084 2085 2086 2087 2088 2089 2090 2091 2092 2093 2094 2095 2096 2097 2098 2099 2100 2101 2102 2103 2104 2105 2106 2107 2108 2109 2110 2111 2112 2113 2114 2115 2116 2117 2118 2119 2120 2121 2122 2123 2124 2125 2126 2127 2128 2129 2130 2131 2132 2133 2134 2135 2136 2137 2138 2139 2140 2141 2142 2143 2144 2145 2146 2147 2148 2149 2150 2151 2152 2153 2154 2155 2156 2157 2158 2159 2160 2161 2162 2163 2164 2165 2166 2167 2168 2169 2170 2171 2172 2173 2174 2175 2176 2177 2178 2179 2180 2181 2182 2183 2184 2185 2186 2187 2188 2189 2190 2191 2192 2193 2194 2195 2196 2197 2198 2199 2200 2201 2202 2203 2204 2205 2206 2207 2208 2209 2210 2211 2212 2213 2214 2215 2216 2217 2218 2219 2220 2221 2222 2223 2224 2225 2226 2227 2228 2229 2230 2231 2232 2233 2234 2235 2236 2237 2238 2239 2240 2241 2242 2243 2244 2245 2246 2247 2248 2249 2250 2251 2252 2253 2254 2255 2256 2257 2258 2259 2260 2261 2262 2263 2264 2265 2266 2267 2268 2269 2270 2271 2272 2273 2274 2275 2276 2277 2278 2279 2280 2281 2282 2283 2284 2285 2286 2287 2288 2289 2290 2291 2292 2293 2294 2295 2296 2297 2298 2299 2300 2301 2302 2303 2304 2305 2306 2307 2308 2309 2310 2311 2312 2313 2314 2315 2316 2317 2318 2319 2320 2321 2322 2323 2324 2325 2326 2327 2328 2329 2330 2331 2332 2333 2334 2335 2336 2337 2338 2339 2340 2341 2342 2343 2344 2345 2346 2347 2348 2349 2350 2351 2352 2353 2354 2355 2356 2357 2358 2359 2360 2361 2362 2363 2364 2365 2366 2367 2368 2369 2370 2371 2372 2373 2374 2375 2376 2377 2378 2379 2380 2381 2382 2383 2384 2385 2386 2387 2388 2389 2390 2391 2392 2393 2394 2395 2396 2397 2398 2399 2400 2401 2402 2403 2404 2405 2406 2407 2408 2409 2410 2411 2412 2413 2414 2415 2416 2417 2418 2419 2420 2421 2422 2423 2424 2425 2426 2427 2428 2429 2430 2431 2432 2433 2434 2435 2436 2437 2438 2439 2440 2441 2442 2443 2444 2445 2446 2447 2448 2449 2450 2451 2452 2453 2454 2455 2456 2457 2458 2459 2460 2461 2462 2463 2464 2465 2466 2467 2468 2469 2470 2471 2472 2473 2474 2475 2476 2477 2478 2479 2480 2481 2482 2483 2484 2485 2486 2487 2488 2489 2490 2491 2492 2493 2494 2495 2496 2497 2498 2499 2500 2501 2502 2503 2504 2505 2506 2507 2508 2509 2510 2511 2512 2513 2514 2515 2516 2517 2518 2519 2520 2521 2522 2523 2524 2525 2526 2527 2528 2529 2530 2531 2532 2533 2534 2535 2536 2537 2538 2539 2540 2541 2542 2543 2544 2545 2546 2547 2548 2549 2550 2551 2552 2553 2554 2555 2556 2557 2558 2559 2560 2561 2562 2563 2564 2565 2566 2567 2568 2569 2570 2571 2572 2573 2574 2575 2576 2577 2578 2579 2580 2581 2582 2583 2584 2585 2586 2587 2588 2589 2590 2591 2592 2593 2594 2595 2596 2597 2598 2599 2600 2601 2602 2603 2604 2605 2606 2607 2608 2609 2610 2611 2612 2613 2614 2615 2616 2617 2618 2619 2620 2621 2622 2623 2624 2625 2626 2627 2628 2629 2630 2631 2632 2633 2634 2635 2636 2637 2638 2639 2640 2641 2642 2643 2644 2645 2646 2647 2648 2649 2650 2651 2652 2653 2654 2655 2656 2657 2658 2659 2660 2661 2662 2663 2664 2665 2666 2667 2668 2669 2670 2671 2672 2673 2674 2675 2676 2677 2678 2679 2680 2681 2682 2683 2684 2685 2686 2687 2688 2689 2690 2691 2692 2693 2694 2695 2696 2697 2698 2699 2700 2701 2702 2703 2704 2705 2706 2707 2708 2709 2710 2711 2712 2713 2714 2715 2716 2717 2718 2719 2720 2721 2722 2723 2724 2725 2726 2727 2728 2729 2730 2731 2732 2733 2734 2735 2736 2737 2738 2739 2740 2741 2742 2743 2744 2745 2746 2747 2748 2749 2750 2751 2752 2753 2754 2755 2756 2757 2758 2759 2760 2761 2762 2763 2764 2765 2766 2767 2768 2769 2770 2771 2772 2773 2774 2775 2776 2777 2778 2779 2780 2781 2782 2783 2784 2785 2786 2787 2788 2789 2790 2791 2792 2793 2794 2795 2796 2797 2798 2799 2800 2801 2802 2803 2804 2805 2806 2807 2808 2809 2810 2811 2812 2813 2814 2815 2816 2817 2818 2819 2820 2821 2822 2823 2824 2825 2826 2827 2828 2829 2830 2831 2832 2833 2834 2835 2836 2837 2838 2839 2840 2841 2842 2843 2844 2845 2846 2847 2848 2849 2850 2851 2852 2853 2854 2855 2856 2857 2858 2859 2860 2861 2862 2863 2864 2865 2866 2867 2868 2869 2870 2871 2872 2873 2874 2875 2876 2877 2878 2879 2880 2881 2882 2883 2884 2885 2886 2887 2888 2889 2890 2891 2892 2893 2894 2895 2896 2897 2898 2899 2900 2901 2902 2903 2904 2905 2906 2907 2908 2909 2910 2911 2912 2913 2914 2915 2916 2917 2918 2919 2920 2921 2922 2923 2924 2925 2926 2927 2928 2929 2930 2931 2932 2933 2934 2935 2936 2937 2938 2939 2940 2941 2942 2943 2944 2945 2946 2947 2948 2949 2950 2951 2952 2953 2954 2955 2956 2957 2958 2959 2960 2961 2962 2963 2964 2965 2966 2967 2968 2969 2970 2971 2972 2973 2974 2975 2976 2977 2978 2979 2980 2981 2982 2983 2984 2985 2986 2987 2988 2989 2990 2991 2992 2993 2994 2995 2996 2997 2998 2999 3000 3001 3002 3003 3004 3005 3006 3007 3008 3009 3010 3011 3012 3013 3014 3015 3016 3017 3018 3019 3020 3021 3022 3023 3024 3025 3026 3027 3028 3029 3030 3031 3032 3033 3034 3035 3036 3037 3038 3039 3040 3041 3042 3043 3044 3045 3046 3047 3048 3049 3050 3051 3052 3053 3054 3055 3056 3057 3058 3059 3060 3061 3062 3063 3064 3065 3066 3067 3068 3069 3070 3071 3072 3073 3074 3075 3076 3077 3078 3079 3080 3081 3082 3083 3084 3085 3086 3087 3088 3089 3090 3091 3092 3093 3094 3095 3096 3097 3098 3099 3100 3101 3102 3103 3104 3105 3106 3107 3108 3109 3110 3111 3112 3113 3114 3115 3116 3117 3118 3119 3120 3121 3122 3123 3124 3125 3126 3127 3128 3129 3130 3131 3132 3133 3134 3135 3136 3137 3138 3139 3140 3141 3142 3143 3144 3145 3146 3147 3148 3149 3150 3151 3152 3153 3154 3155 3156 3157 3158 3159 3160 3161 3162 3163 3164 3165 3166 3167 3168 3169 3170 3171 3172 3173 3174 3175 3176 3177 3178 3179 3180 3181 3182 3183 3184 3185 3186 3187 3188 3189 3190 3191 3192 3193 3194 3195 3196 3197 3198 3199 3200 3201 3202 3203 3204 3205 3206 3207 3208 3209 3210 3211 3212 3213 3214 3215 3216 3217 3218 3219 3220 3221 3222 3223 3224 3225 3226 3227 3228 3229 3230 3231 3232 3233 3234 3235 3236 3237 3238 3239 3240 3241 3242 3243 3244 3245 3246 3247 3248 3249 3250 3251 3252 3253 3254 3255 3256 3257 3258 3259 3260 3261 3262 3263 3264 3265 3266 3267 3268 3269 3270 3271 3272 3273 3274 3275 3276 3277 3278 3279 3280 3281 3282 3283 3284 3285 3286 3287 3288 3289 3290 3291 3292 3293 3294 3295 3296 3297 3298 3299 3300 3301 3302 3303 3304 3305 3306 3307 3308 3309 3310 3311 3312 3313 3314 3315 3316 3317 3318 3319 3320 3321 3322 3323 3324 3325 3326 3327 3328 3329 3330 3331 3332 3333 3334 3335 3336 3337 3338 3339 3340 3341 3342 3343 3344 3345 3346 3347 3348 3349 3350 3351 3352 3353 3354 3355 3356 3357 3358 3359 3360 3361 3362 3363 3364 3365 3366 3367 3368 3369 3370 3371 3372 3373 3374 3375 3376 3377 3378 3379 3380 3381 3382 3383 3384 3385 3386 3387 3388 3389 3390 3391 3392 3393 3394 3395 3396 3397 3398 3399 3400 3401 3402 3403 3404 3405 3406 3407 3408 3409 3410 3411 3412 3413 3414 3415 3416 3417 3418 3419 3420 3421 3422 3423 3424 3425 3426 3427 3428 3429 3430 3431 3432 3433 3434 3435 3436 3437 3438 3439 3440 3441 3442 3443 3444 3445 3446 3447 3448 3449 3450 3451 3452 3453 3454 3455 3456 3457 3458 3459 3460 3461 3462 3463 3464 3465 3466 3467 3468 3469 3470 3471 3472 3473 3474 3475 3476 3477 3478 3479 3480 3481 3482 3483 3484 3485 3486 3487 3488 3489 3490 3491 3492 3493 3494 3495 3496 3497 3498 3499 3500 3501 3502 3503 3504 3505 3506 3507 3508 3509 3510 3511 3512 3513 3514 3515 3516 3517 3518 3519 3520 3521 3522 3523 3524 3525 3526 3527 3528 3529 3530 3531 3532 3533 3534 3535 3536 3537 3538 3539 3540 3541 3542 3543 3544 3545 3546 3547 3548 3549 3550 3551 3552 3553 3554 3555 3556 3557 3558 3559 3560 3561 3562 3563 3564 3565 3566 3567 3568 3569 3570 3571 3572 3573 3574 3575 3576 3577 3578 3579 3580 3581 3582 3583 3584 3585 3586 3587 3588 3589 3590 3591 3592 3593 3594 | B(2*@#`hZ6TX@%UecE0J&!`VeRa3kDAm%4%)kAB6D'8NRI$KEDZ&SFi3D86LAdLr h!TH2mI*Bh3M1%-3Q0$3[XZ2`r`"Lf45V1#@4DBbkGrLebcC[S+H(BrEk$FJrZAb M8Yr5c8Qc#mjeQM5B-Br!%0QP6kE5c*ME@Q"HN!$MA$aQLkf6'@Yj%kL`)Vbi,6# 3!(9cA[I5f`fUAS!eI%k[,)9+Q%kGZ%1e#%GJ$Qjkd)2rbX4%llkAf@eJh+,c@l5 CB$dUpE6@FAP614b)9)08G0HbCXb3!,HrT,%F!1N5dkEq@i)b))mN'bRJd4KUXYr #cNU`&-!Cc"XU+he@PR5rbQK,9hrLDH8rB3XYpY)Blm#I*L!&''VDGf6!MJ2Ml[E c"(hYXh8YZJ3raeM-PQ-9USfdij2lI3TZ30'PE%'3!#519jQba!SN@A!1K"PJchi 5"6%hBD,TBP32lPBkr%L&kPZJkaIRkAZMBBrM!+@3"!%!!$i!J,5KkFDiRKDr!!! 0p`!!G6N!N!21!!kc(`!(VHF!!&Fa!*!%$`"8DdaTBR*KFQPPFbl2J!!!3,*069" b3eG*43%!rj!%!*!+J(!!N!C#`G8+aDHS%N*S,kG02Yl8q&c')(UPE"KHXQ&Zc%i kaUL,pP3blM$fb62q9pN5L8GTM(GYT9jP$M*N69HMfMM(&jrI'D)`ZGQDIB6dIJG PJ$bX2*BViH,kVhGJ-2Sa)GPS`BZHaT[L`mVB*&l$#Ye)rRe5CId1$SrYJIXd(cm h$4Se$M4DKrm[U%G3JIqFkej&PDLl2%`9I%3akEiP2H%&0T6TJEMC*30miS[+El! ,`"+0HZ%q@5%l$G+Tc"@`D0K*N!#H%1T5[FJaT%dIb%AM[5Rd"8rr,,ShK#@YIU5 3!(5V)9+M*HN5rLF-3S)l2J)Z3`Re2M@aZUC8iKM+p3emM$5hP(-*m&A0Gj%qaM8 2IGPd1,[1P!ND&'(cb1'eUQ)2qM""4KJak5V$fQ")mUZ99!DXA%0`)!Q'jU!N$0# I!HClPSMdmI&A6Lb+M,5)KP6)*j26PS@C1BcEK[Q@X40ZX3!MXJSaQXFHJ%lN,-i m0Z[3A"Dh[-pB1L-M&%lemcacAjbl$(bHL%#6Y'0hL9rk3(aa+KFVZAbMZQV$U'H FARU#cNeBKcR9BcqqUARkC,k,X%5ea"Y&-%f#DVR"F@Eq"%Z8VUp2i@Z2`!)8'36 [DS!e"!S+2a0lMTYar)L+YM'"UQYI%3q1Bm-kGB%'`q1Xh#U6H2l9d#[CBha(9+8 4VVPkQ-ipr66"[-mZPY-Yc3BPA9'c40*1,eMmUrjY%irj*eJ`Pj)AbCbEFSc[NcG "p%N2(!24Ll[!`rbmiA-p"98JX"#P1Cl#bZCNMDc(!+q&'HFcA'&mhR%e(#&4M3# dY)MLd,p(jk+1ZICahbSVF!l(5k9bAUcX13&VIIcKID5$@fdrqq81jhX!@NXm3kh 9QP$q@fb&("ZG@YrcRKi*!6NhJU$Q*m90'IcUheJi8GVUSpPrN3TUB0Q#R%QqJC1 ESYN!dIeAFC9bSK+8hXZ)5Jq8L3VY-%V1"4m%1m!Ejr&&YNiEkAJG@pTQeMI`&E& (0K)%b+(LQ4!!ZQq2%!kVL"XHA`XLUIk"&Fd9IaRlT(JDNH#8PE-*)pX44c6"fK0 r$b%@3GVk&&bEN6@CU#liT-q&@I+Vj(Yk5F(bZ33r&S,JKp3YdMC3E@"%1RN3D#) p-pll+9e#b(ieJ5M[)IXK&h!8Sb468KEc"'qKckbB8BHXcfiihZ*JA&apaBr6M6D DGIDA9aklEp64"N%R8H!4@V8im@"@GhKc)PfR8P"AYlK$1q@Y(6L(Qk3TAUeP5kI c'M'H58!qD[)i[Ym&,h!YNJ#'8614iY[*c*J3!!G+iVKdqH9haAKBrDp@!Km&R'X APND4T3&LFiVF(F%RDhZ2V6H+mF*XrJaQ1"9F)Pf@MIlc`h5-YHUhFe%ch0[6)Mb +G0rfm5TF#If),5YiRL,jhYSI(MPec"P&lYYZ9rmHejL@D@f[r5L4NaR4CAri5A4 qKV-G)lbG`5YE&!)NE*&pUXTd9C8%H1j'[dePPD*$'FDca5'3!,Il@M#REdahN!$ 3pbCbHl8*TYF#AA4l#A&Je4#)e$BkE1`N2MZXF`eacR9c5(U'N@%lIrl"e$T"Ui6 d#Vq2)j3U"4D8G[Jl&%[-RJN(M64!Cd)j&Fi#DI#SVYDIY$AHr@,S4K[MI2!Ikhr AHYBa[,EbmK+GLDlrJ*5i5,5[e6MG0MGS@GG[CVLX$1Q(Y0rH,jq!XX-pdVidd$% 0U"`G'6PDeFb6lbDbQhP82'BiZ[hH89KKXQTm+b+Y,rT#[L4YGQB0!D'aV,kcPZ1 `$aMQMi-j@Eh+p"H@%m&*kR`ZV-Na1kcc4fH4C&i)U6Nm)Br@4i'1iK-'mG8ra[m @*8dIN!"@mEf+[m8##)[mFTA6YVR8QTKS1UXLc2I'2RQeD6)&T"[J(r!Z#eM9$Tq LAQrY256TN!#,JL[K`f9,48@mrTDdPc*EJQPL2@&$B[BQrpXTfGlJCH)6%*&S,*@ *CPTrQDVUlh!Ji4A9d*RUpeCipkQ[Ta0)8aj9eNKCLrB'#"a-PTH'CB`J1,jZ1[D !mKT-D9[j+!([Q'4qSFm!@*N+bVL@Q&C3PG$2(QXAC'FaEIhrCCHDH,A516`j(6& !*-&%LfIZ,1l`%1m9E@QiqfaZ&f@Mcr(Tl`Y%8dP+Uh04#Te4&if656Z#fYHa%VS +b1m+3ZmUem[U"kL)ZY`ST)$V*Nf8S&prATGMPClcP!3@"UcT+3BNmc1,+)45Icj 'F&Ca)ZFp5c*mD8rMKHh`*DJPG[1-$f5BYCP9,Lcm*Dl,HfQBRrV4VTT"*`jEq1J 8&[bRV1l`h+Y2BG'&QR3RM`T"C#G'3eMBqJ@*5ZA&YfppUQXRT(*dhV4ed$Vh),Y 4mAr"GAM8jpqAf-bd4F$[XhR#a!CmFAbG#Gmq6#,E0lT#)Y8[X*DrN8J,N5HP5CP 5aH'3!"LjqfiR+eA"[(Eh"Cd45JiQRid1YqN+jR%DT+Z%`PkKbm[ajp!HhhAe&-e fC*eJEF$Yh0R1Nqj@#EBSbZj1&22h0D+H&CU[*HiLp6PmXNUN4GF@pJD[0iLYmKB 9APKRHHVMJm&DemD2f'$+QrV3L3HBN!$Z3FV-G8Z!l4+chF4`d93"+MA!1k)'d!d $I0Ehe,XTG)9+-YC+9a+FSIH6Ljii5#SRG1PmUF$jjq*Yq3Ei5-1&)EIekXVb!NT KBK$XbQYCSe6BIU2!#"R*qAM6TR"5$`lmhBD"&cmLkMUNE"ApB1r%2T*45MB$#)a Y,5UR40JSYj0,rS`I&P[E@Ta&+1"YGM(LG$mrPl`6J4Q3!*Cdf2UBTEl28C%pj-d 98A5#pJUc"@UcibLSNkjajVkT0"0Kr'8*BKP89elXHl'TYQjir8LAh22PS0i@%dU i'31%)eFU!)4Y+j[2XlL0"4"#fpC0m@q#X)`V'@)HA""HZBQ#l#Bj8EdMfPra3r@ NR9EEU+cU9aS#Q6S+%%3AbGE"iN-*(U6r9MC5#)dc3"+V&KpdrD9#CiBb[(Lb6c4 5!ED&Tmd'22G@8laIRq1A"FFc5q-1m(3T94l6LYHQq`mKG([I"f%SFE-(qeJd@E* kR@+L6ESG%N2-D'GI`%VaL"h,`0!Bm!-6jY*PV&L2B`83ej0S[#C2Ak'X4RjjYNC M85pC*fT0Jk!1&#'Zah!i,hK!S['%RR'aVE[SK1m!1Y@H5$K2hbGA$'#!ajA!q'5 K$@8-SpVD9fLGI&Mcp8M[1DLF6V6,r[r%M(dF(p"D#d8R#6$Z-H&edj'HZ&CLYjR TEjFr&cBKal*h91+Lp"'"EU`ml'%L%GHMS&XZQrF*4Ikp$IbZLA@XF"r!B%5X Vm%jZalQPSr#j[DMHiY**FCph'[Rd9M2dmZ@Z#e9BjRVY'XYV[jIK0p9`dIRm#Km ,R#U3!,UR&P`C-8c%,P2fk9#M`,RDX!4SKDK'`M#,KFX6E-+'R0e(F%FHHDmEQl# #2+cIh2VLP)Qq+JdFBhLCUVe'k60%LGU,B#mBKrRL1$c&*SJU+lpHKKpKLj((JE* &RMDQ4("(3,r6XhA5#`+,+2bqV2b[5AS'XBY8#YSL80XUPC0ZA2Q2-DKaS8%T8c5 2%r(M"VEIL1E,F+jL"jMPjL),QQJCReCRPk@MjLJPGQH")"p(hja[h-(c4!G@3Yh C3*SdQhB"VedX'4J-#`@++5)+`*9`F'-R-T)K*rPQ2!Ppk*SbX`Lh"eJ&MYm2V%T Raac6Sff)21kIUCj9*4%c@l!14Y4Y8`Vj2!9LXbJ%8e@[UQ0"!ea1*Sc9Iq@5Y9+ (Z,B)YF'F-+2V1md#ihEA5YJeQFc+&6KC[Sp)+3E0rqmFRTMh$@lZ3D#(!4k&mD# c5Aib-*-4Shp$Z$0U)K81mm+bf#AUUHj'bcASp4c)c3,))RL`62)bq@2J#BcM5%c @XSL8CC!!I'IZ`HRCQDX&'+YZBj2BQ*+cCJhY5Bl1"kf$d6bkZ%Y2PBX&'()lJpB p+dpi2+19idEL+!"eD$m4#dT$c+V8aL86QeMJXIqa0B*#eQP#Y)[ej*6V0YSdkCm B1p*'PI+NjfIh"1ZGFhj10GAfGCHDmd#IeU%C8X*YVbp)q-#K!6[KP5bTfXJ`,l$ ,NBHrdK`iccMABHd"FY@'FEmG(%LlHSACiCH2lH8,,6E2MM5C[ZND+lG8VLJS8VR ,"bZ4ELQjdj8dhAcX&#QQNlGrQCNi6dX,(i,d[ZF'-5&i9VR-cB+4p11SSdTiS%Q Y*,9`[Ca*(lc`Tm+08Q9e+1!JjkBbDr3j*cI&J!-fCLMpi,6))dP%XAfdl,,8Djr 'c,2C'd!ZVebc'U6)%e"rSiAdjqjbISXfJ8ML83QiB6IGq%['ql+!iAaVp5*dLEb I64'N[UIUhpCfI`8mKIrYD#XLr'hAIf&5SF!KJl"Km8jb1%HMHf,qq[T*4J9Ar,D $!jk3!+3)aX9$"''LGeJklrjPc,Q$j%bT%DII-GMiUjeV&"*E8Umhb563"%h'e0# k"KG$dY8f#4*NDp0r[e!NG'heTVpMN!#ND%5"Pr+AE$0Y4&5f91$h5Y'aYV9K%qZ 3!$ih!Kc)))59HTHcT5qGhRGQHeGA'4m%@95UhEU6i-0,jVG5A((9RSm`$S8[UlN a*(@IMCfa!k)V(Bmep8[Ucldi)h)222YZcZCpje)S5+j1Nklr12C!GYGUZZbUm5, QIiR[fkM'fTq6hchcKF,G0[(52'AFA5Mq$1MNqlm#-,(i,BU$lKZibT!!eM%fpk- aU#6X!PDPI,Ci@UkqMi5XBS3@#`Hq0*VkM!pZ["aMGX@P`FhpM0&ih0eH#$)6e[& U00kI+'H0Y*,6ZH2X2dF*EepLJKZJrKDqFMqjTT!!TFV-(Y$L@Dd+6PfYcqiA&-N $M[0B3rN$R%@'@CR2Pp"k1`mI*C''@N1(IJGY0Dej0YVIA"211YiqNZQem#IS#k[ )G)I%UlhQrXYEeE5Kbl)k-dHlKM%J9IDl1i8pZ&B`pZeL(P3c!`%rlda%Q2S0$K2 5S2UffF[J-Z&La*4I"Zlh4UEcIVd48J'-3R%'fF,Z)34mSa%lk20d#)9e8A[qKH5 X#D`h)ha,NfDbp21,Fh*X*-1@'BMYKrZPf,X[C4Sma#arH2F85Il*jeJpL2@SrNr MNNeI%0`P3l-%UDC&QM8Gi6M*#RQ*0UfeZ6N"N`PCMRK)UARi45-VGJ(BL5`ULk( r-f'3!+MQLa85L$kf6p0QN`LV+SmSbY%5$b!EBk`kUD4me&h-fDR4[#NSI$lU`I6 6XAH$m(*1bh!Q8rDLEJI,CFqI9%[8'!4T#-A#ZB4fDH'+#S3Y4PXJU$dB,Z0e`10 Zh2Rj,mjDa@'-Mh5ILMmYjGbf09"prDFRcDX9e+fSeUC)rRCrD`L`BL-EH`TYb9h hq9FdJ*P`4`JU[1@Rb$!115E&K3Pa-MK@T5+TBFr9)!&0@JF&3c@iJK3ieJpN%!X JpaKNAMe639BKcPbF'GAUDM0"D2ULi)F1iG-RM'hfKdbc%J-eHYRCPFNhDm5*T*6 VBf[Bd@9GmrXJL34i#$*T5%m1eTkCVZ1q`bNQT0fFSbKJ0GPh8J[FmPV8j-FcM[c [iQr8K[e6e$"$p,Z1M5aK-aAjEDAVejR93@,qC,Y`5'3V$KL![I'YJ$DEGBNYLeK Nl2jNJNG1bJa@*V"@"+AE5Lhd*!q(X2i*k0jPDp-)p#d3pf83"4JLrJD&'Pq*L#! QQ$$)VU!JE&%$58S-bl*[lcHEm0VDF9@0ef+6$(qAhG@+K+'qYG42LJ(N[CS[[FR U1K,D)b)l[hCqmRl3qYN,BV6D`$T$j'VMCr4Y814YPd%+%%%GMC1Pb[CVfb8&bf4 5H"-+kM'U'-3NRUd-+KjH01(qe)P"(6ij!0D0M(@SLhl)ICAUrSE9P8mdDL4al,q "bEEC832(MdDh-%'b&M+HBH0kRX`AX+l+#jAD-3-(N!$XRE3$bFJA*-AJ+"1kQ@U bK[SMZCT)8iDa2L8QFK![(qkF"mUBd9DT5#"*8Rj,%6Y8*c$0T0XRf))0Q"r$[0f )c@d-$LT,8HJb[H(hb@"6Z8@a5j3rSfrEr6*"35IdXR*XbY+3!0bcZj!!drim6&! F[Fmfi`@)#1XGhb9$38FdI,j9Dq16#S8DM#mlfkAck`amC*AAIQI&S*1bh($$&pp l1kZS)LaLbbKp-Q%k-)DBkRTZJN1L'41$AfPYb6YJJ`V@`h'B*"EEbLErGlkk"Xj VkSPBk#T##%A02$3TE*hE2ajh-38[,-jSi,hj`jqEIUhKG-8C4'S!3RclI6T#Kc6 %VEDDc8%BZjErAhfR1(91lV44&2+J[NL!fNeThe4@ceQ3!()+cfB4CP8T4h"eXKD @$Cha$UY&ecjp"N)JDLAaX%4@TkMi)9S"T'H&e9AE,JS1YT1A34MShCLZAm6BUMk N@cCcY`@1[T`'j,LFfiYhd5UM)qRKm5C2GDrr1$&BFb@05M)$hX()j1bKB#pTUP% 5U`(1DkRff$&P5BBD`j&4KK[k-9L$(VL3!#c80[YmF%TqVMRlCk,%UR-&pjU,3X) cJkKUjJD5A89Xj-P@1Q`A2Tp'Kh2X-YN5rGmceV'P652Z+(QYHDXQ4$Q-U!k@*D' ef30Sej1HDXmC[CRSRT!!cQMQAKG+!qc0%dF9[X[1SlR0&Yr#P3$PX2qJeZZBTc[ kckMAJBdNZGVB0dZJbq,F$HSp'5,AMCTT+4&4mm$be#Va`@[@(55Ei65ba1JN0*5 8V`GkBL9aArTVI9BE,6H!%ai&Y`C*KFcrZ[hA2@qBJ-(RYhkFiY5kHC,q3"CDUfH Y`f2CYU2%q-URlra4#)e@RfJ`Ul[*A0ZfDh8162EeD+##4#BLr,`3[XBH#CF(lCG 8TUhrK1JqVa93-Q@E8Dph&B+9FTF&Ld$5BC-"VqR1R6j1Y4c+,JGpU2pJ22[V95A GQk90f!fB21G-$Ir+A#*49%5!P"4TcUkF)Ui&Q#8f(6RGb(JDFAlFkB`Mhe#65Zq M'3f*aj!!aUR'eLJ"E!)U#@10Nlf1Pm8Z[l5q(Eh-dU0SGl`qraaJN!#CqLCK3cG ,#NJFP9cYU-ZYY4k$2rEdjphN%JVYKY'AP@mAF"m(fk*XTKN5+LCGYXD-Vp1jFM3 [%45UIm"@&acZ!PDJFHfp,H1+@cJF%d0*p[2B1lHEjb5r63M'Jhpj49,YVAk2DAJ 22EkVr,qkRN8ING,%i9Gr0ZZRQ3iN%2)DTSKbl1fQ"+c$8X!CC$BHmLEeD-+QD"I DZ1PUKAePb,ABrTNBhNQ`-hF+JmS26G),Y(mFbDrk#qraPCUG1KP4emVdQ%JcLGH jG-!0CEQ@p(p4YS1qi-4'j-iEBBaMlLd*U6jd1[eACS&iImK8,6"`B*3LK($pdLS H`Z`"cTk+iJIhZT0YDA`*LBMV5G5p`q[@2*jk,A(r65ep#I$4EVMGU*695k#+R#B ZS&aeXa-05r0Q1q$jlfb$`@524)4k`,!YAFCXpiTTM&VV[[*,@deRQ891UFHfIjc UR(pT"YMZ&556N!!P)S%88TkGX0DDrf#h`qm%0IJiUX86KU(I51,l9$Cq!$RU6De ab$f'$MQ1IkNk0*@HT$pi!L!%r&4#2AbB8dbcc#b5ShTKQ$%NE%QA@8R,EMcSDS9 i)Y%pH9S0[Cp)##X(&I%JP%X&N!$%QpcjT#hXcATMZUCTI0C$IDp-%Y@(h9)"AI% 61R`+l58Re)S8Y*&FRI!Ck+ANQA5@#b@E"d,3Y-B`[&A[b[C9kHifSH1VZ)Y3LNj f-V)CJZ),`G#eB-$SiG*XcrL&`L!4$Jj*2$h6EdS314NBre-H$*k5pH)9jf"RTY6 U5rrAklhf60`090qV*MY6X6bLQ(2LGNqj2M)T4kMKBmrC)k("D1YHR3PHT-6J#[I 0bA,46YI5DEA*DIFh#XK$Me,Y6l2Mb!(UD!G'#&Qp[)h%d)9P,Gk8E4FDN!$f56T aM*JTi6+K1qM%9Njd!rHAdL1(+3%lXNN+2Nf3!)-hTbQm"ETb3"I#fJ2-XZcR&@a NV2,6'AjHMMX4mpfD(LkK,*3,P2M6krR6SFQBr'h*LEPkT-F*2GHDP5T!`([+#[i &k'irr2b-klmYQRj!Lpaihrm*&ElE+,cclpmCSB[c#KZib&cSeUU'"fhDB2)r#C! !F&,ZGJrar%d)iMFhV9&1l0(R!T5+$h!F+CNbV2$CX"BlF52+c@&3QaaNK%8QMpH &*p44RBh$`PKTe"LlpR8f,@ZmV-%KXKXkdAL$*VjpE)(A$p%rpIT(iV02V%K'E'2 ["RZTVm(YHf!0p5KTkLmJ%VY,"c*I#*KP5ZmCl-V,K&Vd(ZD2piX9FL)!1Q&19Zh J`L)@-YMaX&E8S[kK0a)hDijQNiBjb0RCKN8VHpa*B5e[FErLUmLQPp1Jr4"UJA@ "LrpCQ(IdB3TeN!!*28T+6Uj8I2NPq9b09qZ#cJJEJHBUj-kVTCBCQ(H2H$``)jf l#p51QDlV)JmDad%FGQZSrLK,)i,Q$IPIFT!!j-1[)HM2P&$rDT-!i`,UcYdI0h& dC)6l5e!rjcP3S9$K32ph*mf"$Z%RUi4KEN0+ii"3q+c4@DLr(FYfUiE&@q1h",G A"jiD&`d+V5%CHE'Vi,MZ3SVTi5j%R3#Y$6r`Bbf(8Zf)"FjqYLj%c&[NF&hdYBr &N!#f"IGC6[miVQm2FepHrIU`H),'c#E4p-kXY*hde1+106bqP4VbH6+KSUPVR2U !JVK1h8U[q04-aD64B0r6#I8SQcJL@k-S*!9&+D"b%)D[p-h)5KJZN!"*YNJ#&`8 Ha,lHL[KQ)3(''8+5H8NG1&F'2S,r[66caX6L*S#69V3LaEjXh[30q&6"(M%MMZf iQ#lmpYL(mIS-QqEelFp%ImFSVF"(ZZk1l`3LX-URXiGqee*pMTif4,hc!mP`UZY IGr)d4((Jam4L4XHBBqd)1@@,8C9LRN@%r0q4p$3*86i#0IQqcj)e3QJ&6Gqi#hE %V#KVhJ%9pl!rNaE3&iL+8cQcT`&j1a--kNK@UKjV,I)P+AckRdNSLH)SZqe2P9Y p@B6h+rfcZj!!H'hB!mk4hSRAimZE[K[h'eUlb3!(XI4[aGr9id2L[0NJV'[jlXQ 2$i')&hq9E#!Mq6Y[%CMj$5mp&QZ1'cAT,mFM#HdQrCN0aD(FNae8m`(Hc4p4ql4 @bac1d)Aie@pJI@l*F2Kc(8''qiUY+HkP"*23fEHIld(8S1cRTjcCR%8*rQA(2UZ 6a4aT5jk-P0ar"K`AAfB,1U`EZdRq!)T`HX#@A(9UZCh&N!!BGZ8Ul(&SdT%),@0 `**IXQ)'S+3S1!!LHF%6Q920XAifCUbr!S&&*MX[6J'cQAU`0$0Ck[Z2m"$D(I56 j(e1NqX"V8Eca4$f5YTkV@bp'fb2T9AVL2Dd$hI3eEkd"Jj0MVNMARak`q6YBFTU aLkHVf3#XaBRE&-!M0iM,aal3Fjj4Ke8I,re##Er(H*6Pi8@DQq)(4J-kbpfe,A* cMH'BqbQKXAcJ"STQf3mR9h1`F2"6"lm%E*dNK"J3[@pGVR3I&M0c48S(FBTJj*+ R0XkBUhr%*k3*QC(6eS`YdL1&Y+YDJ4)+YlCMQpb&$SqAT%4cBch*[[+3!,HRh)Q j63S8$28RDGTIe0j%*e1Ic"2`43N8Qpe,@3!lRJ-GX[NB*@)Qd3c3Al'@,kXX)e" EEVT@l+%-Y8$3DVd)&64@d&R9VjENS!'-hk$!N!!X9RF8T[p"#[41HiSDCQ1P62l 3ATSq$XBC!YGY8&3XDlb6[qD[@HlHq3IeCl$,r"FPe!pSE1'3!,PRdNU"A0"mjJ2 ,2BdG83a)2U%S4VMcTjA@TXKXV#Ur85%fGPQAeLhkh&+Z'#kT!r#ffeqT9rSc6Xk ,FIm9Z@-,Fe"NEQq%AdTfIdNc8I',f)UXRNhFI#rPlV5&[CB0N!!9l2f@Rp@3!%d 9eaXM%`E9aP[pB)F90"kP[XabmJb$9N$j+j!!LJ`@-bL)V[6h8+hhUklT#X$kL"k EbGMmUP+mGjm#&52ej38-R%hpBQe'U8Q)Qj+!dKRRr"ke9E(%-5-TEGRpM4248dE U,C*3Nl$QicTm[6$CeEq*NXJB1%'UNARSha`$c5(Q%q`NbhKqB!(ZU3Zq0lS5S`D 8jIRjlkHS-aBCa4YiGB"ifY%BJR'Ed6C69T0qJSh0"T!!HCHjHM&"Em*'crDH'*Q Qek8I[3RU@%(+XX(F#+dc083AE6R(D+++#6TFiX[BNXUE0@U(dRNHfECh[iK6)@3 #DhJ#r(VZ"G*hQ0V)2I3-6FU1eXcPrZ#m'Yl38qCM'[RBXG5`*A'6J@G&@!*AYbQ BBBAYF25j1lXh[5e4hSLIPU)XAXm@&D5(@GkNKVaFp'330VLB(pccM+kUiLqJAC- 6b5ZMI1jD!)&!ISlj2Lj!&#MFfdJ"VJ`i"Kj4TAC+#T[+Dj4e)1a6d[(3D-AYrr% 3maV[9UA[Y2Kf4'8HG6Ac9SNeh"8(LphZF*!!@29kf$d$fTp#EJkI3'5peLF&bDP -2bBdTkV9NI&pQ!-BKe@@Fbdh3QIXMf"mq`Hh$@BUGXb2QQUK4r1*LeK$m$DTrPC Fqlq24$fh6V9MQQ3V1@``IADUT-*AJ5eRDVAq1L@$Te2-`J[GrD&EHPh!*ZEe6[# ZVSc$AJZb"ZBp$%+AK$DdamZTLK1Z@FRdS@0Y*(qp3Lhq"JXI9YdQKfQkk@TpTDC em6A2Hch`4INiQl@mj2ZBhZ3T21BD-Zj@S30EhrHS#C`6%aN94H![D*-EhRZ+'64 dVb%kplH)0%BAE(Llff4Db[*HCaMDATlE(9qbBG$5HC1V[@U$ZkT(@!m+'Nf"2hq $Ff1%9fHBcFD!8eTX4V60M[&3R2Z6bkS)lDXIp3X`e2E)(!UrKZjme5`NY30YLBK SH3k!c!'RbX)&I)p@M@HBN!$#LT!!l3))C!hh[[LP#jDV'GNDdRh!2F@N6c[fpGM NINSmCEj1aY`G3aIH4TGQH$(I&8GN,KjEZLFSCX(Z-d)Y"cpA6ff4TJNR#Ka4eT6 TQr!G-jRC4r90Qhh43M*&Ad'"KZj@`@T[d9bUiqlUb*hSFqcVcZA2+XULFC@(!b9 eD9Kl,!BFdXZ`13DQZ)KRF5Y9Lp3'd@6pj,GdUa%*m4p"rB)eR&bU2R-aT5"@8mJ hPLPMR"14erlfM9ZIAmQ!+Hfi&qQh0mU3!,'SPiQ$*HXj+Y!,aXdQCIA'j"BS2pI mjG3FZllH&cC)`D(1brYrQ!eAQdA!L#*Fm[c%MfQ9$qq+J1G)ef#%"rfm8`Qjr%4 $3++B'aRFJF%SeY`Kl`AJZ[DpD,(5406ICRj(IjJ,XUM#$Vph`-[)mlf[+HF65(Z ,PpE&8@91'LEJB3(EqP!G0XB""PA!8%D4CPAqmB)m'@RE%qd&[4R,6XVr!2fBHLl bMHL*CEm4mcQEZbi&,ea@F,YPU`89b&JCFAH9)C9c0jBE[-#jqKQj+EY%"iQidZm b23#[q3aji#TYA3pE1lZI5Q*J'erebPJa`3(#'Lb*pbiZF&9YBl@PQ,0##2U*YQf XIS+dQ*Lp8054q8QZP6dNLUJQBNd8e([3B*H6mLB"R9SpY-B&V(M#P"@4a8U")a6 r&X,UBVi4pAe+1LhYH`kCbf[fh4GQ!e%Ke9Y8cQ0eSVI'd0E%UBT("9BH1[5LGAh @Y#'1G+*D$1SpGEipJQrEiCKB'H6*prd@iUpHd8PQd*D(JFVFmS%IFfEB-*j[YAi 2JrUl"YFfl1P,,5)Ym$"P2b",h*!!`F9(0DXZc5c*Ai`@q[Qk,[13!+mCFD+p6%a (Q4f'QSC2b6FRIMmUh-,4IiND$TCh0pecM0Z@F[2,e#E($G@"0rAR1X1%birpCFH Nb6lAN!#Bh+PY%,*8P@4R[R"E"I#1`84[f-iGEa`(d2+6M`Tm)kC'kMR3N!$,$Ff 'SU0%LC!!r01[1ddDjeR2DjV5rSqTbm3DN!!-d`rC!RiJG@*LCpKDB)'C8&Y3[RC "IXdBm`qa!E5'AY4@CQ&qqQKN-,!hK,L'B0l)m!I0&@!@[V#[ZifM1Gdh3Aj$EdS [3+E2DZ%6)VL2$k)HGqmRXhi0fXqr$imB8*BU&fZTk")QZHYUV'4YbXQ"Xd(h4C% 88TqNRd8Ik`"P4+cUJYiDG)Cib6VJ2'IMP&LjNI2CZKZL[9qh&!DkQ4f[d9Z'Vp+ G5Eh)&dXH"mb"lF`1Ih22'RQ'c0(9()LNEDqbJHDr-Qq[6$+eIImd0U#'Ii0S`hF BA#4"lD0E$hSR6VJN)XYC9$96`)ePR@`SHZjdlc0!K01VJDG#9VprQ2Q5cTV1"ZQ T"S9`GhBJipj)L)+S6aXdB`I2P$r%"+Yh*$k9XmpHfa$Im(9JN[SIAeAIk0iH8m( pa$d6#!ILQ+TTl59i#V!mm3[BpYBr@#T0E!DMLGe`LE`0r+jcAJ'2F#1QRbYHJUH PlG3V1`*[R0JMf'@NY@T'AKMe(d$KHRcGEU[FPBSe8cKikqc)0hSXbQl2EF)l3c5 0`8ch+DHcVDXU5dmFUGRD,BXri6IrfaZr+`'[[k*`kMQ)J0mK#R`YkE[fX#lp%P) Y`GY&mRYkqc[0KZ'D+ZCP,fVH&L8rJDN&HJp,Q&lN+!F$+jpL1rpUA@C2fR%l%lB ej'XC)0FQ,ZK[qK%D3XhYmk32"Y2VjHXc)*lGfD&eE%dUSJdrq+&MEFHX94D%[5V r[V2cJ5QE!IGrrFUh3S4i8'ZM3SSRNQV4*V!4*CFGqBTbF[RRPDdSaQ)@8rqri&! TU-"p$`SI[SAS40(*CLKME-VbL"KII2ZF1q5qA$4bm4)j)kSil,hmqc('B&D@2I9 1T3e`iQjC"E'[bMe`[I10Fe!"Y0diH(1+*1h2IILXNXlH@qD'T-6`2Pia"hK)Hak `Jq(TLrl!9F3B'AGN0[)3+j[q`ZEl6F4XUdql'058pZZDh#S,aam'lT(Qjp`FQhB a50b8!Eaf@T6NhX#Z-hja9LfbT3Y5!plm-*&DZ)A2,RlE13!4r"j9I9"Xm"C&#d` LIlc0&1(SH[peRrSDmYMpYfQ)EQj!AfL'$IeFIbb#pJrd1if[ff14'L'2!Xl96[6 4rFA6TB'i0aJIBdK6eJ&&B+MlCa*%k0K(PQLdkrZC4m`qJGS$QZLLl,Q-)@iPdpU [1[X8MhSF#$,ZBqZjkYQ9'LDCda+YKCLreASjPC%`VElM"6D'LZTc!%B%K%IfeCQ Q8"0($k%LP!HBfTk51(jfFEM2mI,PXF*INdj&4rJ%2$UB8PIJ1MVHkJ@qUVpV591 $j!#YNH9%k&1%FZX9Ma&a`qfVrRX1$Ja)H%8N!kTK)-hX@fCQZb)G&TLPc9P8P0V i`)!12$*%IY[j[Y+BfiSb)Bb&Kb(98R$KR`FHlULNIc+YL)8(AF8JTaVfU)@R1j! !XR%Gr(L4j4Me*HIDSFYq0FE3S+lX'hYCB%8j(%r$V-8*!GSp4Q*fkkN%1N3p2QX I*m0`F2G50,#p@hV423Q4#kiIc6N,JXJP2qGe8#`VN!$Hi@NY#mUZXAX@55iNbe# +EA!(rTlp9S@)iE2qTHQ4peEhE#N#P-B"EX$!Ih#9)r5LDMe,q[-l*kbT())diF+ f+9+EaVG'dCFV[X4BAi!1Dk5Cjr%&!eM`Z+H6!fKcipqaVD9EMC!!(XYHQ3rD#,* AcmeBlHj2G,IFT!#+0'Y3&TSRd$ei4%I"5l2DIXFL0p5*JSd#iiXX1rl&RScF3Kk D1KhTkR9H&hb5MMXLL[JaUj,KPj!!ZJAJl"a"mH%QVr+G9J#Ml(Pi[J+d-$RP[h& IPeFRi621aX1'H(#liLkGM%hG-[ib%U*UZ!lrpqRXM*)b59eBiRk-N[C(m$X,l3b 4r`M&lHI$&&)mXjL#(dFG[J%6h88L*NBrl4i+j*!!HG"+j!mZaHri`qDS%UCHV'C MVr'b5Bf#I%'C%dhU6'jZ2,I(,B!jc4j`NEZ9Z"MDXim,D4!FK"['FrIrfU21Y!' Ui!,GK#1L(G3*qm$CBYH1iE@&U,@NR,Ja-NVcR%"KD$H5fBk'bH+bAHe$'J,ZQTS !UACNXTMdGSNi(4blFjSe-mSPP3%&dA2YV2[3(%B9E(&FD#99PkZmA'Ka,3j-1[- ZrV[Hi(eXberTpbjfNhD"XeE[*ZQ4(Rk'HN#CBAM)$H,iQ+bBqL,[N!$Shd9LTql k4d&%CJE%2XYlSC63@dAai41*p8HkQ5CB2@-Hkk921ffR$i4HPmAc9TSYJpM'40c Fmc&A"SDK&PTZU%R5HRIb#NF'M'[&9L8fiDEc%9h3VA`q4r&&N!!C%'JppQNYYaL b2(0qRC8-#S,*Y3TikNG%e@,fe![L3ThQ11EQqB25D42r0X!PDZ)p2qASQQHqlqf Qm'[e1Pk+-$Sq!!e)*`XiafaJC9SKT+('i[0l+Sj"[*b3!)l-ekiAm@ABe`d@drZ HR*1*AMekqf1+9f@PH$eQJ6IH"*e$T,rq$)Bbb!U%fJU+P+U,VrJXk1'Vhif'K%S 9'1bULTi$Z01@,HL)ffF'%&[Cb-@2ji5P2jCHS@lV1YVH%q#hBB#q#R(qdVeXK!Z kqNIrPp9M'5Qif3jZ"cRl&YmKZ8QI%%TeL*34cc@MDhImpc*4"2kfIDkf*GG[Q*I [5qPZ1%e)mm8"qI&aAY$LP-Gp6DXrbqSrSe*96Rm"AFBKX,#*Dj(*l4f3!!fq'm& VMTFH9NrM'PJ1-PZ8lMRhiQ&NhU%6AU%Q0'HQm"NLR)T*@f4FCVCMXcUCbb)X8QQ lXF$a3Lj&%8GQ3(DYNGAN32(`d@Q9N!$m@f$6'IXj9lEE"-4*h+HS+'SebeVclI- Pk"+#1+6XPY)D3j'83[26*D#Ga@d"bGj9Fhi@6)eI+8V+kjGaUK#p#+dq0BZU8JK BPlhj8S1,(m)ak"El0F'6RMC*G(iVYbQBpCfa&1E)ec3hKJL)E04HpFBq&H##4eL f&6dr6SI%Cl&FB'TlmVVYNXXc)YNN1V0Mrd%6U[1V60f0+$1lKV%-Xi8NR,Kprp$ MGKM,Kq&CTXRJF*+Y8VS95d,#[[HpU)`eieC6*`@L(@6AR-efl-T`phL8%MC*B[" 3B(Ya(R)5KU)&+3B9'3r4Gbl"Bqll1-2r%%i3f-M125I*[3NkB4T3qZRfDVBq"ec 9rM`UU4(`eTl+h-RrVJi&9U1AHc*E"TpeJi#*440kGDVhaSVFYR`K0j6m!#el")[ 5!E#Q"ISBA'p)QRqJ$UYi*$X@+#9fEpA6Z-NY84$LC!JH'ljNq32Um[YqR!F'f54 8ICaA,4U55TRP"3!)41$88%e%!U0@%@$FQ4G0l*XmXT0M'IpNEH(eUe$ccPmc8Rk lE,-jdmYPL%2ZqN&I+G)&NA#4hF&a-kciESkckQE-Hhd[[f2A9R9f6&MXdjTYLV$ cQr91D8bbJq1j0,JP&E,+"VG!d6iZ2e@9(2LR%JNZAHdSr3LXj5FNA*X6cPe,kBp 'kr%LR`9F-YKR8V(cDq+HArb3!&MK9[%Qfe1"FD2+Q6hC9dAV#JpFRlTQd`K&K-f d!erVQ,(CpqJA6S@5dJ#RB5MmPK5S1#hEIUTkV"H4Kj!!0eP`*hMDc+$Zi@di`*b #K@UScDmb3#B51c*+5bGhLb2),K3N`1$*bddk5Ee`r4JbUm6L$1LYjR*Z'iVbS1! b-H)cXm2CIC-Qb-LqQB(bc`GK3LT8i"1FKj*#PXp@#iJD0$6C43LfGZ1NVNG,f+* A%dApqN8[He[QG1+@qKRX6K&JI%0(Z*D%AVUAG[$iLFjL[Y%!50Ijj2#`2#!8!!T 2S&)"iUcfcSr3LQjZJ-5I)5Hd3fBmd&)KaEKfQaZ5irTSqqfXS%+Q&6IFLM+!8V, AA@kDYXhY,H42G%k%4MU8&$Ue-ar"[TG&%`BU"j,eFpSH4&4*BYT8U5cKrJ5hN!# cRkmh5-0Ia,#9j2C!rEGbSK1ieAhm*p!KZbpNlm$Z02K-+Y5Qf0Q1KAla8Y0![C( brBmAe4TrCH@q`Q2X@2jf2Ql1f'F0`[H#e)-&+8e&52)G'B2He(M0dlSc%h@r#e9 Alb`H5T3TFbkXrSBS0iFdPr%Y*dD4XJ-Z--ZQb-M+qHYd#cMe1$d)$Ff2jTKJ&qb r1(CbaNNbr2`B,G-Q&Aiq%6+-[+p!3i4bVIYU5#i1ZJ39cCl#)fmP,[8G3RpV1Ph iPLedFL6`1JF'$6q8XHK[1(%E*DCUTM3D9clrbd"[ip,hDE@S)ha3[+J'a6L'`Tf 3!-f[CkR,[VUYjb2CRmN95[er4raAmrC*2,S0p@J*aRVQKC8Rje4)(jAHqLc)0L0 hJ4AU#R"cF@Z5PY"%E2i9ke*L(2rP[,!r*B$&Bp0b$Y))[[Jce+G)ZEp(*Hb`YKl I23P8232Jk1jrP&dJ&IGKZj!!$*qYk8-3H5pYE"a--&,8PLKmLY)5ql4pk5BHE&N P4T5XF9VT+RX)3hZmL!&LC,50GIFX*T`"6Z5aZP'r36F"jk[hKC(")qM&J0-0MQ5 2J1lS@-aJ++RMjqjp!!(M@5,cBRUMAp-bB'rdjCk,9P6#1[GL'QSTEjU&,'Z"%E* b$"G#5)8`!"Y,qHrb,H!Ab2QQ[#KN'r++!3PUFlP*C6`TSQXcLPaUH@Mq,r)30Y8 AF#`@Daq)KEM$hrR9ShU-RA0'hHcqIY$8QAqFCi!e5F`YDMPZP%e[QCMI0N("K%4 Y%K)hcR%%5GR3I%+9q8pEHj&"9e(CeaNVq-Dm`4'GLZI1C*MAXpI90EZr`fF3C,E `hV[%)0!dSYEiEdA%Mpk8SM+JG$F&G%X$D"Rher25fSUYQi3Y%)`+*-FGp(HZ&KG #@p6`hbETAT&8a&KRF@k&a`6QFSQ)pk+00Se0SG@%UU(NJeCR@(ZUk4QJLSkN*K[ [N!!h-Zf2UkHjZ)+X0dNj3I0HeF(Y`35JA#98NEpd[4Lr0!2hf$8eQdpLS)6(3Cq krIM6ke$i(831`1j6b2D3!(V899TkB604Mqr'VEYA6l%aHL-mjR0l'9GFfX3hF9) fa[K+`AJje`*G[9)a@%CAV1V#!ZX`,P2eENNHY90P5Kd#qGE9d@k![PCP2IVC$aJ !ANGq!GZHil&8TRpe18,c6*dLkjP-1#B9%qejhe9L"PT9HiRH&L'QabZ(je0GC4$ TU(P-Nq'#(Ne8[i4%)i5LIIed866S3qH'Nc*4fZ"IAVQHi8F@JlBi)`3[R$X(&6Y d(C2F,*@qdH5[NFcSBkDBN[iqk4mc-pEC05XR[$LMaYBqVYXR$NT5KB*&QU@"jrG Y#P3GA99`1JmY5)aR8%6BFE#H0-HjHpbi%X4`CB8Bc!MIeDHDB0ZpNfrhS"f9!*` S``R60-*IE0c51Yra6[55a9h6IeZq9(GZi#Fc15,KHTI&B)f)%-!C&QHbM(94XpT 3,A([$ZHK#&+IBil)Q`-N5J418`@9m"R&DNQhC6EljNi3[-Q*hX'$rRNBd6c@J[G 6A`rH%cDA8[8jHK-!rFSdEfB6f29(ZHY-0-C,HN2hIBD)lci291k93N!YSElKQPj *!TS,9Xa8[-KLi@&V&Qcid0D#F6lYPp+*fJ9)mr%B(jS@Md@Cj`GThdJl[!*P+Gi "14Um%bm*qT(,6c@I*+cBm0dp1`+1Q3c*Bj4ml$PUJ!GkaCQ#aNZ5rFKkYCq)rMb #@ZBPYq6EL[RPTUj0lD'cBPA2fI4R$brE)G*CYFiU[b`UT)cFV0J)ARDLqjdrj@J $`@UYllZqYMY8`UKfkhEJTPh[e!K4icX!SdYQ2H$6AaPcl)A%F(!$"UqHhbJkeEr +`8iJAFbe)!34F!Y$28"Fk2G6!f-%p0XaL6kV'T6dMH2edj6B-5+FNj!!'+5$0cS IS$A3K3jQCZ(39YBV$QDS&Uk2h3$fd8!,K*F!'berF`52(VQ18+'#I`5ka-AC+hi qZ[p6Am""He#*4'b*jIENNELc'`Z)-3cK)KZ!DT@QciZ'A5VhVJeTKQbpP,p"a%T E)"b4a8+Ji0ipAej*-B0qi'Dkb&4FiQ6p-KH%5+Aj3YR%ZcYY3K'!BN(cPq42#(a c8RXCR,R!2N8r5$m1D6ZNMj'Zaea9j&HkjI0F(&`2J04'!-6,f1fla@QJhi#m8lq EbVP-A8*h4(2AK(,S)Ma"TqEZHKZRT8lk%Z`UK,@mQ[bQi1!i$pU9X"$91kEiE0c 2Um,1d[@hdjJ4laNl!PYL(*C4Jcc[6!TqP)4$kb,i!-h'6&dQMKA[@BDbhG4A-8N eHM(Ni$2Z!LM*(F`Y8@X66[K"DMD*`9YG&RZHEZDN`j-r53XM-bSHDdLJ9AmaqdK Ak(dM$*jiDCNq@kS"IRPFXV(J%hNLmj-4M*3VIr&im3ZC0*P@p,Xqi0j36qbNqh( -Yd2[i5cM!6(j*IiKh90)cf6)h5ALNUq03aH1ZEaNGciT!LX`UiiL0$V"+a1l@FK (MeDl#Hq$!!P$cE4Lk1UUZiiHA*@'9LPHK*3M0c9ZNR,M$TCK#%f1qPdaK%`[##f #HGHBN!!F1&$96iGbY8$-e`ICpe4BAS444M&lfGURYkqY6%Y1HCPmerA)diIGEY* 6"jq)TM@R%cpY([-fB*LIacYAF8be#k`,h3XSDDkD%#k1Y!e6*,hLHC[0MMe,ChI m3FUDfmkLjX@EqkNT$QB#Jk5Xap0K*%&NSZce3Y)UIhIiTc-KFIbfLUeXLleJYar SZ5fG-XGB-DD%,-dG`2J-m6d*9ClUQZimm*BCapfEdfJB"ANi,8dfGXD+HZ6U-Ie Hl[FE9&@$ba4RT%SL1#86U&r-%@GBF!hUiT`X-lq#*p(I!pC-4'P[-VUPqqBC"Na !JJpXS8U[MA%!+R"6Z$qD*SdiiLFBi1`6("#f*)1SbTkRjHbIDU9834&k'!TBISk 3!$bGq)BILAm"[!GqXl5ledL8lB*ZR!$mm68I(UfU$SjSJr()$IR2Vfqi9P84d)8 CrMBZB4beEX+pA*(5S8`4CR%fY&QRVBeDL%&DQK-&D#f(+&kR9cF+%RL!8-,BCmV QT-4KI,05SjjD,VXjN5!3Lf2A4B$CTl8[0jXb-di2Y2VAdN%DQcCSRFV"*YmH!`T e,iSc!F!)T#*04,+"PSfq2Z9Q%mC0YjebCp45*C(,qhX3'GdT&"e)eT1bE3R!h%i 0IqZ68CPPqH0(*`HeZ1![)*I4V+YN0k$(cU#qrc,K-Qa*%UIS!Mr66C0*-fq"kG0 e-@YL$1dT`-Ha(Gi-cR!P8F8&,V4hid4TGa#"DH,im42aN3b8Kr9[B-8KJ6@$Z8K (j[cPA5cFAQN"6UG$ijRh4jC!l2&Jld#Ni'N08X4H@YYHPbY95#-ZCld1XDl6(*1 h'@dL#a[a*A$pRGqHVJlq`Y-90ra8Q*8q6#ckPm8XK8Peica`VY&LKMD-pk66MV5 +35*p3G@$+k,)Q,R(cQTSF8$JHMXC2k)TI%#jj!r"Iq'99'drNj)Te40[J@i@Gm9 #Ji"+AE60BQ-#ULdeH9MHS4Xl@8GZ+G!@pY',mI@Zc6LD-,NGJ6Ai#Pq1krV)HpK C!D,"dl58fcJ+jB8kL[bV#FPh`hL@45H&Pm5IUT2#kQ(q(!A`4HqIS8KL-,(I)%k $"ARP*YTGd"`cGPId6SJ1[-(UUY3+Ul-hd$%%1rBci`6-`0iBpLi0pfK3A8D$)Pf 4rLF8+1rb3035M8i2e6$*IUbEf*9lAA*mE%p!r013!$fmii'TS2D40$P6Y,9!Sh( 3#X[qqV$jhNK-,6[FqqE4rH)eA#VPV64T9e'K(S2a6PBba[jIkTr![KYb@XEQ16i YS+P9E8kf`'`8j8qfhibIKhPf4U#mB9+rbD$2"Yr,9eSj)0+2j!BcZaa(&C8D5I4 Q5@jAII4h)I3m[HA@01$53aEU8qC$ZKkN0)`U$RA-m43IH2pll)[pBK(r$`ZU9pE iUBERi(bFa0kDB!%pG-Q@"HRBbqCVh,+fUSXd3,&1QB,aC&c!Tk@Ic3Zjm[beIb" ZFKrF&l(ReHbZ"-[Z"'Q@Z[cJfa2ibQZeC`)@N5-AZFlacjR0P2A8XAhfI@E-MD) HiiX4!cl3Pb#B16VQ5-FeL05Uj9ISMd8@D3#jJrcLRXjm)P""UiNaRK2)FiGdVQC H&Ld@r@CLTkFk+1AmAh0ZZcl$9,0XQej,i3DS$mK!d[5F`IE19L4MkEA*%#H(MY[ (-QGD1kHT4B"PVie98)c(kJSabh'Hll8arj+ajKR4D'FHL8GID1Gk'`KeqD!YrUq R!`$[ElIU6qKp6@!m`kD&b+CFbE3'"dAM9kZG%ZGV,Dk3!&T)C$8619-#SUc81hV k0!&b9AHmD2-2-eRie#q51R#PUL#0(""Nk0MrAm2Xk@68dH83&FZkA9)VHB&9pj! !h)[[kJR!5"AUHEpBi,G&U&900lQc&TeFFfNL0b#H*e&Q)hZ9"9aGXK[4f4jr0&Q 8JYQI[J0491fdeNAFT2ITQ9LRS*NFH%a4EiG-hp'5KVTE0jC+fVrrCqZ3!1b'h!6 jkN#rm0N+*ri-#4Iq'D2Z38TYMrih+A2Q9J0Y4i1UX1Skjj3),L%RF#-8P"0I+ir KRplYB'T8cZ5KJEMq[+"6GNFIJTj)+[rqUSQYRhAVi141qG6qS"UbFk0%XKA+C*! !EPA#MY)Q0!,)L40bNZe'Df[@1Er92hd)aQ&8T&Y!a"N6YQ1LGhdJFe![+!2GBE! R8KRUN@fe@0aH&G-%+EA2Yarbi%mr"ZIJ-'cjl)3k[d"V49@&2"9X+NM9*%VhZZR hp&Ud(6ANF1m"ZBYaA5!!%[GIeYea*F1U$!I+q3'N5C9XTIGTjZaV4krl1hm@ffl 2N8NT(`#[aG-&-0YQ-Rm2`d`GGjGl'"1AJhqIQK2MEXbR4CIkEJLI#-L@N!"dN[J kIa2D4&G0)M!Rp,P6mR2K6iqFLU`e'5+mQb1X[r(FSl1krib%L#jlpdc9@DlDl5L L'refe#+GhiUEqCdE*dmZ5,bRb4'80-+3!+Q0bI3VRiGRbVYiNq4JEjeDVFiDJYR V"N@16lldY#(X#jCCC1Q1A9RQU%&hSB*Xk%dE9fp`#I5c4$K1S$FjcIVXfF5-R[( %"2j0hNiS3q3Mcd%Q3-`YP!%0V1c'Z'0'E8QbZLj[(Gq3!*b)f+GE1,j1jR*R5QZ "I*U'A*2C3I65J*P1bXQab'MPbPLU,LK$"kX60J+1eFr%D3MiPf1pX63d)GH)0LA $5*0a6eBEA)NDIZF@XBLjX5Y4L!c5LpV0d$3cYUJh*6CY2i#8ai#TELZ+`bIX%(* #`VNc&U2@FI0)BbE9`5&$kUM!a,VL56LTe"0*MJ!kQ4(SV'SX"9`rbQ[jS51TC(@ Cee+q!(D#&mQb3KMR%P4SdFApd4e+%@Q$BN**Y0SES@,%f+NGMh"jP`rAIc1b&YL #3'lAlAL8d+D!bR**[5TlmkhDBF'6#&`N@J+6F+bhcf5q6c*V0GGcGK3Ba2-qFkp `$V)(rfPX9&V%pSqYB$`CAqcjU3FXRAVDc,eUb@`4+IY5T)Q+hrN6aeKafK"@D"F kP8aXeQ2N'+S&8ZffCPQ-%iqH'H9UHE5k*c$6iRA6&%rZ9'cEc!UrYmcC'*TArf+ k-9IZXiF(E6[a*'-`&P@#1`6dhE)P[%GSlQa*NNT0dI5j`lHU,kdHQD$Iq%Q$l%L *SF-P4!-RG8BdR92-U6*k'LPKYFKQl[Z!",l1k"eJPfb95$VFR&0jXJ'jNP,9M3A T,J8KNZZ4Kcqc"P@UA6h14LKl"Y4)e0+B#2,-FjiaKh"AekPlS"mf6'AGDMNe&UL Y6j+BcpbM1MfXM$XiNa9("*d`p8DH*CB#M)D2,$"+"YT1+drmb`9VU@K8(HGd&Yi H)9+$UYr@E`Bl@F0)I-+'5HJZL05i(LhdD$Gi3EYUfdGR2jc(Y!h$`AZTAH+0!VD UD)!feNm9ZQ#H"p'VN[#5e-qqmEAdTcE$IUe%5&!&JN,I,eXDP"qPc"'3!(MP-2E YCIjZf2FFh'#*0-be6$2FKl`ci`dIHeN!*kG2C`b2!1mB&Nm2RPIk)Tji(%$H36d 5bcjr((5[l`qc1V`Bdk@4q*2pF8I$LRTP)6&(Ma)4lbNc2Qbl[iYL+-`Z1(1j$kD A1ZcST+'f8+C"NhVV041Tb%P6!dm&["'fqTbNDA`Q(GYZ1QMVf[Ye22Z4TK$Ca5[ C$4efN6GKc-0!!ST-rj!!Lfephmei&beJZMb%%'rVP$J%PVKXkd-pNrUTIV4!3[i ADPGTiiIKpbZYD"#Rhcrm94Nkc&RkL@,#RAX`)N*ebhT9L-C8*'fX*lRf+M&GL)0 MSI1"NA+4cbRIF(#ZXPPZ59Qd!NdV+@KZEb1J4)4%92k-)&fF6"*c#B9,eS*E,@C f,Zc*86pmjJT-@eB29DNbe0A!0kpid'19HC,JK`0p8ed[Z$Bi(e6B6AL3!(!fAkj bZ,#@N@DG`'Ncm-rhG"3Bd4PT6p!6VCd9S(H16f$d-4Y55L(Q1DY'j5jk4CDS!-Z D#,*'VUMYKUL$+#`Dl*VT39%%-H,J"CVBMBpJTXd2i6HK88GHfaqBi%CDECIIhm2 XdB&DT5hUNBrp%D&3DHHf@+JMaI9,$B%+pj,3e1,K2$X&cd0r6Q$5-0P@XibEP!H p*Jr&T6ia%D`)IHl5e*Z-SK6Cp#h"+jEI0!P86T%C,6ipB%30a'KpB[0cD,GF(mM LM`-JBVr8RPa&c,3)8cNP(kG8@cMPRICUXG[6m,(Pq62UYrR2P4-$rajNlSGEk8Z NR9qCl)eL08MPqpV[lMGdpUf0aV[VY@IF5qd%cJM*U!l1"D+I04@+ZBiBT$QSCl4 biep`Ja4hBeC$ef+p,[8&lh+)1S0@rfMjXV3*5BL,54"I+*Zh6Rhpp*C%V!4+",T +j#Hcm@q,S-&H3+cIhYE#eCeVTrGUcAl-`qef5F0(P6kRS@kK%(m90'jKdKPPQrj TbXP4Elh4@%lhreP(l#NQ$(iR8k11EH-l,JcX$`p%YcEULZlheK+&UKphR$j&jJ3 +V!e'"fC2rJFZB%*%V[FSj[EpAjF8l5@Fb6C*1#FaD1#Q2L8mLb%NrLr!5J$$MMV 4)Y9kYAI%@@66al,cCeq9'`M(hKKq2h#(-*8IUd[Kdr4'MX0!U2Z5I$lrmDqI30m ,9ZBPc861aFY5YA3ZE%*-XJDE)82Bk##%6F6$FhG2#CpX'jEq)pXEq,)BVIU$"kk liN)fBe$9#[6D31$&6U+4!1aQM)S(e+F[2M%[i[)l6)"p%d()ac`TC8*HU(6V$qk Zek#C`FF)GKLF2dSFZqcE8@Tej*Z$$&d%@1qlSS3TX+hhQ&FGk!B(8eHR"kUF129 5pQJem0f99[M1T[K-VX)VX4G+$eak!a6qdE0,EfU0SPbG"h'T1L[UrV$aJl[-CX[ GU+8+-3![qk1QPUeFHQM8UNp(R1S'l*TaS!K1FFP(ra[Fe2$"RCm9V'f0h%Gjh,E I3HdF``PN&Z9mJU+HSKFqZf[E9XZ*T,M0ZM9V6FI6VUkh+cXV)!ZB@NMZZ1SAQmk &rdKHjNMMj$#18qepbdE&@0qr8B"-f+rc")SdNTNpU8dh-aRrG&(rCF)S,1p@UBc 4GJ&FFZlkLHf3!0E(Iq2K+j4ja#VT,HB2Le'EV$G@0hLEpqraJ(d*kI96U@HEKQk 3!+bAY-34!rj6R"P$6DNEY,f"hcaRp#iePIJ0HrC1BQGBBqaTBa"m$XL%dG(6ia[ f2d*1!-f2jJ*TBL#FEN`1RjdTE,C$B9$9bIYTqDH4$EU8HeiXSNiMDL(M`SC9!PN KMQpr)'ZpLMVb0fl6G89%mKXpMkVH5icqLR6akKq0pSl[@-L$cRLME1LAEaqH1S' V5ehZAfDU5-P1dC,`4M55lFpAQ)Ph$PHCrLXBd"8kk`('`Aq@Q[,-564$a9Q0"T- T1$Ldqflk`C00LK@!Zd'V+,U(Vh'Rab&hK"k@MTkPN9'b9U5i8156,kLGL[6EM[q 9Nq`NPb"V@@c53"ABZ-9kE+*JcS'ZGS8FCHB#Nm9!(@ZAM+H!9cXTAb-D$06X1E+ 2D8EI[q-&L$-[B9@Y`0XVE!KY"9I%k,KDl1+52V516%4KF5Z6$CCe'G+XRL9`fFb BHbjH*MP10TM0jlXeq)fdQK!X"4kC@V*P2YHXUB&8SD3`NP0iGIrrii`fL)ZaJRG ie$HZMEZ)6cX@C'jiN!#9K@C$pd5@Bc2DdmMMQ"HmVX#Cq2XU)ScCaYpl-UqjT0L %b*CdXqdXHaR%Z'jM2!`ZaKU0*NcJml%%)f*!9992hec0Kf5K0-E!RQMG,ja[21i G!Ji@Z13HQLLqdTQhUkKJdGp"S-(CkK4,EFK%",(JhSD6Y$VC@aYM-IKX0k[cc98 bZ&[Y0b&B#a3+,"FM,mYe`l`e%Ya',c20%,8ZeFT)'Bmlh")q#NHUI*4fB5FYiNb D5P'6)3HKrkPN,a@KI(+83eBpU)hEpjr[LR*d2HmcKbV9"RCBEA&bQq"INhd)41A Gk62b8kCJKPh%@PqH4EY-U@PK`QHiXY(bpQT+iP!%X-9SjmEFaP8YbFrXA$SPEe@ ef%K3NhI'20[-N45@@b-I$4'DPNrEG-q#4p0KXVR3X3$9q-NN$F3`4hhSeC!!8FC &F2"0S0j3jaLM*dF##H,Z9#H(e"4MkK1"D5q3!!)L(iN2(p4T$Gr0Ddr9MZDBLZk lrT`LYpbbrbBiFJ!$VH9kHe5ADm2rpVK,G3F4+E+,P!0!aqDi#1Tq5hm5LDk61)Z 0XEq(GFYBj8BIm%4C,(Z&bXa"FkmK`0FqX(q,LK'q8cm')TZQ)8jY"PlHm9f#aYp KLTTK3V`G,(5!RPa9@aH"cTeqFZm"2Vciqek[kBdFN!#LG#%qa9F4D%#b8$3IFAj %3,eT4,0)f10DT`Rk$JG('2*L9++f)k2bd#TR4N[5)@NGlQGm5%EHC9Yd@3AYFQ( F&Np1@h!II*)EX9)frm0+lQBVX3qIDE%b1*@4YMS2[K#Fb6'F,@a4r!AN,FmAhkA H[ZCLBCbHCA9pSdC53PpaN`(Ce'TlSE0#U(41G6mEE2SKb@L3!+H`VcX+D%`AG5k UY3a62,d-`fdIfJhM-@l4@*&3k5P$c8a4%$!hm0,TGVNN*Q+SipDDQ5jMH@ES6`@ HXL@SFKL0q46rBT1iY2&jk3$XlfaDHZEZEdr5ci+LL&8GlMp"qAICZK3DqF+m(Fj f-j1-R%T(Y%i%*AX*b6Q+ic9k&D,P3J6e),I[GBhZM*L!,j9ErEJ@Td8r9hACEp% Sml,q(i&E3@NehpiQ2@K4jDi1D-L3!%M0R1rcQ!lNaJp#kY%Z4S0AU88,hKjPe6# H)+[1eVHDi&JK&QlLQa4N,LVrraqjmmbTa5RaeEQSD!aek#krNXZ3!2SXae)5P2" dlhVM+8Q3!"0ZpdMQ)mr8i)*2f'%)S!K$C43lLMYL-TkP1L*p!Gcl*mZ@i!VCP8G fab-%8KDQ6pd)2#(N-%k`KSV),2EFjXpX*pPR*&#GcL(*f5"DZ@X`cE1%DMUDUMK B[["-bT'F(&B4"5LV[f0&BjKKmi,(U22aM6A`kM"bcRpMDkdd[iPZNRS16[#$+!q @3@N1b(r-f9S,f@-*Ul3rY'f[-jQb)Fl3drXi$0[BMQa)8X!+cr%K@0fhi$Bi8%9 fG(E0Qd-bERQF')R*8+,DKf#HhN9dGrBiX`"$0'Z4'UK)%j-E8-B%N@pqXr+GdZC +3&LQkZB!,r!eYA200CD8epj*8iCZl5+MICCK$qpfM"jTB8T+ZG08XR8KaBJ1@Z1 (U"jXhr,)1FR9iqaae!@F[ERfD0fR1P3-G4Cr%hfR,3C,d`qQ4Uf1f,)SJ-8`U@Y Ua8d#@A#5!MqQbrc0e2XfGd4qX,3#Mq58#qp'!Gl51(LXT42Z@p9(4(JlbFA'3@Z '+b%!RJl&Urk8pmL))XICJIY54IIVGR&C)e(CCX'4KlSfNUhk4#VAP-rVJQ0Z5T- VQ$fqjmp'G2h+ZQ["ETlKbABUNFMH[51rJI'J"XFcZX0[J8UXJq`XUiT11"md4I" 3#VC)A8E9@"GSAR@D"VBi11!'4rDirG05l#8VT6+C@`fq4&,2AJjpXb&,i1hrc@F 4cfrZ*9j'F5YYAm58r[Y($@d0PN`bSFhL0@X"Vp@mIEG"j2"ai"rUIIEe3$8r*HZ cm"6+HXh#eJ(Y@IK@B(-#BY9IGrU0TZQ4!$6eL-+MBIBf0UBp`liV4"ilUc#+%@& aDX(HEcMA1'NC6JM#Y0C9"Z(A-'T"mU)K@(DUhmjcpfXQR&K*SqIpl*KaQmpLI!B NX3+aa&`r!c4aTPS`%"qr-&dGf%r,mj1Yc$G#EN6T+fa#03!P$Z(K1&faFb32ELD QBMBVhBY,lGk(V[6I#q"jm84-JrYCe&B@H)eDCET[&'QU,-V3DJ[6N!#iQQBXGUQ -,l@T%L,P6ZT-l-%ml@qRp)9mfmCNqpGq$h9e8d[Y(AQKlJd4ii2R@qMJpK+!aRA $pRfXQI!QfXDJCr('+m@iA9Fi6$iTNpB3-i`Z3$aG"Pf!ZEI2hYjMr"U(eT!!6V( mIRG$RjNhh`+,VG+Tcm[911JaeVY&!GLihdjTe6Idf$Z4)1rd#b-8qf&a,fh[1M5 1dC+e2e+kS'5Y1GTp[KC$`9r+5kT'+E+*$c4hi`kP$2Ka1#QJ@A1p3"U%U+GUrC0 A6TlmP+B2@pRSBi9(hfiie4R+25AqpE0211DSI@q(Dh@CIFm+1(%bBp@L6I"29dI Yl3m!r-049TYd2d(DErLK,cD"iQqHkYE'ladVAThp5)"jSaCJ)Mhhh2MG3Sm`YS@ 1IfXcRL*aKX0TXN-%ZL6M1AMX3SLk`CRmbNcLT'p6N!$5F@4*XceQ0B!!LdRi0Kr ZD[d(5M9+rc!TM4P&fa!VYZ)#EUZlQkNGP(YH$S1m6,%6k13"3!+J+4TkT694m50 LGF)X4P#aceHZIf)")&b'(T0F(L[i6m6jbKKNSr'%Y6$ZBj3L3,fldA)@@(q`Yj' *PaNZ$5LTRG#cPHSpkKXlpTDPTb6@PM*XXf,iIH08'BBLHT!!N!"Y01-5r@*rE&m EM'F5VGZpe6mj`#*9GXN0F!3e+Y[D@&-dje3m"@G$-j''4Zj[Y%#MJM$mlLfQ4)Q pGD"hZa8)8eDaRdrd0d@e(ZfiV))'TG[@![#UrQ65a*!!9BHCQjTAE%Nl[[K%U1$ #pb%a3hZ5Y@0e`#[*K"C%i#$0J"!fYprri5l9[NU#0Ska1m"*Sm0*mZSFM"&'%&9 5'`MZFkPVKMQ"B@d88'I+RU4UpaGFTC&"m)C6ZT(Hb+1%i)d%mR23-Uq2AJNaVDC qrIrbD*PA#8k4`+jJ#AEcZ,jbhCC+U2`@HUhUL-e92BLI11#455Y%JB0,J'-5p+2 QP'I`j6+'6K$6Tb"85D6,kH@9$YfFE@&ZNHHHCb+VUJEa,,N,A@Zr#QqkMN1T`m% 6N3MJF2aV)aq1KAX1D93R*K+MT)c88(UadS'1Ci"fZ[+U$P"f)##I6``E1PbXmZ2 SL%)E)!89EVY-&4ahe9+EAcf1ZGA&GCPkbkC[kFQH'Gi0Y+-UJqFY!f&8i8kX[4P 6hc+AIUE&j*U)[[ZKrMR'9m+I*&Rjl9E#q%P4NEkD,8%XXc39UFiKF$d'Ck(rJeQ 4j4ETi[h0L8!EhXj0,KdN[mJbNf!T`Bm9b6*TA*[MZ&J&`H3-[`h6Q,MpC1&Qi9H lr[PB`0[3XbQ1q29%V$Xh9lbEJL#0U95HZLY1PV+#e)JFiDEG(h*ZXkh`(L%SJG9 PJ%TfM9`,GIN,b+QScMJSB&dJDj!!Ij+3!)4K2mE`[J&l&#KMf)0FPSMM5T'"bTA 3Bk+VSrmEqRYHhi&`["&FUr+l3MbH"LELKJC(@`1iBKAdHZRP#E$2bd!G(pi-6P$ YLe3iBq8l1aZjAm"29)[KF-)GR$UP@i`&V*4a05e+KKpBA#JKceG++Z5KT$6'%0- 1dRBIdR)B$*6UIP"Zq!hM%IBT(X%dAF9ZM@X''8abee8RRdpPA8hC&bVS)UJ(0XF 6UIj*FNp*p4YZ*",qYk4'mEN[Qi,DHf!3lV'-CUeQi'9`Z#b(i@P#UaM@c"F'[Si E6RDEFGlM[kX'e2*,hKf88Sh,N!#l1@Lpp[)*krI$deM8Q-l+)kj8SD1@j*EL5FX aE3*#D@3!"df),L+fX!IV)MlKJk@k!VMIq4RNQ,,$HF#),*eA!D`+c1Y!dAc2XEl [AkAerPdi2qM6-G2BBdq-K`)b@9IN0$Tr%9&3bbpk#!+KlaA3k3T@'48b"fAK8'% 8cKpcjVQD@"6f5K5Q(801kR*CIAp-HC!!@Sp(LLJ&DmqiYKAp[ScMTURThi53!,D 3!$fHDViSaMGf!F0cGiF%P'4GbKL+JVka@-eZNRf`#JNT91)I4PakCQ'+hH$HpUA dNDfA5$$#A3Bme5)%1I1+8S)(qdI51QV10AjIIl1VcEaL6#'8AELdiDiUeR'Dd3P qMMmm-ZB@khje9&la[M2&LPA63KT(mVhTm!M$P'r4(bVi#[h-Dr-c0U8Ie146A6i @&j+UaM0kRd3ie6dqil`a!dD`iCqcfj2&iq"4Tk+i0f+3!,aj[mqIbj!!Vp#i"lE (I&%m"pM,mf6f@1rD50dMHAVKDSS(0,e8,a450JZTHckHGIrH1!8(I1)[-chSpd6 d,+UZmbUSqSiDMYKkXdf)T(%r#41'QTV4PP)&65-DJ,&p#B(cj+qM'QmGU)FTC84 %%Qe34QE)MS!"aX1XV@qf29U"8D1[,Qa+KjP[4'R5E5+15E`qDS-B!QDi9459C(! AqqlAC'VhXmKhk0V+Lc`39rhLRGb)8eR3iUJ1,KEjM5`K)e@D2Um*hkNVhIY[VS9 A!4b3!2dS`rp1H[b[cQY#k@YI,Sj`L*T#6)QmIf#[h%SKaR-H#KkAAEZlqj!!`63 VRe*TAEpY0Mh8+$2H[-cc"RBm)2jRC"1b,2a"&CZ")aEfMjF,KC24f8$XJ+PN1E@ [6Q*c0qX%HacZ81'qZMBH%*(V--RiSA)M2lQc5m8'18G85AKMUHAa%!Ppa!X4AM3 R0D%5fIbG-CS$2P!BP"S,YECj2aX9q6Rcb,fF%GQ)P0Li*d&Jc8ZMHC!!eVd`be9 G3fMJ0b'VjNFbr3e45&HBUNjG)jA0hMe3)cG0bd#pciK[ZDq5h8Bc,b!kLAlidB' 96[Q"J"2R[dffhP0lSq0NEHqQTAV$!mr3Ydkk5!LK$@AT6`'QJ-0,!'eAYI"K8qp %aZbKe$r1fF(``J8rhUmJX)@8EMlL,N5p(NQ3!%maa+Yj049*"C*%0eC3+KUT&IS %JmT"e![bpc+)HYV9K@6q"Ld'`1jC,XL5@LmGZcA#0%GepD0Q,0@1rb[lIBY%e%A R!IB6%I8d6A5bNaj#'[PSM6Y1Y$-l5a9M6LFF!0IBIf1HaQE4RNSb'X3p0G3DqSe @IE22VMUd)'XFE&U12f%S9Q$GURZ9`FqcY[#`!bCrL[B$pbM[XlPh4S'3!$V2c33 E4I08RR%JQe4j+Zp5iU$Fr$h`5*fFIaf9d,Hk@e*4"-68L9P)GrBr6)ff3dfJ+%D KD8X1*0&qc,V9UBbDT!JY914J5)C$qm5$1R&klE-&&%32,d&kpSV-!q$r3QDIdV" FR!rVJ*c*VUpIjLh!ZFcb*)1jl$1c(5K$2m5aEhG@4JlcDX@YfUeq$1b$P$S5UfQ B-pSD([6fUjj`#d,5K&f2#$3C&!j33RGB*48)6bJ$B(L63Y")0hdN"adU'a"bb$G 3H#+V56AYR6kVERKX-iq0@Mq+6MqQ@bl8mUc[[!Lc+BC3qEF6Y5EYiUL$F)bLT'- )ChkRc5KE3`2hGfpV6qNXkHN-bepe'))[,B(`e[S4pR3H3kXSBRPk"!,!q"plem( G(qPcj!18P*rl80-Zd&JFL9XEJ5Ybl41JjAj5l)'b31L#eM-@+qU5NCqeA4I1QD! L3b-B%42dHkTCQk63ml&TPQ)S`I4b"VGQ3Ql#`9hQDbURYShP(Mm9&+BmXkfZ90* UVrRrNkJY@*&JDVQh4FT9fp[hPcaUbF(50SEc125'5L&pCY#PN!3"!!"#!"#i)p` !Z*iA&`!!(DB!!+m+!*!$cJ!5FK8!$Srq!!!ip!#3"!m!9'Y-D@*bBA*TCA-Zci! ZH'eX!!(`Le4&@&4$9dP&!3$rN!3!N!U!!*!*!CS!N!0T!*!%$`"#`G5+Fdi)FiI [%!&,i2SlF)k&dU!8b[Ak-G[IFMe+Q-f3!-Emf&(([2ab"S-QlI48kGFC2Y*dUkN @)4fE!'(FHZ)"L6'Q*GT-@hhRL*qJ*`&B9L'FN9CmIM@+X(ZL$iaHh%[#69+d-Gl !3X(8KJ&4pJl+aVH"d5UJiT@Njq414")RUCM02S`KA%"RmPJh-e4KrYIcVGfq2AZ %YET[$NdbQb%L05K1VQf(V"#&jSHM#E@5#36JlGTk(ard#)$X-,C`q'NhqAY[h5P +@K[bH5qUclX,IFc*E'RZ$r,p-X*LEXf3!-3mDi,''eK35+19ib`ll9Flk6m(D@j Kq,4(DR(9LPDR@EdD*Q`RiTY)rfpHA1$M2lZeJfp+Xb+lS@48B(#c[pS1N4eF[(G !b#Dj$-eJTcmTLGfZ6F6D5%)md`#8c$&0F%4C1hQN9a'16qe'"pH%BbGDXVrMQ8V SZQQqh+)a#%(ERNF"ffe$2(da4T4f2R$DJL@6A2d[mMH$!p68I!*48FN56fe$iN1 LM9dAa+,3Dd&#aH4FEICe%P)DBGK+`3RGp@KS!+j59LNei&P"Ii1$9JDLKLrDI4P $r*fX%k&@jY%Y)#&SPVGVk(A1LHmCHd0HjF)mbD22dDhL#FG(K2VC1p%2!)CK%GQ qPAqpJ*!!2N`Z##A8,%PNRiNe!A,U'`deF@VF#Uhl6+-V+r*pq8lLfa4k8#YaJUM P,CGhrCrQ0h*l!DR2d&hT*5Ar'#IQrclT$F3YVr&MCHkV#4J*`%+"R@$5ZLqR%HS 6-GABYqRM*mqcPGJ&cdPRcXm1[cXK+MVbX6YKj#VSefed@q'dEJQRi"T`$%,ILJf RTUfc"%HGVq$@bM`C%l4'`&C+jke!-Hm"rlb02K*Fc+G9`pU(K)G+Q%qdiQ82Y'2 5S`UU0Ybp(N-RbpH(kY'r$Kre-Dc[0lUe%S1@FXJGI-AQj"hpr53i%AaU&QMGqk@ YZ("8HaNc6,6q9m,K6'$ZbX-"9d+HJ*DY1T`0a1-K61jNViT6bbmrTN0MEG9jl&Q I)I6Gh8F&J6P4b$!4LqRIa*`@e'9U6CpEfETI)6k"F*9%d"N#QJpkMbN808V(9"8 +E!fmaeBc98i'eJI,"HEl"2haf-AV6K#PP[F-9k+iqfEY4'dalN&%299)hP'#D"C E*d6k-!G&UJHHYrr5k`m,mGK#(h$L99Y'l`@md&Kc[H$!bra(rAS5IMF6dVPSIY) rpK3,8MdDD0&Sl#Q%rDe6532!Qe+i(%VIX2HN46-d`X%a($&!VA@4r@JBBfSddVM 0DlQBTH[Feq1Af5VH!U%G4RE286%%+$5KPaB!28NUX!D5@3U-AJNGFC*,5G1TlZA C)bkHMG&1aD%0R'"X#RRCqZRGE!4CfmGq!%&1Q(XHUZVHDpeMJ-AcKheQiq%!4YE SJ!-08DYlHUJaL"Aqd8bS%N1U'jh2rrCp6rc-arP4T'GC1eT3%l!&F#(U8ZV,hXE '5i(iPi4D5dJXbSfYDPrFC2rRD(dH0R-2D1e%lSdA9eqVprE*b0-25KSSJIcB`&4 c-a`jlR+M+6(ZAH5fJULR*mM(qlLFGV,Z@+3`&QDpF5c2pT03[8e4PR55N['H6a1 Z6+hCG-$#YkJ@ETKhbPdS@f,CjpZ)Tm,Q*Q&*J[*T6C!!N!"M(8$Tk%p'TNfV02V PM@+UkfSj[P8ae%+'aN+cmX3`p4RaMCVQYAdr4@RmLC)2'C!!9U-6%8B)dJj0e8+ Q2iGfV3EUHESKaiS%)1ZF$JY&IHI25ejA[C%ZqlQ0(Y$jS9Z$NE"bBJTD'RZaP3& Q[LA#DL-'JY@QUYiKe4ic@jrXI20&5YmjBd5hR"S"CTR*6UmC)c-G)Y9,4P`-9qA %3$keNPI"R55mZ-c0cDmCUlqL`Bf)E#PQ[L`(#9aRRU'V4Kkh&IbJV,GjV$ASa'k qcB(S@l5J6D9R*4ka0%&pV#qab4iJ1FV*Bf39NC'LqmCEVCD%lCrBBD3%(S*e(!B ![cFZ@X(XG@Z83fDLE`GNr95`[i5dUh&pFVIdj!V[QhUaZr(DYR6GRim(mF(#)1" h'S6H#DV$"4Na8I"[i)cl$b@T2Qh'*b@2i#l5YqH0q#p+pXSiKCpiGS18cDdMUPi '9b"E)8JRAae&F,TBKi[L0M6CdAG[VbZ2jR8-R-!lNFJ+2KIHjTi6&j,'-Jhb&Le Q'TkS9PdVZ8EXm[[PlHD@bcZGNI'Y#[!a[mSbrY!55T!!590P"dMX@f&DEl(X%cd dDGZ8QYSS2'hr"k$8[1baLSHc%pYBlKKh1dMc`khBhQCT)[GBF#)3GUqR4P+6A3G IPXidp(0,["HT%ZikpY!2,-c!hBqUlBTV"!Gr[$U+6peYUG+LL5BH'9hPbGar$1( fZURlaP")GlG+DKBqh9N)[lmqq-+#phf(HZBZKY)8CQkYM35h[mG@hGh5p`29e)- fb+rprhb#jK)JbD$-$I6HFUfp3UQk8$lUq[5jk%EKK[3!3FmibM`N5AfGSVE4iq- eISel1HCik9U,AQ"RXe-1%R$"'PZ1D[e,&imN59F%&p%ZY[(85,eHqf#fYlblVN[ S4p#L@$qjf+4jZYAj5E@JffdJBC1[@@(Efd8UCZBRZ)Z,"bI"K3N!MF8#)-q#"AT MlqJml@dUpIRZC(hR,AiET%q*CNA`m55JE-DJT,b`TIrG1K&aN!!SYH2ZfaDH-+5 `JDF"ij!!mIGA%XRTrRUBB%ALXcpGcapNF4G@`4fcc$dlmZ2Bi&NZhb[E+1llZ&4 i#FH#RZqRN!!XmLRe2#XAlmNiDX4B9VYM%SlUQJiPNleEica"85A#4k[R)Jk"Qh3 N0(d8*h(0U1P%4MXC9rUGKLM'M,dfMQh1F*'A@iY1f$#(ACANHl&S&Mb-B0fZZk6 )(Z`C('4,V5aLj1f2,)0U6SiK$CV#BRB1$Jdp'[I"rQD2$EP*9ReD5&eKL$)XLTd MdDH`ri5B@f546!Tjq8"'fJSFK-j+0h#FeMNbURi2M$J4+h-@T&ZKBDl%+c+iXQ& (cIF-2P[-Shr'-YlM($69X'bC0P-lkbUad[([3Ql3Yb'cAaF[XNe2')!qe,SK(5M ),K,!TNBbKVriSbL2H4VD(Tjb4SSRHa5N9)9m)13jhc$K6L+PATadH#dKQ"B2@[E GKAp$6k5)@G3Y#XG6NiUbN!$A0&jJ"Fe!!8JfXrDI[%2qNZ*EfQ-ETKA6&q5P-+j d3jKcRfN5GjaC%Ad@6C&TirTr0CNEjQL#FH%&Jq8b&2CH0('4EeDLa([MPBMe95l UkR0qFGDb6I1UQX!hAPe)TiGN4b'T66k%(mG9%AiI%165(N-[&`%RV(61&IM,$DV aXk14#5hR*Gh*f`@9h#P5+c#A-*SrPfG&UF(f`!(Dp+$`d$IbP'@!L`M6U&P4C4% 0J`#kkrT,[9JSJKldJd%JbLUD8XbIX[3&%`-)301YqFT#1c0!+(8q44MC@"-AL-% DH9aBkpp$lp@,rb1Yaf6mAU+*ReY0#J!,3kZmA6`-C0ib)`rpjId#8$a#r[K$kb+ %j8i6)8NKX[GS56a9L1mFH0$`,bSNYXa0HP-9qR3j@Rp@R1(qQ!Vc0VY03b`FS9i S@((I6d-9eE1(f"DFb#$SRRM&IZhcQ`DEeRhX-VZemV"hA98T*1ND6iT0Tbl5hlS 5`+N#b15D)'@)C5AC(aT[2hF4D9Ih)h3%2*K'CHX[CAF33f#USeKC05lZP9Ei`Dm (*`0"i@2rHLHaY`B,9JUGpCm"2fkF,#V4@NfLCc0PYUK#&rBU(lCN2RITPNRqNrJ 6D'M&HfEf!HCmaql1&U)dD-Ei$p9majCmLLC52*!!k,[ZamN0(jA9kG0ZrM"d)56 Jr)MEXB+*4*[TiMije-XH@qkN4NPeALVE6JE1d0X&1R&HZ'4A3cjjX-VM3DF!h4M 3+$RScc(L4i`D9@8)&3q@h613!*(6fKa+9-(V#5qU$hT8iaSFhPfikkZSX52DT60 J&RUK'4N(C'&SXD"Q5k5V'6Fbjk*2$jrFGKR4qpcDGSCTL`Ch&aLHb+jfa$4H)f5 cA!85N!!qRHCDfp%ErEElhRDfLlJrqAS))clJcL2HFC(4Y,q6C)FYMIhH["+h0NF MSh`i2A9VBa*M5d*%Lh$F2fE2E-C8IK1rmIIl9[4dM,*GUek&pZYaFE&$qpICaJG D+&#C'4hTHL$TBqD*Zc+!lLR,&rBamV#PmJed#V0KQP%lEq2'c2'1-$FREkadHm` H$Ek'aNa2Ya#YTH9P*`,p2qf"C(KdBQ"-8VchUF*ALI,qe5S[4-L6c%e!CpE$FGP N-1SFS"*cMM4,l1IFZ+AjXq,)9jImMpIR2(5B%*3CmkE@`-`p1Xq`N!!'S(pNPJ3 R-NRl+'56HUD!R3-[V00MekFKfl,TLRQQ)mimfUcc3XJA6LPj3C@HC'4#SpL$G8k H`Zc!1PkLTL4mH"H1Z1(QNI8UE5U'!##RrDP*5qk(,#JNH4+c2dBa5S9(-b$iqdI EJl4N`CCIhlCaM@Cee8hmXX[(P)MQHq+*#+Fb(jiGGhqrKK5jdEN&4(jffZ3%aLb d1PV85XJSTpf'c"&R`4"B1KbG5A!'rmZ)ZG#jd0(dc%)U@#AD`,,K(ZfE$lVKP(Z %$-PP%Hed#N6h&!MS53%VE69-q0U08%pRrlfMYIhRKHL9$$&aTkI,$`4L2XN2l5" 4L0[-[*j"0FE%RMJ9G#D@MB-pelABSKIqhSSRpZh6L#5PNhS+qKS36Jd)URUY@4Y GE)2eL!kJH`0Z'D%RAPFZ,MZfXa`Eb$6H(#iLUrpG'JD`*q-i8$jQU[YYk@-+&c9 (2KEY#!%GkC553HL2[X![Lb+i#`IYkVY5$Jfi3QeL4)X5[f[6'c1AT49$qhrpR33 T+Ze409RcFe6`Giqqp#I*V!EUQ"505#2TR2qQ$GHTI#0T6b0l6eD64lcLRFJNL5* d0L!ThHEFSq6*[K2R(FYaSTAC+d5KcDjG(Q2!e'S,P3SiJV+9ccQHp41'$%2+h%1 qTT'3!1PP#JFr(35dA(94&HT+R22)p!LS)akA[3VF2Dai&3Jhd!QR2N$D+cF)#[# jUAbRS3h2YSc+"%i[3[+8K'b1m,mM'd[Xd"dbY,85V$ec*Ef+Fq95DKUXYXa5p$P mA9X10E(GddF+6(+jfE#jZ)Z)eiR55IG*@10E`jQhrN'mFVkDcdGZ2P6B8k6l8F" 5JZ"F%l4H6QL%"#04983U5CaNq5GaP6`)d@llp#'b*'pKd69Mcj,HLrNrXkH-M2Q #E8)3(L*Q#E2'1@XH@JPc1X3Pj`4YTfc#4BDDDq9"C%X&a+FLrQ'&H9JN3UXM4+R j0pal5dUJQ4QV&*9iT'KQqM)PhcQY5aYDd5H$QSPB%pe+-!%d6DrK4D@C&lqdQj[ J16$)P6!9IVajq0hF%5,(lDRZYZ6[(Gjf['4EVS"N@eD##Qb`rUbDU(A0DN@dLRC 8LD4)Qk*(G)3E+B*3jER8X'PSpSEhK%*Ul&iK)pLYTRA8iqE$"Z,1aDBcJG4&jCh 'dEcL,ck*2ESC+P6-Kfam6Vkhbj%#)%Z0#j6dqeb-9fTamcVZp%"QZbRLNEidGr- N'8bR%4)+QJA!Hm!0-2j,QhTr(iXdkCC)h'fAPl0VDbmb08bfdR#U69im9l'L!R2 jF2G6$(GH&Bm6"mB-VBXGl+)qFdP(Bc'8*&RmJc4V8(+B2j5&[021Vq3X*rm'P0& JcbcC5!A[90r$jrY!`%@Y6"L,qUMMR0q)T0Ep)(9Tc&X*Ua(M#KL"ar-HmYPb-dp Q%SU[kAikHRd3%'VajSL'Q4UfK@iQ@@2AlI4f%STL2$K-,McDVpNUqT&Eeb6TD+9 @2KjG6LkX&VNKr$I9GajPf2B,9XU68aEV8hUCDG(iq*e9mRh&Nj@qbT4biV2"R&Q HF@MPH%@[Jik[`[Mie9[kSCRq33'ZFE2ZKqPVH(I4+44eQ8fGP1L3!jeVMQ0hPS` &2fS53!IKUKir$PL0%6hP&iAe(eKBm3@f@lAh4pU58HkD@5,6Ca(V)fmKB(Xc3%- 5Hk'82feS@FY%F01S-F"b'+c[C6fY!h1$H1feZi2blQ)c#FFhHV*XQ3jh%APXZ+Z KM-"jLEl23EfS&ha5fV*1L%dclB@G%F+$+"d6f,8iG1'DN!!'jR+JZk$miINQ*&2 qi0Z55K)JTEc!325Y'm+%,+d6*h2%bB"3V9lDSIaH8k+3!-*YA8KRl!UMYm'9b`E iDd$ZrHT#qY[BSQeBL5be$$N418d)*1TkrbU2#3lJ"1k"S8"@Rk'rXiCXrjaK"GP jCjGRPTD[+m9fJ3+Il[&VrSUmp)LC+'S8&H*Qiq*a+IHB"ld58&r"Q%p0rNf+GIZ Fa(QeLGel1PN,*1PIU3#-V5d6!Hk%k[(2$&[42,9EG4eTZKa65@BDATXcHc`TFdE &K*CGhK#R&%S3QZZc`Q`DqB#UDEm`5-Jjeq*lb,4`[cjXr`#bc-34i-GKG1!,M@G "ijCIjEU[PZZDCL3I(C011!a`d*1$5I@Tif"&HV"M%!@$3mNYk9Cb)Cf"K@B2[ZJ DfD*&G'#$FbrbZP5ZIhU5&'bbqD"&A$%ZDdKh,C-MA519lLlpBaU+1bmCpjZp%F, iF@41LNbA!ZQSc,TSCCdb4#kAi&0El$0bKbS6DL6hHP8MfN&C"F%09BLYE86Xjlr 1h)()(ElLqfYY-i%$ia,"51ePUjCYA@Dmem`#hCd4f$GZmG`H+`SVZ5U&Q4+Klcl mILX3e9dlri9FP@qK,J-+H8Kj`'bZpf"TiT!!j[S3L$T*[)9XPJBVk3%,"+FDrcb 4'8+X`&QTk@V&JD3eI[6,13(Y!6(%I**5IQma8eG*Q5"Edbr(+NE4"1$GNclSBUq 2A%m0Y5r2&VfDEir&G99bp)YEJ[EcXkL`E+jAIKq#CAZe%AQ`2+CamcrNCBT3B0$ FU8e,*@DfM2SM8lP`%*U5#dKbj@B@faQ%F!iepKe39jP!b,j4TQpAL)+hTH*E#6Z B#SRijE,3D`YfBSdE@N`TbDR@I9IEl$!CQi12XIYTN!"GNR3a[8%JCSDEHhNj,Na i-0(L6fkcI)r+A8Y4kDX6G9MAY),HSDZS0i)d)r[hdQ-cPS+"I41UCkcffp,B0h" mc6"9h!VrIZS%jF--DfRrV6@k$!l6V$E#,Upd-3#BaA9%,R1C&8,CDB`TAe!4pCq p"$E,18&4NVU`(Xh%0C%K'`LeTm&"r(*&Z!NZa)+&E`Q0Q$B!D*`S9PUbf!+)V0d bQfN)%rmFE!$Kc6dTC5LRD8`32q%4$+Tc0E+5@RE#%U','Qe+9e()bKdLGif(B!L 6MGCVNQNYLK8'MpFQ,JjCqZ44d+iII&QkCjGkaFB)HS)h!mSJiN1&rb3MfaV+[m" 2!cKra*rJ)%bJSi!6Zjj4Z&2Vp#9daNF#ESM3Pl2VkI)&VV,J)8CZr$Kk9*ZjV8k 065$%i,Rh*rEZbV$NqjGX0Z3A*3&LLZ%AP+cSSi96hBDjJH66N6Vmp$piVR)T2%9 3G()Y+-4RTf%MZ*r)dlLZ#+0@!K6C#$PqHVTGC`ZNGZ`Tf&,bB+0Y2M`VDp3"MSa "NfaLM2+Y*M"FDIAG28DE#,AQC2SJMq%%Pi*m9EEr"),ZKP&aYK`qha2#6514NLG c3dQJf2Rp$V#5JLlPN[9HX(F)jqAM$ir++%c[10BRV9EZerZ5dj5qq6dSjT,jf+@ MVYdVPAUJ&CdAU6LT6bY4$G'`r0j&ChGRiXcLM9S-0KZJK+qecFJkNa&SrLFZG4) SjL*KT)A&&,5[AC5hl4Rc8Lie!82)p)!C,5*S*`%rr&NALLlT'GH5Sp$jbM02%)8 M[%JiYe98E#JDV"NL1#J9ND89fX@kRdd&0Qfkh#Smq9Bil06PEMeSB&T-L&1H+bF dM$VBjFLqbXJ6#eRQ!'-12MG+VIGGGlqfaG0!RrXGl,U(l8lU85m#8&a$0kASiSq +!p,YX5(&&VK+1P[m'p!FdXd0rXEPL3b5i6l+I0a&@%&eY8dX593bk%UATbUDK3A C$+'T)p%j`YpRBJMT3+AXbH@C1Ml@bXI)Q6JTK)KQ6hSe%-Ujb&`chR*3K%BVfrf Qp-,2c5F+NHqb98mRl#+VVdi4)*m@8eQV4aP1P`EpT`h'Y%a+TNUMXLYK[JR(TLc @%KrE@9r15YIM(*+UlXcG$Bk2(prQe*GHGVfUr1"qAmG"*"QKVp%!Na,'!GYSjS9 $dTl5[N##h&+ARqqQ*fFSH3'BBrZrhhqf4B4l`B(0KC%CYd(%!Ge-jPbai2H!hZm DlY$p%$ZU0@ZUP&M9T0lc0,&NN!!'YbP+XI",#QFGjmT$J&K+Q(E$C93hTf'S2D@ GKTFlTm3*""Vf29&LrXH%4,E5bKppFY$08*H5h@1#K)D#k)Y*3Ur`(fPDc$Rp*@f UIh)cQJ'3!*rM9&hV)8H"!CE'Ue#c%*Xh+iU@c9e`'TL,QEYh`!a4KQ`2@5pl3GB DY0AG95ZVJIPSVpSmd&r8kTQCddkNbcD@c@1jHDD@UJLL"Y8Kq6Imfd`%YC,1*+M eb*NVYES2&mmpq6-SQ6Mj,DfilM"2ILb5[5XN,9"QcTFPQS3ljC!!lmUCSI(#)N9 90JX#q0bhY@BbJ1RJD&mp$4A'S(DM1`bfVIeqAh`I0S"JRE*qX)e%6,GMQ#KcdAb 2AB0Jp9EUeVeEiMeqrplmfA5PP9I"AJkce""2rifmKp2E9j6hY8T2mKfii6"QE00 L6cPZD`0N,NQ9!fVYdQXb(h0qc%A2Q&46K6!jX9i,ibF`e*kY,F@[2kq9SdYr6S( FR-9ecCrP$++4+YCh,jX9IhVKQXr0CHIr11Z6N!![#'IY*j)H2,"Zm[`rk$")X4I ,*Z,0GfS-p&4F'm4ZUm"+Qp*-GS25F*-&"mjQh%I+B6KFUpa(J"$)Sq9VN!"NlZI lQEjNC`e3!5k5#!KSeRdLXcd3E5R'33iiJ1CSD(I[j,*h,5jH[Q-&"(E!,rAVJ*e Bh@I2I#[G2!9)AShiFCT9Ea2Cj0MjYVVFlHfU!#(lq!Km*QL@+CV*G2!NI[UEZF$ F0MFk1c9%!hcffQ!a8fkcE$pZ%FFPl"FjAl%X*f+8[rTQ2m%bi*qb-"[#@hd[%h2 DMELeR,UGSSQipZ@)8L`Aj+M5XmX"X2-"CpKPI1`#(EMr)e9JT`0dJ$9ET5"CJCG H!I[880lN2,qfj0fc,NH9$-&RTmhbKLla(kcAI&iflZ,9JbGNTI#VQi(f`PHE@'1 HUbAKSR!aalk9TLqcbpB-PYifI*PbHJfA%&eCU-Y$,hj*i6j,)0`4U42AU,Ajmb3 RaEDL9#S(BX3!f*U+PflTkGL95eAAEAMMD!'"56@a$c[Vp,r"'L*8acq[dV+)*Ne lrZ'[a,9fXDS8IIfa&[TfGT)HbAlINIC!*RD@)31a!hdhmpm32YU%LlbNeE59`CI VNGPPkG+*i9P8N[jp!m#K%X[kqPbSH6521k(f8PG3R`-)421,X4#8,Zj0)EB3QjB SN@K'RE1Bdl`#$&-5FKRCp@C,B+drm5c0YiL3!'am[VMC(dJj2lT(SU!P+%hLQGR -d*!!SP`XaF8,h(`QcdRfd(d0,C&IK(,JN50fR-e1Y"eTA)@"#`UqmP1pd81$X,V !2EJ,LfA`KpD!h@d95riC#[8YA5rZ5rZYLbA"GF@ZIrE5FNGE'HZFf"`I%Fri"D! [rVSFfN@1!d`D5GPm8#RjRQ!X`*Pc(SYehcjX$kqlMhj1F+@#((Uk3"5Z+ZFG,9T Kj-'11hTPaIiPKVGSb))j+[LH[0B@KNE&dAqU,+b+JZ)ddrV1PGSCN!!N`"+5m-6 'V9j%S*fRLD+hak&QiEPC"`2-ipCB8bBM@hKUXN90(S"eT!%QV[Dp(H5$BP6)Dlq +U+R*%Z0cJNJ([jIG36S9pH(-!E5c9N58P06'4,Z6,XKCM+2pfK(H@,Z2@M@`[(c Y@*3f''Q,(LNPJXGq0JCYH-'9N!$lKNE#Sc%QZEiaaH$PC&cY#H(3VIQVdGZI%qQ *RR1cE(Dp&q#BN5&I86a#0K0'$EJ&rSIIFqhJMZ2Q6Tipl2S*I!6aDkT5*a4jqB% +[Ni)h&cre6PJ119Zl4P#9ID-*DS0+`ZBX!p0PP5-LYeSkKj66"a!&6Ad#HMeYa+ EaAcG9UUTe2h%'021$&D,Nr-E2-cNMR0!EHd204j2$CVrpk-ri`lLS4BB$-"dZiT N4+DHq(c0%8#hI9ZCkj9`#4Vj86AGRcPDUIj,F9jhVdQXJ&K*33,UD'(B1'kY&LE LH[SDP[([#M'6C%S&Jmi,+Ra#S#!kTb(LaFV"&F#C-S9R+Idq21DD-,-c`8'1`ei [kG5NFHq3!-M3D5%%TUH6lLaHGG&ImS[k(,5j2BGM'MG'6T86#8YfK&E!5iS`QmY 6)Z0UR-i5,9+CNX*@G!VZXCNDM9C*#e2l`Q0LeSSdCk#8KRCL[GP%jA#DUXacQ%- @@i[i43"51ij"*LHIV3PRq2%8b-DELp3JV44B26U,YcZXM*-m3Y3Z&Fmk5cf8d4j fMbAVVE$Sf36c#6SS`f2X*8Y(cC-XPBM'-B%cThS,0rEPZB@TJmXdK!2UHBLX)*J pSMB9GS!Kd42Ydr2fTBD&'eqTQDK#Z9bl&5cbU(H6&FV2(lA#qlhR#!2m9j&Im#m 6VHCQB15bZ5#%2caj9P-8d*%5[(r9&KcI)6Er&c0ij&iE)X0J+2e,-i9HAcUD+Ja Mc41kF$'$Z[d*QC8(ZkVG-UEbPi@D"1Z4iC*VZU(-j4hBD,$@)ACJJUP-JqQThBV +[kBC%05!!F+Lek8K8RZC9E%1j@D9ZJHUG&9k+YMp4)FRN[,JAIJjd&NKrb`0Lrk Td2Ba&e6QHMJi*P&V%m8U`Lpd(9XH[jCar-"i,AQ5Z('3!-AqJpArM"M5D8ml1DT -$A4*ba6!%i!TXpAf$HM-S06p%J1R11'L$l*AC@BakUdH523LhD)fEXR5&*p[aRC F1P3,C14@'1di3A&J"3M`XN[Ld*CETle9J'l2N!!)Zm3bJNYimeEGRijJQIe1b2k L*(C-KXL[MejhBJZe#e@3!(-5SMTd-4ch"Q"1GNQCa@3i&bm94rd2Gke)LP"9e'Q U8%N3VD$Li$lMpS9Gr""!daE`%6r0f%k&"KZA38mrLI'Y'kVFE*+DjTVRR++-+C' 0409cSAmSR5P4flCP,'hPk"maSH1&+mLS*`6B*h%q@5Ea+"GadbAY0T05j`+j9Ca J%6P&8P"eQd,rIUZ$@el46[[#HF-P)@(PeaJMBP1Z'!N+dbra()Be*X98F)0c#63 NX'JPe"0R(hKM-l9GrN9LGUKcpk`fN!$54jR'lhqfRD)P"p(4-6%*#Z+091@M-IX 2ET+dU6+*j-fKA)J*Jm"`PSlT-!3dDL8UemUY'HGhJlq&#NeTXiP-YFE#Q0$H!YB YfcHI69+k(D,e'"Ka`#`$%!KiTM5Gd4RbAZXpqk&a2))jjMLGiAYI6qm8jGjV8+K DDS!eCFd3i9*4'Ubif4p3fq[X-mjp%('l`eI*P3R)hMe1N!!`&lVNUq"+XRb`9lT V$,@*3HF(RXM(jPm$(mYSPJ-(Ud2ekL"VPhHrqR51Kql$cAZ&S(PdAXNM+hqe%+8 MQ2-"0)X4%Y#i4`Q!f++5dJD'TChijNf3!-2pQr0TMq!rX8KSIP'3!",9"d&#PRN C',fbi+6pV-'9cS(ICNIf'3"`jP*q+"SQ*X#BE9R",CXT86$Ifph2NcYc%d@E'kN 4plS@ELX2P96528de)YG5C2F@!J#3!"HX-#NVGLP%RrGLe5!C-HI@'3dA-`Q'9J- UlX%-#EP0F`dmMT6HEe1P%J4jACLFTjK+&"G59rb9@l*Lfk+90a##SD-fU0VUKLf Y![eG5G3p%b8ilZ'e*81"2*'f3GH$+jR9dRYdS"@ab-4Tl9kYGSe"@RlVV-RQd%" NG,+rCjcj5m-HJYREEFZrC9'QpNprCS0'R3re8-4rLI6C-R%CDYF*3)"FI`TDchG @4kGD8IBj2f9',cbG3P8#8"pad5!D['d&mL3+N@$(ZEZ3!'"1e3N0MN+bMM#IkkI 3+2#&Qa)HKBZ4Y*Rmbf,L4ZaGUBA4Rd+"1C%+j+YLGTQ,rZ6Fe5acpI6AXa)4&$* R#`)hR[TD&Jq#,#lPDhmDdFdM%+EQF"9T&1mfL8H@c00@1ML8HGLrJaUKrXUPKdD 8QAb!qFMrL`P-DL61$AfQYCbI0i&hc!#6`%*IhbBEIlIJ1i1kJGDiN!#L&@8'@F- Rp-VXJC!!i8Xp)LArUCrCJe%@5N-3Dp(5CZ!,Y6aI*4ZK(TLkb!kXl0[3Zp!JiTZ m3eAFp8@hS1-fBeK&)!HJHr5*+CV[f*eK))F"-Zr94XQ8Hk2PMfZ`"+hGpfI#'k, qZ`FiE36P+D@UErM-J1,IFCNSpk+@9QbS+Vq'D(%mFBVd"#UhC2iKA0Qe&C)M+YC F9RM23D4VU%,PJ$cZS)8952qr6dcC+TUXf'k#!IL4$&rl"*`B0K))@3B+N!"PGaF fVPYXI"Zb!,UF@f0r&l"8!r`I+RIl1N5AX[T2*CqeJQf@b8)SUiM8"fkJQKHhm-1 PK&BDL!NNR5m'F#p8i#3-QI)lef&ePJ3(paE2jMfc3R6d9HNE@pK51ZiB(HFjE(S c))EIB1#K2,#a4,`L0SZk(lalRE2%HU+9mc9eXX&NS)lSH&`JUF`L,&Vm`$bP'QE &Speb1VKZ0hZEkJ)5@lerbrV40ijd*AdIGVC`pN-h`c`r$%T190fb5UlmT'R09a! Zcqc+BHel-YYU-#3F`DR*T[4k6LMe!%&Q8Ek0CLRfNB,I-"b0j%r,`+EhKA0Q3"k #800j[Xk0Rid%&4h5UK!KZ+Gf6QUSjKL9'*YAmHaCbq&X-T6-0Z#i%(SGr[,R"Cf @,p1p"DeV!UCqj21CmXim%[)14Zmc)L43q(!hAA!KJ-!E$X"3LeYF1NR(8(3H3DE KdMG[!4qcMCUl+6d0Jf0rD!8N+,)j#,Gi+r@E5Fi3l4eMX%r")(*5#"5&KHD(p)& 8UjXY39'UTX3PL6m'&&@P+q`jJ)K1A9R,fMAr(qYMJS86pT!!1,6EddC#Kef1mA@ iLXcUP$3Hi)%R20eYQVYlB30Z@(r0XpbJ3bR2LXIYT'2mb%K"akB$a"jL)Y*hrYI $lc(-q+p&H-1qGKXiYCAK(T9(iAG21r")BrrYNei-rf(jK-lmDY8(U$rkl,RiRQc 9%'5p%5D(3N-5diIX)rM*Hbql6%V5`r3melfP$-R$qSNJ!j)[5C3-+BlSN@D"kHM [8[K*'52%&,2STLQdacLapAVYMrRb5q3JQQRE+NPL"C0p")j[P$kMQV69#r+L"hB mQQ[B@YAPhpKdrJ"l403cpq*qbX6`@+lNY$HVe&VDAVXVbAl'*dl2!A0`eDTk"() *$2BT0eAlNeR2aJcHVNP@Q+rNEK(EiM)eHC+2Cpl&STr+h2CmB&`jSiRE%9$%)G' "fQ)K@mE5p0LlZ%Y(X25P!f2'KeEVbAjHe#BqR-+4FqM3T'-3Ha5X&"r&I[C@j92 ZjGp66cUkhi8qEJM5Z)5F!0ih32+@AqBLNiVcUb0`+YD-0#eZ+)'mG5"i-9Z!VKa [I-Jr%iPkMSpePde(0Dd5F11[a!cS2R'MmUeQpFFDU@JHpj5DBIRC0D[!1F*LjS) 8!Kh,Lk3%8`M-%djMbLjl[()dFT2dYAAp#ih,dBIe0ekYJr0"R!S93"YlR21II-q LfSCh-V!TEIDpB21ih[GidrA-H@L)HS4Hp[ISrQY2Vqfl8$J)Q('F-J9N2Zal[@a fpqiI$KkCrAK2ZA+)*a4Y*3FL4SA``qj03*CLa!X8mXVdl@G4*N1`)-TSTri9'R8 "i6JTA5G3MLqK!rM$d,P`laUF1fd@l)&"L3,IE&)DF'CKrR'U*hRQ2#*jff3GF2S b9N!`i3hl0qkaYE+q2S[%kZ1'+FTdMVArCRXb6YH+X0-pmU&fNUNE$3TT63QpVL* L%9'9,T@GaP[ALAEZ3IMMe%ck94qNY5L"TkF8dLHf)MAHm)N3bF2c828MSf#cQ%F qF4SV0VrCm@cTbH#9hFdRN!"bDThXQ@CIL(11IqL,+Cjjh-EjHAB5VHdIbGTc%GT jiTr-bN$mCc(HpR$B1i3UT1Pi9iQ6kH2RMF0rT9@&jqd@UHIP6$d4&l'-d(XKE!N P*5TfALpbJ5`jJi#8cjeF+,2"!&pL!l#Kf@)*JE2*QUmQT)IE1l&fibSi"-*p"b4 XJN9p"0"LRR-J#Xl`Qihc!LAAiP@9M+h9CTc#1e"-8i)&EFJZ'lAY+(!h3Z1(#H) Xf5)4&!Z%,Jri3$fjKf0C6@'S'j`)ZJMP0Jf23-hq432G*Zc+**5dSA0KZZC3-M! CBB+e0KJ)Ph"8Ajh0M24hqjNBNpBXhkSjRb-N"*!!ic#FpAK5-D(Ge36-ZHrVB3$ @0''Q2dUD+)f6NdIfm"CTAS*JSDYVV`K+"ZSYle8daplbH6I+iYQlfE!dr+0abmL 2KfM'-#KTZ#E)8i$'+$RS*MG-`80V2&811$"YILfTmR&9Dd'Z5h2'22V0ddk3!*+ @c8@jp`lE4c$[9Z2GPm,kGe@R3"qI6bdNiBLGV@$,'4D6MT642'-%K!5PdkS*hV3 PlNbm![qP8B9kVP[8Zl19B9k*6XCM25i5jZH+0mc2-XfZbqP'#FRjcT)[*X[4SUU a1(c+5$E`cXGe9Ba&'ik+LBi!8ake1MrCp"JFG$B"ceN!"PM6c-FA*(crGNb5jTD PjYDR(eU)V8YHa4E"Iq"6KJ(,r'5#DXNkN!!Nlm`Hq[AY3Qh,d$5-kMd)AeEjd49 (HfIK&5jC41G$CH16)S+,KHq$BbC85mXp4C)&!1()MP8&ZJUPpRSRH1m6B&aGC3@ "((EZBUG35fEXhi(1bh1Ad-hldrAR2k$Ne+$EEVC%3TVkfCdI$2R"BV($@QdY98X [5)"dNM@PQl#GY+S0rRR`UmBUA9RX-9[Eq5cLDZfe,69!)+C`3l[BX2&K+iI,(mj ie[(cHVra`4cD$FL8KSr55UFN3TBZUq@UFdVMd9B@QHLd$XJ1'[!XIcAm"NFd0fD YBLMb&'1p(Ef@)cH"6q@-H0mDTr%rR5UV%&M@0pM`J$M1!D9kR)MJ-C@E63GM["j A6*-,RP8Ak`eHei`,iBD1bcA4AEi(Nka&8aB'L@k@U3[G4he384!Ji%%bRNfj,hB AMNjC'GV&&dDFra@Xk8-("1l,)c5N4rV[44(ZIP#R%Xe!E8#01Uk6Y"fKKE82B$4 T5`DN%+NMHDH`X(#Hk5SL6DqH+HF2#4Hhm@(Cl(kV(HY'PZ+8#iahF*+#DjFd(b5 92@Mer15STaEkHpL)%65b#jRX(Sqb&bcJmA2jRZEPQHM3&NB,KY1P2pK6Zrr1KMG 05-#ZS'rmd)4d3Q-FVl!BecGKlSq12P%r"BXeTFS3RGl-ZPAMQ88h`0TC[FYX@'B %R69q&@VijqpIh&aZa+l0SYpXZjbZET03`Sfdrq5bih8L6HZlpSmi[dLkieZD+c# 5dFd5P+%@D+[HU"Jqh8mSr0[d3hP'&[8`45S)`2kE!GI!ifSr'(&I6'9CN!!$-4V pXU8X&Qc8c&eQDk"hh$eSrDA*%L69jBdcdk2rVKUP,3U)S0FNih1Xe&"#%3e8D,p i&!VU@V&3aHp,Q4(DqN'b%j,PI2keV`Ri*9HZLSaU(25KA%MKb$'2KT29T@"5XS1 8@FG239kPS*2VQi"@E#163AHAiQD)aJ$&efU[DEYVQ63+DqUeb(k'M$0I#Ek9E&` 5p%5S'QiXh*GTVX,*bpTk$XThm3b5!89lfmmQmm26N!"#H$PX`$VB4V4Q)&JZmKF h83K4j82jF@dEq+*fb'kDqE,#VTF1K0#DGk(L5fMc%F)Y%4d&i2,K(4rP`CT2a5r 03lh"DHcV&fliiFrf6ULQ`5EE,SM8C2CCdf6C['am4+i+mabGmE(*p*bTk3`"6P$ 26b+5eCKa3MFkqrr-'NN!hVrl[8he#BiA'LDfe@JA2Q*fQCAdM4NZTS!2jh0dDP2 Al#*lj-l,eHK1I&2d,8d6hmqDEGRXc)C9BIc16F*&@TAlpN+ESaKlr,L-CpD926c R(I&hI&+$B*Iapq$FpCMa-6*bmA0mfeR4aHFA$0N"h3T'J&HPChUX*(iR90(`,kY f&m*MYII"`Jq)"%%fZ!-i2p99HFTNhGVP4#2&(-B[-J)A[AP"Ef'Ne$A`d3`,3Q@ &qhTeFk3pGVII#kZqmk4bm"HB#fB4addjibT@AIU-JdpDYP"Y'NA[CCF3kJLbC3q +)i-XH*02&Sd'C$U"ac%eX8kC2ReFMc(fEpS22YhbNk$VN!"I9a*Up!E,HCNI@35 kAjSh,kEIcCihD*3Uf,-6QQC6CJADCMm'q'*$C&2%"-X`Jm`eh"1YLE,f5I@Me(1 Yh@kLBrFbQ"2P-+NqVbPVFhATP2!mm`U"2[l'AZfHNNG-IKQqTd`Iq5S3JICEZA% ,*4UkNHV)q1CF"r[rFcQGlCVFPKEHqUGap(05`VJq[5!rX43pH,"&iTkGKNm+pFG ,a*hKJMUj)EirN!!i[5bV"jr52mTbC%)5-klIaRP"LUrj1hZTlrNSIpF!m,(qk'p BMjMMNUp5F"km9!dCE6G)%V%p`4[&YcUechFZXkQVk`bQ'KB@hic%S'qr)D%2!KD +,[NHR8Vr1Z-AdSH95VGSC&NQ(*SH!,`8,rXDSr8LVF*#DpcYAb#iFR[&Xp"#5&L )@,HYQbH(Gl6hmYLik(T*5L#!Fem%&8--eK`e8YbK-06rKfTl`iN@38&VFB308bM $j@mC[UTe0XGU`%RK1PC52#Q#ImPk)CN2P-@&eUL%V(Qr,M%8#S'QQ1)NRrhb@4A K&j3X*(`,F-"'6&U,3K0*GrUADpABk8aZRP$FCIjL,VPQp*cr&i5mjp6i-dhqL[$ r!*6mp4AkXmQqPDD**Lm6i,5a)jlhU68c`X+8@YJLUZE2hP`1TL*UIr@3!-RT%hD GYT&PCPQH6+4XM,CHd!X#G'@4BEThNJddcN!qcGed&4VfqBC&I8DE9!8NIH(Ckb8 0J%LHc@6GAkQ'k5B%5JSkie*6$M9U4c-j63fM%ZVBl$MjFd35-Z3FGrcbm6hld[* #,BhpZ+i"T(N,&l'DjZ3A,Z5FY&1#hcT&#"&JBIkcp[@1m(%+KM0,Hj%4kek[HXj P`%"k%lrZ3+%15#BhBHHlNmILTYFmj6Vp3h!-jDB$CZbJLm,5jah$dG'kEbl1,I3 SaF0#CIPMkAi+KhHqGllP"[C"92iAD0()i%Udl2flV'[(M&JJe2,hYNj%92dfhkQ Tl-DBZ0[QdEZ%k@B(KmK)%ZCVQPAV2Se4qK!DR#UAZRDGelT&eTdqQh$TVHDQTqN hXZIi3&9YI@SaVU0'd9Hhbr`$VkiKcJPP&C'#UXTU`1*pHJENr!PVV4$ppY)K3LQ ,La8DHdAZ4jP5SZb*Kq48!Ef@$jI1ME)01!EBrbDl$e2ja(CSkU8SaejCNLQ8kS# BdYHKZjV"'j26Y9fRP&Uh4#54a@c"c5e$VH9JJfDG(+43jU1r!VmA'1[DL%#6I6f jH6DRHmN896"Vh(NGBLYIf5a%`eC1QGdD82Jb'*Qj+"Pk[T!!,09#e2IXR`m!'GJ 'p-!T9$rjU8)Vr&NAq14k'NGQZ+r51A3KHcY'Ic3krj%k4BM0L&T$[K6SLciGjk% 4PeI5kV3#90b9YXCfJ3kXiMYCk1lLHdY@KG9"B&hU#dha#5@4pX[H6-#0`5aS9P@ i0$q10"JERMLGRTi(h)d$+4kL6D+MQ,l(*M2M@SREF(m%lFle)+Q)4"-49[,fQ!T 4dAFh,GcUh-NKHfeX('liZTZV#L02qYlVfFRBPHM@)0,j,-DjLXp)GG4q8BJ9HkZ q5eDh&2DkeC-0'I0!JM'ic6&9VQV(M[Gf@@I#Z(ijbmC2YlPE5iq!)rHT$l@r(TG hN!$K0&q14Caha8i2MM$9*YN0mhe4jM,A[,F'Qd(krlG&NIXBdKEQbh2D`[QBHmC mh%eF`ZjhDpR0IS"M8RM8ZUi)8A!a5Fb8'YT@9[E['TR84p[*q-"q*RXF91TI`0X [*BED9R!M%TDZ9T2+@6m0D$`0kQ3$59DpI5`d&%m6KYXBUKJKS5NALkmRq#Z4QKX H8C'kJIbeTh8rS%TY@AZ`#'B#Z6-J'Hp*m91I6+P1[(V&0Um63-c3dVTJ)RpGXDq R9`hiL42(026EKk)dBCk-+p(5SC-SX,Jda5VIl`QJ*JL$G6l[%'5F0Era%!Li&TN @[#X)cl1XXQDeG+4DeJIM5hF-da-ejc1UEk1&4*!!!91jUY,p63kQTUl[P6)"em! UEaX%h+Xm43!&alEddASp,I"IGR3@Z&,BM30Vlm8N)LU4VGP&$!+Xr(eeVcDiJq1 MFEjS5mRc"C`3NHd8PeTY"G8hlBb5INFN)GG(1Y@+'IDPa0"pcAZM8bkh-&e9(f4 !$h*6aPD!RYr%PIjGScI8BY[Bk1XV-F3"Y-[43'cGrpN6bbMk*`H2@0%j&%hCL#0 EENpQ1@KH-NG"!D$ZlP4eL)X0D)#h`2d3""9+V%Xp")5)GcCTJSLkCXaZe-cBme% $%F@TL@hdGllq5aKVmA'A-T-emS(@-#kraQd2Gh&08L3cEIk'#T8ZG2@YC%hI5"Q bL5Ck4VV2!5+S$@(VHDZ#FZ-S[jSl5L-e,df-#*!!mLfKh#,hAp1V)8`3Q4,V!)N QLPf4A(l%4lZ!#fSJ8[J0"@drAHS+9PUJeTMS0jUrR,lB!"4KPJlXIKPS2"D%5HQ 5k@VHp)(I(@i$bEPG@Im*35)V-JrTR(6*&le"6'$,`reQBD!UP)lHHAmLa*@p*%H -bS3H@hrSr#c@,5-h'-9BM!"-JUq$Mqp!QK&YNV-rea$M!c86C+Ah*fXZ1Eh,2jc A(qZ-A)$#ZRl$DBF6D1L9c[Z&mZ$`dc'$&qJd9Y#Cbp#EX)ZEa0-qra6*e)1HH`0 [b!bkJHYpaPBfRdjKTJYGMcA'$!9XYk15RbS[5p5IJ&)Acmh*1H*(,ZJDIX5UIj0 Ce!Z%NeGAXAN*kM#+MeJ(ZQ3J&0Qe2*%UZ6TbYBq6ri!(Pdbq$J#!)!r0ZfHp)Q6 MU%[SMhiUP0)biBM%%LGQNA00$)CFZ)h&3#Ja,BGXFTDi*Ti`h4raT&96QS0PI(S "3#&ZQ%8SeXaLjC(JINe*U28RFpbQC["03rr+rr!ZK8p#2l8EIT&CB&iG+j@Z"K9 C#XZHaAihMEPam8acX((*LIQd%mb-r4DKG!I'0AB,%Gci#ad*k6dTaAi`r5ZSXTf U-@"mpZ1BT'@*Y8j2Y$[#`NKT2ScIpJE,kTfRZSk,@YD@6p5a9Rla$#*Vm`)Zbla %5Fq(!jq!F#45,D,[Z'QKMMS%CC&mQCET,G1fckf0e5k#l[i*kp5kh`l'U+TF*$q 3!1!pN3)lFUcYj#$Ra4hUSS*`4XmF%HFVJ54YL)Mj5G`F#l6NSJV-X"8Pl+'c(bk SPY@X&&b(JViFS,2YSqA8`JHlm`#'6!F#LcaE2pa-%"A*1)'@652m'Ma%IV5Bl+f *-bAXQB'%`FIB`9H+d0AF#GS53DrkKcej5XG[fMN,VI(iS*VrAm!mpbp[pN2ch$6 59&XFj2PE%F8f4UfK#f+AP)Q(cFXVpY,$J32NKaGTA*ULTL%p2300ZG93XX#PN!3 "!!!l!)#dSNd[Yl'dI`!!G6N!!3$F!*!$cJ!,5r8!"mFk!!"4F`#3"!m!9'Y6D'9 XE(-Zci!!!%#b68e3FN0A588"!2q3"!#3#S"`!*!'3X(8L#ff)S$m6EUH,rkT-ZK Z*0G%`0YV,P+pT-#I)P*H3NY--N(I,I(SC*Zi$a[liHG4iD!a'X*,R&ecKS8SK,i 9(qJQbK&CPI$M!C9B,f$l0M8(RKbAI(M1BMhIBUS6B9PJF8r`10BMC6XErj[-YTE Hm$fMLP++4m6Z6GN4ZQGl8+hflZl1,6D@ac@le1K3'X0XXSq(@1,cQ-)0,YiMP2J fB5A,%MaH9T!!c-D+H-8IpcmKLN++UDLQGH#*eSJc)VpEFXG-AHcZ)!h(6Zm2QQ% X+M0i&CR"NAdm&Z-rIeQ'Ih$ZQkr+6j+Qq[UH6RU4A@cQbp1426MJJS`($E"&BfJ a9Z'a,!k2dJ6VL,T*1"qeH#NE'X-hE,*02JRl80ff%l",VcEbKAKGUf&K0-L89YC !8i0'SNkZ34)J(l2'JSb#9GJK4a1bUfCB8P3#"[Mj[2YdjdFlVA$@'Ccl4+(9j@R 43QhBTAm*V2($Uq,T!DSXVclq'@E))EG&&SHQ61H)cGEC*ENl&SYqiAU!0&INZh# E-E6QJ5m*@6fLAH,AK"F#CrX*f#PPECm)b4HAIPfFG-1P1q,J98I*-BJQFC&DDei NF)&G!+p0lXhr#MSH%BBr65),"@Ik[fdL,,)jIK0VfMZY8m3I"l0aXV+CYM30Hl% hVCQA'a'JX6+G9V6eUcmj%$68FBj(k"B,R,YHXGIXKebE"LeCI%bX$UYH",'5cd# $-CH&a+i"4DU1(lf@@kMCIHHI541f3cZTC[#,lQBFT"C9GZiA!4J@F+i[I-6rm+$ m"E'6aLqF5+6F['2eeB"#(A8MY3-YKbI3hM`aLPrIJ58"'+hl"5!1TfPl@SY&&N& 6U!)@1jrELT!!lLqD+`9ACfGl8%VddBIPeESq8TQ1rJ8KI*m9#m(5mM3l)32+N!# ,IRGa,2m&L*[LcJ$EkPqqFp9e1&2jZhV3THISZ,B(1,f`8Bqd@1JIVcN$XYeRi$d hBBpK'E)hVJ$@&"1f5Rjh+bT%"")ILCT0bG*q9F3!%X-(Sli-#9m23SQYPF%YJR! 8*6PAA)9q9REY6)Ue"TT9Y8CZefNbZ0E*C@pcTrUY[l'%r#mjrp[F%)0P!f-pPp- "HMDd8fPb#4+6dZVXL!KRT%8`#kfGh5l&q8*mUQk($03TVc'CGR3PGjL@!k""F3m i!4J0Z"*rc!HLYi,X&`cRS5c[mUJaIdBQaA4,pb&c`5fFX@HQI#-CK#'T`D%9M*m bGqNrrCe`"QVrMVL4((((+iUG*8"TH,Ybjc`lBC9Icf"UT+2K4SF!ZI@4Lpl02"8 j*CS`2d!R'XN-@2U"ReEYN!!,ipjdR[)Z5YQB,c6P0Mj'N!$D&+6`a#k*pr,Z$rk U$3THpS*+2KK%LHbJe+-Er[Tb@b-V'(#r+Q$$9k[rT4a"piq@hAiZHeSP1,X8[#% ImH(iG6,Nh6KK3RYG,E(j@+Lh)*i@K0q[!ileX$5D%JiKME4AIQKDLjL#[6DX95L cUhN0heKdib4e$F(BaeaA#5%I6LDV`2rC,l(V-UC3ehQP*Sm-9DYC!SN"@l%6iai @J$kDchSK*kid$mAeD)SNjL*+b2hN[kr8%N-(2b#3!)&H%"M2iD)1Z$(6!aII[`! ,U2!(p1BLiUj6e!E0ChN2P,P51Ik5@+iRHEYL),-@Z[qK8Mqkk[f9J'R`(+$C-XY ,Xf1JEqQc(jBjdJ8bKXNTm$2G#pRAGYGSqmm(-TI-KXS&$T%ha&alm2Gi4M6MceJ 9UH[a!GrVBKk25CfGfh36aALIYb5r*djAZ)hFEfcQlrjh%Xl3YST@Y-!938'm'A) a%#mTVJllK$dc`5UIeRNb9HNF['`lBp&K*RH8$&H(&,L))r%e3*r+NHdfb%SDFqJ XIEbk%+eH5dH,IlB#D&9Q)b$Yp60Ql+825AMfU(iIPDE+'bF`"VNrBjAD!SAAMd5 N6T'dS'Hr-8'Q4cGI#`6V+aNa+(['k,L'fN2P,(fY)j'CVhAGUPlLKH3LJ3Fr+hV ILLmm'IY$'D6bKB5e4dLTrfIr6#$kf-[dB6UR&+&#Id!h"S14)i4%"&Ffh@K`IDq l'R`Dj0X@UQ38[IlM3H"-`LKHG$KlJY1fDm1F+#Uj+8`aL!#TH1P(a6m8eC6cj!J rVV)TiC6ClE1mIpf#LJY$!HL'15JbM3!1Ujkr[*YhC$V2lQ8&9*A[a"Uk&1!SpfM RH8p0ZL5Xk%8(Q3Rca(I1Ep[PjZ1`RmCN#ZYkEVJ2QMITj%!iIdda[1qYX44NR,r ,GDKSGB`jL$C[)C[@VbLU5kH2B)%b*Rli)kYplCT`"2fR5URJ0(Lj50qqJ#A`[!$ VpS(8$R*8(P)&Aa6'm1ND%1lb+NS6MAI`Bp!)beCc#b@$3h)ai`2!NQrr0JJ684$ ,)E%-X1YhRHj+U"feJ3(R!IV9,fRf1,rFA0BkKFmGSI,ABfVX'a3G0aa#`k@iVV% FpVeX5EE"X%R%5m[j61GBD!6r8b9BQM%qrP#eBNiH-SErJbT"hXqHF*E["@G2qb) qNpUij-,Z`GRdc*aShr*q6q)$iN6GTHR0hdmp0BJdp6e&[N"6!XFMk!2RHf(lXBL 3!,IS4PHIJ"RR,,M9KTrCl+h3)+-N'N+K2Jc$'5F9"*S*3#PKC)pPCMRF9D2q#2c j*EMYpKdD*mXheBh"+%D2kNq5@@JRJ"E+UT!!jq@H3b@IUZ6A'8Pqe)TB`G$r#1Y [+(VI"'#Hc[#de&[@8jf#Jiim[kUJ@[06MG'$Y*kqpm`l+GqkKV!9-6C9bjmTK-D l8G9Xf"'cJhBUIY4QhSS+c2-bP[Nd'KQF*'4DpBbVP+'4DL%arZ`lVr&+V"&b+62 -eXGF-Z5"RdD5(+cEc"1*!63,-0#P"(@XjYS3[!PU(a4%BF,qYqq0e-jqVjYlBG$ 1$S*9IeE,i(3qf#$CRiH@+B66aFpXG0QT81,'JpNdrl5KBi)lM3#BLR`!k0I*KK* jF*B&dZFZFpcCJUVS)jJ8KkRQKH8Qc"YIqk`I0J2dU%dkYNk'VZ!%"V[D5YRjI,B M)MTce@mE$*)D,TS6bJFGLpafbI(dQT'&jPq!B1"eS5#3!+CDS*'J*E04P-f'VGr 2-$V$`("b4QJaE@JLhk`kHJDq*iGX0GN*rK!&YB'@"Q(4ASH$C"'p$bGLRl2'fEf *2Kfe*ZNPE3YLdQ'Q-J(bN4@rYV,hFPEajp#qXZ*YM)*hAmZLN602VZ,cT%&9B9+ fc$pVpL8XA@5JrSDrJAZ#fQi4hGq`+-iUlMcr%4M&EiU,j-AE)F%CQ2EL@rcr%"H $jYe"'+QCq["'hfk2+31*fqNRhr,!TXjcphc)fI`qb"LaZmm(Y$f(r"4,5F2AI8L QAZmd3[p,p!$qLXH'dqK9BYNmA#`K26)`Ge,6!A+l(!K,jSk`6rp"qadJ6J`+1-b p)jkDf%MF'l"`[Tm-em+"J3%6XS2`+Z(U5TADb'Ef-9L'ZfJ(40'5Kp'a%P*89P2 $J&4eY[JL'F!l1fKkK2S2r+f,G8cPc'Rer&K[$-T6Y#PYjp2H@M)'mSCLR9LdhYZ mUXMbS8qJDYALE@m%G`IFeHcY@mD3!"CR'!!!KQ&1#NTR5-Lm+eaH5)@PT3RGrq8 S$HVkUJKpeM$Pm`%B(+%Ec*+'hC69KadJRF)I@CJY3FALBpP%KQRBeSCmPTpV#bL f6VK!M&X8"d5e1"9+Y5q3!2VZ$Acj9j4Y*)QA4Y)A4!1ijbZSaB)ZeX(d25r"JVq m6kB"5dLr&IefYQhJlXUa3f61b-S9F@6R6d(&mX@HkRiI6RbYbPj4HPUqB0&-6bL &dAbhXf-+dS(e&U9*bk-8r2C*Rc4mckKqK+#0P*+9`81hUI4`pG[-GHkVhd#9#2" +-eTS#cH[U&[FHIFFGbrYScDG9'FF)`rldV3D4bBRP,AibUXBVXcmTS,V,a*kD#- D04PI8!l(rMRaNb303&0LH-CqX5+%JNjd`piA+c3[b--AA9"BGFBpHpGK3qdGrHQ @l*!$D+U2L$m0)&CV"N1Y5qP8fHXbi#IE5I(+-G*FkNF&1149m*cd#cTlP20Hb,G ))I(j%hiT%SV`JbHFTFqd*8Br[M8A)l-rHI6RY-Ahiadc09q3!,EZp5+`HVKQd2r 3(Njmr*f+RkK%4dRh)QXYfZriXkN,)B&0mJM82Eb-jIjV4[QEPM1")Gc&3@D0i5# &SEir#)-HLpmbLBqI[Jk'$$&md4(SqiEb+9BJHpFD0@0jr@CkX@5LMD2-NF("`jK CS0mF45DSrjD-BLYq38QMiX+ZL(Y9RT!!id&%)'AlS),CX0Mrr!kPSRLA!&Er*R( ""S39XM0V*1Tr-&h%*6G&51@TG-9kP592,c[MPE8UpXjJJ*h-B$K#Mm$S2d,q+IJ #T2V2&%J9TEH8Bc3qK9&ZHH#'1lCB2Lkf6SG*&eUbXqF$SIaPa@#Ib#HPMY)6QXF `[0F[El5k&'$FdNQ($+D$CT+rFqH`[,)!R1Y$@#*Q0I6dMUlJ5-%NC!*(M#UE'MF 5G6+$4l29aG-dr,EZfNUCK8HdB"*!bYpP+*eQ3qjeUrmfD+,#c!JEYph)U`,V)$H +$I6$TbZSp!i9V''&ZL%HKT8L"a['lfUSN!18V0(1&l965!kk"mHm+9KE%!TfAV# #$,9G9[Cl4i#DU$Q0l*P+hl@L)jAheQ"Bem,B3XGZQAGA6'"U!@1%hEeZVLc)C4L "cDa11@e$(B#5bjS[lrd`-fc,I24ch3*U9re(SD'q'lCSG$Aej'Ge3b''aADjr#N 0lf+E2XD#Z@c$9rm)0Vi)P&-#rPKq3S(12P0Tq$8`$IhL6fAI[LXKi55ijb12Llq f0BXFj`Kj#c8dUE5f0R$hSjfbSPUi@6*L6NXh!-0Emj6-ZfD"UAd([!f(`TZeHM` P)JIe*%X"N!"9U*,6*j3GHA'h'"i-f9i(UCdrV(!SE0#5""Gmma2@ILhNb'bDrBq &6L8[EK-Hd'K4mTDlYeh#C2h()XXf60R-)FahVVe--XfBKB`h)dbVGfd9kQqBHqP MjSQ6KS1@XhFiA*E)-kLPEI+)-FeAq)P$,"L`BP'XhAf3!2bKe-QC$4"8)1C24R$ 5KDj0"Jl"bPGH!6$[4[AYRdbA@d0-q+A55d#J+l!@qT!!,"'Um'I%m92h6Jb%Gfk 2d()b(1c9eY#($K'@Y*(4p-C3&H#Z"*,*lLi8*J)Cf(DmP*iBS@@"#SAT*S[qY4F 3rqU$!miA2Xa*A%hYbE(U!0MZ`00`h8%GM%V5bFcSPEX"4X"bf,i1[YPkN!$`Cq" fSfH"MV"(Eqq0jYm$ApV!A(kQ6S#U5GV,NL%ff4dG-Y)*F-"Z!@iHKbXJ1d8R8k& 0ZBA6jB*5`CqFS(DCSIRVZ"MbM$RSeZ*Xf9NdKbAMHGD'leqe2iCKSl`)cf&dTj1 XAU1C`[KB,Fqfk,J"jf!G&[IM-K'*G!**9UCSm@PcpMI,Z"$"C)*hd3+lQVYE3X` ZE+MD9m8TH)'MpkJEbDX[CaK3$-EJlDQ*BU1862l0eQV"h#a2QfT#,lHC%4230MV '[!'4Z%'NHUc4eBr&F,`+$+Kq[MhESCJ+ilm$2Ui8aI!"Fk6c`)JTDb2V84*8b!l NJ%h9@(KRcp5cFU2kapcB&K2jXqik)P![I4`TiUm@UVCFm`(XP8C5l+Y&d"R4Hd% 5j6mp`p+8)J&a%lpJ2q9,fk(LfeGMSqKk[A5`0UJ6eDNm%%"UV@0Th8,Xc0qB1N2 TANE)'R`P%ar0V'SZelAe'YlKf4YpYUkHS!rei0eaPSAI*$kb#(c4iLA`U,Y%lH- @SF9@-2Q-BhLl%A"PijRjrhNZDP%``CNCjA"1rIB(rfDk3[QCDlEAa`#m'K!3Caf &iL$"*DCX%3@-kPr,ZH34,qUK6(FY#f''FaKA+2`+6d(E"F@TH(6HUAfq*@Rai)U 5[0L@C1r5ZAbLIT%8EJf+hVm@(!6%`@hJ90'e,X56S%RCbD3#dbcicV2bD-l!0ij 5BAp8hGee"Iq[V--'#!D91CVIR#&`@eNLFFTKA(`KZ4kQh&pCVkbpRP@#$j0CTa9 34E$Y3r+l`9&)GlS*,U!N&L'!9QQ05Qc(,DjHA%(LhkVrM1NR#XKH0#fGIF4akq% ipSGV(r-qM%qii#4PFI`G4m#YmRAkP05j(S2N`NApm[A5JVMGI8SX*DBKZYDk$qk (&9-rBeC-j0fXiPm'-"B%'$q"P8dGiLMRVDJjEPXS*qT4qA@+c#Q4e0UABR##AqB DAS-)%acQia!mMd2EZ*8dI`DdJ'Nd-61FAdH*!A4Hc"5-@8KV2,Z&q+3bmm8*lXi `K,1&X+kTqrK#&XJAY(X1ETQJj@33R8,'mK$U)S4e(R#Z8QV81r1LLmD`I3KQ)SG rC@ddR#+D"eR9GJL,a%6Cq4d&D1#rkRZGZ"ZRi2`clFX6F[#!%SP5C`Kb'j'Lh#% `59,Hr9lRJ13*IRZ)H%lYje6Ab&XJC)[1$A-ENraX$mV&*CBMLMbTmL"P4Vc@3cH K26TiCYebJQN(0398e*&Y"VT'#q+XAMPE3`K#abC``*+[0(9A1HFhQr,b)[1Xj-T bZh5J$,mbP[VcAljmGB3'&Z-pJ)m'RKPY$"Afj4&Z2(NHU2P[Z&NM(dA$!kC622H 3!)Zrmi6'Z64E-LTVmaS`Rk,YQmP#0d1YMBYLXmCp`B19@rG3$NhGf41#E!+e@[6 +mi[PI2b#S111VDdJB$T9ZQ*TDI&h`I`XN!$"3Ia53LmqNfId3`5eSFm0%F-`%B& BQd'Tc@IN%MkKIGb4+Kl#NT1qi-ZkCE0-c6C,MX+$fC&VVN(-%I[*9N&+*EGRX[& iBcl`*6VVp0DiZGA++rRhikUBpL#YY,rc9eREk8YR#cf,QT3KG4G+C4$aLKPRVUI i--J&98pfrhDRp5hPB@jNkj2YE8IGU,3JXdJA[aNE@D@ik+%cj&lL%qPN#&X)2UF YThGFci*Rl!MAAa$'$EPM'%*qAdGM@q&AN!#`F&pbXiT!di9SZ2UhjBJP5GNM#EP L@ATP&h%"&d31iZ(HmC+VP&&VEm1l5q[c+Aj3l(6PJ8jM16U$G"'6Q9TPcRP6c6j Ha,(r+V')cLh(AZcNAJD1P&2h&%-85Yh,@2MCSLA3J5mY*J[T1-jIc#U988KG8eA ch5G0Id#2Y0`i*S@a6Y!SJSUUT,"'VfSE,A5(i@[!JGP6%9K25!N'l$a58kr%$Nl AFFE9EGi!m6X9hT)lL(!,,3LTZR2+FImam3kd"h5&4h@2R,lcfJZ,GGaXQb$8L`Q bQEMeRFM1M[h-&L'T0X98EZ2-p6DCS$p2kd)mjQi@m$)N)m0[XRiK,&1%"L#mqlN STp#UQT6#(GXaR'FYib[S-X&NY*f(lFA*2DI3r@f6fS@iSNaaL)hpp-M$h3h+804 QMaI6@UK%%BF#*&QQMl#V`H1j[fA6aL%T(,SCkR%RQLD(kUVQ"U$L*4Lm1ERRr#V pUh[8VBAh)+T8VeKqemIL@rD+VKbIDQaGijCr'rPicCYTR[P#C0VXb-LPKUe%-DB 3[A9MC[S1-CUX+"Q[L2m[IqZ0e2i&ZEYdCBl1h@C[f*qe4I%fRG#S%8`[DIh6CF! aG`RZ8D)d%)QpE,@G*"834aTHhFH&0[N@@%FeCNlaNUA+,ERfh'@(a9[SeNB*%%' bI&0,"IZMb0""BF5%5KVre,C#G4dLdH&2mTQfm(((d)KUBEK,r'0p+8YE@&DMl-1 j6#,HH(,iP`*hEe&DVV@#jpKqpJS[6i`Y#)'6[0C+0UXT9%%5TS[4Y#h+,K1GF@m 4qhk+!EYqa3#[ZQFKqakF!ml*6m0@Ge[XMR%i0&6U85T&dlVlG5V(3r@0T@ZU1"p d$#f`ak'ERE86(@IQV&DQb6Y%FV6mD@`kZ4Y!a2"cD&PHY)!`"pD@d5"AA`'DmFZ 9%D(V19C[p4R6JjRGEQJA,j!!VRkhKQ4-ADHiAFSEqAK2V4r)I,'A"9cDRcqVMl3 T$AkLTA"5SdZX+ITL5['9#JjQi$($6K(Cpm@)EQh'j9I#h(#f*HKNAXIA0Dfq"Gi `I&13!('U`TmVq+raUpc,+,,1"SDICkKfCL0R&6Sii6EV("MLbe@#Sq5fMkRFB*Q $PBmK0&p`3D9E`3A3f$Ckl"j1386Zqe03AIMST$D'5%Q5@ZMcUYb19pTi'6IQKf, hb1a3RQ9rk(de3ZSL84C5+6@kU3mfJfTdk,NJP-cef64QLqIGNCd'BYl54h%T'c5 F-3LPEHGe4dHl8'NV#8P%Nf`AN!!T',3YAKEq9h*bRHYTl%aYC(E)-DK2)V'-J-` a9[(`bi4Mk'RDL+B1"'b0iUQ#KSpae[ARIDI@e9pQSJ5$aVcjCS#S%@bS'@EJd9d USG8+hMEQ+Gm$#5VUYIm4X0b9f-3XNJNmq%(#0B9-,0UT$L,eVpbIVFhGcZYHmb% 8@l4Y))BfR"p-HG&f&*!!IH)8FmU`bD*56C5I4mEEX$h'dZ@LLPbZR!abjrIeSJ0 -2d%N@8-jd-E3#($"HLRPScfcMX-FT%#hVK5kD813!(14eB4lpY@b5Vc%rJNX'2" 6$,V*IS`)@cBmAD$90$[#4NqVh9`IR'$1,YqlfJ'5PD1#*C3EQ[,*CcbYb0-c-35 rdbfEflj5ZR%H3bGL0m+pPpMZ(Zmi4+5YXZcUKDMGqTA*b"-64A890rGeq[ARNdU 0KiR2TZhJ9G)!CR5a`jM8CiSaKf'Ldm"Qb1*k4AFC+,8kIDAJDXC1$d@&F2P*+km G5`HfM"'jhf+$eB@G1T9+QdEFK82MEl)JL@rLNj3c"AEj(Tf)EQqqA#mhZjSpGJ8 4lUM-+cQm1+QYi-f3!$56+RaEHYiUcjKj50JNr$E$8k&q)R-H*PSN,4kB@)&2e06 3(D0`DXcc8#BP&T!!PUi!@,%DT!R`(j@%0m8cj5Zi3c*llFr[!EP'5[cD`QRPdKa -'H)`'6C1pe,haqMjZ0IMV-f4NeaKkp68e668H+h2+QCRFm6"BUY643#j(CHkmUB e,H6pV21J3Bhd&0FQEkE-1imqEY`,34"R*ChBp'LKhhJp+6Em9PZ&R3K*FLQieIB 3FjL@GA)ALEhB8U2bRXbbM,bNIU4@Q-(aR&X!(1+,kCREfClCP!HFDSAapG4i@11 a'm*#BeS@PDK#2P#3!"pHHAZPj[*Xp3K%MaV*J+&Mhr#RSP`8UF6kEYM%K#IqfPi 4('p-h)-qd,3ch'RTe[U4SZE%Qp[Zj#&Uhe(Jb0q[+`,,3U9J%H"[iai3C,`b#4b KZ(TJe*9#ApH"eXfr!+Qf568U2(%2&EJiAc*-lkE*Kk9LLK`-02Za0eSTk)a0iJI SVRC5hUaH6DafGC9fBbN!r*31b1@@9e'ARiVr8K3)pIVVI4(IURc$6+TAaGL1"U9 5Hji[q'e@[VL0FPQAMfaV2kXFUrB8Xeq1lkj+NM5L)ck1q5BfCbfpl"JV1kVK%pP FLIr8@@aLi-SXNDNITRF+eHj4#mm@1Fp#+2#%Lcp(MRM4AJ`i$lakKmcPelb[h69 6%jk%pp@R*J4pbl`'ILdb24f(E980,$-AKhfGf@ikqS1l-e&9`bE0L0HYDV0,fHD F1+M6Njh5piKk['MD0JQ2RML2"pqI[NMclqfhM6XaV-S[TR`'ijF9Vi,dZK&iR(@ ZRA*(cf&,i,!*Z*!!SKj)V"Qimhh8)kBNmCP[VQZBKk!i(!2(i[cGdRir,b[J3pV HfAFl9afj0$ar(3-Eq+8*KS)&kMX$4X-d@EPldD6"'41kQXY&'pNT&d'(eGRlZ*Q "h-!'9EXc4qi((PZ`(lpFE)L+5j2B2a&1`YqGAF4iNBK&@m&3"1)838)cPeSQF,V QH1EJY0r99QPafaF3-,#TdkAY&mHN`YHK'#P)%S@aMUqeerf#%D!Yck,h33Qea4f 8@FAbDM6M#+#1hB&kGUMk59c,33F(@(-QN8S2R2EeL*J`#49"MQiY0jdkq0CmjkV UD4DVU9,Q3)0Ee')0PUK1,rFmJB(P4*BVCFYPQiL#UP@Y$5V9d*jfS"cCA6SL)T% d43)#Z5GB([BQeFYfrQb&eGSU0kZ#GP(C*jUf+5NV2h3EQ6+M3N@+Cb0&3RhD#hF ,4e+1h-ERJA"U6A22(qR[hAZD@f&j@PRhcJemDpMHjdH"4RZ"ArY6FI9%3eQ0,c, Dq"9V!T[ar6)J8TLYc3(S3N+i1S(hb4J"di"K[idYYY-lbB13!(A9192,cVp5dhB KbFV)rP"%5R)"QmB$jVNH*,d0"+4MMQBbk)9MGr65H"V"2PfLm98FD'(#8SB8fRY VfPp&TqHN!9+QCLfVpV(8QT@5Xbk@%%&@cZ2b@,815#Q-`!lT6c13!,YQ0pMpf%Y &Ti!H2R()%AGFfp#QkF-m+6`8m1![NjBXaN10VTIdIc,&jGL$0mVFrjPRf+jT5af @cJX-Hp+@[TTc#-aRVBjVM3IkB!4)3Y6&a@4dKqb!U09k4jdM#KeXZl98")G*BAa #)FDd$EJIlI3(YZadY6$mZ(mM#!k+A2f%$Vaa$F'3!%PJ)Q0@Y"!mA![a0F)'imA U&Bp"UmliLR(AS"S#Jf#J+-rID-VUJM!AN9@DlYM&SSIT"X+ZhYjSl$b*LjSAi*P qPaVm1)$RPN6h23h[953-@YBB&fINpX"%L[%D6M)29ZV8Ab5P2XGZCTN!'$Aq1-% HfP3R*qafH')p2+r!$C6r0"(0'"5L5`XH&BJ3`pY(m*SBJAV$XfI4[)eM$$6[C#X e2T3rZU#e9A%&RmS2i*,56rG%")G6,mBC[NdUbaJccN*bLa*ZTFQjDffLF)d5eI[ "b-&e4dc)l@SQlI@aaDa"m[EeT'IXpBH@)GZmmJr*-%BVc$X8pXiIXBJL(Gp$LmN m`VZ)TGr#hPAe5[&8lh#kj5CMGXrq61"JLdM9cpAk8Af9`Ed&*f5UcT4[p(fXT%r rmZhKYF$*iZ+d)ENJ,M&lX9L,(cSf26SJ6ddqH)(N@Dpf#BSqAUpV%E&6TDMf"RV `43YS(45B41X9*6)TP"KE)M1')C5(aVAMTJkhLl'e+f2(Dcb!ic5"Yl8DHE3*XPl "m@)4cB$Hh[%4YcFH3c,aeh5Q@,F&iIp3bL,"fq&IN6)HAf1[hGC9B+48AH#FBB3 !%j6(MPcF[DXHfE-Rjir86e$l*f@&TfN%HP`J&ei(Jpp6aA*p2NVRZBD8Y5LZBa4 QNH[SD@&U*5p,Y[r&RCi8TKI(-T9FSk#L%@T6'%8Ji,&3PjFmLqe%$$$DMj+"YA% pm@9,qB9k#S[j#"UiBPD$([m+YZJT4r#4!E120eSf%USKV`er8NX8Vb#%KSjR6'b 8&RSl)*'`4L5S#IBMD-F!Sja`lIE1-0"Y9E&AHC+Q&9Q%6B3$1cG%i(Ti5Ue`d@8 )J5bUf9CE1dRIbr,@"-%[%0[JDYGrQ9dVIHRa+kBjG1Z2!i@-McS-ThJD+5-KblL #F8d-iFI#cQBp'VHb1S0NTqjpbCkF)E)q$2bM"e3-"aNqEa%9PT3844q'iRHb-R# K5,MMM[GlP`C2$TNbJY&Z*IdMk)ke'3LD(QJcF-pY0-P8-,6Ip`$*6fZ2e61%qPa cC9BUrMZ6(Z2hHpX(Aa'I0X5EQ4rea-`EarES0#SaM%,8F[jdHAKVM,$&p5YPDK5 I0)!i"B34KD`fK-b-+A8iU,UVqM&`kqL`Jl-`#&QkV41GU8#(9*!!ZTBISfm[6`E 8C-Ni)$N*D)3dN!$b-EdI'Nad`RCH&1P*M4pk'XadR9S90r+)pITh+6K'4Y6'[Fd pPlq+-5FPRIQ4Gj5-U-aXPXS-QVr-1D)pE+CAA"ZkES8H`RU$QMGVR-*4@14GjXC I"$L-"hNkeFd*q9rR3XPDch5PEp4iqX'!Xb9C$ABST8ZErihbi2"@"IAiK)f-l-m TS-UA-1'!idD!kplJ84[81rSB)j%&hJar+V1'KT[0bVlq*9MEjKlIAJ1lPlPCcDS #C'iP2CD8#G*AT*j+5",ZU`U,h%J`NN-,L9RrTe9@[B@X6(h0'TTq&Q2b4V&-fEL 3!#0PH))`S2S2B3!#AaN2cba4XkNEmf"-p%A#kjKpl*A&%Db"3a@jbNBdZUSK+dK iJA8I$*6-CEq,0d`Qm43fQAYV&6P6[YD(!*-(XmV'i%bG8riL'180M!FRPdEVQLq kMfR)5+[Y4iQ004b-2*cK$$!"%0)mV`DcC9qifqiTNB31`%&KQ`r9dpaKIFCaecH 8"1[46$2RjCA05r9"j(if(-PXj'c#4KkL)&ZeNlHRT'18bDK9$"N6-j9Ljr+U%2I 3BAfE'902T`L$`FTAI["J6G+lU)D6SE3`UIK0(jfYPamr4"R9Djj'f@hfR*!!+`M DB)!!Bcc')QEA4PeCi$9RbA#aG9VQ1qjYQ4jeN@K08r#ee%U8"'J)i))eR@3+hkB DaTFUh5!d,)$XFQ@9Nr`$-ie%Q!hE)dM@riSKNl3'QjqYY+I,l"#ZMJY9XSQfSaJ )Q9PT'(#QUP62)ejj@9efGAa%Z,U[#U@DI*iJ9GSpV)(XNEhTfbh%K4h$b348lL! c-YMe9X(BbTPGp3*V3Mk$0G)j2P&4aIU"$VSR`d%rJD[bd$e'$5$6+PJD'*F1d3T R`k$I',A8P1DCM8VrPCL#+I"@@L@4Rc6S+IIkK#8&MUr0i4%@U["ZFGc6T5N+eqY R!*RNG4BA-PYjG[F9QUr0'a`8["+Aq(`(8,`@Hlb8YI%jYC3AqBL2'(-SZ3"&3P# QjkY9afe2iVE%XpiaQYqIrjePGUNYG$&c0AS3P*!!-h9JAYmMPj[@`[$4S5'Vm1X &-[JXJ(GP0hB3lUMjX)Rc"[bQd*2'dZM#H#Y,1[3!&%F3f*R6NQ&&6YR63hmk[S9 QdGrfdbMB12'rrH1(iHCr08e@Sbi-%9[e*G[ArF1M6+5iVMm8QK"%C),DbmZDIeN %BR9,rmMb@,leJ[&&1Zk9,kld'jQPaeBej)AVR'[ArATJP2')ST8KaMX6-*pR2Ej 3P'&2C!&KkCm$R*%4!m%MpJSAiUh)2a[YmJUPIqkQPPHRBN+beZ&5QKa%FXUV&Z1 0[mjZE3-A@`$rEJ'-6dHX8+)mIlkL@Ab)F0K[6fKZMj)UXj3#JU5V@#Ph[c9V@bD EIVN*kGXT*6pLH)(12GbJ9-SJ+r2*#MG[!*D-RTC-G8LBCMpm9Y[T1!-(6d1CfVa `p4H1!YH`BYD`e4`1YhCc0jTHJVZ[plLPXp1P)*fKqYEfcZ1MM*)([V*`#eEPMSd Q9-"Aq4h!QICJdm#Y)p&p6A-MakA8(V85ERl6bSTE8@Yc'2T@rcIqij5l$'f!I0F erab"PJ0"`S,)j&TlGEPeZ+X-!(%a@0bMJ9!C,(1NQE2d[iC)JBmTQ0CbVBd+KmD X1l1(XMF'HH!4@HH82@Q8DCIEYdUNZ3JAN!"1KMlQ-kPUi@RY[pAqm9k5Tdf1[[d )A1I$R0d5MZ&cPi"Y26@prAaC%ZfQch)UVQr#@8KH$R*lCA!R@GGQG@R%k"PS3$m ,NXH92d*'bNb'b)BNkHZpTbFVh`D)@h*T(cC,DhVRqPl11E821%QRlU-ABfiVC,F -i9@3!'a#P5F#R--m4T[!SRVX-a*LfbpMePm+1IrLX+X,52rp&k!3!hD$r+ejFm2 6ELi1i2aPYfjBZ'U[V3k[2PAhZDqCh$8)de*XqS3AM51ZiVhLJQh8&i'QG5al*Y) '`G@22$08jUqVM9'pebR"j129#Q@r4MH[IV8aUkKSF8ecN5Bfl3Xa+'PNa1B3BUR lCCG""T%l+l&l"3$m`Y)H0qeFC@"JK')13`6MQVpCH04-qmJP6m5UiLfFBFCR)Gf r54@`kb#J1MmVMJ6PE!'9eQ*8+hN*,9#)&pGlAaRkN!#'0iYq$lc$Tl1Sh"Xf`M5 a0BXma$9,9ZfDBGfFqk!@)FlE"a@UBJ$(Nij'EKmMGHjP)If,0hX0-AG!3UCjMlI %3r+)Mj-lji5$LP,reRH3!-N(-CXVje1XD6B2Yj38*MdrG`C!pYTh+r*HBJB8pSM M$TH&*CUSSrXV(kfqZ"jPQ9ZN9U(9&T&b4f6N)PLh`lCEZpK*[a(FDHS9J(eElGR hLUSUHmHVf5*hrj'6j-@,@2c#jqm1TjUF0(B25BS6fkmFCF(@F!AEIcpll)Q)N!$ @CR$SF+fFZG1C"hSNi[,$,8c1c@Q'Z(iQfIp*lS&+,`I&`506$5a+[SHDP#kK4N* E2)61Z!1HBpf$kLXGeSP@1Y[#p1R8H@*q$Q5)`f%%GqrarqA$S!p52`e-`1bNl!U HkpalSUF%rq[HpeJ!Yd+cLKSkVR-Tajea%S5(I%FpYe#jQKQKRIe$)E9H1kqFMSU Z9!b!cBC2UmKa,`*[bj!!VdPNUNNmj#)&eIJXc4-K#d'6mFQfML,k%"b'$EZRH`M HrA,S94'R40m(mkkj0H&Vb6UP9h&eb'GM3!*DJeB1fambb4eHrUbMper+UqV4!Um c%30kjV#YTAUIl+rfC'096--N&U(G8SbYXhJll5jMYJ,Zl@VSPhDBIM94+GcGKGZ pKpCb+(N6-l6p$dSQm*L`BPrBaD"XHaE%QUL[1B"1SXXf4Z4iIc$34A*N'Td0A,h 9D3f6*5jM$,*Ba*Q)Nm3,(abY-pk6+"a6-1"0a&5IQrPll`XrR&iql(#P[f*P'AE Ylb'0H3cfD@Y`4TYbBlNr4CSRf&M2L'K9*XEa(8"HdPLD5l$`kFT[QS[4BGKlh"D %fZLHHQ(MZRfVBVY-R*r!k(Mk`q%4eIi,hlGRh*QmUM6hQ%qQ2Kj"*f1-K'Y!qL@ 6mBA0@[hT'$m!NK5*GdEaEFLQm[%ZJT8IDqY#qd43L)-U%JXMN!#-0"JVrq'l%p5 JeE+pN!#JTa5'eN-"GQf'!fj'+GkG#9r@Zb*&2F`bF!UUP`BTJXm,kl,H!eeY!%X !fGk#4KF$TR@S%C*E@#rBZY'+XICKV8M[3ES8eY`3@bhi2D#1pleLlIl2HCjM)04 #cKKbIQ(S`%i#TJ%86Ga$ej1T`&bkkk1j+!Gd3(LqbZXcV#QLY&Kd5dRQP8[T34# XGQR#Kl8(Pj-S4-I`&`fY!%I@rmhFBlcRp-)59V'pRY[5VEQ6U-h%IV[IK$N9(Z# dUMjEMJl'm55)'1YJFVHI5'T`Bb2CG"F9@N%dD`[B@",,[DD#b%qhmr3Hq#kL+d3 rUJ2LI!#1al'fTQi[+"Mi-jC&00I`K*R$CmNVZ,CHX8A#-fT0qL&2h2)+E#@SlQY )b%qXlKPYdMGbbV--XX8CZm$E4lj#)32ic3Ej@)mPN[)&d`Se)9VrM5&XSk[BqM8 8[,jXbVY+!jlJ+GK9'fZEBh%VKaMbfZQdUE3[JF,YpJmbF2eI-Y5FKEl"9L64YAR NLaLqHMfFGJfFpR$VUP3KajJE8SP[$5-#qNm#T8a-GXDkbN)8hFFd(dk@C"`q)J6 URS*2bQ"!N!!0@@i0,hMVDk1qX0!"IRGJ#@Z!qh&)f$lkJarIKDi3r$`ISc[Q9fQ FD"V'e816lF$2$5RX*ULe18m9CV1fHLYFL8qI+a62'V`9I@`@!p+*qkHD+MH@`p) f8p[dE%KC`!G1`hSU`klE21$VSK5Jdch4%IL1dX*#VTiq@b9HiHV`0D6UVjdNYB9 a(U%HjXY$QZf`KkG!9(`DhXrJ0XriP[hB'U"imGMHdlN%aAG%&$rq((*plP-qhc1 rMM$a*'JJdAJ+NE8#-lU&*P[d&,e%2@kNmPDh1JaqS0mI+1bN68i,CT1"8FlGLjI 14cV3F&#c),4c9lrRU68LY(0K9XlB"q0Db$4KcSF3-HmaZ(AUU@U+ar3)8a%jfB4 fB'fai("jNpB80LH[UPF6laE[MmBrqIrcV[m"cQ%DJYr5S2&aQQ1NS-IP`DXUU50 hUbTGq"@)&D&UkTQKhpR1bX`SifQLhb)&K+le1(S#!Nl"e%pK0[[[eV63BEAbU8$ X5iMH+rS4#!l0@$"PrZ*,4BEB3h$Y5j8I+,cGjY6h(d%m'IYZ,#hGMdHGhqrPejF 2[%6'q!BXrpV#@Re'KKQ%[kKN"KCI6mRS5J[TraB[f@&ca-cZ@e8IPhCMN6A1!P) [PL2aIr"dqS",P#LMkH"d0@d@MRm[YL'a%fJX+`kYk4cmXTM@QrEHlV!Qf-FHlC& bZPX+a&h1-$pSf!H0&D3AI`fE`KplUY`Th+A%ec'r),"fc[KrTe,4A%jQY&*I8'4 ppCq"l9)$qaNCG,(FHbGPEE0*i%0rSZM5Xh+S([bYAQ!IRGqk#@&Jm0N6@*1hd,- fb#CJ&NDDS30pcpN4S9lH!YH&CA'$3SEV+J9KD$6'q&[-!$d`J+VZaNA`G*0Gh6r p-Vl1da+RQi8NL&9-Tb!U#pmDH3Q$'b!ZAT0U%6A0!8r2@&d8Xa4FP0lEUED8Cd( -8[I9EFFp5)PGD6qb&+H@q#'lUTel+1!LZ8r4XKNLV"IkHG!,Aiia'2Cb'QS81kG @YT5c!TE4UARiA513!%54Y!Zp2FJU"Y5U($ZAT*Y3%36,f$Q&i#V&-XRf8p0d6Tl 'd5hE-UY)fk1A3&1DblABiVS3)I!XjV*c0mH,(PC2C43F&kAT[4LhNXYp64'JS(Z 4d!RH"h@4MihmIeU@6mUDre,AZ*5r6&qX4Z6B!cZjB"RE&lU5$&JES@[Z%,A*l6q jUXj0m$rLj$MdlJ@Q'YM)B*!!TU"ffi-aKAYP4+pa5Ai8YLVL8D)4)%lDQ%pPU9q iPdj"V1SC'*)%P-q`-c!5$b0q2FVVqGV)B"$*+'5YRM@RJ*Eaj1"qmSMZVGLJHeA L&`p(XAl&d+GqbUr'rZkR(j!!(AZ6F-C$9'Gcc&0c,ZUmAGbR5BB-*5@)CU9'8,N f#10BVjeY%(a1"-h-)Aehq2BbSPDXhq*lhjUMMf4*"PQM$h(aPT!!rb5LdrY+3q( `ppa@c(XZ&&Hak(Y&f[P@@MA"*C'2@QK%h$JDq#+M5)H[VPH0j&5UJd#3!+U9IQA %'NQA,+)Q4#`&q%L!R'C@Zq4efb[c%d6[#VIf*j!!Aa6iJfPd&1-G5YmkIVqP%`[ fhY9Z*bP+AQ"j-(6@&!Y#eIb16G$PieEacKKlNa&R8KbEbrKBprA1LFLqVl+ACZ- hm(-GBc9Rdb!5)qhZ!N'G5$ADbk0[L[r#-%VXIqLJ(0R,jAf2ep0ZFcZF+hGAl0r !2N%@NEEef-Yr@-Y%#PllBGAUjC'i[drp[aBVbPJ+TNj#-%!hT@je4@YRB2m8&2! $U+la%dKLhSk)(@bIU5l5k"C$Z(feY"#-X[K3YB#U+p"'hDkP"iBkK'38"8RGl,( r(kN"cbT"KjJN4D`a!k&PCR3)X0m4*@X3f#eB!Y-[Xpq3!+Hb3'Q2XV,bjfRdaX$ 0G*L$4P9E*iZAr@jC(8)$[4XekF'T+Kc'a8%``TE3dj!!lK-ND2V&-jF'S##PK-i lqdcM)"eXaBklQ#E*RFJKm#@NKk%6j`QlYC!!i-dbDG$-H6ENVkG0SMFH"CmGQ[a *Mjl"JqX`,5pGSDl1YFH!["CXMi)0dEc9fG3!NK0hN!#*(0m+f!)5cIP)k'BDF93 Cq'LhMFb)$B9NSjB[TUGIa)a4#icTTmN*9[K%[d+16R#iEA5@c,9KkX%YM,$2[mG $EcafZlpQ0(0C%NRNYa#F4+E1Z*XCXXaBVNBKBX'blMjrGGQhe5c)Y!A[5MH)%G- T4Q0F6RZaGe(TVN@mmcJ#fJarYAG+TpV$dq$%kR"he65&P%$ZNV,*K64jr3Q1&5p 25f"QebFrVA0eRG8r@"mm'ZEi8,85,96X(B,91Bm4J33Ae[Q%I0+pXXr8Pcqa8qV aPYMU(U"pbTJm(@BdT5ESGH5Le"rceJ'03%'acRU4VbY9Jph'3bXP4Hj,,6"flZ& Y2IFPYmqZhB5$k&ET1@0F`bN5,Hf1)LRIH(S'`(-L42G+XYlDkZAQUX)f@H05'PL h+-K*,A%$YlGac5rjXa5pje1HJiF)#KKB&m2H$(*[rqpNG0iSaV9PSS90!RjN+)J Yh&`VpTTm5-iRNp-+%UPJPk#0*IK4j3jYhjTJ*+),Qed$m9,L9pc[9X6E!)de1GI S05QVD*&*k8GjLS"+G854PmKmMhI"Mh%cPr8VqRZ1&-G8Ii*TV3XFh4DAf1UV[k8 pCf%,RcXH*6Ui`'!qX[jEpk#Pe&Aj&(!I9L%[c#5I!,$0am)Qr30eS$5Y++T@"-B %BX[0NiNHES&eB+$dK2MiS%-XPKU+K-lRPf)4p)%9c,X`(0+&cAT01+e81EB!j61 -UeT0haX6CG"`6$c5jMJbcrh#pRL0dSkL$imrF56!Mf1r%IfLZHrd[+&"r##bNT6 mCV`T"cGj3ZcFMQXVX1U%kVARHpfH"!TfN!"09c'2eD3Y5VY+)G@6##HSGKc&M9b -+MS#a3#TL9$k$QU@DBeT(+mbLV9IHBmI1F$rcH"ak#2fa0FU%ef9!mqCTRGlY0, MENfEPq)&I%(8(,2qXrrMF@Mfd[@('4f@6pCJ,j!!ATPX(dmXZ@UcCbCR8RS1c!K T)aaLR8mGb%TT5&*(V8*lNff'YUQpG$##[DlTL'eUGC8L5E(35jq[,0@KEacma%- LXRCN!M$#i+Z@*0i#D")RP"58a8q8f(*acXVUYV[+H&k1$F2X+60M"9*MrS+E,f8 E6B8lXYM4F2SJq"T6pS@$c&Y*Q4Zd(5PINN'*UiY#6A[$,6BMkhefLZpfP(e2T@6 6GXYb`3D%GhqT)i&ZTkf5PZkk'+d9@Qh3A3`CQbjITGX(T`r',4XLTAV!Q%rRL@8 *fp`%F+-!I5pQrT+$(hHT")IAE2rFS`Rk&KTIU')E9*Yj4`j0,RXKDh2iIq**RD6 +2A*j8c',ae!IIZ+$X9X36S1CSCa0&'-8&MK0kRrRN!#`hAPT4G19Y"XJ6Vf!p!T ea1dlP@h'ce2$R!rKhJirU8-l$*jm0FL,jLa24UCPbJQ"SkE$qaE2B"kaX-SF)6p (1TIL$2GXBF[V@+$8#lfB(HTHC[R(P5KqTl+dT`5Eaj&K*PCQ2ac(m#PS4G(F6#) T5GEd,dN6b-ICDGV%"[V@a'UTCi6#bc39S"`&TLq4Ecr@VYE-CZ2jDfLL5+L%83Q qR@T-r,hHF"$68he1L8'4ESEHpX3p9I0ZpV+*FqGmEML03q$I1@kY!G98A)RdM+4 SJmM%U&[C`0)Mp"qFi@*%`rhic#5)"N$#i*Z"[-SY$623MiH$"PkDm+%@4BNml1$ 3FqBHVrlBca,HrJ!6a2QbS522e&#MP*mFhM`e%5K`&N5JZ`fh"Xjj&PQqQ&NdKEI i!+%(#TBT%ZpY6p3qp699M6@+ZY*9)kJ!rCiXr0)+P"lCAG[ia5'K@kKVA&mc#iX Jk&HHR201f5c'jC(4%$33'BH'9b56%p2QFr$HkM6h%8`+3'a`[9GD2M3#Y`GQ%Mb U",$a"5G'X*@eGZPrX`J#e[Pi#aZ@e3qNkYd8BNiq$4Ace[d8ea#aL5qllXI0&XB 'kkbSa-R"f#)PNr6QI6*8l"jZUZ&kqeZ%I8CFm5Q+5f[Rr2d([++NZ@iNU#C1-ik q*-@0d-U(2ce9+8ZXmK#fafED(&b`VT54-eX%1ajjZZ2[[aa5'3C(Y$LJ3YZ&e&[ 9JS#PhPX(JSE9iJ1ICF5pI#X4`3+"fM1BD-Q4i"`MJY#@l[b0#RXZ3kpRbrIrYN( PrM8MLpmhke20T,$$3BVZrZad!e-AIFh[*![KUYU6EmdRqm&JJ(N2ZB4-"aSb[L) KE1!b!h$FDhU0R`2lf35rkb3LAaeaYFT*ba[*IfT4QBN8mJ`*-M3d"[1'!%AJh&e QVA4%%NSrrd8I#*!!CIi&k2M*A4U1A$cYZ622"rIDHYY1T&6jYchA1&b0+G@1G0% `5S#*ZD'UJ14G-$`Z[ekNC,a9dJKfNAeai)aklk49TJXH-&TDe!Z03rbCmql0D1r d1GMdSm&SF+rd3hMFUlVbji!'VKX4p%)FeEe&X4PblQ,9f,fhMa,+KYf*HK%3#4* ,@q1)MVI5,`k!Ff!#Q)mCG0Gh,TI)HhaHX-LETZ,3%[Y$"lb2$E046))j-P&f#Xe Hd[*hA3S&5@LI6ACp'kSa3c`iTqJ,4h*2,`$J0@$3%)'6[mDQT(EkEYaN0[fZBU) C&20i#-d)Aj9IrPa&"JT&M46Dha&5TM69R*hcA-Q&D2MSbMq(X!TJ93lBN!!KNDN EBb-)&DR,A'-06I`ZriNb+2E+9[b9KFc6A,iYq)Jf9r4VZ%E"#-l"lqRjU%Kl%aA 4f6Jm6)hLeBV,US)12q'Y5VXm%08NEfSmfk@JlETd35-!rR*Q&GHEJRE,[X4Z%B' jf08IrBEG&qPlLXaX[(3VY+0@dqFSZ!!m'Y-JCS9R()!b[NSc`pZ4Jp1,B#e%jXf A!EaYV'T!2eKHc0L8-j%+m!M0"%ea&Ajf0C0U*S4C[TL%L[P+TchlLm()mK(kZja 4YG11p#TC4BLX023ceKU!"KKjb,8EUA0k@4!6A1PA)VVlAbC!S4XXP0!CFaMDFbd AJi$3,#)1CZHjU0#F(4365@*VG3`4MT8*XUr0A@2Y3+VJZiD2'PVIRmcDadq-"ch c#VMN6*'4&U9h2AT8A6"#%-"(9Z@raDk%UIDE+%'FC5PGrDRH5XQHY5i`#!ZMq+Z #@pKZ(dpV@#G!*4e'62UimDhKh4Y091Y`$6KY[V(m(YmT1`aLrbYbZ9Frd`B-a)k ED*GL)r-K[5!XYk4'LT!!Ma,V%!Tm,iQPHTXS*6R&YNY5PZclbMMf+$&VN3'*N!! &QbGqS"Mi6rIDK*!!(+"e-6&mqjbRI3A(2i2SR&@EU!QZ$`)PQ4jKMGAe#,hTIAm +Y"NqX8XTHaP,S&b$cBdkY81(pqC+P8+YP43$'Xp%kfm(mpfNAa[-VX8!S#NaU`f NM3GD)$9*1K&p4F$P[UH'CmYp2&L$QaD&)p5))P9$43I[h$FR5fRVZeAe5jUVCRF lbc1UZ)$Ur*qQKdipZ9DDcUB%cPfIJbPP`b)lXP8HGC5%d4dMG*dUpN@@bMPAjIE p$dfXLVNDTD1+a&QC)fpYE)ba8'6IFGL,@2,&T5+5ppi)6!UV-##ZUbkJ&L,#rRS 55E!8a`*kCD5E,`M,`6A!PkYXKi[RRf@i[[a-34%i2I!`B5jcqUC!V!fiZMM0Y#k 0mCbM9R[f8&#EYHPS(f$iehFl-6`dipHR3EYjjlL+GkHll%(bi+80&#c8V`cbP)5 #i32rU-6p"0SY(1j6MP`D@@JbXM,0%2f`li1Qi5iDjKrr5%MpQLF!'ZZ`P-MUmU& k+H2MheZI[3&$9m%9kf3A"If9rbpklFNbG$ak4-RT+E&`G"8PS(RXRNVEp*!!MQM [`+S*P8V4kcSUel6edp"%l@3iKLi2M5B0C+JfLLj$ZPDl5"EQ+4@er-iIc2$l6(T h2hHl-qr3f5G@TXjHRfiVrZ3f)p&5TqDPKq5[V4@`&99m(0CDPQ#)4M%fD$,A((' b-R&hB$8-'YU4M[9BrcfH43G)CVCB@F$ECP2d6SKU#K&mPF`83'P$S[r(1-UX03H $@'A)c'$kCTJjFYiBYfIq&r0LhA0H)B8bpRfHZGJ5)hla(Bh6Y4!h0e-&-!qVA3E UVE"iaES!GjK)pr%Q4,@)X,IlJ+U1%dc`,bcqJDS+SJ'F4M&@'X%ZXRS,5RB"d&E U[r'3!!G'3!LhZY03d)2QN8293'e40[G('&2M$5C(MZ8RXkE[i5cP)f11VGCL"Ri )GX&69+j24A!k(AKNlHMK4i85N!$aafm[2HpYr+Q-8rMcR5T'U$#Q2e#!YFeN1kU b@*mHj6rHU4#XAF*6ZA&%rQACa(@G$T9rUm9+)0[SEZ@em$T,LE3)CTN3(-[p*E" (C(B1L"PK)*rDR[P-eI&%P96UD!,akle#fIeZ3*pL4"S(T*EM9)ZKk!3hIi@q!KB !XdM&34SfQjm'IbkSiGF21qC`b"*J@cbKXj2Q56362cj$b)SfXEc2Sd'c66mCJ*i %J`FT(i"[a+K1UeEQLJLcD2K&Q2Zr*#9G9Zma2eAdGQ8q6MXDf6mZfm6)aF*cqHp L68CV&HQh8GPeH%XID%P2YC9cRbjT*86L8bR8fFX@!rKLFQX)ljm0f"BA'bZM1!U 2V9jSZLK&Q"#NiR,mH9+-lcA!c'D-M(a)fSH(i"(f[GdA%42XN!"K"NK4e!!CJGh #NBKKV%5ccFK"6bJb%NT0LI`"(DKN'RFUEK*K0L8q50lV)YKrDKl0!bY$B9Gq1R" 1RCqaE+`0(4M2"b$Rb+56K%$JIA-c16p9q%EU$[2b-AFSLeFIRHEhYFaaYT`HjFT R"rU-k%"p1Z$%&h3F[dhN"V-c,ZNaKYY&pPhherE"MaHq50[dSc2Q,I&F9q`8'Mq !5iN[c06RAqa21KFLFQ3QcNpV+K**R$a4'NDdL)L6D!r3rpFlk)B`@V[NS2$q4$B B(ZRVSkm&a'X-T5Krk6ZaaT4r4DhILdHQ9"B2M%lp3E8cUL&X!fC`0!0kKYajL9b qCrNRMAF,6EeZQUhH&$eCCSB-qKPA%#c+%rcV#3VPUr9@Zpcrd#iNb`V-P6GR-*[ FamEhmMjNQm&`[T%q0NaAjc&bi30XRfe&*M(dm6*rU-H'hl,kFN39Bf+Vd*(3'G, !Dfq+rC!!6143X3SFEj!!M#CE!6kq)#dY!j!!eMpYC0le4j4`$cb[*Kq+JIl22(B (cDBJT9NT#c#(9bVbld6#EaM!03Jk3j@#HSK8Z'mQm`H`Y,,)`q5E1@LKVhIf@Ip 2Rq`2Yj2B)+!3Z1Ql-dA+!HFb!H(0i8RkG8@qS'R6b+"iVlh1Gb6QLZ0i"`&E`pl kk3JRF5Bcd#cY$5rq("#kM0PX1G'l-QFZQ2[Q-K`9cqeRqBNe95F3Iq"(L2e80QY 11Jmc91S00[)NqN6TdU'aUqMPaK(jqD-[U3@J"[$E3XSl"pm(+)a5R-'#S'PD95C 'C1#f'4c0HFU`4NA0Y&[R$@KF5$*@'(Bh2NkN14pJ&h!)ii&GR*E)!eKa%c0S2+T XfV["*qpJJ,i+qL4"aA04VPbHJ0cRNS%AAN8qJ-0@QcBY9B3[@Sr#b0*bRR8Bcjc pl+i%p,2YadeC!T3Nqk)@d4bU3E'8mR9HqCS!@Ke[6Y4H"`a$cJRPP8-DPi0Ib+k C*LX,N6JcPSk"QU,fA"$*,C'91qfZ@hXmBM[!Tj&kI9K2bC,DbPF3c5[RHQc'lCK '"CT3(D0pSG*Qfc8!8jB0(@$VSkQGYVd'9mB-B`IZX-AaAT28920)CpqJX&m4063 c"4%0SG3!9TeiNlS1XdTT(jY8ASLC-3f&cJJC)@Kj[,V1iJSL@m!VV[e1c+N!C2Y dT2)%+@e1'f0D,+E!AZi!MZ)MJRI4R25$'0Xh0'Ya"3)a"ce1*fTT[@HR",+Bl43 -VbeerUlN$&PRdeTSDVj,0K"PmUAa4C[NC-TNhdTeR9Kmdd1dha,HlPkSbZCC[mP el&1E0edhh)%Yd,PA!TQDkE@&TAaA&hP+mqdS5)-bdK8lHc[+h4IAS+U5q#I%A!L +0aMZK9MiKBHl)$!0)%J2Z&+GrCT3ejKKp4+bD,15QLMY6L@caf&NN!#1Ke)-HA6 -Y!B%JAc5a+4#l-!YIR*kpekT($5Y%1NS+Ipk6CK(pUa1UJpYEK0%T#$VrMb',RQ 'lXHdVV&AfaNVYLb!cCI2-59ZQdJmX,2Sfp3bU6D#a8ADU1UhX"RlI+!I-344i#l 6i$p*NK#)#XGdCM'`56VfSJj(pHQQP45p-&dU[cJS,`QH#YjBPD-A![rZRpJ3kGA VfRCGl,a%iAR!`Rj'GaNV-(Tr8DD`cfF&3q@jXI2(pU1bIij"3,AB6@LSqf2Q!Mh Bb`j!+X5jBU!8A+X312VVhHFJ1m&9@"Np-ELYBEJ)FqYAF+NGJqj@(f$G&pEdZ9' e4JTF%DRVI(X#d&8*0k[U)bVlk-FrP3-rYAfTRb0VUlRKBk*jVG#&T`FS*@2F8Z1 @F&D*HR*`H33[8+1p24@[l&(X+*T$Mhd9+[Hr1TZQ'#MN[&V6`[U"J0iE3jmUb&F kKT3JQ$1bmL9*RJ1lh2"df9b4%Gkf&3pSN9q2r0-&S&4&+3@pKKce(Yq48H#fM2R Pk0EeT4PBF)iJ8R)$beCQSK,bN!$e9-p2U9XaDRmX)q)6'ZTAXB&),KK"Gh6P1Dd HYlah0X8S(!`@jhK-MH)HRFZA#-MJQ`qKJZ+p"@[,hX1'X$(e#pd52dh#[HBTflV `jRaakZNrG'a(Z`8S3ZVJiUib!K$9"hZamb'@"fj8CX!qM#E"i0,$aM*#-IqQ-l% [#CrC'LZ41M$HHVI"YCU1ZXj`ji%mT(*8J)3fD1bJ#RP1I`HTV0Ad0D#0)$d1Pd- )'Cd5#hS1lCe0FhmY$2GD0-bK(d$Xr4f1!kBB6"2MFFIH@((5GcK5&k(6$j5CS)$ j9dlhf1R(1HK5MEBTqJ$@Z1&b1RAZJMDMP)DJ[8)Zqc0ri*384P0!3biPH,E16*D c4`U@Z&R+#p@IUC*qMAJMP*BHMLI1q'd-k94UUPFhFq4H!VR"L%e(Y8Rp#m(mPa1 00BSSL%$El)ihVZSUMVpDFIeXY,S-pd!*&UC@m(jY2%Pjir8CT*pEL)jr(ECc0ZR @(5TaSbIP9!ffdRL[!$SRI[)U&LIhL25dF-U[a#0c9@'SEY%U9FAP4&K3831Qb(T M"c0SCH+SV2'J8,EAAP011DR(ilTc%GQeHL,BcAPXmk`AdVb%Hi%ji!P[#Z-4k0N P3QlJVlk,@bm181bTJD1#&pPjK8A13cJ+qFpp&FhQJmNj42b"'pfM([9mN[VJi"B 8hY"%`8'fMT@5TUQhU-"ASjQB68@8&mQrqEJ!FG#bfF'Z*5bXP["dH!4Z+EjcN8d Mr3M6IEl"b1iHrD"'NZ&`Md,Kq*2V$MV4VfV0Z"Y%G(9cE,"ETfD9X[VQd-r&A39 3a$"1k4hr`QE,q,94qD!6340-m-"FF`D,Qj)#e1YpV4QkMNBSJ`K*ESl`mla@cTI eU04PiTPZp!(C(pr4MZVGf$l)dhmTF0GG#e&Xk6ibmIl013M-beBE[3rCC-#U3c4 m61VPaAf!VMYkA@B4T'*'#IVGcI#G(fYF4-!*IQP2PZ"QI*(V&KU2-q4)#Z6VMB* pmG`0rP,jla$mV3Dmk"+),9l*48p'FQG,RR,4SU2j0qQ3!)3+-K*-2&ZfjNHcC!J *BPCDfiY1Jj%mUPS99iNerZ*`V`FbCVpcZ!RrMVVi`hq$Z8ka`KAle%THdKp6IDK A9#Vd$efU'A86"JE[cZNj0E0M&h[KfAU"IL9H4KT6je&(bCJqIl0FEV!bJr,dM,H %RfGX#Zr)113#JrKXL$SpeCSLV,3"#T&,[k)YST'0AGJ5M"aT2l6lY"m4ece(8k% d`kiQHc#kdZ)4Y0D2#NL,kaeNj6!irPB4JS$,HaK*F3+EY2*RlDe,[A8"ek!TS`@ N1`$QPFUPXeMR#c-YX5I'H54,cciF826#mq,ErTF#!i(BN8%(H5IGdp,#R$!B`I9 [qQGkma@93+"F,CQ+d'M8q8Al11!jBRA)-9*mKkI)jiaf[kk9+9BA`J(+#(6[Ue" G'&VF`JGXc$[QX4#V"L#qaUNdr@'Zq9U+Rd-QYG'Bph`pDbG3N!!Q"[q)qiB(YkK SrHb(GeZ3!)A**`XhJD9EI["aG6Sjjb)MYIkh5kiY$$c*V!jNI6TTjbpU,iVKi"' jLM,2&ZC)!h288,bm8+T9@U2QF4'Y%ZVFDK9SGQ4T*QYUr!))18+ma-A*9d&La!2 YCl$Yc`1lZHIrCCe*@S&N-VI+kVH8V)[P4I%LM*!!`[UMCj+ZFmF"ETlX&'8LFTf 5%CH1FIV",6dKLGAdkE&X'RSPUa1h'`RP4QGNL1q!FkQqESQJk3#8d+-c1r,Rqk$ "*8BELTV4r&'C8$pA8Ac&eKeXMMIDcSK4NGQSD$kV2DQNCU%dJT9*6[K(45'ICeh 2qNcM`5	MX%S@VRTDL*e$Jim"j'GdLlJ,jb-q`$$)hh!'1[IJi"`QjR!+[N[r" e$al`Uj9CaGiDfC6$Q8)RTNjlHrbYNF%Z69$9[J*4SCI)1R,IrYB'IAp6$GBVh`J h"R*#f-+,'&LkE1P&*2-6B#Cpq+lN,FLD'hriK+rh0`9b0+jHq%!hFmlri(c"8Zf Zj)0c`TcNd&K(jb%LD6dN4`"cP8R19-[),b3Z'Z"KqGMje3*(-D+m),qLT*5mQkH B9Q+i6qDb'ZrT5IRXNZ+bRLr`6)*bh*%e(!h12M9dhI+C59%rM%cb8EbE"mENYr@ j5P'Z5MaDmFbTH!)RFKa%5FG!&B("Dk6U&DYGIcKQdFjrE#f[9`P`f0H4L4fH!qc SJ[cYp(Jd0[Rr3Z+p'DY2IPk[3bcNE,62E0E#KhlGeD+U(%"c3LJ-4)f$h)8fF+3 '@a)NLSd2@-QGQ8S0Rjp&dd4BX5mPVDdU04#,,CGfk3Um9,jb4L9)e@5dJGE5%hL #HYrM`Ic6,TTqR)q#qRdmr#b[dp2qIl[L)UB-+VS)BAX-j#AHFMG,RF`$A0aB1GI 8F5RGTUe*$8,CM3ANCqScal$-SG(),C%J!eD(d-G%8!D)FSaU(H9P(L@''TkiT2f Mc@F-SYc0"L0N)A'&-c`D5G0-Uhflp0fP&+2,Fr[2`#$9LVU6MX%+MLEr`B)Vr3` 4Q'qU"#aaC%Tk`3,VU`Xp+`Z0S2H4eI9'ch,mGm'VjUeZ$)#X@A91l[8X&jfTM-, 9,I+C2F&'B-UFK)SlYmf3!1qqS*E+[Xb"Y6&1&`I*b%4-cbl1(FTbS4)bG$-icT3 f"13N9H*GV6qKhBqL[hX'S2TQXcRL32e6TU!1*-1Jd-Rq*d2$lj!!c81p2h!p,rT 4d(YI-bKcTS+(r%0LJlQL!!iM`LL[S$DLca@ZI[#U6ChrN!#S,PJ&[pE2D0!fj%R 'aXc8aTREr6C['4J)bD6I3`$[#V9KM"U@fYfdhk!m+j)UH(0%rV1lRLAZBaEi9T6 BJ&0Nb!HdVe-CKpiD'q"LE,6E@A8!`1ZYMGEr5@kJd$#5EmJR'D-HQ`pdAYjQ&Da R,59YTZ(U5jc0VK`LSTdM`-43H3&k%&V['IV3"$R`VbC*-&-h&i%bC*S-j'kpSka QeB#HmS1FrAE!ME,2#,0J)ZVAMYQ0cHRh'pC&D0[jYk[Y+"#3!+0(YAK(jbXj#d, )ELQ03r'Lq[,*0%i`2CNqUb!%4$)I8X#qS2AAq+8liEMD-Q58I3L#XA,)90X$3Dk N5fUCk@0C`p5"-S(S+@"9Lj)H@!4YpqH8S+&[4#qh[D2aFqm8P-Il!TlhbhSFHAc Xb'%"%Ie6d1cKMe%994HjBZ`3TVh$hPCZT40T)CG0LZ%,S"AN*BPQ1M0i,Dm4imq Y95k)$1h2h3T(ff3YQ""Z"prJFbB&h5'VLADH29#@A1lbD)8R1#hS2McaAS19E$$ f65hR#f5kbijQj[9BF#-GS6)-AJ9&dqa#fTmD0S$PIQSG$1r6jFj(MfL'N4&RQ+A SM4dTJrLfrZkk0A#8f2hP6@cd##2pb@hM+Vl84+-NE2%lRmrLkU$FdQH*9C@BZfp *IQb*F1*)j,!I&$CXEf@iV4%%M6+*'cQBm6TC@SpbSLXDX9DbM(jfcq0J[lZDX34 35(G-96QDV,pm'8@9IU#NEEVB0F8GRhN59G@EhKEUY3T#"c6NE,*VqK&@N50`p%& H'[4A,b'2kFCfMLJHaYkFmfCV,G!r[f(4b*aH#m$YbbS@f@hrcLbi*6V+AR3(Pe[ X1@8k)A5a'1qkjUGHUUVq%U5hPLqBCr2LMfDaj2GaGJfjdmKJ1LH0C!9A1d''fHe B&l#T*+pdKQLIL'He0H,a+84)1mQG#ZIe'9rZU"%j'pph`A&`DrBeAD#8)LY`JG- $TTZN"%0pfJ"$XfDVk'*aA%3lZGU[Q&(X0%[E8LSPc36)@kplX[#X@LHlK@HIc4G `XL@),e%miQ6Q1RHj)kRH0l8h'$BFMV5#Bfa[Y*jajlJG`+@3"!%!!$m!%,JMfqk i)p[Z!!#[#J!")fN!N!21!!rZ[!!+VV)!!#)U!*!%$`"8De0SC@aXFbl2J#jiE@` !!(2"9%9B9%0A588"!2q3"!#3#S!!N!G#`G8Kde44CHa@Aa`3[hE5CGaS#)!896! %PqlCVCrYURDGQVlm$Ape4ScZU)EUBDP48I%b"k%HcMm09(R@U,dNJRN`a!*6VHB FVAimZmJi4B[%NaSkQ-b6Decf0dR@i",+Vi(Jd9$"f2b)6PkZ,,Za3%VYSTpE-5r K%+SDJ*EQEhflGQ4e1U2E$!CdMQaV*ml()X+3!%5,S+ISH5%Kj[L-h3P$KqV0DH3 hENeZhQqR),'HUjf*+1YkV@N)64X$50L!PJDYYUR1Sb'6Ta8@H('UUF8'11-A-,A ZNlj[A&8k`&pTiNS@YTk&SD"'11PY969@L3j)Sb!$kM8*dKTKdhaL%Hm,[Q4V-r8 h9L%rJS0m85eXHJNN'V["'I1+V,3pc!eUS!,*VbCS!j`[UXCB$%SrdRbq#,cAR2I "8-fF6S@r'k5kmBRFb!h0)G6YP&h+(4a(rFi290)Pmdjjj*PR48#E42V[-KM5k*Q 664!m-%K`d(fU''RKQ+L3!+B[i45+&Pm`b2$HjQbEZ`lCDLLr45RBdRF"bB$C1%P i@G0`00&D$ER(Xj!!$"95M5Q)[!b#FecpDpJckUqda4Y5SZ"6T*@'CkV`RYI#XdV dIlji90+SB2*EXJVYCpQ!X0UPr%!Q*-pVPl2b26%kNi%LirNF,#Pr)eA&M3UFAp% pHE93QlI9qU-#dmS)dl+3!16Y[H8Ara#,K*eM*R9@j93HLX`L&X23#SJQm*4T$H" $)AJaIMXc8C%ER[6dFa%kQ[CEL-(fRG*YH2-,pZFh#ZMHrHl6FXjKQJE*d%k0r&+ RZANm&65L`K2Hh4'92QP*@qTa@c"TKD'*cpqED*!!lJBHAr,ZN`IZBEZc0NP*DQN 52&c2VN%jG8Q9&+dI&m#mp4Ji,4Qj4f"Q#9MF2E0p5m-9Y"D#**%bGD,,,,()G0T !S$re#hi6T6Ih&G(ET"-[(")K4(J8fk'kMb[FDR@,1p'3!1rE`GV4Z"F0*cmJ2E` m5SiH%4A1JDj$Ph2h'cFq(bp)FT`EqhG8#D4q#*+%(K0#aNAIIp+CERR6M)f-mLj HYZGNreMiDK`*b&)FSk5ad)rr`2"h,X&DIT1A4J'THM+eDDGR'[SAiNZJaje'e"U NdRQHJ!0-(e0aD!5FKHZDkE($XkY@SZhVp)B'#fG"-l08VM(e)(J,4l5+8STSG-F jQ5Z#Y[YJjCCP2`KaM@!F4BU$BT%qUJYjc%4`6c6F'5**#ZA!ZQ#@3N(3[@`#h-h 2b,aPJ'Z+@%SU#r1YM4TM"U&'HIad@M-[(G'1@GAeK61[@61[lMJlLHIUZGR1hXb @`T`1$BZ5&fXbm!lD9,#1(Jedk,YZ)KPcb+(V+SqR#hpjrKq@Dh9-G-D0A$V`49* cpM"U(kMLLfB+0Va+[J(ZL5ZPm"Jrb9bfb)#+hU'mIU'lqr2N`)jYCDULMqEPTpN hdArY2"A0-lPqS"$)9"5JZQ9XL)krL,mCie@![C,V3#a%3&XQKf[%0`,AR@i!M&I K$`H4e8(&ra%mU51$j0-PS05Z)"@5@Dl3Tk-B0cJ8j`X!pD0G",8[FKXrQEp,RJ- %mX,j#ap`dXe-l2aHU-,)6a*X$Zc9KqTld,0+JX93MMC"$N10h+3JciU,eYJd%Xl 1mVhENZhr#14MN!!YIcEBKlZ*B,h$bBCR*c5*#hmlA02*0CfV)kSh3e6RbZDq-T` piQJI$rjGjU(ZII1J0%fiT582lYqUpcbqRl!HDY[%!-Xq60&89$FSAH!iK+SBdZa a*@l$@AmDY2`Ah&2)M3AGZ@5R"KA'p*YF*lYXL[S,VFH0iX9HH'#,$DLbTUr)[ie DCmFG)1-H2r1kkbi&Kim*HIU,R&-c9Lila!4h9R&15KjYqS+Pq3"rP2%1BeE(b%& UBPS&j+Q+0)&X*'3CcQ[0(QVmZXp-`mN%F#VAT1&jCM+U&@&qN!"E2c*q[Tmf`KL %IUp!cBU`-caFXUa'l$[ljSKfZ(*dqU)c(kI2hAl615BTE+k2k*60ibU)'+M+69f &-V&[L20XjQEU8B#CD"rbb!,qZm(3!LP"Yj`F@(p[B@D83R$),(e1qAMc)qHNYNH rNC@L*$Yil&6jkj`TbKkHT!&@)5Bj%L"YKU6YH1IDPTmc*E9Tk(MTkXN)*bB`h&' Be2FNXEBAkISYE`jS()RYVITkEIqL-PlJ8,EfC1DDj1D!MC8FBIX0V0EIaAq*3Z! cd"9ARf6(Mf@(2RCmSL1EMQ@UJ2Mp@B5*Rfc4&c5!1m*B5&+ZlaFR,E$#cAhc(cL G!EPa#Tam!PHL1i6(jj5KDE(V81LGNAG,-f!La"+(b%d"!B9!TmDM'mlZNZ9T"ET !!V+3!,``IMQT$'2qB+!N!Ie8-bUS@cd3YK@5Nj0c4aUe`ZrVDhkN3G89Q82lH%p M4+DE*pANYl$"MaJkV`1ZF#L,aXAlT,XDYRDeQ4fa9(,h!rHCCY(!d*NAdY*ad(* DF*`1Qd4KVk'ZLBh0A@3KIJC(+RfacV$V(VMebPZd-Tl*8!8aD6R'YQa5Te+kXG! 5'icCXarBV[Hiei"FdTjaj-HHIf(PE6U"r5V*-$,G1*`mScih$+p6dKbJmi1"l"r +9ai-58-rXJmfXHSq4Xp9b5er$5-pG0++X5T"Im0ZAcY2e"RVFL,a))4AKpcb4G2 GH2a1-q5MFh2Y!J,6C6%m0m4iZK5VUQ-(`aD42UC9U'"L+ka-aH4G-T!!2'A2KAY mQ[N`VFTif3r%bc!4#bBlMYbM"DBirraQQYm[2j%r1J#Q&m98S5BV#2kqZdZm!"a "&0%KSXHM@1DS+JilHX#Y9dj&bA'fcQL&8#U(JN$8'X")+$HI3Prb&Y692%a#bi+ *kU13!)BebTcEBZLYJQL&)TP2LHKJPM2"mCXP(#VPXMZHK)CSk9EQ0ccKDZF!Aal f[9-9%5&DM$(S99m3Gq1!5[*Bb+alQKSdqjQEdGcHjF8CBN)-!Je#fm1a%d6K,M" bqb36M#a0X&LfE-(eRmAq@CHK[FQIR4iSeSGacdMJ(k%Fqr3lQH*53ePH@q8#EAh 93B`@RqH&ipI+"%KSCEBj,Y-hSXT,Uh)#$*1QYhdD,N8Ka`23fL!HPJEYm+RRq`4 I$3&AI,PSAA-Z$pcb#m)8HN[*!3FGR%fE''HP9b%c8bC[FNa,059clANaC88[QTT 9P02F+A*pipeL,h*V3"CPr1UUkmfPMa!6TaYjEC`mHClhY*CK@Q1Eq#QE"CUp#G& XIYe2a&VM*Mjed#bMFFEd590[qj`,3UIb+d+ik(%U6'"c!E1,jKV@lACXqSQXU"U ['%,%8KqM&HkLk,Sca,1C-6cpI*m4GpU$qNa3*NQ@9raqPQK1IEAb*hlFfBZYi5) iEJUkh'p3U0CE"Ad68!X!PLkM,a!KpZ+(6JK[,Lbc6SaT1'%ZQXmH5BCDjEk0C0C &G`F69F'd8L6Bmq-e9RrfG89iXl35r@G,QiHZ&9#1*DcFBC!!%KR(Zb"r"F)N4bZ #iVV)R43'CbiK92M9lrhe'P(q+U"++iUH#H)b*SG0`0ZJ@K)FDR1,MpNb[bA$bPa )`jRX*hm46ppU(k28YB[K,J$2Ue3(5N(!dZFe6reZ,eRYcE1j*`Qrr#2%d(MRH3d p5lh!T"j5$CMZSYF3AhLBjBHY'LepUJE3iPfjFa@@%%Ia+Hl-X+5`CEifNr(DQ+G RYCl!4J*q*!*Qq(5lGPhA)(p,A"@IBPph,+9reP-%kFQVrSaEbEd-6drj(e1PK0" Hb"fMQFXNqmBpiF%*JY[2lAr+lpUqC3XVrl!$CdQV)F5#B6)peQ4mcM#jF`3)a"5 $G5KLDkC)mGL*+f$0"FTcV1hKh5dP'BL4hV6111[3!Rek%D[-[N'1@QeH[-,`lT% JkF!q68L2lTMENaY`L,UUerdmYUNKrBqXHUcIEB%EY#MJ-KGdi)aTLKQdZ8RJTHp Y"IPF"p,Ji6N4RKeME"j%YPCp"GD%N4$"kdRdk%iKJEQEJJa),AeN92*-GjJS%&' XP2%F%@hEBi00DBfD6(I6+hqY0JqZF-rjP(rN8BIQ'k-chD-M@Xc%8Fk%"32&Ul& 9%CDTmSS&1Jjl@0*P48Tq(k5j,*3*r)&e23jU&L,PXEkZ#IMYjHB5aVc$"cF)V+F QXmQifc+XEUiDMD0beL$DL!kh-5lM&b*CCXbFDC8!RYM"Y`"#*d*Qjd@['mKfNSj '2N0N9!TNF`e8VAJZQQ,,Z(rN!l`$hA!0*)GhZpS1G&dBak5#j-"8CA&@j'GHq5j Z-f$jcZKmVq`jPK$r4kiZe%-6[Me5*S,bJVieUUHID*jr60A+ia,!2")FM2E'1mI $mK*C1*rCZ,AK-"lpAQ+UFaU$rQ8mk"(,aCB$3*&#*Q3&F1*)cLL[AFj'4[#lRpa @hba3GCl1ic+0RUSKb+9Ge2P13QTEeE)f![3[lR6e%RqlIL$YY58*FIH!TX3MZ%+ ZT8E*YPB'ISj5Z6,I",eFi"!mZ)dkL,(@a2'8-qXNh!R'Rbd&@6U1VAZNZP8#L0% IDkBXf2Q09dScFadjZ4&ic!4S"h'Q6$Yqr4Y'iT!!V[`VaT%1P3bCc#8B&AhCAH` #ZIMZZ)C8N6*GL8B-ISYI9eM*eq,S)26SIA@9N!$rQiZ5%kfi2'dqcP,NKH!)$P2 ifcl%FEh4+RbaB!"Fr8hVr,edRKEhN4#ipAaRD9Eqk099#!iYY*!!'d!'IfBhG`X QrVr5)1lkHEq#)NbfC432Hf*3U,"@8&YrrpK(jUdZ!hh'5`q"`p@T`[5qF9!6&Hp p*D-I((jF,A8I8C,fi%ZR*%k5CQB&DQe[blZ'RI1[IlNpUlmcGl8j(q0m&4PVK"e NVdpaC00I%AN0q'Z"cY5`jPTY("#R+k42#khi5(maU"U,19r"1`hcf"9YCT*L,Y* kkpdN6EHTKC9,fZ$FU"BhC$DYIQ#3!,qPIYh1)c3JJmrPHUEL'1)#U9HdMKP(e)T Pfa!rlr*C1HfQZJia"pBdDL*Z%@00Xc2E6@5f55Yl0lfaR1'fU$hpZ2Vkh&Kk(Fh mqP1)2Bf'Qh"8a0QE0pQlqDlme%3FHA2F`UTkjmd52&10JC!!(hhV)aSUIE`kS'` DjA'Ca0`(UDqJ4%lm9E&4j@*4#*rLM"E24A+3!1X'qNpebXVj9K'EqQDXcY%rm0B 4KKmHrb@G1))-6Vm#jle"EK#EHHmX2LHc2mKNF21mXYHfDBL3!-Bc$,SHf[A1pNr FRF0')`U94#*(rV8'T*m8CNSj3+a$JZ"%b)#($2T!MhKIDSAY#aJ3`3idqkN*Y&* FXT!!qH(Xj8SKarTpe*iHcApZ#6ILPE@NMmfhFB&liCcjEdI0iNL&0YBC2`MH,Rj bAkAKbpL,MR+i+chEhDBiT86Ue-D,Ce8iX$bNBB4%4dbY8l[FqdVacTjT13iNADj Z"(1X+L"FLR-%FdSi2r)YFmGb'PbcSLd82f`!K38A4MXH@P9XrZ6CqQ,FUJJr&#Y [1I,jeb"IKf33Q$[R99ChQ5%YS`)NN!!dcKfPe,`bP*A35AhZj&h5QVPP2p0F'0r AQEXCPHhqaI9FP9*GC)k)$qk-+Pi!HT6[hh(0hqFp2IIjpePJ!llX,@UV)&Qk`9) cj8M0rpJN!XElGm8#5PBmr&`MSaRj*0BHZ9F$4lVJhaKr$,9bH6)fNSTQl0cqh&V -U,c"FE2f"%Gj)kli+fcDP2*aX*!!@5X5NkeGi@)'P`,S32Add9PMk&fc'Ihm5Ua a(+[f[ZF)A&Tp1XSq#B58h"KYk$frZDc,BK@CG[eQ@Z5P`fYJ*aak+Pd&Z8jl8)6 cJQh3blK(9lkD[f(CaXZk&M$CF@8!-T3)AT)-59#5D6kVIL2Ta92+'d3-EE'FQDp Z8[GjY"XZeT-"i!*(DEHe[MC8-6&[VPb(Ifr2ZVd(6L#86p$HV1[21fLfRUjd9bC 'YPpY!0CmpD[8IqVMJp(hdQMbH[i)lBV[pGdMcL6(0"`6Deee(eQN2CYha)IIe4m B*4p6`K'(CDp3*N05&LMDA+llPdD$RSeP)c[QGPQbPXP9"0Jbb8p*Zh8PI%jFI!( P'0[k'X`VBXjB9@FMSRZcH8DjqUAR@R504f+h#l&BbP+qU'kNUJXA6#mN8j3j-5U +ILIBRfI'6lQ@XA2qrl%0,&9q3`lVNY+6[k3eEJ)5k5pP60mqjXXM`a3"R`@B5,( h22FUV'%*-6%jdGGdM"em&hp6XU9d3Qj2jUZr8)[fP*+Hc%G[PCUPdVhaY"Vq*Z6 )D!-V2TpQQbfa*E%Fr'6E"%NNYf$dM*5RXXSVUiI5AM2Hk3JQG'j1ea1LGf+l(L2 FhK!Q5XbTmmq"[JT#'3#q92*VdmCAr$#RP*!!ZQA4F9AD4cl@P4BNNMcarCJ@1G` 2a6N4L2"Hd(#$+L@*2&0Q1BDTlEVF9@mFQ@)V*0V8R@4TJp+,RYh[I)YZd3'N938 i&ibBD-J&6!%T'',Qh`#YE8LMrHIE8&2-HrqIlQFBTNK9im30#r0NEbYTl&S!DBk fbZR1,epCDGTPX9lG,!%mdGrIR)`cRR$11m&M0KrF2X%6G-j*cC%0'Y4(hA"Q+%l q`@2YF`S-8k"aX,He-Vjj(mSmAY3D*3PE,F4J`hA8LQ%CF"l$Ldf5K'(8E-Xh[@i qBVZ@a[R%q5&!"lNK"GCXRhifED+5486@E%XHAiiQLScLh*UF$6SJHTM!)V&+BPG aNM#@S6DD&hii10c9CZSY'+eTp`0IP5NGlQU#Q&2jp*1V`aQ1j14F3Yarc%4q"9Z hkRI(U1DVFfqf6MRm'cmk!`KZj@-0aPTr48)%KBel8fac-h5[kmU5QYE[le$C-`j 8&4JAaG33j`-,(29TPVjGY&$aa-(cT8@qQMrAfQ1'Ni`SrQFU4l0F8LR$HD4BQXA VCSPFr0'J*9P')e!'!d,CB18RULLc'kclZb)aGM$GkCDp2iF9-0*Cp3LDDLUXGkX '"MkaXr(jrFMb2rq&*$UM+mbX*"3!U3NS(YaT%,V(SdL8CT[5aDHh1N`YFp4,`N5 c,J$V1iTLj-Y%N!"26qGI@4!c[,Tk9(fkK@bI6r6I50j2eYQHLH43TjTe0h3)IB- QkRPG9@RrXH#lhMEcGpKk(D&%#[bTQHEUAi(E3V1e*L8bR94KNF%EGa%Z@KU0!%K +9M[Q@0UrZc0EdVfLG4XEjc6jbBYeU8!8Bb$JDpCCjHNAIh1Bhm%UKm!D*fG+IX[ *Xfr)2YC,ji5IVb6h2VdBj,rX8qQYPIRTCmbfd[822j%5++P*'6+dj9a*2QSrP-6 im#IkcDAa$4F89`PkJbhTYpcH[pYNLR'0KYCC*HmMZGXS3'aI#(+*(@QFe&0Z&,k i2PrfJmFDJjf3!,mS03($9d5f6ciFiSfZ(%FT61*Sj'e3YVUeT`,&(b&S$2'-eXU )[ra5LVk"ZX!kS9jh'd*GhNTcS+C4*U"H+h5&p[5fe4FaMiq*Crf)IIim&FddV2Y KG''l#2EY-kH@@PMD0`CXY5N8DqE$Y(`U5a[@i*IBlbK%HCC"(k&&eF*A3j8Zr6E `5J$9b,Q8EaAi-NHFNBDCJN)PLak-e5q2Y&b2hXK(33cSaLDh*d-UX3UN*a`GhBf P4@S'6(LM[Da1d#DlPA4[XeeeAXC[F2U0%ZK-k@RSQ99AI*a15!BdU2"'Vp-HhLX Qi6q8dG`#1DP,q22L[69)EiU%qG3XYaR2!R'XZNEi+@XC80b!`fGU6@%R+*q40N" hFUqG`-)*Hjr!6AFTK81*pcTZV3HQM3e@jB2dmT)kM%Upk#UhH2beN!$UA+E[j#P E$28aaJ+hKM32'q1LF4AaGa@"(elE%2#VP!!0i[!(U`f&TLcLhAZ#D6bYUHiL%Qq B9)NiHN"5)QDB*$!F$L"TGaTpAlUS!%-VdYKT5j[Vp'd[r320IdmbK*GHG,@BKqf L4@iqQh68!JHMkQ33DaT&Q&T9[N*-F8ICh*NbKp#CH%3N!G`C$*aKlUQ&QUm8I!V #F5BKilfiR$LD,C!!pBhI6R&#B9$KIb6D"dk2hDi4E",EqGBKdFfYJ@PF,r'XALT @A@V*G$kpLL1B-$0Lfd-QXV0dlF#AcdC1`lPfC4lDTjiS%h$dp0ejYf6iX[3mdCc dPEIpV[(@UYJUM'jGr#Z*"PE-4bXS&a2m+M*#10B2'CH0[0`30l5,cGqR"29Ec6V lj8$JMGd(ED!DmSAAFK&,K`@FVH9e"-f)&ATrD5FX1ZYLd#BU9,iImU-Kdm+Rl+` [46Tp,+P%TPIUeTF-rhH$U%VXqTEB2fSbAAmiA%#&THG$MF$Q9U`cFmAi9Nb3!,K 5la"#K@T'NC'&lXRHkL,i)CEI1qT4-G6KUa,HG#8q$KR&Mj&,k$`j'SUbXeAYL"a PhMKlNmkMHmT+qhpG$kV`HD2`%HA(1@#P4Vm@5HZ(#ccdXpNRm(a69-h09RZfNA2 Y4"Caad$*qYah8Kr%U'iA&fcE+T0YUSr$LS4DQdD!DUEDml6Ta)FGlG6ep[lX2ql i4b9h5j@f)1GYShX"Vm+RKAjG,ck)rMVc"r&*'d@a44K&fY@$XLCG+YpX)E5p"!Q (`AH+GkR5*+9'rTMFqqh!hQ8DZrZK,Yh*!CqekSSp&+TPkU)J)ZCAkDa"C-$H8rP ,QC6I%FrQ8kIpJ+*JE1#mC6cp)CG)`#bD2J9,+[[$T"F$A**IHaZX)RS[(BqSq$p TXbrJbQ)bRlT*Fi'AC%4q()Q&VC[Kp28Yr4,&$2I5$K!R"3H)(*6HNFaH@jLGMG[ $U0YI'r@G$2Er('1eYh3rqm1edpUQ0PBEIIMa"bkrQ%F9,G3&djFU-q4hAq2CMKP jqbFJJ*CD4*Lci)`c4+NaJrcQPmih1*jpT!A2"(pljHP0BdYImr+Z'(m,-&IcDIN $G"(6BI#YRM3mR(i#LRT)BrMEpHD#rFD8621QQ6ZRI8e*qfH"NQmGXZ"m,@h`9G8 k3LN@LSED*%$,HP-`5@-e!lk%$be"C4c+@U&SLrRM!-$19U'k1#LG!JIhq-Km(6J 0md(B8DD[B!-l&E09b208H,ldK4@A"qZPapHjIHjHDLkErV6qL8#DjfDJ(#[#Ed( 34N)%"qT6GcE1HMYIl5Cf1K*m3"lp'BK&2eYI%"4eHelV!Nc2MUKLk9'80%@l3'e k"ihFR4Q+AGfd`cDG[4cr)"$6NdAQl*!!T#Rm@EMdiF0FRlecpjE2S[@DdQ)Uf0L aS"l&"N@halU`FIZ91HH'1hS#PEf,!62@I%GCB[&d`NqJm-9+GbZX($'M(,dVDXP A(Y*h`S)E,lXC"Q(Xl5#''0FQ3l9(-k5jRmbp0Kc2#44p'N3Yfp#GZ(K2Q-B90Id N+$Y'-0"[GK-(F6k!q5XjjRN%kGQ-@0MkMD,F`6-#8DMH1Ji9jJH0-(3QIQ*QZqc P",2BfT3)#ifq+k#Y1T2qTlI0il)eSh@rjHHp%&DX,3eU[+&)3AFDCSN+6G5YHX( CR6%PM*%rH4Qa52(cR5*MSN'8c[,(P!YM"2-6IE%d!HA,PA)IqMQL@'%Vl8)r0(- aV1iaJb0YK[&Cdj!!--U&I&F!fN(hr5eB8TC-8U`BAq9X1IPb'pQHHNql6`PGPJp ieR'$)GKZA#Te,M%l6mHek%cr,JL)iU5rHMb-[qiPG*1AHk6Qb&)Zl%6AJ,TpPKH Bb$cbc'-BN!"@YR%&m1'`c0BiFp$UlB[rZH(mT12YjN&X&KeCh*1(-6il8I*CCMh @U1MaSdJ!fF`XT)"hZ-+M"M0EGA[$3apMDkr#TQRVCraS$bcP9AI'V8$*"bC%0Q3 VJ6+@#2IT0NlY""hd1$HK0Qa)$Y5Q4,2MSM(5C-TH!@Sk$lc(Saf5$U4`5C@-fdd "+aI3(f,d9P$jdD[5`cSU@5ZMXmIeYL!G-Lp&Vj,Bq-SBRI0STZ4q+-%QeLrVe4* A+hSajjaRHp3i''RLf035d(qQB9A2G*M5%m'IM%f+qGEZX5IPlALdY2@Lf&,EhrE FVZLLS+Rf-"4#e+-kZa"l8!D0h'lcc5B$h)LTFVJ2[#0@&20JN5k*aiXINc0k$GM &YR2amQ,)r,318km!P!F+B6Fm&UkqL$)q[pBXm#0PG-qC51$ZfqVE+fECrELQ8V! Ca&`(UD[8b'cAA6!PlP19e(8%Ep1BkEdhi$033JQTMXKHlL9k`l3B0p+KPrpiNC- )PjL-N@bh0')5GG+$Z4#[SDZ[#EZ$hfR#)KZ!f$JJ%D"HrUPSXZdfh+65a3CCH`r )4Zj(p3F66bf-8CA+dX52qQ5#MFYRY[%[HZVBQ6a[51eGPia,1eRVqElB2$S0CXD 6VHNZHcie#@UV5V4jSq3q"kS@4$5`S"mP(M1Rbq&+HE8k"8L"AIYB`8K2LU`Cl1' 8j-YhGa1*19h0H3a+p"BIml[Cq#"F"UPfSGQIN6JTiYVYRZ`@VkN"S$4CcdhA(RP i#3bk2*J4QG6iM5@VZSBY5Me9aC-)pQCLeZ2&Q9,0Rb1GrLj3&'DV%!5*6hC!+Y& %rGS[e2+"6-SSk-Z92#APC18A[E"bqr)phe!R@VPU[XppDmLC!S9f&bR[dFpapEC kPTTViEG+p-96FGmD&T8Lib3a0b2i'Dm3K!66Q#`@rPXBj+H9)qCX`"SPYH41j4J FPeI!I%&bJrkL$ZH!L)aCSbHX%$4LiQl-33`JfNNKDfk%pS66FX`,$,S4!kh51CU r,"9p#Vam)J,)dGBTI%cAi+@Ae[b`Y$(5dP'TBCMLB$&IeN@[mlj5T!Z(QpL'I4j cGUcaIQklG*,Ldbl#``#f+e3[cq-5CASklPXY9B'5a#dp`'#KhR5`DBaKqU6f!@, '0dC6[95$Ubqc[[8*NNTj&&149d+TkEil'Z9%@GFqVr+cM&Y8IDm[UN3aQ[d@d+m 4)@,H+ZMR!9D1)'1qBUY`Zpeq1CX"JLN&K*R#PjqClAeZe1$k94["&RXqJ@E5$9A J&Zh6e8I[Q(eDYk1pj@GYLRbReTKk!@(H$lR'B68`ajajPVkAl&Y"@'r+$'b)3`f "D+$`Q!-@Q,dkN@&YEfmmHCPq-mBFVKGN)5Ic4)LJi)C%L4cB)XM,hSr@1NFL@mI NT#RY[NjdL'1,ke!&"!P(eH1Ua9!#T+@a!)UA$kl8UTH3!#8rB,fUqN-"aT,B#mU +)MYcmZri-2PTkBKc!f(M!F6BL-pbGMF482DVNQjM5%1SapjDJZ-5&@&h'D9H8be )`)a-Vb+(a&e&1iFBZpEf8KJ`Rr''"V%61if)AN3mfVX*Xp(i*m8i)&j0SDh3-qR pGa*-*cUr!6DI(293&B8q!SbG)TpedIeqPDm*E(hFpR6%IT!!8qi[%X%ZMda)))c $GNlAKmXE`&('6)A0j3k"Q8+h6FDBA0k3!!ZJZF-mVV'V8$%C[XBV`FNb5!a4F*! !GVHceQ#+r'9"3Y&8dU2[)Z)QXGKb-Z5"Zj'BYB5B`%ZbIN0DC%2ir#d*&95EMI9 )r!eiVLmkC-MBebd6%%I0fe2Z"6R,dHXK+IaQa!c+m+Y%MpKr!ck@L#HQmQa9Nfr 8f4LfQ,Dl(-A)q`#RQ6XH!BIImRDIUmGcGE)#mc`@3k0K&1)f39NH0h'JITFHj`% kUTa6ZYe`i49Si4$Fh5ec`*!!kkkCl4SDM)X*""P21l0qXP@Spk0J-`T%9T(*e36 EUi%1*UlDU`SHDfBYZ%Em@*elXabrXiYRl4Y3U3i@3f-*Z3q#[h`aVm4b[,P,+1$ lR)UVYpL#%fN*a(X0+li9B4Pm*hG!TC!%!3!!-!"!!*!*!3$F!*!(cJ!!!e[rN!3 !N!UPN!3"!!!e!!#fm8lcY[&1m`#3!mi!!55!!*!$FJ!&J(J!N!j*BfpZ$3!"%Le TBfpZ68&$8d!!N!q!!*!*!HB!N!1!!*!%$`"#`G6Klm3JH"k5kcXLNd1@28i@a86 FZS%c$NZGQJUSH4bHKqI!B10G(MDil@6dI,-(Up5RBpA#Y*[,Jc6ZVdl(MB8G2P2 0'@HQ+8l@&,%cFpZ@ZdA2CRZ(blTpfJr'bBN59qAPP+-4lhGC8A%HlCU(TqTMVF- L#$JH*!8Lje0B!+@3"!%!!$!!3!#3#3%MQ3#3"h)!!$k*rj!%!*!+C@8!!!%!!!' AJ!!"PS!!!!9,!*$c$!!J!!J!SJ%F!)"993#3!``!+!!S!+i"6J#e998!N!--!#! !#!#L!4`!JP99!*!$$!"L!*)!m!'B!)9993#3!``!4J#Q!,S"eJ#'998!N!--!#J !+!"e!6`!Ke99!*!$$J!S!#J!`J'N!)K995J+!*!$$!!S!#J!P!%5!J"993#3!`` !+!!S!)d"&`)"998!N!--!#J!+!#f!4`%!999!*!$@J!"!*!&A3"`!(%!V!3#6dX !N!G+!&8"%iJk8fpbFRNZ)#"*ER0dB@aXBA4TEfiJBf&Z)'pZE(NJBQ8JF'9bCQp bE@9N)'pZ)%K'8b"fEfaeE@9c,J#3!eS!!3#3"9d!F!"a!+`%!Np,!*!(5J"9!41 )1P4SC5"QD@aP)0*H-0-JE@&j)'*P)'4KE@&RC@3Z)#"3E'9KFf8JGA0P)'Pd)(G TG'JJBf&eG'P[ELi!N!05!!%!N!9Y!'B!J3#L"!*25`#3"33!5!"R!31)-P0[FR* j,#"LGA3JB5"NDA0V)(*PE'&dC@3JCA*bEh)J+&i`+5"SBA-JEf0MGA*bC@3Z!*! $I8&%3e)$!!"q$9-+Ni3"Sfd!l!Yb!l5b-LXVieY0hP[[D[HQELEAJ$%!3!-!N!1 kY3b!!!PT+[lJ!985,2Y+b&X1iq9cZS94MV)rcirrVL!j0k`Dq"(+KM9jKQ+MCf[ `V&ir"HlX#m#`U3BL1%aA2VhVbkfM'32&(&P,'cJ,!*!$6!!#!*!&-3"R!%8!V33 %8A9TG!#3"3S!8!!F!4#)'P9Z8h4eCQCTEQFJGf&c)(0eBf0PFh0QG@`K!*!&#!! 1!#J!,U!#!!%!N!28384$8J-!!4)08`UE*!!lLSL+&Fm@d(1X4'`3p5`rIcrXejf rjql1$+GBf'%P+PL&999LjEra",'U"3ZbC6Y1)2Q3!"m"9#5BqM@mKDIGaGRG6G, )HT+pI4mZ3pc&PmHP#aEjM6KA6jAe#b3m5Sk53ElSG,A`G'S9QL)q"HC1abaeLk9 cJ@A[I"3FZ$A+c+Ce3%m()3a-9j4CR+h"Zf9c)KIFIJai(r!m3+*2iaUXL26-$cG j+&$EM-KaUkHFa@0E8ER-cGETJDZ80pr*q`cTre6rb@d!N!4Z!!%!N!9S!(S!I!# f"!*25`#3"dJ!AJ%PL%j6EfeP)'PdC@ec)(GPFQ8JFfYTF("PC#"LC@0KGA0P)(4 SCANJBA*P)'j[G#"cGA"`Eh*dC@3JBRNJG'KTFb"cC@aQ,@9iG(*KBh4[FLi!N!1 T384$8J-!!,B08`UM!J,[j!5Gr91a$mmfHp2E9(6Bajb+k03*LRTfFql'k6J3$a8 lE'G9#9C9N!-KhQd6UrS"#j)2B)QrqC!!!Al+C$IA*4T0h,,0C$41)9c$S80X0Nh %l40&LQIS0$'"1Rme"P-qaQ1QT*,p22dS82pVc)-l2TG!Iei&[QEeiPFKRRa,frh ZGP$pLG-c6DU+j6&M59JZp!+6*N%5EamGV!)!N!-k!!%!N!93!&N!C!#6"!*25`# 3"3-!4!")!1L)'94SDA-JBA*MD'PfC5"TFb"NB@eKCf9N,L!!N!4)!!%!N!9(!&S !@`#8"!*25`#3"3)!43!a!1L)*eP[G5"SBACP)'9ZG'9bC@3JB@iJD@jMEh*bC@0 d)("KFh0hEh*N,J#3"")!N!ZH!9j!!J2S!*!$I!!"!*!&D3"M!(d!R`3#6dX!N!F p!'!!miKF9'KPFQ8JDA-JEQpd)'9ZEh9RD#"bEfpY)'pZ)0*H-0-JG'mJBfpZG'P ZG@8J9@j6G(9QCQPZCbiJ)%&Z)'&NC'PdD@pZB@`JAM%JBRPdCA-JBA*P)'jPC@4 PC#i!N!-H!'i!KJ$H!H3!"3#3#!%&"P0dBA4eF`#3"KJ!0!!8!0)"FJ!"!3!"!*! &!qJ!N!18!!!"(d&%3e)$!!6Q$9-+j#)!hhB$MR'R6XAbV0j%XHBmX)IiV0j8,+H JL(G6Cr8c`3!G"L,18R4@$cZXm[rIpjiFhYRYG&J##k#MF"NjQKYpM08c$@fcB&c B,DfDBBi[Q8@'KZhRa2eh1KGblU3+QbXZmrjdJl+K'E8"E#iG,'U!L9ATB$8iH") ""%H4JmH*JiXFe$A2[B2Y#,$K`U`5"0`DJf#cY2MX*ChTT*3S[2"4)pjUZHHr$Vc 5*(XM!dUL`bYl#@3++G+qArAV)0Jeii&kIZM)c)ei1q,`DdZCb"5#5`TS9m8NY6& 2mINh23-MRM'-lh6%63iY205!1aPr01FI1[ikDb1j$**hNU$CKaEqDXNA6ICm`&p cThAf4L+8'Sm@!!!(#N&%3e)$!!`S$Pd,V))N2ZS-hqrZ1!QK5SG3'UP4i34(3(P I"fEcS0Q#K"92C$K@P-9HE6bcNT,DRQeBDc[aqqT$D#eNV8)&DdiZN!#%#AZ,hfp er$l&pI[)`U"CYD61l#ke%eX8NM![bE+N5i83d[Fl[Hr%iYTckrF($HIR0$%"*$3 M04p'j!kP$U6rDXM2CJM"X&PTH0km2Rc"[HG&*i[#(f(pFTmm#RB-&ck*PBNHVS0 Ka)H%LDfKbLLS1)"iAb3)Jc1%ji')q4!C1e$+EV!VUAf-f1i`r41*8jqrIEb"rEc klR#mrrCRJq1ZiMrE`$GKa94jU6lIZC+pD562CdmRci59Rbk'XX9!h3"XQ6cJqBA i*cH0kBALkBGRaJ2-hYTYaHF0X#p)F@%Qc[1G#a"XIL%ELH@5#bPrb&FN!i1YP[[ jlmh%-jAekAJS-Tbl-E)iZ1NUIe-VBQ88rJ9pHaHLJ@Eh`JAEM3p+f0FSl%E'6qC a%KQ%2iP,fai+q-jH!bq+%HV0m$2&U`*Z8DmCK6Fa4b)0ia2aZ@G9,ZE96jqF'A+ Ij$iHhQhJ'jH5ilPL0P@@RLYfq+@YAja2bVlDmpZP*2I,Z@h,"(a8`Dpi+2Y+*E` HZ4D#c&!IJeYh1f)'[V4[2$Rj`rR3DRRZZ4P-krfTLRlUKe(i$rbX&E"H4f%A%L* 8[*bH")%13M,hk!)G4+,3$D[JBV+Bjf8aYbL,qSpN%HGN)5K8P&!iK!STh+EU4DT 8TGX$6l2Np#Xa@8ElR,`XQErQ'&P+VqH5XPaq[HHa,'[HLHib-$qZ-$#P2h3B[-M XF"J%MIj%-2JJ0p8U(mB,prl%JeVVm1,)AeEZm%SE*X-`5BE*-dbU,YN'[m&EE"B '2LhLq,L`#pHl0G5RHl&m3iqUh@40JD9(e*HQ86pSY4)kbiIU#Uj-Ef"*EcRJ+"8 ZAeLlS$BFA6-Mk@jidB4mU*AB2SM"$YV@c)e6ZP[!58"@0Z$l&VH@lU8)$TUqSJ, ad0G!-NIYF!j!F*SLDT[G(%-YY1+4d3cZ'8#`BSaZ+d%dCmC1$q(@5Y0rN`q4-!- 1ha'[$Y%FkIYAp)0PY8QXb)b)T$fUCG50fMlBQN0K$6RbLSHeq,iNERPcAVd2Qe9 [[+(EK2lK4,8$e9plc0*lJPa-QD5UA,mZQbUjH0&"TCi'BkrrbN%mb,j!0r3@J3l Q8k*c-HC8KkQMJU2r2aJGiYI$JP0PlehjamNGSp#DZrFrd!Vk!ik0+iAq'Y,8GQJ 8b+FSE'$8UEldrFcdS3m&(mk+)&3YAHAqXNrYkrZ8F[9L`#PmMI6H+Hh-((8Lkjh DFB"S&TqEeBi0Ud!1!(&rJpk4f@N&#pS'J'H20CY"b341$fQhhDmiND1JaHNQ)bk IkK@TGT&k$DIBHaEYcql,N!#4DFY,JhDhiZVlbQI`3@$8hN,c!hH0%aR+R08FMJh h@ECjV+P0"-Zd6F35M*55`k6eCJhMU!Pad[(@4`i-qC2)FY#qJMUR`YdCfbMk1+r 3R&+J)(jr5rhl5'YA@SKK9%!H!r4H%bbXF$[d"pU$B5U'iClN)J&HiL#@#!(!L2q jUqG!m2IZ$Cj[E,49[EIkj1P%RrrplilrR[f1Drp0IhAHNmemXqPLE,dL6N2c[MT mebIael4Xb*KF8MHPb-KfkFhFFMMC`MmUKV)T*T'3!)2Ae6fjaI9)fU+)ij)8%Ai RFG(NYp%@hXk%(Q8Bbcj6m(CIRC5SP#5r$ZF!$h4)A#jj'S*I+SED&@CfhK6FpVL ZPQrXXH96Uf02NrfU[bF5ljA5R4hMrU$R8LQ8U)lQ'fK+'"6Di#a18cl$iNlVlJp +rKN84R%G82lDSS,c203D9B&$eBHXGIk'SJb-+l(rfG(,Xj!!DEJPcY04,9,L6'k QcY'!L6Zfbj2jCblQ4rRY%feAMe6hl#aI[L&2l*K[(6A"U@*M-"M+KMFVMAcGZp+ Y@52A'"`acI,B`SqD$mS[&rh"B1df%Ajb5p*qEZ6m`5(6P)mYmKN@+"XUcXl6Z!R *AdRCJ'RkYmE9`DZf)5QrkCU0"KZBYS6dV(%l0b3&6'8"2YK)i5r%+M)`#)5pZK+ HQ)46m[i,Y&`!4QcYX%5[kfc2IK"GY2f`6%#!Z-*dZ5E6YM'#C"Jbl+%p0VTKKR$ ,KbILh%H2ldDLRIm$L1&i+'1D)BP#Aip8rh[I9rq05RFMf,P*YLZeYS1hZDV-RSR eYqdQ+T!!rFbi0"[YfR'cUAf6'*A&PNUqjeSS*)5cKP5GFBQ$Lem4K9,T2`'9dfT #+q'86&fLP-,`J3K(+Hi(,C@*R(maa1K#99,Uf&MeUrA*%8pADE*328BDZ%I9arQ fr(+S+E`FXbE0J9i'#D503$%DUN3FZMEEJ3Uc`S,"3PUK'qV+ecpqDb)@pld!!!' e384$8J-!!XJ093Z8SX6XB342CpAGe5'%+QYY#3bBY"a*C-$N"+Jb1CP)"J%Lhk' N*4q6$L8h((P&ILE*QIaYB-%fhNkIDAH&K%Nb%pNN$FJRfl0MlLe$r14lMUkjBj1 #Qf1pV+J3!qd-q")[6T!!2&(NN!$XH$VqIIf-lF$JY8&`Z,`m2Kl(N!"fG26m(+L c@!dY,VZ@Jq32[ecHi',DFQR`2$R2R"FmEhPV5TS[8GIj4FMFPUJN(S$krrcHmXj TT(LK4Sf51[S8m0FeEMVMk6SYm6VJhLGTV1lRVZZ"EaEFUUI2-L@THq[lVS32kTf Q[&34P4,qR6LH8leTcUSC90r2)#jHlq(PSQ5$"LU+0r@-Q$28$kPkq[BSR&*1dKE `$GP@`m[M1pi1h+5UIP(#Y$f["YEirkXd45,c*elIF+LUHqKZJ#aQ&Jj&V0F0QfV hJ%U,iK)b8Rj5bF3(R&Ge&@C#A#EdNS1e+6!l+jT"0GNjAjJ,"X-fS4558*PXpZT "@GPQ4BRK,$U&MK11kK6e3me$R&PmRZBeK3+'[KCeKV"#+i`Erm##D%'$C3Y&%VF INEJ[pV`2cNF!!!'e384$8J-!![3093[FXX#Y$`3R*l4pR,E+,9cS9G6V%TrE2UV LrRe&k`k+#h8laU81%*IMeD[KZ&rGYQdIS"8K,pp,FV&4FGX(#qXa#P`NCE4GVrb Ad[T#VfM,r3Re*3ecY$mEP0C#pVha3DjUN!"UKaJA-eeFRekm(d!DYF'LjIVki@' lV9ff%4XfTid[`MqGTkrIr-H08Z2RQYdRFfCm%reVr)q5ZeS&TQ!EF&3"+6i#@"P d!%iQbLiQ6TQbP$"D+p3#T3k[%+J&a`QB&HN9`e%"!i@TRSpq41E'-KF*+efY3YX Idm(#Tb4#d[D[L[pkkf4+c-ND!HN5@EpmG)mZV-J)Iq[a,UXa*kPPGerLQap2iR2 K)Nh92bG[iR,lp(Y)jfcaeb8Hha*bcRH98B[[d(Y'VT5,%hmEqZYhrMc'4hLLD&Y QKeplle"Flhfm[)H#CTR`3'M"adK5D0hlB4H60&a8F401Y5HehLpe#)T8"HB1aEI S)*JDH%-bDfGNB0V9N!!SjLN38TkRF"(GN!!D('BaRVX@iB#Rb*UTJhNT&Z612U1 %V%JKlaXIpiKYGiKCQC!!pPcYm43#!!!"LN&%3e)$!!+d$98,R"6&p9%!hb4j54V AQQc[Y9QY`(p1RFT8hqPl9Ri9f!Um#Q`&!,j@MEDeZEP[lT*ee`S-%pN4!cN3c9F 'jrI-mC-IZ6ph6qa+GR0XIaXS4q,T@IMkII8#j)ZL-j,2I"hr[[dG9f5[$5+hcl& C-MEhRLRXdbr01c3U2@pDXFKTGZ(Fmkd+U6kTDI&,cPa2DK3HSITrrZMjP+3b2#K 9DT5&AV+qfqSU!kjPN8RAV,ZAk&6EX#`0HPbi&UGEc#@dD@[,*"r&Na5l5B6%*2m Zh-m89c%6-8#Y$3"@1i0ALf%+#b3%GfQXKA05lq9S`EPBLAj8Eq4&D"r!(S2N50# kmM&4LfJ6UL#,pS82Ei#*`@k&G+U'aeJmj2p$adlZ)&Le4LV)+(D3!!#09FG(9'3 )pJFp,$-Y'EP2#-b+Hr+4+K!XLeb+8j!!Q(9`F8!kMGP!SAJ2#fMEM0Id#YU*1Sl 5`QdHYK!+Q1GUP3%(P8GKhIi2'&60&Kak'&+irSc%krLeDhBd!J!!"$0"4%05!`! 'G`e9$8-L%K(QAQi3C#dC4'Vb4#3,%&QVTLBRYcf,M1"fjmK*Yc06mTPrGlr[fiS m'pr-Yl9!NYA1l-RN5GLq1j-4NZ9@j)QXb1mIN6q6RmQmfGCf%8N@%l)h,FNL+%$ L"rp1@BD49%3iU!XlH1)RGL%XdS$Y8-@K&RB5AKr2MQN-Tdqr@5Tb%b2*lEeNEa2 deYr0KTa,b#P((lQrdKDbpHCeqFBN#8XTDGMHT"F9Nj*A@5m3r1$*iF)A(Ra+`bC Sd@*%bYh0[UE$mLb8Z8NZL1FKb4cpaH#,'S2Z2"A0G593mh5B(ilNbH!U(HDq*03 V2L&LN!#Glm-GLj)350pE&JffVadV0j9c-)PcYTmmT-U'cCf2[lLr"Zb,Dr,j*UQ J&eL!@HMeXIT'U5KXK+Zi)G(%4'NH4P'P*SBS*l2%Ke)*Td69NE&*%bSLi2'$"P$ iBJ#e%QfCd)!P0"&UFSY0QF0BUD3IT`bXGDL,fZ$B!U8fSh08@--BYZrp*)$#,J2 %1@+BZ'k&r-qa*h(XSZeGPi*0bi'TkX2@JbVR0)ahG0E&J(3EJ`[@YV@,-D*-cb( Q-Y`6mPcZfjMcBMp"cGLljK3Rb&aVTMai@-PP[RfUT+62k1U0klXYd-Kcq8@f`RZ !4-@X%K,E)89)*H!)2HGQk+!L4L(61rDKE[-93T%lT4&h#Yj6*Gq@)$NpfZfT-bI Q[*a$ZHi9U@$-fpTGbR)EqIHh6JN-ELhIr*F2iT-R9S%)rHb*!9X*2'JQcVG5aT+ bk)"66"T!8Hh@RKiMNZDb1RCPrpLBBZE'f'*+5Z1k(+rRjMiNk%bc`$2Y2dPbk)d [lP"05[[rh(fm5+9i5KpCGN!BDPI(P8iGH))aB&$'@AMak[HhZkICP"IAk`20U"3 0ED$cl3ANPB5bhE"dKJq'UT!!'MJ$K%Ef[#TaY#Qi5[JiZdp@*Ek(V6S2"5LGMGP 9XcSTH`kX!)Q$@e`Lj!Hc!YeF"G@qBdCpV(kpX(EYJl32qi0AAhd*'kUV,i&`%M, 25lL3!)9HJTA-Hq-JNiRVb1C`%N0V@&,9LJXedG30VZTedYBKmQ8[pD@$C2LX$T! !US[$LD0[BBPS9ake"Bi4i"NpQ[B5,S$!l!aZkDY"[CV-MSM(ZdcHrYqi$lHRmXQ 0Uj1Q&hdZmV+6dc$Q@CReZ"0&fVV&S"Ua`C3d8JpM+h9[1peJ#QP[H2ESABrbfDQ 9EXl,)rR"Y(aV,(DK,&e(qXHCLJYTG`ceq9R+jqIUrhj)D3VcIeGqcX4Q-IlfpqA BR&9R,NpTEKEkTP6FE&CkmZ##0U6Epj,8cI&CH25LN[RmcjI[Q)F-e2@eAFBV*qp h(["`34I,9E@$fDIYZ+ZVJh8&%Tl"cXY,fjl%2ZKNB,XDjI@RH3*a"UE`8,`*ALR F`jGi-!Gh[Rked&R$@pIN$J#3!``,9@j6G(9QCL"KFcS!N!-)"b"QEfaNCA)!N!- m!!8%)'pQ)!FJDA4PEA-Z"&0dEh!E5A4PEA-JFQ9YB@PZD@jR)(4[)&9Z8h4eCQB k#e9Z8h4eCQCTEQFk!*!$,8&%3e)$!!!`$8X$@f`,YfS!N!@S!9[Y[`B'!r!4fr* r#&K#bBm'eKXaPa-!N!-'!*!&$3#3!cm'!B!!N!-&0Li`,M%b0Li`,M%X)%0[F(P bD@GSG##T)$%j16!Y-M!`-5""E'&NC'PZ)&0jFh4PEA-X)%PZBbi!N!-L"J'!!*! $"6BZ-#ia&90dG@CQ5A3J4'9XGAKPUL!f,M!Z-3#3!``!+!!S!(m"F!5[998!N!- J(kNJ-6Nj-#dj1#""E'&NC'PZ)&0jFh4PEA-X)%PZBbi!N!-d399c-J#3!`&*3di M!!-!N!1!!!%!J3!#!))!!`#$4P*&4J!$!*!$J!!"!)%!!J##!!-!J`#3!aaKGA0 d!*!$!8P$6L-!N!@%4P*&4J#3"B3!N!-A!*!&%!&+!!!"!!"N!!!"%J#3#*e"4%0 5!`!!U!eE#PT!!RIi(&CeCqR%2P6X%(Y60h9ff+'2YaYlZYfEEiHc(faB9@*9*9K 9BMf'(9B&#DJTT[J,i1(,8`"QDIbQDRi#lM$$cBqlU)D,4ASBB5rYZ5acTL`96)r 2pNKjl1M&V$6BJ'b3!'ZD%ZB8DBKG0`9Epd3(4ED8d&f,-,R*JQ8b36(T0HQlAa) VPkLN[F!r*`mLD`#3!jp"4%05!`!!UJe6#T`#!Zr@j3bJ[U#@m9XCReQCTDd@cmS kYcGhYGkYfl2&Ej`"J!%!D!"JC(0C'3!$#DJTT[J,&1R$QbkNIKkRaq`VEU4dMCZ YeC+69%EUD1rE8eAPM-)NM2YcI8"Z'lbB&D-,`U9`KYT)$S[40NdGA$B!#a9f-0* INe$h8`6(+)1+dE24hj!!*RCpBZREE[)VqZ-BbIX1!*!$6!!#!*!&#!!d!"S"'iJ E8'aPBA0P)'PZFf9bG#"NDA0V)&i`)(GTG'Jk!*!'#`!,!#X!+k!#"%X!N!8G!$3 !,3%BL!*H-3#3!cS!!3#3"6B!K`"+!-%%!Np,!*!&!J"&!#m"2iJCAM!JBA"`C@& bFb"dEb"LC5"NB@eKCf9N,NX!N!-B!$`!3!#d!CJ!!3%!N!F""`!!+!S!N!-B!$` !3!#d!CJ!!3%!N!F"#!!!+!S!N!-9!&3!C!#,!BB!!3%!N!F%5`#3"!G"8&"-!*! '"e0PCc)!!3#3"!G6C@Fc!!*r!*!$"e0PCdi!!rm!N!-(39"36!#3"3%!N!1!!"r r3!!J!L!!)J53!!!Q#FJ!)K2N!#)J!J!L3!%!))IJJ#%2m%!L($!J*"Rr%#JDLJJ b-SSN*M,b-Nid"MNQCI3b%Q88*!KRr!J%F-!3!MrJ)!%"J%!!KX#!!%!"!!!J!J! !%q3!!!R)!!!%N!!!!!)J!!!"3!#3!i!!N!H!!"rr`!!rrq!!2rr`!$rrq!!rrr` !2rrq!$rrr`!rrrq!2rrr`$rrrq!rrrr`2rrrq$rrrr`rrrrqIrq3!crrrriIrrr m$rrrq!Irrr!$rrrJ!Irr`!$rri!!Irm!!$rq!!!Ir!!!$rJ!!!I`!!!$i!!!!F! !N!1!!*!(!3!(rri!#!#$!!Q"!S!+3J*!#)3#)!N)!K!,d!2i##!!#!K!!!J)J!! )#3!!#!S!!!J-!!!)#!!!#!J"q!J)!r`)#!F-#!J'ImJ)"U#)#!bJL!J-!BJ)$3' )#"Pp#!JC4`J)'Im)#"``#!J2q!J)!'!)#!'`#!J!!!J)!!!)$rrrq!IrrJ!2rrm !$rrrJ!rrrm!2rrrJ$rrrm!rrrrJ2rrri$rrrq!rrrrJ2rrri$rrrq!rrrrJ2rrr i$rrrq!rrrrJ2rrri$rrrq!rrrrJ2rrri$rrrq!rrrrJ2rrri$rrrq!rrrrJ2rrr i$rrrq!rrrrJ2rrri$rrrq!rrrrJ2rrri!!!"!!IrrJ!)!)-!#i%#J!K#!N!*K!) J#%J#%!Z3!!2i##!!#!K!!!J)J!!)#3!!#!S!!!J-!!!)#!!!#!J"q!J)!r`)#!F -#!J'ImJ)"U#)#!bJL!J-!BJ)$3')#"Pp#!JC4`J)'Im)#"``#!J2q!J)!'!)#!' `#!J!!!J)!!!)$rrrq!IrrJ!2rrm!$rrrJ!rrrm!2rrrJ$rrrm!rrrrJ2rrri$rr rq!rrrrJ2rrri$rrrq!rrrrJ2rrri$rrrq!rrrrJ2rrri$rrrq!rrrrJ2rrri$rr rq!rrrrJ2rrri$rrrq!rrrrJ2rrri$rrrq!rrrrJ2rrri$rrrq!rrrrJ2rrri!!! "!!IrrJ!)!)-!#i%#J!T#!N!+4!)J#NJ#%!T3!rJ))!!)#%!!#!L!!!J*!!!)#J! !#!`!!!J)!!!)#!(i#!J$r!J)"``)#!Crb!J'S)J)$+#)#!`"L!J0!BJ)'Ad)#"P (#!JCr`J)($!)#!ri#!J!B!J)!E!)#!!!#!J!!!J2rrri"rrq!!rrr`!2rrq!$rr r`!rrrq!2rrr`$rrrq!rrrrJ2rrri$rrrq!rrrrJ2rrri$rrrq!rrrrJ2rrri$rr rq!rrrrJ2rrri$rrrq!rrrrJ2rrri$rrrq!rrrrJ2rrri$rrrq!rrrrJ2rrri$rr rq!rrrrJ2rrri$rrrq!rrrrJ!!!%!N!1!!!!"3!!!!L!!!!53!!!!#FJ!!"2N!!! J!J!!3!%!!)IJJ!%2m%!#($!J""Rr%!JDLJJ5-SSN*M,b-Nid"MNQCI3b%Q88*!K Rr!J%F-!3!MrJ)!%"J%!!KX#!!%!"!!!J!J!!%q3!!!R)!!!%N!!!!!)J!!!"3!# 3!i!!N!H!!!!"`!!!!q!!!!I`!!!2q!!!(r`!!$rq!!"rr`!!rrq!!Irr`!2rrq! (rrr`$rrrq"rrrr`rrrrqIrq3!crrrriIrrrm$rrrq!Irrr!$rrrJ!Irr`!$rri! !Irm!!$rq!!!Ir!!!$rJ!!!I`!!!$i!!!!F!!N!1!!*!)Gd&%3e)$!!#!$9-,@b! $!kCJ`kTUXc#`!5*LB$G,XGYCPD!JBX-HkYR!Q&8a#f-UZ[HR8k`+#iPMb,ELGpB !8LMpiEh!JNUia8#RBdJbMUrCpbBL$VrTa[llf*mk9dmSTT%&(C'kJKQiSm8DVUK U*k42-JV[4Fi&!*!$9d&%3e)$!!%"$9-#h0B'NrI54Xe&%fd!Y2Nh,VcE64YQ`Qb qU`[IK0f`fq6GGYA9G@%!#6LPL2pd"ISD0+Bf([[%R@[C6S+*X0-3qX#ck!"SN!$ &[[i%[JB!N!B")N&%3e)$!!1+$9-+Qb3!IiC&X0dj141`a3jG5dj2(GX"&32EXIV B$&EecMiSU&KpE-&ZV1V'`$pMIe6d[rp[Mr0f9KR'kJ!,Q680A&D0p-'14[HZ8aV X",2c+"6FaH)b3VE8Z5$*F`Z3!0p[JRD#kG&%G-mTHE-6hEc*lLZ&K$2-5eVUQP+ +(3Xq(j[6I`6`H[ijkXV6kQVrRepZakZIr82rqj'@*3+i-fUMJQe@`8JQ[%@VE)a 9Y9jE2Q+EYiAYB49ph"I'dPT-T*5d!R%I6(k-`pHZ'qD(TKRU8p[f6Gd2ZK"S@S! R"-J!R!"-[ISY!2lU#3-4I`$`SR,K!K!FJS!"JQ*J,6L,N8'-h`a#j")kiZTMNXb p+(%I60pdq8A%+fc,'!#3!c!!N!F%!!$rN!B!!3#3"`)!N!F$!*!("2q3"J#3!`B !N!82!!!%!*!4J3#3(S%!r`#3()%!9#[r!*!DJ3"8re3Vr`#3')%!92q3!e3Vr`# 3&S%!92q3"93Vr`#3&)%!pID3!e6fN!3Vr`#3%S%!pID3"2MfN!8Vr`#3%)%!pIE fJC!'9[IfpL[r!*!1J3$ep[Eprj!'r&EfN!-Vr`#3$)%!pIEf9[prpj!%JIrhpT! %+rm!N!U"!2AfN!2mrIG@Ij!&Uj!$IrEf+rm!N!L"!&6fN!6rIrCr+Rm!N!089(p @+rC8+rm!N!D"!&6rpT!$9[riphmUI`#3!e48UrFVp[p8+rm!N!5"!&6rrrD3!rc ppeC8+P53"AqVprEfrrp8+rm!!)%!92q3!e6ip[prpRmUN!989(prprK8rj!$92M r!!$r+e6rrrEf9[rhphmUJC!%V&5V9[D3!rrr92Mr!*!%rbY8rrEfr2hf9UXUJID 3!i&rrrIfN!2r92Mr!*!'rbY8p[EprIG@Uk[rN!CrprD3!e6ir`#3#2mVp[C@rRr hN!6rJIH3"2D3!rIir`#3#[mVp[C@rIq3"S(fN!Ahq2m!N!cr+rD3"[q"pj!$pT! $prMr!*!1rb[fN!2rrrMrrrMfN!2hq2m!N"$r+rD3!rIhq2H3!rEhq2m!N",r+rD 3"&6fN!2hq2m!N"6r+e6rN!98q2m!N"Er+e6rN!08q2m!N"Mr+e6r92Mr!*!DrbY 8q2m!N"crq2m!N"lr!*!a6SK"4%05!`#N!""9$99(!J!LC1jArpklmlMNXX[-ZFF -Am6X%Y5$c(A*3%qJih,d1S84PXd$p3l+crG@KBb([qEiI#1RQJ*LfjCT'E1fe0# -D9Q@lDqaPQRCfCl@f+CKQVCaf+CK@(*CPL%6mEkrhrZqGkmLRemlqrrc!"YPT56 +J5!2!L$)$!"GY6rlj-T,-Y)C#,jI`N(IJQ1LlClGKSSAJ%Vmr[P[BJ&$r5[r*l0 Jm'CKk[jZSZ#,ImNXS+k%(15Z2b1NYPJkmS!8Y4i4L"bL+IT5Gi(a[4f(jVDhI4r )6NpEjYaf&$!`AKrDHZDqk355kS2p)hiRd,d[l(rP"klLTi'bR2ZQ4A[hFfG,aEB 2pZq`cKe!mEqjf)rLCLkfdH2"JX#4cqkMai-&`6iZEJC5Z2fcqcVq!b"i1Ef+MJ+ "f1ESf6,6&E#j%"ASmXM&Pf`IG2`(m%Me3$)IUpJX#,q$k[Z9UIi%-BSY#R(GQTq frTA3m!RJ%qa,%0)IIMAqY2@F-`KNPGY9&ZJ@2aRlaA#hScXV2hB$ArHkbVK`)0* VVIp$IDb1Pj+V'*0E)pe$6mI8#3BA%(ELX62'X4mT!hcQ$)DKJ$UD8YIVI&ri1RB ")4N6a@*8l"DfY&I(FSe'r[aLl"G8-91ZIU&F2)PP"6lEXPqPUmLVI*dYAdGH9DF U$eS1Y)M(+[iPXLqm6`3cKG%MhCifa5L$Jb0&9kED%N4ic9qdAX(QVf$c9d4`i*I *)YECr2m-'Qmp2%XcD&DhYIi1GmbdjMK0j8HpVV$cPlqccZMP4f9bpljIrZl9'5H P"$JZ)f,XcLD6'(l0m9T'Nh3SE@UJPC!!TRf(4KiB+5C9L0%pdM1hA9NNSk!@5Ch 54iK5GI+q2e%H4'LkHEP[T0LmQ*5lr'q"-0N$T!i8a`E1S,+41AI!J5hD[5Mf3mP Bh2Q$Y5*l#LKJr)0DVN$k6XI"lQH%-(aFRbX-fm[pfcS1JQ3DKRdaHmVkqpVD29m *$b+%4qUCfq8UPRS2!!RHF5RlT@Kqm@fbGk*,mP$fF8cVKI)$*!p0MGhPQ&`rhq@ 9HUY6T*p92bUP5P(*Ald(D(qrNbBY-Gl5CVecYX"QFQUPe,E[rq0Xi3AD1G$QMiA I20%""[qa3J5LhljlNA',!ek*P#6[ISl$*[8XGIjJh6V(T0EM#P3BH4[N("G#P91 -$IM$6p*!pM0K)2#&,c2Zr#,Pm-"Ufr#Q[45,N!$$B'EV&,amY#4M&GZ%H0l-',B f!)IT8"i'@r3-pU@fraB"`F'"a1Hmj(f4+'hXNEG43UQHQa)+AKU*(a[E%CQlld# ,d6J#"B3%"86(TBY6ICPcpdR&pZXSZDfrGiVN3-HZ0K%VlY3%SEI$(3IlK0@fq1e qcGVp6IdGh9DEc9ErGYe*p@'H,S2Q,TV0CVAC4bG3eE2fZRcZYlX`L$0)"5QJ6ZV LKeCE[aEhf"dRlh3hR8[hAMSA#Gcp,pLk-SN)h,bFd(!M39)VDNiNGBXaabd'YrP &G8per1$0Fkf$Xm@2SEV)U-`C34)CMD5QU'LZF&Cm#PA(rkf-RK,9%j&c3!fl-lG +,CDiK(LSCh,IE@JVRa"f!`9(31qkA6j,B+RElUI)@V%S&ZjB!X6l%N'&1m`UK0N M`4fCFaFfQ[#UDGcGdC!!I`NS[E$Y!h3VKf0BGh(+SJd#r+kqp(5'mEZ0$ld2%,b aAfUa*dQ5I+bMeqkh"1U"eT19HNrh0[D&-pH*a[k,pIX%PQY2#G9a*h8RR2F'11q &aYP!qVGFXeML3N2*+J1`!A8U$HS+R0+HlQl`i0#-P,J9(VTGDNP+6V(RQD59Q#4 e0$`6Hrr%Fk,4`+qbpdmBMBh0YXa'crXR4,Ka[+2K@5F)%E8Q"J3+-AaUVBN)%$+ rZJ'I'4e,IRQ$XjA)#PAi'"i&e[iJ#1ANqSmapA1S1QALEKdKe3`!'94E#NL0DXe mbe6aR4&@piRLLVmNYC`S"VYEUpp[Fp-$"*erUA62!5MNP"(UNa!mq$a#h[%52#I !Ya`(8&8ZclalV6pblK"HDrfPecT2q-R0mY@p&T[@FUre'qA"k6C4qfhk+rcf,2H -idjFpSRD9qQ[m08lh$-!aXdklG3Qa0NG`'6p-`$)(1XhNUqfR2i+bqY1ch"2fb& meVF[[c1JeAk(rJUrFpIa'DmYF0re6KH#[lTpAb#SqQ+[#$L,V29eTl(d)IM3SF& *[3M3S(2U2T!!`ep4h3HP&a`k4r@Mr4(R[GEkHF6UMaDi@iUXhdcfc&eSA6bYCfi 0MMafqE4*Urf5rJUrR(jmaV'iiZR(ja'M2cT,62hc`YHXrcb[Cfkep8ISmM'k[&D 5cBPMY1@kde*N*YM%5fEd(Elb-@Z(XMZPb!'6D+kSlNPP&APZYB086U3HZr8p!%m pM3qj6+B)UBC&-4"%2@r2DGdYLJrX&P!"!dd,*53PB0AYrDNa8hqc-M&)%k9ZD0H +-AbHU4ArAcq4B8#k236q3ZPA6!`0GNDb5j++)T`9AR@N'F$V$-Q"!+dB6TbjidL 3!,V!X9l5Ck8L-9"aHU+9$R%'qeY,RIb4E[)lUjKm9$IjYG8R'lG3G+p-dNAk,Db Zc6$Q9hb(AL-YaPaMEQ8&(,@J#&Eq9,d8"Q'SE%*"%eVP6qA"529)50NqL[a!b++ bdfca`9%c@2a`e#4iK6*5MlM'rff1#0J04*i$AN)P'dp&Tf*A,8&f!)X`fG%r)!+ "Fk58Y$c!ehKSlaTCIm#V-*P,M&CmKj*GLSC0`$Brk%)9@"LFap4"FlXXfX@T'+Y (`aicFE`M36"ACPdXHF1Np#`k1Z&m2k!#DeG&'(rYp)%`Ld(UhK&YR,B$J($MK"5 -ZU9HA-cMLl-a8fZl'!,KaP%BS`S6#&JQC6Bj8'%`LH`$j!c9)m%0L)DrXVG*ATI R#MBb$(,%bUbCMI2`QBC*%"XKF,PaCRqVUGA-*TLJ4+&*0"P"J#qN+$@3!+J11c' Nj!5VBcHm2R`ZFja"VI8MB3bl,IVUm$Nk2QX1SUSre(P8)Z8`d1E&k&b'$N@S!MB mmrQ%S-KTRc$d0-b2-b#4$#-p$BZTHUMj*J3)1ETR#S3Y)VA)Q0hC'PVHQc[4kJa #mD063EHbJK[#3-@hD#HdprFh01hBel$irHk'UX'E'kI[X$Cm0RKc`h,,Fc8a12G #,$!IHf%!ai)T8Sd[GI4HR(+G8*GL%`JaR4F0ce4$jH+P#aar&c-6ZXL!-`rL2f0 ep")"A#FMqfm"&'imN@IDab@k6FjVKF)Ll8!4GEe&42CR6k'6eEN1)%#qMRbm-5* ISP$B0$#E0SA0r5ABl'R)9ikBTKaT[QTHl'bG&#Uca+V6QeH02bVQ+85d0DJ%UaP EeY#`f0km*,2K4AZBJN!LD-2bkPY([-ak*5@9bd-(iB"#Ck[qJAffrS!4LJ$qKa# "S2#YJLJ2ST2SNKb@KfTL1UGN[6S4NFe!dk6EUappD&K)F2$JaFTZHLK9p0ek!Tk [4ahJS41@D`Hca#3'DU1"qPFELKhC-AJ@6f8V(02eVXP5"Ml'!fH)qmd$%k2+X*J m!2'2&r6$8m6ZNp9"m)a)*JVN04#mj9"harB4*E)D6e(36pH(il1kc0FaA!H9kdR cY32AA[8k+64%&kk,P1[3%'Y`l91Z3d13!)V`@-KV%!"jkLBc5*@,iNXI%%L9#h# D"#@NQYL%10!YaKJF53CSI(ARM438kcfYj1JZh!RPVU%jiUjT2b&XMFB`2Xe!SBd 2&Zkm%80,PP'J)2S!!JU,N`CeqCc"Q!Ld51dlDdR8`b$X8-IMDJ"GFY'&Z`2pj,4 P'%Hjih1kMPkJ2b5M'd"U(ilk(*q&k&$$JHfAf'MrpDNl#a`C1`XJL(N(69''ABM K2J1kUaj$IQPjT#D')pl!a6%+SY611j1YL4SU0+CXG#JR35l9BB&XPeBjG(eU6Li 9+hlUb-M**F80N!#&@4$ADV&el1ZXI!!6FUiRmDJc3&pV16QC3ZZkSMb'fZF-"-& 5-I!*&Y8$NBdR8%h$UbrD%c%H#eG4j""qZqI3(!MYl#E3khIPFF@c[TcPKLTkFm` cL!H%q%EP5(jB2XYY'X6'mN'8cFB#)"NqT#2h4rEZap!&"$*8)S#9LPh*rC'"Hb% QCM`&3CC*$"mE)Q#`k@(KYBGCU-YiYU[,(r1R[4VTAVS[BBB$Nehp0"`aGQ#G-Y$ BJA8J5E[aQ%)b!a&L5D24l@U'q&Y[9KJ(PlG&Ylq@!SFVVG&B!#4U2Lih!hQAhi6 J+N%BEq20$f#B%a8[B!)TKFmdCH6N*)JF8Sk9K`l)"5L3!*0EXB#&(c&dpACRqmk #2!"2%%i-JVX$5M!&-2UZL9CGa282h[c-N4h@4Y[JcIPe+1a(B4%+$M``SG#"JJ' &#!SH&+kLi%6K!JU6+0b'JS6#dBjRM-B#CmI9,EF3B'eVh$ArM$JK%M991"$)&Le 6L&F*9$rJVAcXP-DLIJ8N'XJ2Bb`8@(!J@&R@PcT5M)NjeSaF*cjG&CAK4J,CM!A fIN5HGi`jQAi8AMIQ*"M#'8AlF9''!VTNq&JFd![Jb4(T$KfaY$HK1V*2C@9C,iK maSDJ(U6TqHU'NCk[CPJ6Rc03j#@J!-LdAT!!D8%SF-UHFV%Ap(eMDfM-SNNc898 4YV@SV)Kpk*!!M@#mNKlB+N8+9@9'HKUc4RUD((K3V34ZrM1D*@9(Ef0@U42#GZ& ESe`em9!QlAN!*hYBf!YLLUieYNHS+bC-GiLIUC@qAef8@G[Y+!)bm-Xp8p3C%EX A9D'bMLA296PE,5RR'piUfi',aL-p[9Xq#ddLS!jSZ58lTqXhDaG&bh8$C@cj$)& J(!BE,c%YihdmD,6JPGaS$m-r0bDlbP#jqc`QLL)@iilHYmS54EqAKJSI!IKj`Gi 'p[14T#$B-i+#9L`ZG#b*C*r4L!M`S%[2U!q3!#"id",Z!3!h26S9I`'1D%rMp*q j#5LKURahB@jApfq%C[&@Ym1$HR1lb)R,l4UmqDeQDp6f5#XMN!$mIJJM$TNIH8+ 2eK9#a-el"B15*al1MNJ(@J)D93KS-P8#lRi,KlERGYh5ZY#Y(Yrd6R3U`I[dIFa iP`SDh,dS1X9#a"hllb1d,$X$ILNbDJMiK0[KFl@pMmMb9Hd14*D[EL,f`ET"(C! !!J9XHJ')A0@aj1`GkZ-Y9Gfrm4D(TN!S%`P2STPEUU`C"I0(@JlJRrT#Ye2@M&e ,+3#PKlKSG""iZ0[9VPamp$iQJ)'-AF[!31'ZT8"qq"3QfRHp38HN6FA'P1Na"R" rK5X4K0$q[hB`N!"%&3Shb&QXERTD,9@XRc0dJf%--rQFJBC4(fjr9HRLT5lVTU[ AMbj6VS[iqQAefR3-C,RT+j!!%ij'4Lk521SB4-)5d!Qbe6C8f6)EQV$"qAJFYQB f,1pB)Pfd'*X3S3RGQ*90T0qED"NQmHfq9&Tf(-cF6mYq5JL$&$%CTMIQKSH2G@E dHR-K-)L+ar#d+)Pe2r3NN3f&Se'1l[dQF4A*iGC(8JHmAN)@JZ+DZXDF&qYS+(G RKK#jiHP3J1cm$0I,lU(L"AM8AS0!0D8A#,jaC3#rY6jYLJ50qh*!dR%icUq5Kqi 9pQ,em,iEdUEdKf8XGjacLB"K'Cc2q,15pa)+RHedi)K3LHDcbC'285Ei9,a1b#3 [K[[[0$Aj8!83fUH1[IBBN481h%e`k'UTkX#16E'p,Fq$*IpcQDleRP[lL"h(@TT %Ni'@Z3N*Gc+[%k!G)@,C2L"(C,Z2`)3Y#h&PL%j"P0U,$lDq&SLE4lel#h1cpmi 4*,J%-5I0jpMVmYPkjZq*06-V!-!kSX6mr$e4%'3AN!!#TU8JAAXZUPHlFQ95J`J C"98i`Kmk!J1J8[4X(C,2@c)KF0bBI8Lr@BABD43XaeC'(P0HmQa*cNXHPemPFqc )52[1TT(fR*G,15++6Z0%%Q+["%P!bYdL1X@9c@BjqI[9##"bEKKThe+$cd*-KCG m&*dlPV3Z#6R*3"V'19XlPR`a(aX[AkRMdmX('"`qZiTXI+GMb6m!HFY9E&debF2 !Z%AV(p"mpHGFr[#!-!CIXcXXIL`0RS&!CYJ,)'JHANAf,MaH&mKblEBicC12fGG B[$4jI%$lUh!3Nm[`+V,6ih8D((e(crb)`X6aML@&,ej8+p'riJ52U!,A!,bjfLm "lHF052!deDqc)McF8FHA3IRbiY4CYbVH6!T,9CP&aHS'9QH939!a$03N0Y9@(ZZ (FQV#f6,REJJXKZGrl[)j2RFealCf&`MT(qZJSU0TEPDq'dMa(RfTS`l6)l(#8qP a53KiBjRAiSqJN!#5p(M5+46+#4@-`Q@lj5"8l',KIk9)9*Mpm0%8&,5KDmPC$k0 JbmbN#9T+h,9-+T4RS83&SIc$YNqf*3BD,Gl`BA%3'DQD`iF$T`$HHL1p-CpK-[b pLk55MN%01DPG32%U1E6D#"i,Sb-m+EcDL'[5Mm,k0PHA0,8&cXVr21,mCEXeh0[ UFBf(H`piA!Dm*PePZ*U%i)')PH(BBNXJ"J30%4e$LA$L!@2JSia4YD,6ak6m1[M "IPB'LaI,l6jd%6%I#q'4Z[N6`f4J$FJkhQCYpVK%cUcj`Vler,p)IMbF(lahI8$ cVI-@qCq$i+eM-R$qiI(Q5@dAXN8p&JEkbHj(CUqE!0DX`r4Mf%C!'mNFTkf&A`R M4&FBVf#QGlKAC6!RTQH-+Q$5T1CrX4`CKPj#G"U[I%PUaE4jUeE'3KN@KTS0C$" iV,f'rqFB3GDc-Vam,Zr(,6&$G8XXV#irDi'UYU8Bl,3L@XL4%"A#6k5TQBJ`b!! #-3"46"%Q'a(QlVGMJHMEkS5e0%'D549J$b*AH1hGSXpf41`'@0MZd1cHkN!X8"e %pfCkh&B*FCVEfZL)iSilc8H%FF5$Q&6'dE05M0+NLbq9Q1,46@PIE8UCm2$%hFa 5Hr8q0BUh843RBRLK'26$b5K%T%GQ!4#`Y4e9&'4Z%JC$c'ZB,65SN`TX"Q9kY1+ ()*qhVIa!Vr#c!JNH8!'FYT2S388eEFRfS06UDL1PPG-$F@QrDhaqle%SrSF(A6k $jmlkf&D$)G*Eh5jl0M$mk8J3BM3'iifSGRjD-cBK8,N13eKm"QFqJ',"536MbSS Z-Bk0"+r2%12'"HMFE(`4Vc,MKkLq,E`IhBfrCG9r0BBmCKQLUM%0KN(Iim%mjX% -'cGB6I'UKS*c+UiRdD`&K1K$jIP&hK`2ad2!apT0,-UQ$JNrB2Idd%%3,K9q#'Z K%cpk!#,XAK`b"%53!%FjTPR(m"JcE1!M`XB2HE-qHE-Jh)[-iVLC468ce,(VUG- #l[3L(aPLlMQ+Q-VdiP91(pbSkEE9TRpk28fC3FPZ#G6%c&j+bEV#U#G89RIDSEj MP1KTbl6iT13i3@*+"6@8!3@)e@)JZjS4J)fI3X!Db+%-JVE,YZIKd-&4GM4m0BH Vk$eIc5(&!)#('3""iB8YSR,!e'S[lQmXQ0hA@,$TP#D&+G1IJl)%PQ0L$A8!1MA IJB$De8')G"@0M8G3lfNR'-JfZ-,pL+*pMFEm8eV-2!d9M6A@+%r-9LC1ddhX,fA LEQ9LF@JL0Y51$B9YPm'@arBmZMDM@0Er4[EHY1bq0k,GDGQR0%-`P$8'H@G!0!V U,#*mNUS(pR$i1"FS@p1Dm%RU5TFT#8RAq,,BFG,ZFaa(YL40(Z6+&)#p1I$DKl, 6!@SJ)a0!0C!!-QC65BN-Y&5"E4%q%5"#5UefMrU)+PCi%""&kS1B3Af!M*'M8LX 0`Z$kY1c(@Ac&M"$NK&UM*"3*GaHV!mMGJcG+V43G)-353L''XKm0cc0%pL,MSCC &+XL@8m+a0k%V8I30lpeL$8#4"1"59(&#XXT"UK)q&-C3J2S6QA--dpe!kHc0r)6 !N!"4(9)hl#(826PXLF)ceZ9el%Zi'Zi5lC+`1qC"3HCNT@$%hHa1e1lER+E&qTc lq[chIQddPSZKQFK,@#5ZTBIa1R28jjf*M&!LmRTN(jcB"kGjV@r2GbI8J3(IX#f MLSlf11@Mb9NRCe!9IBS-[[JJUfb(R0V`)05hKZrjqD*B[E"[#b@HSHHVhmMS5aV #4N#a@LK5#MiZ(&'2X!KNmLj@(T8TMcU8LbLTd3LY"&A6%4&"K&bJUZj%'&A)b`# LqLe&dXm4813kcj-cU3"4m-,PKlSM`pQ$N@`KKMcGFHRANY1Pq)3-qf(A`EKVbC! !1*5Z*FdMFF1FNA8fPqV9a5QUN!$ImNNXB,[2ZFjDM`($lA#q+,KjK`HFLUSC"XQ *`r&1LlIdibpMqVkpq`IhG'E[2p5jYf2`qmL91Mjf+#-j25iM29Q+aUAEdq25-q, 6NhM!%FU8i(F!*Vm+Y!SbdS8G@D,$4DV(MSS&0LaXH'K+9CPj[EYcDRM[SIe6dEd G,$+jfIVl)%G&Lc!KHrP)5l`PJl,!EZjBmYd,MP6l'!MC%JA+N9#&JaE,@MJq[h8 XYr[E@pc#VF9-Q%"++6pAQJ9&rRCNeF03BaCrj3"PG0dYD2#Hqi5Km`H'HKfCZa8 b%b2jB%4`S[RC'fRU8#U"3d-jhV%(fRdB,)bJTGj-i'kC`+41eRK$a$M'Z5be[VZ Q[Gcd@j[Vl,+!4-1d#c[3%P,fL&p0[*`#X&`QE`61YVZpeI'1UhKN$)"CUijjYm` mMP4ieahTGb`R`BL4-D#TRHfYX@)X`S5HDQp&GP--TE*0`a$ET`mTA-[4)Sb-jU0 J$-84JjQNkiN32DQSH$DV89TKFLPGbJbG2p5p@Ta4e'01L-15mUk-R*a6)P'F%Bl l%ZbMpiCpiLG(r4$bkSiFLd@`V%[T"eJD),A)FreMEUKa`L3%PRdXZrZ--HD-["S jP[ekGRH-TJ9jQZ"TCDU`f09M9fQLRbCHIIeUpp,l-NPBZ9NkjLc+@fPEifc4-A9 '325M+,+hDAq@m#rdh!XRaZYPY#%V6Apb92J6CE8TS2!bE93Ed#Der9UfGP5cD,G SAfS,Y%TYUECBQkA9DS9DEU!ii!Rd"lS#YN!dF&XJ+h!Q8"li-2"aB(kJ2M!V8"X S$13'Li1M`B(JC("r-$YS$bB(6`DA"fZ#6F'AJhA"'F(0hS$Ai'hcGRRhHl1pGQq bpk6hNRHKGkjhLAH4pal[E1r@)Rr48*'TD+,)@R5e++8SVXKGp&(4Hd@04I9&XiU Z+pVUmr['I5EIK'qIlkV[L1q-ld[I3Pq6lf9IR@q'Er-khlUaG@hVR1[1VZYFGf( GNA@ReKeEGhPGpEVjkqVAIE,ZTR9ceQhe"raPrL&r[hqDrkcIiErU2cU@+ri@Rf2 Cjf*LR9eC[XE,0'Aj$LmGb[,E['a4PZGjfDiX2q5PT#cIif@cXRbAPejP@8e,heC P@F2,fFVbBelHT5aIi1@Rb[+2HIQ@X[b!Pdh+XS+A0FUbNTI,P@89,dmVbkpjQDJ X'hMjT,+FbmZ,bV+4Pah+mLYHpLV,9hJj69PqMjGpbR)q,mH9jBZmp#[,TE3X+P# @rml,6FTb#5p[9*Er`FXkCIQr[(aC@El"baG4R)'2QiKkPDk)!$5TL5FX9jC-iU, 6bT+*@T5S,*Q-48rUKUVKSG+8#5V$FJ6i,5pEP)G-S+*fCFP*8#3T3adc$e@Q6'" #&!PPb8RNhD*-rlDm"@qYFY4TRM",@Al1bmA+p(*m&[,dqFT`R"cHMhA$IF`6,ZZ ZrTL[h%SAMNcH1'A*#H&0d4e`NUG(G&IRqDTAGr85Aa%"rTU)ai0)ZJPIm`5C!"` 0[6)"1,'$4)"2C1)&Ve1fqaN[le'@bhLj51RiDeiZ8CEXXB*cP59(hq"#(3X,L)A JPbKqJmpPRR#,MLMP2#&,eq8dAee3KQ62%Za8PK`*JfGeNH8cRVjEQF!H1lK'BC` *%M3Sbh1m$#M,2k*PB$1+2j)C#pbJ,*rRjA6G-Fr6-B&[G&I,q8V[!GlMUaVGeCr ae5AGeHGmGB[ZkLri+NYKkprik0Z8#Aq#ckXmS91C`-32R&8BjB3*1*ATabR5mh3 L`$p3p*FMG5#X1r)rk%SVd&dYiD[C5MG+c10mGBrZLU1MYPMAl9fqNMd!XkjpV*[ !5DpGePfaPp(FZUXQ[XT3YRH5"iNTbeGj'9'@ahQj6eQqcXX*C9R15j1br!i[Kj6 P4l`-+mZAD#PbP1@A[0bQ,$RCQ69D,ZIP(3S*AL$L%l0#GJ!jbSJAPH8#ARkQ,(r +bmq9j9r`%Z,UBV(L8*a!iCm8*mDL,#Li5P')53jpQ[+!(*j1C8&$p5S,1V*,k8! 4`D3mq$-X4T8&-@*3&K5-HXF@4mj&APH"NdcaV*h"QA-NJ"41e![!%3SD#Yd!U8' pGK+AB!$QC3CJ(MJU[*eQXDp4e(QcJdH##ldfp5miR`Y$hRCd("!DGkhQVUh))$I Gh(@T@#LX)LSq3HlG6b!qPLb1L#p&PIJBbk2LC5J-cU$iLFJ3Tm9&X8LmJF9PdF5 ARiM2ae[%Zd4B&'T31)R##l%cH(dF5mEVXeJ'AT@a)hK9a)lLpAAX)PjcBeIaHL8 @aH[&Q!1[IirY`qYrBfIaHL-fL9GpE"THEmGfir9bV"q[Iij*H#f+$H(eipJBAVQ a-VcbBhkmIKJ$VYJ!BBmLUfl6+VKhi+J)Q-cJhQGD(F#kZGKb1C!!cjHdQm6RfSq eHl60fJaYYPBB@#1U!ckY)!#2*5S$Dl4,!2c#J@E4&&L$T9[8Lf8JaA44*fUecm9 XN5qf!B6dDalN2j!!0"-Q1E9H!*0@,8f,DXZdDZf)&J03QFJ$[!9QJFE@&U"`R$` R#LG4)#+50b%L(N1"b2JD#R%SR%EK546H3B()@)l#"45q6Ci6K9G4)$+qMS)0"@3 he1DKm"d8L)`IS6#!`NXSY+&`L6`R#ZG4D%EK-JV&+$b23J#&j8M-!K6q#)8Y+(b )`K`8rS3m*`T3CSZl8%$f@c%,K38Sr"L&Rj,R41%p&*DJm'FSc%GK)3T9+2`@K4S 82L!&,`U0+"!"[P)Ld9Y+*2Se4k*riNMd+8HLrm14k"k140-j%[f1)p%0()Pqcj& S0NHLhh!NQX14k1mj%QhL5(3c4k*#MN6r`*(S[cN5EH&)p$mFL6E,N5MSKD,Q&5$ RIBB@m9d9m4lBTSYBPeeP*!M*LiGFC6%LibFme&rc8$qAK`SX`9#APD%@+d0pTK[ UY+X03ePjm5![q[$TakFG(kK@A9,-L5'hmMDHj@dm`pXSi'hXiQhXj-0cq(#MqI# c1,a#1Icr9`iI`+9EZI`2jA+FAa!EJ8SEcNh!1pi-GG8-+$1VBEB#V2l`G@Bj!,9 ZN!"BG6m2FD5"B6*%0R#&AK2$S9If(RTjKN-[+ef*5la`dNYm5Gh%M,[G2,RpEMF rp+X[*XD2+3XB&B0VA#PFU-A9-HliXGT"(%2h4(Q"4jehZrr+lBVM!Il1GBS,(PF l(Xh$T,0dmF$[-*NLH$e)9De%e$p@)QU9%P%EP)MDT%68q8T%rCi58CFU%IAI1+) ZiiLkK#2Uhh*%r4&(e'miS[i,4p3kMUKhFN5Ga4(e(cQLhX%4p3mF8Ar&5A`A*r& 0R-4radPFbdNmJj2iEcL*Ve15q#+5k4rXdC+*&)EBmGb6VYeF11jD3i8AIZdUTN* 0YFXImf#3!'dml#pif"Yjf"mS`rSidi,3#9RRXV"E,QHU9"&6DeMF0Q`R9*KI8G` i56"ElE,c0+%Mqa4d*!PIpM`*4F,Recm*TF*l%$kVN4`ekj!!E85)4FKNX'rHJ," "V6FJcTVFA'M[Gj-B(NbE[!G"25$-Gjk''0YRC'BL))a9,$)hRjCH`FU"dp8"$*F BcV$Zb!RBieEG'FHdjhK*M'$R!Q4bK$"$p[(NjhjA`B*cjL&GASJ2pN0%iE5eRS) 5k`kApp3RXHD(-RBf#UHTFHI5rXDGmiP`&)$,L&,+41'4b*KJpDK*3'$K()3cqM, D3,LlJ,iQ-AdLD!j3([GA)[04V%`+rR&ERa8UaH#l+%J1@I@V!!1U+(`P(K9$k-P JHi3414$(%56b!50CI6T"dM+r"`RPD)5Uk@LE)P)kkKhcaVc0,e1@0kJpJfh2[Hb fEa[c!GAkfVdRdi5PYIieqfBmG#)EU9F+r,$mQ&X+@(YY[5JF1[6IDH*lRkD-55r RrA[Pdr403$eC3Y&%DNR3CG""NK46*Pib55GRKHN2LBJA!mQpeG8&K2E@LR0!K@r &Ta#I,6#GeUHUl98abST44dq$"i0P0V9,4l4LC19Uq+S!U,5HV`SUIiiZ"Bk'TRB A6kJ'8VfT(8*M!a!SQ)YX&$@fRUq-&T%fT4-+lX%8*ZVZEA3m)p+(C)050!bV#1p B5qV#k56+B8D40H3,9A3YbdT-ZABlHTV@f[Y*EGqdGJmKjlH3!%SIBV3C+HNXJ*6 CY0EC)TUVNTbYCU(i$"VUf88XhZANJ3CS)&HIV@I9`a#$3%RIa1UNI&BYjFBN%PZ M$"liN!!L*4m(c+DT%8aPJciIN!$)P"[#-FLf&TUi$41hN8L)@45MiGPmGB[fZFc D@C@KLU1%j#4K%qUN&pk3!)F,GH@Nf3,aeCb+G*QXL"`bB6pP`YEe("&hB!0(a(3 -B",6mEN$RcTm2Jd41X'JGM6Q8dGMVUK6fD*V#,AHC+dr)14ZbSCQ6a"+(a1@(K% hdZBT+`!B#PE%drA-ER'M1E28G5TM%*!!m0pC+4D$f'XVMh*dmr4N[M9K[1lkc,I QX9QE199$C&bckPBSm$L51#V&SNbSr2XI&BXq41G-953B*T4q#,-`SUKMLH%QC(( ddfA&5cbSM`HkG5A(,bTaI!XIhl[4admSapqfLZ1h869$MT6`&&jm)&$94*'JVJq (3$MT8r-%C!A$"pk@(K-,'j5!NkXR)(XSj6KG3RGq+a)@RPrJimf6QFL-hMB#FEl Z2I9"cLE+5%-GSFMj@*eJQN&)k)iPMr@TT-[C8R'*A[5B(#*952,'(aYDJD"'aE4 %JYPb0L("pZGXS``qP'!jQkTZ*FqS$PYf!ZBPFck%U#q%N!$@3NK9SQ`1-JZN*$R T0pC@r[YNUqXUXN4VVZLH+DK$VGCSjCH6V5cUa&-V[h5f0R8R62Y`Ama2Pm-QmA( *aaNhU&hPDfaZ)MUP-,+IYLFrdN@1,43jj#`m1E-T!iFb,88Pd#-[%bSI3hJ9!K8 bJ3Vc%ZM[UK3#c5+&6f8b1E'955@)eCNc'm5+jQc#T%)QeQ`cXA$%!e'BXbLB,'+ 5lCACS-h9JB!4%KE)Q5F@B,'J@pGY-N6Z"mTqS@Crc+m`kDl(BIkK`*J$`)!I9Vk JG*fQ)dU+5K359Q2#&&EG5NBFb%LRR2e%)3m"2qJ%N9[*dJ[M`PJJ)aHbfUIl(Mb "R$(N,#-$8[L1%-&)l,BNb@j+K%#Z5V$#P4!X`J5lbJ6E8S*JG)48#X'N&4+-Z[Q 9"Cb,p6HZ4M#k[U%8JP(AJ)jJ8JQ#E@'#&HS**MJU+D)jRfirJXUc0a6JIVA9B4) CVL%'"@lP9bZp1TEdYlH+LY'B6ldN)(3P"%ScEJ1",R,'[khX@'kViU&SH$JLRST %&BMJ#EF#G2U%(S&p3`9P+XLY6$)$E`$0e12$TmNB!Q8PYVVCLHR9!X`+3$RMILj Z9lTaS#Xcjb!a(aD)E**LAJ6U%MYZqcNSh8VE3'!HS-$FhXq6$5b86pIVk$V@Ell `mm@iQ9P6V$LdS'$Ac2LXN5!I8iBN3ZEjiT18!5aJ8FL&,-$UJqHf6[5m08$QADI e[0@1V+[Z%3K*'fG3S-l+6B1D@1bmcf(R[9"fhXh1pCU%$"`1S8cM$-Vm![8LZZL Fkl[JA0IU`3S&**QZ6UISJFmFA-mU1E8%%%-26E%,+K#QGY-"'[0N0NS``)I*(8S GdSmU3Vk0$%*5B(T%#k"DZ16k%af5F5Zr0[0V#`MRV"SMmP@q5d`S"q8PKb%,K0A fa5kS(N,cUPf8c+89-J01%&i"S@EP"D%8NY@4Br,Q%H(6a2YiB6SGA%2NB@mepRl Q@`0[Y6Z$NGlhHqA(**bY-UJrP+pH@$(,32[XHmV-YHZBBkq)ejV+q""i(mid)"Y qTSNMCCYL$,QKbCmq6P%586YFPD4HAh6[k'd+CI"-K!,DR&R8@%p!LY66&)B*)6q %cZU9S4U0pHNLN!"$bafT6@%qaQ3qaS#(-dSp#),@J88P2B9[KTjiTAS3"RU*Q1m IdF4E!d4DpL+cfBYX+X@,!)8KHbM&Z1CX(EKMNFd#PHU"2PfP"q)"FAh("RNJSHf @$eb*9q%"5qmXYLRHVm3QXJ3jSZ48D'AkK)%Xm2`V8jA6+F05jCRhZj@SqRp9d%j VVZZ0fcDVHeE[qi0iK16Q`CNjTkC%`MY@Li4%NVS5*&P-PfTd9,HP&I04@h(`irM mA$l5@Kpa`d`"$(%)rma"VCPB[BfGp,@p@TNUIJmMb)U6),-6UYLBNbf-,(2EP)a cZ@E2%e6BAV`DfhINC4&4#m#VaL,iVYkCh@JE`FU1caTfEQlJehAmQS(Z0eAp2h+ D&3HSaZa8qIMK@"iJ9`eib&b!6h@dp"QZ9H$(D`P9aPCGMEKMQ`S#H1IT6%[-9l2 !)X#pc9L,!2FSc**Q[T9L[!Z,)mBEUDV03Y*MlklCB@eU"hU)Phr-5kkiiK"m&Z( c+6jeq0b"ch5)9ReX-q#9JSq%TJLZiq#kMFb(Lj-9Em$d$,T[Yb),j#(E%DhC9UQ 9-5V!38J%S#apK$5!8c"+8@p(+U%%J#+!UT''d)USmQXd9Tc!SkhFT5b%2)#6F"1 f8@c-$@I!&&1ZhD)++YfI3N%Y+L1)3$!l2Nk1!4PlYYE$Z&q"pHAPlZA(CjbmhQE -1EYXI499MkN$TKUXEhHCi$#q[2`iQC'h[Jf(DcjPCB4Sh2&,*md'-aU0m`'Bj@C 2lCQ5Kd#(A1[EbCYQRCc[cKUA(rKJ"SqQ!R8eTJ)R9,Nq3)Bl(UPiQKfr&R+k9HF X-+D!'E03#IJ[Dl59-l6"+BT5KUQ+E""K#dfaZC`Y3@r9%@FV-Y("QDGQ)pJ4$)b dH$ZmRAKeHQ%`kfN2(-i"!ZpF0TLkQS[%l'FQ@JL9BDc$j`eUh!!Q4T4V0PIDdp6 2ear45dA)2!ecZaLL"N1d+C1I`q0[m&Q'cb,c%-pKL'r3UBf[2e,0(QNIlE"q9FM 4b#4UCjlijdR0bbrI6'3NercCA!Nb4k12+5TCM"$QLq&MMR*Y9JBr&j-M#$$U$YP K*j3+$B4+**!!-+(!3Aa$J@1N9`%!"B&eAaR"f&)95!`F,4e)V%b5LTPS!eJ@)J0 Q+RXiX'iRF,D`iQF+q&a,`TK$)%h-)dpaU925j-fD`G`RMIA`DR"U`-!0$1E@Uf" ZaDhQDY`0bP@E#U#DNEJ&DX6K4#-JYi"0DRc(E%DMa'-#1C3%BG-DL(MY5UH25ZP 8S"Ldf+)DY!Jj0@4ZJ$eMPKjmAjVj9TaV#-L'-6C"F*5m)bdVIi!!)qlLP(R,b3c B*ki1f&-A"DMhU8!p$5!$mfBR5kN`%H-+Ue3phk3c$m*4dp1S9P`imkq20qGPj)M FEDYLY!2Gf-10ACPLN@8Jj`"NP&8P3l5A-Q`A6*!!4rpE*hRNqN[RmKV"QAAZJ&E j2"&cNUBY9UBG+c(Y'+DG9kVL+M[Eb$#*E*3R8E)0Ne1[CS!AmbIH%!bLJ,M&P8P !VQqfU3a[VL3`BeYPd[88B196iaE8Y!@1h9chT"JM*`9QG)#5TqVKPDQU4aRTHKY RLXqA)SLFE4cdS%,[DU%'4Z!P(UMDM@@lXRb-Pj)834-Jie)8#"U*(YPFp-!HX!d [hCF9Q)6*UC(LUKdd[,f'M%5%M*RN,C!!S8h9$-)T#(FkQeQa-`Y+RP2ia'%C38& +*594pGeSMJ@!c5)k%)eB2&f*M,J3"aID8KMN#Vab-`8,@T8Dh@5c,56+HULHQU, BdR&+S`U59UkEIN+GMLb$"6a8PSP-Z"`M%bid"'95e'"3!*QqfT(0bbZH4LHVDZD +2#`A9H0+IU$!Yl&a*6`JidTUjLiH&Xik%'P8%FfYf$f[GE,)ZYLL,A2EKkl`JiV V)9#mc3(6MC5GHCa0!*+A8TN8dp8)E['LLa0#TZ38S&QFm@8-MUJ$ckjib)B!$4p N$hfVZ0+#LFZ4eG*Z#D*E$-Z2S)iT9LUYrm@9cA`DJ!h5C((@mf*l&cmJ8!LC'5Z 1+0GV1%2kjSS,8LXT4"iCFS99%UKEa1!$f+B65NB%*(B#bIZN9'Cq9#8[$'09L8! S+EBYTU3`Q-f[51&$"F*RbYBC`[Y5cV6[q&I),kbeYqfC)[1*IlN-N@pFAI`9-[p "hH#r0aF(Be+S)U*fFK8V%qFicBrS)RX0&$+S5!X*Re&m2#1+-4`cfK$6pTMJP)r 'aR86H4)rY13e5')HYSbL*Lf[R%!9IX)@qB+#&aqrr$BNP@e!`bH!6a!I,cj&aEB U(hh+(U*SG"hUlpTaN!$,%Z#APemrH*YH[kCAS!S!bdr83Sj4,H`d8KB%[5QPdYQ kF"2BSNcJ6`TU"-C,(XK4K8Ue$el#8"d+1,E*`LJ1H!G@ipM9ELSL`lZ1ZUUU(K' Q4L!5D**0RF4NK0'f*%R*i,'C#!GRFcmj@Fi@3l(525`60(XI'KrUTXLI"m!0RZ+ N0063&Xc*(k$-(R*Ljb`hXaV*bXCQ!JNGB0TRYm)jdCT`i6TVDmpC$L!I'BebPT0 5m(SNKl%*hL&JA(apa&J&aGpbeA#)(8Sq)+d$0,8EQA4KfU4Gca+%TE0dL`pek1D 94kBP1mYe%qPL8Gk,R!lGKDjM6Q*)b8EEM`bT`5Pj8Ml-S"cQ'9'0C9&(L42D4!4 @RBf3!),@@)RXLLCV&+mqDa5$94+iAc&(98mC+cPUcl@``bc%qRhTGPM&5HkiPTQ Z#Y8Ec'DbE*&EKdAJeSIKmB+)ePjmLVji@(4#j96&*RI'+1+iMZkCSQSN3%f1F1Y m5X)lb"3+4C!!`Ep(G2%V852IfH*r5*PL8U-50m+%"llRe!GU-'@1ZYdZ1KVQ$X- ++X'BTcNH-SCP@6j*MHVFMQDrN!$P%5p[hcN-)NMS2(!4fGe[MeU"e,`GB[*KIJ$ #Da*9eLE4F*LFT@K"DQTmFQVUc'R$MfFH6FMU6%Kiq+"PAh42r*iX%@UkL3k@ENI ebZq#*qZl2Fh"!DDhkJ,!e0X"I#*cFG89ZEQQ$e13!eBIp*53!$-#'-b"[pT`Lkd A@GTZPpkJE%bNB,8EB)$`mD4V)F@V-fMI(@kN$!piA%b6-bFQ(ijjq$)JAeUHX-6 (["2)h-[LCd`kpk2hT5F22jk8R*ij'"Grj("bHRcb`EMd8VDXEMKRXclM%8`AMI@ c%BDHlTc0e%4-q"aRYPUMN!!HaXpb0V0TSIlSe$a"KKI4!0&Ri8CL-'Hch3qc&3E McYKiZ*(B8kidA(RRJ9%QUYFqJ'L$+*kcfD+0J"4T9PCd`B(*)F5e9R@"QPh$i)' BJib@1blCHrHSK2FURS8DbL0cL%AQbAl1-11*M9qC!VNp)mdMAM46YG-LUUj)VAe ZbQkJ+[MG1lS6-M*!Pqb%cX0(ikl&29jDI-LHZ5FV'SdhCd-4jND+'1`%#A,kSP2 UaShjpM&iaDXQDp[YUVPQ0S*"Pa%bXk5rPTXXG'p(3Zf2ZqE+6-pJReND&m$P2Y" alG4K&fF`!VX3J#PaSB#Ac*jPqB6JE$+e-&DFU#)#FTH5QKS1ilCqUmQ+r&VqIHl clReZ"#EMG%d-8U!#%0$IFBQm*NbM#kAcPV3TcV!C9Vf2P*U'E#8,1JD[hVFh@mP DXZr3)!`d6N@c$dee$!Xa1J3'X6A&bGPhq&T@JQ[+3[`QQ8fabmdd3V6"!-E(3&E +PMCU@Gj#'hM-5"XiSB*'ZlBU'jK0CT!!m-R2XiNqj9%Z1k85SY9k-LR(bN&P5bh #k6XVe1&b*@aT(EE8Tc0,2pT4pbSf&Gh$q@5!qbc'*U)(NrFIcNTI1B'c9#,YZ[V 8#EcVFQN%IJR-l$Xd(%@1V-MHD1F9dI`B'0Th1-Q5N!#8(NQhC$dZCp(b6"*,&Z4 l"N-A9E4(`6F+3j[lV2ej'@UQDj-9AUNN-qLibkF`ijHGbRI!51I8i$j4[!i-G#C F5bRei0Z8JcZHfX%&(j8mq0XiH%m((aeq$NI[bFL5$pp%TJITF#$!0PN-c%#'5Xa R2T%6BM8'aZJka)#K&Fh)E%+M2jZSf6ZeHi%rEBUD0laICB5Gd[0J"'P`p9$hhZ( Z`Bl)RJiapL!B'Nk21h8BqHbkVf9%$QDB(ANTEl0l,QjdcbE-6HYeNXRZGFB*S6E Y4dd4GLbT(bMCY&qp4fRDckqB*f!c"9ia,GLP@9pZ1TRKYBPBHkJ4[Pr2PSH3!*[ Tqr8pbK$QKM)"R21@[T-GGmdbH1VDiDaV4a'hQA@e%FQU#f6X1TZDM3`$3%1&JmQ 8+a1&ZLrA%@6`kZ#KcN%EH4Fjd*6&a6c`cU0!AChT+iF"28RdIN(L)UB[+!2r`"G N4Q!hAXfL(DmaiF4VA%cl)PYdIC'&r8lJj4@6A`b,H3"$!U)&,bmDbkX#D&)&`,X +)!X!%h+!I3@5J`b1MiU5*[j3$6DT,0$%`*Rq*d@IY"kL9ekBlYX1%lMK"$m*3Z6 $15$K+ldC[e"J$5E'Q)PaCX+$Pdm-f9$eaQFFCR*pPr!BCQZ(b'6ZT@%829rJX4M &DebX`FXM*,b'4"X%qhVCm1JBUU*Y[l0LFKZ+%KFP!,YHH`B$5Pi%DK)+Bl)K($) "L#J`$K-@pdr!%%(Tdk##-%pLB!T$BYYHQ!BDrdZB0*3Sdq![[lkI#pVApaZSXZ" A$[8V`ifZm0$9TT9bU"q(qPGiD&Jj0,a"KiBhi0!`$Jf[m&#$FLLEHehPSDY0+q9 3!`ieV2c3%"LV-f#T*NIIPC*G!PrI6m)j[2"qIEq5G2i962EV*[Z9lDpXFPJh1Db `[E,*"YeN3mKEN!!T2a(ZLE+`N!#A-d[lBHkN0bk!#&fXSY'-aXT+"SbiZT1l91P k!cA+60[I6CQZpf13!%)HC!Yl#(Q!3[-!KH4KFa-TFL*VHc0j$&HBSJf-h&"#%XS SAd(RcC()l%(4erFciL8XEmL8bKF'md8VAhMPL`(e`LpIp+G#U,A,@)$A"&$d6iT *Bml%J("5*ehACLD9ArLq[Kq4B-*XI[`'a@"i(aX-[m%e5Nic49Y#fl1B!&#,j&8 VAb#c8-B#)$TjU5TFL48G3lTMp'TCD5mU0IHbKdI%9)d99'kLEHXf[j,1e+Ab"3! J2fZ,YKe'*Iem[ap+)VVH5S65N@Z&3m$8rZk+0rTEGCdhJ(9NPYkR-$mUIbTrLHV X9P,YPpVPASN5q!L-G@2bL%rHVYS%XSS+*c#!SYAU5@FLTclX'Z[2CK3jST-f02& Q!)B5BZdN-Sc!'-,#aS*CEPlQe"eAe$PS0Z-RaRJINYk%+Y@!'+#%*-99b(JaJ6i 'VLVe2BaMLPeNN!"a1k[)QYjYHm5+5c``4FRBjS%J)dY30GA#UTP1)((cM6QVCS) %JZ0pA9m6)hJ0C,mD18H#hf*kCP9H3mTU8!9Qfp'BCjASLl(KcXlZE"YBVbB$YQV !"hA%qSV,-ErDR#3hd@%H4M@Bi$4dYUK+,D#bMaFH*f6f,(IYmGVMIjXVqM!"$62 )8f!%rQ6K56)$IiHlpQ6Yb4rP#YmGJcc*Zl*KCYQFQPQ0%A55b@Lrj&Hfh@HY*d& P@Dd'C(D"&&68[AfG*ca8J"Pjkk"Y8&kLkEpFmk69(qEi-QlGBbcJ9bkrFQLM-#" 6-"2U%6L`1L&Q4#mE3!'2)TcYE08KIk!mD$kJ'0BQ8k-(&)8#NI,CiMibQM`Nj6' RcQ,E3`S3dXa#[E,AmhHF[kJ6BZDTc6++5*N8lMLICd)iK%)U#'8Z#l1*%",'kU5 QYA9rPm*MSMAHkhP$Y*T5GBR-)[ja@U`X3K94`i1[H%#Vb(%bf`'6(A2d!Z"Nr%X R!-k0h4*)'b$cFm!5CC83"%Fh*BK$p(U$`'fS)JCJU(#iVe+d2A3%0Z#mC)J4k(* U2#`Ae`CFM`Q[V"kp-k),E!SC-94S-Bk3!0VlAbYI)U29j14MqCqK*3FE82ILqRU k*V124R0$cK$+#VX8`U(CQkQB)S+[2CNfCC'9&EaGIG-3K)#'J6KGX`rQ6GD1F%2 C$J(&XcU84-BNYE'H%aN(Xl*3-6harF(ZB@-YSF15$VXbZ!Rr4%+AS%&i4SC0Y0U R-E)-4q*ed**#$kN4%V9jFQI,qM'DaK[F&%+-3@R35')0A-%P0%NZc&jXah"1EQl J84Vd@YEK*&U1'"LpMfV"pdLaF*em0%mG`'$p22cQNCBHr&1Rq!ad%$qicR`X0Cr KiflEe5i+-$6)`&%L-@hl`0Rb`#r0R6I,RFe%bjE4Z6"K$01FaQc1hZ)M*!JUC0Q -[JA+9N(H-L)hK,k&fHGZQ&rE$F4[Sh%a%X3BNr#i9PS@#%-peY4$cZPLlP"-(@L k(Vf,(f!3*L9&UibSRC-AS3l[f6H)4P8HUqdVTi`+[(LjVj`V"m@%BMFDjHV"DPd pUjV1%fBTK@@P(Val``rQ5@dP[E0d(MpS!Z!DAMlK@`X(4[Ma3[-"Z%,M#&JdLfB XaX8iAKlKHI!`UL*$H$dYRXEM86'+"j+3!,"S%ff5rdr[L!Ij#,bfLqf5[a66lZ' qjlQ5jH9+PZqKKqN`[(!BVR!B&MJ-Lh'ZMRQi1SE$J(BH"ATr013)6TY16R*rkTp R1fYj1c0j#eLX%@Y8)Z'UAr6MC4)Q[!!Qi,9El-DVAE4MNP-imHS5AELD&*0Bc"2 cX$L,YJZra34@fAZ3!0R$Ua9D-MNjqr!60eE)j%aQ%SX*-D&R%JXd[iAA2V%2,kZ `iY8T1[pd)SHHiE8b`f"e,E1Dpe#!&rl921+D`C[VZ[V+)AU2b[bZ)q5*,NlPVGV RlF6"+8f1U9hCU,pIFN5R5[(Q'2k['mh$@cGLq&kekbU(6hR+`kHXH[K2FZAKGhS fB(LDD&#lFB-(AN+ZV'6SdmV35`VQE0$35d5cfLh[S)-h2rDbDY+8NPK[+!aQ0Km 99DlaYNI&Cj*fU8,8E"m80B1r%@Zf@mA#eCJD`2#'[R*k`BKA(hj@b*LkpB*Y+fH 3!!4Lj%aK"E1TXmU-2!`YF4bC9r1[*@)284%L5$9+i6-U2%Jr*D@+LZLd4ZQdN!! lN3VBV8kh%Z+a)GG0JKSNS+0FeN#KX4")b5&#LT*BL@ib%i@&R@V8Sa5fjqM8Z9@ ZBP5,DqbN1U[LLc%SIaG'UX6#qk0'ih!9CqTIJ%P$GSim"IN%YSM,&[ST!*X*UD1 `P5XhCd0!&3B"5a2%8UibUGc465B$`ph'RlZX92P'SPE#P,%I+Sj19N"#c,,!Bmh F9DdSLMFKURiH9DGN@k-3T'`LB%HC5Jd)V#'3!%hpd3pbd!fMDLP5HPaF3Tad1%2 DQmJSq%-CPS2*`mPiQ$P[(Nda25V%@V6A0@pHHQ*m1ZX@eUlG'bSIQY+Yc-E9c!* &1K3IU48*Z#U9Q01Sk@)d!P5c&&1bZ#&M)QrEl335)l-)ARH#e&3iVj+kNNRG$-' MpHa9K@,qI6NUBFKi6%D`a6%D5%Ik!PRi#LLC%1%,9N,i6@4%6#(mILEm9KhK'5c @%Ij#(X*[P3N[U6rM`lm4*)mrFLeZB,H8G2K-HQVbSaY&IJ*G@C!!R6`V0HJ*",a V$AkZ5CAD60DZHj30'94ff4`U@&[YN!!p5HPaqV'&A!hZ9je(9Gfq(J4)kfI5ZdC 485F(!P85cR)E"[+#%ASG-2mQ"AA+jKcc3$4!Y&pBM%ZTHB,GphFEMFS`%Je$(S3 cG*S('UGSc-e%j4NbPmA23L)!)EDS'K!d%m3[%k4JJ8U3!)*[&)+-K3JL+BVr$5' +FV3rcdDS'B&%%L0GlGJqjGMSRqrB8&+3!+G55!C9,*[2c%2krPCi")15FC()R8L (kC%5UYRr2"9M3kKL6"h*-3m*4e1'@'UH-#3`E3iDq[&cIV`4piJJ0"NKcM&YP!) &1R3P`9D*!f3`P31b$JFb)Y[9a@MDe$!Kd4&8aJ,R&d(TG(YH9B*UK0a%2bM)+hQ j3LNHkLB&8bKc1#8)L4P3CD98!+G*$Qc&d+S$@h4U4kHi[R)L#bTHAK+#J,PQ(Z* r@PDaGAQ3!#%Q+J8BdJB$*Kc)%lXP3"+ZIZA6`cJeJ&A-ErU9aRf,pB'rNT!!&b* ZEQ#J)Gp%d9)*T%dKC)JBS!FPZjZ"8lrKjhEmq"Mp!bQUAeU-%EI$Bbm)#3#&)Nr Sjk!SQ8irAFQ'bfbAmfkf*$2+&RdP"Xc)Fp'3!1r8)q1)5-fA5KFL#JdP'e1&b*B K6QSkRZk&Z%%C0AhCpPccp''h[D"Y8$U8K`"(9'G9*kbCDpi3CGKapbKJ!"eSMMV c,"U*fm$K8$b5iSQD!@5&Z6("dG@mMQGP%B3-eICG@MR4,-(k4MEeklpkr,*Ed[5 %-5m`h'r+1A,`3Ek[J$MB"+B+YPiA@Z4l3S[[hV1D"mR2id%3,+SHC0X+R3B''%' 8lqkR)G6)6-!F8)%,+6UDNlbK),UU5&ib39@8LJiJc4Yj69j[X4XE-UiH[IbRp*F M5-UFXT*A1h0AZc+M3p4Q*I8"98%X*-`Vc)*"K-VH&5ARcq@2I%h#8E&HEX*&)f1 Q1AC'KSClTP4d)&f+!3Cr2$b*V`U!D(ef'3YL0$aE6dBbc$rHD6CekqH$e!aN1Ai JC%N**2'JlDV+9i`#N9r'i0@5R4-d(%@QrY55U%J9T6"b,kC9bK(E#J5$(,&h(Ld pBZqFaa'lQB1-(@"RJ"bNh&-Fe8ej'T261G*h@X`9SP-ElQ!@c&#lVZiKd)5c35G 3V3SH8E0bc8Z2T36k[B5-c+hV&rKK@GkPVk90T85)5+3)a)D#SHhNCZQfXelGc+i UFj!!Z&kGpN`BJC+A'Tk*4HA%LHeIqPUmcE6kN!"$ZL%9mZa+-`qT",(j5q3KpDD RjCrGSfbY6PELX'LR2pf(B"3QcT4)aBj5VU(I(+hkemY4BeHK5BdDrAK!2iQ&Mk8 )YQXh4lNb!"Hd(&FM#!A5$[Sj9Vh8r"Bj839@#8hl!%KQX)!5'XPaZImbGapL"YD V,$al+8q8[9f[J*&8jK&iCqX#EpQ,#B-D4$e6-qc@2d`VhaM((G@-3hU(!aZJ`CX TH&5pUc%r$d0!lUrQ)"c6QGL9C'8Xc1YULF*a1Q(8V+$`G*bRaPTFJ9I2hA-ZFQc CkFcV*!M0H42e2qZ)JH3G6$B2d1#E6B+![Aj%cHM8863MGmrPTFILmhP+8!THZX` H#90&IhraKh!iVMY(eD-3@#F&3AD22NZ"Q8d!6J1qcRENHJS$L$+J+KEqr$8L5e1 M'%XT)d$c`dD!MMiRN!$e(liQ0HpaRp&qf,$dYD0VlMR(LPZc8UA0Ljp!i$CTj&h LCb"kK['cX3ckcFR9DSk1b#LS1PYJ[#dkG8Vl"LTS422`M()i'f&%+B18T`PE-l$ AcK@qdhQ2laHSN[Y980a1eEJYb+,`T!*`2mR9Z&aG0BiViVTUR$e205lAA)d,UTA R`C[[@J16kNkdd3%brE$L(*L0JX9Pq'3)ibNCh$a-Y6V*M[UGP*k4NL3Gc%K2Y%! +-Mf&"-SfVN+Y1(mJ#68E"A,fmY,3q54PRKMKB(VB68e%LH)mcKXL,C)[R1+M)KU dD`m&l@BRGC`0)c'iQeBkkQDfDLb(UmM,d#a8@2'L3%R%F[)i1)eU32a8$Q%&h*K mP&k*pkGcS'j6G4Yc#!5mX+brT+p#P(BjH2-II(R4E@BJkHD#r0"LPp!pf+Cf[FH h1U*1GELH2CehU&dHh8,5,CbkK8&@dDbmkV'VIN9"+6YZ*KE8$jF!XHAUGQ9*F$a 5bFd'V*iiBb$0GBS+CL8"0h8F*X&PDQM!6p8p-[*9QSQD8TKCV3SJ$'e4L[U$rah 1%h"%bcGf3'[Q(mTeQkiVFC!!Ef8AH32MNP@NMGM18plLDNG5e@MrbUYX%!(h4aU @T8Rd-3GbV@B@0+$&52K4Qk4#AVDJm16%[T83fp1!T1ZcPl@U3Pl6d'Ara5RmUV% hmD'PJB(F2K,`0@HZJ*LUU&'FipdK")ND!3iR*+8H[CD8,YNK9`Q%'L(5iV25Vm@ YlUMbKGaKhMbP4ej(PDXSIeL@Y`UrlDJ+B2l0Q98L,c"ppXFd4'R9l@h[PI3@%15 DCRBfb&2LCjVJaerj6lS0@QN2AYBp8!Ci-fq&NK+P&FkGX4%r[#BA2`8X$p*I3C9 2@f(82))ID925QcSSSaq$9R'-K0PpS!AD)rQb)ff+IL!+'U6U*30l31"UpQ)%``& iLfA)N!#d8Xp0)MMmde4iFdkYK0,*A$PAM2h36e@jKk)B6@JPiLh*ZG%K3JiYUM, -XUdCL'5095N"!Q$0V0l!%Dc$I2'0"0&M4YbV&dXCF'5fcCIceBVA'$++!VciNKL 4(qB@),")c(-e'eGfr9A1Q1SjFVUBG"jZ%PCqQ+8#UMPS3Pbqh(NGEe'H-UjfhlQ 9fI$QVF59U,SF%9ej[#e)p$-pDLX8P)k'8(S@84,jSJm1GdeI8A#S4Zc#QV`4UU# aT105m"i$e[J4-p+MU!KZ#kq1E[0X&+*YikEhFT82'9P!`RlZD!AKZ9+,hefN&%9 -3@Z0NKGI3B"8%N@j!Flp8jV-6SG*48XCA[NdTEMY8PTjfVGK0R+VG-LN"q[#[p- KC8,0cdMQc['qlG)VRaiYd(G8$[H((250BNmQEPRTT#+!BeFq!4bjNQjKdLdmHV4 Efk95KpqiK"jR4@V[#J#p(,8L"m44`diTDNC[lN`Vk65[M"AMT98T0CAK6DXHRJ9 fae59(9FYVdDR&!-bZ8TArQ%!-Q*`*F&r564XD349XM9L!cI*!BEjQ#9L,$S91X4 B8p+,Pcbm9'!lC#E`M'k,ZQ1-MAQ1qA4eX((Rj)U!'r2@l[jHRFl*cj8&XbJJ8MS ekdJf,dr9rZif!N32V6!!M*B'#ZCmA2UfmK)[aei#5&E)R[2M8VBEA3N"adVCfS$ bF&+hYI%5!&c[kS2Y,&a*BYb@KqhH9E'R*rl29P1@j%%bKeH%C&l0m36+X8eRjPL kHffRm*V1Ylhqb#%)LUD'R#Y,Q)`0ik!m$PfHa'[j53NNV@4BFH3T,9+`T`cVK1R c9rH8+iXZH40pa4kQG)qDem["*&,TK2DSK)BJTjG%49C+lSe5!9#f5Rd(')M1r0j LC$[)r"iD41YVq0lLKe!XHH$)qRjCm61mPS@5*,bNjhA)@Ym)045((pJd`!h!%J+ X,6$VY4R(hfJD&HRH2Q68'Y#NSNXRS6Uj33S-Y1jZe5G3(`(4K`8DUh8Lcmi2bl% `%FV&*%lUe"4-6(@UkF&'FDq(!NC$,8fr1Y-p*&DQ*U+&qrUNp15M"qfTUAG2Ha2 9K+kCU#)FMNp0BL8m2AP#H65cLh6aUFPae`iR*q%kGArdLDa3Bf%E1&amUF2&dh$ amR#kc&3TJcGIGi%%E'C[)j(bIeX%Y2GX%89KR#kaU-C#%9mN!395P`rHr$Hcd!R #HIMT#me+G@B8!!iQlDUr1&@Db+1DD1lr9206UdbqqDmUqi5k@M%T6TA+qYpNEbM V1E8bkc2q9&KI1GP,B4dr5'(',8#hHkN!4X0YNEEbrJMp()Mcri6-"[1)$6#,#l$ T`E3ep(0UE5kk8TRGZ@MMQ8e3BmR'NCQBpG(a9-M$E,J%Xf%GXf&Q0[c8Q6hm&*R pB83Pl!mM'd,Bf[a[*@%h0K,8eUU%VDhG%-)bXpmb`Qi!Xc+VEA5iSJEMBa8JY45 4C[HEH3lp3MNd)@NM$jbajXpli!C%(2P!je0a&2MiIp8I[c&1F@P-r-fI#K1V*J3 KDkfXb(S[*5(eLF-Tk4RbH*2abBpEdM'pHhqm161`QPdH61q$%M(3Rcfq3dcc"11 +&KehH1h5a!jUDS,8&a)CET!!d69KGS3[TC@b%6PVZ2ZXXT8h0mV4QNL#MB@iafN r1L"RP)%F)PkP,',JER'P*fFPa$q&"1[q9JbrdLfBKdF6,fMI2Yf(*#P$NqEYX!H "S4FL@6+Z3Bc[L9,5j3R&L%81'h-,Kf'f-TfDa4MMRbk(Rjj4k,cHiKI'(-U-TST mdB$*#9N*6k6(P6EL+JEFYT)"$eSX+aK3r@&%P09+0GX%8-)bVL)IUDRLi#+h`8Z Jmm8TfFLjfiPa$bH9-U3D3@Bke5Y#YhCPANYkq)N5AJT"rHpXR"($Te-#P1+&rN6 [Jm`(8D*33r*`QZG*KV[GGhi&Y!)bDrc42[hePG#$ED90rr#pdUIrLE8NXl1(0S4 Cpb0kEUHpQATIHNCk(1*CI%*+H[bTC(!1pkm8"`C(r0lf,6NL2Zm4"(cM4b%LN!! #N!!m6YjKT8*,K)DJ)ajD@Bb14r*'Zq2a2ciDVh1H9ZJ0U&GmI'RXM'd31pYAiZU &Z$%c3j(B3mlP-CL&-m*F'f9GSNah!$MQ1+RD!"BJ#%KQVdbVm'ca1NGe432rr3S ',Xh6k3G@QpPfQc!lmeTLDPCkKL[j5'V)(FU6T)Sca)f@H$KEq"K)D5!6*h,clqa a+p@+VlXG`kjUb%MhBC@'C)p)ap)1G,k@pF5eaj05-a,3c2DT&A+PlpU2VQJ(1b( PF)CV&9XKS62Ze)01"c15MKbf*kq!em04T(3NUSY+(SPqkL*q9#B+SmTJdmKCbPM K1,cM#%FFCF39$2JQ"N`iQ,b4)iU5@54q2jFpYf&$[IP#[5m[H@T*SUmU!MfaUJK %2lZaU6b,-JVQalb8*90kF*@4k)Q94L+aSC(SLC+4+,!"NHL*MBp%6k`N%ZQ6D(D jR%3EjY5[*)QH@-hjcB2mF8G9#fKh[cR6qIhdj$KbH4j1qXq8p'6S)j1krP2q"Ch T+DQ@DiIM8JpR@Z3chVb@"IMP@R*#A1UHV&6kc%cG6d3(!!!Yd8&%3e)$!&%r$e8 &GN8M)(2PlP6IhE[CV)MBh4T0df"$5KUUD@T89H2HZhXM5&@3!ie"5!M5*)f)H(k 9lqjZRT9%U)DLU$('U+SDeGCSBSc49Y9cDcaI2$G889A9@*[IpqdQi[RVIfIHFrl IFplcr,hR("TF!34"!!4"SNK69TbIEPe4d5hVK@$pXGdlLcPF3LcARbZ5U9h-b%E 6b15C3Xi-UN8I1c3MHSEXUCeaAPVYP+@eBf8TXdQQmEki#NP9IUGUH'V93fkT@Z* ,kCrNF[l(Z+k5AQQYjXF2TTr*!rPAF5fN1L@,[a[hZ645q93G&@qRcH8jDPAm3r3 [mM0m5Y`d+95jcUI(cC4Z+$28@r&TG+SmKXq+Qbhp3IP!I5&q,*dVYe'pmDr3bE+ (0iYV*HQ8S@T1r*X9p$Ij,Ij,h(!T@cR!"m3p)EfZ2+[q0IiS(5BIj1ki34,)Acd 8AdPGFU5k2ri0fPpqM6mDedrDTj6`j,J&dN[+YqVKq#+k5"kK(SYrN3k4Rq-ra-f 6MLM,eGViKqNbH3@I(lG31U1Fid[LPNTRPF9UG,b2aXJAe9AaX4@dVlb'2arA59U VV11GiriZl9"qVbE%Cp)ZFK0[&rHNp+(bP*SAAdJlb'h9AI&lk*rPRIa[FHfP!+@ "pill50UU[+rZMGp12jDlUGIL%qPlmTIm(h(GT6Y+,l8iIK[pMlb&ra6A4bT6FRR 2Z*qPhFVMkKIa"E5MI*Vlaphl6IT'ZDhq'(qF4XPheIAa[p+RjHriph%hTFh+!h9 Mr$rT&ANPIcRZ[V4DfF5[aMdLr9ZjT(i5[i(@bkPU@2ajQL5Ii)&a)G)Tj532L[1 6[PBZUir&4p"JfF5GFHQ5S+5S&q,$DBCX8-9i-hAiC-8Ka9(*TcK3ie$&YLVAH#N Ib'r`3cb49kJ9@N9TaF#+'a@(+VKGRfr-XY5TSmS(Db0,"mU'mMNM"@Q$AC!!&)4 iHcL&EbJ9T--@34T6,NMj#'N)cb#-"&1(a)GN(i#U%1D--KP'cXNh'95DC6*Bk%L 6350a)!@cP%3pK3V#-l*9!Mb3!-45%NHaXh2b"8N2c+T4m"N&U936*%d[52Cb4Be E3!IlITpb2'&h3QjC3UE[piVKaq*Y[R8CjiYp*@YHHY2hQZ(ejl*p1FihIA*6V#m cDQHKlmHYZiX62Yapa(HqF-fa)li!Al&8X0rhB[3@al&B!K5mXh$heYh(m+ClN5% ,19rmiZ#X8$li3P1#Vc$$*frEAEbc82arJ6DeNY,%a'XqPHS&UXSqeDIhUBT"cj' *a*XP2IHT,2VdXN022Z`P-**H&DKHpZNc9%kiHPP5pF"2))%(8`#LaA)p*JK1"L@ !LBq(p93e@p@*9-p1%'8L98e-&C0!G!#E+N-,eCX0HSD3!$)"N4Q!V9S0C9!eba6 ASc9L#HNXdjZ!0892mI+QR)U8bNlNA'G+mP%G*d`IPFQ%NJ!3!k*-GDB8"X"e9-k `!TST09N48*hS)'bCqNb5MSSTeZ-kX`4@+J-KTq9dTN%R'l!Z1JL)6$5B8jP+S2H *e-Gi*LG$!Ydb*5,a'[&5f!6!*S003RbN(m+NYq%3UG&RpaP0"VZ4qq`+*8805f5 *F'6m0pLj%HpERp'"$%aU0*06!MQ)ml,2U%KfSq`%#MYRa`e'NXPB*'IX)J'P`!3 )N@"5U0e-CV,$@)eF)@V#Ur9Dd3!%jfL0H0A`$!Zm425`#*3b%FfQ85B#8U2)S(a fKddbQ)Td[NmL33aQ"X+6+3Q"m%&&-+I%6!S!+TNbb$TP&)E1JQQ*r96@bfBFN!$ 6E3M)ZLdRI5TR-,a!%5Ka+`Bq$QXB0)K*0R"ffNQ@amRPY"fQNP@VJ8LAj&1VT5@ 5bJkIY61YdYM`SlG9l*i%f5#54J!cUe`4*F*4l)3MAcC#(N`i),KS&aef!J*Mi8d RNlIG2B@Yf)+46A#DUbBULNk'AU5L@E+K)hT%!f2Dp!5,9[a-MbMKG!Bj"Ci0N!# `$-!Y%mfLQ-l8X2HX$,a*e8HCq)bGbXk6!N3fi%V"$'&m2SAND$dXjBTXm#&D*l" '%K*F+##LL5Nk8iCYLYC"`"3(QBLT`-&C-2N8KNXd+'JCLN*p,)S%V6QG`96cL3V )S#253*R6TS4a'!k*JD+%&+e)63jbAN6,G!#8m#Q6SeSQXe@E1GA+`8C6p$jZe(1 l8EKYjb3"m4[e2NamC%*+80*M4VhS)+#Nk3&-$Q6,l#J+9J11b!BF)9*LBNCE5'9 i#$icMTXG"#G)f8k-jNFdXF$Jd9IT0R5N3'FJ""["B49(4+[8Sh[eE#i#c`8RQjQ FM'8f%$NF"#NDV*`"C$UZ8eJKT8G*U0FTV#68J8jJ#"6eLNi[Kj!!"Di(AirL6Xm 1%)[VC@C$,)K1"L%RX4-Nk%48#biifF`'K"F(J4*Y(TfP*heJGV)6"&8k8Fp4j1) )3fmlESCS6#CcUNd3AJf3!!)fCdXC9K(aJQ+D8FEE)%@L4kDU4qUh$d&"filHACc TfqpF'jZj-YEAC-KE%bhl46m@ZqEmed,$QS5#BMa-L*DIM2i1YEKa("lGD#)d&)I [E%SiAeL`VIM(iYb%f!rP`%BclT%qZfpf%"JCH8qch`6J"++Y5-I!pcDVRm8MDG@ )Thkf(1`3j2-m8JXdZB*FMq4@%-)36XY5ERXNUa!##)#AcT1Pl9'bEcYmKZcm)S$ Y-$@K@Q*)d5,#I(Qm(8''&K[0DSY-*%$IiTSJj8fAEqqT%Q2Al0Q4QlHY-$0L*kU QK3QjFNT0#XLfCMpj68$aYX)Ge@b#UaG`G8I5QNc8&R-`[iXm"Q%B8$[P[a@(QQ+ ,Bf'*iS6FaVDBP%9-B9Dr1ZH4[MT+*ZTA#ZEjQ'2rAfd%[M1b90a06LNZ1jfEYb- h`EIlhX64f)ifi&J83QG"+Q`Z5pY#j+HhkFC*mr@fiNEp10i8TkDCldd%$L[*3$h 8)lA5NiRD5SGj$mbV%)j!dbjC+MZ&`$h1r[eBKf3djHhBZ@CPJLpAbQ1QK2eE43" q0F)Z3GTb6ACZV@1`+8d*K6Z+!`L`)BmCH+2DDKIJ$B#pLG!Hm%#rY8if60VCVAU BNaThG+Xf1$S0bA+%SB+drEiXl@f5(40T#)D*LNS`0%[c1*XGBq["HGZ+9qDY@jN E@lJMJ5P3Qqd(L1L4QQe'#"#N1b2NP+eeeGec@bK,+#`qZ+e`pmiGKEJZDXSVh&% *a-fSfZbq'VR2(#6RlNiSh,QQqS'HEhFUpQff6ZlPj6)-TTfl#f+,e`3`NQ[fVYS -cD4C(q4S*XhkUC%&(LR5(`%G(NR9b&4*a2A5)`Qj#CQ0#@0m)QPce$a4iQN$bQN $HQZcL8c80ZX`pb%[4$#SN4HKSlh(%GQ4k2!M1Yk@M0Vd'JdCYHN"a1mLQ8iQDTY &Q0p(2Y`M6EDSN5JC)P%b4-lap)eXrN0[Kfr#JQ4mU5I[VbPe*Tp8*iHcmQ6bCV- kZ3M*4S3#0A*Sil,%)rARimU5b3@X,('d31L$d-0c,l)I`ILfZj[FFTcDUHVN@6D e5k#f&j*&##ke[fjmYHi08*eM9HYLDTfe#2N)93L3!+Srl0fra20brkT*1fMmIFp DTFjU-UZc6L)[4U"UIqMTIpTcZrq'Gp$'Ch98ChA$q3I)@b+d8IY$V2iJTri0RX[ pqdfJEEJk#aZ#NY5J4Qm-2QNlR(eQr(Biqi"CR9f**)a-e0RSQ0QKb0%aX`[8rKG *Uc6E@Q$+cVcG+pI'lNj!Be`AZl0T@bia,m-3M+3,3NG"5N&G*b5AR8K[bPX6L`F #qjhVBYFN&"2SjZVXUF*PCmF*YMYlU$SE'dK@qi-5q[F6k3L4VKFTXYq*p)T)AaC T"j%H%HQ6)[e-T,@-faPAG5+Y%ZP()ZdV8S0)YiPd!B2q6U6V4,T,T"NLr8+N8dA UC"M[-YHAc4Y%qT0)XaQF*Y+PT'T,23`TUL%QN6TNFK9TCQYT)Kh+d!&kMdJ(XM2 2-GB,)Yf,+S0)"q#bMq(GcR3X&ZN3N3DcK454RK$Thd@k4+4E4"STdYkXiMk#cH2 CIPi5b9AD#LDa9k3a6&-cNGi4DCC)Nd6k*828PBNB*p)h4IU852Fa83*%qSa)bd5 k9D5(4$T&T(pLV!0-1'KG8kd[Rdd#QD!ir,4)(a(T"b,e%qN-N3iAkI0-TQ"QqYH B6$mcJ6`LV@1l&GNqd4PG44SPdNp%fTbT9*J%Q5,Ya6SJ9+6h4HS5k8U4@N4k8+3 bX`LD)US8p@c$k-XEc1lYfGlDL25L5'qcj5&-9PMr"fDG(L,pPZeK!G0aPZhjZNJ I&ZQ[)TdZdUXLr8UNL5*G*Y+2QE*&l2m"*NS*-`dfXjT4c%PQeL#4EQ#p"@AhQ"c 3rAieLCaR&Yc+0[N,!reDT-G&qS#"EQ(@,f+'!fJVN9i5k@-3RAA2+Z"Le,10p9- ,"Z4MU(pPrI'X5-q)p,")3d6k(YX!8$K%HP5N`m5+&cK9iRdA9mASr%qhbZPB-05 H'YDmT(e!FPApKMRlHMIddcY0A@ZlC#iIFh2cV+1pLSIP"dHd2Y+ZD9lDJie6$hD ricBDa"lR1UeGiSdkhLDlCql`V*!!8qm@YGfe+26UTQRl2piHDFN)EhQQmlU&Bqq ZRhZJ6pQ!ZU#6,Bje+"aarIlUkCAGVP@i9%Q1LqiEZpKcljYQEclqa@qMNXjrqY, IGLjik0)RIhRYSkf2PUF,Ihcip`R,r[$pGl2rqTpYc`kqr0KRcchji3qhV[acaU[ rq(+3!1B`rqlXmfZ@[R,lamP[rEclPj'"*cirr1Fphclcb,qR[2(qh[kP+4IqY1, [1qDrm25[(lcqdjBR"[TprG@,6q80ZI(bbTQ(hN[8A4Ch&Vp04AE+XBQr)+IJM6m &Er`TQmP%RE)+mq[)8A41ZD1kFGP+Zk(`hQ!qERiVZh%Ca#FSN!#QY"h0Zh%+UXC 6iMdT8fBa*%4TXMUP0fViGZ3aeQ3%S1U4$2")8lhU9#mTe'3TZ"h#6B5,K)(h$+T PETmRh9eLI900$9HR4UMZIC1qP[!bp(F(6&)KUFr,KD8HbmY-D1+E%R,c[Xl06-K PFi,ZjN5U-"Pji`#kQ0@TlC!!Y#36G5VU8e045jQ+5YR8%DSE'h!R)j!!9c1N6e` LqbGf'Mh#bj-)-#0(RB%+bibab,'A'CY9GrY*N!$k*ADDp13GG8D`kSkTJEi-D&[ YRP@j#%`lGFE(kL$lda2@qKYG&-bBVXj!IAK'#q631-1Y$USkdILUBAUD1[f-1LJ JbVUYm0MGaIp&C@rkmBNBf&BcRSihrh5mpDHRNSNkr5EQqj(ME6kpScV)@LFFa1U %5+MRCQ5U&GH26APErKXTKSj@LTPCCR8QD'rQ'6*4CfC$LMR))FR-NqSJIkX8p9B T,RVm)P2([q#F@$eqCXEi&BLCGk(Q[ZIbc2D0+ajN3Cf*kkqCZ2kDfG`k9fG1"DX -dq8H'U1SJcV+cVe00LA9P3ZFMDP5Bp!ac@hUli+0HMrkME6"JfX#BR12q0L5(jQ X,-k0h9QmQbhi+UY&ESbZZ[i5CF@8YrYr`S*6fmeU$+jVBMU5#Gj&m0hKe4LB,kB V`Ka"HMU-*&jmM#"GU533J[2TBBf&cRYR3YYdf'dkl1TLA,`Y2S"`5T!!lMiJLCI fNjeA5KL'5q2EBiX0S49p9'2deV8DUh`rcJ$[k*M0$)Xl3B5j0@CB[)5BBI%ZT+K %,hB*d[G$5@)cJij!#-lkc-Dbj[dhXYBBJfLbUdY`ME"N,8)C0*P)`Sca)*)KUEG TX#PBZfhGrfcT*AI9*Hm+8[dXMq3UNDAEk'-AhJkZ9E)8JUjeSIE[3RRV3KRX3KR X3KHl6Z0LZARMIPf(i[UGUA[AV#kYmdK,J@YTK#$Ga0-6&aVF)*4V,T!!PJX&SJY [!pFFUejF9VR3@Pca0VfZhJcl)a2ZmafDFUQrZK5l[368JiCLYhKZi8+*j#,0(Hm I&eU(#f@3!![QGU(VA(JIZ3UJeYHiqkThqdk9BXr,XHIPi3M("HNff42f1bM'5`a +p!ledK+LfNYpAPVPT84hJIHq[HEb`RTaiF2RN!"VQK*LFhRd"1@3!#pkY&FN[QL 6EI(HQZ+Y"3R9`PAD,S9#',HkD&Jqh&Sd6(UKXLa,A@CNK,MX1RD%#q&P+%DAl4H N"fePkB(STIZm92(5-&PkC,LAiZRA)jfmG)-XACVUTD#Q4pCjR3&&h-aAU'H01IM %k$Pl5Fl$pYU,fE6@AVXU@cPRTfTLSQ%LBLddM&DXK9I0MBm`5L0@AaM&C&hB`D` Zl10a,V54km@9&mLE$Tfi"Qr@0@A&9SUeZCf&aG8P3l!9S&U%qIRUr1[M81)"cAc XIMjfIkAh[feRkNH(Njb[2Uc14heX2XU+q5#lq9d%U5pU2he&@ESi(!(AmKF0#,$ Kbr0NjmYp'1BZNdKG3hN6e`)9D-hcA4iTf3X*eeXP[2SfjqA'3LClc@SbkSc*H1D B6!ATq30H@ZqPZ2$Y&)R3%L%Bi3K%4h9Zi95eJN,Le9kD#Qra8Rmm'-L4TI[Y%I# SmhjS1,P`'F-Z8NeQ+BYqShCI4$j'p%MG&hfY9X4iDE+A$P8Ai$-%eB[Ppkh,liq hl#mDM$SXIfaGrRLmjCM%da@U8G1A@dVYSl*'jJqZ'kMcH&mCmiHa,e3p&2T-fUh V0hc4jml@2RaQ4FP,4BH22(IXaC`hXpmkqYF$VqplEImE"eqY2+6%VPf6QE"Z4m$ 1AAZD2Lc-+rJ#&qhEbVBdE0hqlihrA,ebeHJ"pYljmPTL51[Jbd&hVlkFNTS8%SM FcrpHe1fEhpppZ[l5e8FHA,RrmX@qRCl[m[[1IfrrYlCrE[GNYrFk2YlcjelrkI0 6limqIVrl2lUp&arAihGGrpMb6mdrI6Fem"(I9bQYQV@C2'[fh!pmFbUQ6CNkBrV -Q-9,PLj2mNqjjaGemr[E6emD@[rJrT9R"cc4lp()rZj"VJVqIfS$@65EK2!,BHG 2RBKil16ATlmjrZ2QlpErZZ'6AcECM$"DL%h-#&3b1*cT'I-rAdCE)eq`-(R4$pr 1FiliE8MkCm1(rC)a[Jdk2$@q$6SmeFJ'RlIqc0GLR!hqdYJ'baE16ek`k0Yj2i` B-[5hiEm-'mm'Nrb-06re(Ic)*d!6r5N9YLaR)VraB5mfqY&hq'Z-B&@MRp,S9k( `dIqU6kX6B&EqkpriZfR-J!NQ&0Bq#E`bQU9a%NekL)i'`B4QkP4YVBRCcISc9C! !2YI3NqAFJTZ@l(`8cq)MH6iIc1Y`#j11Hc"8i48-KIS$(mYIi&Am)4l+Rq&Tr"D rMKZFI$bDRq0RH5erQ*rK+hJ*IiNAmF2m#(m13`0H4(HrL9[RhX)JQ,pLB0AVI"p rMHrREq"'f&Gj*@k23NI&mV9m$HkZ5q$Vq!iH`(IbAA`2Eq)ImN+HKe&LAr"F[TX AmffmM'rK$A`Vhmlrc6IbIr,9I#9kr9p"X*IIi9rbDlJl+i4A"22,2)MIj9Ijbcb &Tr)NF!1jMHh(rINp(X9[mj[mH`!pcH[j*B!q`Kr`+r`qMPcNIANRrMc[`Rr21r1 rmrEmEl`Yrc0[ajrNhIKl[#0rR2IN2r0Hr$qm$rq*pqBImBrjql`lr`F$L-Fp4,` (rah[b[r)@r)rmHEm8riZj!L%PUr`Dm@Em6Cm-Tr&Cr1jr!-q"lpTI!UIbQI`kA` QMq',q4+qP#q(j2lB`6e)(FAN[3ej,r'KN!$j!@5p`TrP!rJ6["prP%IbrYc0"h% AVa$rlj1!M(X%c0c%"4l1,r!`ITkIiLGi"(q-Rq4Imp2m'hkFrmJhmqriH[iVhm! riC[')i&r"F%i%X#))BNEZ)-lH6V2i22jjh`CZ+fjMEf!,q6*I"(rJAr,j`&S"2q 0$`(SCh`i(mCr`C'h)i%1r+Qh*3%#%-mV*NB#Rd1'chJ,r#BNJErJ0h%5@!CTjd2 H"C!!Q-Ml!q3G!K,i$G,q!RNR5J*F28NIP4fP%5IKl-H*'p@(Z5A%C@830l+)Z9E %jCF30l!pFe1*maB5&aT-h$-qjSi5GfXpFjR-06$AQlNfc-dPlRSSF`HC@mfFNlQ Hc$8RlSD*1ArQTK(R8jKV5ead,A--k0`QjZi6GeC(h)Tfa*@`!rYD%(H3!)RbDM& aPHa!C5jaFL4aCT%iJ@deh%lFq8VQQSMlHJ"c,Z*1@iMEXBZjUm6Y#L*Z6`"cla, AP-eF2A%I-L0qZ*!!Z%+QZ*!!(5jNiKDbV4DkLFXl`a`$bQ2Qb'1'bjY1A)'AZ6$ QQ1J&c&Lj$iJVBqV,f#E,jK#hK4PLb`(Q6M%hR,L'lXbacQKJREf9LEZ9Q@$VCZE BYVHbl@ePjYl+P'eR`QeIaacE`(D'BLrVmVe4c(9KMK(6AUEQcJML[Mc(A$Kcl-! e4M6AFTJE5P`L-fiL!deN#iPX`iQVQ'1NB'#GDV"0Q$)(Cfi-FicX(-`3$NDDMS[ --3*b-$91CM)RBcQCkG0CCkHcaT!!cSkP-`*+CmC+CjfDFB`j4V)C$$5$Q51$N93 +3jI#6*aUC)jeCbVVJ&5fi54'@#'-F%-)iG)3(fZ&)DbeK6"k#@&p(XKS*(!lFjf CBlB-C03DA-FFklIJ!ZEBX@"'kCGC5lh-C,bmJ6QQi$,VbFZXCi+B,%%-44$Vmb$ @jd&-L+#2Q@2SJPJ2"c(&IUaRr0LHr&K2qV'GqE'5`)reL4mV)IcLQC[&(,1aIcj cE2Iql,!rDrIqCFba6ISciIaMQ'0YlKkMiR[AQ@1+lc&D[XHXISqeNRXGQ@[*('X V8B`@SPMC%-9S)BV4FK3VHfi6HT&ZPfJmhkMa6JMGMCTDCp5-*S4-SkB9))#T$d& )0QVP&U-f#X#MjKUe`GH0@Pf$86X,S$2"#&f0fSSa#!V#*S5l4Ud%KejUJ4"Te)V ')Za(f)!3J*!!JI!Z`M#MGKL)$f2Km$S%Ik0fa'h8RMZ'8)P`('%Y3Lk#!H%"K11 DCTbUD4DITP@YeV39[6AYF%Y01c*Fd`kedc6aT+DC5M6Y3UDQKFh4Y21jQREL!)+ SD4&PQ[EB')4V#,ddl@3P3Mdh$PqPSTdQBT@QIC'[DkVDDYK+)-ZXdE9dY`QD %B)4N6GZa80-#mK'1DPTDP&l,bG"VEjMdfU[lpGSK*)IDk6A6DVdQq1ZeAcN#&RK qZFC$bcAY'N+,FNhI'm&GVPRd#"%)CH9DD@5jCJH3!,ePZ6CUBENfH!a#Uh+YVU4 F'hLrA2-#k*@ZjGS,aR+Y5N5B9kipK-@(fT9VSF2,Y@FD%+iL0#rAdR,+Y9ZT#*K FVdABK*!!J6#LA,Ya'Q%$3J*(K$N)VR,0Pid!JAb&#$F4J-!(BD,Y#&L-0L# d4F!QcN'3!(0!I[BB`YabV4E#ejj"J,!V0L)i%6SJ$%AS9kk9i("*Rh,YTA-)Z3J 2%+#i+"`"'cfmU&alEPUjGQa@ZIBL%,kj[9c,,N*BKr!a`VX)dmZeYi)3HT4V4km M(#rArSU0lfY6VVeQ39!3ZTGVqimJV%+iL`"$[`(J0b$8'c$#'jh,YB0H"$!23N% P0RI)Ki"18Ic,04Q!iLN%'&#%J1BU""MV!K4IQ&UZKD8K&*GV*f#BL(d)6HMFX4D 0CeY!R4DYP&XdH`j#-%+b44Ye%Z%Z`K+,PS@&V,B)r5cDb(#%GJLBj*X3ZPQd`9N )ESY@YmLL$Fa%!!,GA)[Qk@V4[*8@E@b!43[YE0'H+E4SD9"kkjS&(@V4cN9CY,0 39!Z%+qiJY,&S4AD%9KEYF)0&1a*MdBl&@l6XA4EYVAd@lHKpLrCk+J)8R9L&J#3 #5#1'@E6(`(LXY88lQBB!S00R%+iL3,"[)-!hXbcDF5Mm%BGq$E0S'b`)f&JX$XC #Z,8`3%!G`MU%RKDY5@I"m(K8N!"*9*`qBcLj+Cf@NRX@TC!!hUDN96PRq%2AZDi 1`l%9DA#@LAUmKPBN*[0A6$5XHNCeiAL!Q*,-Sqfe2"qh5ihKTF#%jd(pm,!jRQE KlZ!Xh"IS3hAZ!&0#eZ48jd&8"J0iq3(FbfX$5ZhRQj!!GaZmf-VM(+-apQrQY8A m"5qqT)Q@HUNERc['imjab,,@DqK"C"VZ08`M$kb`JdXE6%62-,a)$cELH4U$i,6 ('pL$9i64@6c,bd[2L)4Pk%f3!%le"[EQKd,T0*kPik9ME%X,b9+-0h!KVpKN#'H (dQa,RHNVZ,AdT$HN-km)2FF1(6521e6L$9R)%kY%YZ+cV546CXEJC"jlEMrAR@2 iC,BfRDaPNS6CkMCXpDpBSAl@*&BJ2%pMN!!D+d5-Ei9H9L[dJYaNDC`9Q1$6[)( *[')M1TXF#V8YG@&@521'G1%9DH0CBER9#X[rG5Z%%#YN"I#X@PiZfhKNAhCfJ`Y ZDUV2&)2aQ)-'Rq5[dTCmIjCmqaJrFj*RCr&S'X4$Mr*Aa[,S#"1a'clPLI5CD$i X+%ZlPTJC63k3!"eAXlJ1Sil@%YUZBAND6fd%!T*[ldhUrEB#26e-6,)$T1cY4%l +IeX3)1Q6M`[#-G)k[M+IEkcPhqAc@l9mIcjr[CERj'-!)cqCcdr8FP-qPf[jZRa H9-[2jR2IDTYp(e#2aq%D4V%YcF*5F(8NCK+QkLDCaqZME0UDC&Jm3UE'cL6$0)a 0bkbCqS#KC@E!Y-QD'HGkJh9mF48'"0IKdVfQEl1pPj2jUU-RH@J*YiIbk$(Q'VS e%B!-Vk-e*fepT-I4cdFXHaAN!U02bNpDcLZF93jme9FPk!eh'rHIjdNDK$k[FLc (ehrCHR'H*aLmQ")D4DaDQQqMc"L#SU-h)iEldT6U-QLSR",F!TacicM5j3dBXj2 6U#5m[-'8iDZ6lR",U%f$fh-TNJ`XfFpI$q8jSIbP8(i1$b"#q4L-&a2C-Ac-hei dY1IM*X'0*J@0*TXE6IBeQU69)"+FG3S[*`f-+8q&mZMD6Aa`QZ`icZeTYS9KZ%e 5CbYa'F5BlEcFZQCPk3*U@'j2#'&*!E5He`'2LBp+XaR8eG1'#'NI+p3'DZ#@kR9 d@b6Z-cG@iJEcDJNEF$HmG4+*ZmEdC1`!-CqYI!NZ%*+UG0bHhjJQaRK6mE+iAXP eqmRB&QPNQTNX,L(54C*,%SlH#U[K")2MUiS!16cJTIEU-JJ`)IJ!365FDD4[ea* 6HLbH`*52UAQ"A-B,4+[Ec204jS4LN!#ac34NRrP-k[i"TK#el[MS!F)QZJ@D,#G 9T8h!phQI61EcRDY+q"%lAe(&Yk6aFfPm65h(9re9KI*EY$drKIDlPVq*@3irNQp QC0bDk1-Nl88Z(&RDQe`fXR5jaq'ZBS#YN!$D'E2lIhdN(NIf[D-M6KbTDARr&@$ MC6mX9qK-[1i-(d9EmlTm8c@KlQ00$CqKfZ@*@4EeL,0eQaU4r'9XGBKd[BMM@f3 p4lN[AmR`Q2MB8)jEq!K9,V3K4EU%A)*c'k9@%r)5f@P3'P8[9U5&mF'KC%L+2E5 kK9JE$b0[d9"F3e!3-NI"&fPjPF!rH2R)0&j(1r#cG[B#l8Jqk'f@KBqcTT2k%#N +UbCN!p!rQ5r1fF$(H(P@%46cFhCV,BS"i[BlGMUFVTk!#5KBBMlHPHAl)+Ge+GH ERXaMXMGbReGafSq3!0%X"&f,DS!3+lUe%c!"K4IXUUSMh+kV-6F!Fl`K3&KPiPP MdE5UAmM@NkF)N@FBMj'QJCG664[(m0fDeKDd11FdfpeB2[MBH,[ll"4Z6lA+Xhi #*U"#L$be2#ZYXH*`HS!ek3-ej5pj6BG2f-3cBXI3j*VbH)!RLC48BfR('PirDcP 9eUJV)iFU4QRe%59qZij[dr'#dc`XJLH1j@&er2ec21`S0hYjC4Cr,CmIeI%A[Eb SLMpmKVLMqB4EDH*2E1*l+[Qf+M24d498%mq46582c8M@eZ2SVb0C'CT"!mQf!qJ LbD,)`c55h5G2dMJa45&'qqeRpX(X'QEKeE10Q%99cc$m`0M@5Q$'$L3M40f02'C MDHGUCBANZ4bMq%jSQFdEYFcr,AAjrb[U(&$RHBI!'HlQeQ%A8YiD84Ti8*!!pQ# `fTj0XM3`!-'%F2Um0(#$HC)E``cMMGV!qHU"(*2HYG%)bKH0%E9L8Y@B#HT!9Gk Nj*U$'$L&JHblPXK"HkV)f8BV!c&ZC"FqHGq$%9Dk0)L(Q`Teq[15,Rpd)JD2Mm+ jQ*1hEb$&&lkP9I'X1PkkX9(c#[8kNdHhMr&4B5[@(8qi)1XFaQ`bX)akeA$D4C3 mBf6*%LC)1HYPkB@0)Nd@T*fR(j-fM(e-LX$0*98`Xli!Bh9bC5QY&rSmi"2(V[B Bp3FE#)ip2T,Zf55J&5(&NfIQQM2R*Ll[$(1EQ(-bejZjkH4SJ9F!$E#dTbcPS`, h"ESfIaT'Ecd3-)),NkkbXcL8SXEL+#kMX@CRF6FDDa5Gfe$QBj6FYK$L(@8FDiD b8p3NP38)KV)'DR+8"42%CFd&2,@QUmc5&Tf!jp5%fB![f-M[)%X0f&aq[@aS-1" J`eA"d0#HC0f4Y3''KL8%HUY4-'cGM%()@jZ`Z[@Ui0cDNj+aiYZ0!0VZ*8$E$`L 'lHZSbEGG`-0VaPS#h"ECX,F%4rFHa0'pk`A$AZ#JHhf%&d9L&a,lN!$90V)dFVN XhDP%dP*fhR(59AS4)i3%20`Q#,m-&k3[d88MBCpV2N'kKTXm4Pl(C+KJ5,3!4H) jC$P!Q"K'iLV#Si)MX40pdHa)A%,AQ"ddM%aS0aS0SX*e8pCqf5(0)qJ0YB*ND!) ,+!hqQ,55*AXVQ6V#*BH#("h[b"3-MU'3!0mCER#kS51G$-a1Vi@Lp%V"N!!H3DD V5#`Q-CM%"f5e(9EI*G2T*!j(c#!#CrJ%3`Ba6%B%-KabCMbJ2P6h8a3-fX#hS0K KLj5H!UU64-682S+8K2H(23f2YX-0)84a#'i"#MNT5k8BVaD5+cK#&K,+#Ka$$J6 Z%Jb"fk%Y-!5JJHMF`-jN5U`Gf",65'6"GB)K1"[mB"1*Q`N[8m#cES)SQ0#[mh) **80r,dF)H1$01"Nf6P["HEN22J)A$CGK&LR),ML$XJQG'S))SU!Q-1TYM)m*S`8 BNB3KqD'Vr!k!k4FZ12d+E8ar-!ReqF8,"[p`C2kV"6c!*R[aKr6q-B3h3($H1d@ 85[H+"F1pPL$!Hk`G4GN&2*PQk6l"FEX9k0ea-i5ildh-$5AZlJ2LRJjMEKMCC(d Q193r5b!AaN[0dY@fJJ-$#M5cid&EX[3J8R"F)4hJZ%*DVH&q+15i[ed`h#I#[Q` 4R#r2B`*G$"-FI@q5-hd(#)lR$j!!p2RkajbKh@J&1M8YAh#N(8%EP@kC"-FY*kd `5pFh#0*eh01NUjHGCmr3a6$$f3,-pm[5@Gc(@BYb5CFM1fXEk0)586S6,$M1$#" i9i`4R#X@dJU-`#e**TbA@JL1SJa#e8A[SY"p)"Z+KN%mI0f*mh!9ki,$'p#rKpH 45+Mc-'R[Kre2dP"C'Qb4(GSeQ-5TYD#,-5T@h`jIA),@N9mQ5q@JVRcFDQA4#dj ,'9f+p9+8mABF()N[4,#hT'HaZe%,dA,3J!H2%D6""c(T,MX'Yb+LeH'HcUak#)@ aK&P!jJA58AJT[0)9P)c4A#rJQe&H+-)N5(CJ'!J'1PIKq[fXf9&&QUAMS4+k`L` p")NHQJ@S!(`J5XS[ac-j!$)m3`UjCkib6R0`T,3F`CQfJHj!Ik5KifkPNV9ET#a fAUqPUP%dA0q%R9r2%"cA1j!!aHXML*3h6JZ''m4#0`T)V!I-MBk#imBF!R2$4IV G4aU*$dhFi5XNE0p0aQj1f!Ya)"Vd&je0GjLPD!053MZ1D0++T(2BiMQ-@E0[aQH S[HPLXh6f'&SXLVUcF`9(l4PdQk2f2QM2mA!*PJd2hd9*m(!(@J&b@&%V'&DJC8S V0JU1&4e3K%NVKJU1NZ-%IiQ"i#p"X9!b(4KlbSkA5%&TH#NABVld!)0GT*IQ#"J 4)jA#ZNAKj*cP8K-+YY%'@$Z0@YY,MX[3FhMDP+'b1`FLPk)dAjb+ab0+EZ(h 1JMX$XiX%3rCpb*(pXH"iDb2"p&B3`I4@$c!@%FE4ki4a&2HA(L@RbQ6(AaX)kd! GTU[`+6%Rj,N[4h$X-j'ZfYG"F,b@5G,AHL&G6S$h(a%FEf33G'pd*S`h)*F&GDb $AX&jF"FVD3lHK"J(m9+dl*1P9r%fX*b4RC9fZUT+G"lbd98BAhkS0r'5iNqS9RE +'qNUP&CbHm%Kpb)[3I'8i""l%M8Lkf"c&D%a-aTHq3KCZK!N1#ld)3XATK)APND @`iUa2%H@6L`8("&eC#&L(a%aSZQN)CZZ-C&aLH@`U$S9#DU)'Vi*3fr!jrrNZd- N1lDGP82DIKC+&ea')Xh[*MJ(Cp(jH)%2GY1Pk1bk4B*cB$*MkHBbPUHV)(Pl!"9 3[Z*#FN#@rV#IM&bATE&i#fUiiI%KU0A@bP*SCb6lF)p!)Gj`8KTHlaV'4piLG9F dYaZi(GBi"`3B4@MS,"UL%30NDM(kaBM'ZH)1U+X0@5SK,,`"Lr#H8I()YDJ93AH BE!fdF35$D95m#)r&)lNT1l*h%B*r#efK`N"(dF69cE,dHUVJH(d43EF2`p'QbBl p2[,UhFpH`'pFT%2-dN'-3F0YR*8BP096GKlU3BH-%CfbPeD-&CeL+Kd#EikK3qb L8q"X-A`c@lc3LLfH2dB@T9-B-iDE3NpKV0iefA&L&@P$*aB4&e&)L[+)BB,MC"T *6d+Qdk5FN!"1Z`A(0l0SRYPa2)SQQKdrXPVCMjh)iSq,"'Nc"J&@bSl[ZK$1HS` i,*%GklX6*,q'QI%KJr&8FBLl(AlqFqBSakeKmj`j,GeZpc"AT-Xeh1QFl()0)"( jE*,h@i`iC(KL-B$F,PFraKbHf$29jA,G"-FGdQq%ba@ja&ApjijdIcl"kM,V%PQ -L53STN8b(qQ+l-Ub'6@-CG2GlQIG6)!"B%'Z*jBlRC&1jh!Va2!TimqAZGfri%# NqcHhqcH$`6$!2Bmi`TTTbaMJN!#T"[Bhe2f%dq8HB&-aV$m`,(,fX`,pmZ8Z*a$ miLC5Mh"Ef8r-FrCc$hHkR!cT!LHa9+5l@8L8blNF'*f'%F`SMmj0p9p%jY@-C0X CQjM*l*a0$6XfR'#"m!X)qcGQT-JRKT!!fEG)RkdjZC4Nbkc6jGCNf!)#&&1YcQU XSBqfGQeI[h*cqZd32k@6dNhjiF&[I3-rk[iSqqX6eGm[j(Crrk38jCr"k8(TbZE j2CqFGqQhHI2R+jZB@j0HIbmN*+Tr80rK2`qrFR(iid&r(rj8I@"5Zj!!%-A3pEf ZACA%4U(,JUj`Xq'8Zb%ZCmC(IX6KD`N,pYiGp2rKhplMK)EGr3JT4hlkJCAF2dm FkbEFa1"iGpbRNHkj'Hm1bdLmQ2%CR2qeRUk[A)P"6PILiemHQqGDN[JVD#,aCkI V@V+KKf'DBE%,24[RFXedZ9UirQMih$mjbZPUL$BBm!pF(0rbDIGrq!dBTY#r-4H 5d[H4IX2DT`6MTma)5P*kY4[@@HQ%IMY"1UrY!18$*8)jIM0GqBRdb585AcBSj`f A$GcfpjC#jES,LeIf(R&9@ABL,#29,cA9'CL4'V,jZkK8aBa`FYcrRe-lT[k8qR' UXM'eje2+PIH8pBr,Bj8C#Vi9NEqJ&$T#a0FjRVaRh%bp(455STK5P)LE5Z,h9r$ &T"R"JF&%)3!!(,*"4%05!`!`eJp9$98f%4!KBZj5rffIUNGjNCp,VHdSL[4FPr+ Q5'V$!G'#!NqYK"j&NHT+*M+Va9e(Y!b@4&I"1Uf2Y5[dqB)"HfAX58M@af$'Qf# #S2&N#HBB6md5afGRFc,M*DbAG6$ff0M"a-'FPa#&IRrrVjqIC-MNpR+I2aZQ*`9 "N!!%34!%J'Mr1mXlA#kmH2BB-d(CQ(Llk&pV$QXqThd"Vl9,kFrC9N5BX`'9I&a rTkDS(AEkcU#DjRcmS-Sa@5k,XH0hXQTSI,&1(hXp(kr5G*rb$T%a%jRR2Q19*H1 ,ReZ1$l[RBjhRB`[-BKlcMQci59[)d"6Paa)ch'[i%39+,a4Pj"'fl*Jm@YF`eDI Y"1MrUU$mY$2I5FDTmBIHr'42YSTVGaR+pUKXX2V(k"BqHE4qrifHLGqUf@8YT[0 336[#,9S&P[,m[(h"rXX0)rcSF10"Q&5'4XNm&aLFXp"`0#I39(CfKmmBJKLGqiT j-S6Q[R9#M1+lM&9d6*KRPV$+2QUd#PcXTPGY[QJ4h#,Z84["UbTFLTGkfi,Aehk I,m'&`iSc(6SZT$ZDr+pX&l`JQABh0,"V4*Jj$'$jq!m&0DNDJa'KX#3ciH`-5l( [LQPZ#pR%22pD5)QNV6(Q8'29r'ZS+V'l)ZR*RY!*Be!iDKaUlTliVAYlm*JJMqC Y0bdFG0VLiVm@LTTK3j,+&%mM@DFDcX!@-K2%&!%'9i-"apNGXX6rBZAm'HFZ*1d i2dl%-QEM-LUYbF[&59MRdcN,04669b8HGkf+S[$D)&jYNf*KFH2l`fUY6'+""#2 dUR1KZ('qiY#*FjqGLdG14!eP6[(edA@VmXD0TV!@51DJ1kdfcVq63FGA(Gk68iB E(fq40*PYGM4N''*i!-EZbpMDEU-*DDYC*+h1chNT+6+N11GdK'a'Ip%FYpfcM5Z S5T4b0'hMDL%f0eSM'S0)lF9-+qCfP`T@UVir,#*90fKdCe0HK8GE0-$--G6mV%3 M*+4NqU`5dRY&GZ`q-Kl`)pjM)kPTbQ5(aAaA%mbH"SJT8eq9Q!&L!rEj(P)eIU3 XM*63RXJd,hJ3ecJ8VMGH,N#PS3"KXm+@b@KiMh8-5$1Ec0r41GPckm1'l&8aIid ZXr&D5$(kV#-EVp8UK6kV8Z`c(Iejjqf61%jRZ1Jh32#`aYUa(SqlB(lH[L`c,Sj c1E`1'b+qr6qPTZ*N*[EC"@c(AkrU3JT'c+ALU3@&R'MrjIJcA-bTF13A&'$Xhje YqL-84!X(Fe*)H3feR"hb0-F4EA6%X&,-eUK'hVYi$HZ'$1HF[rRqJeMB4SJJ0@@ 8pbi!B*4ijK!rE-fG54khVBl+b5bMVl@V!pEKckkAL+fG'1a"['a6U&3b'411P3# U-UmKim4aUSU6aDkj5cK5SmDH8TLa#BLQk&`U,1IP4&(`-Xc),bF1##e`QA05Nja D#$JkQPCeKe5QX,R93Km+6k*6Nj-(JG6"&"GRZ#Fp3+N&AdqGFJ1*!CB-8)K38LE m,`(#QDE9AD4NX689J3+FXq95"*j+EPq"a&`M&-#BNmq1KYh'b16%hm54,+TqTl& `hDQ(,%8BqbV663lZcM3a&A#D+ff*X',I3QP'V5,ep2!+*iBFBpYQ(K95RQ%Ha8+ T#!b`K9ZF!%RBFk`FP((UQH%9jP'[NRPp&%)(dR2FKTp51Sj4jh0#JHXiePq3!%5 (%4NUBbfjIif,F2XV)-jRiV9NMX4`L50PbG2fAf*!1ED`k[94BUB*GYQkA5@B@JT 5%Hm8A)Zb65!pP#hEGGTAYbZ%j&$CVK*maTI*Z-q2E0fETCMBKSRDMa[I,+@*jXC G4jV4m4l@Gp8EC@q@hJ0(21e&$5%VSdE$4L6iMQ9H+cl,me#lXE9lZBDN8T)2@p@ L#DVJ&+9f409I"E08hX6S)!(Ul6P&*+,Qe1,RVc1Ql!iYXH8`9l3Ir5ikdUFpPLh E[&4,6*9YRUIYA"4Ge$ea3&03!#aafiNS'22DMpBG4XIi`k8pfJqhP'fHSreS6pR QYl5l9[5XZ*C-Erq3!2j1IAK(jkfH'leC48ZdGKZQAb1m!UpqRXrf`A@0Z5cX8TG Q*``63"*lHdlCDbaKA6h(53NJ*+XD$kk(+&1fDfjBNNb8U-8'LlQbZjjTkZ#f$4e XbdXT*3K4VhVEqFaV9LN6mc#QL0&`)0GP!rNfV'rrM``")-Q+AP!j1qYm`f%M@qB EpYAYILrFBQpXr0P@1"ZhM6r8q-@Frm0HT4kJEUGNh"BjF)%KA8lCd$IFq-e&6Te e9`0"jqT[@CfFU@!9hFiBN!"i&ZJF#dp8TVFk'Rf(CaThEZh()UGFf`pVM6qMCH+ (jPP4R**#@H2l*8+L-c4!`38HFV&fj#`QKh@YIbV2Y4j+a'!JA!r$mVUUTJ2Ff4F Q-aFj5JEif#J'Aff2S&5eSmJ!i,p"B-`I6%"S%'R9+Ji*',"AV12TA5(ck&NYLkQ FLXR(-(3MG4HZabTU&ZQdh4#4B6Cl(qR,lmbi@XFI5RbLQBN-5-4T5+##3`Mfq95 PKC(ZRX&9l'JZ[-81+-S(Y2,dM-`'FF$Zj%1MZ0SH(%G`@Z3MfHI$U,Gr+(!BN!" )Rf6UDB!fN!$F@ip`HpY0Y0E3*"9i!14R@r@fdl1MJBYk"6qY`Z@L6b6#cj1a[UM PE!ZqKh4r*fd'0Pj(kPk%SqZlk#jfrFCD#D8bJN%`B5#4MD%,V%KMRS3SMdE*Dp( 3(b3Nc!e&dl8%YMT,cDRUJ4ZF9*GRk6bPHEre#`D1dR!T%5H3!'aeq)DYESDFMRE (iUi+J#B'd*!!qA)p8qUV0kdG'N@A(e$R$`3kfKCdq3&9)VeQM)61eYG#P6rJ8H8 )%%VXFMd3#0Y`mf)p8cEP6LLEm+Y0UGaPGNNS(9cp6[p0!e)kR8Ti(8#!kGa)lHh [2FXfF3eq0XAjJTHJB!dLJ@YZJT&e$8MXDNG#9Q3V#,%$hILDEP+"pPfZ&H1ReR4 $T&[d*ac%pDkph$82aDGlhM3D9h6K%338h1FjR"T8Nd@S58[)hC*dI8Y-S6Zai+@ &j+4SB-(MrSU60[q3!2$T"S#b'fLrVNfM!F$8iU*(21B@Ik''ZMd+EN,hNj!!R*Q CXA-Il+`eK*J@EBPSAEr3bb-NA'BlH0k(3)TD#c(Fh[l'K4rFqrX-BpY"E(99B"1 bKf@f5A5BPa,P&Q*lpBi2(Ua9-a(TmdbAGGi2lJdTBaHYXjPB%Bla,h'P-22jIFD K@p(YeqP[jIA@&qq2'ZFr[VHJhZVFrL,pVAaarrAl1pq2eJ[B%NTH,HR(321S&3T -HaBGq'VA2ZNbc'mc(pmE9hkDH"@QBArK+Y[!QKVUT&kRfKIC&dhUp8'PZQ&%jEN bA`K%6L+-+1%[jX$j+!VSMCmqj0X6`XCr-kiP)$c$C@VdhB"D%53B2@4ea"mB5@Q 25CE&[FiCYXP+A%edE`%4CHQ'%B%@+3I"%Xq#He%*fHYmBrC'heAR$%-YCfAXKc[ ((r+Yb'@RF,(dZ$c)9ZYa+Z6%mZAD%4f%E41H#A9$GNU8LGUQ3+V'HYAC(bjk58` [T@%&r$LHeMN*BcUIei$QSH((p(aEmY-X4!`#QmkR,6Uk+-qeTde$SiF"60mX%-R Q*iCYSNkF#'XLr58+PNN-TZheMpH[q0N"Q!3a$+DJ2,iJ#*)Gehe8cA2,`Z[9 5QHpU[TIc*ef8hUcJlRe$HBL1BVPlC0m3cmiBB!$#c+'"2mC!kbbj5N6CTG4ad6G @V21pQJ9lrd%,YbDK2V"3Q)35"B%Z544"-)cID8(-&`fq&D@KNb!f&40RA+l`AdB 8F8QDecBB+9-AQ-pme+ebX3YYG9GG,*FDEPbqq2Z0[YQad6UHIkZ5dr'Km2)bHZ4 A5&!Y),#ZeVE&BZPhT9$FPRjPJ%0N3c9*!K'#M9)ZGR4Em1JfJ+-"6(T)P+mj0QV PqAaJ`(2bJ#H$!jldM9RkqIKAHZ-1m"%&3rGLml,emZC9r5PHceeVPV&pCjDjIAX ,Y)9lkRRr0rlEYK#Qf$830D$S`bAVS0BR"`qN[elqP6PUGP"5(3mP9Q4rIC&V#EV D1CfZXCJGiPr!ZJkQ8Zf(EhDG&BcTjLiY3@PBPfY4e+T)U8AA51cXB+jhSkZkkj@ ehAAV$-A85kK@!-S9Y"dqPEX$+#Hd3ENp+'LpE#*I`5Il3ipCHI9eJ1a-rm%TRX( (i1-DcrDI["ljMjMHK1QprS*PVQmVK)*%mqPdePj3#BcfH)f#Rrb[0lTF06#De5" TBiqVLJcL'Si+!cGM8"Q$X&!'J6'i&mVJCJc'3KN-aL!YP%&L$0Q&-Q3C`p4#'DE -GY&ZUDj$F4AYddTp6GDHp)$K+X"`PB(K+MICDEVZ9V,*fdNd8@La'QGG6)kkep, KeF[2(H!9[*)r6i&DTI*N4NGhj6cH@a-6TLmP+"MYr@MBh6+YGBN1PbX%P@D9XSk idAbp)[h%CUIME"9%%`KB13[8E(&X&-4&I,D58Kkl5-%fD#aIU0[9eR46`bP3ZH, *qlSJe[VF@BeIfRRJb8*UmB[VZf0C0lpd9iIbp#I(1jq(FrZ,khYNCp,b0"T$&A# H&ZprHhf[l*EkRMjhJV(DalAa),-5C)iXLrQd'qifc%DUBQ$a!L'V3L"JM$#!YHX fX[jK@JL+&FX,"p*I3ZH4G8LA6ebrLB#C#Ajhcd6qj",4)I#ka9#H1kA,8"#EieG Dqj%mf'4F*X-#kakiZ)Fh$HA$NEXhdXH0XN5cU5l4I,0V#*hbM6e$*1"Z3STP%i5 a%LL4hR!fkqK35ERmkIpqSVM@12'#@S'#X!TCch#',0&bC3Zrd@GYb$SD!J2bVQS -b,-"eHd([*!!T`'hcRQA$(h#TR#N'b6),IG(T3U1)QZZC!J$pD"RG$3ZMN,"#&" 2@lkkHNV+kUQ2e&0RBe!eB@MGBafNK,X*2"J5@THY"fT@33PRqrd9lhr&N!!YdpU 2M$k&$0"0)VhkN!!dACcGQVF-IaYf(!6mmLV%BYAb1DBC5P$Fh5Z5d@,rT(pe*kZ Jb,$U@SqDKLKKFP!bkqlH!4jJEkZQ`AlpqHPl`6lE3e2[XDNrBSV#Sl&G%AmLXM1 d-VLdmrN00,M%"U6$m*9Xq,rpFSH,4TmTLZR8hG%"6NN9pji*V[@D(-5#SXEA9-! dG1iXjlhM+eh,*6@ZIT!!1(XQirb9!bD$P%N[8Ai9GH0c9Lp4jFpMHSNSIilT*B, mH8B[LFLI3hU*@rkmUTF-d1IJPlKKPKIXV9Y!(i-(45k*9T8@'EYJ#NcHQE0Y))A $K2P[9e!$VidkKfQKN[FrP%KX5!%c&#d+i5dQ#lR9RjJ[QKbLJmmP9A,l8Apc&J` '8bc&aG$`H6)HL-iH(,P9kRZj0kkZMU+bS$Ka%pH*r'1@bmHqb3jKdZrq(K"'N3& `d`-+jP4P80cd!)8j44NS0chJB8j""Xp0$k#B-b)$kUB(C-cTPN&fd`-mjKcSIiD !adb)[9$N9rZ[l105Re8-A"C+-c#pNUAr21$EY-8$2QDDb#Q&Xf5'MIb9N@GTQ'L i)DiRMSEGP,#Tf($Id5I1ABp5TDJmFE%AAAGm`dlQ+15IH2&SY*JfcU+TFG5i*$8 apABPd%8d8"0Nd0k-T*9SL(0HPr6qEq,-Ek')Zc-Q5LfNa3mH[-h6P[((TrJ(pk( J96ZhFI%X25FcmI'$&++3!%Pb%HEHVlA#U#rTch-TpAT["j+)QEk6[EGJ"[lXqZ! 9P5-NE2R'cfqAE[`*9j&-&T)T8`q*'*1pUhYrrmMh(m4L&ZG2Z"*581$H-Nc'$NU *&3CI`N-caSk2+D&hQ)+BkIaKP6A3VPYY@"D$@"*K%%C,a6$MP4rq!&QJH&'MlJi "L&I-c#L'*TTRJNbRjY&`#j+6eDYkALe&U'29%qF"X+TZhIS)8TJ4PZB%dB*jr"Z HDiKSlJVr+B(M+L'qj[i!DL2jKmdT(Z(Lca&LaTV&DMBQ*mX#)HV8r'DGb9i+GJk ,0hE)"ZFS$fG"B#p5[`M3CYGld`RcE%M&`ciZ!1)4QTaVjJ)"2Cb!Da9GM5R"(GL -YeVel&BZUm&&8)4C[+E3LY+iQBp"caf"6M2$5Am9@'m4lfD*'0&D(LpP(b'2ifS maMk1H6k'23a,2)jem4EfFF-cS-($N!$aI03-d3X)58hY[fH'I6CKB8HK3iTCJB, 9!fB#J%h*jVLDU*B2F&$3q2"6H%ATGBP9,V'+Ne@FV(+H9Fj([Gd6THfSNcB'T50 mbTLm)5!GpQjaiZq!)K$Z8`C,5UDfKk8T2$T3DFN-3U'jNa3DV54k`TBh,XihFH1 0#j11@a0332Rkpq*0LHj`X9+SQ'E-!i`j"@EPMBZC&@#GZA8H$B98r@+Cq!J2*kG '$&ij(53V[(caMBX3NaM+I@GQD04$AUPre"KmCCC2MDp%!Sc3DX5SjdS!Q3K4-QH jN!$*mBJ"&%'QJiX-j81QI"HK9(akEE6FCU6qr[ViibS(B&-[4eR&+'S!TeY,["i 0ar"6"4@EdU*DJJ(mU5b-(iBU9ibBr!(ccK3*iX'"!RjDb(35('CU2`M+BddJ%"3 S,AlRrk&20PbZ(G@8kQNb*%*a-C5"XVr-$YmV`H!()G'$h'5m$0e"eF1RVIYIi1X LaV4F@!*)RCVM4HV8&d"U%ekri2HPBqR@I'Qq0VmcIc$p48VqQdSY`HY!4L56SH% Si%Kie#&2K6DR'Jimk'-CETC4&QB&RM)4+e)F$K3iLhc&QM'RR1DV@5J4fh$cd+J (dAQU9&i1K"4'+"mJ4'4br02,jSphL0)54KM'UNXJE#a*iJ)C'0JP#B(D5L&&**6 prbAKl$SEqr&1@J#2j[320dpf$Bf@Rr)83M6A1d5fm",rK58pk!`H+X1$6P[!QI3 k5i1$HG[PF3MTUej"b)Mfm+F2$m$T!*Z0`-B!i39rD3!3k8F@"VS[DrJ[f1EPPlP jfDpbUG*fC1AYp"`SV5m,T-B5li8N,EKGTGLZf+F!CPXQ`'4ebIRfM2MPS3UC2rM lIJKUDhI)`Yp'D#b!T(Xr1)8NG)@R1Q4i8)mke!b!!%@T)Qh[PS492k(der`*2Q' eX5-S`em-M6*9RQ&%pN'KGE44k+8l6N%VSDM,K9JZ[ZM)H,A&cSlml69Y(qd3Q+# 4BFRTiRQV`ETLL!bb8MJF-&p6LP+!103PGb&VSh8RQ3NlN!#+ZamGC6RVD#0PSdK `dH#MeL03,[4S!+S[CCa4G1S@UQ4fjQcM*-JFeFaqNePb2VNH3X[pl(-lI@T3BAX Ad'1SE-L3!$`NFikZ4F(K9*dINBmV#kA8GC&!0V'B,qILa'*%NN[$phJkHUBD-ji 3H8UjHcCV8e(H"V8IB6p&!(lZXhb'+hK0F"82G%D!VV3a(9b49Bmmm+8eZ%M%$a! R!UCaA1ii!+Pl91XZeh%)$KEjSK!ACQ$kRB-3UZ-)#%8+c(8R#kHkFJN"STH3!&k A%!i&drr+mF9i!%NeY[%THYb6KJq)0j!!j[)6-`EqU0FCi4B&aYBk0bTL1$DTKf[ `NlHU(P8Z")Ghd("V)M0EQ$%q3M(#CJlL3$LS`QIQ6R)0D$)apc`h@a9mQ[f[L!X Gai9855dcZki-iRVSIX8-VPUfPdm"Q4Cf45ZZ94Xq`kiiK)SjE-2e62KCBUfK"iZ 059CXNRc'(qP#GQY$ENI!,5-*dSml''KCeef-%'2`Q,&faq5Z!p*N6[31U0N%%Bq ff6D)lMQcM@[cpp)fii9YKK!d)`Smb4Ch3i39jN1XK&ZM3(lA#6a1,&J&jX#$'94 F'F0-`3b5&JpDf'5d-)m'%JP,UrQXpR8mqF'eVl[SNE[G!%SY(mQGjE0FafZ-cq! ea$@mV(`Lpb3l@X8b"ii&"YThmaRmD2J*$JQ'&UK-@F4`9C@8U9`X-)9#!G6Mi3K H+LAH@&&kB'`8@md4pK0"m[b2$IT`+a@K1'rHc8@%21'c!%(`idiM+KFZ)mI&eYd m3T1SU*J@lQNchGaZ@Kk-SJ&jYi4,16k!X"%)84#NK&[RDLfY4rqjbpNEYMabp$G GeP0JF)GMa)"*CIp46#N2Al3HT%B5)pX*3j!!frZ`(K9T+"r4fBa3*Xfj!2rZJ20 (+b&4Gqa!X9CSNP#f$!d3ejd[S)Rkr3G2GKQ"aJT8@hId4#m*L`((pHMaEX2QGCb ,'VE@D&&rp*V4jh9r%VfMCbdD2Uq+p!VTUa!HHAY,2(da5Z'X+-V,8C39UCFZ3!d )r("+dZ0R1C!!FMP6A4Adb*C%L"`aABMV2dLJ'9U,d"!K6!T9-+kpdSq`V&hdq$i F%D2VP4Q[31VGFV#)pDGCN!!UQB'`*#1[de"#k2S'6,Ma%m&N4*kNa&r14SlJJ2I !2)#1VRYCNbL+#RkiM$McGFCmKTDS(rRbb#q$K'4e,q3L3L$8MP#+8(!Id#9[jaZ XYP[AEleBUkJ*h[6b[@Ki!ZeNa2#LB-)2"9%4'(VQZ1)$8SFYY`8%Rj!!3i8$i@# eGq+KfkF3m[J8d%iP4L`SIV'E8$HXeLR%6LaX+43M+K4q#+r58LTkA36MZ'K#RJi B9FLi'XTA+M#pIi!Q`he)-kKMSk%U*ilD0"#5eCFEM385eJH'QkdR$DIA`1*Dc!+ ,C--$%@L&DLX0G(d[a9&GdbD)%HjNpkGFp`DkI1Gr4YIk1lr1YTTpGY!RGEE2-K' !15[m1pX!5AD*9GiUUGjJbVMZhk`EE[DVfZ8U-fmdETk4JBHA`YA$fZBC!L!T"KL 3!+!8T,233MPH02VYcCN*0&08HJ!G*TDRLJia`XfK2DB,iJlZ#1ACac(24fA)E6M FJUK`-e,IL"Ec$J3C2&j($5CQR(`PM(p3JY!r-Q%Xq&qA`qbIJa#M%20p0l42V1+ [K+j8FU[E5*ABC#%b9U9eDRIYMmCEpdFcD6`0q%VSPY&[G!@@B)-fb5pR,"3N1EL 5Tkd,6"Fp9lCK+&dFMTBBd[-1,bXlLJh1Bc)$@)pjTaQlQDAd6D'@Y6[#Qkf#-q8 pSN`5%mm%KV"Y4lSlISc#Q4'LC`[E+2QGXQ@dXG($jhdPJ@#qiQXCEdKDQDm%LB* YrSMMF@jZal5fRH2HGSir""abH)JIUIA"J+4'A`N,*',U#N'G3DCd&C!!,@B06V, J85q*DTVf$e$!JjLT4'I*SBFA"0ca&"kE&8mI3N)KbPJkfkT+E5mPr[pjkGd8r*L hSaNq0YSf+2XMQNUh#85@H0VIj0iJrc-"*N5LH%I`Eh@+NJAr@-I)p!0a&DNrBdN UDhYrRmrd3F4%q%aZQUjI4B)0JM3K8"S)ddU0F"E`Xb3N,ZVkcIr([`iT3[3bi&6 K9*bpjDZcPRC"YN&a(D%A-5a1!B4#q0AqPIJdP9Fl68JTa-JNRVX-)iBP4f%R[r1 VI1&AqF5[iMrJU&rP!&#C(S60*JrciYSHcj%8S"JPPT*9h0R,$K9cpU(lI4D2fX` BUAN0mr&[8)ccEk8#*Y,!p3-T'i6f#K@m*HC-mR5i&ZLG$Pp&*4qZ!RUhB&[b15b )(f0ip6d(lYCjbM`+KP5)LN)qY!IrL-L'+aPPcr)L3X+aF+i2`5U4m5Y-$"2PEEl R-3KYaBSdA9&3r#mM)`2#E"Ak4cAlJDa85,k9X1rP,HbcP9jVX"[80FX)!KAbdCr 2cRcd`Z9[frpmXHHLiprrpq8rRYIEFr&$#L*m1IhFNE['rm'a9NI1K1YrrJpAp(q R2k1rd$hqp!XeiqmmrR6V``FIIZ,i!`mmX22iq$mYrEZ$hHpFkeVklZIkqmppH*m HIfkh[Z+j$hA6KBZ,I[l1Mpr9rdPriG3hYKr8Klldfi2k2laliF@Pc3!!2D&"4%0 5!`"TA""9$A4'%3!aihj&IpqfI"R,'NBBFFBdqCacAI1mbk5D8Sc*XS3`4Jj*4k3 4FhAP`*CL%RBM0bIPPdZh2#qJ8Jp&DQf[YaFj(K[3T#(f8%l+i84-P5,e4QXa8'U T"bR'L0a)-D8Khr[[lr[f[)RBicfrjcmET#FTbS8J#*j!0[8hH&$"1R2qM5k$!ZM ,(d)4lqh2'I)IERbb2HM)J+$8hfhcL[jr$1"6&Ae!f-i9*eIm)'i9MrHr,QD+a`9 9Mk6'mMPEBBVT)(A0e(BPpIPBd2&Upr6kL'LFY@P%+``d[RdZLibI#%`CcK@23`% Q!--U-J@-BhL)j$jLrB,&EGNCD@*iAbEBcM&RP5AHh-&9QdJU[LFqjK(R04KX1X9 YA"D6&RpX'a#%kZ&U`0cdKdTKQQdjG4*hC[$39CXrH0`6r0PbLmETYb63A9)FjT' fE6ab-K)mEQkkTG+DD8jEkbUq#br(R1M@N[bdfh'1biFE[eBKcYU4K@bIP1e$GJh ,pYPa,$a%l&9iPDkU8&bQm`JDV"ci@&ReDAFLEAiP&,b0AkZ2cd+K'VErcIihkA@ p@5&f'"0*e5N-9LR1@V`d(03eIITA01!m[*SipY(S)*J32,U,UjT0A2eK4",8dRV PQCM1M30Y'GELYJbRPXa9Y!e1"eiAQdA'1cG"MGcf)f4f)L(9$$[DXN8[J+,+X,# 1bKLh0lCPHp)cdSMJdT*0f+[dT$%FdE3d6f(+!8Hk$!5a,!HG(Q#G0N9h+UJaHI[ 3D%k%Ha[qACbp5GYfL@9@&FLmjXba!"e""HH('L%+')I#ql#Y%SJQ6McNqqfdbB' f(d&XZHE%!5bqSB'f!cK#Chmh(3LCfCE6"3#[mcm1$P(EEFC!f@$bRb&#pAHMqAB l$N,+A8-#J*k4U6K9'5T1,HGR+RYjp&C)mB[%jF-"8F@4SMK*UYHXdeEM)a(jm&H K`REL2m((H4!mbK*ZGhCmdfQl,B0lM(JmEZ[!Bab2)cB4Mj0ir'GE1akVm(MBPX5 M&irGYNJ'N!"Mp-&-`*)!JS"bSaU%1Q,Tb0$%LpZ1")p$qGB$Y+B4UpTH1"Q*1hI 9KYF+QECU!X6irf4)`Q[UD**-KJcT!pddX8irBTfZcY#!r%HN,J0rAm[pYN6c1Gj NmkhIaVdfIpcT58B0m)aBET&0Jd`@8'B6Qbqmr"B%#1l(VBTl[`LQRcG02F`6%(I DMD0mZlMQqr18911DG"iDjZeMSecjT&Id@eflR[5f5dIafFHP)CG'ScYcGGi"X6K *jcE9CfNIkP"p3m14#iFEErA%H9HhaIp%MqV$bbEfXZP4,j[`XSUpV(V8bbUa3`# -"%mbm,#0ac[8-aE080M31#BdlPA2Q)kS&+%"8cpa(a"*%4kD8$R$k(JeZjfM5Ub bb8kmX(K4A4Fj+Mfb1+SS&EFD6!i!2DV35EQ0c6PbH4mpc-5i&NZf80r)6dCH+0f 5(UmihrU52E%[fjN0m6)F1,r$CDZ146ENL2jp18K16H,mrTIX0i42@kNjA1B5)fM 1AY&8iG0@'M-B2BUL53Y`56M5`kma&GZej$#IjC'ZEUM6rq$Ki3j#I*6mlNQ"lRZ #EK`QMJ63r$d`lQ2*)cfeK&BTbqTDU2-1mb`HY(Mj0ZK3Z#UhAdf'Z@LT`XeS5H, fQ%A'l9RE"*TSp8d-f634X+6+CP*,Akh-Y)@mBCjPUf)C`ea&PNaCE!L41V#$f,3 33+BL(BM-[k%V42bfchL!4"5K@eI"aL@N0!YjT)BPTSCD0$31mb!CB3iTK"$1Aa0 HLAL9Z&USK9'bR6+iLf9iN!!KQlAZEDVX[BUMb@B[IB!NUY$B,1ScK-B*eTK)TH, 66jp2I-D[UclFaY3Qh&DV9EL0U1fiGDRMF+@3!08XS0Jr)f0D2B0E[hSB0ipU[HF c5$+RF1Y94h'cUG1iR95eZ$R9-66U9*IJ&PGeZ(@Sep&CQNV'mP'fE1F+3e!cEe2 Yl2-cKpDZeArQ3p&Xq#M@2qTqkR#I8ahXBiJH2Cb[C!HMJHaXS%leZR!!DEJa#!C aKpC4HBq@(6#QDT(9)@ACN6@SpKkPVA5#q%CB$T@M@R82ZZU,H#aD2-a&6Y,')VQ *Ua'Z($UUMH5ccV-XiicXAN`[MK4lj+-T2")TaQGZj$1cZ5,R#@fN4##BaD%RQ8d p3`XLG+@HNVUDP"D&1[Y-I9rS6(dIRpp32kA1+VC&6MkK9HHHk!dASTZ5F!CZJA! k'Ihd#1,2NJ"HPF*KP[kY[99CVKZJLPP)C+N"*2KaHq*Q*%"Ppp3#jFi9S6�,) al1&CUjbAE"UK%[p6TBiUF0Pm!5mf3qK09GBLZITU@RN6"1JGE2,qeGc'Xkj"J+i &H'm3ZKhBSb`J0DE-PG+Eb@#pQ!4Z('9,$)+fk)HBAYU@HGBRKQrN3&JU69&CCj( 9*&S[80k%Bm1#q3rc!"*8)1Epk(9-Em1`E'J-9IT*Up,Qh)@"Qp$dcH3,riJrLh` !+%01G3lc0)Yhp@J&R&lN"3a-r""00IK*i#H*(hTp+ejAS2*YYpL"$0Z4*)f8*$9 hdUHj!NGF1X3G!!N)kX0F,UbSF!paXa(XP`mr66!,-+5VU8I5$Gcm'4MeApTaFp# 2SE0Xq[ark1a0["E"R[k51QA(r"11f5&-Jj*NDBR-c2qreEc0r3#,0#$'clKAPA' 6J4jaia%!QBmPh#Ce(,FUPUcE@E)H4l)Z8AB`i*RJIN-&*!JQ81M1Xi`1!+#8"V2 5pMB2f(`'G1J*B@)$5rKaP[!l'"MVe&0GPqFZQjYUA*qi22Pi%@#[iq`e+V1MP,$ kF4Y32ch+*Z!fT,lrRA0U[r)h5cXYX,QTiSUSlDP929JXRI+hK6SmG+MpK8d9lVK f$5RX&pDmrXRVb3l`AUG18+,`UkHF!'eEh#RE!NBiG$NUfc+,3`4N"N#bFApT$'! %F&PUK&X$SHA5P9$!,1r[YM44PZJ94k#F@Ej30iE204r5)+cE!,UGJ0(@G6T[PbX -A5,"KT&J#meU),N$B[(4199Nl+eip'@[LXm!q`c3TbFKM[4G[UF,6B5(3(r1TjQ Lr`D@(SNjk$bR"La334Xl9,&LQaT%CSap"X!`)[0Z9h`+TV#re,MAI2L*QlfD3+* T$[J[YLSlm'TMLqXX!FY59*K&B$Nh!P5Dml9iE,l4UQb-Dd(#2p2feR`SPYpl6Te Jfa5ac8PRCNQH6BBh'6C*Leq*aCH5EQQLDRiP%Nrl2R+C@X&ZTA5,f$dmFJ-EKL" 6LDSNb83DQaH6F#4)RP,94BZ9c!4CVTmHcc1S`c!SL*A%S4Gm"C1"#TBUT4+*Nq* )6l@LL1'&ZRfAib21UiBN(NjL1r0XikakJl(9NK!ULF,Vc2'Pe#1EJr4!D'-Y5d* 3Z#ceb!I@i(!9Ba!EN!"X)dLF%5J@PP+b6HaGLdqUN!!056$5N!#KQSZJ*X!J%(j #8X*"e@b4h$NJhQ#R4h[83B#d(m#X)dFEqNH'"KR6KJafA!kS-"`B6Q0)-X')"lF BUf3')lQ8@#,R+,&%2U0U+C+2fl14i[D1b$N,#EVAHfSMKGJU#%)*)j*rJUY*5KU 4I,$,N3GE$VkGPS%"pb3YJYP2a$%YKEU4PX,MBbq@dNX3[MCmcHaIU-2dE3rDm3h @XDM[@-c6X8hU@-c6XBL1VBrU9QEGVQDG0ZNlEFV6DCA8DG1M1f@)2H4%0aB5P0[ CiLB20cHYP*4EpII#`BNY"KK"92%"S)5)f"%ZV,K#&6E%pX1@5E%M8Q+SFMe0d8h 818)KFA)a"@MEFQ%V9@dDS+e1jMU$+SBqjPF5F!#a[KILU+L@8eAX1+I+%!'Ac`" Y$CAMm6d)lNj(CC`6m#fi5&hKN!$Y0XekRI+HTHNSQULG9'8R)!T6!Z,+@CQ-Peb "LRFja0mX5KC(Hm#mBJ#`[cTP1ETb`2%-l+r01j5&cpAph8,9,&A(*FTD+3Rf'Y1 LP(GhN[+!Q0'#iJ&8"SZSkJDa5Lcp90&2!3#"6UQ#lBJ8@jSNe&$e+X4q6cXK$$1 (N!"d$JY%$KqPp#%-EL!V%RST+8U%*F8JFb$lR1@-d,hU-A5[[[pJhD[pTZl9IN2 hkKc3U$9[p`@fhk[II0LNA&$X*$K"8FAF+XKK#1CNM8l(3aN+9#kaSE3Crj!!I,M jIeA&(@)j&XPRd4$,fA-h-Cb"'Q)iVm2!$68M$`IKGYSd[c+ZaE(Tq,k[%m+-!jR XKL1aR!&4*E)CDZl#+F&SFX"XaR'2X!0H%p-U,Z(c#PkHBU5"6XZXrU`5bl##J!J r1c,8T!j#a`d`06TZa)2NTJ980)QXak4AcaCi"56Pc)6)EkkS)p$%)(I5"bP0m91 0M(I&cVB'IZD%(i1mLk9SFG!2X6Bik04fJEdThaE0b1!"*YMb6d#5d&$DN!"2b#J G(q1-UG&)`Qebb%IUj@8[Mr'jlNFPHDlHD3FE$H6elTFrr1YHG2)T%Qi35T)X)Mb %dGJB4i,pP#818TT-JKfTP5TLcYHK'KAa820Upi`IdrX10jDf'@H&DK8EZiaNFCR 8Rh%(+D2'C[ZkE9SNQ-YR9p-8U*p8J%k`iK)Tp8T,aQCY!DQVbd0ANI@AX9P$3h4 &hCG!(GYMXpf-kPZa@jl$8$V&(Me8l)F0&6[Q8*S((3TEarCF@*BZr)cJai'IAUK +M1*a8Yd1l&1kS)JXai4V8%)kS"TX&dIBUcjP"+q5dUYH4PJG25JMq((JTi[)215 E*98#!r)&p3c%BkKiMkrS)$8M1ZYJC0F`mrlVq"!Y)Ab)iQ98fq@XkH05dmG"'K' *C[*`m`-[8h)"'[B*#BLKZGY)68'*ci"i"(8B'3e`2!fT+ZPRU)1I0#JVi1hB"k5 TC5a-(`-ZdCDN9j5e`0V9(DhJBLS'3Q43JC&k!iK%,r`M+F*NS3jQQ(',CaLTJqS c6NkU5SEi[B)!ZXJ93d8[qNdUQJ5hM&#'#PG1ffU'p!XLHX9`G1U#bc-FDX3X,#h F1(f,(*@,A,4aMeGi(6@!&k*%9E63eqqqflA),BPFK%#QmA-B2aj2SC4iFU3MR6B (&lPS%`pIC*Z`XJTYK#(QFb4%,h*jT[0-d[9RHMVbC)kE4669j-RfQjX@ZF4`Y!U @&%2A4p8aFAl`"caK92G0-@9D5(Ld,AhFcK-&e8KBJU6(Ehh*HN@chq)0*5cqArS Y+a-*KkXUiR"Ie"V9Q%NjP@DD"!5F%#EZUl-N3jLX`H6e%8XeQlcI-,R$S&KD5-k d'FUVh42VIFq&CZ%4$SG[S+k&V2!"h)PB0E!&MmmJHiICZp#cQPZm-fR2rX6Rm9` (`P5"eU&1JlL!kJj,Yl$KTPRrrTriRN1LM-T'8[%eM)r0#Lm*P!dZYmSQ!r[08,A !J*I4G#ME5T3b3Nc6C!a!YSHR0HYI9H,9YQNSjp0H+eK9FapF16"Ja6C1P9dU-GC qcN6D9$(-@1P@T4,-Y%kT[*&*e5'1@AUiHAH%f*fBJm3#!%C58-02cf,BAJJ!bj8 &3Z8i$I5EGMejBGrm[XG3e9b-Maa3NfmAMRclrh!IASAd,'F6+H+HB%`Qa&3rUIr 9$[cSm(-G!&FP'B%5RR&c1`S%H0NYk8PL8X,`b85c+SRPpK-k5'-'4bUJiHZ+I`c hlJZMXq6#6mXR--C&m6%Z,'Db4e(!`(&eJc""r(MRKlE)!EMSEIf)h0VhR6KSSB) @V+0I'-R8m4V3$bT1!h+-cCip+1kl*aH*EP,Fpd3ALMRNBM-KXfmpf#KNjA)IRc! ReV[b9i1eR*48m[,T3Ee+2SMr*[bhJiPZJNSb`LFpp*!!KJGCb,$r$FJ+k'pl#'V +bEPZ6mKq$NUAFj`Hf['M`FmN6!S6F&hrY`GrMBF!c%pmUKC)'k5SY3f0r[2a%cm 50NPE42A5J5h'$4X8Cc&N30`(`6")+)8(&ZTS%0j"'NMl1C8+LicD#rrVk`8)&83 R)UF#8kUTUa'!'[id8*(&U"0-Mq-Rb%MpMB-p"ESJ00q,,X6S,M!e5&0TbLX(Ij4 IB%Sl93`&'XHTX620iXH#rRP'h[S4a+52iL03"Cd%Z#3FaCqR%XKmYFDTr6T8&L& q)*(L*r$a6"V6V,[D[m3j+AU,5CRlal15i$12`cMSTD)J3%meq1#4ANIaMJ5B2Jd k1qA8GR8$m)e,K[PT-)1Rim2m1E`mM5&2dR#46I4TIPP3id$SAJ#PqFQ1-,)bSFB j5Dj@P$J0DTc)lQQURJ)3DMD[ae5,GjUaNHUGqU4N"6ZhMb@Q2TDBjMJTB2Z45%j 5)RQSi,#phl!NY,"5FVa154,XjEl#4+8EDVh6+-k5R(TJaf&(&b8LqJ("iDa[#p% V%(9"`4H@C+5$2me98Zei*X54VXZQC#+S-*!!G%Ek+A[#h(6[0TjN`iPJCNFP&8G 3HSLM#&qbh`@'5FHUYb"%FadqVl221+[XJP6CrGV3$5QXGG,d'0`M)#U0M"SC'2C PhK)pQ2F@G)DIkdaTZXp#kZ4*!RiB[H5M,aZ$eKiBqT%!b+c@PP0F(IGE-adI(,Z 6CQ5IP+G*L4*rBTH%TLB*66($,e9,j)c)&PJPjpMfD'CVhHEqEJ'45f*EQ55f3F8 $8bh-hXC,8'hpeL6`T*ia#$`CQjNid!I%kF"2lpI*L$k0lT!!'"dPU@HS`S#3!$M )MJ(KL!P%JQ#84)06dB,4Nk1#B&63e1Ii9C+FE9KKLji(GXb4Nq`5MCLfV`iQ'Kd FHj&3%U&!C+FliQE&2TiGjil2aFJkPe!-j%8iZ`[0EAF[b4Rj5F)S9A9PU1U-C1b $+@Im#mY6Z$2(4JCZVMkPVpEHT3fXRN@a1M++[iZAEi!X94E[HT!!q&qjDYEjihj ap1`VSSML5FZIE`aFB3EVDqC%*C%i44c0+#l`FYUXXPGMiQMKYiZMA`80KIa3&5k rF80f+3S(4NV@S9VRCqAQc2a)2'dS,$K"8'@iHPEdpF(!jYaPL6b9+IT`I(@Y+hq cmbe5L%l#6F,QM'FCTT!!di6&Cc"Q&jb#4a&0XdbG%fUf5*AZDP5kr"1RE'PLl&% C`'5LiCqBUm326%VcU!SrGF!+eBB4UUV5pCNRr@"B6BU2mD(b)8%8@B#U8I`)D!Q G,#Bd#*@i(iX`Vm"3SM68iepBlNPJXTq-Kf$%GV2LM$"U(VXj9-"J!5fD!S$pVJ$ BT$*)eNH"!A2h!HY-$Pd*X-a9Iphlj3mTi@(4la*F&-Naq)"kZ2NR(S!GUQaR6dN )l1JPS1-iA#HDIpiAf"1idYm0P0p1JLqQlM8S8p+r0`mZU*la['i#)Cl`8a10b`L A6BJlmd4[KBX+FiMHqmRYTSb+r8(B+804`"iUT)R+4@![B-bB"9[jmqI'+FRiR'N `Q[TY9+#cR0J+CGAKjXdliP#L8)CKd3'q"m3ND`$RrXd,Bp3J@D$"+A69MZlVKmT 4%!#1"8mQb-'BP'HX5')U&9%ENXPG4$V)CZDUA#d90+fRk["Vkm'SE3#+f3#R&Kb ,hjN1"a$&$IFJlAHXbVd(1-6('UQ$'JLQLjNUk9iJ*dj1&ZY"F'B)&JqSk5$ef4! F-'[%cS44bpZUL2c@YkbpkhZ+Uc&)$80M+1#kZ4dUSc5,*jd(Mk2`hZ+c4QH9,@L %FTd+JPedL5SU(K@#4@5K6T2++r(MX[Edp8*%4hGVHdXUX*cpaTkBPbURhqA3JST lJPdXi@M&i`'R5'V%-BCF5F"[KfQ43##SRp49B**2l*3Q3A%"eY*,+VcIQ@P4m)' UqAFRiAE4r22DD&B5C!4!3S@61-)*$&QP@i3NJN*bQcG3`9-)j8A1hT**N!#'8"' 2p"%!EVN,E%H9")*f3TEYLINIL'%*#(hQle9Q%S[RQFJ,KT40M@J5R%4liejbL1d )hrpG12"9ifFlf2FL5iJjr@$48'!2$1'@$CKB4-"()'EX*3*Xk6S'b+depSU-(3S FAkM,`1)iHmp1MrSGliS3YPH((EpTGZA(`Ba@fX3N%r*X)5`8QF998Ej4Y`p'FI[ i[PjV$eZSR[8p*6Y-3,cQQ@-!F5p-J%QK@-ZDM@3#T)bS"X&fE'(q"jDaC%N@LJ& CG!a`Nc1%@U"QH0+hQK*9NkdGT&BB@6BTVTY6U$&F"9F41D!Hb,40jThSe,+*R1G iV)aS)bc4V#,b$*9(*CTe8&MS@!'*$8)R5$4Y(E-@'$4XR@c*$31lp31R`0ec-9[ bdjKFIlLjjLPKbF()#J$RK%()58k(!,PT"UBq"UBh@0&0QKUMjD@PURNYcq3N@b) RU@)pNA3#DkCiVGP"j"9!YfDY#A4VYK(SrXjSp%F,"A#@BiA0$R"8TYXL&k6UG*b fEImE9I(2f*F`Y4U-YAkmi[&cN3X!Q#BXI4V[1mQbH5fb1UJje2hS"XcI1*a*ZTj `4#i)blKN9ZL!9aj38p5K$ZCXNKiRp8&*[)0l2,N'4BCH$421+fc89L`4P$#G*+D J`6R@6Ep`3*Z4*N$pd3IP6#&8#,TP(X(8#'%EV'V4aSV@C@mZFMPlEI,DE9!i[S& (%8205FIa3"#HFkC"J!d*@d(#E%*9j4-ad)V(lGJB%5mCjI3f`DUKJS`NMQY(Yle $[SDEQ&!PIC+i5``m-C4J$l00l#49rH0kKR*qpe3ZNV[,`,BXQ39aGFPH4@Z*26m HFjM##Ma)mj%90f&V'L`m+YqY&`QphqULT@$)9XrSQ0chP!X'-)MHbZSIYT9`e&E @SQTB!6Ilefiqaqd++@VE"XlaAU8-!X3&mrQ&RS*E$E'Y5JAQ#f`!'jdNPdC5Q8* Xd,mF'[LmGZ[E$*3eH#%XPhQ5&KEXr0C'J9%(QbA6jMbdaEm@2&68JA`,260TY2e N!HG&TJLNCDp`DT'ib-M@'4mSQiX0P(Q'V@9c`c#qP(N%S35SSjPIGfVR!#V$2AM C@qC"#)lLXMQBmQic4m"mqr!L(br-j#DK9rH[(!T6&e*6Re!XJ36mrA-3'9E#MC1 -B+Q'cJi4ZUQR(c4C$HA,+TJ68`(XNqb!%diJ!%[lF((CbE+$Z1@@T3qMQl+6'$c A90`EbBN+U(R*R!N%TIRlhjj-YS@BLPlHqGX6UmaUl'165T3)B6VN)4ZB"T!!*E& *(#JlZI-LEVNlYh&"9B`AKcUC1T54*2%4(8f[$UePRG%Q+Hc!hD5XBFT*9FL+F1Q K'3qe`NHBM$qe9)h!"FZ&+9MmKESCZ***h9#4+p%d""@8*B8GQ!'0e13FZB`,M!V ,q,-d6&r8-+jd&&AGKD(3hEJRNDKUqj+4%h-rMi58(XDk%`0AGf*$e1$"K(qZfe3 J9R$9#i&G!c"NNaX"Ci@+5AAjr!5*lN$ZK,#GH1PR$JEqU9+S-Kf%YS8*#h@1G$p F2ZY$T,!'f#AJCZFMC$ej*HiJT$Cm[1d+412C!Ul41LT8aXRPp-VKjZpB$5pJHVX #45)Y$AXekCNMCp3V"4FAk$@AKJaHS8HJq+V$M8UpD(dXaE,VF@LCkI(T(lrp%J4 e2(l8[,N)E"`H%pIl-VJ'KdUBf$`"H&Qa'Qr"B8M)TklV43,5rZkcP,M`L86Xe#m J8eX5D%*m6ik#)1DCH&r(e9MDlX[cX2a'q9FN8'qUU'YfrD[I#[F6X3p9jDClE`L +&8Z'Z-GkbHLhpJEkVYlJS@3[epT1(H$TI-m#T6,B4`8G31MV5mE*`3ZQp1Y,EMS BZRpVYSYPhr(6+bih&3'"irhe8#M(&FrZIpfkUlmAi6i5*bT*25Vf3He#l(Gp1T! !MD61H5Y+m&YVB%4%kd#AXJ!hU#aJ+*`4VB1*h@rXG5%ib*,mT&&'@)mP*-jkI1` MR6k3!"b+be)S'4@Y!Y*FQX)"rQXKb*&lMbpZa3E)bI",qJem+@S$Ap*[3-B'[N3 EJ*USAXcZEeAU8B4PDAmRLP-e+8Y2V-9@eST@D5Xk-U14D0V9(D-K)2+)Yiek"EB EhB&GZ--9kSp9LEfLFG5llSV`+S@2U[YGZCpf9)Qlk)9Gkp!+Vj!!I8TA*HkKE&- B"f5rMf-8p@-S(-5[&*fi%88iZ1JI#T%c*N5Dj%&%-SP"$AUecG([i+XMePf1hp" RIhmr(ihdG8,Xa'GZIbkIMTcCihL22Y2liHm8kBFV(3+*)'0HrcaNR0)bpLm9`B, ie6C[I`LCFd*QIA6QFd,Q+P0QPcd*%d)a9c,XciT!fD'988!DSQ-5N!$V%R%%MZL )JI&%8"8ah1QU["B)lkM,GJemAkQqqbZbqjCclk3riaDcdZrBhK$,H[Vb&9F0h'l 3X#lJhj'*KYm!-HV[hXVpXR[lHcmlXpNYbS@DTaS#mX%N,@emkTBbX4`6-J2P1h, B"+p5KJPHf4d8cErEiKE68Jj90`bQ(GarIqYPeqEA44R0Fp$m'QZH9#V32#Ql2rq l1aFXFS[K!llDKSl``IEl'ppbEB'CYp-9++pd"p+N#3PP-bBNC2HI8JlpSXBYqM2 Zf0d3pcrpqMAASVS#@d6i,'8l'QYNpjj,lhEFmVPBIN5cS%&AMU2riJhA-jPL&YY SPV64%!SLEH8KfGeJl,c+0RU)EA5rY0(hp"Zpa#C-+T@B-#QlPh9q3@8EpE'0YNG Yp**qSk+b&me&fId0edFeY&&'mM!Mq68L1GZQAfSH9'V32#LlAqqpp4Hd3)cS@3, 4iFk8ZNB+,F!fM!H*q$&P!bE'C,HL[,q6EIN3fr*qYQ@DP-A)Rl8$(fc+S,)58`C PpdYcYfbNEE-&N!#P"EK%#e"*S4R5T'dEP8fBB*6GRphB(cMQ!Pc5,m"YbM`d[Jd NqZKr[r"VkFKX+hJ30K1E@[0",0N*0fNX49*DLLA+ACLi4(DrpU1H0pMf$l(Y'jC LVkkmmj+B4BX461l)CT0'PA@B0#Uljrr5qpJaPU-Ffdi5H9'dU&jf,jeiiM4EKTY S'4i@PN&Q#jE$'Uf5hCAD&l9V2KH6KEGMq16"mc4mB1VAC4))RjHk@bQlimqGqMi MGa8MGa-MpdYX@H%)MU2QZ0cN2##llP[lhVE0,T!!1FR)V*()I*i4lM`4$PeZPpf ,KK,rJj(h*L,[``*j"B!0de+Jf3EC(HR9l2[ejq*jGX6c`K'*T'cC-V&KSF0eXV[ QqGeZ4XSU4XSQD60lDFR)H8`mAjR*$VPCG[hUeeqGYm8&%LBC#6@-K#q*5@NlbFT VV'Q0l(VXTcrH63*%!6+HCd"jAL,NAE,lJbpQ,FT,5)BiSP!"QPE)lP9rq1BPfK! Mj(Q*N!#[#mNMLT!!HfAAVP1D"ij"b()Td3NERbHlYrl,I@Rr#5(,C(IUdrp@6`[ )MPLZAfS$)3d,8bQl,@FMDiL3!#P9)!i48L"1@#+1,*&aNqckEXI)@d6'p#5)3f4 m8dMUIiHQ1ph#-LZ,rfKR5'q5N!$HIGr&*R,%Y,ph"@6@C+rX[[5rPlVC%KpP5e` Z%HmhB[R[A3%rD`B!,2lrh`j3iU9U6LFlpYMh--*P"FTIG!A5@$-Xa,,lPb3C-Fi 6-3lHI[rE)-FP-I`2)#pVK)6acXEDANSqkC0dl2ZN#Z&RVN!@Dl*CGKprjVp[CF3 kbSK9VNm@jh(`-'X'3LhprA%2%BU10*MPk,4h-N,*JI-['Ji1!0li$j[-M!$R'G+ rhB$dp86#%XEqlj&hfE%RkGMh5BMQp`BL9F[ZfZHrYCL"c9%'0Z8'p2ic`qB"@RF pED`cN!!S)$ZQl&2Xf1q*jrr"F'`NHIq9lk3aj('HJIlYd[)+aaC)8#1lepa9m8H '2)K)iIXZjeRB6E*lpqrqHMp,ENGCFLXh9CAka8@LR&fB8Nm(CmYf2Xqb#83#F*D pHHB%3mcR'DMIEJ*e9jed+""Ke3m#[Ba-id5Q"r5!lXU8L)"&kHP3[Xb@VTdYR5m DA355f8M),c)eY1akqm,MIhX'#Dj`2p[!S3,SiMbD*PR6lE)VpB89If6)STb4l+J *@ELZQ3Kbi[e22f!N'bH52D"(&+iFL4aBSRp+lVh)d%3l3a1qD$34+-HJIMES"TJ XRPlehhjGL3AIcaEmN!!*6EJZQ8#j,ZGrh-X)9mi)Gr3BK%-#1pY`T2Z(%Ji,965 iHeeH`KR3!b1(3,K9XZ[Ie"i0%5jP2d-2KdcS38m1J24KlrlR@5)VCkMKU)3DSJQ #K(EV[L2C,('-8q*i3%!1-MZq2Z(rhHV5H`L%-YTar2-ifYYX!rkS$3#%1QkjqrG %#NB`@5*B*KdI"!XE`2VKDlrq#T'#,D9I@XT,[l[am`EZrdN$ppl5`*-30!dLFD@ "PFMJjN-3pUZfZhHiM'&V$jL#bXIFITiB,ca8kAl-G4ZhpL4l)+c@T2-$+&m#m9S PPcG5QKFHZZLkflhVJE*0ZdSR83a2H*cMiY809`S2MING(acmjPfCC@lU0'JFj2H rPH-+CTX2TC4[cYcV%ShjI-19B(JZZmaYH2h6YqSZQJrT`QFZhBN'+@K`d%GG'"S il(Bl03Q%Zh$Jf&6!1-Nh["3-@l2,A&)MYcRddfeeIcE2&"ikH*iQ"klHpe*ffb$ Ii3Uk#`m&`hdB-1!)2*[2$5pqqP,Q464[BXd4VGA`JK!0[3U'6p'NCrIUAf'3!+f C&r[U`-,eJK'%+&qd2BVKB%S8J9hPii*#4C8P03%qq*9S4b1*3Ep$BST39%KdQ6* BBD%ETJ`8&iVkG(pNqRK)%rG,%frN2B+ihm41*5V&r5D@Lci0M"NqlM"P2k3*dT! !#CG*N6&,+K3BDXXfaDqQU)(``GN0@hGF'`a[[REC(804PJ0U`)qXZJlrPVUhh%G JQYeq"8PYNT+DH-I1(20-CFl8!aq1aSe*ETi*q0HpY--epF"[4kqe6I+!hclPQ++ -pk5-Jb&dKScIX)aB@Z#1&h1SJlh)L1jJHCi1jNNC`[4hKHRbB&U(rfGeeMh*2Bb "XiPT6ed*T"fFC3M[Fe('Tm`qh#-rmCTFrj*$j86U2GKdl2MmDTK5MZrFHe+1VrR ChK1,iap(UF3HT'RJG`@E+ZN82M!Q"E)$B+9$09)jN!#L2Vl,SY32T,cdpSqICUS p"R+T63LZ8(plLI)eVZ+fQ%G`qbS2ijE+rEJYifQi&A%C0i9RCC!!JlE2%`XHKkY "-Z&(BE([l4bh6c*Ni-hhKc5f@UK'+53@!T9eG6XeYV[J%&NK(D5T[cXUf'!Y1bS 8,U`ST+6``dCp9&Lre1PNTK5,EjE#*%r$0'@$SU$+(&i,XbJ9E)IM5KHF,#)#)-( )ZMLTj6SBP$Ti%f@U(#(bT!B+16(bHf"#AV+*4c"3K!ebRAAH1dH',h*,5h810)E )m$Y%UN9b6%deMUBGfTCVR%f5SAUacHJNXmmi#k3+-T)"dQk"%h6jYPHBJHLLFk# e"NjDEqh$!c+b-I%Q6,c1*JB0%iG'cGpqj48bkf"b&8fQ&eZ,-DA,,N`PP*UK,,E im(!'AA$HE0SDe0e[Q[RcJ6Lj`TD5)p(3D0qZIP)[PQjG*X,p3LN9P2Z#Le&mYU$ l2$Y1Pq!qLf!Mp465Y1$KM$d`2&de(-rdmT86q5I)I3e$,FecH!4(lRQJYDER2TM IB!bkUDHeKKaM25RB`Lb-UJICX%iFH8("`G$C!R5QfIB+Z33R@qQ)bS,md)13!(Q 3!!"Pkca2-$R!PGDDNqe@N!!-5!bh+4aJIbY!'%TPS4N0#XF"`i)ZCJVBiSfaVGp PYjMGDZq63-a[(q,6%S!HK#Vj60&5-[i8T6BF*%9R`bX`k[&f$!1(&Yi@2MPZa3- VZ%8U-ljr%rp(@#(`HAShECiQ#DiJ44LfD+PTf)ERk6D%!m)8Xp8iX,($8GRRQN( BJSf$MXU[il(K"4b80q43f&!mA)C,KIEHBM4-Kr[%DGE*3R`meJ#$(Jli#P1b(d4 KIKD#K!@`*KH8kSD$+$!HM(r-+TNS`pE@e`R-',K2Ne&ApC+"89'fTJ3rKTRP&3S $E##C)3P3*KCN-5QMX4K0E$&'fI5XJY2eNqXP-qA+VGm9-V'8p8-$VCdXm`dm1XQ 9IZYA5(bJBYYiL-"%ZTXGVB-"`')pQ+4cCDSD+)+fYKe(Z%T(#,8U$hZDD1%$)kc J'BI6RfpV*J`bXb`imLY#Tf6b-BAT,PTP-,Dd$c6H)5`b22f,fdK0(Q-Z5DDL#pP !$`[TT61Q[Q#aSm'VNQPm6*L#m,NCp)K#!ZNp#iT@3D&H8V5+XKbjkJ@iS`D&C6+ VAB4URU0ATQjXNh#K5F*Y%L&dN9LRjlUPjM#!4Uic0a8XRbdK1Z(```fEp(6#32@ F)remJN!%bP[C5BBSM60XS9!RrDC1e!@'6(5@)&"PaJ!!+K8DCp-E5kX0aa@kqpT kjPSB&lDPAU#Ki6+X3a,`jQRk"X*BQEBk6QBVflb(4TMlNm`"-8&Cqj%)e4I5+H$ *'#1'+K#$(0Aea!p&%6pT)#UD*"mk54&#rL'502@A$dC5r[*r4P)6+&(!S2X28-C hF[Pr+4`+m(5"0%0NHP+&L43ZqrkeV-TVY`4CPjM5Fjpk`G4a!6)Pp&Y8SlHB+"! `*#S!KeJ`!!F#T&af9&TdR`TZbe@HS'4!mk+l-`"6M5&M"NfaX16+iiX5eCC-MbD h'2H)hZFR%1cN$6)($ief[A,L)"P+Ykk)cmC(N!#JHS*G'HUq2F8T)*LAA*ZfZcc qa2MmbN&qi0$bDiN`QE[D14b(JRQEG)!"UDclL,HA'CV"56f0(hU`TMA46Ef*Y)m jCHhENjmc20,fcP5e1S@$0Na94l,am1BM+EbmV@fB`SSVE5h)[SMXY929i9rMSAQ U1Nf$KieSpXff(G5XA'NV3hB3fI1QUZ86H0Jl9Che'KiUd+bTl5jUGP9T@i6XYFM H-PAY[482cda9qjEJi5Nfj'jTb1h)GL#lHUUkr#8mV*bU6Ll(`bV@V&jUYMLkN!! ))D`BBaeN9'#YNh"Q'fJl"31d&XMbGX%a`Pkmmbf2&3&(6MPccMVMIUVd&DR59j4 Kjmir$rIXr!ZD[IC)F9[4cS[faThAB1SED&[Y+0jj!)Da+p34J@a@c+Q&HlAmK`m qbLaC1c1`mbeNDLM63N&RLJU%TC&%8`TU&T6-S+*G6!3d8(MXhqQ1ZbR-G@#3!)2 9$rb!JmhpeK5-D2Z$9rrG&B4B[c-l!%-%A"Zc,EkRhZ,CP)BpNDIH3Q%+I`%4@#S 1)c&3ZQ1DqjV)d(FX-aq4-#Y%Ki5C,h'!(q6%E25p6YhB'r`bIL+&2(!mi"C9UqY a"0J3e6jkm)VU'AT)LQSr254%p43pD%4eMKj#)N+biQ%5JSrBj8kk#Cd8VdqKc[B MqGl@cb[FGlNLf56@"&iFj0pb$h*VAI-PFYl[ImPk,AQ06EPEF0[K#'F8@QFkp#% L,$03dF'$Jrj)E0![Sb+-H(6@E+(E$V#i0A@4(2SB0)l`aqV`Ffd3$&,&03T65Zc `LhH)@IXZ83LT(pMpN4rdqQ@iXkid$!43@+8RCTJKh&aqLPhLi"6F)I'DI4afdU1 2'JcRFXr19E3B3`1Bh-aA%c+(19raa1,)SZd-aG3QDM`8Bki5ZF2DRDZk++L#3Sp Lf"3)RPb#id+SpU3RJFBh)%MIJZ*k#Y$Y4h5%MA!RAY[BQTX2"e[UP)+f-*-i+qb fU,%eAfT'J48Jp(d&(mb&KdcC!fh1`mh,2f&19JPf5,ZT'm'*J),"S0'1LXbZEPB mE5f+d!PGDSCm3UA&QUbJVVZk#iBk-SJ6'A!C8Xp%EjV#f$#@TPN*#54#U)R692` *#dD&Uh*Bq"Z43ZJ8R-L#`Vbc5-ZUiNe*eYa'di0`)"qMUNl,E4&Vck1R!S&IcKX iDN`Sf1NPCaPEKl1iCGU5Q"PSQDCKEUTi40X#0a*Nfj'%"PT&&*dPJ5fVi9[1aKB (Fi8&)6&"+aDh1!lIJ1JA-BCRF%N)L3a-q15FR0CiFZ[YiQc5pFV"NcB+UM8M*9a Xjb!QqSh)`03U0Xh($PJqj)ZA#)`J'lk6(8@,LV,UqblE%Q*m@)&a&1HJ"PK#(iS hC%&3MZA0!VX`d',IHX51,R$iAJZa%H8NZP*PaME3+fc!c'Hej#J5rpJJm-0j!3H ea#%bqZ#-0m'1339f%+5(qd`G8`#aRFX-de$S5("Seha+&mm`EIk8Ff$R-XYSBQ" R%99-$YFBYb1,N9D9Q*&8aV*pPa@Z+YjCY28j&+(ek6mr&S4Z!`',lNV-iY!kaUV Sp+42#"FBS#h502ZhSJSdY$X(@LBXV!0(FFZ%@,bcr[!06j-"N3SCV"X[)`",GQ# PEX%eH*SKeh$Q01bP#dh3YP[qQ@kYYe#6!X8Adp84S0pH+VD!N!"%a+6,M%Q2Br% d%Y-k6KFeNY4C1VU`Km#L3B4Vq[GkYFXL"kd3DcB96&V5j5mD@`kIL10)-B3l%bd *)EY`S-)pV'djl%N+'A-ZqM4F&Q3S$1!Er5SjcQ`Ah#FE21fcYL9Lm5q@iP)M"m3 ZZ%P%S"6*j6)BIE!D#$p5P"qL)[*i6-e[JPZkV'`I`!5P0N1&i%&Z40XKq-(j0XU Y53KP4U3Me1+!`S13!+@@a%NN0aG,Y0H*S8E&AB1&f832HGJaL(+mMN3jJF$'m*a qL+)DJi-I&Fk1#i81UPK4ar%mD)cFJ*LE1TbbU$KRk&%0aS8'6+#&DZ"*RAfJTBq Ubp+$*1iL1#[#Qe!4G4*2Lh$FHLm3'#T`r!!Y2KNJ&LCYM0$'Rrj#K5iY9JV`&Bf !R+kZEN0`L(&qdkk@2S-!EhY)hI[aiXN4r+`QdFBf3N@#JFDKiU"LHN1MT`rm5-5 "YaKR@6$1)d`XH@KG(f&NibU%prTqA#`QR4L%HJm0",CP`M!8%P!%5ah(-(G*`i6 kZPQad[a(Y+hM`qFL*eX+FI1dP!cjl"EfkV-C,J3%%"l#QG*$RI3L(`mI8V([)8* iB5VB(9jUeP)@82b%44iq&cl58N+!""INFV$+!2MN$D"P)N15&F+N)hf%3JJ$V40 Yjb+jPZZXq5"Fi"m06YPSh)ZYhdBG`%93&N"V+)ff6#(lRZaN3-,95GB0[0d%XV! "Md@-1`9L,%X+a&"2#F43V83-p6!4Jm#-[Ia8f,Ek[N5'E1NK4hTa#KINBU&%F1f 6,jT)%YQ!`Lr4*$R38N*(C3@1IBB&J`0T!6+9R`-$P"DeP-FJ&i,,r3I)aFK%"-% 9J9J5(jH1fPK+46Gp4*!!VkEf%9XIS@4dka)R&paS%AMQ033jf)D#,'ANLQT`3N9 i"ahBcJXN,KS#Sd5!H*4030AlF(JFSH99L`iZXKfX)-T'5`"$2fi*H(A!R*XXij' 5)JAQYj+Gkf$qSpY'MbaN%TNXYb&"AXH2$SHXCiNkJ-HLQ!2,Z"ir[m3@NQ`,TH3 mrU5I&HP+3`!Z)9bB"NHFPSlBCcML`$QeAGQ-flLbEV*UrV[Qb#C#mH&0,LMAF'% Y"2+``T@*A@!,(jhi@0I96CXh1,ZblXFX4-D!TB-fD`[Hh&ZdEU#Rk#NNfGd-(Cd E'QMTabFkUD)#i`P893D#j`U&95cYk#S,J3qD$##+PlZ0Xe)iK!03,mBN9rNB)4i +@h+M!@lFA"!$IqX5a%"E&e5$-DD1R-C#fCQUE4#GR8Ea6$!A5S`&%$LZ60-(h1S %KrbB&%UJ#jZE`qB'cE'&(YEmF4BSEJ`+Ji%Ihf`Ki419m*16q,'5`rZLh3A$P-i 51eH&UQ-5,SF6#"e*!Q5!&BP(5$H,pa%%b@l9S+S[EY9!k$J$KGfcjQ4PMLh*'S' K4p+02G,6GYQ3!)&L2!LrSBB%CBMkJL"d6(0b)M8%!%-3%5mHR"#V,k2SPdb&rF& 'SlKmL)SCkj8lXe3`6+C3*"irK6YaG%%!('JT0&3R)%-Ab+Map1EYKTV-aU!HbP@ rm&#lB3R6kpc$P#Uh#FS*9[3ilI5B[ZJa@$$mkqMRNFk@-dM@ih4T+5#3!%0J+4* ID@`T0(D+ARV`9,%QKNpL@5p(ABjP#e@S)$YG-S-%ckCdRVc+Crr9hlk*cl)L&J` Bf@2D$%*#((U$!8d9+H(R,e#f`2bLQKTQU($LAEF,lX+SC*)S115(fr$(F1(0C-U EG@YGCfZY[953!!16YT!!!-"HE-QBq%4,L`-@$Fd3b-VrR4jFVS00!QLYJd)CKI+ KC*BbV5l+RPVT*HIG%D%6K%$U$Iq+A9KVN!!blY@aSP65`CX@XB2lF!%5+bXQYBi 1E!C5-!(M-V["j%[LKBkFH[08k(%YJZP"6#!hBUMaFJd+-i3-Q#h+TA#9+(D#4k% D5CY!!XiPdB+UF3NKS`"`$#L%%-JbZi!#Pe9(SlpPU`cS%b+&Pa$IXU8frF@hPMe -50''iN[,(SjUQ*5#83(kSaVA3LA(80LbbiBKk%K$@5c!Gi3TfA`@Ri$J)458-%5 54Be!)M-@D0hBl"3f#KGB!BA[+BM##HN[p6)&#IFETl#9[!MGLB0DC(CSQ4Aqh)L X@U"@(1T4U(929)%!#McB+R3GAU32m),3*mY5"D5f,29B5+hX63QTp6R4e(,BhPT 8"H6D6NLYL%Y)lEU)kB68K-d999('3&H45)KY@DU!f)U#!hZ+X+NL,L!f6(QF,Xl fTj!!G#`Y31(EUe'"jf9dij`a#+m5'&#KmR#l*fPJj2(T,F$%lbl!a1Fq#"1IDf$ LG@%6'ppF39XP8Uh+%3i9HI2Bc(ccd[q-Q@qq5f$Qml,3FFl!c&'JF30eKL9i'B* 'SU"`kGa&D)`&+Y95b%!G!HBPaYjIBZbpEYmZE25J%'kCS4DBP"3c!)p#ZU4F4[+ L*%C9-G6CGb8[5B'"5Tb[@mMj@LCKqLCY5amC1[5!#A"9bQj1!3SX!*a2jJZ%85m 3f1V!cK#3!#(`2-*B,V-VkpUVjRpJMM!@$BbDS3)[[fLU`-Z[#4Ai-B%E!'#4H3R #F'akF,"qG"+)"[,5jF)4H5Q+fX4[lPhfcX#HCDm4B#,C[S11%0*eS@k@XFR,hJ( *-L!'0lEd@kC*3*!$QH@V13V3lS*$rrKSf[Fli5V[25YhpDcY,&kmGPHqE1eCZkY iXG5i`ikT",B8&+aPcY+1!6XaS!-0F2(9C3J#lY-!GCrFYkX!@1B,B#N1Y1BM*&m q,Ck`D$"kE)TH6S!2&GdU+ELXTBkSCBdaiC'RTNBjJa3aYFaSH$Zl*19)pjiCI0" P8LhpC%`M`%I5DbaG3S8i'0*L6[0NB#0fGrMMPY15fD`+KM4lY#(0YS"-B0BHIGG KkYM@N!!R1(F5&j%,#UacB+$PY%bUbm%@edP@A0i)953cM'UBZN'M9hI88p(h8@B UU!HkV-q&L$)*mH5@iH+fcVBaGV[q5'GE%460#9**fiXE1r$cMVfadBkI6G&9Y`8 +R[FTN!$Lk+Ydkk@!Jh')#-PLlQql$15hk)MD%4E6RTp!d43["3&lUJk&f[Rhk[0 V%DcEhM&+(dI)+(-YPYDFH6B5#cZ+'bm-q3e,5Fi)IZ1Z"aS[S)TQ"C)20crGi,5 @e-qJ+2K+,30&cbFj#+KqQBRDceSQcA"*YIL-!beR(*891Ck)k"pL)HTf[p[96DV b'AP)#0mbJXlQQ2+m1@fF4!4R*SRrmbZV3*!!VhrHUmlr(%%6i3lLc++3!*%`Kj1 63#dTjVpAAq`9MZq*G)5&6[b,k2#kY+%drI%(fZaJ&-fIe!Q6D*!!BQp-QNLEhBN %jIm,*Sl(Hk1f2G!fMBP,2XP")F4QCae02)Y#M`C#J!#T-`10lf!$de*LI)H4)-K )-!%5e1P*J)"TBKDVE(#BqhISLC!!*@6j1jdj40Lc(R3r(Y9p"`CIalV[c00j3I+ @Xmjai2YYV(11cXZP,G45dQ'1),aSZ8#QF*Z`lA!$-IAmC54N-)QhVU$Lbr`0*2G c84@#l#MqfJhmT12(KCmVKaXAHmGQ-HNFFi(*LmaMe)'c"fb6(B!kfDN&NcX*jaD AVB!#M"R-I-GJ*+qCP$Li8'KMIISM5"kY%e&"!eBD,UY)$MT!5B8P6-fY1Sd3me% !"H"IFBA%A`#jm*P$BF`T)mlTJLR"emP94DV3E1,!aLD`LIAjF`2&'jZ8e),UFFB H)DbD4309e"S8bd*PrX#)@5'@PGIN8E62)dGq),[kHbp58@!Di+c-ZUd[d'dp&DN UrFX53kAUTHC8P3CITdHkj#0YTL22CLKSdbGe(MmpI"NERhTb#EQC*3)S*2C`$MP UP&5KH1ND"+8#NUeq$@S'aA1GJ8k5K3p!J[fAALaAQ0`((Pd0%l-Z#,HQ`R%ipYM 1"pUZSm"eFGYe!&8R(XBJ#+BcN5R*9(CN2Kkc0VD08DJd8p'JN!!aVp*Y,9XZ1Va RcNkh-mFNZNmJ$`9JNS*QV6V@F@qp3G1@B*SN0'8JY(-U,K@9DK+@0MD9[-b5M3E **Y2Q&m-HVj4d-Z2FrMC2IK%P@4'kCa#A`KDreF1$3$)4U32rPh&$FH8B)pQUBj1 -%FaN+L!c$&60YGHBN6%XQ)5MM)aq1(k*`b"-ibq(HaVA!l&AJP900,j*U!Y$3-R GhdeJ9VZl,eT*bJadA@pe[8A)33UkRd#c5P``qZ2S#c*3q$!fZ0iJR@Gih4j#-IY +8U&U6L!d%#lEM6,UiK0d533%!q+$pp!&%8,-"1L5$R1UVc[kJJe3miGXi`bd0)b m6C+5(8'4eMd&)P%Aikc+Up+6*F&#T'%L61*&TJP&bkN#c'"Xa9!2Rj!!A('U#)K !B)3LjXPlJ96-LBV'&KX9pj*8fR!Y2Y(a`a%4UqCY#(C8hpmp@pak#m*U5DTk3L2 X)X&dQGSN)B5aU`Kf@%pNYPm3NQp,iGR#JH+@3UAHFmi!U$0A65!+Y1#GkH&,N!$ dhj%!GH@a!98!8$428GCJ`N%#h,%'VKd$m"U3!!DafRqS[2H#AS5A%&0a$KQ2'0V `(4YYX%4IjH`&HN,#hpikdmYA!d%e#3eD#ZqpJ+`PdBjCR!-%QaTIHi3!F4XqI)e P!-@f+94[*!BE&[V4c4k"Z2cSKQBHl6+ai['S#hZ`3)S`EFKd'5#`Q@piHXR-)cM 9GB4MiC%8,39Lk45GjXk+ZK9")F`!L%YUrj!!ZA2%$qLd5Q`lK@2XA+KMS9HAQ%` FNZ1&+HaBT`%0$B8K1+m#qNrb$5Zq6kJcNNQALfE"15J)Xm`c+3,(,6JH3-dERH6 )!#*el5)(XM(1"-,jI5-cC+4E%I`B'kYL*Pa5h1)#2k8(k(,[TK"+21S2!!!aL8& %3e)$!&JL$e80CNB4%#(MlQ(rEEq@U[6QcehIA%rcq&c996e9@lfJH5Ble)d"Zl* !Vj[*l#cbjl'e2+6MqQCZ)B4`4I[jC3HF-L1Ldb21KF2%QQ3mccUCabe%VfGK28) i[B%4`[+X`fM!3*0ZdZem-alVlprIrrGe(5#rZb6[*5mr!"9hAL6c)$)L%L(a!"% L"PpVP-PB$$qbVeN!+5B(X%N)SYRX3H!NXqKm-bI",%8XPH"lmrkmEm))rVUc)1- pA,eYPL'2D24)bp"(KYjZD*86pm1&LPMX4ppKaB0JVPf00MpV"2[Er4EICiUN%86 i'PB-T%ihN!"&B5"H'%MK(!,T!PpkJNQF,kHf)#!Xl@q9T6JL15B1Pj(AVFmkhZJ Im!m!E(r%(mI2HA9EFac+SM)DP"EI'%bdX[JI!Cq&q8!X'3%VZ"`QA$UCK!QE-0h p-"Y%eALC0hZ+rp%@i@)C@UA8J!a16ac`88YmM)Z2U%EmkAI01*!!4SZ[jB",@I4 ,b@d!L1[%j4#)bZ050Bh3VcYcb[(P&NGhLQ(2i1aaGGGGmB$fkmk-mN#RrS!fAA, !CAV%CAbFM+MbT!VDSkfbCd1(VeQG-$4EUfa'-0d-%$P%d(%G3U`kAmDBIpVQm"[ *BQeU58EpMhLDe9SUrUKYkB*Y3)jEaQd`h#SMe0m&J#$-ba$%q@KjL!6bN!#aFE$ E#kJa)k"'&LXUd0q"TICX$i-4`qqa`EpMmC3B3C9!bT4eF'RTBNBK#E`8BC`G)Cc 9HE@`I&[hC*!!8aF)[lr0hGe[HF&T,)F5E((Qe4iMfGB1d(LjmXKajC%SPJCfAam 0pRFC)BF&X1l*qb(ed02[UPT"HqckC&*Ci"F,lZdbNJ,@*`1YB32P-,+3!*-Dc0" ZDfpXppePNd8#85Z+l2UY1p*N@I!C1@QfRD9LbNPlfpP#IMM(`83f-LNa65@Q56' GA1i#N!!`'F#P1Hb`-QJb"S2pdqZNkQiBq3U#4"Fc-VcLjR3SG6-@mb80+Qa!LfH 4bZS"3rU)XA%2UkBDEdjD$jdY,(QA(l)B5`5X-EbP(E)!1UNl,XpVJ*5XI2&[@p6 8dP1a1Rr@*8&qZTGe,p5kYBCZ&KC50jShML)+'k+EHE'*P215$-1!!SjZAQKQ*FT "-F(p,,jdd,$d`1*#VM+p`%3"m3BaYG+dEJHXReALC!46-c'G%00*U4I@ZZH9`UV +SCLqcHU6bA!A#9immSJLH#P[8b(j@%!qqfKScfqcFDKl16c2aI#U4Ge"PBMke0% 3Ec#,T!Fpm*ji`'hqHJd5)55`(I1mPBD6@bhBG!Z,&iEAEH4cTXI,Pb&Jr04F6SB &+$LP5GPfPMIQRrH*`Ra)p@Gbd[!NM94E"iYE$3QiN!!,IK)Ald-PZEJR6A4T9Te KRL+9"-%p$--"Q!4SCI0"90#ECU*9J#82,23,A+8-LRchf85"9rfeLKQGSI)Z&l0 5U2aK6"5U4kr+m85PhD2,ElA#k('jU8ZZJ03'#m%EQ)UJ'$BT3Uj%p9Y`"+TIb+Y BA-KrbkS[6kXiT6@qGNLTqQ)k4+dR"KMQZF1+!N8"86,dA*ZKlFkFk20cdK5Upp" FB2cG2Hd8r$!cG#@$K)-5q&3C5dJ"DGaGr"dHcBp%QcJ!#ereDX`m1CIQiMZ#A&c qNallYFMEMhJbek,iUEJ@a)p,[A34"I2`aXN3U4@)+rB&E0UHN@V[NDqUEbU[9Kh jUR+&mXSimY@Ah-UV%'hYDFH*9!G[d4GZ3L$eVc,Q0E5KDTL8&d0KGLjXB4$CR#` GYc9f6*F@Y$hAM5N!AECYRB8VZ3pM9@-IaLVpADMqM64PmaD%"P1q-lm)%3j[C1' b-LI!1%IJm3#V9Fq)@R54KDC0"SJXX6K6U1S&hRC"UZr[kr@k1mVVr,jHIfQ6mYT la'Y!X*XAP*FKBMHHCXBL[I+Q523j#Ul#U$5l@U9pjK-3%19`%N)jNmY"GS56G%6 i$,!GB'+#d!pmI!L6,,2++GX5Jr5HX'b(9X0,6%$[MD#H`KYdPk"dPU[J-Mj%"lJ 1Q!SG`jMU'jm-6pT"VMq8,3qD2[1Ff%$#@@)&#+F*NlB,dm0LV5L+lTb$b5icjY' 09Q3rP"cqfe#*-&F')66J+fP9#)QCNIi1!)04lP#'489#KDEYq$&rH38U3[X)kIQ T[`YEPH$26SRV'Nkb1Hm0%YkPcG(e(0J[EBkmJdR9c`mLU39cL*clq8'IRBkedV% Y4VYEiS82RD`'J'UYFE9h(!'fI8&'XN,&L656k'4@Fla$T#Ji!H3Brpl"qm,8rKF 1mBTAa3'B8fQa4JE'TV@+c'bF61i#M-qRhK2-d&%PpI!N-pD9rr-qLSd94IHX&b' )BIi%Re1YNR19P3ZKZDGLeHSi2TMmiAjSVM+f6Ph8Lf+fS,@b`BM$Lj1lkd2jVA, 1"JDe1TS2aN,jFYbU1Y%&+p2!m$SAXF9BhX$K"KHdKBJYX8U4&[RrqAq4rm*rd52 q#bVrDIJ[J2rdJl)@T*!!,-(9KQ8cR+mH`4q#&QS89L6"JX+J06EN2pZV'(,0Rqh GTb([j03Z'r*rCp(*b+hK&L9*9jI#i9[PG!92IK"Ef2&RHr(!m@%F-aG*Y8YC,UF 0R[aGE-%DXX4L'9QFI+bqV6f%"8lZ#R@p8f`ddJ+)5cXH89em'jCd'e9R8X*-q$B )pJ5JZA+VUB98UbD9fi"U6EAq)b`Y9VHJ(3qTbH046K2%eXAU+J*JB8)8d&ih"N3 hP&[Cl*kaXI1)adQGDa9e,KGe,KpeV[28ZD5m$(,A#-Eq(hLEd'hrSrqUFCA#llS D5ShqRhkTT*YCHH40di*(a51*lZ)9Mcc$UIHAlcE%,U'XT@elE98PZB*-,SGK*+0 [S-GbBMA-RCd)'aI,""@)5B869j[P'iM(T$V"N`JVINbLX[$jY)#(Nl#Q[9@qb3i Fd5XKb4#%&@5$%j4m-m`[PL)5ar,K56SmUNBGFI'+PN5+hpbphTHd%c!6afX[+A$ c*0+ReX'8,j'*-)+je,A8caiTqipI,(&5PbT`a0DrFMi@Ne%9LFH[j$%*Z5-mQIY 34KG4J"X'2&iP(3r`iDX)Dj(-adYQFVDFj"6e9r-b"(E2p((B9hN88li9")5fm`U c'HFN!XTJl"8QHeP1"rhm)`D09k"3l%DFB)pPF1%%mBRC#UIBPF+6iU3FZhALid% FrR1IM&E$JHAR)'F'NcH3!$3l#&55Me0PG$G)hFl*i'2A!FcBM#X2+bc#PjQ)6ia *Z(CZ"2Mr5"a(F&%!mYbqJjMFU8KBfXGLch#"YTdXLT!!%LrM!!Y(rKarAXRD8hQ %9mc3NY-+1m2X#2jXKJALX&b8$iH8d$Se()SZ,3T",GqpRK`'ee1"Me+"Ab,MJD- IG6!TGe0hNj%@kR`!)!!dZ,2fiMpZA!*jp'AY[IRLDYX5#(VE$!jQ#2"ip-8r%)0 khEMb9B6M`hB'j`$NKBdCI0!@'FM)iC!!#6V%Ql8lmX84bli1U4Tb50A33f5*[K( jI2T'LL0$$UNEFNMG%BHXd6FLEk9[T$Jkj*!!fL'(e!ij4"ff$j*@[-M$p8VM3eJ NRTP&#bHEpkcGH4d`CSB-%fi[Eb-8F8Ia%e80'*i'!l%10Ch+ChA6BC(CK-JQGUr h@'H@#R*,qlEVcLXI,-@UKqhiUHc2,eT5Bfc!#+RIKZQ8`)Rd&%bMR0dpm@FerU` %,,LDder-4-C@JhhEbf%5`*BjU+[9-+UY-1A9Z0Rk%dk5`Ed5i@ipf)GP#*YA'ZL ZX49lAZSpfF"`S%e0TQk`![2PcdR!I5[8(#Z3!&i19EBcXpBh$R*9aL5XGiSlHpp 9I,Dl8q31@S,0V0L!SkGPjAjPkjF3r"R&HGY*hrZiq)T'IYfVG`Fq(+jm8Ee$8$F !!lB+aDeh!`9ZL+B'P-k3!"`1VPj#d@R8#4"FIkQC1`'+Z18L*8`h0ifF(Za`k2U @G"K)T1+j#J#mcTbAKDQqUmiTPerYaH9HR3`93SpG*e1r2GLG*bDi1fFN3)068!V rPH!iG!!8iEHr#Y)+f0D1&fGm53+`cRad%fRDQdJ3G4RcM9d,[qHAk'KM@(3@4G# !'bm+kkbM2B2N-)#`(Aal22,LldlJb1a`9VkiDAJi,aZAN!#4)1MGj9m9CjMIG68 l[m-be`dch`k`i@aKbR890`FA+f4X&,#*fP`)2(DG0cDAcFS0!l2DBR!-%%N6,VX `SErdZl25Ymd)SF$Va59"A`IB[5QcFFmQ%1S5*Y3%i*FcD-`2i1EjdBeU45&`0h, iGb)KJ53Gh"-,!IT3aaqJQ---IZ!bYl!$b3N'+LD,+IZlQlS@E%S"eh$hJd-8Ak# '(QQ025qPSfXCYMSYBpP"N99[eH&B9YDrb&HA&FQ2VP5AM!E(JZIPc&Ke&C&AXcK SJa&Aeq*2$3GBaY9R5L3Vp!([q0($dS5*ZNK!%$F-ZTc*3*pZfVS4Pr'0Lmfm"1T p!++EmXb#Z"JH'(bXI1QTkNUhDIcJceI$A4NQad%1`VmN1Tp,"('aFS!#$+Zfj+5 R`![B&Ghe4fl6Zj@A'5%3"&jX&@k59DQ4dc$&+4B1NiGY$5,eL@VIUpiq'AKB6K+ )Z[`f'b'`NV(Uh@cDU'Dj##80&`!$UhfXZSb*b93NV`%3dVCdS[-2+-jXilqi&lX Dbi1e(iF,*BcDBbHB+H,MN!!`jBiEcr,QN!!3(&F#D4(@1)L!M"$Km"%CF42a1%k Nifla4L)SYa"qR[38&lq*Rk,L*(hX+Pl1(e8h&hPe&9M"VdYCADFqPrJ3T3mML3m DICK+I!M6KiV%K`Kpb)d&e!a-ZV@k4$A'!ZiSLeaYaM4#de51'E!IL@@SYVqkc0& Y`NKm48MaPK8F)2,2'B%YR6!kebq[5kNSdjeFq!A6R5G6YP#i1rp1af53!*QqYSj *LDB&8-&YC`#5aKmd26l,DMBRIFe'R02E6QB1Grk%A@Qf(Rd$DV5,e'McHDNc'h# [#I0'2(,G*YU3!*5e%%8,+dG2NVEplqM+j5*%&d+&X-YBf&-bVlQY,bI@0,%0N!$ BaNPX8fRXG#q*VBr%GS(%9Na#Fj!!d#k3!0"8%PQ[kNJ)kd!-*!De+L#DE%%S "3[%U3ZP*#-9-##8NK1+NE[Dd$3lXQ8+J[hh$$6MfGAYD$#SLlmBYrh(XU9M[XAm aCF-E4qY4$201Llr,0j'k`Fk`dq+BImFR+GFD'ad@l[CSS+2GPD)VUk8-RC2b[Xb G5%"S8!h-,SBG(5YZh(qH!Te)GFRp#39b!86aY4VAD4aK"HLR-C%6,Ye`b)(E'UZ FacSCJ-B@akTVETkdRE5d9YFk,9&,V$B@`dfGd`*bNpI*$@p*YC,+L1qVq`m&TXQ &Q"c#@+P4F'#(%h`G1m&lYc+lT#Lq-,SE#hH-K"XQXFkSjq%SMp3#1Db6d`*Ak+N (QBX+"$GLA'9`*r&!5M!LXP1"l#S1H!!3PM`PALZ(@2GeN5IhkaIaa$q(ce4dpPr HLe@KqL#'!&@jL1d-D$eTFCdQ!%J!K0mM1$!YY@)51HBZjdG+`M2m$4C(bUA$Vf! '5&L!Q#ERaBB"@r&(Up(lS+&`8Bd@283`fb"JaN%8QKUKL8NT3@HQMH'ahdQ1DdX Tk$K1Vi[dB#NfSX#f"T5aQJj2i@G-CSSYB''+*T%HhVJ@PplaS1R6%GGT+!#TlB* +ZF"GQAkX(YGB8*dVE0abA@HB#bE5MpPC**!!1+%,-(M!fAimmQJhZk$)(BE,RiQ Xm8Al,cYZS%'5mq2fkCq*`"m*0Ra!Fjq(!)iY`VRUNCRAa-@rh`I6j-@X"NE301+ 5r0K)HLE`!!6ir98ZGY&IQ(N0+Qm%CPf-M`AkH"q2M%CDmD'C2XbLH%BjSHCMdmM `mQSEGiIBb)RpmL&Ud203hfPqDI"K'9RkS1R&Hhcjf!LE1QrH-iCM-l,R3G1L6Ec bAT)paTIa!&*0q%RqmTl-b@EmC#@#2clqXhb6r#br`%2SB2TRZr6K*bc[q@(d[SR %"K-ZrV%[RYJI@31bcBjq)qiNNHf9G$0"0kXcI02m3r&!R$iH,2"0k62dFDP%ISb 2EI4!-6h!kRq%b2j@RK+E@di2q1L"l@*KT&@`#(MK&5`[h46STNCjk"h&f@M%I8S dNU+EHh3$Z$mD*V'@#UDPXAh"6XCQ#SLJ$`D#P,)6Lfaqdc-!KQ)PXm%SRY9'[$M IGT)*N!!"i$afX1dbEZ`2Q[C[9BL4M+`fl!c('RD3!)PA-Nb8A[R*CE$&Ab6a,ZI Mm+F04ejL4d1%#fZaZ)F@Zf(kbh$KVEL`Xc!IE@G`JB%MJ!0fRN5P*b@!#3%di1& b5JCYTk2,(M3G,Q@`&lfiLe4(-9FGM5HmV,6Zcc,mLb*MakA9KL[,cN%e@3X)m58 i)1edaa89+DVH`SfU$$Xkc3Si3Ec5d('dJ3-)T@)(A,TNcC!!5`q3!1%J6HpCG6G b8H-&KLNYS&`5KCCB+&bJ0aGKFA01rQ)JYS`1q*j2`if+P!0!KYJb6kqbU3P5#(D !1#Z10R!5-VE5b9@+rk5"+K@r'bQT2eb2VI+$FCl%YZ141Z@4+[%4iKB68e%0*Li PeqdA&mH8&ihi4p'e8NJ1M(,AqQ$Y#(8YTDZR)03&lTiIh"ijMC[lJehpJl[dD9C dp!p1JEhm4+L0$piI1Fd%&C952@%LTpp6Qa9@K5VREr!*-RZ)&&U5&"(-&GX2X4* +Fml+LZBeihZDbFdILDk*)Q0Cqq``Nmc',YrSD2cCVUEfkHLYpN*Jbh81Tk!!iL" QJFFk1FMl+JT#GMVHNL!(fU@daJbQiLBp`3h@10N!eUR#E64CCZFbmeZlLi`912E 9GLEf&%4NC#FlVIZXSYNC-8RXXS)806Pk@%4$Y("DJb26++,NVl2pXeGS!q'dPl3 "U1,8Rra1DXqmBF`A'Bfij*qmJ82#JqP0Uc8ck#!5T`63a--D%PF+qa!ECSBG$HY BGFhkcrL'dHfU+1(b(-LAbBj-Acr($a@NVc!crf-d4T!!%I`!'-221KP81GfSF4H AR1T-&U5rh@HGR$rb8Y@F'*eJ%QLe(Z%J%+iBib3rTeQG[8Jif3YqGmXcYR0)$[9 E1%%r'YcpEe4`Mk1iDm'!GKB#Hkic%*'00pjFX(25X[(QG)SHUX9$MkZc#!'$Khp (K@mfhVaIDQ`mA-p&cVF,TK&3MTE2hYMpEb#&JipRq,"CGN1U8CE3TqN*-)mhd05 KKTCSI"N)lA'IM&h$T0BcD`6fk%*PX+iZDZ(@AjjN9!'Fe3[C%#I*[B%pD3eBAV8 iHq(5@8FQ!C-VQ%b5Sqfdf13!2QVK!kKTMIdM3*)r+Sp98A(9SF+Tf'F-EJJLd[P 9DB`E`IJjGZ3(Q`Ia1e(8Q5,!14NBQmbLiic*(+A6DpM&KpP#&KB)3#8FcTVGNEh j#cmG#)ahMrm84FlNhR3J550FYmLGV&*[&N33B![Bj)Qr2`mS[EBJZQfbS#H"cp) P[m$'a5bDD0JKFcUlpU"Tcfe+QdZIbN`ZQ1mHBjilYYGX2!PR)5Br,5!lJ+6l,h0 &MjkKl32D4TI2UBCKll8dGL``JFVeYXSFJ[EDhM1UlNb9G,c")!G#pP@m&9p"040 (QSpemV(+K91$&jiY*iC0GaEBcZBkKX*%3HE1Sb$aB-B3KFQTq4XSbZhdf@Q`3a1 +NaSF-lXFALV4l%aQSI+E@H@RZ`B"P26Ua8[0!FUXNS([,8Ub(BehVV!$b+h,e%L ,S$iB'6E1#E9#2MX[)&Ji1i9BFBfL3Ec258j-GK,),S3XZij(&@9Db1PLDBT6-a# 6hHF11"C9b"6L9,dGh%aBD85a(Fe*@6PHCcHF"deE$LPNr6RZ-%F[Sb#3!%M)j&8 R&BrCeYeiilj3ipp4arRM$aT8EI%(hqc'*UZ83QqK3M-6!NmPK0-1FH1PSd%mdYJ U8p1bHZH3!!#P6P%MKCNVLm`-MfEECi+BM*RY[d#B$*3aV+F4f)(,id"PQcNK`J$ CX(#FME5eFp!UH`TjNb(m+"cI4'Ve4dML9rRad5-q2)d2*AJS#%(9CHITJKBp"8* 1TD@N-Nafe[+h8`0e1*QaHeA&HllQ465cPelMZVrAFdd4h(1UJjh"6U+VSVK6jf5 T9&h1UleA9leRaR'C[aAQ`-E`k!dfJ3d@Af'a@cRSK#FR$[+Nc&%CSBTE91X-B&N eVL5!VX0)d)!ElSIerPjI!8CS%YYKGdFA,A3305!6R9Ca8iN1F8kU9ibI'c*QS%b bjb@CeJSbq*a"kJ0N[`9N[mAJjQG`T5mfMriRM,lHb)2KC'"VNjUN!,)HIcBTEN0 @+*!!4Qbp"e9p'e[V)3F#cCh&&P4mr!X8bJi82VZU1A(`+kc!U(XTcIP*FI8)a3A 'e3Ib-k-EV$,`3$Nj,Bc&0Z&2[Cld"r[a&fM#dXJK)EUHrD+T1-+1jZ!b!G#L*[B f`-ZYF&(G(LZ(JqkZ@"QlkFC+m2,*@!hBSD6#L-P)P@&h@"T[c!lJq#IaCcrql1) K$ll&T8Z'A(U4,id+ELA5mQ3cZT0e,2Ef"Xdhi3r#M!jZ`'G-9XkFm'XHk`E0Bam 11%k)TJYJ6jGpG4QFP54-UFBcc$q0@1l*!1#1a'VBM3VSa%G3%$`Cfi'P`SQ@PJ, f"1K@YRZF'pZUc05@p`,dc*VlIK!ZiQ8`TUed-DpbX5FpeReYD%B!TmXi91'QSh` *L#pAL1Y0d1)Xi-A"`$hfbZ4b8N,Pa!3$U2ce26edN!$-AYG"c5`A5NSG)2-cdE# K6$6)K)T`*K51bUre#i%C0JHV0QIlTQML9qEEM`fe3!eCLF`B#49N3!8C3JA&UN" 31)bU421H'XHCJRh$M@QjlTdKLQLplP*P[#"E-Zbm`Q(1HL,9DkLlE#S5hD@GP'2 lm)I#U4!2e!Y'#FAdLM'PG*F9qqJ1bkJlb1$[S95b5TGS9'A`(@TddhTH%JZdNS& h0Lr6[#ZY8R%C39#LUcd8Ble3HE%9KA`FkNe*J2D)KU`%ha3)QKXP81k1fNG(2`U "VP3[c!5K@Kr&Rj@UAeH6`3H+bZp#9`!TQbl9A91#1ijia5Dq8KbS*Y4UN!"CrNF pe#8FA4"0kkrC)&[riekX9EJGFN%TU[HRH(JP@+q@Q@-JBUdk%8-)$!B+LB[E"Kc B`I6QmISl5R1!eA#F-jqa)AfVSF(#kJd$#be`#!Se$NcE4`(ES*&!lGl@f(T1$$4 C"K[VarEkT8rcprYq"MBCEMQVZ,JL6AP2b"eYb[[Hjb32M#p)UDQ$p"'X9HcJBjb i23Jc52&@1'dP2KpY*9$!PM9*E51&H#kD&84R#5EHjVm%BL2PkR-DXefFE,iE4+S jc)hIZDQTIU56)GA9j'#*+JNAbbf@Tfd-pB,Tbf04k1p(BQfqm*d@Z'AB9'C6Pm% *i+HSe#&ZF!Kh[A*eKh1UGfT9#j'DlkD4'T(dB')6[K1J!hBSj14XKL(k0UL"0VM VPkSIdrB$f(kF0iIQ3khRSZMd$%2Br-Gm"@iUi,(MdbEqG#j+61chBQ[8&%dI`P4 '8STDf*K3#M-kk!ded!M&Q5@eB#1eB([3p+-qaCee$4cES5!*e,iX1JDR%f9@[DQ SKieTbN&Fp$Ym8INU+BL03Mf`8+!FE"cbbbbBb'c@mXeMU-!Z48%BZKRh@ej18FM -MrLJ%UL,Yp445PU)EVfG1[03aUm-`h*BGB#'MkE1)5Xj*ETQD00jUj98KdQU)k@ !IGm'f1FMX1m2)R6qZTXK6*!!SbC1ChS'+$`H),M[6LDS1JZD![IaKRA!ckN`P9D `Iqf1$JEh%,VZh$Hi&r'aNfa4a0EZ#5F*T*Ef3A#1KiVKMEb*!B!Bq%0bk`@`bbj $Z$YD5Dhi#Gir,T,lFK1VUSXIb[F8Plb8!RMEQ9"LN!!,*d&#B2AC!#D4j2bA$"2 +$$F&D2h,,+c,+`Z,r[V,Q-(p"`d,al$`cPpZiGGUPB@+ZbR"d'N!4QEI!)BQ!!b V04h!!"5Q02@L`8G'5CfdF4&#f(Cfd"ar5SCMfd%BcQIm2,$'HFNKFbEBhk'1)H! pGRmL%qM['0@HlA*d)hMY36,dZT)BM6BHQfh1"4aGr(Vh[qQ[PR9-2fS%$RHbZhC f[[(BJJcHjSlHH'aD"Ld&9TK)"+#"a!3V6+J*'6c&kT3'AhS!"9qZ+#S-&D2'5GQ AUf2q&c#-@)E9-"eDUaaCSKaBTaaBK`0hURZKX-T4UEKq&,0(G"&5PG&A4GI9hF[ h@+"DYi)&Y&$k4)2U!m-`a`m&YeY@bHJ*Y0N04JI3HLbJ0"R#S5,S86DDp2GlC(3 YEa"ESJCPbTDUX+AGl$lD1,$`,#C*N!#03dGX6&(K8BAJ3Lf(KfiYXSZf&U5YfDJ a%4KJ%PiP5)X0SMAEEKIbaf8ZZ2[e)H),pAINY2*Z4pIZeb'qd1(V#DJ#iZ181Vr HrEVqUJRL+i6ZDJaT%%J#!8Ef%N`#!8CXIAiMILS-pRNRYZ8DI*4K-D9+1jALMBY +6&@3!-GJ#PAK45e8P5K9CHA33Ui)4Qr+Q2q%M`dlL6jJ9mHiXR1ShSB6f-J-0K* [2)'0,!T4#2)T"MA"!U[r"V[pm++RrqpaQI(h6DR@0'1mZ4!Q`lNj'hCd'r('lSA Gr!2(J")'iNiP1Ih#F,PkM6mN+K4+0jFK&4+1K4&8Ce9LUmHib5jY&88QAaI&)ED U,qB0Zqd#QPGFkTj@Ri164*XlX-%#"N'$fA!$hUe)Vm8j9DC@m!"Kf6L$FA-@K$h 4(m1K$*-J*N&-!TKSQ)3a#@$bjSrCK3`0+6$Cb%!KKQS4PbSI'U+4`lT959'Pd&a !!e1MjHaMmmYZH#DJQZ''CAb-SCpZq*`VZZN6S$eM%`m'jBXA'2#$`@,E5AGXJf9 `k#CV'Tb%aJ00%dd-'"RjM-YYrY"f&ki"*S0G9@!H#dCqrHHB@ADkN!#JpXFUGIJ $lRAR4C+Ki&FAf9&8lL3SNJ()QbiHeUY&54U6Hr#,R6c)KR[l8CX4aX2elY3c0T! !*T!!Vfhmb"8HS#r9!4%%TPI!%E4C6aK@EqE$I(C@J6!0K(")830JaA"AjHQhdq- 33eA"FHa&H4Q-h4ehC)l"qPV[H&(UZqqkXaL3!!rKL(Hm$`P4[S'c)&iE3I(#k*l *'`iNDbpc3``-qBA$eSmDUE6'&A9F@+Y%3kb*Zp*)FB&Lb,m6D&LcpN(6(qpLm'i Z`-0#(6k*+VZB66M8@9J#Hjrd23FeQI4pJC4QPI-&%(a!k8Cm`2)6Lm-#0Uh+C'L (3CR+KcRG#%&2cQ-3ZVH&qdmf-'ilE+'YZMJ%EqXXj$r"`c+&m!r(VIFcc1!40jp $`R2#J3XDr!N+$@N,EE!USLN!1f@qX!SE(h2QH3JZ(1r3MqE0HV4qr0#fl95&#E! f+3(l*MIhR8jVXPLT3pIS`R%`4-aJXjX*8J8)K#8U"##jqQ-"*2YkQ0$5Uc'UE$0 HVK8['CS,Tc@%("cNLN'Pp10aBcd94`8cF%qTj1)fc)a&lCRNLlBS4b0CA$fZA2D iFPRp*4)Ee6RPjIZ6Y*h%5c4%U$D9Pc2S9"$%,rSb&a0!Cm8eGl'EZpT'G[mbm9J ,TCe$,#"d&iJ@J`2@5HfcR*31%q#BF&89#H,dbL5+b0Gh1Ue3q[T1*e,%qbaL@XL 9(%XXj'SCL9ZZ5*bhhh+VF&(C0SC4flMAGAU`S*'@BY!iM#DKc"#Qe'D#I9`cq3r bdMS$%)H$ABMJmmbqp*h@'dHBLiB`19iXQ%N6c'3[c1-j9LGq9T1Xe$j@AUeb1rr +@aJhP[Y5hcapCdA8Q,XirLi5k*aDN!$b#D2I@-CX,a+kB,9kRU!dFpLiRZRRe$- 2)Y6c2#@1+d@5RPeKhPZ$!4h"J2TQ%)M8'XrbrlpLej!!prjF'I,a2EpaF9,U!d# qGi&[Cel$B99Ld%0Hq0%iUUh0j)J9"&ZjZD323a3D5Cm!QTpAHifN8$AF34SkTmj c-NmDRf2A$,ph#Li@+DJ4X($iK#BeSJ(4*"UhZ&Yi`XNbFVp%ZS8G'L#@fhfF'Z1 +hN4L$)`h%[QDFAApTb`kTESjT0f#A(M#[F$i[1ZdR[J5aP!N2lN5H3GrEVRP*rR )Rmjm'&Rl,35l3`L@8YkP*&ii)Z#QL!C[UJGlldGkqL(Zi&XZp*hHKpM,@1a-LV$ G)`@rr8&6q"ShkMj!m)p5`rC(rmUE'6G5qa*qT-2S*H'[*C'I*B&M!%lV8b6`+Y% &Il9#%IDXF98IUY'leHMp-J3H@8-#4l(pkJX*JI1Y6aIiVm)Nm"U!jMAZr&pj[Ef IMX04)(cJKZ!LcZEB1`2h!J#K[A!Lk'&494fL`8A,Z-'eBKK5lZ8`f*P(TlUVUh` d98QB##q2r"i9JPPC$A*3+22fAMNFHCY-"VFJALPX*Krjf$"j)[I#eCT5526jVCP 2R,e-GZ%5mI&N%L5V%XYE*pm80qlLlpT`!j&YEZ0%FN(#V(#a(pHb@IP'NAJl&@P &e`,$PKkSrMmi*AhMY'K@#*KbCjm`3T!!0'1+M,"+L1$(pIXf3P*)!KCElSNlqiQ B13b6Qi&Xr)0(+hT)c6jS#Xf#N!#Q`!Bi1(RfBUI4+`J-0b6L`6mh2`'Mkerr+5H UZ"%m'jaqSEkd#c%$K)2LK9jfNNGea)A@dSAZB$$C5ZkZZ"!U'[Np,Z3iiN)fG1K q5QU(M&1b"d-*pr*P-bpc@3C6*3h53Zj`P+!!XAp)KFS*0-!!",2f-60VJ`1-YL5 'f')'+V45$'AV#a&VY%X-5FXrk)*@L,51'#Q'(q[F1H(%NHPhArUK64dH$1Ra`"9 XS"X$$&"!cdbDB4i@V&5Y`NVG6V"4082CU,X40B@KLEXp*V0eMJib",@aBhDr2Th 1mk#Za$3eJ'QD8jLQNN%f#4eYm+E%%!aBKm)X055BTGTp-8YF'%8S$#h$V"'k!3p cfb181$j[B"C6qDc4jh8L&)r9389Z!Z`"mdRVE)G5hGIZII&I!G"h-bRcK088QPq Qk'G#$49amUX9`a$)8eB)d!5i*Z!9#aha$&ihC$@&MDSDC+23q$0*JbT-%E0cNeL dkRf`D0A1Uqa##%DYfY0-$4E$F,q&DST-#1@ZXf,SHNjL[hJE5@E!a%B-'QVCb!Q (03bChHkaTYU4"Ai)+H'8*iAMK)[FU1Zd3JK3&(BR19@JF'*9Z'hQ,TP@e!`NJB@ 2VQ3e&&bJ`@b6RQ)U5LMfGE1L)$dUNqZ845P#Le+%ILT#MB[32r"#aCbQX)*3,Qd 0K6`(c8F`JpC%JD8aK()r-i3Y3iBXi(#)ZcB'T$e6F4&EI"hG&0Y5!UfEECFcHGF 8"K01X61bqirIFUbkk)i"D)9+IZNlLaI('I$ZI$M`dU[k"pm)J9%me)V*Jd8A,0` C-d+mqF4MFe!UrXRjPblc*``P(RdTKNqI,8LKkZQK1*SX3(4IVf*`$@U2e9"X@Gk M24akkG@QQjJ%AVU9GS!fQ$,@AIcmEf#3!0d`PSlLcamP@$@6"hVJ"lk"i9aMkh# 4j`XA3H6BR@FG'*hUEf+B@SZFV*LqHqhHc#Gik$MqR(I,qNmaZ#fjN9"bi5c58XG Ml`"dZ6A$!cCq'mlbUk!b,L0eG4i*VZ@H1HXm"Qbjk[8$#NH$K29Mr"JB'X[D&") jD"$hQd[2,F6@`iQeGIVHrD,B'Kp$p$3dXJGGR3Hc8Tf*amc%Bb&q$%i*G#%--C3 ie(1)&S2!Q*IG6`ZQJVDjJakHBjIE@!XHh`&eCU"D)#i4Q-DF((rA!hEC(0(9V4J Q9eHhH$8MKK,'JV1Nc%0-6PM"*SB+jTIZa%XNYTfI6bcUSaGK3@J1@,C+Ire,GZl 6dKBDD3[$"bb-$PQBGN&CNVB`GH4#ZAI)`T3cd551AQmDmYT-1rCbfV(f!ikp0Q5 KII"B(VTpqAVMmr`L5Pe3rf4Nm#%aq!L6X`*5d2$jR#r#S,MCH#SIJC1$bqpShp! aAEZKBeBcNZQ$Mr$!d'!0hbCQQ-'$CQ)9'a'Bj)N&r&!80`d&VF!*iF@l-@ABBM& m+N(cXHrc!,+4EGm86!GB(&2Tp)XA(pC%&qF"aCP3!(3)hBhKmAU3!)%5'Mi%3m% 2,iYN"E'Bf#T)#!h%HdUD)fMm#'DSb[[RIAmNh&Li-bJ+&#TcSJ`U%dSRH1Qe)5` SAj!!YbmZLLkkb+c6ZM0`1F8N8NlXRRM9l-i5)cM,"bA0elaL',HA1dVZ%ZcRZR0 p#L-D[$4iR2cBl5,#kJ+lPb,Qf(KY5'"d`)&Ra3#LB*G3B@mr!SkEDmF`V(`rQR* #HE%c,"qNLDh9[Zc@jN3BY)lBH`*(A&k,1dpEd4#S,#FA(P3r@X1",84cDbD[jMJ `B5DkFTGH)APC&*0m(dI&9V$La--m2$%8TCNHY!UcFjYS#P0*,V#9"92Y)D+54N! f[p9hZVqGb%flEhGk%-0'5)aQ[a1$a%09qhNBH,'K,j83$#'raF1I*Kjq)[eKCP" +&mQP'CG2GBPJXq$LSGrrDIShX`pA5)[bca%!""-NDG9>Q+h"2X!`hLcDR8j+L !#2'2'e$B8IAJYdpdj5iDSGG+-q0#$,c8S`qi0%EK$3`cC3T$jJ1p*JqbJH%fTSa 3Z['Q-L1R#fH,R$pmedKGX0bYY(9NmR!Gepap2+cf"BZY`jR2!2CY1rY*AM44SLR pdb!d06NXTDQGJ'LH@M'edl3&8bY0$8aED1V%e+"T"P-R6A1BCQLDa64(dafBCQQ kL1N1QPCJZNM62+B90"h!0%r6F8`(D$U&k6K0ACK1dE3A8aG0qc$YTHN)R-qmQ3! e&j*rSf8#!afI$%J6IqciBm@I&[`aM-!3mT`N-IU+Ib2%k2bm`XMICU2!2eC`@9F hZK+Y[TBBdSLELA"h16LjA$H2)#HC8J@`#@$+p4F`IUdfrB91ePGHQlj,C(dYrUa KXXkKTDFBYffm)AF%`m2ppSR9[!PqKHlGT5rqebrHrmf"Lhfc[+9UE[$AKZiG"FP G'`Z4Dd#+"X3ed05Me[hQ@T8*V@m1(`dN3RIXDjNlYZpP81C"K1SG5(%91I2#PIp 00aNS3b4YANHaml[r'@F3I&$"eY*MA5-%&94Eq",9Yp%NlR9Q,USEPQJBc1SZ[P` e*i1ErrjHpHhB#&hqIAk0-(i"KpD,3pH1#9D4Km'(dhU#3*!!JN(5A#F85V(G1LH G[8S$kVV41!Bd@ZaMjmp+RF&d@BKi6+eh$SEi)%F3&LXV-*HASG3C3Y@`QC&#B+S Lbk1Eh0afaRY&U&JS4)8PMe5)iAjm8FF0j61VbDF'2b1pN64k(3L*q"+$c15+Qji iA6#94Z31LN*ah10LUVj'c*@XhXfZ"%06a"HYBf,)jVJB0J5*h1E$ec2fE4f&+k` ZMB%F$`I@M&3+1bYML"T+CphM`-24cBmdG8fA0AA0XMYbMp'YqSaH(Z"R@BG[F94 c'mpD1$AS0M&NhC34e)Y+f@BPN``8dJQT83VUM,KS!FcA*mHNpK9F"JeCZ8&,NJ% S#R0kM#iZ"S2FRY26$"I*DC@ljV9,Xm9T#TD"3MM3`N$HBE+ihLqJYJ)B#,K)G%a V'cVZL`IFp-"34Klr$-LN-X5iPP-5jH1*)daL%KcEISH4Jck8XihYF!$f'm($RF@ AfNlUe981LS1eZL*RGE!a9%cQAkHVJG!#IIKE2K`%cDi60)E8B)BUJ[,EQ6`(m"6 XZ8EC,DN5L5q6!dpM(K!m4-53!1(-PHpIN@(m39,QqbJf1)1%24PbNf,$-M'i8`@ (DCcF@EHCBCf-r$i'lSHTGIJHd+)*,%SHX)MKA9ldD0UL#5cU+6+IH4FNK05JSak &XE(r"M-@X9-AaB#4U($JB`ScreC80p!i3U6qT6qN$jmN"LI9"IP23`9CSJXbHSZ K!K*NL5,)8,SJSpISJ5-%'AfI"!R3+6SV""QG5KaK6`L5%eSTAC!!,hB@QdF+-YT -JNcT)+,feP""DVF5JLa4S"L4dUT*#$2mSK#QHB!`l6$$"LHE`&6K@IkI6#e$`'m +LGXH#-HFbH-R6S+bcm%!2+0$"I92erlQ0bbSbY)d3GNK+2a$AE5XQBr&d[JqPT* CI+NXE@Nc,G9SU99CDMpJ+FJK,AdVEDQ9PmUpY,4(@GUmMkAhDDNlE@N2,@fJT5h +8ZZ4"SQPBVYcD8YEX23#,5apqBArM5kjZ6TYB5N@PJ*1EaAra%M#Q-1k-9IVaX` Qp%5k-8I,b*K,KKUc'+#N3(#G%8`-mbLJ[@fU)F`"N!"1ceE,0pV"PRi'@q!J+#3 H'6Vib-9&"[fHk#5SCC4CibGZ+f&5#jMGU+FCJ"!23"8fPd'6%E31JT[R6c-)Njp i3'"ALpX33BU("41NS%1Mikap&-6)-m6L9r)rTLAV!HrkA9I(iZFjR*YA`VQVD-C qBlTff3hIqh"%d$EFm,P'JlhG82#"SZ#HHTGP5)FTF[Cq&JUHKdaN*`AAeGa'06j cCDlp+eIBIC!!Q8dkXRYk2alU&!r0)4KcA+EdSbB'6k(0V8%B%rDBR'*k2)l!B)! rk+%)!6TKHSPd&BD6Uf!Li4RPVQ@ii'4X6l$XqLFcr40qTJ3VrhJ+KD%TX'f9$L6 `)'0i'D)`'8!J-bH2Ka3K52QR*!BTh`'3!%@1H6$JfaNiVP"K@aide@CSUCdArXX !*d2%j@T(FAc62aqLebRpmcqAdqF1%C66)JYpZT2fD3E(p!kT@Zq3!'T0-3M048c $RBRNB&,m3db!DL5FlIhVrcH(#$4m+Lrk(+AF`NCF$'A'F%`D["!Nf0VDM)GiX&F !`@2i9b8i4BG$eim1$XM'$aCrhADbZ1HaHKi`*hU5r9HZQ9YHXQ"BC'Rb"c3[KZX MdT,#C5Ne#)cc2hl%$9I`m3M)2'S*aU3X0[QI1pRADlD5iTi$Ak-V5[lRm,MCAbc '4[,NCcM8Cb!dSba'db6TeG+f"[&,ka((m$#T+G&e!3dJ38CZ*LBDLD!"--%9%c$ RGU5EZ2&Mb@"Mi24KZ!#3!b%Q384$8J-!613293Xp"#55E4,rJ`-[H1YF#A'STIU 6R1H&)%FcUFYB0J)525rdS)HeE*D0+0bG'Tl[!+'-kf61J*EDE"H0c@3bEMEVC"0 MJd[8X23fQl'C0*006CBBBkfe$Z23P#4UV3)b2KriI,rrrqrZGh#JDHCphhfI!"Z Yab6)"5!)!L!bfj!!,m[+m%Iecb9"5TpGH6"GU[)jMP8Xd8RMcDYBiV!02*'L%U! d&Bj%3jq[fkEXe8$1HBlQ[9$Qe$,[IMY%L48[1faIU`!)G&-"2apL`1kFUTEQ4`q $rEh4QTcJkm12(KlFAI(KB+IU([-KFipkrfT`GpPF1PMJVE"PUXU*"52S-&D("dJ )a*1XpqiIKh$8V[THG*!!k1LUYf$[DJ3E%0b-J'p`@f@HGmM4[,f&"Hm,(MhFi`r Ai-H8kA8fEdQ,CRS6e%11jYC4NeIc&Bj!N!#,EXMJPX+4ecrDNTECai-Qp%&QI9$ -B6Zm')2k-8KIG)YKd9l$SJ9Ed[TQU9jLLhh"PM5(l6XacJ`e1(S"QqjKPVf!Rm8 SeYXRB+)KmHYLr*b#b2X&qh)N8abfbIFSJCqj$Y[hD4,m90K`X"NE2mA'5Yki'6r h1'bM(NV3*,5XpYYT#)@R,kQBBi8Fm,1&[09Q#SNTXa1#YbE+bX6f2D*!NlmX#KM @Ze)8k%($SS"RA[5)!PeLLbM3p6i%%el,4&m%i0j9-HI!K2*RAZ2#A'*ZH0,&Q+e ATj!!S11KNA$h,6$#AZYqZ-qa)RZN$m%iJ%D#6R3kC@(Q9CUXl"Sbp$8Xpr`""8# X6YQF@B0JC3SaSa1Nf1mm'GhP6%2(4fj95aYiq9fZjIrPqD%4qA!'V8j4!1MD#m@ &#+c[&J'!rMHDETd-%[SB&GN01IjdBQV@eUf"K)a!6LVDV01Rrj!!'%Mkh&9@kYa $@1JlheiYaFhK!rCb4h0AM5AG&0IQ!ra'+BJM"E!-fXZTX(FERY(Y4'1Bkk1$9Ue `4(0DVTZZZi4b(M,'X9#1a*J-G2XF0RA(%%!@!0hF03R3EqkD-LQHhY,MEr"M@Nq 'a9[303U6bM2H)4+l)hKeL-&F19aJ$J(b(NbD1%"24rB)aV4q"-V"'Kmp)M%ek9* H@-[)c82bLic8h+5Y@TlfM&C`-1&kiU96J3L-iB2mh2#PM1Z"T+6F*2dSN!!A6Mf NRdPfN3KB&rSD@$GPJLP#QarZlRNekQ%f(V$$F%X-'KSTK9fGqL5@1@JDjUS3)4i BGFE!mT!!!9P!$'rbRre)K6,,jI4J4ld1FPC60K)"D%UB,SKXa1+S*4d2pd#pLTP )m"1MCFaaH`a$2"L3!%R,)#YB%1L`9a(kC")p4)-cGk&c5X8,Y#J)8X8)JClK)#5 %4*m@ej+p"Bdrd)qp13-+b3N#PXa4)rJB(kk6M!AS"9Y5[!9,0b+4l'KHfLLRE[A 5%c$SRp")(++"C-SGA2IBbp2TRi'Y+S3r(T!!i)UE+$T*ZQQB*EdSmef!1ZS@(TX *6G)PPp3$b6-J[JD`Df0!h)2!)JQ)`@SA)-S0G@NN5L5$*B`&h3$(+C1B5J*e0*X cN5hSFbU`f'&r#m&b*j!!4lM2(2rfip%Dc3QNPFBC!eR2(0GLR29LNE1H[CURU,1 N$ieN1MriHE6A(ZTlN3GI[Nf)V)UAbm(JLjP6IFI&35B5p+aAL$KHQI(5G2,4B-f TQa51(%a%4T!!f@MVeS03L-0j@NjZSTEl4DU@'p@5$ZD&!fHFLE$VHQld1Zr5-e& 18#FACDGT-TPmUD8ZU`E&'&`,h&QXl!Nbl"14#16!j%FJSMc2D)3Z-'N0iX5H8J" l2GJd)mJ@%E#p"BqpC!A@%eUm$afqNJ'BQDDE0,X!8#cN*LF#IY4q0c!48PYF"+R Y0!!6,@`MX)KfhbCJV)EaQ`jhmX9fF@%16hK9&NbU!36-UPQGh*!!&YJ'mY,a,,l '"kjXk&Ab)PSD(mCS-3Lj)a"D)MZ0D6HMDI%!F#AK85ZU2`c8@IDTfeJc`aQZQjQ %E1,+F*Apc+59VJaAHF6!*0j3Pda+VR4e!*&Y5fe6(ThGP1'1p-SLCma2aDBEk," r1Z3Q4Z8i,h5RLaL9aiSXG+-aE8cTK!%3lH,!K[IS`5TS0J+IbDXMeCRjp[Nkm*N Pm%dKF)qpKUHkUe"[!R83A-j&&fTe!b#$TK["1Y0S3hJCJ'-8S$(I#XeZ4,"D2RZ kDY@0ZU1NTXUT"[F-+"TBU13QrB!"S`r!XX-ef5%'&Y00A3PB%#pV)T8M[)aG-#+ L)mY2JEcHiH2j460)CXijRe9Hj&PVLPff[1KPmI#GVX!K(FK[3MMMe,XMeZ#G&-M *2jJ4+)V([QP%&RN"BcCkH)S''X*dd5$qX)3'm@eZm##DF0KQ&JkZ@m@0ifGH08S Sp$5%mKldT`b&`hTK@#NR&G"Cd%5L9b3F)K%A#BY)Q,d*)6#ke5`@'5Yf-'QP'1Q 0F"mp#kjDSe#',"JqLB4C*-C%BT)5I@&UTQDZ8R00c9(%*KXGp9j04b%*+ZHP"Rp "6FjSJcrAbie$mpiZf5P5QcL$`mfJ23GC2Pmfcpb3!#F*j0XS-la3Yc'dU`d,AiA $R4DqN!$cNSfRYXQT1`a60r$8VCMkSTLk9B+lHqS@UkNaY'X46Gd`9fQj"iSc`TN m0*+VR3Tq[GP8DkmPKS*G&RZ95*V0Y4[44GTX6,f8Ph)`re+@PKIiRRBN2cI MAUd%PGC+cGHh"4)Z*DB59MIX,AdV1Z(Vf6P1Z$BJUcp)DUP&UU8aqq[U!*(1XR0 S")jGcq$J'A4CeS-K$jTI9eT+m)([)K1rVVDLHc@%cP@[Bm@BJL,e$*al9-kYkBf rZ"-+lhH9Jj8PJ&PC'ERF9+#TEbZR"(@5&l`[ZN*dh)ZKbrS@dP)1fpR'UDV#%5# KZf`,Mi"B&IYFa!Sb'&5!Z(Z[5@*9!!`UZPc%#Qif%SZ'lYY$a*+6(hq0e656+"D De1K-QA)Qir#BeKeIU0fVc&p+mkQHj1LHc(%al(f6JLK"`BP&'3IaY[,2%ITmhi$ URPY@eR-C'pZq2ekQa&9Um'`jb5*H@*A0L)F41cZdQZ`4kFS&4k&JC9@SYQDjlkA UqE&rXqZ22&mUIk[lrSYr1[UcC6rTrIl9fpVTkFmXCdh(c@p-[6kfB-BqqEAhrqE GEacil`2rX[8l%rrhQ9[$JhdRacmrI-*laIP4rqmG)d1rL2GFq-1ahaEqZiIq5rC rHr*kjX%M'9Q"D2M3T@[hjKINjHEmF9*LkKFThd[iNe2rpIbI[r*RrU22*UIGZ2Q Yp"pIrZNlrr&(rljZaH*A&rl`YApiqerIr1G&rq'&rr6mIelbMmrpRjGIR2Aah1p qfMcRrlGmXQA(cJmDrPrpYfhrklhrmH&Ilrr"(ApjcqrZqUXlrqIG2erck"2rZr' a9Bq[I(VeVcIqDY0[0[pb`pmhrHhk[qMimL0IlhcJ`DI@VY[pe6eIfEHhUleYHqX rECXhHfP&QB6Ih"4Jc#rbY+`[Z-1AC46JUR-#YXYjC%U+r6c1+I8Z3,U@-kRYILM B+BV-U%(&b-0QAU5$*p3ifpj8mc9P'DYehL$3K3PLil*3JKVYlEPj'`fd!(H)31* cJ8bR9,cr'QBkl$bD24+0X8N"fHB0+#8c#'V,1Had(Sek&TaJP0*&!kDf$Se!J&G E$rI$P'"QAM`CVMRqJZJTY3`,DE8p0q!+FH`q,$Ja0'+L"DX-#jjd,IM'h8!f2'e dESTbhSbUXM'"b($PI8Y%!F`irV*8*A8KkVcRJC`0U[Um4VJ**YJA2'iL!4311R$ 3"I64VAGU@E8Sap%b'NlCr+a'Nk+65fMb!)lV(FhYP94!m"N-l69XpS"8#0('fmZ '4V"Y+`kfBYY1C*Ff$2I4J3[YM+ULKm[S-'4pQ245ie%6R'3mSD6"PU0NH)KH*#) N*C+lTh@M-fq*!Gh-)A3cEih$YRZf4$IceZ$R8`1kQ@0%0ccd@8Bhk++jK8mHaiS VZqGeA&NEmTRkdINS0$a[e,'LarrErH2UrQ(e,V[)ZMCf1eC!R%+Z(-CME$'6Q#* N1-3PXDc&HQ)Re0V`3J*`"1*ihRk(EFpL5K"J("GL0MjH4%+AmUe%@$%"&JFM0@Y 'QK56[ENVJ6[#-f&Lf21'T[4$CYKl$YZk0B*K%$V1Hml3P0jYa6!D'QH'-8KmGPi %L1"#K%JJdc9E&!"bjAH*!X#aI"Q*I`'bh*!!jZ@QDJIcY-'Na%$HT3a04af",!d UAH"J`EN3b-Ri55hM8#$MhX3[#V5#5iN&"e-c$Rf(G-XFU*GC"e-2DTF50G(`RK- CXEVhQP$hrV%%GDmH5'ZI%,k`dZGl!HV9C9,!TY004!j5ldl+"&3fRa1QP+'4U*I &Ebl'(p+9Sl8A[!A)Z&)j3JD[eJ6MEaCAMTlD*!(9S2$ja$,Gh)AhIRB)hU)a+K5 15&I48i'NA#dh#DT+q'$UTC5!GZ5,D$53!-4D"cLMpA%jN!"e*3mXkf'Z'f9fT6, YbSL4JeBUTjQBBNN(N!!3!c@T@#jr8bL@eC%85hEHC-85L01c2KdSXV["If38c*j 5-6P9ekUceqL+4"!c"Y$3ZM5ldR$-!K8)q`6`H`MiFmSBl'2Kd+rRUQkpbqekUK2 (dA*fd[*6J8`D1@@Ch6dSB0)Bd(M-ij&ZVFD(ZK9J6i)b6$*KQ#31*EEEPTaPdUV UEYK*a",MVTE9%mhU0@cKlUkm*X!+er6LZE&r3'KM-NeFdD'�RUkUF!eHF%U(j 5!UJf-DL'l&8X9R-$E%hDi,V(G`Q!C6(2kA%$Z+C&!0CV1V!q--XD@*HR#Q#pA"a B(jL*$+a')-A#h6U`QZm6Z)j`$Sm!V`m$B"rI94aJDreR"V!!43q$DeVBV)AUNZe %CTmeU3'i(P50F)1[&6!bBFVQ%$2JkKpb)I3)i1TM8(X@6p%"&#*V!YLL$b-!0I2 $-M6HeLm3PpA6#,3bc@3Ui8&Q+2,,h!1Y`,(i``&m@`33rR9N)*`(mb%8'cM$QS4 )cT4f5PNqkS-E++SaC@Zem&L$$J3K8@Y1%1+K9QUJ!%$0lEYBrDiQ!r6kp'rl-fY NdU6)(B@lG-hY2Ki8qVCd+QeGlhG0&+e(0C6C+P4i1AiMGS-@+EM-$5Y8&6L5IM3 diR+-P3,3db"f+14Q1@F0LcN8dLUEdZ&-'l[b!h2PMV6+0%)'jXRqd#GTTmG$)I0 YpaC8P$%,35TP1FYB+14-#dm2VP8KcmqZl*qZr14Sj9(D6P016rDU(Ak,kNQ,VRq MMbBbAlFQYed+-'fak1#$%01"YHd3TMqHB%QR2c#5@Y!elHkEJU$"55bhA#r5m6p FG!28kp%`!p%IG4D1p)A&j,BUR`6kf$-#k#1,kb[X954Q!J(+*0Kk&J(0"R8d#m4 A6Fl(%Q@Dh-a")aJ,pe*6',jSYd*((RBES+S0"V$D,m$Ud4,!DU!SQqB2ZpQdE($ GbKUkpXUD-f*6Ip%0c+CGV+k*V'KNPUp3-QYqH@R-8UiV-F[F9mihC(c+B%YB*-H &GSf&MR,JZ''JN@9M"PBp)9MeQa*B9@GJ9E8%SCATP[5cE,64R)8M%4Kb93k5Pe4 lk*,C)j'[@!aPa3`S5cbkf""2FD6'cb+5E6U$Cfh5Re@cZV4Rh5kkm$Ia0'QmHVU QC1-9U`+-fV!K0XAU!,D0!E@C8kLDTQEX%TUKMT!!k5"FIArDJ)SR0p`)0*QV5+J 8-cEVQ`9*(bL"T%e&J"qU1Kk+M+ijKdTJ(B@CGFeGqHFL+"Z#9TbqT%)UK-j+5(X TA"PIiEUbKkrX,DLr$0,PQ9LNhAj)2VAp5)0rD#4V9*UjfV2&m6%,+V+aBT'!bQm Z`99jhiYpah()KV#b"$Da922@)GjU8p0&Tk)'L`6--CrK83-4(M91M`RXdUVLIVX mHSD&qj4mhq)P%am-!aU*rY[(d+%P8hXj1b(SC'-A"*%e6CEd`K'AUE4X2CjD*8% Bk"!#prBAZ)VG2"+*YbrQlR%X(%e4-$bdb80aLHIL!)2S"%3*!f`UT1!l)RM6IB4 "U,$9h(l+U8J&#BH%5(mp1cG8K@2ZSDRC`Sf"Rr'fjXb'3Q8!K&,-iqdYCf)H9r5 3!,NZ`*)A0`R`DhHbmFM-'BX2TUX@NiX1QfADhbZ8KN*EX*p9M6(ATLc0DNKcH`- C%LB8)jkhLB('Lj!!SCJD@#d@cQ'LMCX9XKR-Eh#BU1+Mpb@JKHA%T4!e6ZBkGZa !ma`M80[`#K9jQMX-D$dQf0([UZJP!%j@MZ0U!aqXL3*YC6T*h@er$mYqY'+0jP[ [EdURrf[6'p-l+1-cF&1hA8faQe$rLVZ,$p01VTK&+0"SNVG#rmhYQ`b9H9M8BaE )"p@)#rRLDkQ5qkSE@l$S%DpNFBQ2mRJ6Xh8(MMlZL*!!5E#@$mTr!dF)ETk9UT! !"*VZIr91l5A$0$rZm-p`pQdI-!e"f3aY[-(&*jaeR!%NL$bKHD"@SM,JQ$,9e0r -J,Qd2[R)0TL#UhM!5J(q6A"dR5fRddLTQmmL*RQY!3cbM#hrmSqZl$fN["G)N8- &H3j0$`eqj4#EVV)9ZS3KEf*-d48UlT!!bp0@D4Kc,h8R#erNCF8NQ1#2cm0&85e $KH53!(KiXZaik3)fL5*4j5Jf6D*+2bVLVbK-lr&(@dXJeb-'e2kJ31hE)k2ffDT iil2k()h2U,[a)B86QkDKF&kP6"%H[Idq1HBB"*)!qHb43+HXLPP-35RBdLSIYk1 fK-GjG+F29+H+*8%`jh`fM'ClpGA'PPi9&iTYpGG8d+GDRJdm%PQ9hCikZ1ihD@L +jV+6M3Fr[T)E,4l+cIhf)k8e@RKfMAMq@b8mIp*!'Q6f[IQk!Z!p&-,"GM5JQjI *EQV)3`8SJMjai)YS8YY+`miDKU2J)a8aj#0dX[f`E'lEpj@Z)VT8P9$-4DcEEQ9 [EiTlk5VUcXQ1QH(T-&ea4LXhLU6f*NRND@"4Yf$4k4*BP%2+25jc33S'd*K8k!) !Z4bD#GX[fec,-hLhbJA9KBK-HTFQY+3cQRe3-@0m5K4$92a9GHRXN92"pI-D#pT '#dGZ+45!P2I0REcY$LJ4J,PrAmZNZmQSQ+8h93L'50&'e5-P#k4SNqRVj!-+&B6 4C9&,C[V#E&3Jjp@G1F'jF96N4a)+5Pl&YTc+ZI%$Ym2p+-`b#%DbGG2@aMS`Z19 @P6"Z`@e5qj!!h3&Sf,(LjUf0j53FZ696X8eHBEQ$ZpklD)[Hj'8Fc#2TD'j1)%q ,AXTRmFGK*'!#apPp%(6mrQ"'FF&(aG[I0'YXEYEBFQSSbBkj0[[%,Ib6IqLL15% h`pid-1`pCPL$`rEV6$I$'U6,jHdIZ4PQXf)BKUpH6`b65c&"@J`%HGZ`J)dAf)) &P(Z",IKCK!9Qh!Xd@#f!iDZI&34TN35TrC!!#,,dP3J%bB$)+693M#6bp1%3T@4 b2rc*bFKQ)$JZ'(U""5FTHKB+I8KC#0RRl31ha9'Gmb5'p%Yc[C["$Pd3q26c1S0 C'!1hdZmri@E`8(&Ki026a'#"mQ2&@CUIQdJA*SPpXEY6k'&HIDeqG95*mC60KTJ Z"T'VT`(U46jAE()LQCZJXk*U*b-6-ZU`fVr["B"C2(Dbl&I-M,8'CX4e&i59#ph -)"2HEVK-hq&QaZ(LEJJV,a)c5*Me'"j##CdKS(5@G&PamB!1(bB,0KX8GJm,BT4 UFLEMcbCYiXr`qB3kBSJr`i%(EM"Fm"lpJSr[j!Y1P"d99hc3BIY*8q6Xa"[HT5X 5Fh@f9MjCM+h2bFc,VZEkJV1%BjlYmA%h3qN$0%eB,XQph*Y@bf(iUVZ-$'8aUa[ %i'SXBBVPaj+PhdZkP"Ti'#cP#35GrQkQ*$'pZe'e"5[CrE#i#2k`R[9@QDa&m&r G*d6``m@ch@1I-Q[NTc*L4VF9khafEYH9SS*cU",63U@`Pk"5e,R9j6P5D5LL)1` U@ER9q)-I,AA(B'BeU$%68$E+#CL%iR(4Z!%IBUR8$bE*r,fIPrFE*TMd&Xa1)$' `R+cXb5(aF"`-8a!0AF'1IS6'$D%KZ3e#[))Gf53L0`3c4E!5KA`%Bd-Z9N`+9Mc [ZMC2Na!NN@#PVKDV(#K+E55qB9HqL-S`$4!#ZC4c+--jJM"rAJ*K@U`8me(Z"-Q ZZkffDA$G,l1&)%i+6$f4(d6$K*'Nka`2HN8mk+FP2'LrHh*bDr+43aX5k+i*XdM FF&`*NDc-+Vd)$C!!fi!)KGbK!B5Z'N)qGqJ#3L&$b1-1jD#cq##68BBdGqJGK"S 0S@&hD"C#$C+J(2+l3kK-8l')36L)6p8e#G0D"bI-UT-5B-$c%9L,5M0#3Ek(&15 +bk)iLi[R4I%G,ZD*BJiA-dAa!KIMSMM!aA&4l1AL!4CdN!"CF8bShj-44IhlK0& T5R9'3fLi1pcLm&%5KmG)a&pp"#kiNpqTV((-3e8N$I8l#p84G9kpTPV8'Y8CV&3 AFmV`LDqQ62$T,(fF#TqKibP9F)#&3Nq3!0YBF)b$PHjJ,`HhF0#6%a46e+!jkA8 piS+I!ZafYKDK!F2cA+&9#&e`KBCFSAU%FPbK*%rM8AG`%B,[')+D)HK(F*BK11` 1CL&dMbY83bc5&bb1d)GeK,lQQ-%edZ!84`U'08,rq@C#k**!1LT2r*1#)lRjK-b &$i@VqQaZdZm[(2jpEPBJIq[@F#"9RB(lJdZN#85MXC)BJmV83H6AUP!PB%Se'89 b"-T1J2D64M3YM)p-q)k8i2hdSFC1L)DDBQN%!0%DQ"-l-MeFV)ckY+T'2jVZMY9 XkPkDlKU+jHq8`m,lBF$TK,'c)k)*[b0+MF9FeD4rFXS+!EdM%0#rPS#!0KDT6R5 '$43D0XpT0PRFPkeZ*iIb(Rp5m'mr2MXSK5&`FL[A3MeT%#Ve'Jbd%!Fd*Urfba! 8Jikc*pN4)))3CmHEiUS[4VlU8S1!#5KmS@j``CpZqR3I'DK*Y2APG,X5MUmqGkE (3dS@eG"N`R3q59F[,-@m3*rYkMFMDhL!('-`-2LQb3J6l$Q+UmHQ1k%8Fb(Dj4* JNe"#Hd2&'Mp@RXq`6EXNKA#$Hf)+!FpMG44Zq9KeCmcdI3`&%!1Qhh"2Zdal#aq i5MIjHC*rjLRN)Sqi40bN'KIXdX9l,4$$&JK`-V"iPQ$a"b@`1*-'JL&h5$&+4,$ UTJ'P#IEFKM&EcBE"G4Y#T"U8C"+MX$#*h9Pb3mc)"3+GYPkhHE'jlD)dY,G9'i3 m8-lE3XCRPe4`Q44%ia*MX@U&D&bDfcbPQT&Eb4a+h3AaQ*NKqVKLUqJLd0'dQqf kiE5jlE$ZJ#l9"6U@(G5fCm8R0kQ3!),+0l*)emZKETX)cA"SV3MeXf&P01aP!`i GCC'Jf!A`,26S&-(#Fdc8'kehZfALqYNM,RGjq9bGa@,)biBR2frej$F05`eE,C9 Hj-N,5hRbMmiaNG@6fbX-6qE+N!#kD*NfNXQXl9hh*(#pD$2c4iBSF*i$RE,jiN# V+-6&Jj9k6aaGdiBq@38d4T99C2GZYYK%L5I&jYRZcGfSJ#N2p+fp*3k149HbfkA mE1NH-K"88MH9+NA[%3rBBRMHTlc0%ldU$TiXm[3B('qpaLUe1Q1FVj+UaZkk,YC d'9Lcam#D2BCV@Mpj0%`I1*RY[K*AC2,H5f+iY[UL`k1VqPlpr#NJE+F+@5j(HKJ [HhF2ZF()*c6#&@D2Um+9HUK)j6G$a5jCP8Smi"kBD0%`R"dL9-6+1-5VE4r'Aq8 #)3VkU*QQ2b-I04UfEVf8KiV0UGDeEaj'9E@0HV9$V[*3X%&8aYaHimeA)5&%EYk Z6L"j(&9b66mPN3+Cl0Uf-HXh#j*d%EM$$%XNfXJ$G[1!MB,"A3CQVjCJ%Hi6"jf kFE*Y[6MDA'4iGh49*MX!,YdXM,404DSP9ZK%`N@kp3U3!0YV4)A+#LKFh+dFI%T F+qBLYID4l"LDVNG%aF+m5p9HZ5SHJrB3QIEbZ'Y(&mENq$!d(AJN+EHA'cE%aDA *R134Ka)FjdZKF&Ypcq)L'dDMMGC,'*q)4V*"0*Cr@8*MQ5iEb`dcT6H@'fE1V,' mqc`'ee-P*kK6adTS-UId39"AMVNU20fpmPb1IVfZ+U8KhV,0T1T4P3M9KXEdbFJ 8RA[e92#"CUh@S%3GSq*U2hhN'00@ZC`ij5GYp)P6b)PeV+pP3Nq%4-)R%M'4m)K %YdL-LN6[8()XQ4hG'YJ%U05G@ZJAI[i)UDrHMkrS,-*3-i6k9#N'Qq)Y-H8q#KB jULab9&AN+&6NU,E)88f4SqAkd9!b",'G!99fU#%YDl6SmpK-hiRLC&pG5K$1#j- 8d[jQBRCMbm6XirKXT9NrI(G#i9#piCqJMlAciI6RfYFQ3Sh%bXp2qbGmBhVJ-!+ q4Q,YB34L-hVJ"!+a4Q,e#33m#c!jM0!83RC(d00)l,q#B$F(@d@`&F(Z4L)*"8F jf#@#A3L10K+C+#L)T&S,m&%I5Djm%frB)cEX`3Dq(Qm!#`440dQL"Xr2K(la,8R 3i$9L@5mBKSSSa1E*k@X!YmPXp9NbXhXbhT+Ya+!JZF%B"dl63(p[mB'9@Y@&-aP BT98G1j1")DfUm%`'eQT9$jh*`"UY+V[dJ992qQN`"NP3LcJ-S2HYJ+VBRfPa$eC @,,cTBQ%mHD`+J,KDSb$3TfNb"KR(+5+)3k[P+MapU-)cc3B#fpi+9TQ!*0U2#3@ ,MqR6',5B9K1rL@8XEl8-`"HB*M90JY!hE'Q",9U0dG8!b(103++r+J'*cV*'JVp ,'&chpmI1M36P)'XNq,['qiS%IpG@1K,m#bXNf1L2K!6RZC(Jhc%#P)D14ZV-%4+ F"b6B-SFqS[T[*aUF*p%J2A&C4%5)81#4qiS+c6TU'hHM`R&#K9BS8U*#3T%a+a3 T85'K5)m9LT4Sm)3E$4T4C(%dD%54NG(J!5XdD%5E*D$"%l[R%E+F0%P3Q6bHJqq QKd65Th`L'9-aNI3SMdKfFk815SkU8C(X9EdRRJ)3kdXmPi)2TK-*%VMbk##@Xdr f+qQSY0e#"r'@IMb*XL'6CC@SAX(1EpZ[QK3l'A*K5P(e#lR9A'@UVBI)L"A'$E6 T2&A0!R,ikKS*X""iH8@93%)S9(f2%FPAGQ&+N!#!XehcpP'HPKF`+d)RH+lP5cG m!NaSJB$Sf[(dDD,+UK'aE"+)jHXP)*EkSXil6emHA0INXk4r3hlST84K%!f5+1A TmqF`$A5+Cl3ERq&FX'-HGlim#,AKQP-rJ3Kaalc#%IQiXKD!cTqHl$kC2Vjpm!q $IB1[$rp`q)'qGF11iH[$+mEI',iaI',BfcFmr-A`*bGIke[50cEX81)I!!!VaN& %3e)$!("H%&809$B5!$&LlN3hZjY`'aGC3XM*f##AX#a,L%NDV%e"i'jLG&hmLmX Q5XUal1EjpQkLHEkG*-E!Dh%ecfG3XBN"%3V@8SH+L%I!j`X@D#SYjBK[al(8@SC 5X5TLe@(%imR3(2IlrIrIZmm['j1)c2c0qmllA"e'05-L%`%4!!%"%I!3)1ErdD* k,"CmUERP&%MaUh*)4El`1lLN-"%,NB(i0i3RED`c9ZX4%$6&[12"QZ4ZbAG[Y3R "`4dhDfVYefUX0QASA5NjUFVEM5C)%@r$Kj+d1iKJXF8#Cq!GLq9E,H`L8D)YY49 U8p)lUPVi"#i0mFXBZr5#&&"6CUI!cH+6LVC*AKCX5MVhUY9DNQke2MMmH9Tk5@p QGTUeY$"0YcfINj1PYEYV8fMT(d')DKbU8$qrRda+`pjjUNX1AGd[U-2I2@p`)db lAUhhYb&BVFHPG(#E*G&6S'Vmd#D64p++YJ@IJS13!1I*UFa5'0N%3TVR488P'QQ jhU4D#KMRd8[c(ICYcPfSd*E5eRrC9,60HI+M"e6*Q8+Q!rk`aBZ$a$Df+"`D`iq '(aGq$2KTadm6IMU-9T19f*fFQC[TJ&dlq&A)Tb%HST&XArdfk0'MB54AX#ljGE( LbF0UFfdaArLkI@aabk+,BbKR#$DQIR49MDNa%ai'Be+2VBT3hU(4)J,[@+f&DI& 90&TY1V%RqeaZZUl%RPkZ22rHGkh@M1bb`JbG062(ErfH[2rcB@YbCQi3c`IDD0e ZklQaC(-dRCa+*-KlF('A@1r*@GcVH3QqlL92cV*Vm,UGQNkreJjc%8H'jpYSR-9 G")#BmLUIFNQHFSq!emN1TlbU6,Q(6lNM2U8+Ve-F6VQ(69Rb1%eC8NG68QHaC5d j6&0kIa8jCFRMbT4(qC3UH3SYDmNDKe-H9DCBq*4Tm5PB9UAUF)U&Ql81[TeRqr6 Y2'p!90d6ZLE0)AGd&RkZ!8QJJV+88-I"+iA%&'qQBZeXim"9Z@25(#q+c4cm6!8 CS!Rc#A&m`QkDF2mcS41f6TUc!*A!C2`X!qM5K0F*EAb#Urq%m+3j0,!mEp*3@Dl N%`VL%h`1*hKVFZDS(hV8imV,!RU4F"&HTMC#@1,6GXY*N!$J1XY*q0UUT"ldR+4 "E'*M3*P5aDE2lF"fTej$KE'4(lf2QSXIcFRA3bFMMjiVBX,1#Jf9paem!QmX2U' 6*[cR!V-*dc""AkmGh'jCabFBUDRiK$D(%pCLJUY11lM$FKHIS-8Rh14`JPL6-lG $BBCHTM&8c*fQS1)d8*((8C%A4m98S1)dSB*2@8Y6B,JT3%8"-*!!(UZaef5#M!r '(djfm("+riG,$MYiZ+Er`dSeqK$XH-K-)&H,MeLYC83J2imJN!$(Yi*XEQG%%QD AP(KPGRFb`"T1h#T2cK`[*ib9Z&`3[kaLPe4aiC81cP)e(+dP$5S2[IaK,1,K!JF 2Ud)IHR,QLY3FV9QiR"DrA-XZfC5j(If2Qb[f&cehQS1(Dd-I%T+S%SfX3)e@"@% PI5%-S9I$hKCBEi'f0`A94KHm)RJm6CGHHNk-%q$[B(*QQ9A-c0$4ml-b)6jHPP9 BENd[,ma-6m0MkhElf3c(`SI'+Vc-SI!b%PiQ#kmP!`d%HV,8$PBKFp'Hc*c5FcT Cm[([-FPTkH@k`T`MVeZZQ)kbDS8G`iC*JHqN[C4EGLa5C63VJTj+bmSqQe1Bqp+ a5L0K8,L`-((RFNYdj@*'pYPV)3k$LNB+RpEZ9JUH2QR`U1VUX9L+YSPY4h'B-m9 i9G852S-KT,M4Kk%CDm4RcPh,Sk1-q%X,bkk+KCNCab,ZV*QiTl2cMadVCkmGH!d -Z8F#Vl'!aF#L&A6ka`i8I3Tc""3Q(,%B#JeL,0rLG"&)f!!5--B85f-(LM'c-3D 3!"KB@#BI,T2jMJqAZ4RjSYSd1!@'!3p-9pTm1-BCE6XQ@[+FX4d6982&3pN904I 9GQQ,e&NZcEqXLceFjp`&deK+cBq+eb8(a,YV`[m$!rBrr16[Q!Vh`T!![E1e!d, E[jUL0T8Bi!+efl#KYEY!EAV)f3T(d9H,UNK"Afr5S&keEr0E+J0"9c+QfdC*51l (8LHUYPl'FN'DreaklV(`DqmKUXKBEJTPf3@@0FFXkiRP,GLN5E'"@2l$Vri!Kq8 9Q@@"YS0K9mNZ-+b"B@VqKjb'1+2e"#C&f`K3JX@Q,EDCVGfFhA(1ESX8N`hYJDF ,dS+kBf3hAJ@JJ,Vm&LMGEB*V3f*4ZHQZqV26MN8Zqq$l)Xh20+mbHl2pZYbFl", G3%GITD1c4I&BMXi`1qhl*+`NXrb)Lh!-hT+fXCVq*PE2UPi9),1X!e#ADMYK)+P 3fiQ`jIDD1KGdriD!q`B#EZj#8(-rG63+i06Jl3RBG,5lpb&R-BbF)D$GUqlEjYT TX85!pZD4J2B4KK)pCim!fRfcUbGfBf"@Bki&f)dYk2l$$Ep4!$[+EKbiA36FB&B lDJED4`(D9#d5D#I-2"S+fTY(!YTM'ML0(,3(PRYMJrE!4amED*qLkSH'Y-%DUS, Ye8A9T(*D8dd!B,p8G)Q&U2#9b,mfdXG`8c4kJ@2MiYXIV+QQk8Bl#4KF#"AACqJ "-FBq3"@rLcQdkP3%BBiMA*,)(SaRI*06Q@!jpGl"bJ4kc0f%q5B2G!bPH*ABN66 BU[)"ZEbPjIiHYCH%!kaUiP9LPZ+c4!ad-aRkMN6Q4Na)4SDm93Ii9eX8HD[DpK[ bpR$Nl@'S8GA(PjXKMaHR514pGm6)1d*"'M'SQL([!%0H+1SLJHjfQi+i',di3P` 8EIpl35hlaJ+eG!Uck3NXS,B9RSLIC@UcAKXbJ2bHf[%he@fD5D%M+GPNJ,+@AKd @E3Hce103ND#[$8%bdEr1A')iV-Re"QNlhjE#99a2199eNE6pQbaef2*2IUKA&GG CrZP+i$dP-0,`#!+F-%p+2Ac,2'A,2,l&&pq5,b9,GLaXZ%llaQljk6HjPTpD&N2 *C$'TpRT9X9ADJ3mqp6IckCpH#5#`-Qki,#8IY#1BCHI#(mDdKbec%"5CLJHI@qC LF!IP!6jPlZB!`Zp+Z!A08mR#[M"PI+`f5`PJe3LM+(fYJAVi&U$Uhi'8PD5f%'e F9&`[qbd`JVk-`E@AXrr[cL%TJ4CHS8PG@1,EbK,IaK+l,09BBJ*Ic")XC3NTQ8( *1,U-@8V`'FFK#,,!Q2$046#b9K'bpNVJrM"#j1Y9SpM%2pV%2pKd*4#HSJjMZ*K ZZ)`22VHXjapraKPHccGpaKQ'UKiD[)!'PZ&*Yfk'L61["SALejAXNN,Q4G9N&Jj 2@MRGBkIQ+0KNJqX!P@J+81KabG@ZkI9Z2G['(Q$Vbd8m4)R,+a6![#"3`"fEjT- S-$BI30pa-"P'AQUQC8ScIB&&IP(HfA)CLLQ[L"9Ba,+RXp4'bhb%YZDlH@J,CTT LD5H-3`4k-q1JYd81,J9kaBacD9N$PD!qh0QaN3q&l$iA*4qVRVZ@j10'*EEC0aD a[Bh34FJK4pYc8ADbSmbp["l-lHA-lC@C1hc5j)'*T6k5(3c[kN0**CQhZI(MYUM a!`3c('GeHi362rEBNd-A(TeGZ$*QIR0"-a@UB0f,UM*`0T4eH!TJ%JXC,0I$`Id i!(15qm9QEkIS,P#p-E%B,($c8ZC1,cRBlRc9ki2jLP5LSFiG+q$,rRjS#'VXUik DMYjVP%e(G9#3!11,hH9[JQ*NRGV8dJ"bL)'I+6$dQ4S$D9dBJYDQT-%+$(l0$8V j4f"8Vj+c5icQ0i1CP,KS[pp!K`9V[1LH&Hc`MQBdX3E[fHM&)@*dkrDKhh(6Xi+ FUa1p!4UZK`JcQTR8fK@c@K--JB)*!r0hGkJBQ,YBmEDD$D((MX-4$+#MjQm&dBC )4*TN4+k-)V,#aaY$mei)'VcGZ5(0d1`kIb3N#hl,1bf%j220hVCJD22GjDT$piG f-3DK4SlU!plZM%-4U!kGX)')[0UH$2HII[B%JT+cTJ#G$JUDm8&VZFDVQ%1bil@ QfVQV`1f-0N8Ta,YI9'YM8QF00d6%CL2m-A$6$4qTkH5*&fH55mHQ&'f,NqP--iG Nl!ejE1l)"VP*HCACKQ+TZPF#U82"[AM8,YVMVZ-`#+q'(cI[j[*a[,(DN`C4BAk -+R%G+[SU)-1J#(S%9@iM5(dlIJai%A$4a-h&!Si)Bp$3!!-[&(I9Y8hYF%b0Kf+ H8Fp21#K`deV13Lq+@8lX[-9C,hfYkT-r8r8)iKLNUkS4i6QMB440fqPd`9$1$9" LKReER9Tr%`a1L9K-JdKN"SCb3m`@%(FHa''@kpmKF"XQ`"YF+QQSe+qAYJ`8)X) f!fhl[d!&XG5md$B6BYSYed"-ZdkeH2Q@L6!P+T[JSV[)*)#+qPi-*5CrNk[HDPQ 058E,-P6LUcd"6`XDIK9RNMUU4GP%ja&mG*Y6S1SG(8IdbCXiZdhd!!B4Sff6DLb HCeR"Kb`Vi,icaHC9-ZZBIKH*J!,(E9!(TN(A8Sk#0MjPY5h`Q,)d$*jSH91*+I9 8C#'QlJ*+-Gi3,FB`T4ZF*9,2H`DZTX+,fT1EQ@)m+I4c9BNKMZ*I,9iI4r%0(-@ rNRU1L1)EiLM1XR9c"%q&N!"fAC@#hUPX!`DB2fFS$TVHUe0[09[+,,k8@A`TEAb JqA-`qR0He4MB40kP,`DcM5YHi"ih$kH2[F4PUR)Pb44-6+35K+D@GR1d&e%a%[8 Fe'XSD-JI$`&Bq4"Hea+[4[#aXd)TD,&5fYD4[*ik%b(3f%BI',S9!9$ji1&S&S` jh#q-2+,9KeDF[-M[3j(Aa,eMVq+$[+#VXd1*R&,SBmU&TPbi5(L`,Li-)AFSIPV HSL%"%c16@!@SSKXA"9qPhFi#)TLF-"&5,R*8'SEHCBhqc#S63R016b6ikKe8jGj aG1Pj&i%b2R'SfU4b-r)Z@95iQ%6&QiLK@"NdRcXff'#$jMN1L'Xj4h8@4h8T32T RF@3EcC%0S&l!JAS"%-j!qQF!kCmaY,[eBd%lS4"&5V2F&`d"JU$F4iJ'39[*NAV )1mpb(a'(pe3CZD3F"[4Qp5-1'a8%ciNL'!4RSf8UK'c-PSJa444ea9936Z)idTY #0LM)CdGa4PFb*$8R`5Qper*V$M*Umf'PBSj4efU6jMI-VaDeMbj#6l-a2fEVMV- qV4IQIFXX1"beK!+`55mF$E`3cB0)AZfS!HI&rTA-Lp#%#+PNGXQ9$%G9#YYFXVP S@leD3BA5C4J&BQ1@dlCZ8P,DHKV(%k,cd,(iY"V$9ai8YlB`NZ#&d'#jhl!iS'X !)+1V5AB*d$E9XXcT!4K5PaS&9B`S%,+#3rbBFAl-0ECZ[-E#er5U8)qJJa*aa$A mS%3FY)-cDD4U!iKFTQ[MKj'#mXSiU6[Fch3f3S"@9A,NT%`dacd8RQCLqaRh4La @*U#XQ!aH$f)3'-(`1iBT5A`Bf"Sa"+32M[,"XPFHG'ApL9b3!+$le9Y3D!BFB%X 2a%PXEeP'GTVZ@!R!CYN0K#-mZmB,4H8"P13!a+5+`e6cZ!,H'*Ac0NH,BAM5,a1 B8dl1l`GFC9!*DqVjK9i9Z+)#$F#'U+-b("!Ya"QGTMLMTf9RP!Z+1U5RQ80+Mp( 9fp`TEH),ZLqk)(iB(&1Qi+)iTcf1h2!aU%@`6ljVhEje5jFk0KIllaVBHSblf)r *,[C6cQ[KBMmi4KGlK#SB4hDaZG*T#2"6'J#,CGpqGl(l8['iX9eXFdCl96+kl6Z bLfd2GE'heZeA&pXqBKGl[jLSi#+-cF9H25BAqe#)Lhh!(-P3XMrT%KLDqcRC'mf FE(ZSNkdJ1h6#r(j1GTfc%8lfd3JR@qrBZ,NQB1Cb1dISFMFHU5QM,VGH--dFSF1 p[mer6d3-#M95kh'U2Lp3E!X@FCIE&KqU(Bp`ZGmbFlRILR#jC9'UQG0YMc[GGKc b)!C8Fa5RHf%[GlUTHr"qFER[jLjh'eq)Zc&'S#@@FTG`)AHkNf5R1l6TdDNJel+ `EaFmG0+X!,Q$M''h)B'jj0-8PlaHF4UR1CVNbV9BiJlk2H5J2ieLTMMS8lLLk1S 3phc+!1lj&$2hI-S!l[Q8!Ghc2r%"ljm8G-ASB%+BiU$IJf%qPYGmJ$(CA0p['(j +)302Q,RSL*T,28r5iDGB8He5j@,1(@2@)0Ga&ce*GY(l0FKeI6[X!c@)'NKJ,[a %lX+Vk-R''Q5LSdRNdV0'#4V4"FGPY[$CmB@(1[3-DDeXSUK*H&99#R)dMXLaleY *,L)p!R2XfH&C9&c&4PkJ+P#!I(l,SS$bi4DjD)3iq#EqdA$Fa@GEDrD!B('9#ql N0hE65j`K5RVJNp-LM-(9ld1"N!"A,*,LkYZ#,h!(Y'MX3ifJ3Q$8G@0fpKY$RIf RN!"[LkYFbS)SZ+14SMSTSj!!UVVc2"&VjJ6`64NF`9'(AcTk*)Grp8!1rijC4md FrZd**)UM@bCA2MQC3amZIepQXNT(j0epL5-pk[6I(NGlMB0+q6kP8QC!IcZ!rRB Cr@jKM%krR6Z*Gm5VNK53!+Nl'XRP2mR45Llr(4%Z[i5M9cYdq9FT++k-F2PAFCG rPCR,[dT'1SPcl2*[6f"(83'fV*D4e#bLZpeUbcV&k8q3!*eqNlEa"2e02,'JHP8 hZNM-3J#JQ`F!YL!!i)i'!#6IV%"iQNC"J,[Jq0FT3B#l3S-!5+1bMP@$kVJcppS (!4T(iCMMB"B+B)%!VDp!3$jhcUmiFhNJ)%X*"'`*$36XQ-8'`$`3X*dI04jbe$8 X'+#0*"L`R#UC%33$qP4[MJ`'K",h-3B'aU#kIH6!3"p1Ja`BX-Z"!@AB+JF'l$G DB+![-K%5'2MPri(!`-VAqJJ-f11"!9YSB%"aSDFT,[4TfBAH,i'""mFH'1M62"m 5''"J3mVG81&@3UUK4Eb!LRJ&L[KkTBLMU#$F,"Ia&,Q)Qe5pca66qkJ+9kS*bBZ "3,!*A850FJMI4Y9l5#8LJ`Hd"%Uq0h*q5Qmd&LJBF)!cd0U2J@M3Hbc,(cK+%er qJ9kNaY5mReBfL#Qf6bZ,[XkT,+TX-"fXE*!!GZVYaLf5Eci![Z3!8eTYN!!NhiV U'R[iIfQUb@0-PP*35&@e*GTjeFJkVaUJK,25b!Y,H0++)@1eY00N0cqQ(XH!1,I 0KjZRDrANV,a2DV-&i$bb$UpN(R)a3MlkP03T(kchQ,ESNb8AMM%PVe9MBNcDiR3 2APqKkE[3LDqBGGj63"ZGN[CY!mTM*R6UVM8iBS*emHeJJCIY9ZXj%!ZaX%bA,RF l,8YrbDqM4VGDkB&jD%M"m6#+49Bf+%djqRrf3qq-%-CR!,dc4S$HMrZKei9`#3H Hj)H4YS+K0Z))S(E'rmG3qrrh4bhJ%Vjf@AikB",+P#2$X$Q+*i3JB!*32'%rSIL e1)SMMJ#+*rbRK1+cai4L*03N&)2!)C'9bqrk1&$'$)$A82)8$`p"8`T8T&0m%cm '6iDUVkf29bbZT-%Q*%LM,LJ8U!8*I%B*1VAK4h2fFQ%EcMFM)HMT-*6NS4JiJ$2 VG#'-`K24TPjIrb1%8KZb5k$HHGUBS4TE(r*dHflS6hlc+6!5*Em'QIc#4)XP)6# 5`SJVZI`9UUQcJMQ(4'4hf8lBaLXEFTEc8*NKMZ4RcTCRTZZ'Mm''bj+16*%6K*e AmjYI9&dqM+B4`0[+%@#jQ44Akc5rLea8EPj6(9FXq@1X@23U95ZQ'$HBXUDECjX TGGT'#Ce[MQZ8SR9+l8hiZKNr%fYG(Rq@kVQ+C[`khSb'IXeS3[2Y8TUahGN%`AZ 9jTP)cH0XJe(`Y19QBJrTeSCjC9CRkN5DD4*X61kQlBE'AT98,'T9X`SZaGXYVZ1 KQCZM#T&8dAeqM"8GSGdK'#Hq5)$NP!&T[b,kNGCa!0(SSSDF$B4NTDK`0"2l(0( d-,,)p%Gf8dL4DD1`Ue0Jk!9D$8"V'eJJ%@0!Dfi8V3bF[d0S24CS,QAN)9&'E(k c!XUr`L)5!FDaHSdZqB#B8MkhN3R(M0Pf'RBHmP'3!",-YS2CiK$!mMYcS8+4MXC *P"j!3U'mNKGiBIrfY5rXV,Q8`CEU0#b"H0h$VNi1VPj+Z#XAph1jD9QCB[Ua'KA lNdmjT$+Y(`%Y(K-"24`#$LR1Ca4a'mklib6823)5+Yj)**30Xed+%9h61!)51[# )1r2X%8MSDS@%8M)"Yd*#jA"&E$m58EN"j`p!4UH0J)cUdBJ'T6&ERBHiD$0#qM3 9p@N+)DhRK,54%p++2JJTD`)0T(3"JJR6aNK)qh"h(""5'5&jR*5@lQG5+SYI%bH Q$iF3dfNM*UD()SBI,LjHB%MQj,54Np1+2XKT(,Qj-R,(3Nk2!0RrK5#RIB9L%Vd (+rmLlT39",`Y(!djPFqa8!XZrG40Brb`r$$4%kNm3'PQ+[m#p"`)6m)@5R*8PP' B4SZ`4Jb)C80k)M%+jm$Jf$RBZa-TE&,N"598)VPJ)Z[BYL,JYpJ#hLEaEK05Vp- $G#[KNrCXi'S2GFcKq0DQb#950`M6HbaKaU-jK9GeeS&A+#H3!`I)T+5E"@&X0rB XRPQLIl+BTB9*UTDmJcI8D"ZITEq*cmkZARAjh`*0DX+PZ8[hEG1Yije1@$$KD%N fHV4CcIhH(ZVk5[qBXI4lMH`6RVdMTc$YDXK5Q#Qm'1'bA8X@PKR4!4d,`e*FE#Q Y+S&2blKATC!!1CC`Lfi9Gf$B!Tl"!Y,+#R-GVf+!ipRLMQd4`Ik,H&aH4'jfqXK A38"c8JNB8X)j`paE5[4(LedpcDSZeZKcY[2%F%KRFdhMdhj0YC`NBmVa!&r'1Kk bC#'f'L`M2IZFh`pAc%&lb#b2lE#*BcN-dH8M(iBd&*5%JS-C3T6YAbdY56%dH3, $,9mYeCf5YZJjd!BqK,LcQ5@kA)G`9%ErSLBl"Va'4@`V9",!51[FT590lrQH2!5 &!NEDMS1dYFaGDYqQ@aB#VKrKU0c#m[*S@,`Ib*ECbq+([8Hh0R!4HNVLU*RDf0L SUD6Z3-Sh)(4YIJd$KZd1YrRNE@55EP)GEQS,hA3)T*L-+95"G-3m$ClV@KT`4$- UY*8(1MdA2,qAfPSZi*'Ee()0-ANcIdKU'Qmj2%5+,cI*i3C$I%2-hqJXF,K*#0R NG#BB$U[,R8PpEK@F&Aa6Dq3QISZ'J)a##!X`95D9T8PL&%amb8%cbD"3`m2V[ej C8rdKLLk&$*I0jbmZ9AX)S!%Mj4F`alP!5+p3"q'K,f%ffFV"B$Jd'+h),U21qJ- 8eG)p'@DTQBET1'-eM!qZ)+8LB)'J4S4@8S*Y,)`j8%UMb)5!mG0$%TH%&Xl@BUT XikV,P-!49F2I'Y'GX4'G!T[E!lDa%i)bJR)U6b-jE%VIKcNL"2d11d!KEi14NQZ $&!cH%QRi`d0TF#&#@VjeiqI94H-PK[20TXj9*l!8Yr-`2Dlai[Bb!kEki-C"T(F %@$5K-qFd$edDDkS0E9JX'dTmMX9QRi[MhMc-eE2GPXP)J)fq33GXSD5Jhr,pc5h G39TH&PZmAYXiNriQcPaA[@Um`RGHVB[GGZ'YlK,AqHD+Qd`hL4TMCG9-cXU!D9V #0rFUE%JaC[!-BB80b)HTdXdp-LH%HaXRRAC`G$B8J%QKNJdX%L3!FM8#l9ll0JD HI`dY'qDLYdF@K"""'H&*pkiGJk#b5%&N)UUKK"K[cUr+D+1U`KQ68fbPjS$(c'M `-42r("4p&brkKi!Z9VMeS5F2IflGSF[9P@-X0!!VrBAG1c4QB4(X)#flNXc61)m Eq@,S+Tf('c*j-4L-456Ta%ed6!'SUFDFG3j5AXk+QY,LAD+A+4fc[A+LcF$C##+ frj0FfJIi,#**(CQdSF$)LGcG468f#Mp3-e,DY!',UTH-hJa-!Jm5R3r'BIQlhiR h`X8#"`k9b,(R`JaDA(TfZCa'D%q'-U"5&[JlfG6jdmQb#4BT+qq)JZlHMi&HQ&" A21Ha+qQbA*bG*U@$XD3X9BU!D(1da!&+(NlU@I*J!a,3eNZa&G9+eh'i!epk9Hh ,R@T-2fk+`Ch5[1-!#FfB@R3TZ9Y-M!iU3c1TIYjVYHEVbSK6IhD*G8q'[*!!ck- S`&0DKkeRMjb%"5l02Xp,j#)SL3QcQ-X46D%*jfJk'4h%0ZlQ6-H$9j@A9r%b@AQ CM*GAP*GAm2+bm[)bA[kZ[2`G,imS,irJj9(Pj9'mV&&HeZ$PVmV,Ar'bA(PCMTG I+#qrL#Ie,8!r%A)[Ar!hIbe82L`r+'UN,D1&TGRPkBa4Q&NH&SrLkiRX3mRiNJj @2V%#hG6I@5aK%)Xd[hLBZjSVQFl$blaJLT4615qTDJJ[-S!80C!!f(&G3@Dk'KH lRJYF$i(V5@"P91$kh0AiHTq,HTq,H[q,db5L`@S0%5+V!C!!UqAh"EU4ZYIe%93 !HK0h3-&Kk(IN&2UAcHTQ*L"9I@df[@+EjNpX)9@"pl8m)L[di3r*203K9ler(N, $A`8TbN9K19H@(PGSiq"(0a+"L,8!`R3YMlUV35AL0H-$qBRATHTpLdG,$KLKFS, A#CAG*@kpEqiY)J'PKQh(&ir#ZI&9MCEE8B"G5,A%MrpA)p*rFC&IBQ&B9JTcMPk l5%4I6T8dJbdVl9`T[iUL3ADak0"8rhrm1,8,eCcr@cqHm"'5qM2"ADHe2&0aX&I UH4GT*6(-ZXU9%&c[fLK9-#iei`NF@mbAXpPB,ErX5b$e@+6i1r%Z0Z%(KdLfkkS @Ve@eXYLA26cj*NID*EDmM-aFH@P))l9EVe4#jBQE"rhZbi2qf1@[QP5fU"eBe0Z r&@1Q,e3A,V5Ke#')4A*k%,S2-[NbmB9,&e"YCHl-6(E-ZGb3!)0i48H0dKb!dMP Z("U6,L2a8MZUJYMP+P`f36AEIEN+Vr1ES"Vi`H@Q2")f)9P"C@K,bd-5(Y#%!VR VI+,qSDAMIRI,Z1`1Q05ZQ`Y8rmN@'"TaHcbIr%'&@U[kBbhMYF6k66,3SC'48%Y UUlT3UkK`[6DETmE@"eZ4CYR&%PCp!-,e%D(BL`GH16Ji)ll%0(p'#1#lZ*)F"m4 Bb`4aRl%#$HeZZB*Nc9iR&(0HhHbrkFHTrN5JIF,X+jX$hDRi1&9-+8LmIX+k+qq 1Hr+N,U0KcL@S5`l9G09X8KCaNC!!$M8XP`65qF%@ZVND9"YS1C`XT-DANk-V$qU X51!I(eM(QZ3EXVfBZ$#ejqBLh1c,q'E,&G''49bC2FS@e(,j-PY+l&dd!Vr8!+K [0j%#DZ`b,N`*5rjCM1Nr!dMF*EU(ARF%$&YqeL3j@P#ZVL!p1[$`IVTS0C*Yj#a DA9-P2IM"9MAf)9i!(2L5R[ekkk,9cK6kURRf`kdXQG9i+2$Z*SCUN!!'qqeE4(I U2bqCY'Le'+-*dSq#@NdU%dR+m%1TdPBfE+Lf4J)QKDVS4UGYhDTUq$GhY`9DCUj Z@"$9NMEFB+LCEJ()LE!*BD`84E@UUGE(`+4S)E[BYj*AkLij#$@$MJ#cCkfPN@5 JN3j$SpmkZhYc`06XYbm1P,Mcl4`4EF5f8`N4rZ!Le&XmaJF8dT8%9@1Y0(l`$jr "3'Uh(D'BVlfB9!pL&TY,l+q6TiFXYcKdQReEq'p4TD4APGS6jZrbl"aVIL&9VpN CDC%T*"mm`3S5EYX6*m9q0bPMYh3MX&[-5$AGYK5!e2eq3%lE6X&80Z%(*L931N5 NNKhq5SQZMq-2m!+16LUZGmQGT8l0l5ZUZbBYfpJ&T`"N86-9&hAMF8F0ClXcKYJ V()F#9HT-TPZd0TcrPcY'k38hDEYF9Y5&$Sck%aKqa26HApq`2blY-06S0Y%4PB' 5eY!$E12XX@k+rJ3Y[0c&ZRL%*beD$,A'')C"GU!8K%m1p%lBRPN`%+RVi#'II*@ BGmD+,YQk+bH8*NSq-l&3EU#`YplMV4,hHJTZAFk4[b!%'*,mcH%TPV`+VD9+6*' k*$Y8+$8RVf`YL3m'S-jpHKD))cUEZ3!f$p'`L6@G&HS8T1TQ60"M'%PT3k'i&j1 V[9FLQe,-,0#94$BQ$eUjc&NJ%[R$5rdCd60'Y)q!*'QRG!P+(jSS'4-3A+!1(BV Dm`X09%$!fP33SCe$9I,3mHrQS09[3A+ajdLTmHpF(#MGaBU1FjI4!mI$T45N"I3 UHH@#hC!!`b@E$@k`V'Imc6Z!@#+@5&J9J93NA981B-YfcS)#BiV-3P'm3)b,j6T GR,69TJ"9ec3HEQjT!F0628&P5YDI3"Lm+2"E[&qVZi++XNcK%eMd)II9NdrLPJ" Ae4DJ,5@BJZ$-VL!4`#e5LMK(GTa1B"c206["5a3G['P#$c5`!ePhZk!lhd+(3Y! GNNp'"d5aI%Ya89aK&K@-d5#jNkq!!038[qPU9Zm8fiSrKU*d#Pj5a"KHlV3pblD )YbNK)8!pHM1NXaB$k33*eD8G8@`+&hXR&hXR&jX5+ID0U0MdE$1KA-%6LB&9)li NU)RUdF&[NeSr#*942'T#q"3LRVG5$HUh`XiLkXV0KV5jXJY99ZT[TV59e-dI5YX 3Ki#B"i@),MTULe&a(dkU!L#i&`Gi4bCb`r4)Y"mcND%)346*jk`K`a%kM$6KTZF qY9-db!,i%EX`q&4P8(QHI+r#NJ'A4@BR+*ChQ,4JdNFpUYk4b&*bJXbA+G!bTGf db)M&YFZ,Lc1X4J&hKJ`'mRVN)XqlBK#V!-3l49F8Z"49Mmd`-L"`1-8&Xf8cdN$ Xm[GLI"CEV9%k00(!1h6G53,ipYIp[X@"R$T$,&RpQiEl!Qpd9d$IAVX-%I344hd Md1Tl,)"`hE$fTY6XI)&Y8ZNfmKT,6Uq`m!K2N!!!Y`q+ehV44!X3AG%MR3BfP6p b+BX`N!"C,p3!L`i9R1"FXPU4,p4+,RS)qh+3!"i*GSR0hIh0K4#D`9R(%*(5B-6 9@2F55aN5@0,c@jlSii`iHF*H,Y!TX3ZElfqlh6iC)4FUSPX)'IH2Dfp#%Ga&#@, N"6HFbm@#ba`XPYp5XH8kDUB(iNdAJcQF0GP*!Q'4Tqr,F4[S%%hFlRIRpej($EF EiF"H$(DlJqM16Khk',[aVScS[N3T!H2-5!LJ+3"9Y)f*5eD$jJerbGp'B,&+fk- bmcH"0T6M*9'+0QM*-+%dZ#YLFP*SJaR'mpYSQDYf`dMX$YC"HEl0R`+%pb@'Jh! SqY$Fb)8EfYa%2N%#2[eNLNJhKiBMMXXkKLEFjSM5[VQm3J+#((lhem)R8jc&iIp +YrMjfP2j2VRfRdc*EbDbbJYh@CC1'30NbpfRH5L(+c)'jhN$r"!ph85%%HMDBJV Qm'2d4KK3jdq3!*dG3VXb),9DbFSHP6Z3!1#1%(%()XA*JFdr@keF&b9bN5`0qTr PbLAL3jNBS2SJm,D(N!!#'LS+FP8$Sbq4SCe*9EL[p8@Uc)BQJ(M&N!"qEaXh-R6 )P4e!NQjX&1hqc3"Ej+H($1f9BrN"TEN!Tm8$%+-e-[&*9N8'U$-C5,T`chDG+j5 3!,!2pUL-M-F"0i9Y`Q3l[df@FN!b'`iVeII&QD5dhJI)+F3(T,Z*!9pmq#&b5KY LrKN')jXcFG"@9)*)BiN[0iMDPqUGk$Mm)8"V)J6@Yhq*4D+kP,j%9i8$F0+-k0$ 58I1PHRafYFX0"LNPMAY2B%*!DQBK($&GPa&bN`BH),TSj'%Rj61cT%#'+%S*KB4 QN!!eH3PUXbBM5Y6hBlmeK2hi&(8"*mUi8E##1U0Hr30F!D3Q"a%+LR+$2DB'Af2 9L#Z'JYf',jrSSI4(8'"Z+NR"6E#19f*LQFE3LLk+q,"U()$@3800G*XbSRTVUX) QZUe8D&-lfpLV3ZS%$$el8@eA8-8*"3FD!"3RTA,bCJLf1f$$3+5AhpK+D8Uj!`* 36$fTSbJfm)#XM1SR'+VC(NGE-RTP)d&$MLi(0q+)+RCc`!""TjYb)i'8Ai)63Q6 89r'MRD-,8GP-(T@ffTieG#H2LUG3`EG+2Sm`*06idTY@I(%P)2PZV`jFEJM8akC !&GlE%$`ZE5ek9ZSHqaF%,chrhY,aP8a!5[ca+Er[qJ#+EBUbJ((a&-bG"3T4K6T ,"S)%13SV4#)Ykd!LjbN%$-(Hc'`Va[64i#+D8[[&!@8SQ[C5QP8CRFX$[1A[+F, T`j!!iAAF%3H)jE6jfaE66IfKdN4+iMXQI6)00dR,-bElQqHf"0e$UI`LKFJ)"dN UcUhd1[3l&Sa&XP0IdS63)G%S`[4TZZK#M(3M#[b2F2"#NK8RI%2q4[5Il9bQFH@ U4[cSRIAH+pQlh(VerkQGU2`PYG0Tm&l*F-8I'G61'VHcV4cr#`,P&PCF4dA5()J F+T2jiCI9!aSJZ((R`PQJZm`2e4rmpd1KCmeU)@(Q'jFqZA!Kl,ZArJ[R,PZfl!E mK!Zrp5fK[1Zc3@'0d$!B[[2-*i)(2e8A*JZr%)*9`RTK3rLAi4H%qH&j`Jr19#i @-[R$)9pi92JUr'2q-(c`#H(C$F,c'lVHZA4KqIS,3cpjIXMhj`ZMSm)f)IMC(fG kRKSDa%*-i8rZ[9IiblhhlPL+dei92[fI`VSh4VZ&'8*Zq'GG3H&Uq0kZ4H%hcUc j@2MYQH@,K0rJYkZbkjU`VbGAH2!c!AF*92mK&'("K3hK@jNXBBrJ@EC-b+'[F$- q@a+Z(FS3cSCh#fXQ#+2Khcph3rL0#F),9B*IH+j+q'q9Mi3lcc`[[('Q@mJlmdI KVm,b4ji9RK8q2R0eKK#H,[cfHH'&KUq%IeAf2r'24m,I2R0@q1a-6VMqc!EK%f% 6pPm5IRr'182`6KGqc[E[QrlkNZQT12-ViEl*`TlT`Q2#MZP#N[$I*`ZTNi@pdi8 I#TlTJKd2hK,#&e)VK5jKU#GR3rJ(`NY#8I9R3Xq-ImcmBi1`rP5iq-5ii,Ppr3T "Q$`Z,2STNSGG@0r`bSP2K3PIIE&'+2b(82V'S,$cjm+@m3h20MakUI,e4i5KDQ( [&p1&r%(K*`#3!aJ!!"mS!!"6i!#3!`J!N!-J!!!r2!!(UI!!N!-+@-!!AF!!!&h !!*!$'Qi!N!-"GJ"1F8U$CL*"l3!J)$`r2!!!)MbTm!!"5N&Q"%T!C`T)3%K"))! K33!%3UG"q[r1d2`"!#m),c`!!"PZ,`0K!!+X9)pR3%)i#Pj#Tbmm4%&836mm"0@ S(h!"%F!+ANUICaK1F6!mUA#R4N2k!#SLL%(k!#!`2+P`TNG+JfF%F!&1G8lY!#* 1F8U$CJ+Tp(!!6R9J"J#3"3&1F4mkrrC+(fB551IJi%(krqT3d%kk"Dj-h`F(,cV rhNjeB(*"6%&%4%008!!$!*!d8(*"E8MRB2"d8*r#,dJ!)#"2)P3aD3!8!"JK3!! N-A`!!3!XdT%K33!ZS!,I`NcI$`C1G8Si#PjR$#!U!!KR$#"!)""R"Lmkri41G8M R(`C"q[qHF!`L+J!%`VJ$'Q'NCJ!"2NKkrij1ZJGZ@%q`H[pDCJ!"$U%D,JJ)+J" |
︙ | ︙ | |||
3783 3784 3785 3786 3787 3788 3789 | C`#e-rr4#3$`!0JDf4@3XH!!i!be%rrMBLL"%%"!L,[ridUlrm#""%)!J,[rid)$ 3V[rd)%!`Je*'B-i[,[rd,blrm$m&3QG1Z[fb6qm!$%*!2!!f"VC&C"*`!$!$d+l rm#"!5K"Q"&*'B1K`!#e!rq3f"VC&C!!!U%T$Cc)J,[rNH!!i!be%rrcBV[r`)%3 8%()!%J)Q,[rm8i2@V[r`)%-@%(3!&!15JZ1S,8$rj$3'FJ!b!Y+Zrr!J34)3F!! 3!6i!,@lrj2rXF!!Y32rS-!G64dT!Cb!J,[rSiiJL,[rXG!(#JS#",8$rk#!Zrqc LL#e!rqaJf$3'FJ!b!Y+"dUlrp#""-K"`!$!"jB$3Lb"!)+lrk&*'8Ulrj'!!re4 -haci6Pj1G5*I)&qJ*5k!DJ*#Pdl4)Pm5(c!I5J&R"+G'B!+M4Lk)6Y%LAa)I-"m | | | | | | | | | | | | < | > | | | | | | | | | | | 3722 3723 3724 3725 3726 3727 3728 3729 3730 3731 3732 3733 3734 3735 3736 3737 3738 3739 3740 3741 3742 3743 3744 3745 3746 3747 3748 3749 3750 3751 3752 3753 3754 3755 | C`#e-rr4#3$`!0JDf4@3XH!!i!be%rrMBLL"%%"!L,[ridUlrm#""%)!J,[rid)$ 3V[rd)%!`Je*'B-i[,[rd,blrm$m&3QG1Z[fb6qm!$%*!2!!f"VC&C"*`!$!$d+l rm#"!5K"Q"&*'B1K`!#e!rq3f"VC&C!!!U%T$Cc)J,[rNH!!i!be%rrcBV[r`)%3 8%()!%J)Q,[rm8i2@V[r`)%-@%(3!&!15JZ1S,8$rj$3'FJ!b!Y+Zrr!J34)3F!! 3!6i!,@lrj2rXF!!Y32rS-!G64dT!Cb!J,[rSiiJL,[rXG!(#JS#",8$rk#!Zrqc LL#e!rqaJf$3'FJ!b!Y+"dUlrp#""-K"`!$!"jB$3Lb"!)+lrk&*'8Ulrj'!!re4 -haci6Pj1G5*I)&qJ*5k!DJ*#Pdl4)Pm5(c!I5J&R"+G'B!+M4Lk)6Y%LAa)I-"m JAdS"C`5Q4f!#SNG1d3#3!`S!1+!"!!8!N!B"!!!"Pi!!!CD!!!!&5e028P3'aJ# !!"`%FJ!@38a59!!+!,T"9A-b!!!"2N*14%`!!3&+3dj86!!!!@*$6d4&!!F"EN4 "9%%!!!(14%P86!!2!GT%6%p(!!3#QNC548B!"!,@4Q9KG!!!!a**3diM!!3$(NP $6di!!!0D8%P$9!!%!fC3Ff9d!!!$SP0*@N8!!!1Z8e45)!!"!lT69&)M!!!$dQ& eFh3!!32HBfPMEJ!!!rCNBh4L!!%%!Q4XChJ!!33DD@0X1!!!"$*fCA*c!!%%2J# !rrmJ!*!)JIrr)!!!%!#3"B,rrb!!!#!!N!@&rrmN!!!`!5Cim!#'rrmN!!"!!3! HX!#(rrmJ!!"3!*!&L2rr)!!!B!#3"!)!rrmJ!!"b!*!%!J(rrb!!!))!N!3%!Ir r)!!!NJ#3"!5[rrm!!"K#!*!((J!!'&)!N!@!rrm!!"Kf!*!%!3$rr`!!'+i!N!3 "#2rr)!!BcJ#3"[rr+!&leJ#3"3%!R4`!*TN"!#-8!!)!Ta`!S[S"!#-3!!-!X4` ![l!"!#,m!!3!Za`!r98"!#,`!!8!a4`",Z)"!#,d!!B!ca`"8!`"!#,i!!Irr`! "I!#3"rrr+!"e*3#3"B$rr`#3!k)!N!@#rrm!!!%!N!D&rrmN!!&H!3!M)!#'rrm N!!'d!5K#Y!#(rrm!!!)e!*!&L2rr!!!#K3#3"EArrb!!!ed!N!3""Irr)!!$c`# 3"!%(rrmJ!"MT!*!%!3Mrrb!!'BS!N!3#!2rr!!!%I!#3"!)"rrm!!!5k!*!%!qM rrb!!"3B!N!3%!Irr)!!&(!#3"!4,!#d%!"SY!5H6f!5[rrm!!"Tp!*!%!38!!#! !"C`!N!3""`!j)!!DZ`#3"!%)!%SJ!"VA!*!%!qMrrb!!"Ei!N!3%5`"Q"!!Dm`% QH5J!J2rr!!!E$!#3"B(rr`!!'aF!N!@#rrm!!"XL!*!&Jrrr!!!E,3#3"B6rr`! !'cJ!N!Err`!"PR)!N!@!rrm!!"Y$!*!&JIrr!!!F4`#3"B,rr`!!(8X!N!@$rrm !!"j2!*!&K2rr!!!I8`#3"!4,rrm%!#"A!3!M*!##rrm!!!AD!*!%!qMrr`!!"[d !N!3%62rr!!!1#`#3"!40rrm!!!r%!*!%"%lrr`!!%Ad!N!@!rrm!!"-,!*!%rj! %!!&lmJ#3"!)!!!FJ!"G#!*!%!J%!$L!!&e)!N!@!rrm!!"GH!*!(FJ!!)0)!N!@ %rrm!!#%Y!*!%"%[rr`3!)6%"!#-B!3Arr`!!&ji!N!3"#2rr!!!L9`#3"!%&!"F !!"I2!*!%!3J!J3!!)SX!N!@%rrm!!#+9!*!&!Irr)!!Af3#3"3,rrb!!'"`!N!3 '8h4KG(9c"R"bEfe`G!M%)(0eCQCTH!C6G'&dGA-16hGZCA)JFQ9cEh9bBf8,5@j cCA*d)%4TFfX34AKTFh4TEQG3BA0cGfpbC"Y&H'PcG'PZCe"KFh0hEh*N,8&`F'9 KFQ&ZBf8,5@jcCA*d)%4TFfX16hGZCA)JFQ9cEh9bBf8E4AKTFh4TEQG3BA0cGfp bC#e"F("PBA*KEQ0P#90PCfePER3J-3P6C@GYC@jd)$)*8f9RE@9ZG#!c#90PCfe PER3J03P6C@GYC@jd)$B*8f9RE@9ZG#!fUl3: |
Changes to mac/tkMacResource.r.
1 2 3 4 5 6 7 8 9 10 11 12 13 | /* * tkMacResources.r -- * * This file creates resources for use in a simple shell. * This is designed to be an example of using the Tcl/Tk * libraries in a Macintosh Application. * * Copyright (c) 1993-1994 Lockheed Missle & Space Company, AI Center * Copyright (c) 1995-1997 Sun Microsystems, Inc. * * See the file "license.terms" for information on usage and redistribution * of this file, and for a DISCLAIMER OF ALL WARRANTIES. * | | < < | | < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < | | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 | /* * tkMacResources.r -- * * This file creates resources for use in a simple shell. * This is designed to be an example of using the Tcl/Tk * libraries in a Macintosh Application. * * Copyright (c) 1993-1994 Lockheed Missle & Space Company, AI Center * Copyright (c) 1995-1997 Sun Microsystems, Inc. * * See the file "license.terms" for information on usage and redistribution * of this file, and for a DISCLAIMER OF ALL WARRANTIES. * * RCS: @(#) $Id: tkMacResource.r,v 1.6.8.2 2002/06/10 05:38:25 wolfsuit Exp $ */ /* * We define SystemSevenOrLater so that our dialogs may use the * auto center feature. */ #define SystemSevenOrLater 1 #include <Types.r> #include <SysTypes.r> /* * The folowing include and defines help construct * the version string for Tcl. */ #define RESOURCE_INCLUDED #include "tcl.h" #include "tk.h" /* * The mechanisim below loads Tcl source into the resource fork of the * application. The example below creates a TEXT resource named * "Init" from the file "init.tcl". This allows applications to use * Tcl to define the behavior of the application without having to * require some predetermined file structure - all needed Tcl "files" * are located within the application. To source a file for the * resource fork the source command has been modified to support * sourcing from resources. In the below case "source -rsrc {Init}" * will load the TEXT resource named "Init". */ #ifndef TCLTK_NO_LIBRARY_TEXT_RESOURCES #include "tkMacTclCode.r" #endif /* * The following two resources define the default "About Box" for Mac Tk. * This dialog appears if the "About Tk..." menu item is selected from * the Apple menu. This dialog may be overridden by defining a Tcl procedure * with the name of "tkAboutDialog". If this procedure is defined the * default dialog will not be shown and the Tcl procedure is expected to |
︙ | ︙ |
Changes to mac/tkMacWm.c.
1 2 3 4 5 6 7 8 9 10 11 12 13 | /* * tkMacWm.c -- * * This module takes care of the interactions between a Tk-based * application and the window manager. Among other things, it * implements the "wm" command and passes geometry information * to the window manager. * * Copyright (c) 1994-1997 Sun Microsystems, Inc. * * See the file "license.terms" for information on usage and redistribution * of this file, and for a DISCLAIMER OF ALL WARRANTIES. * | | | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | /* * tkMacWm.c -- * * This module takes care of the interactions between a Tk-based * application and the window manager. Among other things, it * implements the "wm" command and passes geometry information * to the window manager. * * Copyright (c) 1994-1997 Sun Microsystems, Inc. * * See the file "license.terms" for information on usage and redistribution * of this file, and for a DISCLAIMER OF ALL WARRANTIES. * * RCS: @(#) $Id: tkMacWm.c,v 1.11.2.2 2002/06/10 05:38:25 wolfsuit Exp $ */ #include <Gestalt.h> #include <QDOffscreen.h> #include <Windows.h> #include <ToolUtils.h> |
︙ | ︙ | |||
1555 1556 1557 1558 1559 1560 1561 | } else if ((c == 's') && (strncmp(argv[1], "stackorder", length) == 0) && (length >= 2)) { TkWindow **windows, **window_ptr; if ((argc != 3) && (argc != 5)) { Tcl_AppendResult(interp, "wrong # arguments: must be \"", argv[0], | | | 1555 1556 1557 1558 1559 1560 1561 1562 1563 1564 1565 1566 1567 1568 1569 | } else if ((c == 's') && (strncmp(argv[1], "stackorder", length) == 0) && (length >= 2)) { TkWindow **windows, **window_ptr; if ((argc != 3) && (argc != 5)) { Tcl_AppendResult(interp, "wrong # arguments: must be \"", argv[0], " stackorder window ?isabove|isbelow window?\"", (char *) NULL); return TCL_ERROR; } if (argc == 3) { windows = TkWmStackorderToplevel(winPtr); if (windows == NULL) { |
︙ | ︙ | |||
1740 1741 1742 1743 1744 1745 1746 1747 1748 1749 1750 1751 1752 1753 | if (!(wmPtr->flags & WM_NEVER_MAPPED) && !Tk_IsEmbedded(winPtr)) { TkSetWMName(winPtr, wmPtr->titleUid); } } } else if ((c == 't') && (strncmp(argv[1], "transient", length) == 0) && (length >= 3)) { Tk_Window master; if ((argc != 3) && (argc != 4)) { Tcl_AppendResult(interp, "wrong # arguments: must be \"", argv[0], " transient window ?master?\"", (char *) NULL); return TCL_ERROR; } if (argc == 3) { | > | 1740 1741 1742 1743 1744 1745 1746 1747 1748 1749 1750 1751 1752 1753 1754 | if (!(wmPtr->flags & WM_NEVER_MAPPED) && !Tk_IsEmbedded(winPtr)) { TkSetWMName(winPtr, wmPtr->titleUid); } } } else if ((c == 't') && (strncmp(argv[1], "transient", length) == 0) && (length >= 3)) { Tk_Window master; WmInfo *wmPtr2; if ((argc != 3) && (argc != 4)) { Tcl_AppendResult(interp, "wrong # arguments: must be \"", argv[0], " transient window ?master?\"", (char *) NULL); return TCL_ERROR; } if (argc == 3) { |
︙ | ︙ | |||
1765 1766 1767 1768 1769 1770 1771 1772 1773 1774 1775 1776 1777 1778 | wmPtr->style = documentProc; } else { master = Tk_NameToWindow(interp, argv[3], tkwin); if (master == NULL) { return TCL_ERROR; } Tk_MakeWindowExist(master); wmPtr->master = Tk_WindowId(master); wmPtr->masterWindowName = ckalloc((unsigned) (strlen(argv[3])+1)); strcpy(wmPtr->masterWindowName, argv[3]); wmPtr->style = plainDBox; } } else if ((c == 'w') && (strncmp(argv[1], "withdraw", length) == 0)) { if (argc != 3) { | > > > > > > > > > > > > > > > > > > > | 1766 1767 1768 1769 1770 1771 1772 1773 1774 1775 1776 1777 1778 1779 1780 1781 1782 1783 1784 1785 1786 1787 1788 1789 1790 1791 1792 1793 1794 1795 1796 1797 1798 | wmPtr->style = documentProc; } else { master = Tk_NameToWindow(interp, argv[3], tkwin); if (master == NULL) { return TCL_ERROR; } Tk_MakeWindowExist(master); if (wmPtr->iconFor != NULL) { Tcl_AppendResult(interp, "can't make \"", argv[2], "\" a transient: it is an icon for ", Tk_PathName(wmPtr->iconFor), (char *) NULL); return TCL_ERROR; } wmPtr2 = ((TkWindow *) master)->wmInfoPtr; if (wmPtr2->iconFor != NULL) { Tcl_AppendResult(interp, "can't make \"", argv[3], "\" a master: it is an icon for ", Tk_PathName(wmPtr2->iconFor), (char *) NULL); return TCL_ERROR; } wmPtr->master = Tk_WindowId(master); wmPtr->masterWindowName = ckalloc((unsigned) (strlen(argv[3])+1)); strcpy(wmPtr->masterWindowName, argv[3]); wmPtr->style = plainDBox; } } else if ((c == 'w') && (strncmp(argv[1], "withdraw", length) == 0)) { if (argc != 3) { |
︙ | ︙ | |||
3043 3044 3045 3046 3047 3048 3049 | Tcl_HashTable *table; /* Maps mac window to TkWindow */ { TkWindow *childPtr; Tcl_HashEntry *hPtr; WindowPeek wrapper; int newEntry; | | > | 3063 3064 3065 3066 3067 3068 3069 3070 3071 3072 3073 3074 3075 3076 3077 3078 | Tcl_HashTable *table; /* Maps mac window to TkWindow */ { TkWindow *childPtr; Tcl_HashEntry *hPtr; WindowPeek wrapper; int newEntry; if (Tk_IsMapped(winPtr) && Tk_IsTopLevel(winPtr) && !Tk_IsEmbedded(winPtr)) { wrapper = (WindowPeek) TkMacGetDrawablePort(winPtr->window); hPtr = Tcl_CreateHashEntry(table, (char *) wrapper, &newEntry); Tcl_SetHashValue(hPtr, winPtr); } |
︙ | ︙ |
Changes to mac/tkMacXStubs.c.
1 2 3 4 5 6 7 8 9 10 11 12 13 | /* * tkMacXStubs.c -- * * This file contains most of the X calls called by Tk. Many of * these calls are just stubs and either don't make sense on the * Macintosh or thier implamentation just doesn't do anything. Other * calls will eventually be moved into other files. * * Copyright (c) 1995-1997 Sun Microsystems, Inc. * * See the file "license.terms" for information on usage and redistribution * of this file, and for a DISCLAIMER OF ALL WARRANTIES. * | | | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | /* * tkMacXStubs.c -- * * This file contains most of the X calls called by Tk. Many of * these calls are just stubs and either don't make sense on the * Macintosh or thier implamentation just doesn't do anything. Other * calls will eventually be moved into other files. * * Copyright (c) 1995-1997 Sun Microsystems, Inc. * * See the file "license.terms" for information on usage and redistribution * of this file, and for a DISCLAIMER OF ALL WARRANTIES. * * RCS: @(#) $Id: tkMacXStubs.c,v 1.10.8.2 2002/06/10 05:38:26 wolfsuit Exp $ */ #include "tkInt.h" #include <X.h> #include <Xlib.h> #include <stdio.h> #include <tcl.h> |
︙ | ︙ | |||
102 103 104 105 106 107 108 109 110 111 112 113 114 115 | } else { return NULL; } } graphicsDevice = GetMainDevice(); display = (Display *) ckalloc(sizeof(Display)); display->resource_alloc = MacXIdAlloc; screen = (Screen *) ckalloc(sizeof(Screen) * 2); display->default_screen = 0; display->request = 0; display->nscreens = 1; display->screens = screen; display->display_name = macScreenName; | > | 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 | } else { return NULL; } } graphicsDevice = GetMainDevice(); display = (Display *) ckalloc(sizeof(Display)); memset(display, 0, sizeof(Display)); display->resource_alloc = MacXIdAlloc; screen = (Screen *) ckalloc(sizeof(Screen) * 2); display->default_screen = 0; display->request = 0; display->nscreens = 1; display->screens = screen; display->display_name = macScreenName; |
︙ | ︙ | |||
134 135 136 137 138 139 140 141 142 143 144 145 146 147 | screen->root_visual->red_mask = 0x00FF0000; screen->root_visual->green_mask = 0x0000FF00; screen->root_visual->blue_mask = 0x000000FF; screen->root_visual->bits_per_rgb = 24; screen->root_visual->map_entries = 2 ^ 8; gMacDisplay = (TkDisplay *) ckalloc(sizeof(TkDisplay)); gMacDisplay->display = display; return gMacDisplay; } /* *---------------------------------------------------------------------- * | > | 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 | screen->root_visual->red_mask = 0x00FF0000; screen->root_visual->green_mask = 0x0000FF00; screen->root_visual->blue_mask = 0x000000FF; screen->root_visual->bits_per_rgb = 24; screen->root_visual->map_entries = 2 ^ 8; gMacDisplay = (TkDisplay *) ckalloc(sizeof(TkDisplay)); memset(gMacDisplay, 0, sizeof(TkDisplay)); gMacDisplay->display = display; return gMacDisplay; } /* *---------------------------------------------------------------------- * |
︙ | ︙ | |||
799 800 801 802 803 804 805 | CONST char *screenName) /* If NULL, use default string. */ { if ((screenName == NULL) || (screenName[0] == '\0')) { screenName = macScreenName; } return screenName; } | > > > > > > > > > > > > > > > > > | 801 802 803 804 805 806 807 808 809 810 811 812 813 814 815 816 817 818 819 820 821 822 823 824 | CONST char *screenName) /* If NULL, use default string. */ { if ((screenName == NULL) || (screenName[0] == '\0')) { screenName = macScreenName; } return screenName; } /* *---------------------------------------------------------------------- * * Tk_SetCaretPos -- * * This indicates the cursor position to Tk. This is not used * on the Mac currently. * *---------------------------------------------------------------------- */ void Tk_SetCaretPos(Tk_Window tkwin, int x, int y, int height) { return; } |
Changes to macosx/Wish.pbproj/jingham.pbxuser.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | // !$*UTF8*$! { F50D961501961F0201DC9062 = { fileReference = F5375551016C376E01DC9062; isa = PBXFileBreakpoint; lineNumber = 902; state = 2; }; F537552A016C352C01DC9062 = { activeBuildStyle = F537552C016C352C01DC9062; activeTarget = F53756A0016C4DD401DC9062; addToTargets = ( F53755DF016C38D201DC9062, F53756A0016C4DD401DC9062, ); breakpoints = ( F5B2CDC10175829501DC9062, | > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | // !$*UTF8*$! { F50D961501961F0201DC9062 = { fileReference = F5375551016C376E01DC9062; isa = PBXFileBreakpoint; lineNumber = 902; state = 2; }; F537552A016C352C01DC9062 = { activeBuildStyle = F537552C016C352C01DC9062; activeExecutable = F53756AB016C4DD401DC9062; activeTarget = F53756A0016C4DD401DC9062; addToTargets = ( F53755DF016C38D201DC9062, F53756A0016C4DD401DC9062, ); breakpoints = ( F5B2CDC10175829501DC9062, |
︙ | ︙ | |||
29 30 31 32 33 34 35 36 | F58907C5018DD1C301DC9062, F50D961501961F0201DC9062, F566083B0197283B01DC9062, F566083C0197823801DC9062, F5A5146F01D05DC201DC9062, F5A5147001D0758C01DC9062, F5A852D6020F6C6C01DC9062, ); | > > > > > < > > > < > > | > > > | > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | > > > > > > > > | > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | > > > > > > > > > > > > | > > > > > > > > > > > > > > | > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | | | | > > > > > > > > | | > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | | > > > > > > > > > | | > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | > > > > > > > > > > > > | | | < | > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | > > > > > > > > > > > > > > > > > > > > > > > > > > | > > > > > > > > > | > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | | | | | > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | > > > > > > > > > > > > > > > > > | > > > > > > > > > | > > > > > > > > > > > > > > > > > > | > > > > > > > > > > > > > > > > > > > > > > > | | | | > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | > > > > > > | | > > > > > > > > | | > > | | > > > > > > | | > > > > > > > > > > > > > > > > > | > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | | | > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | > > > > > > | | | | > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | | > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | | > > | < < < < | < < < < | | | < > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | | 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557 558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 574 575 576 577 578 579 580 581 582 583 584 585 586 587 588 589 590 591 592 593 594 595 596 597 598 599 600 601 602 603 604 605 606 607 608 609 610 611 612 613 614 615 616 617 618 619 620 621 622 623 624 625 626 627 628 629 630 631 632 633 634 635 636 637 638 639 640 641 642 643 644 645 646 647 648 649 650 651 652 653 654 655 656 657 658 659 660 661 662 663 664 665 666 667 668 669 670 671 672 673 674 675 676 677 678 679 680 681 682 683 684 685 686 687 688 689 690 691 692 693 694 695 696 697 698 699 700 701 702 703 704 705 706 707 708 709 710 711 712 713 714 715 716 717 718 719 720 721 722 723 724 725 726 727 728 729 730 731 732 733 734 735 736 737 738 739 740 741 742 743 744 745 746 747 748 749 750 751 752 753 754 755 756 757 758 759 760 761 762 763 764 765 766 767 768 769 770 771 772 773 774 775 776 777 778 779 780 781 782 783 784 785 786 787 788 789 790 791 792 793 794 795 796 797 798 799 800 801 802 803 804 805 806 807 808 809 810 811 812 813 814 815 816 817 818 819 820 821 822 823 824 825 826 827 828 829 830 831 832 833 834 835 836 837 838 839 840 841 842 843 844 845 846 847 848 849 850 851 852 853 854 855 856 857 858 859 860 861 862 863 864 865 866 867 868 869 870 871 872 873 874 875 876 877 878 879 880 881 882 883 884 885 886 887 888 889 890 891 892 893 894 895 896 897 898 899 900 901 902 903 904 905 906 907 908 909 910 911 912 913 914 915 916 917 918 919 920 921 922 923 924 925 926 927 928 929 930 931 932 933 934 935 936 937 938 939 940 941 942 943 944 945 946 947 948 949 950 951 952 953 954 955 956 957 958 959 960 961 962 963 964 965 966 967 968 969 970 971 972 973 974 975 976 977 978 979 980 981 982 983 984 985 986 987 988 989 990 991 992 993 994 995 996 997 998 999 1000 1001 1002 1003 1004 1005 1006 1007 1008 1009 1010 1011 1012 1013 1014 1015 1016 1017 1018 1019 1020 1021 1022 1023 1024 1025 1026 1027 1028 1029 1030 1031 1032 1033 1034 1035 1036 1037 1038 1039 1040 1041 1042 1043 1044 1045 1046 1047 1048 1049 1050 1051 1052 1053 1054 1055 1056 1057 1058 1059 1060 1061 1062 1063 1064 1065 1066 1067 1068 1069 1070 1071 1072 1073 1074 1075 1076 1077 1078 1079 1080 1081 1082 1083 1084 1085 1086 1087 1088 1089 1090 1091 1092 1093 1094 1095 1096 1097 1098 1099 1100 1101 1102 1103 1104 1105 1106 1107 1108 1109 1110 1111 1112 1113 1114 1115 1116 1117 1118 1119 1120 1121 1122 1123 1124 1125 1126 1127 1128 1129 1130 1131 1132 1133 1134 1135 1136 1137 1138 1139 1140 1141 1142 1143 1144 1145 1146 1147 1148 1149 1150 1151 1152 1153 1154 1155 1156 1157 1158 1159 1160 1161 1162 1163 1164 1165 1166 1167 1168 1169 1170 1171 1172 1173 1174 1175 1176 1177 1178 1179 1180 1181 1182 1183 1184 1185 1186 1187 1188 1189 1190 1191 1192 1193 1194 1195 1196 1197 1198 1199 1200 1201 1202 1203 1204 1205 1206 1207 1208 1209 1210 1211 1212 1213 1214 1215 1216 1217 1218 1219 1220 1221 1222 1223 1224 1225 1226 1227 1228 1229 1230 1231 1232 1233 1234 1235 1236 1237 1238 1239 1240 1241 1242 1243 1244 1245 1246 1247 1248 1249 1250 1251 1252 1253 1254 1255 1256 1257 1258 1259 1260 1261 1262 1263 1264 1265 1266 1267 1268 1269 1270 1271 1272 1273 1274 1275 1276 1277 1278 1279 1280 1281 1282 1283 1284 1285 1286 1287 1288 1289 1290 1291 1292 1293 1294 1295 1296 1297 1298 1299 1300 1301 1302 1303 1304 1305 1306 1307 1308 1309 1310 1311 1312 1313 1314 1315 1316 1317 1318 1319 1320 1321 1322 1323 1324 1325 1326 1327 1328 1329 1330 1331 1332 1333 1334 1335 1336 1337 1338 1339 1340 1341 1342 1343 1344 1345 1346 1347 1348 1349 1350 1351 1352 1353 1354 1355 1356 1357 1358 1359 1360 1361 1362 1363 1364 1365 1366 1367 1368 1369 1370 1371 1372 1373 1374 1375 1376 1377 1378 1379 1380 1381 1382 1383 1384 1385 1386 1387 1388 1389 1390 1391 1392 1393 1394 1395 1396 1397 1398 1399 1400 1401 1402 1403 1404 1405 1406 1407 1408 1409 1410 1411 1412 1413 1414 1415 1416 1417 1418 1419 1420 1421 1422 1423 1424 1425 1426 1427 1428 1429 1430 1431 1432 1433 1434 1435 1436 1437 1438 1439 1440 1441 1442 1443 1444 1445 1446 1447 1448 1449 1450 1451 1452 1453 1454 1455 1456 1457 1458 1459 1460 1461 1462 1463 1464 1465 1466 1467 1468 1469 1470 1471 1472 1473 1474 1475 1476 1477 1478 1479 1480 1481 1482 1483 1484 1485 1486 1487 1488 1489 1490 1491 1492 1493 1494 1495 1496 1497 1498 1499 1500 1501 1502 1503 1504 1505 1506 1507 1508 1509 1510 1511 1512 1513 1514 1515 1516 1517 1518 1519 1520 1521 1522 1523 1524 1525 1526 1527 1528 1529 1530 1531 1532 1533 1534 1535 1536 1537 1538 1539 1540 1541 1542 1543 1544 1545 1546 1547 1548 1549 1550 1551 1552 1553 1554 1555 1556 1557 1558 1559 1560 1561 1562 1563 1564 1565 1566 1567 1568 1569 1570 1571 1572 1573 1574 1575 1576 1577 1578 1579 1580 1581 1582 1583 1584 1585 1586 1587 1588 1589 1590 1591 1592 1593 1594 1595 1596 1597 1598 1599 1600 1601 1602 1603 1604 1605 1606 1607 1608 1609 1610 1611 1612 1613 1614 1615 1616 1617 1618 1619 1620 1621 1622 1623 1624 1625 1626 1627 1628 1629 1630 1631 1632 1633 1634 1635 1636 1637 1638 1639 1640 1641 1642 1643 1644 1645 1646 1647 1648 1649 1650 1651 | F58907C5018DD1C301DC9062, F50D961501961F0201DC9062, F566083B0197283B01DC9062, F566083C0197823801DC9062, F5A5146F01D05DC201DC9062, F5A5147001D0758C01DC9062, F5A852D6020F6C6C01DC9062, F5A439C0029B609C01DC9064, F5A439C2029B60ED01DC9064, F5A439CA029B620901DC9064, F55BC4B602B2DFB901DC9062, F5978FD602B3190701DC9062, ); executables = ( F53756AB016C4DD401DC9062, ); perUserDictionary = { PBXPerProjectTemplateStateSaveDate = 45284733; "PBXTemplateGeometry-F5314676015831810DCA290F" = { ContentSize = "{716, 618}"; LeftSlideOut = { Collapsed = NO; Frame = "{{0, 23}, {716, 595}}"; Split0 = { ActiveTab = 2; Collapsed = NO; Frame = "{{0, 0}, {716, 595}}"; Split0 = { Frame = "{{0, 249}, {716, 346}}"; }; SplitCount = 1; Tab0 = { Debugger = { Collapsed = NO; Frame = "{{0, 0}, {952, 321}}"; Split0 = { Frame = "{{0, 24}, {952, 297}}"; Split0 = { Frame = "{{0, 0}, {468, 297}}"; }; Split1 = { DebugVariablesTableConfiguration = ( Name, 126.803, Value, 150.074, Summary, 172.123, ); Frame = "{{477, 0}, {475, 297}}"; }; SplitCount = 2; }; SplitCount = 1; Tab0 = { Frame = "{{0, 0}, {100, 50}}"; }; Tab1 = { Frame = "{{0, 0}, {100, 50}}"; }; TabCount = 2; TabsVisible = YES; }; Frame = "{{0, 0}, {952, 321}}"; LauncherConfigVersion = 7; }; Tab1 = { Frame = "{{0, 0}, {781, 452}}"; LauncherConfigVersion = 3; Runner = { Frame = "{{0, 0}, {781, 452}}"; }; }; Tab2 = { BuildMessageFrame = "{{0, 0}, {718, 85}}"; BuildTranscriptFrame = "{{0, 94}, {718, 151}}"; Frame = "{{0, 0}, {716, 243}}"; }; Tab3 = { Frame = "{{0, 0}, {612, 295}}"; }; TabCount = 4; TabsVisible = NO; }; SplitCount = 1; Tab0 = { Frame = "{{0, 0}, {300, 533}}"; GroupTreeTableConfiguration = ( TargetStatusColumn, 18, MainColumn, 267, ); }; Tab1 = { ClassesFrame = "{{0, 0}, {280, 398}}"; ClassesTreeTableConfiguration = ( PBXBookColumnIdentifier, 20, PBXClassColumnIdentifier, 237, ); Frame = "{{0, 0}, {278, 659}}"; MembersFrame = "{{0, 407}, {280, 252}}"; MembersTreeTableConfiguration = ( PBXBookColumnIdentifier, 20, PBXMethodColumnIdentifier, 236, ); }; Tab2 = { Frame = "{{0, 0}, {200, 100}}"; }; Tab3 = { Frame = "{{0, 0}, {200, 100}}"; TargetTableConfiguration = ( ActiveObject, 16, ObjectNames, 202.296, ); }; Tab4 = { BreakpointsTreeTableConfiguration = ( breakpointColumn, 197, enabledColumn, 31, ); Frame = "{{0, 0}, {250, 100}}"; }; TabCount = 5; TabsVisible = NO; }; StatusViewVisible = YES; Template = F5314676015831810DCA290F; ToolbarVisible = YES; WindowLocation = "{217, 66}"; }; "PBXTemplateGeometry-F5CA7ECB015C094F0DCA290F" = { ContentSize = "{668, 621}"; LeftSlideOut = { Collapsed = NO; Frame = "{{0, 0}, {668, 621}}"; Split0 = { Collapsed = NO; Frame = "{{0, 0}, {668, 621}}"; Split0 = { Frame = "{{0, 0}, {668, 621}}"; }; SplitCount = 1; Tab0 = { Debugger = { Collapsed = NO; Frame = "{{0, 0}, {484, 208}}"; Split0 = { Frame = "{{0, 24}, {484, 184}}"; Split0 = { Frame = "{{0, 0}, {236, 184}}"; }; Split1 = { DebugVariablesTableConfiguration = ( Name, 123, Value, 85, Summary, 62.123, ); Frame = "{{245, 0}, {239, 184}}"; }; SplitCount = 2; }; SplitCount = 1; Tab0 = { Frame = "{{0, 0}, {100, 50}}"; }; Tab1 = { Frame = "{{0, 0}, {100, 50}}"; }; TabCount = 2; TabsVisible = YES; }; Frame = "{{0, 0}, {484, 208}}"; LauncherConfigVersion = 7; }; Tab1 = { Frame = "{{0, 0}, {664, 208}}"; LauncherConfigVersion = 3; Runner = { Frame = "{{0, 0}, {664, 208}}"; }; }; Tab2 = { BuildMessageFrame = "{{0, 0}, {666, 43}}"; BuildTranscriptFrame = "{{0, 52}, {666, 0}}"; Frame = "{{0, 0}, {664, 50}}"; }; Tab3 = { Frame = "{{0, 0}, {612, 295}}"; }; TabCount = 4; TabsVisible = NO; }; SplitCount = 1; Tab0 = { Frame = "{{0, 0}, {313, 531}}"; GroupTreeTableConfiguration = ( TargetStatusColumn, 18, MainColumn, 280, ); }; Tab1 = { ClassesFrame = "{{0, 0}, {280, 398}}"; ClassesTreeTableConfiguration = ( PBXBookColumnIdentifier, 20, PBXClassColumnIdentifier, 237, ); Frame = "{{0, 0}, {278, 659}}"; MembersFrame = "{{0, 407}, {280, 252}}"; MembersTreeTableConfiguration = ( PBXBookColumnIdentifier, 20, PBXMethodColumnIdentifier, 236, ); }; Tab2 = { Frame = "{{0, 0}, {200, 100}}"; }; Tab3 = { Frame = "{{0, 0}, {200, 557}}"; TargetTableConfiguration = ( ActiveObject, 16, ObjectNames, 202.296, ); }; Tab4 = { BreakpointsTreeTableConfiguration = ( breakpointColumn, 197, enabledColumn, 31, ); Frame = "{{0, 0}, {250, 100}}"; }; TabCount = 5; TabsVisible = NO; }; StatusViewVisible = NO; Template = F5CA7ECB015C094F0DCA290F; ToolbarVisible = NO; WindowLocation = "{48, 103}"; }; "PBXTemplateGeometry-F5CA7ECC015C09990DCA290F" = { ContentSize = "{773, 558}"; LeftSlideOut = { ActiveTab = 3; Collapsed = NO; Frame = "{{0, 23}, {773, 535}}"; Split0 = { ActiveTab = 0; Collapsed = NO; Frame = "{{224, 0}, {549, 535}}"; Split0 = { Frame = "{{0, 156}, {549, 379}}"; }; SplitCount = 1; Tab0 = { Debugger = { Collapsed = NO; Frame = "{{0, 0}, {549, 150}}"; Split0 = { Frame = "{{0, 24}, {549, 126}}"; Split0 = { Frame = "{{0, 0}, {267, 126}}"; }; Split1 = { DebugVariablesTableConfiguration = ( Name, 93.80298, Value, 116.074, Summary, 62.123, ); Frame = "{{276, 0}, {273, 126}}"; }; SplitCount = 2; }; SplitCount = 1; Tab0 = { Frame = "{{0, 0}, {100, 50}}"; }; Tab1 = { Frame = "{{0, 0}, {549, 243}}"; }; TabCount = 2; TabsVisible = YES; }; Frame = "{{0, 0}, {549, 150}}"; LauncherConfigVersion = 7; }; Tab1 = { Frame = "{{0, 0}, {664, 208}}"; LauncherConfigVersion = 3; Runner = { Frame = "{{0, 0}, {664, 208}}"; }; }; Tab2 = { BuildMessageFrame = "{{0, 0}, {666, 43}}"; BuildTranscriptFrame = "{{0, 52}, {666, 0}}"; Frame = "{{0, 0}, {664, 50}}"; }; Tab3 = { Frame = "{{0, 0}, {612, 295}}"; }; TabCount = 4; TabsVisible = NO; }; SplitCount = 1; Tab0 = { Frame = "{{0, 0}, {313, 531}}"; GroupTreeTableConfiguration = ( SCMStatusColumn, 22, TargetStatusColumn, 18, MainColumn, 258, ); }; Tab1 = { ClassesFrame = "{{0, 0}, {280, 398}}"; ClassesTreeTableConfiguration = ( PBXBookColumnIdentifier, 20, PBXClassColumnIdentifier, 237, ); Frame = "{{0, 0}, {278, 659}}"; MembersFrame = "{{0, 407}, {280, 252}}"; MembersTreeTableConfiguration = ( PBXBookColumnIdentifier, 20, PBXMethodColumnIdentifier, 236, ); }; Tab2 = { Frame = "{{0, 0}, {200, 100}}"; }; Tab3 = { Frame = "{{0, 0}, {200, 535}}"; TargetTableConfiguration = ( ActiveObject, 16, ObjectNames, 202.296, ); }; Tab4 = { BreakpointsTreeTableConfiguration = ( breakpointColumn, 197, enabledColumn, 31, ); Frame = "{{0, 0}, {250, 100}}"; }; TabCount = 5; TabsVisible = YES; }; StatusViewVisible = YES; Template = F5CA7ECC015C09990DCA290F; ToolbarVisible = YES; WindowLocation = "{148, 126}"; }; PBXWorkspaceContents = ( { LeftSlideOut = { Split0 = { Split0 = { NavContent0 = { bookmark = F55BC4C802B2E09101DC9062; history = ( F5A439CE029B6B5501DC9064, F5A439D0029B6B5501DC9064, F5A439D1029B6B5501DC9064, F5A439D2029B6B5501DC9064, F5A439D3029B6B5501DC9064, F5A439D4029B6B5501DC9064, F5A439D5029B6B5501DC9064, F5A439D6029B6B5501DC9064, F5A439D7029B6B5501DC9064, F5BE671E029B6FEE01DC9064, F55BC4B902B2E09101DC9062, F55BC4BA02B2E09101DC9062, F55BC4BB02B2E09101DC9062, F55BC4BC02B2E09101DC9062, F55BC4BD02B2E09101DC9062, F55BC4BE02B2E09101DC9062, ); prevStack = ( F5A439D9029B6B5501DC9064, F5A439DA029B6B5501DC9064, F5A439DB029B6B5501DC9064, F5A439DE029B6B5501DC9064, F5A439DF029B6B5501DC9064, F5A439E0029B6B5501DC9064, F5A439E1029B6B5501DC9064, F5A439E2029B6B5501DC9064, F5A439E3029B6B5501DC9064, F5A439E4029B6B5501DC9064, F5A439E5029B6B5501DC9064, F5A439E6029B6B5501DC9064, F5A439E7029B6B5501DC9064, F5A439E8029B6B5501DC9064, F5BE671F029B6FEE01DC9064, F55BC4BF02B2E09101DC9062, F55BC4C002B2E09101DC9062, F55BC4C102B2E09101DC9062, F55BC4C202B2E09101DC9062, F55BC4C302B2E09101DC9062, F55BC4C402B2E09101DC9062, F55BC4C502B2E09101DC9062, F55BC4C602B2E09101DC9062, F55BC4C702B2E09101DC9062, ); }; NavCount = 1; NavGeometry0 = { Frame = "{{0, 0}, {645, 651}}"; NavBarVisible = YES; }; }; SplitCount = 1; Tab0 = { Debugger = { Split0 = { SplitCount = 2; }; SplitCount = 1; TabCount = 2; }; LauncherConfigVersion = 7; }; Tab1 = { LauncherConfigVersion = 3; Runner = { }; }; TabCount = 4; }; SplitCount = 1; Tab1 = { OptionsSetName = "Default Options"; }; Tab3 = { SplitCount = 2; }; TabCount = 6; }; }, { LeftSlideOut = { Split0 = { Split0 = { NavContent0 = { bookmark = F55BC4DE02B2E09101DC9062; history = ( F55BC4C902B2E09101DC9062, F55BC4CA02B2E09101DC9062, F55BC4CB02B2E09101DC9062, F55BC4CC02B2E09101DC9062, F55BC4CD02B2E09101DC9062, F55BC4CE02B2E09101DC9062, F55BC4CF02B2E09101DC9062, F55BC4D002B2E09101DC9062, F55BC4D102B2E09101DC9062, F55BC4D202B2E09101DC9062, F55BC4D302B2E09101DC9062, ); prevStack = ( F55BC4D402B2E09101DC9062, F55BC4D502B2E09101DC9062, F55BC4D602B2E09101DC9062, F55BC4D702B2E09101DC9062, F55BC4D802B2E09101DC9062, F55BC4D902B2E09101DC9062, F55BC4DA02B2E09101DC9062, F55BC4DB02B2E09101DC9062, F55BC4DC02B2E09101DC9062, F55BC4DD02B2E09101DC9062, ); }; NavCount = 1; NavGeometry0 = { Frame = "{{0, 0}, {716, 346}}"; NavBarVisible = YES; }; }; SplitCount = 1; Tab0 = { Debugger = { Split0 = { SplitCount = 2; }; SplitCount = 1; TabCount = 2; }; LauncherConfigVersion = 7; }; Tab1 = { LauncherConfigVersion = 3; Runner = { }; }; TabCount = 4; }; SplitCount = 1; Tab1 = { OptionsSetName = "Default Options"; }; Tab3 = { SplitCount = 2; }; TabCount = 6; }; }, { LeftSlideOut = { Split0 = { Split0 = { NavContent0 = { bookmark = F55BC4E702B2E09101DC9062; history = ( F55BC4DF02B2E09101DC9062, F55BC4E002B2E09101DC9062, F55BC4E102B2E09101DC9062, ); prevStack = ( F55BC4E202B2E09101DC9062, F55BC4E302B2E09101DC9062, F55BC4E402B2E09101DC9062, F55BC4E502B2E09101DC9062, F55BC4E602B2E09101DC9062, ); }; NavCount = 1; NavGeometry0 = { Frame = "{{0, 0}, {749, 262}}"; NavBarVisible = YES; }; }; SplitCount = 1; Tab0 = { Debugger = { Split0 = { SplitCount = 2; }; SplitCount = 1; TabCount = 2; }; LauncherConfigVersion = 7; }; Tab1 = { LauncherConfigVersion = 3; Runner = { }; }; TabCount = 4; }; SplitCount = 1; Tab1 = { OptionsSetName = "Default Options"; }; Tab3 = { SplitCount = 2; }; TabCount = 6; }; }, ); PBXWorkspaceGeometries = ( { ContentSize = "{929, 674}"; LeftSlideOut = { ActiveTab = 0; Collapsed = NO; Frame = "{{0, 23}, {929, 651}}"; Split0 = { Collapsed = NO; Frame = "{{284, 0}, {645, 651}}"; Split0 = { Frame = "{{0, 0}, {645, 651}}"; }; SplitCount = 1; Tab0 = { Debugger = { Collapsed = NO; Frame = "{{0, 0}, {681, 289}}"; Split0 = { Frame = "{{0, 24}, {681, 265}}"; Split0 = { Frame = "{{0, 0}, {333, 265}}"; }; Split1 = { DebugVariablesTableConfiguration = ( Name, 82.80298, Value, 104.074, Summary, 126.123, ); Frame = "{{342, 0}, {339, 265}}"; }; SplitCount = 2; }; SplitCount = 1; Tab0 = { Frame = "{{0, 0}, {100, 50}}"; }; Tab1 = { Frame = "{{0, 0}, {100, 50}}"; }; TabCount = 2; TabsVisible = YES; }; Frame = "{{0, 0}, {681, 289}}"; LauncherConfigVersion = 7; }; Tab1 = { Frame = "{{0, 0}, {681, 120}}"; LauncherConfigVersion = 3; Runner = { Frame = "{{0, 0}, {681, 120}}"; }; }; Tab2 = { BuildMessageFrame = "{{0, 0}, {683, 127}}"; BuildTranscriptFrame = "{{0, 136}, {683, 100}}"; Frame = "{{0, 0}, {681, 234}}"; }; Tab3 = { Frame = "{{0, 0}, {681, 238}}"; }; TabCount = 4; TabsVisible = NO; }; SplitCount = 1; Tab0 = { Frame = "{{0, 0}, {260, 651}}"; GroupTreeTableConfiguration = ( SCMStatusColumn, 22, TargetStatusColumn, 18, MainColumn, 205, ); }; Tab1 = { ClassesFrame = "{{0, 0}, {250, 333}}"; ClassesTreeTableConfiguration = ( PBXBookColumnIdentifier, 20, PBXClassColumnIdentifier, 207, ); Frame = "{{0, 0}, {248, 554}}"; MembersFrame = "{{0, 342}, {250, 212}}"; MembersTreeTableConfiguration = ( PBXBookColumnIdentifier, 20, PBXMethodColumnIdentifier, 206, ); }; Tab2 = { Frame = "{{0, 0}, {217, 554}}"; }; Tab3 = { Frame = "{{0, 0}, {239, 651}}"; Split0 = { Frame = "{{0, 0}, {239, 317}}"; TargetTreeTableConfiguration = ( ActiveTarget, 16, TargetName, 207, ); }; Split1 = { BuildStyleTreeTableConfiguration = ( IsActive, 16, Name, 208, ); Frame = "{{0, 326}, {239, 325}}"; }; SplitCount = 2; }; Tab4 = { ExecutableTreeTableConfiguration = ( ActiveExecutable, 16, ExecutableName, 217, ); Frame = "{{0, 0}, {250, 554}}"; }; Tab5 = { BreakpointsTreeTableConfiguration = ( breakpointColumn, 197, enabledColumn, 31, ); Frame = "{{0, 0}, {250, 100}}"; }; TabCount = 6; TabsVisible = YES; }; StatusViewVisible = YES; Template = 64ABBB4501FA494900185B06; ToolbarVisible = YES; WindowLocation = "{79, 10}"; }, { ContentSize = "{716, 618}"; LeftSlideOut = { Collapsed = NO; Frame = "{{0, 23}, {716, 595}}"; Split0 = { ActiveTab = 2; Collapsed = NO; Frame = "{{0, 0}, {716, 595}}"; Split0 = { Frame = "{{0, 249}, {716, 346}}"; }; SplitCount = 1; Tab0 = { Debugger = { Collapsed = NO; Frame = "{{0, 0}, {952, 321}}"; Split0 = { Frame = "{{0, 24}, {952, 297}}"; Split0 = { Frame = "{{0, 0}, {468, 297}}"; }; Split1 = { DebugVariablesTableConfiguration = ( Name, 126.803, Value, 150.074, Summary, 172.123, ); Frame = "{{477, 0}, {475, 297}}"; }; SplitCount = 2; }; SplitCount = 1; Tab0 = { Frame = "{{0, 0}, {100, 50}}"; }; Tab1 = { Frame = "{{0, 0}, {100, 50}}"; }; TabCount = 2; TabsVisible = YES; }; Frame = "{{0, 0}, {952, 321}}"; LauncherConfigVersion = 7; }; Tab1 = { Frame = "{{0, 0}, {781, 452}}"; LauncherConfigVersion = 3; Runner = { Frame = "{{0, 0}, {781, 452}}"; }; }; Tab2 = { BuildMessageFrame = "{{0, 0}, {718, 85}}"; BuildTranscriptFrame = "{{0, 94}, {718, 151}}"; Frame = "{{0, 0}, {716, 243}}"; }; Tab3 = { Frame = "{{0, 0}, {612, 295}}"; }; TabCount = 4; TabsVisible = NO; }; SplitCount = 1; Tab0 = { Frame = "{{0, 0}, {300, 533}}"; GroupTreeTableConfiguration = ( SCMStatusColumn, 22, TargetStatusColumn, 18, MainColumn, 245, ); }; Tab1 = { ClassesFrame = "{{0, 0}, {280, 398}}"; ClassesTreeTableConfiguration = ( PBXBookColumnIdentifier, 20, PBXClassColumnIdentifier, 237, ); Frame = "{{0, 0}, {278, 659}}"; MembersFrame = "{{0, 407}, {280, 252}}"; MembersTreeTableConfiguration = ( PBXBookColumnIdentifier, 20, PBXMethodColumnIdentifier, 236, ); }; Tab2 = { Frame = "{{0, 0}, {200, 100}}"; }; Tab3 = { Frame = "{{0, 0}, {200, 100}}"; Split0 = { Frame = "{{0, 0}, {200, 45}}"; TargetTreeTableConfiguration = ( ActiveTarget, 16, TargetName, 168, ); }; Split1 = { BuildStyleTreeTableConfiguration = ( IsActive, 16, Name, 169, ); Frame = "{{0, 54}, {200, 46}}"; }; SplitCount = 2; }; Tab4 = { ExecutableTreeTableConfiguration = ( ActiveExecutable, 16, ExecutableName, 217, ); Frame = "{{0, 0}, {250, 100}}"; }; Tab5 = { BreakpointsTreeTableConfiguration = ( breakpointColumn, 197, enabledColumn, 31, ); Frame = "{{0, 0}, {250, 100}}"; }; TabCount = 6; TabsVisible = NO; }; StatusViewVisible = YES; Template = F5314676015831810DCA290F; ToolbarVisible = YES; WindowLocation = "{17, 66}"; }, { ContentSize = "{773, 558}"; LeftSlideOut = { Collapsed = NO; Frame = "{{0, 23}, {773, 535}}"; Split0 = { ActiveTab = 0; Collapsed = NO; Frame = "{{24, 0}, {749, 535}}"; Split0 = { Frame = "{{0, 273}, {749, 262}}"; }; SplitCount = 1; Tab0 = { Debugger = { ActiveTab = 1; Collapsed = NO; Frame = "{{0, 0}, {749, 267}}"; Split0 = { Frame = "{{0, 268}, {749, -1}}"; Split0 = { Frame = "{{0, 0}, {366, -1}}"; }; Split1 = { DebugVariablesTableConfiguration = ( Name, 93.80298, Value, 116.074, Summary, 138.123, ); Frame = "{{375, 0}, {374, -1}}"; }; SplitCount = 2; }; SplitCount = 1; Tab0 = { Frame = "{{0, 0}, {100, 50}}"; }; Tab1 = { Frame = "{{0, 0}, {749, 244}}"; }; TabCount = 2; TabsVisible = YES; }; Frame = "{{0, 0}, {749, 267}}"; LauncherConfigVersion = 7; }; Tab1 = { Frame = "{{0, 0}, {664, 208}}"; LauncherConfigVersion = 3; Runner = { Frame = "{{0, 0}, {664, 208}}"; }; }; Tab2 = { BuildMessageFrame = "{{0, 0}, {666, 43}}"; BuildTranscriptFrame = "{{0, 52}, {666, 0}}"; Frame = "{{0, 0}, {664, 50}}"; }; Tab3 = { Frame = "{{0, 0}, {612, 295}}"; }; TabCount = 4; TabsVisible = NO; }; SplitCount = 1; Tab0 = { Frame = "{{0, 0}, {313, 531}}"; GroupTreeTableConfiguration = ( SCMStatusColumn, 22, TargetStatusColumn, 18, MainColumn, 258, ); }; Tab1 = { ClassesFrame = "{{0, 0}, {280, 398}}"; ClassesTreeTableConfiguration = ( PBXBookColumnIdentifier, 20, PBXClassColumnIdentifier, 237, ); Frame = "{{0, 0}, {278, 659}}"; MembersFrame = "{{0, 407}, {280, 252}}"; MembersTreeTableConfiguration = ( PBXBookColumnIdentifier, 20, PBXMethodColumnIdentifier, 236, ); }; Tab2 = { Frame = "{{0, 0}, {200, 100}}"; }; Tab3 = { Frame = "{{0, 0}, {200, 557}}"; Split0 = { Frame = "{{0, 0}, {200, 270}}"; TargetTreeTableConfiguration = ( ActiveTarget, 16, TargetName, 168, ); }; Split1 = { BuildStyleTreeTableConfiguration = ( IsActive, 16, Name, 169, ); Frame = "{{0, 279}, {200, 278}}"; }; SplitCount = 2; }; Tab4 = { ExecutableTreeTableConfiguration = ( ActiveExecutable, 16, ExecutableName, 217, ); Frame = "{{0, 0}, {250, 100}}"; }; Tab5 = { BreakpointsTreeTableConfiguration = ( breakpointColumn, 197, enabledColumn, 31, ); Frame = "{{0, 0}, {250, 100}}"; }; TabCount = 6; TabsVisible = YES; }; StatusViewVisible = YES; Template = F5CA7ECC015C09990DCA290F; ToolbarVisible = YES; WindowLocation = "{148, 126}"; }, ); PBXWorkspaceStateSaveDate = 45284733; }; perUserProjectItems = { F55BC4B902B2E09101DC9062 = F55BC4B902B2E09101DC9062; F55BC4BA02B2E09101DC9062 = F55BC4BA02B2E09101DC9062; F55BC4BB02B2E09101DC9062 = F55BC4BB02B2E09101DC9062; F55BC4BC02B2E09101DC9062 = F55BC4BC02B2E09101DC9062; F55BC4BD02B2E09101DC9062 = F55BC4BD02B2E09101DC9062; F55BC4BE02B2E09101DC9062 = F55BC4BE02B2E09101DC9062; F55BC4BF02B2E09101DC9062 = F55BC4BF02B2E09101DC9062; F55BC4C002B2E09101DC9062 = F55BC4C002B2E09101DC9062; F55BC4C102B2E09101DC9062 = F55BC4C102B2E09101DC9062; F55BC4C202B2E09101DC9062 = F55BC4C202B2E09101DC9062; F55BC4C302B2E09101DC9062 = F55BC4C302B2E09101DC9062; F55BC4C402B2E09101DC9062 = F55BC4C402B2E09101DC9062; F55BC4C502B2E09101DC9062 = F55BC4C502B2E09101DC9062; F55BC4C602B2E09101DC9062 = F55BC4C602B2E09101DC9062; F55BC4C702B2E09101DC9062 = F55BC4C702B2E09101DC9062; F55BC4C802B2E09101DC9062 = F55BC4C802B2E09101DC9062; F55BC4C902B2E09101DC9062 = F55BC4C902B2E09101DC9062; F55BC4CA02B2E09101DC9062 = F55BC4CA02B2E09101DC9062; F55BC4CB02B2E09101DC9062 = F55BC4CB02B2E09101DC9062; F55BC4CC02B2E09101DC9062 = F55BC4CC02B2E09101DC9062; F55BC4CD02B2E09101DC9062 = F55BC4CD02B2E09101DC9062; F55BC4CE02B2E09101DC9062 = F55BC4CE02B2E09101DC9062; F55BC4CF02B2E09101DC9062 = F55BC4CF02B2E09101DC9062; F55BC4D002B2E09101DC9062 = F55BC4D002B2E09101DC9062; F55BC4D102B2E09101DC9062 = F55BC4D102B2E09101DC9062; F55BC4D202B2E09101DC9062 = F55BC4D202B2E09101DC9062; F55BC4D302B2E09101DC9062 = F55BC4D302B2E09101DC9062; F55BC4D402B2E09101DC9062 = F55BC4D402B2E09101DC9062; F55BC4D502B2E09101DC9062 = F55BC4D502B2E09101DC9062; F55BC4D602B2E09101DC9062 = F55BC4D602B2E09101DC9062; F55BC4D702B2E09101DC9062 = F55BC4D702B2E09101DC9062; F55BC4D802B2E09101DC9062 = F55BC4D802B2E09101DC9062; F55BC4D902B2E09101DC9062 = F55BC4D902B2E09101DC9062; F55BC4DA02B2E09101DC9062 = F55BC4DA02B2E09101DC9062; F55BC4DB02B2E09101DC9062 = F55BC4DB02B2E09101DC9062; F55BC4DC02B2E09101DC9062 = F55BC4DC02B2E09101DC9062; F55BC4DD02B2E09101DC9062 = F55BC4DD02B2E09101DC9062; F55BC4DE02B2E09101DC9062 = F55BC4DE02B2E09101DC9062; F55BC4DF02B2E09101DC9062 = F55BC4DF02B2E09101DC9062; F55BC4E002B2E09101DC9062 = F55BC4E002B2E09101DC9062; F55BC4E102B2E09101DC9062 = F55BC4E102B2E09101DC9062; F55BC4E202B2E09101DC9062 = F55BC4E202B2E09101DC9062; F55BC4E302B2E09101DC9062 = F55BC4E302B2E09101DC9062; F55BC4E402B2E09101DC9062 = F55BC4E402B2E09101DC9062; F55BC4E502B2E09101DC9062 = F55BC4E502B2E09101DC9062; F55BC4E602B2E09101DC9062 = F55BC4E602B2E09101DC9062; F55BC4E702B2E09101DC9062 = F55BC4E702B2E09101DC9062; F5A439CE029B6B5501DC9064 = F5A439CE029B6B5501DC9064; F5A439D0029B6B5501DC9064 = F5A439D0029B6B5501DC9064; F5A439D1029B6B5501DC9064 = F5A439D1029B6B5501DC9064; F5A439D2029B6B5501DC9064 = F5A439D2029B6B5501DC9064; F5A439D3029B6B5501DC9064 = F5A439D3029B6B5501DC9064; F5A439D4029B6B5501DC9064 = F5A439D4029B6B5501DC9064; F5A439D5029B6B5501DC9064 = F5A439D5029B6B5501DC9064; F5A439D6029B6B5501DC9064 = F5A439D6029B6B5501DC9064; F5A439D7029B6B5501DC9064 = F5A439D7029B6B5501DC9064; F5A439D9029B6B5501DC9064 = F5A439D9029B6B5501DC9064; F5A439DA029B6B5501DC9064 = F5A439DA029B6B5501DC9064; F5A439DB029B6B5501DC9064 = F5A439DB029B6B5501DC9064; F5A439DE029B6B5501DC9064 = F5A439DE029B6B5501DC9064; F5A439DF029B6B5501DC9064 = F5A439DF029B6B5501DC9064; F5A439E0029B6B5501DC9064 = F5A439E0029B6B5501DC9064; F5A439E1029B6B5501DC9064 = F5A439E1029B6B5501DC9064; F5A439E2029B6B5501DC9064 = F5A439E2029B6B5501DC9064; F5A439E3029B6B5501DC9064 = F5A439E3029B6B5501DC9064; F5A439E4029B6B5501DC9064 = F5A439E4029B6B5501DC9064; F5A439E5029B6B5501DC9064 = F5A439E5029B6B5501DC9064; F5A439E6029B6B5501DC9064 = F5A439E6029B6B5501DC9064; F5A439E7029B6B5501DC9064 = F5A439E7029B6B5501DC9064; F5A439E8029B6B5501DC9064 = F5A439E8029B6B5501DC9064; F5BE671E029B6FEE01DC9064 = F5BE671E029B6FEE01DC9064; F5BE671F029B6FEE01DC9064 = F5BE671F029B6FEE01DC9064; }; projectwideBuildSettings = { OBJROOT = "/Volumes/CodeBits/jingham/Tcl/Merge-Build"; SYMROOT = "/Volumes/CodeBits/jingham/Tcl/Merge-Products"; }; wantsIndex = 1; wantsSCM = -1; }; F53755DF016C38D201DC9062 = { activeExec = 0; }; F53756A0016C4DD401DC9062 = { activeExec = 0; executables = ( F53756AB016C4DD401DC9062, ); }; F53756AB016C4DD401DC9062 = { activeArgIndex = 2147483647; argumentStrings = ( ); debuggerPlugin = GDBDebugging; dylibVariantSuffix = ""; enableDebugStr = 1; environmentEntries = ( ); isa = PBXExecutable; name = "Wish Shell"; shlibInfoDictList = ( ); sourceDirectories = ( ); }; F55BC4B602B2DFB901DC9062 = { fileReference = F5375580016C389901DC9062; isa = PBXFileBreakpoint; lineNumber = 201; state = 2; }; F55BC4B902B2E09101DC9062 = { fRef = F5375553016C376E01DC9062; isa = PBXTextBookmark; name = "tkMacOSXEvent.c: 242"; rLen = 0; rLoc = 6185; rType = 0; vrLen = 1438; vrLoc = 5937; }; F55BC4BA02B2E09101DC9062 = { fRef = F55BC46A02B2D3F301DC9062; isa = PBXTextBookmark; name = "panedwindow.tcl: 1"; rLen = 0; rLoc = 0; rType = 0; vrLen = 1395; vrLoc = 0; }; F55BC4BB02B2E09101DC9062 = { fRef = F55BC4EA02B2E09101DC9062; isa = PBXTextBookmark; name = "tclDecls.h: 140"; rLen = 7; rLoc = 4620; rType = 0; vrLen = 1564; vrLoc = 3873; }; F55BC4BC02B2E09101DC9062 = { fRef = F55BC4EB02B2E09101DC9062; isa = PBXTextBookmark; name = "tcl.h: 282"; rLen = 0; rLoc = 7897; rType = 0; vrLen = 946; vrLoc = 7395; }; F55BC4BD02B2E09101DC9062 = { bstl = F537552C016C352C01DC9062; isa = PBXBuildStyleBookmark; }; F55BC4BE02B2E09101DC9062 = { isa = PBXTargetBookmark; trg = F53755DF016C38D201DC9062; }; F55BC4BF02B2E09101DC9062 = { fRef = F5375553016C376E01DC9062; isa = PBXTextBookmark; name = "tkMacOSXEvent.c: 242"; rLen = 0; rLoc = 6185; rType = 0; vrLen = 1438; vrLoc = 5937; }; F55BC4C002B2E09101DC9062 = { isa = PBXTargetBookmark; trg = F53755DF016C38D201DC9062; }; F55BC4C102B2E09101DC9062 = { fRef = F55BC46A02B2D3F301DC9062; isa = PBXTextBookmark; name = "panedwindow.tcl: 1"; rLen = 0; rLoc = 0; rType = 0; vrLen = 1395; vrLoc = 0; }; F55BC4C202B2E09101DC9062 = { isa = PBXTargetBookmark; trg = F53755DF016C38D201DC9062; }; F55BC4C302B2E09101DC9062 = { fRef = F55BC46A02B2D3F301DC9062; isa = PBXTextBookmark; name = "panedwindow.tcl: 1"; rLen = 0; rLoc = 0; rType = 0; vrLen = 1395; vrLoc = 0; }; F55BC4C402B2E09101DC9062 = { isa = PBXTargetBookmark; trg = F53755DF016C38D201DC9062; }; F55BC4C502B2E09101DC9062 = { fRef = F55BC4E802B2E09101DC9062; isa = PBXTextBookmark; name = "tclDecls.h: 140"; rLen = 7; rLoc = 4620; rType = 0; vrLen = 1564; vrLoc = 3873; }; F55BC4C602B2E09101DC9062 = { fRef = F55BC4E902B2E09101DC9062; isa = PBXTextBookmark; name = "tcl.h: 282"; rLen = 0; rLoc = 7897; rType = 0; vrLen = 946; vrLoc = 7395; }; F55BC4C702B2E09101DC9062 = { bstl = F537552C016C352C01DC9062; isa = PBXBuildStyleBookmark; }; F55BC4C802B2E09101DC9062 = { isa = PBXTargetBookmark; trg = F53755DF016C38D201DC9062; }; F55BC4C902B2E09101DC9062 = { fRef = F537554A016C376E01DC9062; isa = PBXTextBookmark; name = "tkMacOSXButton.c: hilitePart"; rLen = 32; rLoc = 30847; rType = 0; vrLen = 569; vrLoc = 30571; }; F55BC4CA02B2E09101DC9062 = { fRef = F53755BE016C389901DC9062; isa = PBXTextBookmark; name = "tkTextBTree.c: tagPtr"; rLen = 32; rLoc = 71434; rType = 0; vrLen = 612; vrLoc = 71152; }; F55BC4CB02B2E09101DC9062 = { fRef = F537554C016C376E01DC9062; isa = PBXTextBookmark; name = "tkMacOSXColor.c: TkpGetColor"; rLen = 76; rLoc = 6526; rType = 0; vrLen = 834; vrLoc = 6146; }; F55BC4CC02B2E09101DC9062 = { fRef = F5375550016C376E01DC9062; isa = PBXTextBookmark; name = "tkMacOSXDialog.c: Tk_ChooseDirectoryObjCmd"; rLen = 48; rLoc = 18681; rType = 0; vrLen = 585; vrLoc = 18448; }; F55BC4CD02B2E09101DC9062 = { fRef = F5375557016C376E01DC9062; isa = PBXTextBookmark; name = "tkMacOSXKeyboard.c: InitKeyMaps"; rLen = 67; rLoc = 2187; rType = 0; vrLen = 563; vrLoc = 1984; }; F55BC4CE02B2E09101DC9062 = { fRef = F5375559016C376E01DC9062; isa = PBXTextBookmark; name = "tkMacOSXMenu.c: index"; rLen = 30; rLoc = 28077; rType = 0; vrLen = 523; vrLoc = 27873; }; F55BC4CF02B2E09101DC9062 = { fRef = F537555B016C376E01DC9062; isa = PBXTextBookmark; name = "tkMacOSXMenus.c: SourceDialog"; rLen = 41; rLoc = 8301; rType = 0; vrLen = 463; vrLoc = 8060; }; F55BC4D002B2E09101DC9062 = { fRef = F537553E016C376E01DC9062; isa = PBXTextBookmark; name = "tkMacOSX.h: 18"; rLen = 27; rLoc = 385; rType = 0; vrLen = 517; vrLoc = 195; }; F55BC4D102B2E09101DC9062 = { fRef = F5375561016C376E01DC9062; isa = PBXTextBookmark; name = "tkMacOSXSend.c: RegOpen"; rLen = 38; rLoc = 8016; rType = 0; vrLen = 974; vrLoc = 7563; }; F55BC4D202B2E09101DC9062 = { fRef = F5375567016C376E01DC9062; isa = PBXTextBookmark; name = "tkMacOSXWm.c: Tk_WmCmd"; rLen = 62; rLoc = 16028; rType = 0; vrLen = 571; vrLoc = 15789; }; F55BC4D302B2E09101DC9062 = { fRef = F55BC46802B2D38B01DC9062; isa = PBXTextBookmark; rLen = 1; rLoc = 283; rType = 1; }; F55BC4D402B2E09101DC9062 = { fRef = F537554A016C376E01DC9062; isa = PBXTextBookmark; name = "tkMacOSXButton.c: hilitePart"; rLen = 32; rLoc = 30847; rType = 0; vrLen = 569; vrLoc = 30571; }; F55BC4D502B2E09101DC9062 = { fRef = F53755BE016C389901DC9062; isa = PBXTextBookmark; name = "tkTextBTree.c: tagPtr"; rLen = 32; rLoc = 71434; rType = 0; vrLen = 612; vrLoc = 71152; }; F55BC4D602B2E09101DC9062 = { fRef = F537554C016C376E01DC9062; isa = PBXTextBookmark; name = "tkMacOSXColor.c: TkpGetColor"; rLen = 76; rLoc = 6526; rType = 0; vrLen = 834; vrLoc = 6146; }; F55BC4D702B2E09101DC9062 = { fRef = F5375550016C376E01DC9062; isa = PBXTextBookmark; name = "tkMacOSXDialog.c: Tk_ChooseDirectoryObjCmd"; rLen = 48; rLoc = 18681; rType = 0; vrLen = 585; vrLoc = 18448; }; F55BC4D802B2E09101DC9062 = { fRef = F5375557016C376E01DC9062; isa = PBXTextBookmark; name = "tkMacOSXKeyboard.c: InitKeyMaps"; rLen = 67; rLoc = 2187; rType = 0; vrLen = 563; vrLoc = 1984; }; F55BC4D902B2E09101DC9062 = { fRef = F5375559016C376E01DC9062; isa = PBXTextBookmark; name = "tkMacOSXMenu.c: index"; rLen = 30; rLoc = 28077; rType = 0; vrLen = 523; vrLoc = 27873; }; F55BC4DA02B2E09101DC9062 = { fRef = F537555B016C376E01DC9062; isa = PBXTextBookmark; name = "tkMacOSXMenus.c: SourceDialog"; rLen = 41; rLoc = 8301; rType = 0; vrLen = 463; vrLoc = 8060; }; F55BC4DB02B2E09101DC9062 = { fRef = F537553E016C376E01DC9062; isa = PBXTextBookmark; name = "tkMacOSX.h: 18"; rLen = 27; rLoc = 385; rType = 0; vrLen = 517; vrLoc = 195; }; F55BC4DC02B2E09101DC9062 = { fRef = F5375561016C376E01DC9062; isa = PBXTextBookmark; name = "tkMacOSXSend.c: RegOpen"; rLen = 38; rLoc = 8016; rType = 0; vrLen = 974; vrLoc = 7563; }; F55BC4DD02B2E09101DC9062 = { fRef = F5375567016C376E01DC9062; isa = PBXTextBookmark; name = "tkMacOSXWm.c: Tk_WmCmd"; rLen = 62; rLoc = 16028; rType = 0; vrLen = 571; vrLoc = 15789; }; F55BC4DE02B2E09101DC9062 = { fRef = F55BC46802B2D38B01DC9062; isa = PBXTextBookmark; name = "tkPanedWindow.c: 279"; rLen = 0; rLoc = 11411; rType = 0; vrLen = 999; vrLoc = 11180; }; F55BC4DF02B2E09101DC9062 = { fRef = F55BC4ED02B2E09101DC9062; isa = PBXTextBookmark; name = "tkMacOSXAppInit.c: 155"; rLen = 0; rLoc = 4698; rType = 0; vrLen = 383; vrLoc = 4567; }; F55BC4E002B2E09101DC9062 = { fRef = F5375593016C389901DC9062; isa = PBXTextBookmark; name = "tkConfig.c: DoObjConfig"; rLen = 0; rLoc = 24585; rType = 0; vrLen = 404; vrLoc = 24440; }; F55BC4E102B2E09101DC9062 = { fRef = F5375580016C389901DC9062; isa = PBXTextBookmark; rLen = 0; rLoc = 204; rType = 1; }; F55BC4E202B2E09101DC9062 = { fRef = F55BC4EE02B2E09101DC9062; isa = PBXTextBookmark; name = "tkMacOSXAppInit.c: 155"; rLen = 0; rLoc = 4698; rType = 0; vrLen = 388; vrLoc = 4639; }; F55BC4E302B2E09101DC9062 = { fRef = F5375580016C389901DC9062; isa = PBXTextBookmark; name = "tk3d.c: Tk_Get3DBorder"; rLen = 0; rLoc = 6396; rType = 0; vrLen = 548; vrLoc = 6264; }; F55BC4E402B2E09101DC9062 = { fRef = F55BC4EC02B2E09101DC9062; isa = PBXTextBookmark; name = "tkMacOSXAppInit.c: 155"; rLen = 0; rLoc = 4698; rType = 0; vrLen = 383; vrLoc = 4567; }; F55BC4E502B2E09101DC9062 = { fRef = F5375580016C389901DC9062; isa = PBXTextBookmark; name = "tk3d.c: Tk_Get3DBorder"; rLen = 0; rLoc = 6335; rType = 0; vrLen = 482; vrLoc = 6158; }; F55BC4E602B2E09101DC9062 = { fRef = F5375593016C389901DC9062; isa = PBXTextBookmark; name = "tkConfig.c: DoObjConfig"; rLen = 0; rLoc = 24585; rType = 0; vrLen = 404; vrLoc = 24440; }; F55BC4E702B2E09101DC9062 = { fRef = F5375580016C389901DC9062; isa = PBXTextBookmark; name = "tk3d.c: Tk_Get3DBorder"; rLen = 0; rLoc = 6396; rType = 0; vrLen = 482; vrLoc = 6158; }; F55BC4E802B2E09101DC9062 = { isa = PBXFileReference; name = tclDecls.h; path = /Volumes/CodeBits/jingham/Tcl/Source/tcl/generic/tclDecls.h; refType = 0; }; F55BC4E902B2E09101DC9062 = { isa = PBXFileReference; name = tcl.h; path = /Volumes/CodeBits/jingham/Tcl/Source/tcl/generic/tcl.h; refType = 0; }; F55BC4EA02B2E09101DC9062 = { isa = PBXFileReference; name = tclDecls.h; path = /Volumes/CodeBits/jingham/Tcl/Source/tcl/generic/tclDecls.h; refType = 0; }; F55BC4EB02B2E09101DC9062 = { isa = PBXFileReference; name = tcl.h; path = /Volumes/CodeBits/jingham/Tcl/Source/tcl/generic/tcl.h; refType = 0; }; F55BC4EC02B2E09101DC9062 = { isa = PBXFileReference; name = tkMacOSXAppInit.c; path = /Volumes/CodeBits/jingham/Tcl/Source/tk/macosx/tkMacOSXAppInit.c; refType = 0; }; F55BC4ED02B2E09101DC9062 = { isa = PBXFileReference; name = tkMacOSXAppInit.c; path = /Volumes/CodeBits/jingham/Tcl/Source/tk/macosx/tkMacOSXAppInit.c; refType = 0; }; F55BC4EE02B2E09101DC9062 = { isa = PBXFileReference; name = tkMacOSXAppInit.c; path = /Volumes/CodeBits/jingham/Tcl/Source/tk/macosx/tkMacOSXAppInit.c; refType = 0; }; F566083B0197283B01DC9062 = { fileReference = F5375548016C376E01DC9062; isa = PBXFileBreakpoint; lineNumber = 214; state = 2; }; F566083C0197823801DC9062 = { isa = PBXSymbolicBreakpoint; state = 2; symbolName = Tcl_CreateObjCommand; }; |
︙ | ︙ | |||
225 226 227 228 229 230 231 | isa = PBXFileBreakpoint; lineNumber = 1478; state = 2; }; F58907BE018DCE8F01DC9062 = { fileReference = F5375548016C376E01DC9062; isa = PBXFileBreakpoint; | | > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1708 1709 1710 1711 1712 1713 1714 1715 1716 1717 1718 1719 1720 1721 1722 1723 1724 1725 1726 1727 1728 1729 1730 1731 1732 1733 1734 1735 1736 1737 1738 1739 1740 1741 1742 1743 1744 1745 1746 1747 1748 1749 1750 1751 1752 1753 1754 1755 1756 1757 1758 1759 1760 1761 1762 1763 1764 1765 1766 1767 1768 1769 1770 1771 1772 1773 1774 1775 1776 1777 1778 1779 1780 1781 1782 1783 1784 1785 1786 1787 1788 1789 1790 1791 1792 1793 1794 1795 1796 1797 1798 1799 1800 1801 1802 1803 1804 1805 1806 1807 1808 1809 1810 1811 1812 1813 1814 1815 1816 1817 1818 1819 1820 1821 1822 1823 1824 1825 1826 1827 1828 1829 1830 1831 1832 1833 1834 1835 1836 1837 1838 1839 1840 1841 1842 1843 1844 1845 1846 1847 1848 1849 1850 1851 1852 1853 1854 1855 1856 1857 1858 1859 1860 1861 1862 1863 1864 1865 1866 1867 1868 1869 1870 1871 1872 1873 1874 1875 1876 1877 1878 1879 1880 1881 1882 1883 1884 1885 1886 1887 1888 1889 1890 1891 1892 1893 1894 1895 1896 1897 1898 1899 1900 1901 1902 1903 1904 1905 1906 1907 1908 1909 1910 1911 1912 1913 1914 1915 1916 1917 1918 1919 1920 1921 1922 1923 1924 1925 1926 1927 1928 1929 1930 1931 1932 1933 1934 1935 1936 1937 1938 1939 1940 1941 1942 1943 1944 1945 1946 1947 1948 1949 1950 1951 1952 1953 1954 1955 1956 1957 1958 1959 1960 1961 1962 1963 1964 1965 1966 1967 1968 1969 1970 1971 1972 1973 1974 1975 1976 1977 1978 1979 1980 1981 1982 1983 1984 1985 1986 1987 1988 1989 1990 1991 1992 1993 1994 1995 1996 1997 1998 1999 2000 2001 2002 2003 2004 2005 2006 2007 2008 2009 2010 2011 2012 2013 | isa = PBXFileBreakpoint; lineNumber = 1478; state = 2; }; F58907BE018DCE8F01DC9062 = { fileReference = F5375548016C376E01DC9062; isa = PBXFileBreakpoint; lineNumber = 196; state = 2; }; F58907C5018DD1C301DC9062 = { fileReference = F5375551016C376E01DC9062; isa = PBXFileBreakpoint; lineNumber = 502; state = 2; }; F5978FD602B3190701DC9062 = { fileReference = F5375580016C389901DC9062; isa = PBXFileBreakpoint; lineNumber = 224; state = 2; }; F5A439C0029B609C01DC9064 = { fileReference = F5375548016C376E01DC9062; isa = PBXFileBreakpoint; lineNumber = 74; state = 1; }; F5A439C2029B60ED01DC9064 = { fileReference = F5375548016C376E01DC9062; isa = PBXFileBreakpoint; lineNumber = 155; state = 1; }; F5A439CA029B620901DC9064 = { fileReference = F5375548016C376E01DC9062; isa = PBXFileBreakpoint; lineNumber = 306; state = 1; }; F5A439CE029B6B5501DC9064 = { fRef = F537555C016C376E01DC9062; isa = PBXTextBookmark; name = "tkMacOSXMouseEvent.c: TkMacOSXProcessMouseEvent"; rLen = 0; rLoc = 6187; rType = 0; vrLen = 1476; vrLoc = 5157; }; F5A439D0029B6B5501DC9064 = { fRef = F5375567016C376E01DC9062; isa = PBXTextBookmark; name = "tkMacOSXWm.c: TkMacOSXMakeRealWindowExist"; rLen = 15; rLoc = 113034; rType = 0; vrLen = 695; vrLoc = 112860; }; F5A439D1029B6B5501DC9064 = { fRef = F5A439F3029B6B5601DC9064; isa = PBXTextBookmark; name = "CarbonEvents.h: 4483"; rLen = 19; rLoc = 173576; rType = 0; vrLen = 804; vrLoc = 173125; }; F5A439D2029B6B5501DC9064 = { fRef = F5375548016C376E01DC9062; isa = PBXTextBookmark; name = "tkMacOSXAppInit.c: Tcl_AppInit"; rLen = 0; rLoc = 9908; rType = 0; vrLen = 1370; vrLoc = 8362; }; F5A439D3029B6B5501DC9064 = { fRef = F5A439F4029B6B5601DC9064; isa = PBXTextBookmark; name = "MacWindows.h: 1410"; rLen = 105; rLoc = 57285; rType = 0; vrLen = 1155; vrLoc = 56795; }; F5A439D4029B6B5501DC9064 = { fRef = F5A439F5029B6B5601DC9064; isa = PBXBookmark; }; F5A439D5029B6B5501DC9064 = { fRef = F5A439F6029B6B5601DC9064; isa = PBXBookmark; }; F5A439D6029B6B5501DC9064 = { fRef = F5A439F7029B6B5601DC9064; isa = PBXBookmark; }; F5A439D7029B6B5501DC9064 = { fRef = F5A439F8029B6B5601DC9064; isa = PBXBookmark; }; F5A439D9029B6B5501DC9064 = { fRef = F5A439FA029B6B5601DC9064; isa = PBXTextBookmark; name = "tclDecls.h: 788"; rLen = 7; rLoc = 27156; rType = 0; vrLen = 1281; vrLoc = 26408; }; F5A439DA029B6B5501DC9064 = { fRef = F5375553016C376E01DC9062; isa = PBXTextBookmark; name = "tkMacOSXEvent.c: TkMacOSXProcessEvent"; rLen = 25; rLoc = 4656; rType = 0; vrLen = 1260; vrLoc = 4407; }; F5A439DB029B6B5501DC9064 = { fRef = F537555C016C376E01DC9062; isa = PBXTextBookmark; name = "tkMacOSXMouseEvent.c: TkMacOSXProcessMouseEvent"; rLen = 0; rLoc = 6037; rType = 0; vrLen = 1438; vrLoc = 5075; }; F5A439DE029B6B5501DC9064 = { fRef = F5375553016C376E01DC9062; isa = PBXTextBookmark; name = "tkMacOSXEvent.c: ReceiveAndProcessEvent"; rLen = 0; rLoc = 7098; rType = 0; vrLen = 1455; vrLoc = 5920; }; F5A439DF029B6B5501DC9064 = { fRef = F5375548016C376E01DC9062; isa = PBXTextBookmark; name = "tkMacOSXAppInit.c: Tcl_AppInit"; rLen = 0; rLoc = 9908; rType = 0; vrLen = 673; vrLoc = 7806; }; F5A439E0029B6B5501DC9064 = { fRef = F5375567016C376E01DC9062; isa = PBXTextBookmark; name = "tkMacOSXWm.c: TkMacOSXMakeRealWindowExist"; rLen = 15; rLoc = 113034; rType = 0; vrLen = 695; vrLoc = 112860; }; F5A439E1029B6B5501DC9064 = { fRef = F5A439FB029B6B5601DC9064; isa = PBXTextBookmark; name = "MacWindows.h: 1410"; rLen = 0; rLoc = 57304; rType = 0; vrLen = 659; vrLoc = 56953; }; F5A439E2029B6B5501DC9064 = { fRef = F5375548016C376E01DC9062; isa = PBXTextBookmark; name = "tkMacOSXAppInit.c: Tcl_AppInit"; rLen = 0; rLoc = 9908; rType = 0; vrLen = 1370; vrLoc = 8362; }; F5A439E3029B6B5501DC9064 = { fRef = F5A439EF029B6B5601DC9064; isa = PBXTextBookmark; name = "MacWindows.h: 1410"; rLen = 105; rLoc = 57285; rType = 0; vrLen = 1155; vrLoc = 56795; }; F5A439E4029B6B5501DC9064 = { fRef = F5A439F1029B6B5601DC9064; isa = PBXBookmark; }; F5A439E5029B6B5501DC9064 = { fRef = F5A439FD029B6B5601DC9064; isa = PBXBookmark; }; F5A439E6029B6B5501DC9064 = { fRef = F5A439FE029B6B5601DC9064; isa = PBXBookmark; }; F5A439E7029B6B5501DC9064 = { fRef = F5A439EE029B6B5601DC9064; isa = PBXBookmark; }; F5A439E8029B6B5501DC9064 = { fRef = F5A439F2029B6B5601DC9064; isa = PBXBookmark; }; F5A439EE029B6B5601DC9064 = { isa = PBXFileReference; name = Carbon.html; path = /Developer/Documentation/Carbon/Carbon.html; refType = 0; }; F5A439EF029B6B5601DC9064 = { isa = PBXFileReference; name = MacWindows.h; path = /System/Library/Frameworks/Carbon.framework/Versions/A/Frameworks/HIToolbox.framework/Versions/A/Headers/MacWindows.h; refType = 0; }; F5A439F1029B6B5601DC9064 = { isa = PBXFileReference; name = Carbon.html; path = /Developer/Documentation/Carbon/Carbon.html; refType = 0; }; F5A439F2029B6B5601DC9064 = { isa = PBXFileReference; name = carboneventmanager.html; path = /Developer/Documentation/Carbon/oss/CarbonEventManager/carboneventmanager.html; refType = 0; }; F5A439F3029B6B5601DC9064 = { isa = PBXFileReference; name = CarbonEvents.h; path = /System/Library/Frameworks/Carbon.framework/Versions/A/Frameworks/HIToolbox.framework/Versions/A/Headers/CarbonEvents.h; refType = 0; }; F5A439F4029B6B5601DC9064 = { isa = PBXFileReference; name = MacWindows.h; path = /System/Library/Frameworks/Carbon.framework/Versions/A/Frameworks/HIToolbox.framework/Versions/A/Headers/MacWindows.h; refType = 0; }; F5A439F5029B6B5601DC9064 = { isa = PBXFileReference; name = windowmanager.html; path = /Developer/Documentation/Carbon/HumanInterfaceToolbox/WindowManager/windowmanager.html; refType = 0; }; F5A439F6029B6B5601DC9064 = { isa = PBXFileReference; name = index.html; path = /Developer/Documentation/Carbon/HumanInterfaceToolbox/WindowManager/Window_Manager/index.html; refType = 0; }; F5A439F7029B6B5601DC9064 = { isa = PBXFileReference; name = Carbon.html; path = /Developer/Documentation/Carbon/Carbon.html; refType = 0; }; F5A439F8029B6B5601DC9064 = { isa = PBXFileReference; name = carboneventmanager.html; path = /Developer/Documentation/Carbon/oss/CarbonEventManager/carboneventmanager.html; refType = 0; }; F5A439FA029B6B5601DC9064 = { isa = PBXFileReference; name = tclDecls.h; path = /Volumes/CodeBits/jingham/Tcl/Source/tcl/generic/tclDecls.h; refType = 0; }; F5A439FB029B6B5601DC9064 = { isa = PBXFileReference; name = MacWindows.h; path = /System/Library/Frameworks/Carbon.framework/Versions/A/Frameworks/HIToolbox.framework/Versions/A/Headers/MacWindows.h; refType = 0; }; F5A439FD029B6B5601DC9064 = { isa = PBXFileReference; name = windowmanager.html; path = /Developer/Documentation/Carbon/HumanInterfaceToolbox/WindowManager/windowmanager.html; refType = 0; }; F5A439FE029B6B5601DC9064 = { isa = PBXFileReference; name = index.html; path = /Developer/Documentation/Carbon/HumanInterfaceToolbox/WindowManager/Window_Manager/index.html; refType = 0; }; F5A5146F01D05DC201DC9062 = { fileReference = F5375550016C376E01DC9062; isa = PBXFileBreakpoint; lineNumber = 651; state = 1; }; |
︙ | ︙ | |||
257 258 259 260 261 262 263 264 265 | state = 1; }; F5B2CDC10175829501DC9062 = { fileReference = F5375583016C389901DC9062; isa = PBXFileBreakpoint; lineNumber = 2584; state = 2; }; } | > > > > > > > > > > > > > > > > > > > > | 2024 2025 2026 2027 2028 2029 2030 2031 2032 2033 2034 2035 2036 2037 2038 2039 2040 2041 2042 2043 2044 2045 2046 2047 2048 2049 2050 2051 2052 | state = 1; }; F5B2CDC10175829501DC9062 = { fileReference = F5375583016C389901DC9062; isa = PBXFileBreakpoint; lineNumber = 2584; state = 2; }; F5BE671E029B6FEE01DC9064 = { fRef = F5BE6723029B6FEE01DC9064; isa = PBXBookmark; }; F5BE671F029B6FEE01DC9064 = { fRef = F5BE6722029B6FEE01DC9064; isa = PBXBookmark; }; F5BE6722029B6FEE01DC9064 = { isa = PBXFileReference; name = index.html; path = /Developer/Documentation/Carbon/oss/CarbonEventManager/Carbon_Event_Manager_Ref/index.html; refType = 0; }; F5BE6723029B6FEE01DC9064 = { isa = PBXFileReference; name = index.html; path = /Developer/Documentation/Carbon/oss/CarbonEventManager/Carbon_Event_Manager_Ref/index.html; refType = 0; }; } |
Changes to macosx/Wish.pbproj/project.pbxproj.
1 2 3 4 5 | // !$*UTF8*$! { archiveVersion = 1; classes = { }; | | | 1 2 3 4 5 6 7 8 9 10 11 12 13 | // !$*UTF8*$! { archiveVersion = 1; classes = { }; objectVersion = 38; objects = { F50D96120196176E01DC9062 = { isa = PBXFrameworkReference; name = ApplicationServices.framework; path = /System/Library/Frameworks/ApplicationServices.framework; refType = 0; }; |
︙ | ︙ | |||
41 42 43 44 45 46 47 | F51D9044018149FD01DC9062, F51D9045018149FD01DC9062, F51D9046018149FD01DC9062, F51D9047018149FD01DC9062, F51D9048018149FD01DC9062, ); isa = PBXCopyFilesBuildPhase; | | | 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 | F51D9044018149FD01DC9062, F51D9045018149FD01DC9062, F51D9046018149FD01DC9062, F51D9047018149FD01DC9062, F51D9048018149FD01DC9062, ); isa = PBXCopyFilesBuildPhase; runOnlyForDeploymentPostprocessing = 0; }; F51D9040018149FD01DC9062 = { fileRef = F53755CE016C389901DC9062; isa = PBXBuildFile; settings = { }; }; |
︙ | ︙ | |||
238 239 240 241 242 243 244 245 246 247 248 249 250 251 | F53755AC016C389901DC9062, F53755AD016C389901DC9062, F53755AE016C389901DC9062, F53755AF016C389901DC9062, F53755B0016C389901DC9062, F53755B1016C389901DC9062, F53755B2016C389901DC9062, F53755B3016C389901DC9062, F53755B4016C389901DC9062, F53755B5016C389901DC9062, F53755B6016C389901DC9062, F53755B7016C389901DC9062, F53755B8016C389901DC9062, F53755B9016C389901DC9062, | > | 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 | F53755AC016C389901DC9062, F53755AD016C389901DC9062, F53755AE016C389901DC9062, F53755AF016C389901DC9062, F53755B0016C389901DC9062, F53755B1016C389901DC9062, F53755B2016C389901DC9062, F55BC46802B2D38B01DC9062, F53755B3016C389901DC9062, F53755B4016C389901DC9062, F53755B5016C389901DC9062, F53755B6016C389901DC9062, F53755B7016C389901DC9062, F53755B8016C389901DC9062, F53755B9016C389901DC9062, |
︙ | ︙ | |||
1338 1339 1340 1341 1342 1343 1344 | DYLIB_CURRENT_VERSION = 8.4; FRAMEWORK_SEARCH_PATHS = "\"$(SYMROOT)\""; FRAMEWORK_VERSION = 8.4; HEADER_SEARCH_PATHS = "../../tcl/generic ../../tcl/unix ../bitmaps ../generic ../xlib"; INSTALL_PATH = /Library/Frameworks; LIBRARY_SEARCH_PATHS = ""; OPTIMIZATION_CFLAGS = "-O0"; | | > | 1339 1340 1341 1342 1343 1344 1345 1346 1347 1348 1349 1350 1351 1352 1353 1354 1355 1356 1357 1358 1359 1360 1361 1362 1363 | DYLIB_CURRENT_VERSION = 8.4; FRAMEWORK_SEARCH_PATHS = "\"$(SYMROOT)\""; FRAMEWORK_VERSION = 8.4; HEADER_SEARCH_PATHS = "../../tcl/generic ../../tcl/unix ../bitmaps ../generic ../xlib"; INSTALL_PATH = /Library/Frameworks; LIBRARY_SEARCH_PATHS = ""; OPTIMIZATION_CFLAGS = "-O0"; OTHER_CFLAGS = "-DMAC_OSX_TCL -DMAC_OSX_TK -DTCL_DEFAULT_ENCODING=\\\"utf-8\\\" -DHAVE_UNISTD_H=1 -DHAVE_LIMITS_H=1 -DTCL_THREADS=1 -DUSE_THREAD_ALLOC=1 -D_THREAD_SAFE=1 -DHAVE_PTHREAD_ATTR_SETSTACKSIZE=1 -DTCL_WIDE_INT_TYPE=\"long long\" -DWORDS_BIGENDIAN=1 -DHAVE_GETCWD=1 -DHAVE_OPENDIR=1 -DHAVE_STRSTR=1 -DHAVE_STRTOL=1 -DHAVE_TMPNAM=1 -DHAVE_WAITPID=1 -DNO_VALUES_H=1 -DNO_DLFCN_H=1 -DHAVE_UNISTD_H=1 -DHAVE_SYS_PARAM_H=1 -DHAVE_SYS_TIME_H=1 -DTIME_WITH_SYS_TIME=1 -DHAVE_TM_ZONE=1 -DHAVE_TM_GMTOFF=1 -DHAVE_ST_BLKSIZE=1 -DSTDC_HEADERS=1 -DHAVE_SIGNED_CHAR=1 -DHAVE_SYS_IOCTL_H=1 -DHAVE_SYS_FILIO_H=1-DTIME_WITH_SYS_TIME=1 -DHAVE_TM_ZONE=1 -DHAVE_TM_GMTOFF=1 -DHAVE_ST_BLKSIZE=1 -DSTDC_HEADERS=1 -DNEED_MATHERR=1 -DHAVE_SIGNED_CHAR=1 -DHAVE_SYS_IOCTL_H=1 -DHAVE_SYS_FILIO_H=1"; OTHER_LDFLAGS = "-seg1addr 0x400000"; OTHER_LIBTOOL_FLAGS = ""; OTHER_REZFLAGS = "-i \"../../tcl/generic\" -i \"../generic\""; PRINCIPAL_CLASS = ""; PRODUCT_NAME = Tk; SECTORDER_FLAGS = ""; TK_MAJOR_VERSION = 8; TK_MINOR_VERSION = 4; TK_PATCH_LEVEL = a4; USE_GCC3_PFE_SUPPORT = NO; WARNING_CFLAGS = "-Wmost -Wno-four-char-constants -Wno-unknown-pragmas"; WRAPPER_EXTENSION = framework; }; dependencies = ( ); isa = PBXFrameworkTarget; name = TkLibrary; |
︙ | ︙ | |||
1447 1448 1449 1450 1451 1452 1453 | F5375698016C3F1001DC9062, F5375699016C3F1001DC9062, F537569A016C3F1001DC9062, F537569B016C3F1001DC9062, F537569C016C3F1001DC9062, ); isa = PBXHeadersBuildPhase; | | | | 1449 1450 1451 1452 1453 1454 1455 1456 1457 1458 1459 1460 1461 1462 1463 1464 1465 1466 1467 1468 1469 1470 1471 1472 | F5375698016C3F1001DC9062, F5375699016C3F1001DC9062, F537569A016C3F1001DC9062, F537569B016C3F1001DC9062, F537569C016C3F1001DC9062, ); isa = PBXHeadersBuildPhase; runOnlyForDeploymentPostprocessing = 0; }; F53755E1016C38D301DC9062 = { buildActionMask = 2147483647; files = ( F5C8865C017D625C01DC9062, F5C8865D017D625C01DC9062, ); isa = PBXResourcesBuildPhase; runOnlyForDeploymentPostprocessing = 0; }; F53755E2016C38D301DC9062 = { buildActionMask = 2147483647; files = ( F5375604016C397D01DC9062, F5375605016C397D01DC9062, F5375606016C397D01DC9062, |
︙ | ︙ | |||
1568 1569 1570 1571 1572 1573 1574 1575 1576 | F537566D016C39F201DC9062, F5375677016C3A6D01DC9062, F5375678016C3A6D01DC9062, F5375679016C3A6D01DC9062, F537567A016C3A6D01DC9062, F537567B016C3A6D01DC9062, F537569E016C49C301DC9062, ); isa = PBXSourcesBuildPhase; | > | | | | 1570 1571 1572 1573 1574 1575 1576 1577 1578 1579 1580 1581 1582 1583 1584 1585 1586 1587 1588 1589 1590 1591 1592 1593 1594 1595 1596 1597 1598 1599 1600 1601 1602 1603 1604 1605 1606 1607 1608 | F537566D016C39F201DC9062, F5375677016C3A6D01DC9062, F5375678016C3A6D01DC9062, F5375679016C3A6D01DC9062, F537567A016C3A6D01DC9062, F537567B016C3A6D01DC9062, F537569E016C49C301DC9062, F55BC46902B2D38B01DC9062, ); isa = PBXSourcesBuildPhase; runOnlyForDeploymentPostprocessing = 0; }; F53755E3016C38D301DC9062 = { buildActionMask = 2147483647; files = ( F51D903E0181474301DC9062, F537567E016C3ADB01DC9062, F50D96130196176E01DC9062, ); isa = PBXFrameworksBuildPhase; runOnlyForDeploymentPostprocessing = 0; }; F53755E4016C38D301DC9062 = { buildActionMask = 2147483647; files = ( F537567F016C3ADB01DC9062, F5375680016C3ADB01DC9062, F5375681016C3ADB01DC9062, F5375682016C3ADB01DC9062, ); isa = PBXRezBuildPhase; runOnlyForDeploymentPostprocessing = 0; }; F53755E5016C390401DC9062 = { fileRef = F5375569016C37A601DC9062; isa = PBXBuildFile; settings = { }; }; |
︙ | ︙ | |||
2710 2711 2712 2713 2714 2715 2716 | F5FBD6E30173513601DC9062, ); buildSettings = { FRAMEWORK_SEARCH_PATHS = "\"$(SYMROOT)\""; HEADER_SEARCH_PATHS = "../../tcl/generic ../../tcl/unix ../generic ../xlib"; LIBRARY_SEARCH_PATHS = ""; OPTIMIZATION_CFLAGS = "-O0"; | | > | 2713 2714 2715 2716 2717 2718 2719 2720 2721 2722 2723 2724 2725 2726 2727 2728 2729 2730 2731 2732 | F5FBD6E30173513601DC9062, ); buildSettings = { FRAMEWORK_SEARCH_PATHS = "\"$(SYMROOT)\""; HEADER_SEARCH_PATHS = "../../tcl/generic ../../tcl/unix ../generic ../xlib"; LIBRARY_SEARCH_PATHS = ""; OPTIMIZATION_CFLAGS = "-O0"; OTHER_CFLAGS = "-DMAC_OSX_TCL -DMAC_OSX_TK -DTCL_DEFAULT_ENCODING=\\\"utf-8\\\" -DHAVE_UNISTD_H=1 -DHAVE_LIMITS_H=1 -DTCL_THREADS=1 -DUSE_THREAD_ALLOC=1 -D_THREAD_SAFE=1 -DHAVE_PTHREAD_ATTR_SETSTACKSIZE=1 -DTCL_WIDE_INT_TYPE=\"long long\" -DWORDS_BIGENDIAN=1 -DHAVE_GETCWD=1 -DHAVE_OPENDIR=1 -DHAVE_STRSTR=1 -DHAVE_STRTOL=1 -DHAVE_TMPNAM=1 -DHAVE_WAITPID=1 -DNO_VALUES_H=1 -DNO_DLFCN_H=1 -DHAVE_UNISTD_H=1 -DHAVE_SYS_PARAM_H=1 -DHAVE_SYS_TIME_H=1 -DTIME_WITH_SYS_TIME=1 -DHAVE_TM_ZONE=1 -DHAVE_TM_GMTOFF=1 -DHAVE_ST_BLKSIZE=1 -DSTDC_HEADERS=1 -DHAVE_SIGNED_CHAR=1 -DHAVE_SYS_IOCTL_H=1 -DHAVE_SYS_FILIO_H=1-DTIME_WITH_SYS_TIME=1 -DHAVE_TM_ZONE=1 -DHAVE_TM_GMTOFF=1 -DHAVE_ST_BLKSIZE=1 -DSTDC_HEADERS=1 -DNEED_MATHERR=1 -DHAVE_SIGNED_CHAR=1 -DHAVE_SYS_IOCTL_H=1 -DHAVE_SYS_FILIO_H=1"; OTHER_LDFLAGS = ""; OTHER_REZFLAGS = "-i \"../../tcl/generic\" -i \"../generic\""; PRODUCT_NAME = "Wish Shell"; SECTORDER_FLAGS = ""; USE_GCC3_PFE_SUPPORT = NO; WARNING_CFLAGS = "-Wmost -Wno-four-char-constants -Wno-unknown-pragmas"; WRAPPER_EXTENSION = app; }; dependencies = ( F53756B2016C525F01DC9062, ); isa = PBXApplicationTarget; |
︙ | ︙ | |||
2768 2769 2770 2771 2772 2773 2774 | buildActionMask = 2147483647; files = ( F53756AC016C4E1D01DC9062, F53756AD016C4E1D01DC9062, F53756AE016C4E1D01DC9062, ); isa = PBXHeadersBuildPhase; | | | | | | | 2772 2773 2774 2775 2776 2777 2778 2779 2780 2781 2782 2783 2784 2785 2786 2787 2788 2789 2790 2791 2792 2793 2794 2795 2796 2797 2798 2799 2800 2801 2802 2803 2804 2805 2806 2807 2808 2809 2810 2811 2812 2813 2814 2815 2816 2817 2818 2819 2820 2821 2822 2823 2824 2825 2826 2827 2828 2829 2830 2831 2832 2833 2834 2835 2836 2837 2838 2839 2840 2841 2842 2843 2844 2845 2846 | buildActionMask = 2147483647; files = ( F53756AC016C4E1D01DC9062, F53756AD016C4E1D01DC9062, F53756AE016C4E1D01DC9062, ); isa = PBXHeadersBuildPhase; runOnlyForDeploymentPostprocessing = 0; }; F53756A2016C4DD401DC9062 = { buildActionMask = 2147483647; files = ( F53756A3016C4DD401DC9062, F5C8865E017D625C01DC9062, F5C8865F017D625C01DC9062, ); isa = PBXResourcesBuildPhase; runOnlyForDeploymentPostprocessing = 0; }; F53756A3016C4DD401DC9062 = { fileRef = F537553B016C376E01DC9062; isa = PBXBuildFile; settings = { }; }; F53756A4016C4DD401DC9062 = { buildActionMask = 2147483647; files = ( F53756A5016C4DD401DC9062, ); isa = PBXSourcesBuildPhase; runOnlyForDeploymentPostprocessing = 0; }; F53756A5016C4DD401DC9062 = { fileRef = F5375548016C376E01DC9062; isa = PBXBuildFile; settings = { }; }; F53756A6016C4DD401DC9062 = { buildActionMask = 2147483647; files = ( F53756A8016C4DD401DC9062, F5875C7D016FEF1D01DC9062, F53756A7016C4DD401DC9062, F50D96140196176E01DC9062, ); isa = PBXFrameworksBuildPhase; runOnlyForDeploymentPostprocessing = 0; }; F53756A7016C4DD401DC9062 = { fileRef = F53755DE016C38D201DC9062; isa = PBXBuildFile; settings = { }; }; F53756A8016C4DD401DC9062 = { fileRef = F537567D016C3ADB01DC9062; isa = PBXBuildFile; settings = { }; }; F53756AA016C4DD401DC9062 = { buildActionMask = 2147483647; files = ( ); isa = PBXRezBuildPhase; runOnlyForDeploymentPostprocessing = 0; }; F53756AC016C4E1D01DC9062 = { fileRef = F537556B016C37A601DC9062; isa = PBXBuildFile; settings = { }; }; |
︙ | ︙ | |||
2851 2852 2853 2854 2855 2856 2857 2858 2859 2860 2861 2862 2863 2864 2865 | isa = PBXBuildFile; settings = { }; }; F53756B2016C525F01DC9062 = { isa = PBXTargetDependency; target = F53755DF016C38D201DC9062; }; F56570CF01722FA201DC9062 = { buildActionMask = 2147483647; files = ( ); generatedFileNames = ( ); isa = PBXShellScriptBuildPhase; | > > > > > > > > > > > > > > > > > > > > > > > > < > | 2855 2856 2857 2858 2859 2860 2861 2862 2863 2864 2865 2866 2867 2868 2869 2870 2871 2872 2873 2874 2875 2876 2877 2878 2879 2880 2881 2882 2883 2884 2885 2886 2887 2888 2889 2890 2891 2892 2893 2894 2895 2896 2897 2898 2899 2900 2901 2902 2903 | isa = PBXBuildFile; settings = { }; }; F53756B2016C525F01DC9062 = { isa = PBXTargetDependency; target = F53755DF016C38D201DC9062; }; F55BC46802B2D38B01DC9062 = { isa = PBXFileReference; name = tkPanedWindow.c; path = ../generic/tkPanedWindow.c; refType = 2; }; F55BC46902B2D38B01DC9062 = { fileRef = F55BC46802B2D38B01DC9062; isa = PBXBuildFile; settings = { }; }; F55BC46A02B2D3F301DC9062 = { isa = PBXFileReference; name = panedwindow.tcl; path = ../library/panedwindow.tcl; refType = 2; }; F55BC46B02B2D3F301DC9062 = { fileRef = F55BC46A02B2D3F301DC9062; isa = PBXBuildFile; settings = { }; }; F56570CF01722FA201DC9062 = { buildActionMask = 2147483647; files = ( ); generatedFileNames = ( ); isa = PBXShellScriptBuildPhase; neededFileNames = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "rm -rf \"${SYMROOT}/${PRODUCT_NAME}.${WRAPPER_EXTENSION}/Versions/A\""; }; F5875C7B016FEF1D01DC9062 = { isa = PBXFrameworkReference; path = Tcl.framework; refType = 3; |
︙ | ︙ | |||
2899 2900 2901 2902 2903 2904 2905 2906 2907 2908 2909 2910 2911 2912 2913 2914 2915 2916 2917 2918 2919 | F5B1FC14016FFE3501DC9062, F5B1FC15016FFE3501DC9062, F5B1FC16016FFE3501DC9062, F5B1FC17016FFE3501DC9062, F5B1FC18016FFE3501DC9062, F5B1FC19016FFE3501DC9062, F5B1FC1A016FFE3501DC9062, F5B1FC1B016FFE3501DC9062, F5B1FC1C016FFE3501DC9062, F5B1FC1D016FFE3501DC9062, F5B1FC1E016FFE3501DC9062, F5B1FC1F016FFE3501DC9062, F5B1FC20016FFE3501DC9062, F5B1FC21016FFE3501DC9062, F5B1FC22016FFE3501DC9062, F5B1FC23016FFE3501DC9062, F5B1FC24016FFE3501DC9062, F5B1FC25016FFE3501DC9062, F5B1FC26016FFE3501DC9062, ); isa = PBXCopyFilesBuildPhase; | > | | 2927 2928 2929 2930 2931 2932 2933 2934 2935 2936 2937 2938 2939 2940 2941 2942 2943 2944 2945 2946 2947 2948 2949 2950 2951 2952 2953 2954 2955 2956 | F5B1FC14016FFE3501DC9062, F5B1FC15016FFE3501DC9062, F5B1FC16016FFE3501DC9062, F5B1FC17016FFE3501DC9062, F5B1FC18016FFE3501DC9062, F5B1FC19016FFE3501DC9062, F5B1FC1A016FFE3501DC9062, F55BC46B02B2D3F301DC9062, F5B1FC1B016FFE3501DC9062, F5B1FC1C016FFE3501DC9062, F5B1FC1D016FFE3501DC9062, F5B1FC1E016FFE3501DC9062, F5B1FC1F016FFE3501DC9062, F5B1FC20016FFE3501DC9062, F5B1FC21016FFE3501DC9062, F5B1FC22016FFE3501DC9062, F5B1FC23016FFE3501DC9062, F5B1FC24016FFE3501DC9062, F5B1FC25016FFE3501DC9062, F5B1FC26016FFE3501DC9062, ); isa = PBXCopyFilesBuildPhase; runOnlyForDeploymentPostprocessing = 0; }; F5B1FC09016FFE3501DC9062 = { fileRef = F5DF0928016CD3F901DC9062; isa = PBXBuildFile; settings = { }; }; |
︙ | ︙ | |||
3096 3097 3098 3099 3100 3101 3102 | F5B1FC26016FFE3501DC9062 = { fileRef = F5DF0945016CD3F901DC9062; isa = PBXBuildFile; settings = { }; }; F5C1D51901B88F9A01DC9062 = { | | < > | 3125 3126 3127 3128 3129 3130 3131 3132 3133 3134 3135 3136 3137 3138 3139 3140 3141 3142 3143 3144 3145 3146 3147 | F5B1FC26016FFE3501DC9062 = { fileRef = F5DF0945016CD3F901DC9062; isa = PBXBuildFile; settings = { }; }; F5C1D51901B88F9A01DC9062 = { buildActionMask = 8; files = ( ); generatedFileNames = ( ); isa = PBXShellScriptBuildPhase; neededFileNames = ( ); runOnlyForDeploymentPostprocessing = 1; shellPath = /bin/sh; shellScript = "source buildConfig"; }; F5C88659017D625C01DC9062 = { children = ( F5C8865A017D625C01DC9062, F5C8865B017D625C01DC9062, |
︙ | ︙ | |||
3173 3174 3175 3176 3177 3178 3179 3180 3181 3182 3183 3184 3185 3186 | F5DF0933016CD3F901DC9062, F5DF0934016CD3F901DC9062, F5DF0935016CD3F901DC9062, F5DF0936016CD3F901DC9062, F5DF0937016CD3F901DC9062, F5DF0938016CD3F901DC9062, F5DF0939016CD3F901DC9062, F5DF093A016CD3F901DC9062, F5DF093B016CD3F901DC9062, F5DF093C016CD3F901DC9062, F5DF093D016CD3F901DC9062, F5DF093E016CD3F901DC9062, F5DF093F016CD3F901DC9062, F5DF0940016CD3F901DC9062, | > | 3202 3203 3204 3205 3206 3207 3208 3209 3210 3211 3212 3213 3214 3215 3216 | F5DF0933016CD3F901DC9062, F5DF0934016CD3F901DC9062, F5DF0935016CD3F901DC9062, F5DF0936016CD3F901DC9062, F5DF0937016CD3F901DC9062, F5DF0938016CD3F901DC9062, F5DF0939016CD3F901DC9062, F55BC46A02B2D3F301DC9062, F5DF093A016CD3F901DC9062, F5DF093B016CD3F901DC9062, F5DF093C016CD3F901DC9062, F5DF093D016CD3F901DC9062, F5DF093E016CD3F901DC9062, F5DF093F016CD3F901DC9062, F5DF0940016CD3F901DC9062, |
︙ | ︙ | |||
3227 3228 3229 3230 3231 3232 3233 3234 3235 3236 3237 3238 3239 3240 | F5DF092D016CD3F901DC9062 = { isa = PBXFileReference; name = console.tcl; path = ../library/console.tcl; refType = 2; }; F5DF092E016CD3F901DC9062 = { isa = PBXFolderReference; name = demos; path = ../library/demos; refType = 2; }; F5DF092F016CD3F901DC9062 = { isa = PBXFileReference; | > | 3257 3258 3259 3260 3261 3262 3263 3264 3265 3266 3267 3268 3269 3270 3271 | F5DF092D016CD3F901DC9062 = { isa = PBXFileReference; name = console.tcl; path = ../library/console.tcl; refType = 2; }; F5DF092E016CD3F901DC9062 = { includeInIndex = 0; isa = PBXFolderReference; name = demos; path = ../library/demos; refType = 2; }; F5DF092F016CD3F901DC9062 = { isa = PBXFileReference; |
︙ | ︙ | |||
3251 3252 3253 3254 3255 3256 3257 3258 3259 3260 3261 3262 3263 3264 | F5DF0931016CD3F901DC9062 = { isa = PBXFileReference; name = focus.tcl; path = ../library/focus.tcl; refType = 2; }; F5DF0932016CD3F901DC9062 = { isa = PBXFolderReference; name = images; path = ../library/images; refType = 2; }; F5DF0933016CD3F901DC9062 = { isa = PBXFileReference; | > | 3282 3283 3284 3285 3286 3287 3288 3289 3290 3291 3292 3293 3294 3295 3296 | F5DF0931016CD3F901DC9062 = { isa = PBXFileReference; name = focus.tcl; path = ../library/focus.tcl; refType = 2; }; F5DF0932016CD3F901DC9062 = { includeInIndex = 0; isa = PBXFolderReference; name = images; path = ../library/images; refType = 2; }; F5DF0933016CD3F901DC9062 = { isa = PBXFileReference; |
︙ | ︙ | |||
3275 3276 3277 3278 3279 3280 3281 3282 3283 3284 3285 3286 3287 3288 | F5DF0935016CD3F901DC9062 = { isa = PBXFileReference; name = msgbox.tcl; path = ../library/msgbox.tcl; refType = 2; }; F5DF0936016CD3F901DC9062 = { isa = PBXFolderReference; name = msgs; path = ../library/msgs; refType = 2; }; F5DF0937016CD3F901DC9062 = { isa = PBXFileReference; | > | 3307 3308 3309 3310 3311 3312 3313 3314 3315 3316 3317 3318 3319 3320 3321 | F5DF0935016CD3F901DC9062 = { isa = PBXFileReference; name = msgbox.tcl; path = ../library/msgbox.tcl; refType = 2; }; F5DF0936016CD3F901DC9062 = { includeInIndex = 0; isa = PBXFolderReference; name = msgs; path = ../library/msgs; refType = 2; }; F5DF0937016CD3F901DC9062 = { isa = PBXFileReference; |
︙ | ︙ | |||
3377 3378 3379 3380 3381 3382 3383 | F5FBD6E30173513601DC9062 = { buildActionMask = 2147483647; files = ( ); generatedFileNames = ( ); isa = PBXShellScriptBuildPhase; | < > | 3410 3411 3412 3413 3414 3415 3416 3417 3418 3419 3420 3421 3422 3423 3424 3425 | F5FBD6E30173513601DC9062 = { buildActionMask = 2147483647; files = ( ); generatedFileNames = ( ); isa = PBXShellScriptBuildPhase; neededFileNames = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = pwd; }; }; rootObject = F537552A016C352C01DC9062; } |
Changes to macosx/tkMacOSXAppInit.c.
1 2 3 4 5 6 7 8 9 10 11 12 13 | /* * tkAppInit.c -- * * Provides a default version of the Tcl_AppInit procedure for * use in wish and similar Tk-based applications. * * Copyright (c) 1993 The Regents of the University of California. * Copyright (c) 1994-1997 Sun Microsystems, Inc. * Copyright 2001, Apple Computer, Inc. * * See the file "license.terms" for information on usage and redistribution * of this file, and for a DISCLAIMER OF ALL WARRANTIES. * | | | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | /* * tkAppInit.c -- * * Provides a default version of the Tcl_AppInit procedure for * use in wish and similar Tk-based applications. * * Copyright (c) 1993 The Regents of the University of California. * Copyright (c) 1994-1997 Sun Microsystems, Inc. * Copyright 2001, Apple Computer, Inc. * * See the file "license.terms" for information on usage and redistribution * of this file, and for a DISCLAIMER OF ALL WARRANTIES. * * RCS: @(#) $Id: tkMacOSXAppInit.c,v 1.1.2.6 2002/06/10 05:38:26 wolfsuit Exp $ */ #include <pthread.h> #include "tk.h" #include "tclInt.h" #include "locale.h" #include <Carbon/Carbon.h> |
︙ | ︙ | |||
62 63 64 65 66 67 68 69 70 71 72 73 74 75 | * returns either. * * Side effects: * Whatever the application does. * *---------------------------------------------------------------------- */ int main(argc, argv) int argc; /* Number of command-line arguments. */ char **argv; /* Values of command-line arguments. */ { Tcl_Interp *interp; | > > > > > > > | 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 | * returns either. * * Side effects: * Whatever the application does. * *---------------------------------------------------------------------- */ OSStatus myWindowHandler (EventHandlerCallRef inHandlerCallRef, EventRef inEvent, void *inUserData) { return noErr; } int main(argc, argv) int argc; /* Number of command-line arguments. */ char **argv; /* Values of command-line arguments. */ { Tcl_Interp *interp; |
︙ | ︙ | |||
141 142 143 144 145 146 147 | free(startupScript); } CFRelease(appMainURL); } } #endif | < | | 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 | free(startupScript); } CFRelease(appMainURL); } } #endif textEncoding=GetApplicationTextEncoding(); /* * Now add the scripts folder to the auto_path. */ Tk_Main(argc,argv,TK_LOCAL_APPINIT); return 0; /* Needed only to prevent compiler warning. */ } /* *---------------------------------------------------------------------- * * Tcl_AppInit -- * * This procedure performs application-specific initialization. * Most applications, especially those that incorporate additional |
︙ | ︙ | |||
284 285 286 287 288 289 290 291 292 293 294 295 296 | * Specify a user-specific startup file to invoke if the application * is run interactively. Typically the startup file is "~/.apprc" * where "app" is the name of the application. If this line is deleted * then no user-specific startup file will be run under any conditions. */ Tcl_SetVar(interp, "tcl_rcFileName", "~/.wishrc", TCL_GLOBAL_ONLY); return TCL_OK; error: return TCL_ERROR; } | > > > > > > > > > > > > > > > > > > < | 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 | * Specify a user-specific startup file to invoke if the application * is run interactively. Typically the startup file is "~/.apprc" * where "app" is the name of the application. If this line is deleted * then no user-specific startup file will be run under any conditions. */ Tcl_SetVar(interp, "tcl_rcFileName", "~/.wishrc", TCL_GLOBAL_ONLY); { Rect windowRect = {50, 50, 150, 150}; WindowRef windowRef; EventTargetRef target; struct EventTypeSpec myEventSpec = {kEventClassMouse, kEventMouseDown}; Boolean isValid; OSStatus result; CreateNewWindow (kDocumentWindowClass, kWindowStandardHandlerAttribute, &windowRect, &windowRef); result = InstallStandardEventHandler (GetWindowEventTarget (windowRef)); result = InstallWindowEventHandler (windowRef, NewEventHandlerUPP (myWindowHandler), 1, &myEventSpec, NULL, NULL); TransitionWindow(windowRef, kWindowZoomTransitionEffect, kWindowShowTransitionAction, NULL); } return TCL_OK; error: return TCL_ERROR; } |
Changes to macosx/tkMacOSXDefault.h.
1 2 3 4 5 6 7 8 9 10 11 12 13 | /* * tkMacOSXDefault.h -- * * This file defines the defaults for all options for all of * the Tk widgets. * * Copyright (c) 1991-1994 The Regents of the University of California. * Copyright (c) 1994-1997 Sun Microsystems, Inc. * Copyright 2001, Apple Computer, Inc. * * See the file "license.terms" for information on usage and redistribution * of this file, and for a DISCLAIMER OF ALL WARRANTIES. * | | | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | /* * tkMacOSXDefault.h -- * * This file defines the defaults for all options for all of * the Tk widgets. * * Copyright (c) 1991-1994 The Regents of the University of California. * Copyright (c) 1994-1997 Sun Microsystems, Inc. * Copyright 2001, Apple Computer, Inc. * * See the file "license.terms" for information on usage and redistribution * of this file, and for a DISCLAIMER OF ALL WARRANTIES. * * RCS: @(#) $Id: tkMacOSXDefault.h,v 1.1.2.3 2002/06/10 05:38:26 wolfsuit Exp $ */ #ifndef _TKMACDEFAULT #define _TKMACDEFAULT /* * The definitions below provide symbolic names for the default colors. |
︙ | ︙ | |||
357 358 359 360 361 362 363 364 365 366 367 368 369 370 | #define DEF_MESSAGE_PADX "-1" #define DEF_MESSAGE_PADY "-1" #define DEF_MESSAGE_RELIEF "flat" #define DEF_MESSAGE_TAKE_FOCUS "0" #define DEF_MESSAGE_TEXT "" #define DEF_MESSAGE_TEXT_VARIABLE "" #define DEF_MESSAGE_WIDTH "0" /* * Defaults for scales: */ #define DEF_SCALE_ACTIVE_BG_COLOR ACTIVE_BG #define DEF_SCALE_ACTIVE_BG_MONO BLACK | > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 | #define DEF_MESSAGE_PADX "-1" #define DEF_MESSAGE_PADY "-1" #define DEF_MESSAGE_RELIEF "flat" #define DEF_MESSAGE_TAKE_FOCUS "0" #define DEF_MESSAGE_TEXT "" #define DEF_MESSAGE_TEXT_VARIABLE "" #define DEF_MESSAGE_WIDTH "0" /* * Defaults for panedwindows */ #define DEF_PANEDWINDOW_BG_COLOR NORMAL_BG #define DEF_PANEDWINDOW_BG_MONO WHITE #define DEF_PANEDWINDOW_BORDERWIDTH "2" #define DEF_PANEDWINDOW_CURSOR "" #define DEF_PANEDWINDOW_HANDLEPAD "8" #define DEF_PANEDWINDOW_HANDLESIZE "8" #define DEF_PANEDWINDOW_HEIGHT "" #define DEF_PANEDWINDOW_OPAQUERESIZE "0" #define DEF_PANEDWINDOW_ORIENT "horizontal" #define DEF_PANEDWINDOW_RELIEF "flat" #define DEF_PANEDWINDOW_SASHCURSOR "" #define DEF_PANEDWINDOW_SASHPAD "2" #define DEF_PANEDWINDOW_SASHRELIEF "raised" #define DEF_PANEDWINDOW_SASHWIDTH "2" #define DEF_PANEDWINDOW_SHOWHANDLE "1" #define DEF_PANEDWINDOW_WIDTH "" /* * Defaults for panedwindow panes */ #define DEF_PANEDWINDOW_PANE_AFTER "" #define DEF_PANEDWINDOW_PANE_BEFORE "" #define DEF_PANEDWINDOW_PANE_HEIGHT "" #define DEF_PANEDWINDOW_PANE_MINSIZE "0" #define DEF_PANEDWINDOW_PANE_PADX "0" #define DEF_PANEDWINDOW_PANE_PADY "0" #define DEF_PANEDWINDOW_PANE_STICKY "nsew" #define DEF_PANEDWINDOW_PANE_WIDTH "" /* * Defaults for scales: */ #define DEF_SCALE_ACTIVE_BG_COLOR ACTIVE_BG #define DEF_SCALE_ACTIVE_BG_MONO BLACK |
︙ | ︙ |
Changes to macosx/tkMacOSXEvent.c.
︙ | ︙ | |||
8 9 10 11 12 13 14 | * * Copyright (c) 1995-1997 Sun Microsystems, Inc. * Copyright 2001, Apple Computer, Inc. * * See the file "license.terms" for information on usage and redistribution * of this file, and for a DISCLAIMER OF ALL WARRANTIES. * | | | 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | * * Copyright (c) 1995-1997 Sun Microsystems, Inc. * Copyright 2001, Apple Computer, Inc. * * See the file "license.terms" for information on usage and redistribution * of this file, and for a DISCLAIMER OF ALL WARRANTIES. * * RCS: @(#) $Id: tkMacOSXEvent.c,v 1.1.2.3 2002/06/10 05:38:26 wolfsuit Exp $ */ #include <stdio.h> #include <stdlib.h> #include <string.h> #include <pthread.h> #include <sys/types.h> |
︙ | ︙ | |||
260 261 262 263 264 265 266 | TkMacOSXProcessEvent(&macEvent,&eventStatus); if (!eventStatus.handledByTk) { if (!targetRef) { targetRef=GetEventDispatcherTarget(); } err= SendEventToEventTarget(macEvent.eventRef,targetRef); | | | 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 | TkMacOSXProcessEvent(&macEvent,&eventStatus); if (!eventStatus.handledByTk) { if (!targetRef) { targetRef=GetEventDispatcherTarget(); } err= SendEventToEventTarget(macEvent.eventRef,targetRef); if (err != noErr /* && err != eventNotHandledErr */) { fprintf(stderr, "RCNE SendEventToEventTarget (%s) failed, %d\n", CarbonEventToAscii(macEvent.eventRef,buf ),err); } } ReleaseEvent(macEvent.eventRef); return 0; } } |
Changes to macosx/tkMacOSXKeyEvent.c.
︙ | ︙ | |||
376 377 378 379 380 381 382 | TkWindow *winPtr) /* Capture window, or NULL. */ { while ((winPtr != NULL) && !Tk_IsTopLevel(winPtr)) { winPtr = winPtr->parentPtr; } gGrabWinPtr = (Tk_Window) winPtr; } | > > > > > > > > > > > > > > > > > > > > > > > > > > > | 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 | TkWindow *winPtr) /* Capture window, or NULL. */ { while ((winPtr != NULL) && !Tk_IsTopLevel(winPtr)) { winPtr = winPtr->parentPtr; } gGrabWinPtr = (Tk_Window) winPtr; } /* *---------------------------------------------------------------------- * * Tk_SetCaretPos -- * * This enables correct placement of the XIM caret. This is called * by widgets to indicate their cursor placement, and the caret * location is used by TkpGetString to place the XIM caret. * * Results: * None * * Side effects: * None * *---------------------------------------------------------------------- */ void Tk_SetCaretPos(tkwin, x, y, height) Tk_Window tkwin; int x; int y; int height; { } |
Changes to macosx/tkMacOSXMouseEvent.c.
︙ | ︙ | |||
167 168 169 170 171 172 173 | return 0; } medPtr->state |= 1 << ((mouseButton-1)+8); } medPtr->windowPart= FindWindow(where, &medPtr->whichWin); window = TkMacOSXGetXWindow(medPtr->whichWin); | > > > | > | 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 | return 0; } medPtr->state |= 1 << ((mouseButton-1)+8); } medPtr->windowPart= FindWindow(where, &medPtr->whichWin); window = TkMacOSXGetXWindow(medPtr->whichWin); if (medPtr->whichWin != NULL && window == None) { statusPtr->handledByTk = 0; return 0; } frontWindow = FrontWindow(); medPtr->activeNonFloating = ActiveNonFloatingWindow(); /* * The window manager only needs to know about mouse down events * and sometimes we need to "eat" the mouse up. Otherwise, we * just pass the event to Tk. |
︙ | ︙ |
Changes to macosx/tkMacOSXXStubs.c.
︙ | ︙ | |||
8 9 10 11 12 13 14 | * * Copyright (c) 1995-1997 Sun Microsystems, Inc. * Copyright 2001, Apple Computer, Inc. * * See the file "license.terms" for information on usage and redistribution * of this file, and for a DISCLAIMER OF ALL WARRANTIES. * | | | 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | * * Copyright (c) 1995-1997 Sun Microsystems, Inc. * Copyright 2001, Apple Computer, Inc. * * See the file "license.terms" for information on usage and redistribution * of this file, and for a DISCLAIMER OF ALL WARRANTIES. * * RCS: @(#) $Id: tkMacOSXXStubs.c,v 1.1.2.3 2002/06/10 05:38:26 wolfsuit Exp $ */ #include "tkInt.h" #include <X11/X.h> #include <X11/Xlib.h> #include <stdio.h> #include <stdlib.h> |
︙ | ︙ | |||
136 137 138 139 140 141 142 143 144 145 146 147 148 149 | screen->root_visual->red_mask = 0x00FF0000; screen->root_visual->green_mask = 0x0000FF00; screen->root_visual->blue_mask = 0x000000FF; screen->root_visual->bits_per_rgb = 24; screen->root_visual->map_entries = 2 ^ 8; gMacDisplay = (TkDisplay *) ckalloc(sizeof(TkDisplay)); gMacDisplay->display = display; return gMacDisplay; } /* *---------------------------------------------------------------------- * | > > > > > > > | 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 | screen->root_visual->red_mask = 0x00FF0000; screen->root_visual->green_mask = 0x0000FF00; screen->root_visual->blue_mask = 0x000000FF; screen->root_visual->bits_per_rgb = 24; screen->root_visual->map_entries = 2 ^ 8; gMacDisplay = (TkDisplay *) ckalloc(sizeof(TkDisplay)); /* * This is the quickest way to make sure that all the *Init * flags get properly initialized */ bzero (gMacDisplay, sizeof (TkDisplay)); gMacDisplay->display = display; return gMacDisplay; } /* *---------------------------------------------------------------------- * |
︙ | ︙ |
Changes to tests/all.tcl.
1 2 3 4 5 6 7 | # all.tcl -- # # This file contains a top-level script to run all of the Tk # tests. Execute it by invoking "source all.tcl" when running tktest # in this directory. # # Copyright (c) 1998-1999 by Scriptics Corporation. | < | > > > | | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | # all.tcl -- # # This file contains a top-level script to run all of the Tk # tests. Execute it by invoking "source all.tcl" when running tktest # in this directory. # # Copyright (c) 1998-1999 by Scriptics Corporation. # # See the file "license.terms" for information on usage and redistribution # of this file, and for a DISCLAIMER OF ALL WARRANTIES. # # RCS: @(#) $Id: all.tcl,v 1.4.18.1 2002/06/10 05:38:26 wolfsuit Exp $ if {[lsearch [namespace children] ::tcltest] == -1} { source [file join [pwd] [file dirname [info script]] defs.tcl] } set ::tcltest::testSingleFile false puts stdout "Tk $tk_patchLevel tests running in interp: [info nameofexecutable]" |
︙ | ︙ | |||
59 60 61 62 63 64 65 | } } # cleanup puts stdout "\nTests ended at [eval $timeCmd]" ::tcltest::cleanupTests 1 return | < < < < < < < < < < < < < | 61 62 63 64 65 66 67 | } } # cleanup puts stdout "\nTests ended at [eval $timeCmd]" ::tcltest::cleanupTests 1 return |
Changes to tests/bind.test.
1 2 3 4 5 6 7 8 9 | # This file is a Tcl script to test out Tk's "bind" and "bindtags" # commands plus the procedures in tkBind.c. It is organized in the # standard fashion for Tcl tests. # # Copyright (c) 1994 The Regents of the University of California. # Copyright (c) 1994-1995 Sun Microsystems, Inc. # Copyright (c) 1998-1999 by Scriptics Corporation. # All rights reserved. # | | | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | # This file is a Tcl script to test out Tk's "bind" and "bindtags" # commands plus the procedures in tkBind.c. It is organized in the # standard fashion for Tcl tests. # # Copyright (c) 1994 The Regents of the University of California. # Copyright (c) 1994-1995 Sun Microsystems, Inc. # Copyright (c) 1998-1999 by Scriptics Corporation. # All rights reserved. # # RCS: @(#) $Id: bind.test,v 1.9.2.2 2002/06/10 05:38:26 wolfsuit Exp $ if {[lsearch [namespace children] ::tcltest] == -1} { source [file join [pwd] [file dirname [info script]] defs.tcl] } catch {destroy .b} toplevel .b -width 100 -height 50 |
︙ | ︙ | |||
1941 1942 1943 1944 1945 1946 1947 | list [catch {event gen .xyz <Control-v>} msg] $msg } {1 {bad window path name ".xyz"}} test bind-22.2 {HandleEventGenerate} { list [catch {event gen zzz <Control-v>} msg] $msg } {1 {bad window name/identifier "zzz"}} test bind-22.3 {HandleEventGenerate} { list [catch {event gen 47 <Control-v>} msg] $msg | | | 1941 1942 1943 1944 1945 1946 1947 1948 1949 1950 1951 1952 1953 1954 1955 | list [catch {event gen .xyz <Control-v>} msg] $msg } {1 {bad window path name ".xyz"}} test bind-22.2 {HandleEventGenerate} { list [catch {event gen zzz <Control-v>} msg] $msg } {1 {bad window name/identifier "zzz"}} test bind-22.3 {HandleEventGenerate} { list [catch {event gen 47 <Control-v>} msg] $msg } {1 {bad window name/identifier "47"}} test bind-22.4 {HandleEventGenerate} { setup bind .b.f <Button> {set x "%s %b"} set x {} event gen [winfo id .b.f] <Control-Button-1> -state 260 set x } {260 1} |
︙ | ︙ | |||
2042 2043 2044 2045 2046 2047 2048 | lappend x foo update set x } {foo 99 100 101 102} test bind-22.17 {HandleEventGenerate} { list [catch {event gen . <Button> -when xyz} msg] $msg } {1 {bad -when value "xyz": must be now, head, mark, or tail}} | > > > > | | 2042 2043 2044 2045 2046 2047 2048 2049 2050 2051 2052 2053 2054 2055 2056 2057 2058 2059 2060 | lappend x foo update set x } {foo 99 100 101 102} test bind-22.17 {HandleEventGenerate} { list [catch {event gen . <Button> -when xyz} msg] $msg } {1 {bad -when value "xyz": must be now, head, mark, or tail}} test bind-22.18 {HandleEventGenerate} { # Bug 411307 list [catch {event gen . <a> -root 98765} msg] $msg } {1 {bad window name/identifier "98765"}} set i 19 foreach check { {<Configure> %a {-above .xyz} {{1 {bad window path name ".xyz"}}}} {<Configure> %a {-above .b} {[winfo id .b]}} {<Configure> %a {-above xyz} {{1 {bad window name/identifier "xyz"}}}} {<Configure> %a {-above [winfo id .b]} {[winfo id .b]}} {<Key> %b {-above .} {{1 {<Key> event doesn't accept "-above" option}}}} |
︙ | ︙ | |||
2669 2670 2671 2672 2673 2674 2675 | setup set x {} bind .b.f <MouseWheel> {set x "%D %x %y"} event gen .b.f <MouseWheel> -delta 240 -x 10 -y 30 set x } {240 10 30} | < < < < < < < < < < < < < < | 2673 2674 2675 2676 2677 2678 2679 2680 2681 2682 2683 2684 | setup set x {} bind .b.f <MouseWheel> {set x "%D %x %y"} event gen .b.f <MouseWheel> -delta 240 -x 10 -y 30 set x } {240 10 30} destroy .b # cleanup ::tcltest::cleanupTests return |
Changes to tests/canvas.test.
1 2 3 4 5 6 7 8 | # This file is a Tcl script to test out the procedures in tkCanvas.c, # which implements generic code for canvases. It is organized in the # standard fashion for Tcl tests. # # Copyright (c) 1995-1996 Sun Microsystems, Inc. # Copyright (c) 1998-2000 Ajuba Solutions. # All rights reserved. # | | | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | # This file is a Tcl script to test out the procedures in tkCanvas.c, # which implements generic code for canvases. It is organized in the # standard fashion for Tcl tests. # # Copyright (c) 1995-1996 Sun Microsystems, Inc. # Copyright (c) 1998-2000 Ajuba Solutions. # All rights reserved. # # RCS: @(#) $Id: canvas.test,v 1.13.2.2 2002/06/10 05:38:26 wolfsuit Exp $ if {[lsearch [namespace children] ::tcltest] == -1} { source [file join [pwd] [file dirname [info script]] defs.tcl] } foreach i [winfo children .] { destroy $i |
︙ | ︙ | |||
362 363 364 365 366 367 368 | test canvas-11.1 {canvas poly fill check, bug 5783} { # This would crash in 8.3.0 and 8.3.1 destroy .c pack [canvas .c] .c create polygon 0 0 100 100 200 50 \ -fill {} -stipple gray50 -outline black } 1 | < < | 362 363 364 365 366 367 368 369 370 371 372 373 374 375 | test canvas-11.1 {canvas poly fill check, bug 5783} { # This would crash in 8.3.0 and 8.3.1 destroy .c pack [canvas .c] .c create polygon 0 0 100 100 200 50 \ -fill {} -stipple gray50 -outline black } 1 test canvas-11.2 {canvas poly overlap fill check, bug 226357} { destroy .c pack [canvas .c] set result {} .c create poly 30 30 90 90 30 90 90 30 lappend result [.c find over 40 40 45 45]; # rect region inc. edge lappend result [.c find over 60 40 60 40]; # top-center point |
︙ | ︙ | |||
427 428 429 430 431 432 433 | # do this many times to improve chances of triggering the crash for {set i 0} {$i < 30} {incr i} { event generate .c <1> -x 100 -y 100 event generate .c <ButtonRelease-1> -x 100 -y 100 } set ::x } okokokokokokokokokokokokokokokokokokokokokokokokokokokokokok | < | 425 426 427 428 429 430 431 432 433 434 435 | # do this many times to improve chances of triggering the crash for {set i 0} {$i < 30} {incr i} { event generate .c <1> -x 100 -y 100 event generate .c <ButtonRelease-1> -x 100 -y 100 } set ::x } okokokokokokokokokokokokokokokokokokokokokokokokokokokokokok # cleanup ::tcltest::cleanupTests return |
Changes to tests/embed.test.
1 2 3 4 5 6 | # This file is a Tcl script to test out embedded Windows. # # Copyright (c) 1996-1997 Sun Microsystems, Inc. # Copyright (c) 1998-1999 by Scriptics Corporation. # All rights reserved. # | | | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 | # This file is a Tcl script to test out embedded Windows. # # Copyright (c) 1996-1997 Sun Microsystems, Inc. # Copyright (c) 1998-1999 by Scriptics Corporation. # All rights reserved. # # RCS: @(#) $Id: embed.test,v 1.1.2.2 2002/06/10 05:38:26 wolfsuit Exp $ if {[lsearch [namespace children] ::tcltest] == -1} { source [file join [pwd] [file dirname [info script]] defs.tcl] } proc deleteWindows {} { foreach i [winfo children .] { |
︙ | ︙ |
Changes to tests/entry.test.
1 2 3 4 5 6 7 8 | # This file is a Tcl script to test entry widgets in Tk. It is # organized in the standard fashion for Tcl tests. # # Copyright (c) 1994 The Regents of the University of California. # Copyright (c) 1994-1997 Sun Microsystems, Inc. # Copyright (c) 1998-1999 by Scriptics Corporation. # All rights reserved. # | | | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | # This file is a Tcl script to test entry widgets in Tk. It is # organized in the standard fashion for Tcl tests. # # Copyright (c) 1994 The Regents of the University of California. # Copyright (c) 1994-1997 Sun Microsystems, Inc. # Copyright (c) 1998-1999 by Scriptics Corporation. # All rights reserved. # # RCS: @(#) $Id: entry.test,v 1.11.2.2 2002/06/10 05:38:26 wolfsuit Exp $ if {[lsearch [namespace children] ::tcltest] == -1} { source [file join [pwd] [file dirname [info script]] defs.tcl] } foreach i [winfo children .] { destroy $i |
︙ | ︙ | |||
1502 1503 1504 1505 1506 1507 1508 | list [.e cget -validate] $::vVals } {focusout {.e -1 -1 newdata abcd {} focusout forced}} proc doval {W d i P s S v V} { set ::vVals [list $W $d $i $P $s $S $v $V] return 0 } | < > < > < < > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1502 1503 1504 1505 1506 1507 1508 1509 1510 1511 1512 1513 1514 1515 1516 1517 1518 1519 1520 1521 1522 1523 1524 1525 1526 1527 1528 1529 1530 1531 1532 1533 1534 1535 1536 1537 1538 1539 1540 1541 1542 1543 1544 1545 1546 1547 1548 1549 1550 1551 1552 1553 1554 1555 1556 1557 1558 1559 1560 1561 1562 1563 1564 1565 1566 1567 1568 1569 1570 1571 1572 1573 1574 1575 1576 1577 1578 1579 1580 1581 1582 1583 1584 1585 1586 1587 1588 1589 1590 1591 1592 1593 1594 1595 1596 1597 1598 1599 1600 1601 1602 | list [.e cget -validate] $::vVals } {focusout {.e -1 -1 newdata abcd {} focusout forced}} proc doval {W d i P s S v V} { set ::vVals [list $W $d $i $P $s $S $v $V] return 0 } test entry-19.18 {entry widget validation} { .e configure -validate all set ::e nextdata list [.e cget -validate] $::vVals } {none {.e -1 -1 nextdata newdata {} all forced}} proc doval {W d i P s S v V} { set ::vVals [list $W $d $i $P $s $S $v $V] set ::e mydata return 1 } ## This sets validate to none because it shows that we prevent a possible ## loop condition in the validation, when the entry textvar is also set test entry-19.19 {entry widget validation} { .e configure -validate all .e validate list [.e cget -validate] [.e get] $::vVals } {none mydata {.e -1 -1 nextdata nextdata {} all forced}} ## This leaves validate alone because we trigger validation through the ## textvar (a write trace), and the write during validation triggers ## nothing (by definition of avoiding loops on var traces). This is ## one of those "dangerous" conditions where the user will have a ## different value in the entry widget shown as is in the textvar. test entry-19.20 {entry widget validation} { .e configure -validate all set ::e testdata list [.e cget -validate] [.e get] $::e $::vVals } {all testdata mydata {.e -1 -1 testdata mydata {} all forced}} destroy .e catch {unset ::e ::vVals} ## ## End validation tests ## test entry-20.1 {widget deletion while active} { destroy .e entry .e -validate all \ -validatecommand { destroy %W ; return 1 } \ -invalidcommand bell update .e insert 0 abc winfo exists .e } 0 test entry-20.2 {widget deletion while active} { destroy .e entry .e -validate all \ -validatecommand { return 0 } \ -invalidcommand { destroy %W } .e insert 0 abc winfo exists .e } 0 test entry-20.3 {widget deletion while active} { destroy .e entry .e -validate all \ -validatecommand { rename .e {} ; return 1 } .e insert 0 abc winfo exists .e } 0 test entry-20.4 {widget deletion while active} { destroy .e entry .e -validate all \ -validatecommand { return 0 } \ -invalidcommand { rename .e {} } .e insert 0 abc winfo exists .e } 0 test entry-20.5 {widget deletion while active} { destroy .e entry .e -validatecommand { destroy .e ; return 0 } .e validate winfo exists .e } 0 test entry-20.6 {widget deletion while active} { destroy .e pack [entry .e] update .e config -xscrollcommand { destroy .e } update idle winfo exists .e } 0 # XXX Still need to write tests for EntryBlinkProc, EntryFocusProc, # and EntryTextVarProc. option clear # cleanup ::tcltest::cleanupTests return |
Changes to tests/event.test.
1 2 3 4 5 6 7 8 | # This file is a Tcl script to test the code in tkEvent.c. It is # organized in the standard fashion for Tcl tests. # # Copyright (c) 1994 The Regents of the University of California. # Copyright (c) 1994-1995 Sun Microsystems, Inc. # Copyright (c) 1998-1999 by Scriptics Corporation. # All rights reserved. # | | > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 | # This file is a Tcl script to test the code in tkEvent.c. It is # organized in the standard fashion for Tcl tests. # # Copyright (c) 1994 The Regents of the University of California. # Copyright (c) 1994-1995 Sun Microsystems, Inc. # Copyright (c) 1998-1999 by Scriptics Corporation. # All rights reserved. # # RCS: @(#) $Id: event.test,v 1.6.2.3 2002/06/10 05:38:26 wolfsuit Exp $ if {[lsearch [namespace children] ::tcltest] == -1} { source [file join [pwd] [file dirname [info script]] defs.tcl] } foreach i [winfo children .] { destroy $i } wm geometry . {} raise . # XXX This test file is woefully incomplete. Right now it only tests # a few of the procedures in tkEvent.c. Please add more tests whenever # possible. # Setup table used to query key events. proc _init_keypress_lookup { } { global keypress_lookup scan A %c start scan Z %c finish for {set i $start} {$i <= $finish} {incr i} { set l [format %c $i] set keypress_lookup($l) $l } scan a %c start scan z %c finish for {set i $start} {$i <= $finish} {incr i} { set l [format %c $i] set keypress_lookup($l) $l } scan 0 %c start scan 9 %c finish for {set i $start} {$i <= $finish} {incr i} { set l [format %c $i] set keypress_lookup($l) $l } array set keypress_lookup [list \ " " space \ ! exclam \ \" quotedbl \ \# numbersign \ \$ dollar \ % percent \ & ampersand \ ( parenleft \ ) parenright \ * asterisk \ + plus \ , comma \ - minus \ . period \ / slash \ : colon \ \; semicolon \ < less \ = equal \ > greater \ ? question \ @ at \ \[ bracketleft \ \\ backslash \ \] bracketright \ ^ asciicircum \ _ underscore \ \{ braceleft \ | bar \ \} braceright \ ~ asciitilde \ ' apostrophe \ "\n" Return] } # Lookup an event in the keypress table. # For example: # Q -> Q # . -> period # / -> slash # Delete -> Delete # Escape -> Escape proc _keypress_lookup { char } { global keypress_lookup if {! [info exists keypress_lookup]} { _init_keypress_lookup } if {$char == ""} { error "empty char" } if {[info exists keypress_lookup($char)]} { return $keypress_lookup($char) } else { return $char } } # Lookup and generate a pair of KeyPress and KeyRelease events proc _keypress { win key } { set keysym [_keypress_lookup $key] event generate $win <KeyPress-$keysym> _pause 50 event generate $win <KeyRelease-$keysym> _pause 50 } # Call _keypress for each character in the given string proc _keypress_string { win string } { foreach letter [split $string ""] { _keypress $win $letter } } # Delay script execution for a given amount of time proc _pause { {msecs 1000} } { global _pause if {! [info exists _pause(number)]} { set _pause(number) 0 } set num [incr _pause(number)] set _pause($num) 0 after $msecs "set _pause($num) 1" vwait _pause($num) unset _pause($num) } # Helper proc to convert index to x y position proc _text_ind_to_x_y { text ind } { foreach {x1 y1 width height} [$text bbox $ind] break set middle_y [expr {$y1 + ($height / 2)}] return [list $x1 $middle_y] } # Return selection only if owned by the given widget proc _get_selection { widget } { if {[string compare $widget [selection own]] != 0} { return "" } if {[catch {selection get} sel]} { return "" } return $sel } # Begining of the actual tests test event-1.1 {Tk_HandleEvent procedure, filter events for dead windows} { button .b -text Test pack .b bindtags .b .b update bind .b <Destroy> { lappend x destroy |
︙ | ︙ | |||
47 48 49 50 51 52 53 | pack [entry .e] update bind .e <Alt-z> {set ::event12result "1"} focus -force .e ; event generate .e <Alt-z> destroy .e set ::event12result } 1 | < < < > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 | pack [entry .e] update bind .e <Alt-z> {set ::event12result "1"} focus -force .e ; event generate .e <Alt-z> destroy .e set ::event12result } 1 test event-keypress-1.1 { type into entry widget and hit Return } { destroy .t set t [toplevel .t] set e [entry $t.e] pack $e set return_binding 0 bind $e <Return> {set return_binding 1} tkwait visibility $e focus -force $e _keypress_string $e HELLO\n list [$e get] $return_binding } {HELLO 1} test event-keypress-1.2 { type into entry widget and then delete some text } { destroy .t set t [toplevel .t] set e [entry $t.e] pack $e tkwait visibility $e focus -force $e _keypress_string $e MELLO _keypress $e BackSpace _keypress $e BackSpace $e get } MEL test event-keypress-1.3 { type into entry widget, triple click, hit Delete key, and then type some more } { destroy .t set t [toplevel .t] set e [entry $t.e] pack $e tkwait visibility $e focus -force $e _keypress_string $e JUMP set result [$e get] event generate $e <Enter> for {set i 0} {$i < 3} {incr i} { _pause 100 event generate $e <ButtonPress-1> _pause 100 event generate $e <ButtonRelease-1> } _keypress $e Delete _keypress_string $e UP lappend result [$e get] } {JUMP UP} test event-keypress-1.4 { type into text widget and hit Return } { destroy .t set t [toplevel .t] set e [text $t.e] pack $e set return_binding 0 bind $e <Return> {set return_binding 1} tkwait visibility $e focus -force $e _keypress_string $e HELLO\n list [$e get 1.0 end] $return_binding } [list "HELLO\n\n" 1] test event-keypress-1.5 { type into text widget and then delete some text } { destroy .t set t [toplevel .t] set e [text $t.e] pack $e tkwait visibility $e focus -force $e _keypress_string $e MELLO _keypress $e BackSpace _keypress $e BackSpace $e get 1.0 1.end } MEL test event-keypress-1.6 { type into text widget, triple click, hit Delete key, and then type some more } { destroy .t set t [toplevel .t] set e [text $t.e] pack $e tkwait visibility $e focus -force $e _keypress_string $e JUMP set result [$e get 1.0 1.end] event generate $e <Enter> for {set i 0} {$i < 3} {incr i} { _pause 100 event generate $e <ButtonPress-1> _pause 100 event generate $e <ButtonRelease-1> } _keypress $e Delete _keypress_string $e UP lappend result [$e get 1.0 1.end] } {JUMP UP} test event-click-drag-1.1 { click and drag in a text widget, this tests tkTextSelectTo in text.tcl } { destroy .t set t [toplevel .t] set e [text $t.e] pack $e tkwait visibility $e focus -force $e _keypress_string $e "A Tcl/Tk selection test!" set anchor 1.6 set selend 1.18 set result [list] lappend result [$e get 1.0 1.end] # Get the x,y coords of the second T in "Tcl/Tk" foreach {anchor_x anchor_y} [_text_ind_to_x_y $e $anchor] break # Click down to set the insert cursor position event generate $e <Enter> event generate $e <ButtonPress-1> -x $anchor_x -y $anchor_y # Save the position of the insert cursor lappend result [$e index insert] # Now drag until selend is highlighted, then click up set current $anchor while {[$e compare $current <= $selend]} { foreach {current_x current_y} [_text_ind_to_x_y $e $current] break event generate $e <B1-Motion> -x $current_x -y $current_y set current [$e index [list $current + 1 char]] _pause 50 } event generate $e <ButtonRelease-1> -x $current_x -y $current_y _pause 200 # Save the position of the insert cursor lappend result [$e index insert] # Save the highlighted text lappend result [_get_selection $e] # Now click and click and drag to the left, over "Tcl/Tk selection" event generate $e <ButtonPress-1> -x $current_x -y $current_y while {[$e compare $current >= [list $anchor - 4 char]]} { foreach {current_x current_y} [_text_ind_to_x_y $e $current] break event generate $e <B1-Motion> -x $current_x -y $current_y set current [$e index [list $current - 1 char]] _pause 50 } event generate $e <ButtonRelease-1> -x $current_x -y $current_y _pause 200 # Save the position of the insert cursor lappend result [$e index insert] # Save the highlighted text lappend result [_get_selection $e] } {{A Tcl/Tk selection test!} 1.6 1.18 {Tk selection} 1.2 {Tcl/Tk selection}} test event-click-drag-1.2 { click and drag in an entry widget, this tests tkEntryMouseSelect in entry.tcl } { destroy .t set t [toplevel .t] set e [entry $t.e] pack $e tkwait visibility $e focus -force $e _keypress_string $e "A Tcl/Tk selection!" set anchor 6 set selend 18 set result [list] lappend result [$e get] # Get the x,y coords of the second T in "Tcl/Tk" foreach {anchor_x anchor_y} [_text_ind_to_x_y $e $anchor] break # Click down to set the insert cursor position event generate $e <Enter> event generate $e <ButtonPress-1> -x $anchor_x -y $anchor_y # Save the position of the insert cursor lappend result [$e index insert] # Now drag until selend is highlighted, then click up set current $anchor |
︙ | ︙ | |||
93 94 95 96 97 98 99 | event generate $e <ButtonRelease-1> -x $current_x -y $current_y _pause 200 # Save the position of the insert cursor lappend result [$e index insert] # Save the highlighted text | | | > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557 558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 574 575 576 577 578 579 580 581 582 583 584 585 586 587 588 589 590 591 592 593 594 595 596 597 598 599 600 601 602 603 604 605 606 607 608 609 610 611 612 613 614 615 616 617 618 619 620 621 622 623 624 625 626 627 628 629 630 631 632 633 634 635 636 637 638 639 640 641 642 643 644 645 646 647 648 649 650 651 652 653 654 655 656 657 658 659 660 661 662 663 664 665 666 667 668 | event generate $e <ButtonRelease-1> -x $current_x -y $current_y _pause 200 # Save the position of the insert cursor lappend result [$e index insert] # Save the highlighted text lappend result [_get_selection $e] # Now click and click and drag to the left, over "Tcl/Tk selection" event generate $e <ButtonPress-1> -x $current_x -y $current_y while {$current >= ($anchor - 4)} { foreach {current_x current_y} [_text_ind_to_x_y $e $current] break event generate $e <B1-Motion> -x $current_x -y $current_y incr current -1 _pause 50 } event generate $e <ButtonRelease-1> -x $current_x -y $current_y _pause 200 # Save the position of the insert cursor lappend result [$e index insert] # Save the highlighted text lappend result [_get_selection $e] } {{A Tcl/Tk selection!} 6 18 {Tk selection} 2 {Tcl/Tk selection}} test event-double-click-drag-1.1 { click down, click up, click down again, then drag in a text widget } { destroy .t set t [toplevel .t] set e [text $t.e] pack $e tkwait visibility $e focus -force $e _keypress_string $e "Word select test" set anchor 1.8 # Get the x,y coords of the second e in "select" foreach {anchor_x anchor_y} [_text_ind_to_x_y $e $anchor] break # Click down, release, then click down again event generate $e <Enter> event generate $e <ButtonPress-1> -x $anchor_x -y $anchor_y _pause 50 event generate $e <ButtonRelease-1> -x $anchor_x -y $anchor_y _pause 50 event generate $e <ButtonPress-1> -x $anchor_x -y $anchor_y _pause 50 # Save the highlighted text set result [list] lappend result [_get_selection $e] # Insert cursor should be at end of "select" lappend result [$e index insert] # Move mouse one character to the left set current [$e index [list $anchor - 1 char]] foreach {current_x current_y} [_text_ind_to_x_y $e $current] break event generate $e <B1-Motion> -x $current_x -y $current_y _pause 50 # Insert cursor should be before the l in "select" lappend result [$e index insert] # Selection should still be the word "select" lappend result [_get_selection $e] # Move mouse to the space before the word "select" set current [$e index [list $current - 3 char]] foreach {current_x current_y} [_text_ind_to_x_y $e $current] break event generate $e <B1-Motion> -x $current_x -y $current_y _pause 200 lappend result [$e index insert] lappend result [_get_selection $e] # Move mouse to the r in "Word" set current 1.2 foreach {current_x current_y} [_text_ind_to_x_y $e $current] break event generate $e <B1-Motion> -x $current_x -y $current_y _pause 50 # Selection should now be "Word select" lappend result [_get_selection $e] # Insert cursor should be before the r in "Word" lappend result [$e index insert] set result } {select 1.11 1.7 select 1.4 { select} {Word select} 1.2} test event-double-click-drag-1.2 { click down, click up, click down again, then drag in an entry widget } { destroy .t set t [toplevel .t] set e [entry $t.e] pack $e tkwait visibility $e focus -force $e _keypress_string $e "Word select test" set anchor 8 # Get the x,y coords of the second e in "select" foreach {anchor_x anchor_y} [_text_ind_to_x_y $e $anchor] break # Click down, release, then click down again event generate $e <Enter> event generate $e <ButtonPress-1> -x $anchor_x -y $anchor_y _pause 50 event generate $e <ButtonRelease-1> -x $anchor_x -y $anchor_y _pause 50 event generate $e <ButtonPress-1> -x $anchor_x -y $anchor_y _pause 50 set result [list] lappend result [_get_selection $e] # Insert cursor should be at the end of "select" lappend result [$e index insert] # Move mouse one character to the left set current [expr {$anchor - 1}] foreach {current_x current_y} [_text_ind_to_x_y $e $current] break event generate $e <B1-Motion> -x $current_x -y $current_y _pause 50 # Insert cursor should be before the l in "select" lappend result [$e index insert] # Selection should still be the word "select" lappend result [_get_selection $e] # Move mouse to the space before the word "select" set current [expr {$current - 3}] foreach {current_x current_y} [_text_ind_to_x_y $e $current] break event generate $e <B1-Motion> -x $current_x -y $current_y _pause 50 lappend result [$e index insert] lappend result [_get_selection $e] # Move mouse to the r in "Word" set current [expr {$current - 2}] foreach {current_x current_y} [_text_ind_to_x_y $e $current] break event generate $e <B1-Motion> -x $current_x -y $current_y _pause 50 # Selection should now be "Word select" lappend result [_get_selection $e] # Insert cursor should be before the r in "Word" lappend result [$e index insert] set result } {select 11 7 select 4 { select} {Word select} 2} test event-triple-click-drag-1.1 { Triple click and drag across lines in a text widget, this should extend the selection to the new line } { destroy .t set t [toplevel .t] set e [text $t.e] pack $e tkwait visibility $e focus -force $e _keypress_string $e "LINE ONE\nLINE TWO\nLINE THREE" set anchor 3.2 # Triple click one third line leaving mouse down foreach {anchor_x anchor_y} [_text_ind_to_x_y $e $anchor] break event generate $e <Enter> event generate $e <ButtonPress-1> -x $anchor_x -y $anchor_y _pause 50 event generate $e <ButtonRelease-1> -x $anchor_x -y $anchor_y _pause 50 event generate $e <ButtonPress-1> -x $anchor_x -y $anchor_y _pause 50 event generate $e <ButtonRelease-1> -x $anchor_x -y $anchor_y _pause 50 event generate $e <ButtonPress-1> -x $anchor_x -y $anchor_y _pause 50 set result [list] lappend result [_get_selection $e] # Drag up to second line set current [$e index [list $anchor - 1 line]] foreach {current_x current_y} [_text_ind_to_x_y $e $current] break event generate $e <B1-Motion> -x $current_x -y $current_y _pause 50 lappend result [_get_selection $e] # Drag up to first line set current [$e index [list $current - 1 line]] foreach {current_x current_y} [_text_ind_to_x_y $e $current] break event generate $e <B1-Motion> -x $current_x -y $current_y _pause 50 lappend result [_get_selection $e] set result } [list "LINE THREE\n" "LINE TWO\nLINE THREE\n" \ "LINE ONE\nLINE TWO\nLINE THREE\n"] # cleanup destroy .t unset keypress_lookup rename _init_keypress_lookup {} rename _keypress_lookup {} rename _keypress {} rename _pause {} rename _text_ind_to_x_y {} rename _get_selection {} ::tcltest::cleanupTests return |
Changes to tests/filebox.test.
1 2 3 4 5 6 7 8 | # This file is a Tcl script to test out Tk's "tk_getOpenFile" and # "tk_getSaveFile" commands. It is organized in the standard fashion # for Tcl tests. # # Copyright (c) 1996 Sun Microsystems, Inc. # Copyright (c) 1998-1999 by Scriptics Corporation. # All rights reserved. # | | | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | # This file is a Tcl script to test out Tk's "tk_getOpenFile" and # "tk_getSaveFile" commands. It is organized in the standard fashion # for Tcl tests. # # Copyright (c) 1996 Sun Microsystems, Inc. # Copyright (c) 1998-1999 by Scriptics Corporation. # All rights reserved. # # RCS: @(#) $Id: filebox.test,v 1.11.2.1 2002/06/10 05:38:26 wolfsuit Exp $ # if {[lsearch [namespace children] ::tcltest] == -1} { source [file join [pwd] [file dirname [info script]] defs.tcl] } set tk_strictMotif_old $tk_strictMotif |
︙ | ︙ | |||
108 109 110 111 112 113 114 115 116 117 118 119 120 121 | set unknownOptionsMsg(tk_getOpenFile) {1 {bad option "-foo": must be -defaultextension, -filetypes, -initialdir, -initialfile, -multiple, -parent, or -title}} set unknownOptionsMsg(tk_getSaveFile) {1 {bad option "-foo": must be -defaultextension, -filetypes, -initialdir, -initialfile, -parent, or -title}} set tmpFile "filebox.tmp" makeFile { # this file can be empty! } $tmpFile foreach mode $modes { # # Test both the motif version and the "tk" version of the file dialog # box on Unix. # | > > > > > > > > > > > > > > > > > > > > | > > > > > > | | | > > > | > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | > > > | > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | > > > > > > > > > > > > > > > > > | > > > > > > > > > | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | < | | | < < < < | < | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | < < < < < < < < < < < < < < < < < < < < < | | | | | | | | | | | < < < < < | 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 | set unknownOptionsMsg(tk_getOpenFile) {1 {bad option "-foo": must be -defaultextension, -filetypes, -initialdir, -initialfile, -multiple, -parent, or -title}} set unknownOptionsMsg(tk_getSaveFile) {1 {bad option "-foo": must be -defaultextension, -filetypes, -initialdir, -initialfile, -parent, or -title}} set tmpFile "filebox.tmp" makeFile { # this file can be empty! } $tmpFile array set filters { 1 {} 2 { {"Text files" {.txt .doc} } {"Text files" {} TEXT} {"Tcl Scripts" {.tcl} TEXT} {"C Source Files" {.c .h} } {"All Source Files" {.tcl .c .h} } {"Image Files" {.gif} } {"Image Files" {.jpeg .jpg} } {"Image Files" "" {GIFF JPEG}} {"All files" *} } 3 { {"Text files" {.txt .doc} TEXT} {"Foo" {""} TEXT} } } foreach mode $modes { # # Test both the motif version and the "tk" version of the file dialog # box on Unix. # # Note that this can use the same test number twice! # set addedExtensions {} if {$tcl_platform(platform) == "unix"} { set tk_strictMotif $mode # Extension adding is only done when using the non-motif file # box with an extension-less filename if {!$mode} { set addedExtensions {NONE {} .txt .txt} } } test filebox-1.1 "tk_getOpenFile command" { list [catch {tk_getOpenFile -foo} msg] $msg } $unknownOptionsMsg(tk_getOpenFile) catch {tk_getOpenFile -foo 1} msg regsub -all , $msg "" options regsub \"-foo\" $options "" options foreach option $options { if {[string index $option 0] == "-"} { test filebox-1.2 "tk_getOpenFile command" { list [catch {tk_getOpenFile $option} msg] $msg } [list 1 "value for \"$option\" missing"] } } test filebox-1.3 "tk_getOpenFile command" { list [catch {tk_getOpenFile -foo bar} msg] $msg } $unknownOptionsMsg(tk_getOpenFile) test filebox-1.4 "tk_getOpenFile command" { list [catch {tk_getOpenFile -initialdir} msg] $msg } {1 {value for "-initialdir" missing}} test filebox-1.5 "tk_getOpenFile command" { list [catch {tk_getOpenFile -parent foo.bar} msg] $msg } {1 {bad window path name "foo.bar"}} test filebox-1.6 "tk_getOpenFile command" { list [catch {tk_getOpenFile -filetypes {Foo}} msg] $msg } {1 {bad file type "Foo", should be "typeName {extension ?extensions ...?} ?{macType ?macTypes ...?}?"}} if {[info commands tk::MotifFDialog] == "" && [info commands ::tk::dialog::file::] == ""} { set isNative 1 } else { set isNative 0 } set parent . set verylongstring longstring: set verylongstring $verylongstring$verylongstring set verylongstring $verylongstring$verylongstring set verylongstring $verylongstring$verylongstring set verylongstring $verylongstring$verylongstring # set verylongstring $verylongstring$verylongstring # set verylongstring $verylongstring$verylongstring # set verylongstring $verylongstring$verylongstring # set verylongstring $verylongstring$verylongstring # set verylongstring $verylongstring$verylongstring set color #404040 test filebox-2.1 "tk_getOpenFile command" {nonUnixUserInteraction} { ToPressButton $parent cancel tk_getOpenFile -title "Press Cancel ($verylongstring)" -parent $parent } "" set fileName $tmpFile set fileDir [pwd] set pathName [file join $fileDir $fileName] test filebox-2.2 "tk_getOpenFile command" {nonUnixUserInteraction} { ToPressButton $parent ok set choice [tk_getOpenFile -title "Press Ok" \ -parent $parent -initialfile $fileName -initialdir $fileDir] } $pathName test filebox-2.3 "tk_getOpenFile command" {nonUnixUserInteraction} { ToEnterFileByKey $parent $fileName $fileDir set choice [tk_getOpenFile -title "Enter \"$fileName\" and press Ok" \ -parent $parent -initialdir $fileDir] } $pathName test filebox-2.4 "tk_getOpenFile command" {nonUnixUserInteraction} { ToPressButton $parent ok set choice [tk_getOpenFile -title "Enter \"$fileName\" and press Ok" \ -parent $parent -initialdir . \ -initialfile $fileName] } $pathName test filebox-2.5 "tk_getOpenFile command" {nonUnixUserInteraction} { ToPressButton $parent ok set choice [tk_getOpenFile -title "Enter \"$fileName\" and press Ok" \ -parent $parent -initialdir /badpath \ -initialfile $fileName] } $pathName test filebox-2.6 "tk_getOpenFile command" {nonUnixUserInteraction} { toplevel .t1; toplevel .t2 wm geometry .t1 +0+0 wm geometry .t2 +0+0 ToPressButton .t1 ok set choice {} lappend choice [tk_getOpenFile \ -title "Enter \"$fileName\" and press Ok" \ -parent .t1 -initialdir $fileDir \ -initialfile $fileName] ToPressButton .t2 ok lappend choice [tk_getOpenFile \ -title "Enter \"$fileName\" and press Ok" \ -parent .t2 -initialdir $fileDir \ -initialfile $fileName] ToPressButton .t1 ok lappend choice [tk_getOpenFile \ -title "Enter \"$fileName\" and press Ok" \ -parent .t1 -initialdir $fileDir \ -initialfile $fileName] destroy .t1 destroy .t2 set choice } [list $pathName $pathName $pathName] foreach x [lsort -integer [array names filters]] { test filebox-3.$x "tk_getOpenFile command" {nonUnixUserInteraction} { ToPressButton $parent ok set choice [tk_getOpenFile -title "Press Ok" -filetypes $filters($x)\ -parent $parent -initialfile $fileName -initialdir $fileDir] } $pathName } test filebox-4.1 "tk_getSaveFile command" { list [catch {tk_getSaveFile -foo} msg] $msg } $unknownOptionsMsg(tk_getSaveFile) catch {tk_getSaveFile -foo 1} msg regsub -all , $msg "" options regsub \"-foo\" $options "" options foreach option $options { if {[string index $option 0] == "-"} { test filebox-4.2 "tk_getSaveFile command" { list [catch {tk_getSaveFile $option} msg] $msg } [list 1 "value for \"$option\" missing"] } } test filebox-4.3 "tk_getSaveFile command" { list [catch {tk_getSaveFile -foo bar} msg] $msg } $unknownOptionsMsg(tk_getSaveFile) test filebox-4.4 "tk_getSaveFile command" { list [catch {tk_getSaveFile -initialdir} msg] $msg } {1 {value for "-initialdir" missing}} test filebox-4.5 "tk_getSaveFile command" { list [catch {tk_getSaveFile -parent foo.bar} msg] $msg } {1 {bad window path name "foo.bar"}} test filebox-4.6 "tk_getSaveFile command" { list [catch {tk_getSaveFile -filetypes {Foo}} msg] $msg } {1 {bad file type "Foo", should be "typeName {extension ?extensions ...?} ?{macType ?macTypes ...?}?"}} if {[info commands tk::MotifFDialog] == "" && [info commands ::tk::dialog::file::] == ""} { set isNative 1 } else { set isNative 0 } set parent . set verylongstring longstring: set verylongstring $verylongstring$verylongstring set verylongstring $verylongstring$verylongstring set verylongstring $verylongstring$verylongstring set verylongstring $verylongstring$verylongstring # set verylongstring $verylongstring$verylongstring # set verylongstring $verylongstring$verylongstring # set verylongstring $verylongstring$verylongstring # set verylongstring $verylongstring$verylongstring # set verylongstring $verylongstring$verylongstring set color #404040 test filebox-5.1 "tk_getSaveFile command" {nonUnixUserInteraction} { ToPressButton $parent cancel tk_getSaveFile -title "Press Cancel ($verylongstring)" -parent $parent } "" set fileName "12x 455" set fileDir [pwd] set pathName [file join [pwd] $fileName] test filebox-5.2 "tk_getSaveFile command" {nonUnixUserInteraction} { ToPressButton $parent ok set choice [tk_getSaveFile -title "Press Ok" \ -parent $parent -initialfile $fileName -initialdir $fileDir] } $pathName test filebox-5.3 "tk_getSaveFile command" {nonUnixUserInteraction} { ToEnterFileByKey $parent $fileName $fileDir set choice [tk_getSaveFile -title "Enter \"$fileName\" and press Ok" \ -parent $parent -initialdir $fileDir] } $pathName test filebox-5.4 "tk_getSaveFile command" {nonUnixUserInteraction} { ToPressButton $parent ok set choice [tk_getSaveFile -title "Enter \"$fileName\" and press Ok" \ -parent $parent -initialdir . \ -initialfile $fileName] } $pathName test filebox-5.5 "tk_getSaveFile command" {nonUnixUserInteraction} { ToPressButton $parent ok set choice [tk_getSaveFile -title "Enter \"$fileName\" and press Ok" \ -parent $parent -initialdir /badpath \ -initialfile $fileName] } $pathName test filebox-5.6 "tk_getSaveFile command" {nonUnixUserInteraction} { toplevel .t1; toplevel .t2 wm geometry .t1 +0+0 wm geometry .t2 +0+0 ToPressButton .t1 ok set choice {} lappend choice [tk_getSaveFile \ -title "Enter \"$fileName\" and press Ok" \ -parent .t1 -initialdir $fileDir \ -initialfile $fileName] ToPressButton .t2 ok lappend choice [tk_getSaveFile \ -title "Enter \"$fileName\" and press Ok" \ -parent .t2 -initialdir $fileDir \ -initialfile $fileName] ToPressButton .t1 ok lappend choice [tk_getSaveFile \ -title "Enter \"$fileName\" and press Ok" \ -parent .t1 -initialdir $fileDir \ -initialfile $fileName] destroy .t1 destroy .t2 set choice } [list $pathName $pathName $pathName] foreach x [lsort -integer [array names filters]] { test filebox-6.$x "tk_getSaveFile command" {nonUnixUserInteraction} { ToPressButton $parent ok set choice [tk_getSaveFile -title "Press Ok" -filetypes $filters($x)\ -parent $parent -initialfile $fileName -initialdir $fileDir] } $pathName[lindex $addedExtensions $x] } # The rest of the tests need to be executed on Unix only. # The test whether the dialog box widgets were implemented correctly. # These tests are not # needed on the other platforms because they use native file dialogs. } set tk_strictMotif $tk_strictMotif_old # cleanup ::tcltest::cleanupTests return |
Changes to tests/focus.test.
1 2 3 4 5 6 7 8 | # This file is a Tcl script to test out the "focus" command and the # other procedures in the file tkFocus.c. It is organized in the # standard fashion for Tcl tests. # # Copyright (c) 1994-1996 Sun Microsystems, Inc. # Copyright (c) 1998-1999 by Scriptics Corporation. # All rights reserved. # | | | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | # This file is a Tcl script to test out the "focus" command and the # other procedures in the file tkFocus.c. It is organized in the # standard fashion for Tcl tests. # # Copyright (c) 1994-1996 Sun Microsystems, Inc. # Copyright (c) 1998-1999 by Scriptics Corporation. # All rights reserved. # # RCS: @(#) $Id: focus.test,v 1.7.2.2 2002/06/10 05:38:26 wolfsuit Exp $ if {[lsearch [namespace children] ::tcltest] == -1} { source [file join [pwd] [file dirname [info script]] defs.tcl] } eval destroy [winfo children .] wm geometry . {} |
︙ | ︙ | |||
568 569 570 571 572 573 574 | pack .t.f1 .t.f2 entry .t.f2.e1 -bg red pack .t.f2.e1 bind all <FocusIn> {lappend x "focus in %W %d"} bind all <FocusOut> {lappend x "focus out %W %d"} interp create child child eval "set argv {-use [winfo id .t.f1]}" | | | 568 569 570 571 572 573 574 575 576 577 578 579 580 581 582 | pack .t.f1 .t.f2 entry .t.f2.e1 -bg red pack .t.f2.e1 bind all <FocusIn> {lappend x "focus in %W %d"} bind all <FocusOut> {lappend x "focus out %W %d"} interp create child child eval "set argv {-use [winfo id .t.f1]}" load {} Tk child child eval { entry .e1 -bg lightBlue pack .e1 bind all <FocusIn> {lappend x "focus in %W %d"} bind all <FocusOut> {lappend x "focus out %W %d"} set x {} } |
︙ | ︙ |
Changes to tests/listbox.test.
1 2 3 4 5 6 7 8 | # This file is a Tcl script to test out the "listbox" command # of Tk. It is organized in the standard fashion for Tcl tests. # # Copyright (c) 1993-1994 The Regents of the University of California. # Copyright (c) 1994-1997 Sun Microsystems, Inc. # Copyright (c) 1998-1999 by Scriptics Corporation. # All rights reserved. # | | | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | # This file is a Tcl script to test out the "listbox" command # of Tk. It is organized in the standard fashion for Tcl tests. # # Copyright (c) 1993-1994 The Regents of the University of California. # Copyright (c) 1994-1997 Sun Microsystems, Inc. # Copyright (c) 1998-1999 by Scriptics Corporation. # All rights reserved. # # RCS: @(#) $Id: listbox.test,v 1.16.2.2 2002/06/10 05:38:26 wolfsuit Exp $ if {[lsearch [namespace children] ::tcltest] == -1} { source [file join [pwd] [file dirname [info script]] defs.tcl] } foreach i [winfo children .] { destroy $i |
︙ | ︙ | |||
936 937 938 939 940 941 942 | .l configure -listvar {} .l get 0 end } [list a b c d] test listbox-4.18 {ConfigureListbox, no listvar -> bad listvar} { catch {destroy .l} listbox .l .l insert end a b c d | | | > > > > > > > > | 936 937 938 939 940 941 942 943 944 945 946 947 948 949 950 951 952 953 954 955 956 957 958 959 960 961 962 | .l configure -listvar {} .l get 0 end } [list a b c d] test listbox-4.18 {ConfigureListbox, no listvar -> bad listvar} { catch {destroy .l} listbox .l .l insert end a b c d set x "this is a \" bad list" catch {.l configure -listvar x} result list [.l get 0 end] [.l cget -listvar] $result } [list [list a b c d] {} \ "unmatched open quote in list: invalid -listvariable value"] test listbox-4.19 {ConfigureListbox, no listvar -> bad non-existent listvar} { catch {destroy .l} listbox .l -listvar foo .l insert end a b c d catch {.l configure -listvar ::zoo::bar::foo} result list [.l get 0 end] [.l cget -listvar] $foo $result } [list [list a b c d] foo [list a b c d] \ {can't set "::zoo::bar::foo": parent namespace doesn't exist}] # No tests for DisplayListbox: I don't know how to test this procedure. test listbox-5.1 {ListboxComputeGeometry procedure} {fonts} { catch {destroy .l} listbox .l -font $fixed -width 15 -height 20 pack .l |
︙ | ︙ | |||
1844 1845 1846 1847 1848 1849 1850 | set log } [list {x 0 1} {x 0 1} {x 0 0.5} {x 0 1}] test listbox-21.11 {ListboxListVarProc, bad list} { catch {destroy .l} catch {unset x} listbox .l -listvar x set x [list a b c d] | | | 1852 1853 1854 1855 1856 1857 1858 1859 1860 1861 1862 1863 1864 1865 1866 | set log } [list {x 0 1} {x 0 1} {x 0 0.5} {x 0 1}] test listbox-21.11 {ListboxListVarProc, bad list} { catch {destroy .l} catch {unset x} listbox .l -listvar x set x [list a b c d] catch {set x "this is a \" bad list"} result set result } {can't set "x": invalid listvar value} test listbox-21.12 {ListboxListVarProc, cleanup item attributes} { catch {destroy .l} set x [list a b c d e f g] listbox .l -listvar x .l itemconfigure end -fg red |
︙ | ︙ | |||
2095 2096 2097 2098 2099 2100 2101 2102 | listbox .l .l insert end a b c .l activate 0 .l configure -state disabled .l activate 2 .l index active } 0 | | | > | > > > > | > | | 2103 2104 2105 2106 2107 2108 2109 2110 2111 2112 2113 2114 2115 2116 2117 2118 2119 2120 2121 2122 2123 2124 2125 2126 | listbox .l .l insert end a b c .l activate 0 .l configure -state disabled .l activate 2 .l index active } 0 test listbox-27.1 {widget deletion while active} { destroy .l pack [listbox .l] update .l configure -cursor xterm -xscrollcommand { destroy .l } update idle winfo exists .l } 0 resetGridInfo eval destroy [winfo children .] option clear # cleanup ::tcltest::cleanupTests return |
Changes to tests/macEmbed.test.
1 2 3 4 5 6 7 8 | # This file is a Tcl script to test out the procedures in the file # tkMacEmbed.c. It is organized in the standard fashion for Tcl # tests. # # Copyright (c) 1997 Sun Microsystems, Inc. # Copyright (c) 1998-1999 by Scriptics Corporation. # All rights reserved. # | | | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | # This file is a Tcl script to test out the procedures in the file # tkMacEmbed.c. It is organized in the standard fashion for Tcl # tests. # # Copyright (c) 1997 Sun Microsystems, Inc. # Copyright (c) 1998-1999 by Scriptics Corporation. # All rights reserved. # # RCS: @(#) $Id: macEmbed.test,v 1.5.2.2 2002/06/10 05:38:26 wolfsuit Exp $ if {[lsearch [namespace children] ::tcltest] == -1} { source [file join [pwd] [file dirname [info script]] defs.tcl] } eval destroy [winfo children .] wm geometry . {} |
︙ | ︙ | |||
212 213 214 215 216 217 218 | catch {destroy $w} } frame .f1 -container 1 -width 200 -height 50 frame .f2 -width 200 -height 50 pack .f1 .f2 interp create child child eval "set argv {-use [winfo id .f1]}" | | | 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 | catch {destroy $w} } frame .f1 -container 1 -width 200 -height 50 frame .f2 -width 200 -height 50 pack .f1 .f2 interp create child child eval "set argv {-use [winfo id .f1]}" load {} Tk child child eval { . configure -bd 2 -highlightthickness 2 -relief sunken } focus -force .f2 update list [child eval { focus . |
︙ | ︙ |
Changes to tests/macMenu.test.
1 2 3 4 5 6 7 8 9 | # This file is a Tcl script to test menus in Tk. It is # organized in the standard fashion for Tcl tests. This # file tests the Macintosh-specific features of the menu # system. # # Copyright (c) 1995-1997 Sun Microsystems, Inc. # Copyright (c) 1998-1999 by Scriptics Corporation. # All rights reserved. # | | | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | # This file is a Tcl script to test menus in Tk. It is # organized in the standard fashion for Tcl tests. This # file tests the Macintosh-specific features of the menu # system. # # Copyright (c) 1995-1997 Sun Microsystems, Inc. # Copyright (c) 1998-1999 by Scriptics Corporation. # All rights reserved. # # RCS: @(#) $Id: macMenu.test,v 1.6.2.2 2002/06/10 05:38:26 wolfsuit Exp $ if {[lsearch [namespace children] ::tcltest] == -1} { source [file join [pwd] [file dirname [info script]] defs.tcl] } set ::tcltest::testConfig(testimage) \ [expr {[lsearch [image types] test] >= 0}] |
︙ | ︙ | |||
837 838 839 840 841 842 843 | raise . list [catch {update} msg] $msg } {0 {}} test macMenu-21.3 {TkpSetMainMenubar - different interps} {macOnly} { catch {destroy .m1} catch {interp delete testinterp} interp create testinterp | | | 837 838 839 840 841 842 843 844 845 846 847 848 849 850 851 | raise . list [catch {update} msg] $msg } {0 {}} test macMenu-21.3 {TkpSetMainMenubar - different interps} {macOnly} { catch {destroy .m1} catch {interp delete testinterp} interp create testinterp load {} Tk testinterp menu .m1 . configure -menu .m1 raise . update interp eval testinterp {menu .m1} interp eval testinterp {. configure -menu .m1} interp eval testinterp {raise .} |
︙ | ︙ |
Changes to tests/menu.test.
1 2 3 4 5 6 7 | # This file is a Tcl script to test menus in Tk. It is # organized in the standard fashion for Tcl tests. # # Copyright (c) 1995-1997 Sun Microsystems, Inc. # Copyright (c) 1998-1999 by Scriptics Corporation. # All rights reserved. # | | | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | # This file is a Tcl script to test menus in Tk. It is # organized in the standard fashion for Tcl tests. # # Copyright (c) 1995-1997 Sun Microsystems, Inc. # Copyright (c) 1998-1999 by Scriptics Corporation. # All rights reserved. # # RCS: @(#) $Id: menu.test,v 1.9.2.3 2002/06/10 05:38:26 wolfsuit Exp $ if {[lsearch [namespace children] ::tcltest] == -1} { source [file join [pwd] [file dirname [info script]] defs.tcl] } if {[lsearch [image types] test] < 0} { puts "This application hasn't been compiled with the \"test\" image" |
︙ | ︙ | |||
2317 2318 2319 2320 2321 2322 2323 | interp eval testinterp {menu .m1} list [catch {interp delete testinterp} msg] $msg } {0 {}} test menu-27.1 {GetMenuHashTable} { catch {interp destroy testinterp} interp create testinterp | | | 2317 2318 2319 2320 2321 2322 2323 2324 2325 2326 2327 2328 2329 2330 2331 | interp eval testinterp {menu .m1} list [catch {interp delete testinterp} msg] $msg } {0 {}} test menu-27.1 {GetMenuHashTable} { catch {interp destroy testinterp} interp create testinterp load {} Tk testinterp list [catch {interp eval testinterp {menu .m1}} msg] $msg [interp delete testinterp] } {0 .m1 {}} test menu-28.1 {TkCreateMenuReferences - not there before} { catch {destroy .m1} list [catch {menu .m1} msg] $msg [destroy .m1] } {0 .m1 {}} |
︙ | ︙ |
Changes to tests/panedwindow.test.
1 2 3 4 5 6 7 8 | # This file is a Tcl script to test entry widgets in Tk. It is # organized in the standard fashion for Tcl tests. # # Copyright (c) 1994 The Regents of the University of California. # Copyright (c) 1994-1997 Sun Microsystems, Inc. # Copyright (c) 1998-1999 by Scriptics Corporation. # All rights reserved. # | | | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | # This file is a Tcl script to test entry widgets in Tk. It is # organized in the standard fashion for Tcl tests. # # Copyright (c) 1994 The Regents of the University of California. # Copyright (c) 1994-1997 Sun Microsystems, Inc. # Copyright (c) 1998-1999 by Scriptics Corporation. # All rights reserved. # # RCS: @(#) $Id: panedwindow.test,v 1.1.4.2 2002/06/10 05:38:26 wolfsuit Exp $ if {[info tclversion] < 8.4} { puts "panedwindow requires Tk 8.4" exit } if {[lsearch [namespace children] ::tcltest] == -1} { |
︙ | ︙ |
Changes to tests/safe.test.
1 2 3 4 5 6 7 8 | # This file is a Tcl script to test the Safe Tk facility. It is organized # in the standard fashion for Tk tests. # # Copyright (c) 1994 The Regents of the University of California. # Copyright (c) 1994-1995 Sun Microsystems, Inc. # Copyright (c) 1998-1999 by Scriptics Corporation. # All rights reserved. # | | > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 | # This file is a Tcl script to test the Safe Tk facility. It is organized # in the standard fashion for Tk tests. # # Copyright (c) 1994 The Regents of the University of California. # Copyright (c) 1994-1995 Sun Microsystems, Inc. # Copyright (c) 1998-1999 by Scriptics Corporation. # All rights reserved. # # RCS: @(#) $Id: safe.test,v 1.7.2.2 2002/06/10 05:38:26 wolfsuit Exp $ if {[lsearch [namespace children] ::tcltest] == -1} { source [file join [pwd] [file dirname [info script]] defs.tcl] } ## NOTE: Any time tests fail here with an error like: # Can't find a usable tk.tcl in the following directories: # {$p(:26:)} # # $p(:26:)/tk.tcl: script error # script error # invoked from within # "source {$p(:26:)/tk.tcl}" # ("uplevel" body line 1) # invoked from within # "uplevel #0 [list source $file]" # # # This probably means that tk wasn't installed properly. ## it indicates that something went wrong sourcing tk.tcl. ## Ensure that any changes that occured to tk.tcl will work or ## are properly prevented in a safe interpreter. -- hobbs foreach i [winfo children .] { destroy $i } # The set of hidden commands is platform dependent: if {"$tcl_platform(platform)" == "macintosh"} { |
︙ | ︙ | |||
172 173 174 175 176 177 178 | set r } 0 # cleanup unset hidden_cmds ::tcltest::cleanupTests return | < < < < < < < < < < < < < | 192 193 194 195 196 197 198 | set r } 0 # cleanup unset hidden_cmds ::tcltest::cleanupTests return |
Changes to tests/unixEmbed.test.
1 2 3 4 5 6 7 8 | # This file is a Tcl script to test out the procedures in the file # tkUnixEmbed.c. It is organized in the standard fashion for Tcl # tests. # # Copyright (c) 1996-1997 Sun Microsystems, Inc. # Copyright (c) 1998-1999 by Scriptics Corporation. # All rights reserved. # | | | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | # This file is a Tcl script to test out the procedures in the file # tkUnixEmbed.c. It is organized in the standard fashion for Tcl # tests. # # Copyright (c) 1996-1997 Sun Microsystems, Inc. # Copyright (c) 1998-1999 by Scriptics Corporation. # All rights reserved. # # RCS: @(#) $Id: unixEmbed.test,v 1.8.2.2 2002/06/10 05:38:26 wolfsuit Exp $ if {[lsearch [namespace children] ::tcltest] == -1} { source [file join [pwd] [file dirname [info script]] defs.tcl] } if {$tcl_platform(platform) != "unix"} { puts "skipping: Unix only tests..." |
︙ | ︙ | |||
546 547 548 549 550 551 552 | catch {destroy $w} } frame .f1 -container 1 -width 200 -height 50 frame .f2 -width 200 -height 50 pack .f1 .f2 interp create child child eval "set argv {-use [winfo id .f1]}" | | | 546 547 548 549 550 551 552 553 554 555 556 557 558 559 560 | catch {destroy $w} } frame .f1 -container 1 -width 200 -height 50 frame .f2 -width 200 -height 50 pack .f1 .f2 interp create child child eval "set argv {-use [winfo id .f1]}" load {} Tk child child eval { . configure -bd 2 -highlightthickness 2 -relief sunken } focus -force .f2 update list [child eval { focus . |
︙ | ︙ |
Changes to tests/unixWm.test.
1 2 3 4 5 6 7 8 9 | # This file is a Tcl script to test out Tk's interactions with # the window manager, including the "wm" command. It is organized # in the standard fashion for Tcl tests. # # Copyright (c) 1992-1994 The Regents of the University of California. # Copyright (c) 1994-1997 Sun Microsystems, Inc. # Copyright (c) 1998-1999 by Scriptics Corporation. # All rights reserved. # | | | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | # This file is a Tcl script to test out Tk's interactions with # the window manager, including the "wm" command. It is organized # in the standard fashion for Tcl tests. # # Copyright (c) 1992-1994 The Regents of the University of California. # Copyright (c) 1994-1997 Sun Microsystems, Inc. # Copyright (c) 1998-1999 by Scriptics Corporation. # All rights reserved. # # RCS: @(#) $Id: unixWm.test,v 1.13.2.3 2002/06/10 05:38:26 wolfsuit Exp $ if {[lsearch [namespace children] ::tcltest] == -1} { source [file join [pwd] [file dirname [info script]] defs.tcl] } if {$tcl_platform(platform) != "unix"} { puts "skipping: Unix only tests..." |
︙ | ︙ | |||
1258 1259 1260 1261 1262 1263 1264 | lappend result [wm title .t] [testprop [testwrapper .t] WM_NAME] wm title .t "Test window" set bit [format 0x%x [expr 0xa & [lindex [testprop [testwrapper .t] \ WM_NORMAL_HINTS] 0]]] lappend result [wm title .t] [testprop [testwrapper .t] WM_NAME] } {t t {Test window} {Test window}} | < < < < < < | 1258 1259 1260 1261 1262 1263 1264 1265 1266 1267 1268 1269 1270 1271 | lappend result [wm title .t] [testprop [testwrapper .t] WM_NAME] wm title .t "Test window" set bit [format 0x%x [expr 0xa & [lindex [testprop [testwrapper .t] \ WM_NORMAL_HINTS] 0]]] lappend result [wm title .t] [testprop [testwrapper .t] WM_NAME] } {t t {Test window} {Test window}} test unixWm-37.3 {Tk_WmCmd procedure, "transient" option} {unixOnly} { set result {} catch {destroy .t2} toplevel .t2 -width 120 -height 300 wm geometry .t2 +0+0 update lappend result [wm transient .t2] \ |
︙ | ︙ | |||
1828 1829 1830 1831 1832 1833 1834 | test unixWm-50.4 {Tk_CoordsToWindow procedure, window in other application} { catch {destroy .t} catch {interp delete slave} toplevel .t -width 200 -height 200 -bg green wm geometry .t +0+0 tkwait visibility .t interp create slave | | | 1822 1823 1824 1825 1826 1827 1828 1829 1830 1831 1832 1833 1834 1835 1836 | test unixWm-50.4 {Tk_CoordsToWindow procedure, window in other application} { catch {destroy .t} catch {interp delete slave} toplevel .t -width 200 -height 200 -bg green wm geometry .t +0+0 tkwait visibility .t interp create slave load {} Tk slave slave eval {wm geometry . 200x200+0+0; tkwait visibility .} set result [list [winfo containing 100 100] \ [slave eval {winfo containing 100 100}]] interp delete slave set result } {{} .} test unixWm-50.5 {Tk_CoordsToWindow procedure, handling menubars} {unixOnly} { |
︙ | ︙ |
Changes to tests/winClipboard.test.
1 2 3 4 5 6 7 8 9 10 11 12 | # This file is a Tcl script to test out Tk's Windows specific # clipboard code. It is organized in the standard fashion for Tcl # tests. # # This file contains a collection of tests for one or more of the Tcl # built-in commands. Sourcing this file into Tcl runs the tests and # generates output for errors. No output means no errors were found. # # Copyright (c) 1997 by Sun Microsystems, Inc. # Copyright (c) 1998-2000 by Scriptics Corporation. # All rights reserved. # | | | > > | > > | > > | > > | > > > | > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 | # This file is a Tcl script to test out Tk's Windows specific # clipboard code. It is organized in the standard fashion for Tcl # tests. # # This file contains a collection of tests for one or more of the Tcl # built-in commands. Sourcing this file into Tcl runs the tests and # generates output for errors. No output means no errors were found. # # Copyright (c) 1997 by Sun Microsystems, Inc. # Copyright (c) 1998-2000 by Scriptics Corporation. # All rights reserved. # # RCS: @(#) $Id: winClipboard.test,v 1.9.2.2 2002/06/10 05:38:26 wolfsuit Exp $ if {[lsearch [namespace children] ::tcltest] == -1} { source [file join [pwd] [file dirname [info script]] defs.tcl] } # Note that these tests may fail if another application is grabbing the # clipboard (e.g. an X server) set ::tcltest::testConfig(testclipboard) \ [llength [info commands testclipboard]] test winClipboard-1.1 {TkSelGetSelection} {pcOnly} { clipboard clear catch {selection get -selection CLIPBOARD} msg set msg } {CLIPBOARD selection doesn't exist or form "STRING" not defined} test winClipboard-1.2 {TkSelGetSelection} {pcOnly testclipboard} { clipboard clear clipboard append {} catch {selection get -selection CLIPBOARD} r1 catch {testclipboard} r2 list $r1 $r2 } {{} {}} test winClipboard-1.3 {TkSelGetSelection & TkWinClipboardRender} {pcOnly testclipboard} { clipboard clear clipboard append abcd update catch {selection get -selection CLIPBOARD} r1 catch {testclipboard} r2 list $r1 $r2 } {abcd abcd} test winClipboard-1.4 {TkSelGetSelection & TkWinClipboardRender} {pcOnly testclipboard} { clipboard clear clipboard append "line 1\nline 2" catch {selection get -selection CLIPBOARD} r1 catch {testclipboard} r2 list $r1 $r2 } [list "line 1\nline 2" "line 1\r\nline 2"] test winClipboard-1.5 {TkSelGetSelection & TkWinClipboardRender} {pcOnly testclipboard} { clipboard clear clipboard append "line 1\u00c7\nline 2" catch {selection get -selection CLIPBOARD} r1 catch {testclipboard} r2 list $r1 $r2 } [list "line 1\u00c7\nline 2" [bytestring "line 1\u00c7\r\nline 2"]] test winClipboard-2.1 {TkSelUpdateClipboard reentrancy problem} {pcOnly testclipboard} { clipboard clear clipboard append -type OUR_ACTION "action data" clipboard append "string data" update catch {selection get -selection CLIPBOARD -type OUR_ACTION} r1 catch {testclipboard} r2 list $r1 $r2 } [list "action data" "string data"] test winClipboard-2.2 {TkSelUpdateClipboard reentrancy problem} {pcOnly testclipboard} { clipboard clear clipboard append -type OUR_ACTION "new data" clipboard append "more data in string" update catch {testclipboard} r1 catch {selection get -selection CLIPBOARD -type OUR_ACTION} r2 list $r1 $r2 } [list "more data in string" "new data"] # cleanup ::tcltest::cleanupTests return |
Changes to tests/winDialog.test.
1 2 3 4 5 6 7 8 | # This file is a Tcl script to test the Windows specific behavior of # the common dialog boxes. It is organized in the standard # fashion for Tcl tests. # # Copyright (c) 1997 Sun Microsystems, Inc. # Copyright (c) 1998-1999 by Scriptics Corporation. # Copyright (c) 1998-1999 ActiveState Corporation. # | < | < < < | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | # This file is a Tcl script to test the Windows specific behavior of # the common dialog boxes. It is organized in the standard # fashion for Tcl tests. # # Copyright (c) 1997 Sun Microsystems, Inc. # Copyright (c) 1998-1999 by Scriptics Corporation. # Copyright (c) 1998-1999 ActiveState Corporation. # # RCS: @(#) $Id: winDialog.test,v 1.7.2.2 2002/06/10 05:38:26 wolfsuit Exp $ if {[lsearch [namespace children] ::tcltest] == -1} { source [file join [pwd] [file dirname [info script]] defs.tcl] } set ::tcltest::testConfig(testwinevent) \ [llength [info commands testwinevent]] |
︙ | ︙ | |||
123 124 125 126 127 128 129 | # } start {set x [tk_getSaveFile -defaultextension .foo -title Save]} then { SetText 0x480 bar Click 1 } | < < < < < < < < < < < < | 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 | # } start {set x [tk_getSaveFile -defaultextension .foo -title Save]} then { SetText 0x480 bar Click 1 } string totitle $x } [string totitle [file join [pwd] bar.foo]] test winDialog-5.9 {GetFileName: extension doesn't begin with .} {nt testwinevent} { start {set x [tk_getSaveFile -defaultextension foo -title Save]} then { SetText 0x480 bar Click 1 } string totitle $x } [string totitle [file join [pwd] bar.foo]] test winDialog-5.10 {GetFileName: file types} {nt testwinevent} { # case FILE_TYPES: start {tk_getSaveFile -filetypes {{"foo files" .foo FOOF}} -title Foo} then { set x [GetText 0x470] Click cancel } |
︙ | ︙ | |||
182 183 184 185 186 187 188 | test winDialog-5.14 {GetFileName: initial file} {nt testwinevent} { # case FILE_INITFILE: start {set x [tk_getSaveFile -initialfile "12x 456" -title Foo]} then { Click 1 } | | | | | | 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 | test winDialog-5.14 {GetFileName: initial file} {nt testwinevent} { # case FILE_INITFILE: start {set x [tk_getSaveFile -initialfile "12x 456" -title Foo]} then { Click 1 } string totitle $x } [string totitle [file join [pwd] "12x 456"]] test winDialog-5.15 {GetFileName: initial file: Tcl_TranslateFileName()} {nt} { # if (Tcl_TranslateFileName(interp, string, &ds) == NULL) list [catch {tk_getOpenFile -initialfile ~12x/455} msg] $msg } {1 {user "12x" doesn't exist}} set a aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa append a $a append a $a append a $a append a $a test winDialog-5.16 {GetFileName: initial file: long name} {nt testwinevent} { start {set x [tk_getSaveFile -initialfile $a -title Long]} then { Click 1 } string totitle $x } [string totitle [string range [file join [pwd] $a] 0 257]] test winDialog-5.17 {GetFileName: parent} {nt} { # case FILE_PARENT: toplevel .t set x 0 start {tk_getOpenFile -parent .t -title Parent; set x 1} then { |
︙ | ︙ |
Changes to tests/wm.test.
1 2 3 4 5 6 7 8 9 | # This file is a Tcl script to test out Tk's interactions with # the window manager, including the "wm" command. It is organized # in the standard fashion for Tcl tests. # # Copyright (c) 1992-1994 The Regents of the University of California. # Copyright (c) 1994-1997 Sun Microsystems, Inc. # Copyright (c) 1998-1999 by Scriptics Corporation. # All rights reserved. # | | | > | | | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 | # This file is a Tcl script to test out Tk's interactions with # the window manager, including the "wm" command. It is organized # in the standard fashion for Tcl tests. # # Copyright (c) 1992-1994 The Regents of the University of California. # Copyright (c) 1994-1997 Sun Microsystems, Inc. # Copyright (c) 1998-1999 by Scriptics Corporation. # All rights reserved. # # RCS: @(#) $Id: wm.test,v 1.2.2.2 2002/06/10 05:38:26 wolfsuit Exp $ # This file tests window manager interactions that work across # platforms. Window manager tests that only work on a specific # platform should be placed in unixWm.test or winWm.test. if {[lsearch [namespace children] ::tcltest] == -1} { package require tcltest namespace import -force ::tcltest::* } proc deleteWindows {} { foreach i [winfo children .] { destroy $i } } deleteWindows wm deicon . test wm-stackorder-1.1 {usage} { list [catch {wm stackorder} err] $err } {1 {wrong # args: should be "wm option window ?arg ...?"}} test wm-stackorder-1.2 {usage} { list [catch {wm stackorder . _} err] $err } {1 {wrong # arguments: must be "wm stackorder window ?isabove|isbelow window?"}} test wm-stackorder-1.3 {usage} { list [catch {wm stackorder . _ _ _} err] $err } {1 {wrong # arguments: must be "wm stackorder window ?isabove|isbelow window?"}} test wm-stackorder-1.4 {usage} { list [catch {wm stackorder . is .} err] $err } {1 {bad argument "is": must be isabove or isbelow}} test wm-stackorder-1.5 {usage} { list [catch {wm stackorder _} err] $err |
︙ | ︙ | |||
289 290 291 292 293 294 295 296 | toplevel .t wm overrideredirect .t 1 lower .t update wm stackorder .t isbelow . } 1 | > > > > > > > > > > > > > > > > > > > > > > > > > | > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > < < < > > > | 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541 | toplevel .t wm overrideredirect .t 1 lower .t update wm stackorder .t isbelow . } 1 test wm-stackorder-6.1 {An embedded toplevel does not appear in the stacking order} { deleteWindows toplevel .real -container 1 toplevel .embd -bg blue -use [winfo id .real] update wm stackorder . } {. .real} test wm-transient-1.1 {usage} { catch {destroy .t} ; toplevel .t list [catch {wm transient .t 1 2} msg] $msg } {1 {wrong # arguments: must be "wm transient window ?master?"}} test wm-transient-1.2 {usage} { catch {destroy .t} ; toplevel .t list [catch {wm transient .t foo} msg] $msg } {1 {bad window path name "foo"}} test wm-transient-1.3 {usage} { catch {destroy .t} ; toplevel .t list [catch {wm transient foo .t} msg] $msg } {1 {bad window path name "foo"}} test wm-transient-1.4 {usage} { deleteWindows toplevel .master toplevel .subject wm transient .subject .master list [catch {wm iconify .subject} msg] $msg } {1 {can't iconify ".subject": it is a transient}} test wm-transient-1.5 {usage} { deleteWindows toplevel .icon -bg blue toplevel .top wm iconwindow .top .icon toplevel .dummy list [catch {wm transient .icon .dummy} msg] $msg } {1 {can't make ".icon" a transient: it is an icon for .top}} test wm-transient-1.6 {usage} { deleteWindows toplevel .icon -bg blue toplevel .top wm iconwindow .top .icon toplevel .dummy list [catch {wm transient .dummy .icon} msg] $msg } {1 {can't make ".icon" a master: it is an icon for .top}} test wm-transient-1.7 {usage} { deleteWindows toplevel .master list [catch {wm transient .master .master} err] $err } {1 {can't make ".master" its own master}} test wm-transient-1.8 {usage} { deleteWindows toplevel .master frame .master.f list [catch {wm transient .master .master.f} err] $err } {1 {can't make ".master" its own master}} test wm-transient-2.1 { basic get/set of master } { deleteWindows set results [list] toplevel .master toplevel .subject lappend results [wm transient .subject] wm transient .subject .master lappend results [wm transient .subject] wm transient .subject {} lappend results [wm transient .subject] set results } {{} .master {}} test wm-transient-2.2 { first toplevel parent of non-toplevel master is used } { deleteWindows toplevel .master frame .master.f toplevel .subject wm transient .subject .master.f wm transient .subject } {.master} test wm-state-1.1 {usage} { list [catch {wm state} err] $err } {1 {wrong # args: should be "wm option window ?arg ...?"}} test wm-state-1.2 {usage} { list [catch {wm state . _ _} err] $err } {1 {wrong # arguments: must be "wm state window ?state?"}} test wm-state-2.1 {initial state} { deleteWindows toplevel .t wm state .t } {normal} test wm-state-2.2 {state change before map} { deleteWindows toplevel .t wm state .t withdrawn wm state .t } {withdrawn} test wm-state-2.3 {state change before map} { deleteWindows toplevel .t wm withdraw .t wm state .t } {withdrawn} test wm-state-2.4 {state change after map} { deleteWindows toplevel .t update wm state .t withdrawn wm state .t } {withdrawn} test wm-state-2.5 {state change after map} { deleteWindows toplevel .t update wm withdraw .t wm state .t } {withdrawn} test wm-state-2.6 {state change before map} { deleteWindows toplevel .t wm state .t iconic wm state .t } {iconic} test wm-state-2.7 {state change before map} { deleteWindows toplevel .t wm iconify .t wm state .t } {iconic} test wm-state-2.8 {state change after map} { deleteWindows toplevel .t update wm state .t iconic wm state .t } {iconic} test wm-state-2.9 {state change after map} { deleteWindows toplevel .t update wm iconify .t wm state .t } {iconic} test wm-state-2.10 {state change before map} { deleteWindows toplevel .t wm withdraw .t wm state .t normal wm state .t } {normal} test wm-state-2.11 {state change before map} { deleteWindows toplevel .t wm withdraw .t wm deiconify .t wm state .t } {normal} test wm-state-2.12 {state change after map} { deleteWindows toplevel .t update wm withdraw .t wm state .t normal wm state .t } {normal} test wm-state-2.13 {state change after map} { deleteWindows toplevel .t update wm withdraw .t wm deiconify .t wm state .t } {normal} test wm-state-2.14 {state change before map} { deleteWindows toplevel .t wm iconify .t wm state .t normal wm state .t } {normal} test wm-state-2.15 {state change before map} { deleteWindows toplevel .t wm iconify .t wm deiconify .t wm state .t } {normal} test wm-state-2.16 {state change after map} { deleteWindows toplevel .t update wm iconify .t wm state .t normal wm state .t } {normal} test wm-state-2.17 {state change after map} { deleteWindows toplevel .t update wm iconify .t wm deiconify .t wm state .t } {normal} # FIXME: # Test delivery of virtual events to the WM. We could check to see # if the window was raised after a button click for example. # This sort of testing may not be possible. deleteWindows return |
Changes to unix/Makefile.in.
1 2 3 4 5 6 7 | # # This file is a Makefile for Tk. If it has the name "Makefile.in" # then it is a template for a Makefile; to generate the actual Makefile, # run "./configure", which is a configuration script generated by the # "autoconf" program (constructs like "@foo@" will get replaced in the # actual Makefile. # | | | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | # # This file is a Makefile for Tk. If it has the name "Makefile.in" # then it is a template for a Makefile; to generate the actual Makefile, # run "./configure", which is a configuration script generated by the # "autoconf" program (constructs like "@foo@" will get replaced in the # actual Makefile. # # RCS: @(#) $Id: Makefile.in,v 1.54.2.2 2002/06/10 05:38:26 wolfsuit Exp $ # Current Tk version; used in various names. TCLVERSION = @TCL_VERSION@ VERSION = @TK_VERSION@ LOCALES = @LOCALES@ |
︙ | ︙ | |||
261 262 263 264 265 266 267 | WISH_OBJS = tkAppInit.o TCLTEST_OBJS = ${TCL_BIN_DIR}/tclTest.o ${TCL_BIN_DIR}/tclThreadTest.o \ ${TCL_BIN_DIR}/tclUnixTest.o TKTEST_OBJS = $(TCLTEST_OBJS) tkTestInit.o tkTest.o tkSquare.o WIDGOBJS = tkButton.o tkEntry.o tkFrame.o tkListbox.o \ | | | | 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 | WISH_OBJS = tkAppInit.o TCLTEST_OBJS = ${TCL_BIN_DIR}/tclTest.o ${TCL_BIN_DIR}/tclThreadTest.o \ ${TCL_BIN_DIR}/tclUnixTest.o TKTEST_OBJS = $(TCLTEST_OBJS) tkTestInit.o tkTest.o tkSquare.o WIDGOBJS = tkButton.o tkEntry.o tkFrame.o tkListbox.o \ tkMenu.o tkMenubutton.o tkMenuDraw.o tkMessage.o \ tkPanedWindow.o tkScale.o tkScrollbar.o CANVOBJS = tkCanvas.o tkCanvArc.o tkCanvBmap.o tkCanvImg.o \ tkCanvLine.o tkCanvPoly.o tkCanvPs.o tkCanvText.o \ tkCanvUtil.o tkCanvWind.o tkRectOval.o tkTrig.o IMAGEOBJS = tkImage.o tkImgBmap.o tkImgGIF.o tkImgPPM.o tkImgPhoto.o |
︙ | ︙ | |||
312 313 314 315 316 317 318 319 320 321 322 323 324 325 | $(GENERIC_DIR)/tkSelect.c $(GENERIC_DIR)/tkUtil.c \ $(GENERIC_DIR)/tkVisual.c $(GENERIC_DIR)/tkWindow.c \ $(GENERIC_DIR)/tkButton.c $(GENERIC_DIR)/tkObj.c \ $(GENERIC_DIR)/tkEntry.c $(GENERIC_DIR)/tkFrame.c \ $(GENERIC_DIR)/tkListbox.c $(GENERIC_DIR)/tkMenu.c \ $(GENERIC_DIR)/tkMenubutton.c $(GENERIC_DIR)/tkMenuDraw.c \ $(GENERIC_DIR)/tkMessage.c \ $(GENERIC_DIR)/tkScale.c $(GENERIC_DIR)/tkScrollbar.c \ $(GENERIC_DIR)/tkCanvas.c $(GENERIC_DIR)/tkCanvArc.c \ $(GENERIC_DIR)/tkCanvBmap.c $(GENERIC_DIR)/tkCanvImg.c \ $(GENERIC_DIR)/tkCanvLine.c $(GENERIC_DIR)/tkCanvPoly.c \ $(GENERIC_DIR)/tkCanvPs.c $(GENERIC_DIR)/tkCanvText.c \ $(GENERIC_DIR)/tkCanvUtil.c \ $(GENERIC_DIR)/tkCanvWind.c $(GENERIC_DIR)/tkRectOval.c \ | > | 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 | $(GENERIC_DIR)/tkSelect.c $(GENERIC_DIR)/tkUtil.c \ $(GENERIC_DIR)/tkVisual.c $(GENERIC_DIR)/tkWindow.c \ $(GENERIC_DIR)/tkButton.c $(GENERIC_DIR)/tkObj.c \ $(GENERIC_DIR)/tkEntry.c $(GENERIC_DIR)/tkFrame.c \ $(GENERIC_DIR)/tkListbox.c $(GENERIC_DIR)/tkMenu.c \ $(GENERIC_DIR)/tkMenubutton.c $(GENERIC_DIR)/tkMenuDraw.c \ $(GENERIC_DIR)/tkMessage.c \ $(GENERIC_DIR)/tkPanedWindow.c \ $(GENERIC_DIR)/tkScale.c $(GENERIC_DIR)/tkScrollbar.c \ $(GENERIC_DIR)/tkCanvas.c $(GENERIC_DIR)/tkCanvArc.c \ $(GENERIC_DIR)/tkCanvBmap.c $(GENERIC_DIR)/tkCanvImg.c \ $(GENERIC_DIR)/tkCanvLine.c $(GENERIC_DIR)/tkCanvPoly.c \ $(GENERIC_DIR)/tkCanvPs.c $(GENERIC_DIR)/tkCanvText.c \ $(GENERIC_DIR)/tkCanvUtil.c \ $(GENERIC_DIR)/tkCanvWind.c $(GENERIC_DIR)/tkRectOval.c \ |
︙ | ︙ | |||
777 778 779 780 781 782 783 784 785 786 787 788 789 790 | tkMenuDraw.o: $(GENERIC_DIR)/tkMenuDraw.c $(CC) -c $(CC_SWITCHES) $(GENERIC_DIR)/tkMenuDraw.c tkMessage.o: $(GENERIC_DIR)/tkMessage.c $(CC) -c $(CC_SWITCHES) $(GENERIC_DIR)/tkMessage.c tkScale.o: $(GENERIC_DIR)/tkScale.c $(CC) -c $(CC_SWITCHES) $(GENERIC_DIR)/tkScale.c tkScrollbar.o: $(GENERIC_DIR)/tkScrollbar.c $(CC) -c $(CC_SWITCHES) $(GENERIC_DIR)/tkScrollbar.c tkSquare.o: $(GENERIC_DIR)/tkSquare.c | > > > | 778 779 780 781 782 783 784 785 786 787 788 789 790 791 792 793 794 | tkMenuDraw.o: $(GENERIC_DIR)/tkMenuDraw.c $(CC) -c $(CC_SWITCHES) $(GENERIC_DIR)/tkMenuDraw.c tkMessage.o: $(GENERIC_DIR)/tkMessage.c $(CC) -c $(CC_SWITCHES) $(GENERIC_DIR)/tkMessage.c tkPanedWindow.o: $(GENERIC_DIR)/tkPanedWindow.c $(CC) -c $(CC_SWITCHES) $(GENERIC_DIR)/tkPanedWindow.c tkScale.o: $(GENERIC_DIR)/tkScale.c $(CC) -c $(CC_SWITCHES) $(GENERIC_DIR)/tkScale.c tkScrollbar.o: $(GENERIC_DIR)/tkScrollbar.c $(CC) -c $(CC_SWITCHES) $(GENERIC_DIR)/tkScrollbar.c tkSquare.o: $(GENERIC_DIR)/tkSquare.c |
︙ | ︙ | |||
1058 1059 1060 1061 1062 1063 1064 1065 1066 1067 1068 1069 1070 1071 1072 1073 1074 1075 1076 1077 1078 | cp $(TOP_DIR)/win/configure.in \ $(TOP_DIR)/win/configure \ $(TOP_DIR)/win/tkConfig.sh.in \ $(TOP_DIR)/win/aclocal.m4 $(TOP_DIR)/win/tcl.m4 \ $(DISTDIR)/win cp -p $(TOP_DIR)/win/*.c $(TOP_DIR)/win/*.h $(DISTDIR)/win cp -p $(TOP_DIR)/win/*.bat $(DISTDIR)/win cp -p $(TOP_DIR)/win/makefile.* $(DISTDIR)/win cp -p $(TOP_DIR)/win/README $(DISTDIR)/win cp -p $(TOP_DIR)/license.terms $(DISTDIR)/win mkdir $(DISTDIR)/win/rc cp -p $(TOP_DIR)/win/rc/*.rc $(TOP_DIR)/win/rc/*.cur \ $(TOP_DIR)/win/rc/*.ico $(TOP_DIR)/win/rc/*.bmp \ $(DISTDIR)/win/rc mkdir $(DISTDIR)/mac cp -p $(TOP_DIR)/mac/tkMacProjects.sea.hqx $(DISTDIR)/mac cp -p $(TOP_DIR)/mac/*.c $(TOP_DIR)/mac/*.h $(TOP_DIR)/mac/*.r \ $(DISTDIR)/mac cp -p $(TOP_DIR)/mac/README $(DISTDIR)/mac cp -p $(TOP_DIR)/license.terms $(DISTDIR)/mac cp -p $(TOP_DIR)/mac/*.pch $(DISTDIR)/mac | > > > > > > > | 1062 1063 1064 1065 1066 1067 1068 1069 1070 1071 1072 1073 1074 1075 1076 1077 1078 1079 1080 1081 1082 1083 1084 1085 1086 1087 1088 1089 | cp $(TOP_DIR)/win/configure.in \ $(TOP_DIR)/win/configure \ $(TOP_DIR)/win/tkConfig.sh.in \ $(TOP_DIR)/win/aclocal.m4 $(TOP_DIR)/win/tcl.m4 \ $(DISTDIR)/win cp -p $(TOP_DIR)/win/*.c $(TOP_DIR)/win/*.h $(DISTDIR)/win cp -p $(TOP_DIR)/win/*.bat $(DISTDIR)/win $(TCL_EXE) $(TOOL_DIR)/eolFix.tcl -crlf $(DISTDIR)/win/*.bat cp -p $(TOP_DIR)/win/makefile.* $(DISTDIR)/win $(TCL_EXE) $(TOOL_DIR)/eolFix.tcl -crlf $(DISTDIR)/win/makefile.* cp -p $(TOP_DIR)/win/rules.vc $(DISTDIR)/win $(TCL_EXE) $(TOOL_DIR)/eolFix.tcl -crlf $(DISTDIR)/win/rules.vc cp -p $(TOP_DIR)/win/README $(DISTDIR)/win cp -p $(TOP_DIR)/license.terms $(DISTDIR)/win mkdir $(DISTDIR)/win/rc cp -p $(TOP_DIR)/win/rc/wish.exe.manifest $(TOP_DIR)/win/rc/ cp -p $(TOP_DIR)/win/rc/*.rc $(TOP_DIR)/win/rc/*.cur \ $(TOP_DIR)/win/rc/*.ico $(TOP_DIR)/win/rc/*.bmp \ $(DISTDIR)/win/rc $(TCL_EXE) $(TOOL_DIR)/eolFix.tcl -crlf $(DISTDIR)/win/rc/*.rc $(TCL_EXE) $(TOOL_DIR)/eolFix.tcl -crlf $(DISTDIR)/win/rc/wish.exe.manifest mkdir $(DISTDIR)/mac cp -p $(TOP_DIR)/mac/tkMacProjects.sea.hqx $(DISTDIR)/mac cp -p $(TOP_DIR)/mac/*.c $(TOP_DIR)/mac/*.h $(TOP_DIR)/mac/*.r \ $(DISTDIR)/mac cp -p $(TOP_DIR)/mac/README $(DISTDIR)/mac cp -p $(TOP_DIR)/license.terms $(DISTDIR)/mac cp -p $(TOP_DIR)/mac/*.pch $(DISTDIR)/mac |
︙ | ︙ |
Changes to unix/README.
1 2 3 4 5 6 7 8 | Tk UNIX README -------------- This is the directory where you configure, compile, test, and install UNIX versions of Tk. This directory also contains source files for Tk that are specific to UNIX. The information in this file is maintained at: | | | | | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | Tk UNIX README -------------- This is the directory where you configure, compile, test, and install UNIX versions of Tk. This directory also contains source files for Tk that are specific to UNIX. The information in this file is maintained at: http://www.tcl.tk/doc/howto/compile.html For information on platforms where Tcl/Tk is known to compile, along with any porting notes for getting it to work on those platforms, see: http://www.tcl.tk/software/tcltk/platforms.html The rest of this file contains instructions on how to do this. The release should compile and run either "out of the box" or with trivial changes on any UNIX-like system that approximates POSIX, BSD, or System V. We know that it runs on workstations from Sun, H-P, DEC, IBM, and SGI, as well as PCs running Linux, BSDI, and SCO UNIX. To compile for a PC running Windows, see the README file in the directory ../win. To compile for a Macintosh, see the README file in the directory ../mac. RCS: @(#) $Id: README,v 1.12.2.1 2002/06/10 05:38:26 wolfsuit Exp $ How To Compile And Install Tk: ------------------------------ (a) Make sure that the Tcl 8.4 release is present in the directory ../../tcl8.4 (or else use the "--with-tcl" switch described below). This release of Tk will only work with Tcl 8.4. Also, be sure that |
︙ | ︙ | |||
40 41 42 43 44 45 46 | (d) Type "./configure". This runs a configuration script created by GNU autoconf, which configures Tcl for your system and creates a Makefile. The configure script allows you to customize the Tcl configuration for your site; for details on how you can do this, type "./configure -help" or refer to the autoconf documentation (not included here). Tk's "configure" script supports the following special switches in addition to the standard ones: | < < > > > > > > > > | 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 | (d) Type "./configure". This runs a configuration script created by GNU autoconf, which configures Tcl for your system and creates a Makefile. The configure script allows you to customize the Tcl configuration for your site; for details on how you can do this, type "./configure -help" or refer to the autoconf documentation (not included here). Tk's "configure" script supports the following special switches in addition to the standard ones: --with-tcl=DIR Specifies the directory containing the Tcl binaries and Tcl's platform-dependent configuration information. By default the Tcl directory is assumed to be in the location given by (a) above. --enable-threads If this switch is set, Tcl will compile itself with multithreading support. --enable-shared If this switch is specified, Tk will compile itself as a shared library if it can figure out how to do that on this platform. This is the default on platforms where we know how to build shared libraries. --disable-shared If this switch is specified, Tk will compile itself as a static library. --enable-symbols build with debugging symbols --disable-symbols build without debugging symbols --enable-64bit enable 64bit support (where applicable) --disable-64bit disable 64bit support (where applicable) --enable-64bit-vis enable 64bit Sparc VIS support --disable-64bit-vis disable 64bit Sparc VIS support Note: by default gcc will be used if it can be located on the PATH. if you want to use cc instead of gcc, set the CC environment variable to "cc" before running configure. It is not safe to change the Makefile to use gcc after configure is run. Note: be sure to use only absolute path names (those starting with "/") |
︙ | ︙ |
Changes to unix/configure.
︙ | ︙ | |||
12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 | ac_default_prefix=/usr/local # Any additions from configure.in: ac_help="$ac_help --enable-threads build with threads" ac_help="$ac_help --with-tcl directory containing tcl configuration (tclConfig.sh)" ac_help="$ac_help --enable-64bit enable 64bit support (where applicable)" ac_help="$ac_help --enable-64bit-vis enable 64bit Sparc VIS support" ac_help="$ac_help --disable-load disallow dynamic loading and "load" command" ac_help="$ac_help --enable-symbols build with debugging symbols [--disable-symbols]" ac_help="$ac_help --with-x use the X Window System" | > > < < | 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 | ac_default_prefix=/usr/local # Any additions from configure.in: ac_help="$ac_help --enable-threads build with threads" ac_help="$ac_help --with-tcl directory containing tcl configuration (tclConfig.sh)" ac_help="$ac_help --enable-shared build and link with shared libraries [--enable-shared]" ac_help="$ac_help --enable-64bit enable 64bit support (where applicable)" ac_help="$ac_help --enable-64bit-vis enable 64bit Sparc VIS support" ac_help="$ac_help --disable-load disallow dynamic loading and "load" command" ac_help="$ac_help --enable-symbols build with debugging symbols [--disable-symbols]" ac_help="$ac_help --with-x use the X Window System" # Initialize some variables set by options. # The variables have the same names as the options, with # dashes changed to underlines. build=NONE cache_file=./config.cache exec_prefix=NONE |
︙ | ︙ | |||
537 538 539 540 541 542 543 | fi TK_VERSION=8.4 TK_MAJOR_VERSION=8 TK_MINOR_VERSION=4 | | | 537 538 539 540 541 542 543 544 545 546 547 548 549 550 551 | fi TK_VERSION=8.4 TK_MAJOR_VERSION=8 TK_MINOR_VERSION=4 TK_PATCH_LEVEL="a5" VERSION=${TK_VERSION} LOCALES="de en es fr" #------------------------------------------------------------------------ # Handle the --prefix=... option #------------------------------------------------------------------------ |
︙ | ︙ | |||
967 968 969 970 971 972 973 974 975 976 977 978 979 980 981 982 983 | if test "$tcl_ok" = "yes"; then echo "$ac_t""yes" 1>&6 TCL_THREADS=1 cat >> confdefs.h <<\EOF #define TCL_THREADS 1 EOF cat >> confdefs.h <<\EOF #define _REENTRANT 1 EOF cat >> confdefs.h <<\EOF #define _THREAD_SAFE 1 EOF echo $ac_n "checking for pthread_mutex_init in -lpthread""... $ac_c" 1>&6 | > > > > > > | | | | 967 968 969 970 971 972 973 974 975 976 977 978 979 980 981 982 983 984 985 986 987 988 989 990 991 992 993 994 995 996 997 998 999 1000 1001 1002 1003 1004 1005 1006 1007 1008 1009 1010 1011 1012 1013 1014 1015 1016 | if test "$tcl_ok" = "yes"; then echo "$ac_t""yes" 1>&6 TCL_THREADS=1 cat >> confdefs.h <<\EOF #define TCL_THREADS 1 EOF # USE_THREAD_ALLOC tells us to try the special thread-based # allocator that significantly reduces lock contention cat >> confdefs.h <<\EOF #define USE_THREAD_ALLOC 1 EOF cat >> confdefs.h <<\EOF #define _REENTRANT 1 EOF cat >> confdefs.h <<\EOF #define _THREAD_SAFE 1 EOF echo $ac_n "checking for pthread_mutex_init in -lpthread""... $ac_c" 1>&6 echo "configure:991: checking for pthread_mutex_init in -lpthread" >&5 ac_lib_var=`echo pthread'_'pthread_mutex_init | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else ac_save_LIBS="$LIBS" LIBS="-lpthread $LIBS" cat > conftest.$ac_ext <<EOF #line 999 "configure" #include "confdefs.h" /* Override any gcc2 internal prototype to avoid an error. */ /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ char pthread_mutex_init(); int main() { pthread_mutex_init() ; return 0; } EOF if { (eval echo configure:1010: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=no" |
︙ | ︙ | |||
1024 1025 1026 1027 1028 1029 1030 | if test "$tcl_ok" = "no"; then # Check a little harder for __pthread_mutex_init in the same # library, as some systems hide it there until pthread.h is # defined. We could alternatively do an AC_TRY_COMPILE with # pthread.h, but that will work with libpthread really doesn't # exist, like AIX 4.2. [Bug: 4359] echo $ac_n "checking for __pthread_mutex_init in -lpthread""... $ac_c" 1>&6 | | | | | 1030 1031 1032 1033 1034 1035 1036 1037 1038 1039 1040 1041 1042 1043 1044 1045 1046 1047 1048 1049 1050 1051 1052 1053 1054 1055 1056 1057 1058 1059 1060 1061 1062 1063 | if test "$tcl_ok" = "no"; then # Check a little harder for __pthread_mutex_init in the same # library, as some systems hide it there until pthread.h is # defined. We could alternatively do an AC_TRY_COMPILE with # pthread.h, but that will work with libpthread really doesn't # exist, like AIX 4.2. [Bug: 4359] echo $ac_n "checking for __pthread_mutex_init in -lpthread""... $ac_c" 1>&6 echo "configure:1038: checking for __pthread_mutex_init in -lpthread" >&5 ac_lib_var=`echo pthread'_'__pthread_mutex_init | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else ac_save_LIBS="$LIBS" LIBS="-lpthread $LIBS" cat > conftest.$ac_ext <<EOF #line 1046 "configure" #include "confdefs.h" /* Override any gcc2 internal prototype to avoid an error. */ /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ char __pthread_mutex_init(); int main() { __pthread_mutex_init() ; return 0; } EOF if { (eval echo configure:1057: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=no" |
︙ | ︙ | |||
1071 1072 1073 1074 1075 1076 1077 | fi if test "$tcl_ok" = "yes"; then # The space is needed THREADS_LIBS=" -lpthread" else echo $ac_n "checking for pthread_mutex_init in -lpthreads""... $ac_c" 1>&6 | | | | | 1077 1078 1079 1080 1081 1082 1083 1084 1085 1086 1087 1088 1089 1090 1091 1092 1093 1094 1095 1096 1097 1098 1099 1100 1101 1102 1103 1104 1105 1106 1107 1108 1109 1110 | fi if test "$tcl_ok" = "yes"; then # The space is needed THREADS_LIBS=" -lpthread" else echo $ac_n "checking for pthread_mutex_init in -lpthreads""... $ac_c" 1>&6 echo "configure:1085: checking for pthread_mutex_init in -lpthreads" >&5 ac_lib_var=`echo pthreads'_'pthread_mutex_init | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else ac_save_LIBS="$LIBS" LIBS="-lpthreads $LIBS" cat > conftest.$ac_ext <<EOF #line 1093 "configure" #include "confdefs.h" /* Override any gcc2 internal prototype to avoid an error. */ /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ char pthread_mutex_init(); int main() { pthread_mutex_init() ; return 0; } EOF if { (eval echo configure:1104: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=no" |
︙ | ︙ | |||
1116 1117 1118 1119 1120 1121 1122 | fi if test "$tcl_ok" = "yes"; then # The space is needed THREADS_LIBS=" -lpthreads" else echo $ac_n "checking for pthread_mutex_init in -lc""... $ac_c" 1>&6 | | | | | 1122 1123 1124 1125 1126 1127 1128 1129 1130 1131 1132 1133 1134 1135 1136 1137 1138 1139 1140 1141 1142 1143 1144 1145 1146 1147 1148 1149 1150 1151 1152 1153 1154 1155 | fi if test "$tcl_ok" = "yes"; then # The space is needed THREADS_LIBS=" -lpthreads" else echo $ac_n "checking for pthread_mutex_init in -lc""... $ac_c" 1>&6 echo "configure:1130: checking for pthread_mutex_init in -lc" >&5 ac_lib_var=`echo c'_'pthread_mutex_init | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else ac_save_LIBS="$LIBS" LIBS="-lc $LIBS" cat > conftest.$ac_ext <<EOF #line 1138 "configure" #include "confdefs.h" /* Override any gcc2 internal prototype to avoid an error. */ /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ char pthread_mutex_init(); int main() { pthread_mutex_init() ; return 0; } EOF if { (eval echo configure:1149: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=no" |
︙ | ︙ | |||
1158 1159 1160 1161 1162 1163 1164 | else echo "$ac_t""no" 1>&6 tcl_ok=no fi if test "$tcl_ok" = "no"; then echo $ac_n "checking for pthread_mutex_init in -lc_r""... $ac_c" 1>&6 | | | | | 1164 1165 1166 1167 1168 1169 1170 1171 1172 1173 1174 1175 1176 1177 1178 1179 1180 1181 1182 1183 1184 1185 1186 1187 1188 1189 1190 1191 1192 1193 1194 1195 1196 1197 | else echo "$ac_t""no" 1>&6 tcl_ok=no fi if test "$tcl_ok" = "no"; then echo $ac_n "checking for pthread_mutex_init in -lc_r""... $ac_c" 1>&6 echo "configure:1172: checking for pthread_mutex_init in -lc_r" >&5 ac_lib_var=`echo c_r'_'pthread_mutex_init | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else ac_save_LIBS="$LIBS" LIBS="-lc_r $LIBS" cat > conftest.$ac_ext <<EOF #line 1180 "configure" #include "confdefs.h" /* Override any gcc2 internal prototype to avoid an error. */ /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ char pthread_mutex_init(); int main() { pthread_mutex_init() ; return 0; } EOF if { (eval echo configure:1191: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=no" |
︙ | ︙ | |||
1215 1216 1217 1218 1219 1220 1221 | # Does the pthread-implementation provide # 'pthread_attr_setstacksize' ? for ac_func in pthread_attr_setstacksize do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 | | | | 1221 1222 1223 1224 1225 1226 1227 1228 1229 1230 1231 1232 1233 1234 1235 1236 1237 1238 1239 1240 | # Does the pthread-implementation provide # 'pthread_attr_setstacksize' ? for ac_func in pthread_attr_setstacksize do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 echo "configure:1229: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <<EOF #line 1234 "configure" #include "confdefs.h" /* System header to define __stub macros and hopefully few prototypes, which can conflict with char $ac_func(); below. */ #include <assert.h> /* Override any gcc2 internal prototype to avoid an error. */ /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ |
︙ | ︙ | |||
1243 1244 1245 1246 1247 1248 1249 | choke me #else $ac_func(); #endif ; return 0; } EOF | | | 1249 1250 1251 1252 1253 1254 1255 1256 1257 1258 1259 1260 1261 1262 1263 | choke me #else $ac_func(); #endif ; return 0; } EOF if { (eval echo configure:1257: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* eval "ac_cv_func_$ac_func=no" |
︙ | ︙ | |||
1282 1283 1284 1285 1286 1287 1288 | # If we're using GCC, see if the compiler understands -pipe. If so, use it. # It makes compiling go faster. (This is only a performance feature.) #------------------------------------------------------------------------------ if test -z "$no_pipe"; then if test -n "$GCC"; then echo $ac_n "checking if the compiler understands -pipe""... $ac_c" 1>&6 | | | | > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1288 1289 1290 1291 1292 1293 1294 1295 1296 1297 1298 1299 1300 1301 1302 1303 1304 1305 1306 1307 1308 1309 1310 1311 1312 1313 1314 1315 1316 1317 1318 1319 1320 1321 1322 1323 1324 1325 1326 1327 1328 1329 1330 1331 1332 1333 1334 1335 1336 1337 1338 1339 1340 1341 1342 1343 1344 1345 1346 1347 1348 1349 1350 1351 1352 1353 1354 1355 1356 1357 1358 1359 1360 1361 1362 1363 1364 1365 1366 1367 1368 1369 1370 1371 1372 1373 1374 1375 1376 1377 1378 1379 1380 1381 1382 1383 1384 1385 1386 1387 1388 1389 1390 1391 1392 1393 1394 1395 1396 1397 1398 1399 1400 1401 1402 1403 1404 1405 1406 1407 1408 1409 1410 1411 1412 1413 1414 1415 1416 1417 1418 1419 1420 1421 1422 1423 1424 1425 1426 1427 1428 1429 1430 1431 1432 1433 1434 1435 1436 1437 1438 1439 1440 1441 1442 1443 1444 1445 1446 1447 1448 1449 1450 1451 1452 1453 1454 1455 1456 1457 1458 1459 1460 1461 1462 1463 1464 1465 1466 1467 1468 1469 1470 1471 1472 1473 1474 1475 1476 1477 1478 1479 1480 1481 1482 1483 1484 1485 1486 1487 1488 1489 1490 1491 1492 1493 1494 1495 1496 1497 1498 1499 1500 1501 1502 1503 1504 1505 1506 1507 1508 1509 1510 1511 1512 1513 1514 1515 1516 1517 1518 1519 1520 1521 1522 1523 1524 1525 1526 1527 1528 1529 1530 1531 1532 1533 1534 1535 1536 1537 1538 1539 1540 1541 1542 1543 1544 1545 1546 1547 1548 1549 1550 1551 1552 1553 1554 1555 1556 1557 1558 1559 1560 1561 1562 1563 1564 1565 1566 1567 1568 1569 1570 1571 1572 1573 1574 1575 1576 1577 1578 1579 1580 1581 1582 1583 1584 1585 1586 1587 1588 1589 1590 1591 1592 1593 1594 1595 1596 1597 1598 1599 1600 | # If we're using GCC, see if the compiler understands -pipe. If so, use it. # It makes compiling go faster. (This is only a performance feature.) #------------------------------------------------------------------------------ if test -z "$no_pipe"; then if test -n "$GCC"; then echo $ac_n "checking if the compiler understands -pipe""... $ac_c" 1>&6 echo "configure:1296: checking if the compiler understands -pipe" >&5 OLDCC="$CC" CC="$CC -pipe" cat > conftest.$ac_ext <<EOF #line 1300 "configure" #include "confdefs.h" int main() { ; return 0; } EOF if { (eval echo configure:1307: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* echo "$ac_t""yes" 1>&6 else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* CC="$OLDCC" echo "$ac_t""no" 1>&6 fi rm -f conftest* fi fi #-------------------------------------------------------------------- # Detect what compiler flags to set for 64-bit support. #-------------------------------------------------------------------- echo $ac_n "checking for required early compiler flags""... $ac_c" 1>&6 echo "configure:1327: checking for required early compiler flags" >&5 tcl_flags="" if eval "test \"`echo '$''{'tcl_cv_flag__isoc99_source'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <<EOF #line 1334 "configure" #include "confdefs.h" #include <stdlib.h> int main() { char *p = (char *)strtoll; char *q = (char *)strtoull; ; return 0; } EOF if { (eval echo configure:1341: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* tcl_cv_flag__isoc99_source=no else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* cat > conftest.$ac_ext <<EOF #line 1349 "configure" #include "confdefs.h" #define _ISOC99_SOURCE 1 #include <stdlib.h> int main() { char *p = (char *)strtoll; char *q = (char *)strtoull; ; return 0; } EOF if { (eval echo configure:1357: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* tcl_cv_flag__isoc99_source=yes else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* tcl_cv_flag__isoc99_source=no fi rm -f conftest* fi rm -f conftest* fi if test "x${tcl_cv_flag__isoc99_source}" = "xyes" ; then cat >> confdefs.h <<\EOF #define _ISOC99_SOURCE 1 EOF tcl_flags="$tcl_flags _ISOC99_SOURCE" fi if eval "test \"`echo '$''{'tcl_cv_flag__largefile64_source'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <<EOF #line 1383 "configure" #include "confdefs.h" #include <sys/stat.h> int main() { struct stat64 buf; int i = stat64("/", &buf); ; return 0; } EOF if { (eval echo configure:1390: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* tcl_cv_flag__largefile64_source=no else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* cat > conftest.$ac_ext <<EOF #line 1398 "configure" #include "confdefs.h" #define _LARGEFILE64_SOURCE 1 #include <sys/stat.h> int main() { struct stat64 buf; int i = stat64("/", &buf); ; return 0; } EOF if { (eval echo configure:1406: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* tcl_cv_flag__largefile64_source=yes else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* tcl_cv_flag__largefile64_source=no fi rm -f conftest* fi rm -f conftest* fi if test "x${tcl_cv_flag__largefile64_source}" = "xyes" ; then cat >> confdefs.h <<\EOF #define _LARGEFILE64_SOURCE 1 EOF tcl_flags="$tcl_flags _LARGEFILE64_SOURCE" fi if test "x${tcl_flags}" = "x" ; then echo "$ac_t""none" 1>&6 else echo "$ac_t""${tcl_flags}" 1>&6 fi echo $ac_n "checking for 64-bit integer type""... $ac_c" 1>&6 echo "configure:1435: checking for 64-bit integer type" >&5 if eval "test \"`echo '$''{'tcl_cv_type_64bit'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <<EOF #line 1441 "configure" #include "confdefs.h" int main() { __int64 value = (__int64) 0; ; return 0; } EOF if { (eval echo configure:1448: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* tcl_cv_type_64bit=__int64 else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* tcl_cv_type_64bit=none if test "$cross_compiling" = yes; then { echo "configure: error: can not run test program while cross compiling" 1>&2; exit 1; } else cat > conftest.$ac_ext <<EOF #line 1460 "configure" #include "confdefs.h" #include <unistd.h> int main() {exit(!(sizeof(long long) > sizeof(long)));} EOF if { (eval echo configure:1466: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then tcl_cv_type_64bit="long long" else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 fi rm -fr conftest* fi fi rm -f conftest* fi if test "${tcl_cv_type_64bit}" = none ; then echo "$ac_t""using long" 1>&6 else cat >> confdefs.h <<EOF #define TCL_WIDE_INT_TYPE ${tcl_cv_type_64bit} EOF echo "$ac_t""${tcl_cv_type_64bit}" 1>&6 # Now check for auxiliary declarations echo $ac_n "checking for struct dirent64""... $ac_c" 1>&6 echo "configure:1491: checking for struct dirent64" >&5 if eval "test \"`echo '$''{'tcl_cv_struct_dirent64'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <<EOF #line 1497 "configure" #include "confdefs.h" #include <sys/types.h> #include <sys/dirent.h> int main() { struct dirent64 p; ; return 0; } EOF if { (eval echo configure:1505: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* tcl_cv_struct_dirent64=yes else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* tcl_cv_struct_dirent64=no fi rm -f conftest* fi if test "x${tcl_cv_struct_dirent64}" = "xyes" ; then cat >> confdefs.h <<\EOF #define HAVE_STRUCT_DIRENT64 1 EOF fi echo "$ac_t""${tcl_cv_struct_dirent64}" 1>&6 echo $ac_n "checking for struct stat64""... $ac_c" 1>&6 echo "configure:1526: checking for struct stat64" >&5 if eval "test \"`echo '$''{'tcl_cv_struct_stat64'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <<EOF #line 1532 "configure" #include "confdefs.h" #include <sys/stat.h> int main() { struct stat64 p; ; return 0; } EOF if { (eval echo configure:1540: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* tcl_cv_struct_stat64=yes else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* tcl_cv_struct_stat64=no fi rm -f conftest* fi if test "x${tcl_cv_struct_stat64}" = "xyes" ; then cat >> confdefs.h <<\EOF #define HAVE_STRUCT_STAT64 1 EOF fi echo "$ac_t""${tcl_cv_struct_stat64}" 1>&6 echo $ac_n "checking for off64_t""... $ac_c" 1>&6 echo "configure:1561: checking for off64_t" >&5 if eval "test \"`echo '$''{'tcl_cv_type_off64_t'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <<EOF #line 1567 "configure" #include "confdefs.h" #include <sys/types.h> int main() { off64_t offset; ; return 0; } EOF if { (eval echo configure:1575: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* tcl_cv_type_off64_t=yes else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* tcl_cv_type_off64_t=no fi rm -f conftest* fi if test "x${tcl_cv_type_off64_t}" = "xyes" ; then cat >> confdefs.h <<\EOF #define HAVE_TYPE_OFF64_T 1 EOF fi echo "$ac_t""${tcl_cv_type_off64_t}" 1>&6 fi #-------------------------------------------------------------------- # Find and load the tclConfig.sh file #-------------------------------------------------------------------- # |
︙ | ︙ | |||
1328 1329 1330 1331 1332 1333 1334 | # Check whether --with-tcl or --without-tcl was given. if test "${with_tcl+set}" = set; then withval="$with_tcl" with_tclconfig=${withval} fi echo $ac_n "checking for Tcl configuration""... $ac_c" 1>&6 | | | 1609 1610 1611 1612 1613 1614 1615 1616 1617 1618 1619 1620 1621 1622 1623 | # Check whether --with-tcl or --without-tcl was given. if test "${with_tcl+set}" = set; then withval="$with_tcl" with_tclconfig=${withval} fi echo $ac_n "checking for Tcl configuration""... $ac_c" 1>&6 echo "configure:1617: checking for Tcl configuration" >&5 if eval "test \"`echo '$''{'ac_cv_c_tclconfig'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else # First check to see if --with-tcl was specified. if test x"${with_tclconfig}" != x ; then |
︙ | ︙ | |||
1401 1402 1403 1404 1405 1406 1407 | TCL_BIN_DIR=${ac_cv_c_tclconfig} echo "$ac_t""found $TCL_BIN_DIR/tclConfig.sh" 1>&6 fi fi echo $ac_n "checking for existence of $TCL_BIN_DIR/tclConfig.sh""... $ac_c" 1>&6 | | | 1682 1683 1684 1685 1686 1687 1688 1689 1690 1691 1692 1693 1694 1695 1696 | TCL_BIN_DIR=${ac_cv_c_tclconfig} echo "$ac_t""found $TCL_BIN_DIR/tclConfig.sh" 1>&6 fi fi echo $ac_n "checking for existence of $TCL_BIN_DIR/tclConfig.sh""... $ac_c" 1>&6 echo "configure:1690: checking for existence of $TCL_BIN_DIR/tclConfig.sh" >&5 if test -f "$TCL_BIN_DIR/tclConfig.sh" ; then echo "$ac_t""loading" 1>&6 . $TCL_BIN_DIR/tclConfig.sh else echo "$ac_t""file not found" 1>&6 fi |
︙ | ︙ | |||
1455 1456 1457 1458 1459 1460 1461 1462 1463 1464 1465 | #-------------------------------------------------------------------- # Recompute the necessary flags to run the compiler #-------------------------------------------------------------------- # Step 0.a: Enable 64 bit support? echo $ac_n "checking if 64bit support is requested""... $ac_c" 1>&6 | > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | | | 1736 1737 1738 1739 1740 1741 1742 1743 1744 1745 1746 1747 1748 1749 1750 1751 1752 1753 1754 1755 1756 1757 1758 1759 1760 1761 1762 1763 1764 1765 1766 1767 1768 1769 1770 1771 1772 1773 1774 1775 1776 1777 1778 1779 1780 1781 1782 1783 1784 1785 1786 1787 1788 1789 1790 1791 1792 1793 1794 1795 1796 1797 1798 1799 1800 1801 1802 1803 1804 1805 1806 | #-------------------------------------------------------------------- # Recompute the necessary flags to run the compiler #-------------------------------------------------------------------- echo $ac_n "checking how to build libraries""... $ac_c" 1>&6 echo "configure:1745: checking how to build libraries" >&5 # Check whether --enable-shared or --disable-shared was given. if test "${enable_shared+set}" = set; then enableval="$enable_shared" tcl_ok=$enableval else tcl_ok=yes fi if test "${enable_shared+set}" = set; then enableval="$enable_shared" tcl_ok=$enableval else tcl_ok=yes fi if test "$tcl_ok" = "yes" ; then echo "$ac_t""shared" 1>&6 SHARED_BUILD=1 else echo "$ac_t""static" 1>&6 SHARED_BUILD=0 cat >> confdefs.h <<\EOF #define STATIC_BUILD 1 EOF fi # Step 0.a: Enable 64 bit support? echo $ac_n "checking if 64bit support is requested""... $ac_c" 1>&6 echo "configure:1780: checking if 64bit support is requested" >&5 # Check whether --enable-64bit or --disable-64bit was given. if test "${enable_64bit+set}" = set; then enableval="$enable_64bit" : else enableval="no" fi if test "$enableval" = "yes"; then do64bit=yes else do64bit=no fi echo "$ac_t""$do64bit" 1>&6 # Step 0.b: Enable Solaris 64 bit VIS support? echo $ac_n "checking if 64bit Sparc VIS support is requested""... $ac_c" 1>&6 echo "configure:1800: checking if 64bit Sparc VIS support is requested" >&5 # Check whether --enable-64bit-vis or --disable-64bit-vis was given. if test "${enable_64bit_vis+set}" = set; then enableval="$enable_64bit_vis" : else enableval="no" fi |
︙ | ︙ | |||
1503 1504 1505 1506 1507 1508 1509 | echo "$ac_t""$do64bitVIS" 1>&6 # Step 1: set the variable "system" to hold the name and version number # for the system. This can usually be done via the "uname" command, but # there are a few systems, like Next, where this doesn't work. echo $ac_n "checking system version (for dynamic loading)""... $ac_c" 1>&6 | | | 1816 1817 1818 1819 1820 1821 1822 1823 1824 1825 1826 1827 1828 1829 1830 | echo "$ac_t""$do64bitVIS" 1>&6 # Step 1: set the variable "system" to hold the name and version number # for the system. This can usually be done via the "uname" command, but # there are a few systems, like Next, where this doesn't work. echo $ac_n "checking system version (for dynamic loading)""... $ac_c" 1>&6 echo "configure:1824: checking system version (for dynamic loading)" >&5 if test -f /usr/lib/NextStep/software_version; then system=NEXTSTEP-`awk '/3/,/3/' /usr/lib/NextStep/software_version` else system=`uname -s`-`uname -r` if test "$?" -ne 0 ; then echo "$ac_t""unknown (can't find uname command)" 1>&6 system=unknown |
︙ | ︙ | |||
1529 1530 1531 1532 1533 1534 1535 | fi fi # Step 2: check for existence of -ldl library. This is needed because # Linux can use either -ldl or -ldld for dynamic loading. echo $ac_n "checking for dlopen in -ldl""... $ac_c" 1>&6 | | | | | 1842 1843 1844 1845 1846 1847 1848 1849 1850 1851 1852 1853 1854 1855 1856 1857 1858 1859 1860 1861 1862 1863 1864 1865 1866 1867 1868 1869 1870 1871 1872 1873 1874 1875 | fi fi # Step 2: check for existence of -ldl library. This is needed because # Linux can use either -ldl or -ldld for dynamic loading. echo $ac_n "checking for dlopen in -ldl""... $ac_c" 1>&6 echo "configure:1850: checking for dlopen in -ldl" >&5 ac_lib_var=`echo dl'_'dlopen | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else ac_save_LIBS="$LIBS" LIBS="-ldl $LIBS" cat > conftest.$ac_ext <<EOF #line 1858 "configure" #include "confdefs.h" /* Override any gcc2 internal prototype to avoid an error. */ /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ char dlopen(); int main() { dlopen() ; return 0; } EOF if { (eval echo configure:1869: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=no" |
︙ | ︙ | |||
1592 1593 1594 1595 1596 1597 1598 | fi TCL_NEEDS_EXP_FILE=0 TCL_BUILD_EXP_FILE="" TCL_EXP_FILE="" # Extract the first word of "ar", so it can be a program name with args. set dummy ar; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 | | | 1905 1906 1907 1908 1909 1910 1911 1912 1913 1914 1915 1916 1917 1918 1919 | fi TCL_NEEDS_EXP_FILE=0 TCL_BUILD_EXP_FILE="" TCL_EXP_FILE="" # Extract the first word of "ar", so it can be a program name with args. set dummy ar; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 echo "configure:1913: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_prog_AR'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else if test -n "$AR"; then ac_cv_prog_AR="$AR" # Let the user override the test. else IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":" |
︙ | ︙ | |||
1648 1649 1650 1651 1652 1653 1654 1655 1656 1657 1658 1659 1660 1661 | LDFLAGS="" if test "$GCC" = "yes" ; then LD_SEARCH_FLAGS='-Wl,-R,${LIB_RUNTIME_DIR}' else LD_SEARCH_FLAGS='-R${LIB_RUNTIME_DIR}' fi if test "$do64bit" = "yes" ; then if test "$GCC" = "yes" ; then echo "configure: warning: "64bit mode not supported with GCC on $system"" 1>&2 else do64bit_ok=yes EXTRA_CFLAGS="-q64" LDFLAGS="-q64" | > | 1961 1962 1963 1964 1965 1966 1967 1968 1969 1970 1971 1972 1973 1974 1975 | LDFLAGS="" if test "$GCC" = "yes" ; then LD_SEARCH_FLAGS='-Wl,-R,${LIB_RUNTIME_DIR}' else LD_SEARCH_FLAGS='-R${LIB_RUNTIME_DIR}' fi # Check to enable 64-bit flags for compiler/linker if test "$do64bit" = "yes" ; then if test "$GCC" = "yes" ; then echo "configure: warning: "64bit mode not supported with GCC on $system"" 1>&2 else do64bit_ok=yes EXTRA_CFLAGS="-q64" LDFLAGS="-q64" |
︙ | ︙ | |||
1697 1698 1699 1700 1701 1702 1703 | # AIX does not have a timezone field in struct tm. When the AIX # bsd library is used, the timezone global and the gettimeofday # methods are to be avoided for timezone deduction instead, we # deduce the timezone by comparing the localtime result on a # known GMT value. echo $ac_n "checking for gettimeofday in -lbsd""... $ac_c" 1>&6 | | | | | 2011 2012 2013 2014 2015 2016 2017 2018 2019 2020 2021 2022 2023 2024 2025 2026 2027 2028 2029 2030 2031 2032 2033 2034 2035 2036 2037 2038 2039 2040 2041 2042 2043 2044 | # AIX does not have a timezone field in struct tm. When the AIX # bsd library is used, the timezone global and the gettimeofday # methods are to be avoided for timezone deduction instead, we # deduce the timezone by comparing the localtime result on a # known GMT value. echo $ac_n "checking for gettimeofday in -lbsd""... $ac_c" 1>&6 echo "configure:2019: checking for gettimeofday in -lbsd" >&5 ac_lib_var=`echo bsd'_'gettimeofday | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else ac_save_LIBS="$LIBS" LIBS="-lbsd $LIBS" cat > conftest.$ac_ext <<EOF #line 2027 "configure" #include "confdefs.h" /* Override any gcc2 internal prototype to avoid an error. */ /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ char gettimeofday(); int main() { gettimeofday() ; return 0; } EOF if { (eval echo configure:2038: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=no" |
︙ | ︙ | |||
1744 1745 1746 1747 1748 1749 1750 1751 1752 1753 1754 1755 1756 1757 | if test $libbsd = yes; then MATH_LIBS="$MATH_LIBS -lbsd" cat >> confdefs.h <<\EOF #define USE_DELTA_FOR_TZ 1 EOF fi ;; BSD/OS-2.1*|BSD/OS-3*) SHLIB_CFLAGS="" SHLIB_LD="shlicc -r" SHLIB_LD_LIBS='${LIBS}' SHLIB_SUFFIX=".so" DL_OBJS="tclLoadDl.o" | > > > > > > > > > > > | 2058 2059 2060 2061 2062 2063 2064 2065 2066 2067 2068 2069 2070 2071 2072 2073 2074 2075 2076 2077 2078 2079 2080 2081 2082 | if test $libbsd = yes; then MATH_LIBS="$MATH_LIBS -lbsd" cat >> confdefs.h <<\EOF #define USE_DELTA_FOR_TZ 1 EOF fi # Check to enable 64-bit flags for compiler/linker if test "$do64bit" = "yes" ; then if test "$GCC" = "yes" ; then echo "configure: warning: "64bit mode not supported with GCC on $system"" 1>&2 else do64bit_ok=yes EXTRA_CFLAGS="-q64" LDFLAGS="-q64" fi fi ;; BSD/OS-2.1*|BSD/OS-3*) SHLIB_CFLAGS="" SHLIB_LD="shlicc -r" SHLIB_LD_LIBS='${LIBS}' SHLIB_SUFFIX=".so" DL_OBJS="tclLoadDl.o" |
︙ | ︙ | |||
1776 1777 1778 1779 1780 1781 1782 1783 1784 | SHLIB_SUFFIX=".so" DL_OBJS="tclLoadDl.o" DL_LIBS="-ldl" LDFLAGS="" LD_SEARCH_FLAGS="" ;; HP-UX-*.11.*) SHLIB_SUFFIX=".sl" echo $ac_n "checking for shl_load in -ldld""... $ac_c" 1>&6 | > > > > > > | | | | 2101 2102 2103 2104 2105 2106 2107 2108 2109 2110 2111 2112 2113 2114 2115 2116 2117 2118 2119 2120 2121 2122 2123 2124 2125 2126 2127 2128 2129 2130 2131 2132 2133 2134 2135 2136 2137 2138 2139 2140 2141 2142 | SHLIB_SUFFIX=".so" DL_OBJS="tclLoadDl.o" DL_LIBS="-ldl" LDFLAGS="" LD_SEARCH_FLAGS="" ;; HP-UX-*.11.*) # Use updated header definitions where possible cat >> confdefs.h <<\EOF #define _XOPEN_SOURCE_EXTENDED 1 EOF SHLIB_SUFFIX=".sl" echo $ac_n "checking for shl_load in -ldld""... $ac_c" 1>&6 echo "configure:2117: checking for shl_load in -ldld" >&5 ac_lib_var=`echo dld'_'shl_load | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else ac_save_LIBS="$LIBS" LIBS="-ldld $LIBS" cat > conftest.$ac_ext <<EOF #line 2125 "configure" #include "confdefs.h" /* Override any gcc2 internal prototype to avoid an error. */ /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ char shl_load(); int main() { shl_load() ; return 0; } EOF if { (eval echo configure:2136: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=no" |
︙ | ︙ | |||
1821 1822 1823 1824 1825 1826 1827 | echo "$ac_t""no" 1>&6 tcl_ok=no fi if test "$tcl_ok" = yes; then SHLIB_CFLAGS="+z" SHLIB_LD="ld -b" | | > > | | | | 2152 2153 2154 2155 2156 2157 2158 2159 2160 2161 2162 2163 2164 2165 2166 2167 2168 2169 2170 2171 2172 2173 2174 2175 2176 2177 2178 2179 2180 2181 2182 2183 2184 2185 2186 2187 2188 2189 2190 2191 2192 2193 2194 2195 2196 2197 2198 2199 2200 2201 2202 2203 2204 2205 2206 | echo "$ac_t""no" 1>&6 tcl_ok=no fi if test "$tcl_ok" = yes; then SHLIB_CFLAGS="+z" SHLIB_LD="ld -b" SHLIB_LD_LIBS='${LIBS}' DL_OBJS="tclLoadShl.o" DL_LIBS="-ldld" LDFLAGS="-Wl,-E" LD_SEARCH_FLAGS='-Wl,+s,+b,${LIB_RUNTIME_DIR}:.' fi # Check to enable 64-bit flags for compiler/linker if test "$do64bit" = "yes" ; then if test "$GCC" = "yes" ; then echo "configure: warning: "64bit mode not supported with GCC on $system"" 1>&2 else do64bit_ok=yes EXTRA_CFLAGS="+DA2.0W" LDFLAGS="+DA2.0W $LDFLAGS" fi fi ;; HP-UX-*.08.*|HP-UX-*.09.*|HP-UX-*.10.*) SHLIB_SUFFIX=".sl" echo $ac_n "checking for shl_load in -ldld""... $ac_c" 1>&6 echo "configure:2181: checking for shl_load in -ldld" >&5 ac_lib_var=`echo dld'_'shl_load | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else ac_save_LIBS="$LIBS" LIBS="-ldld $LIBS" cat > conftest.$ac_ext <<EOF #line 2189 "configure" #include "confdefs.h" /* Override any gcc2 internal prototype to avoid an error. */ /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ char shl_load(); int main() { shl_load() ; return 0; } EOF if { (eval echo configure:2200: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=no" |
︙ | ︙ | |||
1938 1939 1940 1941 1942 1943 1944 | ;; esac LDFLAGS="-n32" fi ;; IRIX64-6.*) SHLIB_CFLAGS="" | | | 2271 2272 2273 2274 2275 2276 2277 2278 2279 2280 2281 2282 2283 2284 2285 | ;; esac LDFLAGS="-n32" fi ;; IRIX64-6.*) SHLIB_CFLAGS="" SHLIB_LD="ld -n32 -shared -rdata_shared" SHLIB_LD_LIBS='${LIBS}' SHLIB_SUFFIX=".so" DL_OBJS="tclLoadDl.o" DL_LIBS="" LDFLAGS="" LD_SEARCH_FLAGS='-Wl,-rpath,${LIB_RUNTIME_DIR}' ;; |
︙ | ︙ | |||
1966 1967 1968 1969 1970 1971 1972 | DL_OBJS="tclLoadDl.o" DL_LIBS="-ldl" LDFLAGS="-rdynamic" LD_SEARCH_FLAGS='-Wl,-rpath,${LIB_RUNTIME_DIR}' else ac_safe=`echo "dld.h" | sed 'y%./+-%__p_%'` echo $ac_n "checking for dld.h""... $ac_c" 1>&6 | | | | | 2299 2300 2301 2302 2303 2304 2305 2306 2307 2308 2309 2310 2311 2312 2313 2314 2315 2316 2317 2318 2319 2320 2321 2322 2323 | DL_OBJS="tclLoadDl.o" DL_LIBS="-ldl" LDFLAGS="-rdynamic" LD_SEARCH_FLAGS='-Wl,-rpath,${LIB_RUNTIME_DIR}' else ac_safe=`echo "dld.h" | sed 'y%./+-%__p_%'` echo $ac_n "checking for dld.h""... $ac_c" 1>&6 echo "configure:2307: checking for dld.h" >&5 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <<EOF #line 2312 "configure" #include "confdefs.h" #include <dld.h> EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" { (eval echo configure:2317: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* eval "ac_cv_header_$ac_safe=yes" else echo "$ac_err" >&5 echo "configure: failed program was:" >&5 |
︙ | ︙ | |||
2033 2034 2035 2036 2037 2038 2039 | DL_OBJS="" DL_LIBS="-ldl" LDFLAGS="-rdynamic" LD_SEARCH_FLAGS="" else ac_safe=`echo "dld.h" | sed 'y%./+-%__p_%'` echo $ac_n "checking for dld.h""... $ac_c" 1>&6 | | | | | 2366 2367 2368 2369 2370 2371 2372 2373 2374 2375 2376 2377 2378 2379 2380 2381 2382 2383 2384 2385 2386 2387 2388 2389 2390 | DL_OBJS="" DL_LIBS="-ldl" LDFLAGS="-rdynamic" LD_SEARCH_FLAGS="" else ac_safe=`echo "dld.h" | sed 'y%./+-%__p_%'` echo $ac_n "checking for dld.h""... $ac_c" 1>&6 echo "configure:2374: checking for dld.h" >&5 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <<EOF #line 2379 "configure" #include "confdefs.h" #include <dld.h> EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" { (eval echo configure:2384: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* eval "ac_cv_header_$ac_safe=yes" else echo "$ac_err" >&5 echo "configure: failed program was:" >&5 |
︙ | ︙ | |||
2098 2099 2100 2101 2102 2103 2104 | LDFLAGS="-Wl,-Bexport" LD_SEARCH_FLAGS="" ;; NetBSD-*|FreeBSD-[1-2].*|OpenBSD-*) # Not available on all versions: check for include file. ac_safe=`echo "dlfcn.h" | sed 'y%./+-%__p_%'` echo $ac_n "checking for dlfcn.h""... $ac_c" 1>&6 | | | | | 2431 2432 2433 2434 2435 2436 2437 2438 2439 2440 2441 2442 2443 2444 2445 2446 2447 2448 2449 2450 2451 2452 2453 2454 2455 | LDFLAGS="-Wl,-Bexport" LD_SEARCH_FLAGS="" ;; NetBSD-*|FreeBSD-[1-2].*|OpenBSD-*) # Not available on all versions: check for include file. ac_safe=`echo "dlfcn.h" | sed 'y%./+-%__p_%'` echo $ac_n "checking for dlfcn.h""... $ac_c" 1>&6 echo "configure:2439: checking for dlfcn.h" >&5 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <<EOF #line 2444 "configure" #include "confdefs.h" #include <dlfcn.h> EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" { (eval echo configure:2449: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* eval "ac_cv_header_$ac_safe=yes" else echo "$ac_err" >&5 echo "configure: failed program was:" >&5 |
︙ | ︙ | |||
2135 2136 2137 2138 2139 2140 2141 | SHLIB_LD_LIBS="" SHLIB_SUFFIX=".so" DL_OBJS="tclLoadDl.o" DL_LIBS="" LDFLAGS="" LD_SEARCH_FLAGS='-Wl,-rpath,${LIB_RUNTIME_DIR}' echo $ac_n "checking for ELF""... $ac_c" 1>&6 | | | | 2468 2469 2470 2471 2472 2473 2474 2475 2476 2477 2478 2479 2480 2481 2482 2483 2484 | SHLIB_LD_LIBS="" SHLIB_SUFFIX=".so" DL_OBJS="tclLoadDl.o" DL_LIBS="" LDFLAGS="" LD_SEARCH_FLAGS='-Wl,-rpath,${LIB_RUNTIME_DIR}' echo $ac_n "checking for ELF""... $ac_c" 1>&6 echo "configure:2476: checking for ELF" >&5 cat > conftest.$ac_ext <<EOF #line 2478 "configure" #include "confdefs.h" #ifdef __ELF__ yes #endif EOF |
︙ | ︙ | |||
2189 2190 2191 2192 2193 2194 2195 | SHLIB_CFLAGS="-fPIC" SHLIB_LD="ld -Bshareable -x" SHLIB_LD_LIBS='${LIBS}' SHLIB_SUFFIX=".so" DL_OBJS="tclLoadDl.o" DL_LIBS="" LDFLAGS="-export-dynamic" | | | > > > > > | < | | | > > | 2522 2523 2524 2525 2526 2527 2528 2529 2530 2531 2532 2533 2534 2535 2536 2537 2538 2539 2540 2541 2542 2543 2544 2545 2546 2547 2548 | SHLIB_CFLAGS="-fPIC" SHLIB_LD="ld -Bshareable -x" SHLIB_LD_LIBS='${LIBS}' SHLIB_SUFFIX=".so" DL_OBJS="tclLoadDl.o" DL_LIBS="" LDFLAGS="-export-dynamic" LD_SEARCH_FLAGS='-Wl,-rpath,${LIB_RUNTIME_DIR}' if test "${TCL_THREADS}" = "1" ; then EXTRA_CFLAGS="-pthread" LDFLAGS="$LDFLAGS -pthread" fi case $system in FreeBSD-3.*) # FreeBSD-3 doesn't handle version numbers with dots. UNSHARED_LIB_SUFFIX='${TCL_TRIM_DOTS}\$\{DBGX\}.a' SHARED_LIB_SUFFIX='${TCL_TRIM_DOTS}\$\{DBGX\}.so' TCL_LIB_VERSIONS_OK=nodots ;; esac ;; Rhapsody-*|Darwin-*) SHLIB_CFLAGS="-fno-common" SHLIB_LD="cc -dynamiclib \${LDFLAGS}" TCL_SHLIB_LD_EXTRAS="-compatibility_version ${TCL_MAJOR_VERSION} -current_version \${VERSION} -install_name \${LIB_RUNTIME_DIR}/\${TCL_LIB_FILE} -prebind -seg1addr a000000" SHLIB_LD_LIBS='${LIBS}' SHLIB_SUFFIX=".dylib" |
︙ | ︙ | |||
2242 2243 2244 2245 2246 2247 2248 | DL_LIBS="" LDFLAGS="" LD_SEARCH_FLAGS="" ;; OSF1-1.*) # OSF/1 1.3 from OSF using ELF, and derivatives, including AD2 SHLIB_CFLAGS="-fPIC" | > | > > > > | > > > | 2581 2582 2583 2584 2585 2586 2587 2588 2589 2590 2591 2592 2593 2594 2595 2596 2597 2598 2599 2600 2601 2602 2603 2604 2605 2606 2607 2608 2609 2610 2611 2612 2613 2614 | DL_LIBS="" LDFLAGS="" LD_SEARCH_FLAGS="" ;; OSF1-1.*) # OSF/1 1.3 from OSF using ELF, and derivatives, including AD2 SHLIB_CFLAGS="-fPIC" if test "$SHARED_BUILD" = "1" ; then SHLIB_LD="ld -shared" else SHLIB_LD="ld -non_shared" fi SHLIB_LD_LIBS="" SHLIB_SUFFIX=".so" DL_OBJS="tclLoadDl.o" DL_LIBS="" LDFLAGS="" LD_SEARCH_FLAGS="" ;; OSF1-V*) # Digital OSF/1 SHLIB_CFLAGS="" if test "$SHARED_BUILD" = "1" ; then SHLIB_LD='ld -shared -expect_unresolved "*"' else SHLIB_LD='ld -non_shared -expect_unresolved "*"' fi SHLIB_LD_LIBS="" SHLIB_SUFFIX=".so" DL_OBJS="tclLoadDl.o" DL_LIBS="" LDFLAGS="" LD_SEARCH_FLAGS='-Wl,-rpath,${LIB_RUNTIME_DIR}' if test "$GCC" != "yes" ; then |
︙ | ︙ | |||
2356 2357 2358 2359 2360 2361 2362 2363 2364 2365 2366 2367 2368 2369 | # Note: If _REENTRANT isn't defined, then Solaris # won't define thread-safe library routines. cat >> confdefs.h <<\EOF #define _REENTRANT 1 EOF SHLIB_CFLAGS="-KPIC" SHLIB_LD="/usr/ccs/bin/ld -G -z text" # Note: need the LIBS below, otherwise Tk won't find Tcl's # symbols when dynamically loaded into tclsh. | > > > > | 2703 2704 2705 2706 2707 2708 2709 2710 2711 2712 2713 2714 2715 2716 2717 2718 2719 2720 | # Note: If _REENTRANT isn't defined, then Solaris # won't define thread-safe library routines. cat >> confdefs.h <<\EOF #define _REENTRANT 1 EOF cat >> confdefs.h <<\EOF #define _POSIX_PTHREAD_SEMANTICS 1 EOF SHLIB_CFLAGS="-KPIC" SHLIB_LD="/usr/ccs/bin/ld -G -z text" # Note: need the LIBS below, otherwise Tk won't find Tcl's # symbols when dynamically loaded into tclsh. |
︙ | ︙ | |||
2383 2384 2385 2386 2387 2388 2389 2390 2391 2392 2393 2394 2395 2396 2397 2398 2399 2400 2401 | # Note: If _REENTRANT isn't defined, then Solaris # won't define thread-safe library routines. cat >> confdefs.h <<\EOF #define _REENTRANT 1 EOF SHLIB_CFLAGS="-KPIC" SHLIB_LD="/usr/ccs/bin/ld -G -z text" LDFLAGS="" if test "$do64bit" = "yes" ; then arch=`isainfo` if test "$arch" = "sparcv9 sparc" ; then if test "$GCC" = "yes" ; then echo "configure: warning: "64bit mode not supported with GCC on $system"" 1>&2 else do64bit_ok=yes | > > > > > | 2734 2735 2736 2737 2738 2739 2740 2741 2742 2743 2744 2745 2746 2747 2748 2749 2750 2751 2752 2753 2754 2755 2756 2757 | # Note: If _REENTRANT isn't defined, then Solaris # won't define thread-safe library routines. cat >> confdefs.h <<\EOF #define _REENTRANT 1 EOF cat >> confdefs.h <<\EOF #define _POSIX_PTHREAD_SEMANTICS 1 EOF SHLIB_CFLAGS="-KPIC" SHLIB_LD="/usr/ccs/bin/ld -G -z text" LDFLAGS="" # Check to enable 64-bit flags for compiler/linker if test "$do64bit" = "yes" ; then arch=`isainfo` if test "$arch" = "sparcv9 sparc" ; then if test "$GCC" = "yes" ; then echo "configure: warning: "64bit mode not supported with GCC on $system"" 1>&2 else do64bit_ok=yes |
︙ | ︙ | |||
2445 2446 2447 2448 2449 2450 2451 | SHLIB_SUFFIX=".so" DL_OBJS="tclLoadDl.o" DL_LIBS="-ldl" # Some UNIX_SV* systems (unixware 1.1.2 for example) have linkers # that don't grok the -Bexport option. Test that it does. hold_ldflags=$LDFLAGS echo $ac_n "checking for ld accepts -Bexport flag""... $ac_c" 1>&6 | | | | | 2801 2802 2803 2804 2805 2806 2807 2808 2809 2810 2811 2812 2813 2814 2815 2816 2817 2818 2819 2820 2821 2822 2823 2824 2825 | SHLIB_SUFFIX=".so" DL_OBJS="tclLoadDl.o" DL_LIBS="-ldl" # Some UNIX_SV* systems (unixware 1.1.2 for example) have linkers # that don't grok the -Bexport option. Test that it does. hold_ldflags=$LDFLAGS echo $ac_n "checking for ld accepts -Bexport flag""... $ac_c" 1>&6 echo "configure:2809: checking for ld accepts -Bexport flag" >&5 LDFLAGS="${LDFLAGS} -Wl,-Bexport" cat > conftest.$ac_ext <<EOF #line 2812 "configure" #include "confdefs.h" int main() { int i; ; return 0; } EOF if { (eval echo configure:2819: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* found=yes else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* found=no |
︙ | ︙ | |||
2501 2502 2503 2504 2505 2506 2507 | # # Note that the modified COFF format used on MIPS Ultrix 4.x is usable; the # `struct exec' includes a second header that contains information that # duplicates the v7 fields that are needed. if test "x$DL_OBJS" = "xtclLoadAout.o" ; then echo $ac_n "checking sys/exec.h""... $ac_c" 1>&6 | | | | | | | | | | | 2857 2858 2859 2860 2861 2862 2863 2864 2865 2866 2867 2868 2869 2870 2871 2872 2873 2874 2875 2876 2877 2878 2879 2880 2881 2882 2883 2884 2885 2886 2887 2888 2889 2890 2891 2892 2893 2894 2895 2896 2897 2898 2899 2900 2901 2902 2903 2904 2905 2906 2907 2908 2909 2910 2911 2912 2913 2914 2915 2916 2917 2918 2919 2920 2921 2922 2923 2924 2925 2926 2927 2928 2929 2930 2931 2932 2933 2934 2935 2936 2937 2938 2939 2940 2941 2942 2943 2944 2945 2946 2947 2948 2949 2950 2951 2952 2953 2954 2955 2956 2957 2958 2959 2960 2961 2962 2963 2964 2965 2966 2967 | # # Note that the modified COFF format used on MIPS Ultrix 4.x is usable; the # `struct exec' includes a second header that contains information that # duplicates the v7 fields that are needed. if test "x$DL_OBJS" = "xtclLoadAout.o" ; then echo $ac_n "checking sys/exec.h""... $ac_c" 1>&6 echo "configure:2865: checking sys/exec.h" >&5 cat > conftest.$ac_ext <<EOF #line 2867 "configure" #include "confdefs.h" #include <sys/exec.h> int main() { struct exec foo; unsigned long seek; int flag; #if defined(__mips) || defined(mips) seek = N_TXTOFF (foo.ex_f, foo.ex_o); #else seek = N_TXTOFF (foo); #endif flag = (foo.a_magic == OMAGIC); return foo.a_text + foo.a_data + foo.a_bss + foo.a_entry; ; return 0; } EOF if { (eval echo configure:2885: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* tcl_ok=usable else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* tcl_ok=unusable fi rm -f conftest* echo "$ac_t""$tcl_ok" 1>&6 if test $tcl_ok = usable; then cat >> confdefs.h <<\EOF #define USE_SYS_EXEC_H 1 EOF else echo $ac_n "checking a.out.h""... $ac_c" 1>&6 echo "configure:2903: checking a.out.h" >&5 cat > conftest.$ac_ext <<EOF #line 2905 "configure" #include "confdefs.h" #include <a.out.h> int main() { struct exec foo; unsigned long seek; int flag; #if defined(__mips) || defined(mips) seek = N_TXTOFF (foo.ex_f, foo.ex_o); #else seek = N_TXTOFF (foo); #endif flag = (foo.a_magic == OMAGIC); return foo.a_text + foo.a_data + foo.a_bss + foo.a_entry; ; return 0; } EOF if { (eval echo configure:2923: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* tcl_ok=usable else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* tcl_ok=unusable fi rm -f conftest* echo "$ac_t""$tcl_ok" 1>&6 if test $tcl_ok = usable; then cat >> confdefs.h <<\EOF #define USE_A_OUT_H 1 EOF else echo $ac_n "checking sys/exec_aout.h""... $ac_c" 1>&6 echo "configure:2941: checking sys/exec_aout.h" >&5 cat > conftest.$ac_ext <<EOF #line 2943 "configure" #include "confdefs.h" #include <sys/exec_aout.h> int main() { struct exec foo; unsigned long seek; int flag; #if defined(__mips) || defined(mips) seek = N_TXTOFF (foo.ex_f, foo.ex_o); #else seek = N_TXTOFF (foo); #endif flag = (foo.a_midmag == OMAGIC); return foo.a_text + foo.a_data + foo.a_bss + foo.a_entry; ; return 0; } EOF if { (eval echo configure:2961: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* tcl_ok=usable else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* tcl_ok=unusable |
︙ | ︙ | |||
2694 2695 2696 2697 2698 2699 2700 | echo $ac_n "checking for build with symbols""... $ac_c" 1>&6 | | | 3050 3051 3052 3053 3054 3055 3056 3057 3058 3059 3060 3061 3062 3063 3064 | echo $ac_n "checking for build with symbols""... $ac_c" 1>&6 echo "configure:3058: checking for build with symbols" >&5 # Check whether --enable-symbols or --disable-symbols was given. if test "${enable_symbols+set}" = set; then enableval="$enable_symbols" tcl_ok=$enableval else tcl_ok=no fi |
︙ | ︙ | |||
2738 2739 2740 2741 2742 2743 2744 | # On a few very rare systems, all of the libm.a stuff is # already in libc.a. Set compiler flags accordingly. # Also, Linux requires the "ieee" library for math to work # right (and it must appear before "-lm"). #-------------------------------------------------------------------- echo $ac_n "checking for sin""... $ac_c" 1>&6 | | | | 3094 3095 3096 3097 3098 3099 3100 3101 3102 3103 3104 3105 3106 3107 3108 3109 3110 3111 3112 3113 | # On a few very rare systems, all of the libm.a stuff is # already in libc.a. Set compiler flags accordingly. # Also, Linux requires the "ieee" library for math to work # right (and it must appear before "-lm"). #-------------------------------------------------------------------- echo $ac_n "checking for sin""... $ac_c" 1>&6 echo "configure:3102: checking for sin" >&5 if eval "test \"`echo '$''{'ac_cv_func_sin'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <<EOF #line 3107 "configure" #include "confdefs.h" /* System header to define __stub macros and hopefully few prototypes, which can conflict with char sin(); below. */ #include <assert.h> /* Override any gcc2 internal prototype to avoid an error. */ /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ |
︙ | ︙ | |||
2766 2767 2768 2769 2770 2771 2772 | choke me #else sin(); #endif ; return 0; } EOF | | | | | | 3122 3123 3124 3125 3126 3127 3128 3129 3130 3131 3132 3133 3134 3135 3136 3137 3138 3139 3140 3141 3142 3143 3144 3145 3146 3147 3148 3149 3150 3151 3152 3153 3154 3155 3156 3157 3158 3159 3160 3161 3162 3163 3164 3165 3166 3167 3168 3169 3170 3171 3172 | choke me #else sin(); #endif ; return 0; } EOF if { (eval echo configure:3130: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_sin=yes" else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* eval "ac_cv_func_sin=no" fi rm -f conftest* fi if eval "test \"`echo '$ac_cv_func_'sin`\" = yes"; then echo "$ac_t""yes" 1>&6 MATH_LIBS="" else echo "$ac_t""no" 1>&6 MATH_LIBS="-lm" fi echo $ac_n "checking for main in -lieee""... $ac_c" 1>&6 echo "configure:3151: checking for main in -lieee" >&5 ac_lib_var=`echo ieee'_'main | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else ac_save_LIBS="$LIBS" LIBS="-lieee $LIBS" cat > conftest.$ac_ext <<EOF #line 3159 "configure" #include "confdefs.h" int main() { main() ; return 0; } EOF if { (eval echo configure:3166: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=no" |
︙ | ︙ | |||
2833 2834 2835 2836 2837 2838 2839 | # the MATH_LIBS or it breaks the pow() function. The way to # insure proper sequencing, is to add it to the tail of MATH_LIBS. # This library also supplies gettimeofday. #-------------------------------------------------------------------- libbsd=no if test "`uname -s`" = "AIX" ; then echo $ac_n "checking for gettimeofday in -lbsd""... $ac_c" 1>&6 | | | | | 3189 3190 3191 3192 3193 3194 3195 3196 3197 3198 3199 3200 3201 3202 3203 3204 3205 3206 3207 3208 3209 3210 3211 3212 3213 3214 3215 3216 3217 3218 3219 3220 3221 3222 | # the MATH_LIBS or it breaks the pow() function. The way to # insure proper sequencing, is to add it to the tail of MATH_LIBS. # This library also supplies gettimeofday. #-------------------------------------------------------------------- libbsd=no if test "`uname -s`" = "AIX" ; then echo $ac_n "checking for gettimeofday in -lbsd""... $ac_c" 1>&6 echo "configure:3197: checking for gettimeofday in -lbsd" >&5 ac_lib_var=`echo bsd'_'gettimeofday | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else ac_save_LIBS="$LIBS" LIBS="-lbsd $LIBS" cat > conftest.$ac_ext <<EOF #line 3205 "configure" #include "confdefs.h" /* Override any gcc2 internal prototype to avoid an error. */ /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ char gettimeofday(); int main() { gettimeofday() ; return 0; } EOF if { (eval echo configure:3216: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=no" |
︙ | ︙ | |||
2883 2884 2885 2886 2887 2888 2889 | #-------------------------------------------------------------------- # Supply a substitute for stdlib.h if it doesn't define strtol, # strtoul, or strtod (which it doesn't in some versions of SunOS). #-------------------------------------------------------------------- echo $ac_n "checking stdlib.h""... $ac_c" 1>&6 | | | | | | 3239 3240 3241 3242 3243 3244 3245 3246 3247 3248 3249 3250 3251 3252 3253 3254 3255 3256 3257 3258 3259 3260 3261 3262 3263 3264 3265 3266 3267 3268 3269 3270 3271 3272 3273 3274 3275 3276 3277 3278 3279 3280 3281 3282 3283 3284 | #-------------------------------------------------------------------- # Supply a substitute for stdlib.h if it doesn't define strtol, # strtoul, or strtod (which it doesn't in some versions of SunOS). #-------------------------------------------------------------------- echo $ac_n "checking stdlib.h""... $ac_c" 1>&6 echo "configure:3247: checking stdlib.h" >&5 cat > conftest.$ac_ext <<EOF #line 3249 "configure" #include "confdefs.h" #include <stdlib.h> EOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | egrep "strtol" >/dev/null 2>&1; then rm -rf conftest* tk_ok=yes else rm -rf conftest* tk_ok=no fi rm -f conftest* cat > conftest.$ac_ext <<EOF #line 3264 "configure" #include "confdefs.h" #include <stdlib.h> EOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | egrep "strtoul" >/dev/null 2>&1; then : else rm -rf conftest* tk_ok=no fi rm -f conftest* cat > conftest.$ac_ext <<EOF #line 3278 "configure" #include "confdefs.h" #include <stdlib.h> EOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | egrep "strtod" >/dev/null 2>&1; then : else |
︙ | ︙ | |||
2946 2947 2948 2949 2950 2951 2952 | # systems like OSF/1 have a sys/select.h that's of no use, and # other systems like SCO UNIX have a sys/select.h that's # pernicious. If "fd_set" isn't defined anywhere then set a # special flag. #-------------------------------------------------------------------- echo $ac_n "checking fd_set and sys/select""... $ac_c" 1>&6 | | | | | | 3302 3303 3304 3305 3306 3307 3308 3309 3310 3311 3312 3313 3314 3315 3316 3317 3318 3319 3320 3321 3322 3323 3324 3325 3326 3327 3328 3329 3330 3331 3332 3333 3334 3335 3336 3337 | # systems like OSF/1 have a sys/select.h that's of no use, and # other systems like SCO UNIX have a sys/select.h that's # pernicious. If "fd_set" isn't defined anywhere then set a # special flag. #-------------------------------------------------------------------- echo $ac_n "checking fd_set and sys/select""... $ac_c" 1>&6 echo "configure:3310: checking fd_set and sys/select" >&5 cat > conftest.$ac_ext <<EOF #line 3312 "configure" #include "confdefs.h" #include <sys/types.h> int main() { fd_set readMask, writeMask; ; return 0; } EOF if { (eval echo configure:3319: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* tk_ok=yes else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* tk_ok=no fi rm -f conftest* if test $tk_ok = no; then cat > conftest.$ac_ext <<EOF #line 3331 "configure" #include "confdefs.h" #include <sys/select.h> EOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | egrep "fd_mask" >/dev/null 2>&1; then rm -rf conftest* tk_ok=yes |
︙ | ︙ | |||
2999 3000 3001 3002 3003 3004 3005 | #-------------------------------------------------------------------- # Check for various typedefs and provide substitutes if # they don't exist. #-------------------------------------------------------------------- echo $ac_n "checking for ANSI C header files""... $ac_c" 1>&6 | | | | | | | | | 3355 3356 3357 3358 3359 3360 3361 3362 3363 3364 3365 3366 3367 3368 3369 3370 3371 3372 3373 3374 3375 3376 3377 3378 3379 3380 3381 3382 3383 3384 3385 3386 3387 3388 3389 3390 3391 3392 3393 3394 3395 3396 3397 3398 3399 3400 3401 3402 3403 3404 3405 3406 3407 3408 3409 3410 3411 3412 3413 3414 3415 3416 3417 3418 3419 3420 3421 3422 3423 3424 3425 3426 3427 3428 3429 3430 3431 3432 3433 3434 3435 3436 3437 3438 3439 3440 3441 3442 3443 3444 3445 3446 3447 3448 3449 | #-------------------------------------------------------------------- # Check for various typedefs and provide substitutes if # they don't exist. #-------------------------------------------------------------------- echo $ac_n "checking for ANSI C header files""... $ac_c" 1>&6 echo "configure:3363: checking for ANSI C header files" >&5 if eval "test \"`echo '$''{'ac_cv_header_stdc'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <<EOF #line 3368 "configure" #include "confdefs.h" #include <stdlib.h> #include <stdarg.h> #include <string.h> #include <float.h> EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" { (eval echo configure:3376: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* ac_cv_header_stdc=yes else echo "$ac_err" >&5 echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* ac_cv_header_stdc=no fi rm -f conftest* if test $ac_cv_header_stdc = yes; then # SunOS 4.x string.h does not declare mem*, contrary to ANSI. cat > conftest.$ac_ext <<EOF #line 3393 "configure" #include "confdefs.h" #include <string.h> EOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | egrep "memchr" >/dev/null 2>&1; then : else rm -rf conftest* ac_cv_header_stdc=no fi rm -f conftest* fi if test $ac_cv_header_stdc = yes; then # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI. cat > conftest.$ac_ext <<EOF #line 3411 "configure" #include "confdefs.h" #include <stdlib.h> EOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | egrep "free" >/dev/null 2>&1; then : else rm -rf conftest* ac_cv_header_stdc=no fi rm -f conftest* fi if test $ac_cv_header_stdc = yes; then # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi. if test "$cross_compiling" = yes; then : else cat > conftest.$ac_ext <<EOF #line 3432 "configure" #include "confdefs.h" #include <ctype.h> #define ISLOWER(c) ('a' <= (c) && (c) <= 'z') #define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c)) #define XOR(e, f) (((e) && !(f)) || (!(e) && (f))) int main () { int i; for (i = 0; i < 256; i++) if (XOR (islower (i), ISLOWER (i)) || toupper (i) != TOUPPER (i)) exit(2); exit (0); } EOF if { (eval echo configure:3443: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then : else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -fr conftest* ac_cv_header_stdc=no |
︙ | ︙ | |||
3103 3104 3105 3106 3107 3108 3109 | cat >> confdefs.h <<\EOF #define STDC_HEADERS 1 EOF fi echo $ac_n "checking for mode_t""... $ac_c" 1>&6 | | | | 3459 3460 3461 3462 3463 3464 3465 3466 3467 3468 3469 3470 3471 3472 3473 3474 3475 3476 3477 3478 | cat >> confdefs.h <<\EOF #define STDC_HEADERS 1 EOF fi echo $ac_n "checking for mode_t""... $ac_c" 1>&6 echo "configure:3467: checking for mode_t" >&5 if eval "test \"`echo '$''{'ac_cv_type_mode_t'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <<EOF #line 3472 "configure" #include "confdefs.h" #include <sys/types.h> #if STDC_HEADERS #include <stdlib.h> #include <stddef.h> #endif EOF |
︙ | ︙ | |||
3136 3137 3138 3139 3140 3141 3142 | cat >> confdefs.h <<\EOF #define mode_t int EOF fi echo $ac_n "checking for pid_t""... $ac_c" 1>&6 | | | | 3492 3493 3494 3495 3496 3497 3498 3499 3500 3501 3502 3503 3504 3505 3506 3507 3508 3509 3510 3511 | cat >> confdefs.h <<\EOF #define mode_t int EOF fi echo $ac_n "checking for pid_t""... $ac_c" 1>&6 echo "configure:3500: checking for pid_t" >&5 if eval "test \"`echo '$''{'ac_cv_type_pid_t'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <<EOF #line 3505 "configure" #include "confdefs.h" #include <sys/types.h> #if STDC_HEADERS #include <stdlib.h> #include <stddef.h> #endif EOF |
︙ | ︙ | |||
3169 3170 3171 3172 3173 3174 3175 | cat >> confdefs.h <<\EOF #define pid_t int EOF fi echo $ac_n "checking for size_t""... $ac_c" 1>&6 | | | | 3525 3526 3527 3528 3529 3530 3531 3532 3533 3534 3535 3536 3537 3538 3539 3540 3541 3542 3543 3544 | cat >> confdefs.h <<\EOF #define pid_t int EOF fi echo $ac_n "checking for size_t""... $ac_c" 1>&6 echo "configure:3533: checking for size_t" >&5 if eval "test \"`echo '$''{'ac_cv_type_size_t'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <<EOF #line 3538 "configure" #include "confdefs.h" #include <sys/types.h> #if STDC_HEADERS #include <stdlib.h> #include <stddef.h> #endif EOF |
︙ | ︙ | |||
3202 3203 3204 3205 3206 3207 3208 | cat >> confdefs.h <<\EOF #define size_t unsigned EOF fi echo $ac_n "checking for uid_t in sys/types.h""... $ac_c" 1>&6 | | | | 3558 3559 3560 3561 3562 3563 3564 3565 3566 3567 3568 3569 3570 3571 3572 3573 3574 3575 3576 3577 | cat >> confdefs.h <<\EOF #define size_t unsigned EOF fi echo $ac_n "checking for uid_t in sys/types.h""... $ac_c" 1>&6 echo "configure:3566: checking for uid_t in sys/types.h" >&5 if eval "test \"`echo '$''{'ac_cv_type_uid_t'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <<EOF #line 3571 "configure" #include "confdefs.h" #include <sys/types.h> EOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | egrep "uid_t" >/dev/null 2>&1; then rm -rf conftest* ac_cv_type_uid_t=yes |
︙ | ︙ | |||
3244 3245 3246 3247 3248 3249 3250 | # Find out about time handling differences. #------------------------------------------------------------------------------ for ac_hdr in sys/time.h do ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 | | | | | 3600 3601 3602 3603 3604 3605 3606 3607 3608 3609 3610 3611 3612 3613 3614 3615 3616 3617 3618 3619 3620 3621 3622 3623 3624 | # Find out about time handling differences. #------------------------------------------------------------------------------ for ac_hdr in sys/time.h do ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 echo "configure:3608: checking for $ac_hdr" >&5 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <<EOF #line 3613 "configure" #include "confdefs.h" #include <$ac_hdr> EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" { (eval echo configure:3618: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* eval "ac_cv_header_$ac_safe=yes" else echo "$ac_err" >&5 echo "configure: failed program was:" >&5 |
︙ | ︙ | |||
3281 3282 3283 3284 3285 3286 3287 | else echo "$ac_t""no" 1>&6 fi done echo $ac_n "checking whether time.h and sys/time.h may both be included""... $ac_c" 1>&6 | | | | | 3637 3638 3639 3640 3641 3642 3643 3644 3645 3646 3647 3648 3649 3650 3651 3652 3653 3654 3655 3656 3657 3658 3659 3660 3661 3662 3663 3664 3665 | else echo "$ac_t""no" 1>&6 fi done echo $ac_n "checking whether time.h and sys/time.h may both be included""... $ac_c" 1>&6 echo "configure:3645: checking whether time.h and sys/time.h may both be included" >&5 if eval "test \"`echo '$''{'ac_cv_header_time'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <<EOF #line 3650 "configure" #include "confdefs.h" #include <sys/types.h> #include <sys/time.h> #include <time.h> int main() { struct tm *tp; ; return 0; } EOF if { (eval echo configure:3659: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_header_time=yes else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* ac_cv_header_time=no |
︙ | ︙ | |||
3321 3322 3323 3324 3325 3326 3327 | #------------------------------------------- # In OS/390 struct pwd has no pw_gecos field #------------------------------------------- echo $ac_n "checking pw_gecos in struct pwd""... $ac_c" 1>&6 | | | | | 3677 3678 3679 3680 3681 3682 3683 3684 3685 3686 3687 3688 3689 3690 3691 3692 3693 3694 3695 3696 3697 3698 3699 3700 | #------------------------------------------- # In OS/390 struct pwd has no pw_gecos field #------------------------------------------- echo $ac_n "checking pw_gecos in struct pwd""... $ac_c" 1>&6 echo "configure:3685: checking pw_gecos in struct pwd" >&5 cat > conftest.$ac_ext <<EOF #line 3687 "configure" #include "confdefs.h" #include <pwd.h> int main() { struct passwd pwd; pwd.pw_gecos; ; return 0; } EOF if { (eval echo configure:3694: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* tk_ok=yes else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* tk_ok=no |
︙ | ︙ | |||
3363 3364 3365 3366 3367 3368 3369 | # If we find X, set shell vars x_includes and x_libraries to the # paths, otherwise set no_x=yes. # Uses ac_ vars as temps to allow command line to override cache and checks. # --without-x overrides everything else, but does not touch the cache. echo $ac_n "checking for X""... $ac_c" 1>&6 | | | 3719 3720 3721 3722 3723 3724 3725 3726 3727 3728 3729 3730 3731 3732 3733 | # If we find X, set shell vars x_includes and x_libraries to the # paths, otherwise set no_x=yes. # Uses ac_ vars as temps to allow command line to override cache and checks. # --without-x overrides everything else, but does not touch the cache. echo $ac_n "checking for X""... $ac_c" 1>&6 echo "configure:3727: checking for X" >&5 # Check whether --with-x or --without-x was given. if test "${with_x+set}" = set; then withval="$with_x" : fi |
︙ | ︙ | |||
3425 3426 3427 3428 3429 3430 3431 | if test "$ac_x_includes" = NO; then # Guess where to find include files, by looking for this one X11 .h file. test -z "$x_direct_test_include" && x_direct_test_include=X11/Intrinsic.h # First, try using that file with no special directory specified. cat > conftest.$ac_ext <<EOF | | | | 3781 3782 3783 3784 3785 3786 3787 3788 3789 3790 3791 3792 3793 3794 3795 3796 3797 3798 3799 3800 | if test "$ac_x_includes" = NO; then # Guess where to find include files, by looking for this one X11 .h file. test -z "$x_direct_test_include" && x_direct_test_include=X11/Intrinsic.h # First, try using that file with no special directory specified. cat > conftest.$ac_ext <<EOF #line 3789 "configure" #include "confdefs.h" #include <$x_direct_test_include> EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" { (eval echo configure:3794: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* # We can compile using X headers with no special include directory. ac_x_includes= else echo "$ac_err" >&5 |
︙ | ︙ | |||
3499 3500 3501 3502 3503 3504 3505 | test -z "$x_direct_test_function" && x_direct_test_function=XtMalloc # See if we find them without any special options. # Don't add to $LIBS permanently. ac_save_LIBS="$LIBS" LIBS="-l$x_direct_test_library $LIBS" cat > conftest.$ac_ext <<EOF | | | | 3855 3856 3857 3858 3859 3860 3861 3862 3863 3864 3865 3866 3867 3868 3869 3870 3871 3872 3873 3874 3875 3876 | test -z "$x_direct_test_function" && x_direct_test_function=XtMalloc # See if we find them without any special options. # Don't add to $LIBS permanently. ac_save_LIBS="$LIBS" LIBS="-l$x_direct_test_library $LIBS" cat > conftest.$ac_ext <<EOF #line 3863 "configure" #include "confdefs.h" int main() { ${x_direct_test_function}() ; return 0; } EOF if { (eval echo configure:3870: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* LIBS="$ac_save_LIBS" # We can link X programs with no special library path. ac_x_libraries= else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 |
︙ | ︙ | |||
3596 3597 3598 3599 3600 3601 3602 | echo "$ac_t""libraries $x_libraries, headers $x_includes" 1>&6 fi not_really_there="" if test "$no_x" = ""; then if test "$x_includes" = ""; then cat > conftest.$ac_ext <<EOF | | | | | | | 3952 3953 3954 3955 3956 3957 3958 3959 3960 3961 3962 3963 3964 3965 3966 3967 3968 3969 3970 3971 3972 3973 3974 3975 3976 3977 3978 3979 3980 3981 3982 3983 3984 3985 3986 3987 3988 3989 3990 3991 3992 3993 3994 3995 3996 3997 3998 3999 | echo "$ac_t""libraries $x_libraries, headers $x_includes" 1>&6 fi not_really_there="" if test "$no_x" = ""; then if test "$x_includes" = ""; then cat > conftest.$ac_ext <<EOF #line 3960 "configure" #include "confdefs.h" #include <X11/XIntrinsic.h> EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" { (eval echo configure:3965: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then : else echo "$ac_err" >&5 echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* not_really_there="yes" fi rm -f conftest* else if test ! -r $x_includes/X11/Intrinsic.h; then not_really_there="yes" fi fi fi if test "$no_x" = "yes" -o "$not_really_there" = "yes"; then echo $ac_n "checking for X11 header files""... $ac_c" 1>&6 echo "configure:3985: checking for X11 header files" >&5 XINCLUDES="# no special path needed" cat > conftest.$ac_ext <<EOF #line 3988 "configure" #include "confdefs.h" #include <X11/Intrinsic.h> EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" { (eval echo configure:3993: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then : else echo "$ac_err" >&5 echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 |
︙ | ︙ | |||
3665 3666 3667 3668 3669 3670 3671 | if test "$XINCLUDES" = nope; then echo "$ac_t""couldn't find any!" 1>&6 XINCLUDES="# no include files found" fi if test "$no_x" = yes; then echo $ac_n "checking for X11 libraries""... $ac_c" 1>&6 | | | | | | 4021 4022 4023 4024 4025 4026 4027 4028 4029 4030 4031 4032 4033 4034 4035 4036 4037 4038 4039 4040 4041 4042 4043 4044 4045 4046 4047 4048 4049 4050 4051 4052 4053 4054 4055 4056 4057 4058 4059 4060 4061 4062 4063 4064 4065 4066 4067 4068 4069 4070 4071 4072 4073 4074 | if test "$XINCLUDES" = nope; then echo "$ac_t""couldn't find any!" 1>&6 XINCLUDES="# no include files found" fi if test "$no_x" = yes; then echo $ac_n "checking for X11 libraries""... $ac_c" 1>&6 echo "configure:4029: checking for X11 libraries" >&5 XLIBSW=nope dirs="/usr/unsupported/lib /usr/local/lib /usr/X386/lib /usr/X11R6/lib /usr/X11R5/lib /usr/lib/X11R5 /usr/lib/X11R4 /usr/openwin/lib /usr/X11/lib /usr/sww/X11/lib" for i in $dirs ; do if test -r $i/libX11.a -o -r $i/libX11.so -o -r $i/libX11.sl; then echo "$ac_t""$i" 1>&6 XLIBSW="-L$i -lX11" x_libraries="$i" break fi done else if test "$x_libraries" = ""; then XLIBSW=-lX11 else XLIBSW="-L$x_libraries -lX11" fi fi if test "$XLIBSW" = nope ; then echo $ac_n "checking for XCreateWindow in -lXwindow""... $ac_c" 1>&6 echo "configure:4049: checking for XCreateWindow in -lXwindow" >&5 ac_lib_var=`echo Xwindow'_'XCreateWindow | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else ac_save_LIBS="$LIBS" LIBS="-lXwindow $LIBS" cat > conftest.$ac_ext <<EOF #line 4057 "configure" #include "confdefs.h" /* Override any gcc2 internal prototype to avoid an error. */ /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ char XCreateWindow(); int main() { XCreateWindow() ; return 0; } EOF if { (eval echo configure:4068: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=no" |
︙ | ︙ | |||
3789 3790 3791 3792 3793 3794 3795 | # bogus: they goof up name resolution if used. # 4. On some SVR4 systems, can't use -lsocket without -lnsl too. # To get around this problem, check for both libraries together # if -lsocket doesn't work by itself. #-------------------------------------------------------------------- echo $ac_n "checking for main in -lXbsd""... $ac_c" 1>&6 | | | | | 4145 4146 4147 4148 4149 4150 4151 4152 4153 4154 4155 4156 4157 4158 4159 4160 4161 4162 4163 4164 4165 4166 4167 4168 4169 4170 4171 4172 4173 4174 | # bogus: they goof up name resolution if used. # 4. On some SVR4 systems, can't use -lsocket without -lnsl too. # To get around this problem, check for both libraries together # if -lsocket doesn't work by itself. #-------------------------------------------------------------------- echo $ac_n "checking for main in -lXbsd""... $ac_c" 1>&6 echo "configure:4153: checking for main in -lXbsd" >&5 ac_lib_var=`echo Xbsd'_'main | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else ac_save_LIBS="$LIBS" LIBS="-lXbsd $LIBS" cat > conftest.$ac_ext <<EOF #line 4161 "configure" #include "confdefs.h" int main() { main() ; return 0; } EOF if { (eval echo configure:4168: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=no" |
︙ | ︙ | |||
3827 3828 3829 3830 3831 3832 3833 | else echo "$ac_t""no" 1>&6 fi tk_checkBoth=0 echo $ac_n "checking for connect""... $ac_c" 1>&6 | | | | 4183 4184 4185 4186 4187 4188 4189 4190 4191 4192 4193 4194 4195 4196 4197 4198 4199 4200 4201 4202 | else echo "$ac_t""no" 1>&6 fi tk_checkBoth=0 echo $ac_n "checking for connect""... $ac_c" 1>&6 echo "configure:4191: checking for connect" >&5 if eval "test \"`echo '$''{'ac_cv_func_connect'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <<EOF #line 4196 "configure" #include "confdefs.h" /* System header to define __stub macros and hopefully few prototypes, which can conflict with char connect(); below. */ #include <assert.h> /* Override any gcc2 internal prototype to avoid an error. */ /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ |
︙ | ︙ | |||
3855 3856 3857 3858 3859 3860 3861 | choke me #else connect(); #endif ; return 0; } EOF | | | 4211 4212 4213 4214 4215 4216 4217 4218 4219 4220 4221 4222 4223 4224 4225 | choke me #else connect(); #endif ; return 0; } EOF if { (eval echo configure:4219: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_connect=yes" else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* eval "ac_cv_func_connect=no" |
︙ | ︙ | |||
3877 3878 3879 3880 3881 3882 3883 | else echo "$ac_t""no" 1>&6 tk_checkSocket=1 fi if test "$tk_checkSocket" = 1; then echo $ac_n "checking for main in -lsocket""... $ac_c" 1>&6 | | | | | 4233 4234 4235 4236 4237 4238 4239 4240 4241 4242 4243 4244 4245 4246 4247 4248 4249 4250 4251 4252 4253 4254 4255 4256 4257 4258 4259 4260 4261 4262 | else echo "$ac_t""no" 1>&6 tk_checkSocket=1 fi if test "$tk_checkSocket" = 1; then echo $ac_n "checking for main in -lsocket""... $ac_c" 1>&6 echo "configure:4241: checking for main in -lsocket" >&5 ac_lib_var=`echo socket'_'main | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else ac_save_LIBS="$LIBS" LIBS="-lsocket $LIBS" cat > conftest.$ac_ext <<EOF #line 4249 "configure" #include "confdefs.h" int main() { main() ; return 0; } EOF if { (eval echo configure:4256: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=no" |
︙ | ︙ | |||
3918 3919 3920 3921 3922 3923 3924 | fi fi if test "$tk_checkBoth" = 1; then tk_oldLibs=$LIBS LIBS="$LIBS -lsocket -lnsl" echo $ac_n "checking for accept""... $ac_c" 1>&6 | | | | 4274 4275 4276 4277 4278 4279 4280 4281 4282 4283 4284 4285 4286 4287 4288 4289 4290 4291 4292 4293 | fi fi if test "$tk_checkBoth" = 1; then tk_oldLibs=$LIBS LIBS="$LIBS -lsocket -lnsl" echo $ac_n "checking for accept""... $ac_c" 1>&6 echo "configure:4282: checking for accept" >&5 if eval "test \"`echo '$''{'ac_cv_func_accept'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <<EOF #line 4287 "configure" #include "confdefs.h" /* System header to define __stub macros and hopefully few prototypes, which can conflict with char accept(); below. */ #include <assert.h> /* Override any gcc2 internal prototype to avoid an error. */ /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ |
︙ | ︙ | |||
3946 3947 3948 3949 3950 3951 3952 | choke me #else accept(); #endif ; return 0; } EOF | | | 4302 4303 4304 4305 4306 4307 4308 4309 4310 4311 4312 4313 4314 4315 4316 | choke me #else accept(); #endif ; return 0; } EOF if { (eval echo configure:4310: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_accept=yes" else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* eval "ac_cv_func_accept=no" |
︙ | ︙ | |||
3968 3969 3970 3971 3972 3973 3974 | else echo "$ac_t""no" 1>&6 LIBS=$tk_oldLibs fi fi echo $ac_n "checking for gethostbyname""... $ac_c" 1>&6 | | | | 4324 4325 4326 4327 4328 4329 4330 4331 4332 4333 4334 4335 4336 4337 4338 4339 4340 4341 4342 4343 | else echo "$ac_t""no" 1>&6 LIBS=$tk_oldLibs fi fi echo $ac_n "checking for gethostbyname""... $ac_c" 1>&6 echo "configure:4332: checking for gethostbyname" >&5 if eval "test \"`echo '$''{'ac_cv_func_gethostbyname'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <<EOF #line 4337 "configure" #include "confdefs.h" /* System header to define __stub macros and hopefully few prototypes, which can conflict with char gethostbyname(); below. */ #include <assert.h> /* Override any gcc2 internal prototype to avoid an error. */ /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ |
︙ | ︙ | |||
3996 3997 3998 3999 4000 4001 4002 | choke me #else gethostbyname(); #endif ; return 0; } EOF | | | | | | 4352 4353 4354 4355 4356 4357 4358 4359 4360 4361 4362 4363 4364 4365 4366 4367 4368 4369 4370 4371 4372 4373 4374 4375 4376 4377 4378 4379 4380 4381 4382 4383 4384 4385 4386 4387 4388 4389 4390 4391 4392 4393 4394 4395 4396 4397 4398 4399 | choke me #else gethostbyname(); #endif ; return 0; } EOF if { (eval echo configure:4360: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_gethostbyname=yes" else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* eval "ac_cv_func_gethostbyname=no" fi rm -f conftest* fi if eval "test \"`echo '$ac_cv_func_'gethostbyname`\" = yes"; then echo "$ac_t""yes" 1>&6 : else echo "$ac_t""no" 1>&6 echo $ac_n "checking for main in -lnsl""... $ac_c" 1>&6 echo "configure:4378: checking for main in -lnsl" >&5 ac_lib_var=`echo nsl'_'main | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else ac_save_LIBS="$LIBS" LIBS="-lnsl $LIBS" cat > conftest.$ac_ext <<EOF #line 4386 "configure" #include "confdefs.h" int main() { main() ; return 0; } EOF if { (eval echo configure:4393: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=no" |
︙ | ︙ | |||
4069 4070 4071 4072 4073 4074 4075 | # # Note: can't use ac_check_lib macro (at least, not in Autoconf 2.1) # because it can't deal with the "-" in the library name. #-------------------------------------------------------------------- if test -d /usr/include/mit ; then echo $ac_n "checking MIT X libraries""... $ac_c" 1>&6 | | | | | 4425 4426 4427 4428 4429 4430 4431 4432 4433 4434 4435 4436 4437 4438 4439 4440 4441 4442 4443 4444 4445 4446 4447 4448 4449 4450 4451 4452 4453 4454 4455 4456 | # # Note: can't use ac_check_lib macro (at least, not in Autoconf 2.1) # because it can't deal with the "-" in the library name. #-------------------------------------------------------------------- if test -d /usr/include/mit ; then echo $ac_n "checking MIT X libraries""... $ac_c" 1>&6 echo "configure:4433: checking MIT X libraries" >&5 tk_oldCFlags=$CFLAGS CFLAGS="$CFLAGS -I/usr/include/mit" tk_oldLibs=$LIBS LIBS="$LIBS -lX11-mit" cat > conftest.$ac_ext <<EOF #line 4439 "configure" #include "confdefs.h" #include <X11/Xlib.h> int main() { XOpenDisplay(0); ; return 0; } EOF if { (eval echo configure:4450: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* echo "$ac_t""yes" 1>&6 XLIBSW="-lX11-mit" XINCLUDES="-I/usr/include/mit" else |
︙ | ︙ | |||
4113 4114 4115 4116 4117 4118 4119 | # already in libc.a. Set compiler flags accordingly. # Also, Linux requires the "ieee" library for math to # work right (and it must appear before "-lm"). #-------------------------------------------------------------------- MATH_LIBS="" echo $ac_n "checking for sin""... $ac_c" 1>&6 | | | | 4469 4470 4471 4472 4473 4474 4475 4476 4477 4478 4479 4480 4481 4482 4483 4484 4485 4486 4487 4488 | # already in libc.a. Set compiler flags accordingly. # Also, Linux requires the "ieee" library for math to # work right (and it must appear before "-lm"). #-------------------------------------------------------------------- MATH_LIBS="" echo $ac_n "checking for sin""... $ac_c" 1>&6 echo "configure:4477: checking for sin" >&5 if eval "test \"`echo '$''{'ac_cv_func_sin'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <<EOF #line 4482 "configure" #include "confdefs.h" /* System header to define __stub macros and hopefully few prototypes, which can conflict with char sin(); below. */ #include <assert.h> /* Override any gcc2 internal prototype to avoid an error. */ /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ |
︙ | ︙ | |||
4141 4142 4143 4144 4145 4146 4147 | choke me #else sin(); #endif ; return 0; } EOF | | | | | | 4497 4498 4499 4500 4501 4502 4503 4504 4505 4506 4507 4508 4509 4510 4511 4512 4513 4514 4515 4516 4517 4518 4519 4520 4521 4522 4523 4524 4525 4526 4527 4528 4529 4530 4531 4532 4533 4534 4535 4536 4537 4538 4539 4540 4541 4542 4543 4544 4545 4546 4547 | choke me #else sin(); #endif ; return 0; } EOF if { (eval echo configure:4505: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_sin=yes" else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* eval "ac_cv_func_sin=no" fi rm -f conftest* fi if eval "test \"`echo '$ac_cv_func_'sin`\" = yes"; then echo "$ac_t""yes" 1>&6 : else echo "$ac_t""no" 1>&6 MATH_LIBS="-lm" fi echo $ac_n "checking for main in -lieee""... $ac_c" 1>&6 echo "configure:4526: checking for main in -lieee" >&5 ac_lib_var=`echo ieee'_'main | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else ac_save_LIBS="$LIBS" LIBS="-lieee $LIBS" cat > conftest.$ac_ext <<EOF #line 4534 "configure" #include "confdefs.h" int main() { main() ; return 0; } EOF if { (eval echo configure:4541: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=no" |
︙ | ︙ | |||
4204 4205 4206 4207 4208 4209 4210 | #-------------------------------------------------------------------- # Figure out whether "char" is unsigned. If so, set a # #define for __CHAR_UNSIGNED__. #-------------------------------------------------------------------- echo $ac_n "checking whether char is unsigned""... $ac_c" 1>&6 | | | | 4560 4561 4562 4563 4564 4565 4566 4567 4568 4569 4570 4571 4572 4573 4574 4575 4576 4577 4578 4579 4580 4581 | #-------------------------------------------------------------------- # Figure out whether "char" is unsigned. If so, set a # #define for __CHAR_UNSIGNED__. #-------------------------------------------------------------------- echo $ac_n "checking whether char is unsigned""... $ac_c" 1>&6 echo "configure:4568: checking whether char is unsigned" >&5 if eval "test \"`echo '$''{'ac_cv_c_char_unsigned'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else if test "$GCC" = yes; then # GCC predefines this symbol on systems where it applies. cat > conftest.$ac_ext <<EOF #line 4575 "configure" #include "confdefs.h" #ifdef __CHAR_UNSIGNED__ yes #endif EOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | |
︙ | ︙ | |||
4233 4234 4235 4236 4237 4238 4239 | rm -f conftest* else if test "$cross_compiling" = yes; then { echo "configure: error: can not run test program while cross compiling" 1>&2; exit 1; } else cat > conftest.$ac_ext <<EOF | | | | 4589 4590 4591 4592 4593 4594 4595 4596 4597 4598 4599 4600 4601 4602 4603 4604 4605 4606 4607 4608 4609 4610 4611 4612 4613 | rm -f conftest* else if test "$cross_compiling" = yes; then { echo "configure: error: can not run test program while cross compiling" 1>&2; exit 1; } else cat > conftest.$ac_ext <<EOF #line 4597 "configure" #include "confdefs.h" /* volatile prevents gcc2 from optimizing the test away on sparcs. */ #if !defined(__STDC__) || __STDC__ != 1 #define volatile #endif main() { volatile char c = 255; exit(c < 0); } EOF if { (eval echo configure:4607: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then ac_cv_c_char_unsigned=yes else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -fr conftest* ac_cv_c_char_unsigned=no |
︙ | ︙ | |||
4276 4277 4278 4279 4280 4281 4282 | # terminating character under some conditions. Check for this # and if the problem exists use a substitute procedure # "fixstrtod" (provided by Tcl) that corrects the error. #-------------------------------------------------------------------- echo $ac_n "checking for strtod""... $ac_c" 1>&6 | | | | 4632 4633 4634 4635 4636 4637 4638 4639 4640 4641 4642 4643 4644 4645 4646 4647 4648 4649 4650 4651 | # terminating character under some conditions. Check for this # and if the problem exists use a substitute procedure # "fixstrtod" (provided by Tcl) that corrects the error. #-------------------------------------------------------------------- echo $ac_n "checking for strtod""... $ac_c" 1>&6 echo "configure:4640: checking for strtod" >&5 if eval "test \"`echo '$''{'ac_cv_func_strtod'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <<EOF #line 4645 "configure" #include "confdefs.h" /* System header to define __stub macros and hopefully few prototypes, which can conflict with char strtod(); below. */ #include <assert.h> /* Override any gcc2 internal prototype to avoid an error. */ /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ |
︙ | ︙ | |||
4304 4305 4306 4307 4308 4309 4310 | choke me #else strtod(); #endif ; return 0; } EOF | | | 4660 4661 4662 4663 4664 4665 4666 4667 4668 4669 4670 4671 4672 4673 4674 | choke me #else strtod(); #endif ; return 0; } EOF if { (eval echo configure:4668: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_strtod=yes" else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* eval "ac_cv_func_strtod=no" |
︙ | ︙ | |||
4326 4327 4328 4329 4330 4331 4332 | else echo "$ac_t""no" 1>&6 tcl_strtod=0 fi if test "$tcl_strtod" = 1; then echo $ac_n "checking for Solaris2.4/Tru64 strtod bugs""... $ac_c" 1>&6 | | | | | 4682 4683 4684 4685 4686 4687 4688 4689 4690 4691 4692 4693 4694 4695 4696 4697 4698 4699 4700 4701 4702 4703 4704 4705 4706 4707 4708 4709 4710 4711 4712 4713 4714 4715 4716 4717 4718 4719 4720 4721 | else echo "$ac_t""no" 1>&6 tcl_strtod=0 fi if test "$tcl_strtod" = 1; then echo $ac_n "checking for Solaris2.4/Tru64 strtod bugs""... $ac_c" 1>&6 echo "configure:4690: checking for Solaris2.4/Tru64 strtod bugs" >&5 if test "$cross_compiling" = yes; then tcl_ok=0 else cat > conftest.$ac_ext <<EOF #line 4695 "configure" #include "confdefs.h" extern double strtod(); int main() { char *string = "NaN", *spaceString = " "; char *term; double value; value = strtod(string, &term); if ((term != string) && (term[-1] == 0)) { exit(1); } value = strtod(spaceString, &term); if (term == (spaceString+1)) { exit(1); } exit(0); } EOF if { (eval echo configure:4715: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then tcl_ok=1 else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -fr conftest* tcl_ok=0 |
︙ | ︙ | |||
4380 4381 4382 4383 4384 4385 4386 | fi #-------------------------------------------------------------------- # The statements below define a collection of symbols related to # building libtk as a shared library instead of a static library. #-------------------------------------------------------------------- | < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < | 4736 4737 4738 4739 4740 4741 4742 4743 4744 4745 4746 4747 4748 4749 | fi #-------------------------------------------------------------------- # The statements below define a collection of symbols related to # building libtk as a shared library instead of a static library. #-------------------------------------------------------------------- eval eval "TK_SHARED_LIB_SUFFIX=${SHARED_LIB_SUFFIX}" eval eval "TK_UNSHARED_LIB_SUFFIX=${UNSHARED_LIB_SUFFIX}" if test "${SHARED_BUILD}" = "1" -a "${SHLIB_SUFFIX}" != ""; then TK_SHLIB_CFLAGS="${SHLIB_CFLAGS}" TK_LIB_FILE=libtk${TK_SHARED_LIB_SUFFIX} |
︙ | ︙ |
Changes to unix/configure.in.
1 2 3 4 5 | #! /bin/bash -norc dnl This file is an input file used by the GNU "autoconf" program to dnl generate the file "configure", which is run during Tk installation dnl to configure the system for the local environment. # | | | | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | #! /bin/bash -norc dnl This file is an input file used by the GNU "autoconf" program to dnl generate the file "configure", which is run during Tk installation dnl to configure the system for the local environment. # # RCS: @(#) $Id: configure.in,v 1.63.2.2 2002/06/10 05:38:27 wolfsuit Exp $ AC_INIT(../generic/tk.h) TK_VERSION=8.4 TK_MAJOR_VERSION=8 TK_MINOR_VERSION=4 TK_PATCH_LEVEL="a5" VERSION=${TK_VERSION} LOCALES="de en es fr" #------------------------------------------------------------------------ # Handle the --prefix=... option #------------------------------------------------------------------------ |
︙ | ︙ | |||
67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 | CC="$CC -pipe" AC_TRY_COMPILE(,, AC_MSG_RESULT(yes), CC="$OLDCC" AC_MSG_RESULT(no)) fi fi #-------------------------------------------------------------------- # Find and load the tclConfig.sh file #-------------------------------------------------------------------- SC_PATH_TCLCONFIG SC_LOAD_TCLCONFIG #-------------------------------------------------------------------- # Recompute the necessary flags to run the compiler #-------------------------------------------------------------------- SC_CONFIG_CFLAGS SC_ENABLE_SYMBOLS LIB_RUNTIME_DIR='${LIB_RUNTIME_DIR}' | > > > > > > > > > > | 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 | CC="$CC -pipe" AC_TRY_COMPILE(,, AC_MSG_RESULT(yes), CC="$OLDCC" AC_MSG_RESULT(no)) fi fi #-------------------------------------------------------------------- # Detect what compiler flags to set for 64-bit support. #-------------------------------------------------------------------- SC_TCL_EARLY_FLAGS SC_TCL_64BIT_FLAGS #-------------------------------------------------------------------- # Find and load the tclConfig.sh file #-------------------------------------------------------------------- SC_PATH_TCLCONFIG SC_LOAD_TCLCONFIG #-------------------------------------------------------------------- # Recompute the necessary flags to run the compiler #-------------------------------------------------------------------- SC_ENABLE_SHARED SC_CONFIG_CFLAGS SC_ENABLE_SYMBOLS LIB_RUNTIME_DIR='${LIB_RUNTIME_DIR}' |
︙ | ︙ | |||
336 337 338 339 340 341 342 | SC_BUGGY_STRTOD #-------------------------------------------------------------------- # The statements below define a collection of symbols related to # building libtk as a shared library instead of a static library. #-------------------------------------------------------------------- | < < | 346 347 348 349 350 351 352 353 354 355 356 357 358 359 | SC_BUGGY_STRTOD #-------------------------------------------------------------------- # The statements below define a collection of symbols related to # building libtk as a shared library instead of a static library. #-------------------------------------------------------------------- eval eval "TK_SHARED_LIB_SUFFIX=${SHARED_LIB_SUFFIX}" eval eval "TK_UNSHARED_LIB_SUFFIX=${UNSHARED_LIB_SUFFIX}" if test "${SHARED_BUILD}" = "1" -a "${SHLIB_SUFFIX}" != ""; then TK_SHLIB_CFLAGS="${SHLIB_CFLAGS}" TK_LIB_FILE=libtk${TK_SHARED_LIB_SUFFIX} MAKE_LIB="\${SHLIB_LD} -o \[$]@ \${OBJS} \$(TK_LD_SEARCH_FLAGS) \${TCL_STUB_LIB_SPEC} \${SHLIB_LD_LIBS}" |
︙ | ︙ |
Changes to unix/tcl.m4.
︙ | ︙ | |||
361 362 363 364 365 366 367 368 369 370 371 372 373 374 | AC_ARG_ENABLE(threads, [ --enable-threads build with threads], [tcl_ok=$enableval], [tcl_ok=no]) if test "$tcl_ok" = "yes"; then AC_MSG_RESULT(yes) TCL_THREADS=1 AC_DEFINE(TCL_THREADS) AC_DEFINE(_REENTRANT) AC_DEFINE(_THREAD_SAFE) AC_CHECK_LIB(pthread,pthread_mutex_init,tcl_ok=yes,tcl_ok=no) if test "$tcl_ok" = "no"; then # Check a little harder for __pthread_mutex_init in the same # library, as some systems hide it there until pthread.h is # defined. We could alternatively do an AC_TRY_COMPILE with | > > > | 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 | AC_ARG_ENABLE(threads, [ --enable-threads build with threads], [tcl_ok=$enableval], [tcl_ok=no]) if test "$tcl_ok" = "yes"; then AC_MSG_RESULT(yes) TCL_THREADS=1 AC_DEFINE(TCL_THREADS) # USE_THREAD_ALLOC tells us to try the special thread-based # allocator that significantly reduces lock contention AC_DEFINE(USE_THREAD_ALLOC) AC_DEFINE(_REENTRANT) AC_DEFINE(_THREAD_SAFE) AC_CHECK_LIB(pthread,pthread_mutex_init,tcl_ok=yes,tcl_ok=no) if test "$tcl_ok" = "no"; then # Check a little harder for __pthread_mutex_init in the same # library, as some systems hide it there until pthread.h is # defined. We could alternatively do an AC_TRY_COMPILE with |
︙ | ︙ | |||
571 572 573 574 575 576 577 | # The name of the built export / import file which # should be used to link to the Tcl shared library. # Empty if Tcl is unshared. # CFLAGS_DEBUG - # Flags used when running the compiler in debug mode # CFLAGS_OPTIMIZE - # Flags used when running the compiler in optimize mode | < | 574 575 576 577 578 579 580 581 582 583 584 585 586 587 | # The name of the built export / import file which # should be used to link to the Tcl shared library. # Empty if Tcl is unshared. # CFLAGS_DEBUG - # Flags used when running the compiler in debug mode # CFLAGS_OPTIMIZE - # Flags used when running the compiler in optimize mode # EXTRA_CFLAGS # # Subst's the following vars: # DL_LIBS # CFLAGS_DEBUG # CFLAGS_OPTIMIZE #-------------------------------------------------------------------- |
︙ | ︙ | |||
691 692 693 694 695 696 697 698 699 700 701 702 703 704 | LDFLAGS="" if test "$GCC" = "yes" ; then LD_SEARCH_FLAGS='-Wl,-R,${LIB_RUNTIME_DIR}' else LD_SEARCH_FLAGS='-R${LIB_RUNTIME_DIR}' fi if test "$do64bit" = "yes" ; then if test "$GCC" = "yes" ; then AC_MSG_WARN("64bit mode not supported with GCC on $system") else do64bit_ok=yes EXTRA_CFLAGS="-q64" LDFLAGS="-q64" | > | 693 694 695 696 697 698 699 700 701 702 703 704 705 706 707 | LDFLAGS="" if test "$GCC" = "yes" ; then LD_SEARCH_FLAGS='-Wl,-R,${LIB_RUNTIME_DIR}' else LD_SEARCH_FLAGS='-R${LIB_RUNTIME_DIR}' fi # Check to enable 64-bit flags for compiler/linker if test "$do64bit" = "yes" ; then if test "$GCC" = "yes" ; then AC_MSG_WARN("64bit mode not supported with GCC on $system") else do64bit_ok=yes EXTRA_CFLAGS="-q64" LDFLAGS="-q64" |
︙ | ︙ | |||
744 745 746 747 748 749 750 751 752 753 754 755 756 757 | # known GMT value. AC_CHECK_LIB(bsd, gettimeofday, libbsd=yes, libbsd=no) if test $libbsd = yes; then MATH_LIBS="$MATH_LIBS -lbsd" AC_DEFINE(USE_DELTA_FOR_TZ) fi ;; BSD/OS-2.1*|BSD/OS-3*) SHLIB_CFLAGS="" SHLIB_LD="shlicc -r" SHLIB_LD_LIBS='${LIBS}' SHLIB_SUFFIX=".so" DL_OBJS="tclLoadDl.o" | > > > > > > > > > > > | 747 748 749 750 751 752 753 754 755 756 757 758 759 760 761 762 763 764 765 766 767 768 769 770 771 | # known GMT value. AC_CHECK_LIB(bsd, gettimeofday, libbsd=yes, libbsd=no) if test $libbsd = yes; then MATH_LIBS="$MATH_LIBS -lbsd" AC_DEFINE(USE_DELTA_FOR_TZ) fi # Check to enable 64-bit flags for compiler/linker if test "$do64bit" = "yes" ; then if test "$GCC" = "yes" ; then AC_MSG_WARN("64bit mode not supported with GCC on $system") else do64bit_ok=yes EXTRA_CFLAGS="-q64" LDFLAGS="-q64" fi fi ;; BSD/OS-2.1*|BSD/OS-3*) SHLIB_CFLAGS="" SHLIB_LD="shlicc -r" SHLIB_LD_LIBS='${LIBS}' SHLIB_SUFFIX=".so" DL_OBJS="tclLoadDl.o" |
︙ | ︙ | |||
776 777 778 779 780 781 782 783 784 785 786 787 | SHLIB_SUFFIX=".so" DL_OBJS="tclLoadDl.o" DL_LIBS="-ldl" LDFLAGS="" LD_SEARCH_FLAGS="" ;; HP-UX-*.11.*) SHLIB_SUFFIX=".sl" AC_CHECK_LIB(dld, shl_load, tcl_ok=yes, tcl_ok=no) if test "$tcl_ok" = yes; then SHLIB_CFLAGS="+z" SHLIB_LD="ld -b" | > > > | > > | 790 791 792 793 794 795 796 797 798 799 800 801 802 803 804 805 806 807 808 809 810 811 812 813 814 815 816 817 818 819 | SHLIB_SUFFIX=".so" DL_OBJS="tclLoadDl.o" DL_LIBS="-ldl" LDFLAGS="" LD_SEARCH_FLAGS="" ;; HP-UX-*.11.*) # Use updated header definitions where possible AC_DEFINE(_XOPEN_SOURCE_EXTENDED) SHLIB_SUFFIX=".sl" AC_CHECK_LIB(dld, shl_load, tcl_ok=yes, tcl_ok=no) if test "$tcl_ok" = yes; then SHLIB_CFLAGS="+z" SHLIB_LD="ld -b" SHLIB_LD_LIBS='${LIBS}' DL_OBJS="tclLoadShl.o" DL_LIBS="-ldld" LDFLAGS="-Wl,-E" LD_SEARCH_FLAGS='-Wl,+s,+b,${LIB_RUNTIME_DIR}:.' fi # Check to enable 64-bit flags for compiler/linker if test "$do64bit" = "yes" ; then if test "$GCC" = "yes" ; then AC_MSG_WARN("64bit mode not supported with GCC on $system") else do64bit_ok=yes EXTRA_CFLAGS="+DA2.0W" LDFLAGS="+DA2.0W $LDFLAGS" |
︙ | ︙ | |||
858 859 860 861 862 863 864 | ;; esac LDFLAGS="-n32" fi ;; IRIX64-6.*) SHLIB_CFLAGS="" | | | 877 878 879 880 881 882 883 884 885 886 887 888 889 890 891 | ;; esac LDFLAGS="-n32" fi ;; IRIX64-6.*) SHLIB_CFLAGS="" SHLIB_LD="ld -n32 -shared -rdata_shared" SHLIB_LD_LIBS='${LIBS}' SHLIB_SUFFIX=".so" DL_OBJS="tclLoadDl.o" DL_LIBS="" LDFLAGS="" LD_SEARCH_FLAGS='-Wl,-rpath,${LIB_RUNTIME_DIR}' ;; |
︙ | ︙ | |||
999 1000 1001 1002 1003 1004 1005 | SHLIB_CFLAGS="-fPIC" SHLIB_LD="ld -Bshareable -x" SHLIB_LD_LIBS='${LIBS}' SHLIB_SUFFIX=".so" DL_OBJS="tclLoadDl.o" DL_LIBS="" LDFLAGS="-export-dynamic" | | | > > > > > | < | | | > > | 1018 1019 1020 1021 1022 1023 1024 1025 1026 1027 1028 1029 1030 1031 1032 1033 1034 1035 1036 1037 1038 1039 1040 1041 1042 1043 1044 | SHLIB_CFLAGS="-fPIC" SHLIB_LD="ld -Bshareable -x" SHLIB_LD_LIBS='${LIBS}' SHLIB_SUFFIX=".so" DL_OBJS="tclLoadDl.o" DL_LIBS="" LDFLAGS="-export-dynamic" LD_SEARCH_FLAGS='-Wl,-rpath,${LIB_RUNTIME_DIR}' if test "${TCL_THREADS}" = "1" ; then EXTRA_CFLAGS="-pthread" LDFLAGS="$LDFLAGS -pthread" fi case $system in FreeBSD-3.*) # FreeBSD-3 doesn't handle version numbers with dots. UNSHARED_LIB_SUFFIX='${TCL_TRIM_DOTS}\$\{DBGX\}.a' SHARED_LIB_SUFFIX='${TCL_TRIM_DOTS}\$\{DBGX\}.so' TCL_LIB_VERSIONS_OK=nodots ;; esac ;; Rhapsody-*|Darwin-*) SHLIB_CFLAGS="-fno-common" SHLIB_LD="cc -dynamiclib \${LDFLAGS}" TCL_SHLIB_LD_EXTRAS="-compatibility_version ${TCL_MAJOR_VERSION} -current_version \${VERSION} -install_name \${LIB_RUNTIME_DIR}/\${TCL_LIB_FILE} -prebind -seg1addr a000000" SHLIB_LD_LIBS='${LIBS}' SHLIB_SUFFIX=".dylib" |
︙ | ︙ | |||
1049 1050 1051 1052 1053 1054 1055 | DL_LIBS="" LDFLAGS="" LD_SEARCH_FLAGS="" ;; OSF1-1.*) # OSF/1 1.3 from OSF using ELF, and derivatives, including AD2 SHLIB_CFLAGS="-fPIC" | > | > > > > | > > > | 1074 1075 1076 1077 1078 1079 1080 1081 1082 1083 1084 1085 1086 1087 1088 1089 1090 1091 1092 1093 1094 1095 1096 1097 1098 1099 1100 1101 1102 1103 1104 1105 1106 1107 | DL_LIBS="" LDFLAGS="" LD_SEARCH_FLAGS="" ;; OSF1-1.*) # OSF/1 1.3 from OSF using ELF, and derivatives, including AD2 SHLIB_CFLAGS="-fPIC" if test "$SHARED_BUILD" = "1" ; then SHLIB_LD="ld -shared" else SHLIB_LD="ld -non_shared" fi SHLIB_LD_LIBS="" SHLIB_SUFFIX=".so" DL_OBJS="tclLoadDl.o" DL_LIBS="" LDFLAGS="" LD_SEARCH_FLAGS="" ;; OSF1-V*) # Digital OSF/1 SHLIB_CFLAGS="" if test "$SHARED_BUILD" = "1" ; then SHLIB_LD='ld -shared -expect_unresolved "*"' else SHLIB_LD='ld -non_shared -expect_unresolved "*"' fi SHLIB_LD_LIBS="" SHLIB_SUFFIX=".so" DL_OBJS="tclLoadDl.o" DL_LIBS="" LDFLAGS="" LD_SEARCH_FLAGS='-Wl,-rpath,${LIB_RUNTIME_DIR}' if test "$GCC" != "yes" ; then |
︙ | ︙ | |||
1160 1161 1162 1163 1164 1165 1166 1167 1168 1169 1170 1171 1172 1173 | ;; SunOS-5.[[0-6]]*) # Note: If _REENTRANT isn't defined, then Solaris # won't define thread-safe library routines. AC_DEFINE(_REENTRANT) SHLIB_CFLAGS="-KPIC" SHLIB_LD="/usr/ccs/bin/ld -G -z text" # Note: need the LIBS below, otherwise Tk won't find Tcl's # symbols when dynamically loaded into tclsh. | > | 1193 1194 1195 1196 1197 1198 1199 1200 1201 1202 1203 1204 1205 1206 1207 | ;; SunOS-5.[[0-6]]*) # Note: If _REENTRANT isn't defined, then Solaris # won't define thread-safe library routines. AC_DEFINE(_REENTRANT) AC_DEFINE(_POSIX_PTHREAD_SEMANTICS) SHLIB_CFLAGS="-KPIC" SHLIB_LD="/usr/ccs/bin/ld -G -z text" # Note: need the LIBS below, otherwise Tk won't find Tcl's # symbols when dynamically loaded into tclsh. |
︙ | ︙ | |||
1184 1185 1186 1187 1188 1189 1190 1191 1192 1193 1194 1195 1196 1197 1198 1199 1200 1201 1202 | ;; SunOS-5*) # Note: If _REENTRANT isn't defined, then Solaris # won't define thread-safe library routines. AC_DEFINE(_REENTRANT) SHLIB_CFLAGS="-KPIC" SHLIB_LD="/usr/ccs/bin/ld -G -z text" LDFLAGS="" if test "$do64bit" = "yes" ; then arch=`isainfo` if test "$arch" = "sparcv9 sparc" ; then if test "$GCC" = "yes" ; then AC_MSG_WARN("64bit mode not supported with GCC on $system") else do64bit_ok=yes | > > | 1218 1219 1220 1221 1222 1223 1224 1225 1226 1227 1228 1229 1230 1231 1232 1233 1234 1235 1236 1237 1238 | ;; SunOS-5*) # Note: If _REENTRANT isn't defined, then Solaris # won't define thread-safe library routines. AC_DEFINE(_REENTRANT) AC_DEFINE(_POSIX_PTHREAD_SEMANTICS) SHLIB_CFLAGS="-KPIC" SHLIB_LD="/usr/ccs/bin/ld -G -z text" LDFLAGS="" # Check to enable 64-bit flags for compiler/linker if test "$do64bit" = "yes" ; then arch=`isainfo` if test "$arch" = "sparcv9 sparc" ; then if test "$GCC" = "yes" ; then AC_MSG_WARN("64bit mode not supported with GCC on $system") else do64bit_ok=yes |
︙ | ︙ | |||
1411 1412 1413 1414 1415 1416 1417 | ]) #-------------------------------------------------------------------- # SC_SERIAL_PORT # # Determine which interface to use to talk to the serial port. # Note that #include lines must begin in leftmost column for | | > > > > | | < < | | < < | < | | | < < | < | | | < < | < | | | < < | < | | | < < | < | | | > > | < < < < < < > | | 1447 1448 1449 1450 1451 1452 1453 1454 1455 1456 1457 1458 1459 1460 1461 1462 1463 1464 1465 1466 1467 1468 1469 1470 1471 1472 1473 1474 1475 1476 1477 1478 1479 1480 1481 1482 1483 1484 1485 1486 1487 1488 1489 1490 1491 1492 1493 1494 1495 1496 1497 1498 1499 1500 1501 1502 1503 1504 1505 1506 1507 1508 1509 1510 1511 1512 1513 1514 1515 1516 1517 1518 1519 1520 1521 1522 1523 1524 1525 1526 1527 1528 1529 1530 1531 1532 1533 1534 1535 1536 1537 1538 1539 1540 1541 1542 1543 1544 1545 1546 1547 1548 1549 1550 1551 1552 1553 1554 1555 1556 1557 1558 1559 1560 1561 1562 1563 1564 1565 1566 1567 1568 1569 1570 1571 1572 1573 | ]) #-------------------------------------------------------------------- # SC_SERIAL_PORT # # Determine which interface to use to talk to the serial port. # Note that #include lines must begin in leftmost column for # some compilers to recognize them as preprocessor directives, # and some build environments have stdin not pointing at a # pseudo-terminal (usually /dev/null instead.) # # Arguments: # none # # Results: # # Defines only one of the following vars: # HAVE_SYS_MODEM_H # USE_TERMIOS # USE_TERMIO # USE_SGTTY # #-------------------------------------------------------------------- AC_DEFUN(SC_SERIAL_PORT, [ AC_CHECK_HEADERS(sys/modem.h) AC_MSG_CHECKING([termios vs. termio vs. sgtty]) AC_CACHE_VAL(tcl_cv_api_serial, [ AC_TRY_RUN([ #include <termios.h> int main() { struct termios t; if (tcgetattr(0, &t) == 0) { cfsetospeed(&t, 0); t.c_cflag |= PARENB | PARODD | CSIZE | CSTOPB; return 0; } return 1; }], tcl_cv_api_serial=termios, tcl_cv_api_serial=no, tcl_cv_api_serial=no) if test $tcl_cv_api_serial = no ; then AC_TRY_RUN([ #include <termio.h> int main() { struct termio t; if (ioctl(0, TCGETA, &t) == 0) { t.c_cflag |= CBAUD | PARENB | PARODD | CSIZE | CSTOPB; return 0; } return 1; }], tcl_cv_api_serial=termio, tcl_cv_api_serial=no, tcl_cv_api_serial=no) fi if test $tcl_cv_api_serial = no ; then AC_TRY_RUN([ #include <sgtty.h> int main() { struct sgttyb t; if (ioctl(0, TIOCGETP, &t) == 0) { t.sg_ospeed = 0; t.sg_flags |= ODDP | EVENP | RAW; return 0; } return 1; }], tcl_cv_api_serial=sgtty, tcl_cv_api_serial=none, tcl_cv_api_serial=none) fi if test $tcl_cv_api_serial = no ; then AC_TRY_RUN([ #include <termios.h> #include <errno.h> int main() { struct termios t; if (tcgetattr(0, &t) == 0 || errno == ENOTTY || errno == ENXIO || errno == EINVAL) { cfsetospeed(&t, 0); t.c_cflag |= PARENB | PARODD | CSIZE | CSTOPB; return 0; } return 1; }], tcl_cv_api_serial=termios, tcl_cv_api_serial=no, tcl_cv_api_serial=no) fi if test $tcl_cv_api_serial = no; then AC_TRY_RUN([ #include <termio.h> #include <errno.h> int main() { struct termio t; if (ioctl(0, TCGETA, &t) == 0 || errno == ENOTTY || errno == ENXIO || errno == EINVAL) { t.c_cflag |= CBAUD | PARENB | PARODD | CSIZE | CSTOPB; return 0; } return 1; }], tcl_cv_api_serial=termio, tcl_cv_api_serial=no, tcl_cv_api_serial=no) fi if test $tcl_cv_api_serial = no; then AC_TRY_RUN([ #include <sgtty.h> #include <errno.h> int main() { struct sgttyb t; if (ioctl(0, TIOCGETP, &t) == 0 || errno == ENOTTY || errno == ENXIO || errno == EINVAL) { t.sg_ospeed = 0; t.sg_flags |= ODDP | EVENP | RAW; return 0; } return 1; }], tcl_cv_api_serial=sgtty, tcl_cv_api_serial=none, tcl_cv_api_serial=none) fi]) case $tcl_cv_api_serial in termios) AC_DEFINE(USE_TERMIOS);; termio) AC_DEFINE(USE_TERMIO);; sgtty) AC_DEFINE(USE_SGTTY);; esac AC_MSG_RESULT($tcl_cv_api_serial) ]) #-------------------------------------------------------------------- # SC_MISSING_POSIX_HEADERS # # Supply substitutes for missing POSIX header files. Special # notes: |
︙ | ︙ | |||
1574 1575 1576 1577 1578 1579 1580 | # HAVE_SYS_PARAM_H # # HAVE_STRING_H ? # #-------------------------------------------------------------------- AC_DEFUN(SC_MISSING_POSIX_HEADERS, [ | < | 1594 1595 1596 1597 1598 1599 1600 1601 1602 1603 1604 1605 1606 1607 | # HAVE_SYS_PARAM_H # # HAVE_STRING_H ? # #-------------------------------------------------------------------- AC_DEFUN(SC_MISSING_POSIX_HEADERS, [ AC_MSG_CHECKING(dirent.h) AC_TRY_LINK([#include <sys/types.h> #include <dirent.h>], [ #ifndef _POSIX_SOURCE # ifdef __Lynx__ /* * Generate compilation error to make the test fail: Lynx headers |
︙ | ︙ | |||
1813 1814 1815 1816 1817 1818 1819 | AC_CHECK_HEADERS(sys/time.h) AC_HEADER_TIME AC_STRUCT_TIMEZONE AC_CHECK_FUNCS(gmtime_r localtime_r) AC_MSG_CHECKING([tm_tzadj in struct tm]) | > | > > > | < < > > | > > > | < < > < > | > | > | < < | | | | < | > | | | | > > > | < < | | | 1832 1833 1834 1835 1836 1837 1838 1839 1840 1841 1842 1843 1844 1845 1846 1847 1848 1849 1850 1851 1852 1853 1854 1855 1856 1857 1858 1859 1860 1861 1862 1863 1864 1865 1866 1867 1868 1869 1870 1871 1872 1873 1874 1875 1876 1877 1878 1879 1880 1881 1882 1883 1884 1885 1886 1887 1888 1889 1890 1891 1892 | AC_CHECK_HEADERS(sys/time.h) AC_HEADER_TIME AC_STRUCT_TIMEZONE AC_CHECK_FUNCS(gmtime_r localtime_r) AC_MSG_CHECKING([tm_tzadj in struct tm]) AC_CACHE_VAL(tcl_cv_member_tm_tzadj, AC_TRY_COMPILE([#include <time.h>], [struct tm tm; tm.tm_tzadj;], tcl_cv_member_tm_tzadj=yes, tcl_cv_member_tm_tzadj=no)) AC_MSG_RESULT($tcl_cv_member_tm_tzadj) if test $tcl_cv_member_tm_tzadj = yes ; then AC_DEFINE(HAVE_TM_TZADJ) fi AC_MSG_CHECKING([tm_gmtoff in struct tm]) AC_CACHE_VAL(tcl_cv_member_tm_gmtoff, AC_TRY_COMPILE([#include <time.h>], [struct tm tm; tm.tm_gmtoff;], tcl_cv_member_tm_gmtoff=yes, tcl_cv_member_tm_gmtoff=no)) AC_MSG_RESULT($tcl_cv_member_tm_gmtoff) if test $tcl_cv_member_tm_gmtoff = yes ; then AC_DEFINE(HAVE_TM_GMTOFF) fi # # Its important to include time.h in this check, as some systems # (like convex) have timezone functions, etc. # AC_MSG_CHECKING([long timezone variable]) AC_CACHE_VAL(tcl_cv_var_timezone, AC_TRY_COMPILE([#include <time.h>], [extern long timezone; timezone += 1; exit (0);], tcl_cv_timezone_long=yes, tcl_cv_timezone_long=no)) AC_MSG_RESULT($tcl_cv_timezone_long) if test $tcl_cv_timezone_long = yes ; then AC_DEFINE(HAVE_TIMEZONE_VAR) else # # On some systems (eg IRIX 6.2), timezone is a time_t and not a long. # AC_MSG_CHECKING([time_t timezone variable]) AC_CACHE_VAL(tcl_cv_timezone_time, AC_TRY_COMPILE([#include <time.h>], [extern time_t timezone; timezone += 1; exit (0);], tcl_cv_timezone_time=yes, tcl_cv_timezone_time=no)) AC_MSG_RESULT($tcl_cv_timezone_time) if test $tcl_cv_timezone_time = yes ; then AC_DEFINE(HAVE_TIMEZONE_VAR) fi fi ]) #-------------------------------------------------------------------- # SC_BUGGY_STRTOD # # Under Solaris 2.4, strtod returns the wrong value for the # terminating character under some conditions. Check for this |
︙ | ︙ | |||
1991 1992 1993 1994 1995 1996 1997 | # Don't perform the eval of the libraries here because DL_LIBS # won't be set until we call SC_CONFIG_CFLAGS TCL_LIBS='${DL_LIBS} ${LIBS} ${MATH_LIBS}' AC_SUBST(TCL_LIBS) AC_SUBST(MATH_LIBS) ]) | > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 2017 2018 2019 2020 2021 2022 2023 2024 2025 2026 2027 2028 2029 2030 2031 2032 2033 2034 2035 2036 2037 2038 2039 2040 2041 2042 2043 2044 2045 2046 2047 2048 2049 2050 2051 2052 2053 2054 2055 2056 2057 2058 2059 2060 2061 2062 2063 2064 2065 2066 2067 2068 2069 2070 2071 2072 2073 2074 2075 2076 2077 2078 2079 2080 2081 2082 2083 2084 2085 2086 2087 2088 2089 2090 2091 2092 2093 2094 2095 2096 2097 2098 2099 2100 2101 2102 2103 2104 2105 2106 2107 2108 2109 2110 2111 2112 2113 2114 2115 2116 2117 2118 2119 2120 2121 2122 2123 2124 2125 2126 2127 2128 2129 2130 | # Don't perform the eval of the libraries here because DL_LIBS # won't be set until we call SC_CONFIG_CFLAGS TCL_LIBS='${DL_LIBS} ${LIBS} ${MATH_LIBS}' AC_SUBST(TCL_LIBS) AC_SUBST(MATH_LIBS) ]) #-------------------------------------------------------------------- # SC_TCL_EARLY_FLAGS # # Check for what flags are needed to be passed so the correct OS # features are available. # # Arguments: # None # # Results: # # Might define the following vars: # _ISOC99_SOURCE # _LARGEFILE64_SOURCE # #-------------------------------------------------------------------- AC_DEFUN(SC_TCL_EARLY_FLAG,[ AC_CACHE_VAL([tcl_cv_flag_]translit($1,[A-Z],[a-z]), AC_TRY_COMPILE([$2], $3, [tcl_cv_flag_]translit($1,[A-Z],[a-z])=no, AC_TRY_COMPILE([[#define ]$1[ 1 ]$2], $3, [tcl_cv_flag_]translit($1,[A-Z],[a-z])=yes, [tcl_cv_flag_]translit($1,[A-Z],[a-z])=no))) if test ["x${tcl_cv_flag_]translit($1,[A-Z],[a-z])[}" = "xyes"] ; then AC_DEFINE($1) tcl_flags="$tcl_flags $1" fi]) AC_DEFUN(SC_TCL_EARLY_FLAGS,[ AC_MSG_CHECKING([for required early compiler flags]) tcl_flags="" SC_TCL_EARLY_FLAG(_ISOC99_SOURCE,[#include <stdlib.h>], [char *p = (char *)strtoll; char *q = (char *)strtoull;]) SC_TCL_EARLY_FLAG(_LARGEFILE64_SOURCE,[#include <sys/stat.h>], [struct stat64 buf; int i = stat64("/", &buf);]) if test "x${tcl_flags}" = "x" ; then AC_MSG_RESULT(none) else AC_MSG_RESULT(${tcl_flags}) fi]) #-------------------------------------------------------------------- # SC_TCL_64BIT_FLAGS # # Check for what is defined in the way of 64-bit features. # # Arguments: # None # # Results: # # Might define the following vars: # TCL_WIDE_INT_IS_LONG # TCL_WIDE_INT_TYPE # HAVE_STRUCT_DIRENT64 # HAVE_STRUCT_STAT64 # HAVE_TYPE_OFF64_T # #-------------------------------------------------------------------- AC_DEFUN(SC_TCL_64BIT_FLAGS, [ AC_MSG_CHECKING([for 64-bit integer type]) AC_CACHE_VAL(tcl_cv_type_64bit,[ AC_TRY_COMPILE(,[__int64 value = (__int64) 0;], tcl_cv_type_64bit=__int64,tcl_cv_type_64bit=none AC_TRY_RUN([#include <unistd.h> int main() {exit(!(sizeof(long long) > sizeof(long)));} ], tcl_cv_type_64bit="long long"))]) if test "${tcl_cv_type_64bit}" = none ; then AC_MSG_RESULT(using long) else AC_DEFINE_UNQUOTED(TCL_WIDE_INT_TYPE,${tcl_cv_type_64bit}) AC_MSG_RESULT(${tcl_cv_type_64bit}) # Now check for auxiliary declarations AC_MSG_CHECKING([for struct dirent64]) AC_CACHE_VAL(tcl_cv_struct_dirent64,[ AC_TRY_COMPILE([#include <sys/types.h> #include <sys/dirent.h>],[struct dirent64 p;], tcl_cv_struct_dirent64=yes,tcl_cv_struct_dirent64=no)]) if test "x${tcl_cv_struct_dirent64}" = "xyes" ; then AC_DEFINE(HAVE_STRUCT_DIRENT64) fi AC_MSG_RESULT(${tcl_cv_struct_dirent64}) AC_MSG_CHECKING([for struct stat64]) AC_CACHE_VAL(tcl_cv_struct_stat64,[ AC_TRY_COMPILE([#include <sys/stat.h>],[struct stat64 p; ], tcl_cv_struct_stat64=yes,tcl_cv_struct_stat64=no)]) if test "x${tcl_cv_struct_stat64}" = "xyes" ; then AC_DEFINE(HAVE_STRUCT_STAT64) fi AC_MSG_RESULT(${tcl_cv_struct_stat64}) AC_MSG_CHECKING([for off64_t]) AC_CACHE_VAL(tcl_cv_type_off64_t,[ AC_TRY_COMPILE([#include <sys/types.h>],[off64_t offset; ], tcl_cv_type_off64_t=yes,tcl_cv_type_off64_t=no)]) if test "x${tcl_cv_type_off64_t}" = "xyes" ; then AC_DEFINE(HAVE_TYPE_OFF64_T) fi AC_MSG_RESULT(${tcl_cv_type_off64_t}) fi]) |
Changes to unix/tk.spec.
|
| | | | | | | | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 | # $Id: tk.spec,v 1.7.2.1 2002/06/10 05:38:27 wolfsuit Exp $ # This file is the basis for a binary Tk Linux RPM. %define version 8.4a5 %define directory /usr/local Summary: Tk graphical toolkit for the Tcl scripting language. Name: tk Version: %{version} Release: 1 Copyright: BSD Group: Development/Languages Source: http://prdownloads.sourceforge.net/tcl/tk%{version}-src.tar.gz URL: http://www.tcl.tk/ Packager: Carina Buildroot: /var/tmp/%{name}%{version} Requires: XFree86-libs >= 3.3.3, XFree86-devel >= 3.3.3, tcl = 8.4a5 %description The Tcl (Tool Command Language) provides a powerful platform for creating integration applications that tie together diverse applications, protocols, devices, and frameworks. When paired with the Tk toolkit, Tcl provides the fastest and most powerful way to create GUI applications that run on PCs, Unix, and the Macintosh. Tcl |
︙ | ︙ |
Changes to unix/tkUnix3d.c.
1 2 3 4 5 6 7 8 9 10 11 | /* * tkUnix3d.c -- * * This file contains the platform specific routines for * drawing 3d borders in the Motif style. * * Copyright (c) 1996 by Sun Microsystems, Inc. * * See the file "license.terms" for information on usage and redistribution * of this file, and for a DISCLAIMER OF ALL WARRANTIES. * | | | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | /* * tkUnix3d.c -- * * This file contains the platform specific routines for * drawing 3d borders in the Motif style. * * Copyright (c) 1996 by Sun Microsystems, Inc. * * See the file "license.terms" for information on usage and redistribution * of this file, and for a DISCLAIMER OF ALL WARRANTIES. * * RCS: @(#) $Id: tkUnix3d.c,v 1.5.8.3 2002/06/10 05:38:27 wolfsuit Exp $ */ #include <tk3d.h> #if !(defined(__WIN32__) || defined(MAC_TCL) || defined(MAC_OSX_TK)) #include "tkUnixInt.h" #endif |
︙ | ︙ | |||
289 290 291 292 293 294 295 296 297 298 299 300 301 302 | bottom = y + height; /* * Draw one line for each y-coordinate covered by the bevel. */ for ( ; y < bottom; y++) { /* * In some weird cases (such as large border widths for skinny * rectangles) x1 can be >= x2. Don't draw the lines * in these cases. */ if (x1 < x2) { | > > > > > > > > > | 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 | bottom = y + height; /* * Draw one line for each y-coordinate covered by the bevel. */ for ( ; y < bottom; y++) { /* * X Dimensions are 16-bit, so avoid wraparound or display errors * by limiting these here. */ if (x1 < -32767) x1 = -32767; if (x2 > 32767) x2 = 32767; /* * In some weird cases (such as large border widths for skinny * rectangles) x1 can be >= x2. Don't draw the lines * in these cases. */ if (x1 < x2) { |
︙ | ︙ |
Changes to unix/tkUnixDefault.h.
1 2 3 4 5 6 7 8 9 10 11 12 | /* * tkUnixDefault.h -- * * This file defines the defaults for all options for all of * the Tk widgets. * * Copyright (c) 1991-1994 The Regents of the University of California. * Copyright (c) 1994-1997 Sun Microsystems, Inc. * * See the file "license.terms" for information on usage and redistribution * of this file, and for a DISCLAIMER OF ALL WARRANTIES. * | | | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | /* * tkUnixDefault.h -- * * This file defines the defaults for all options for all of * the Tk widgets. * * Copyright (c) 1991-1994 The Regents of the University of California. * Copyright (c) 1994-1997 Sun Microsystems, Inc. * * See the file "license.terms" for information on usage and redistribution * of this file, and for a DISCLAIMER OF ALL WARRANTIES. * * RCS: @(#) $Id: tkUnixDefault.h,v 1.11.2.2 2002/06/10 05:38:27 wolfsuit Exp $ */ #ifndef _TKUNIXDEFAULT #define _TKUNIXDEFAULT /* * The definitions below provide symbolic names for the default colors. |
︙ | ︙ | |||
349 350 351 352 353 354 355 356 357 358 359 360 361 362 | #define DEF_MESSAGE_PADY "-1" #define DEF_MESSAGE_RELIEF "flat" #define DEF_MESSAGE_TAKE_FOCUS "0" #define DEF_MESSAGE_TEXT "" #define DEF_MESSAGE_TEXT_VARIABLE "" #define DEF_MESSAGE_WIDTH "0" /* * Defaults for scales: */ #define DEF_SCALE_ACTIVE_BG_COLOR ACTIVE_BG #define DEF_SCALE_ACTIVE_BG_MONO BLACK #define DEF_SCALE_BG_COLOR NORMAL_BG | > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 | #define DEF_MESSAGE_PADY "-1" #define DEF_MESSAGE_RELIEF "flat" #define DEF_MESSAGE_TAKE_FOCUS "0" #define DEF_MESSAGE_TEXT "" #define DEF_MESSAGE_TEXT_VARIABLE "" #define DEF_MESSAGE_WIDTH "0" /* * Defaults for panedwindows */ #define DEF_PANEDWINDOW_BG_COLOR NORMAL_BG #define DEF_PANEDWINDOW_BG_MONO WHITE #define DEF_PANEDWINDOW_BORDERWIDTH "2" #define DEF_PANEDWINDOW_CURSOR "" #define DEF_PANEDWINDOW_HANDLEPAD "8" #define DEF_PANEDWINDOW_HANDLESIZE "8" #define DEF_PANEDWINDOW_HEIGHT "" #define DEF_PANEDWINDOW_OPAQUERESIZE "0" #define DEF_PANEDWINDOW_ORIENT "horizontal" #define DEF_PANEDWINDOW_RELIEF "flat" #define DEF_PANEDWINDOW_SASHCURSOR "" #define DEF_PANEDWINDOW_SASHPAD "2" #define DEF_PANEDWINDOW_SASHRELIEF "raised" #define DEF_PANEDWINDOW_SASHWIDTH "2" #define DEF_PANEDWINDOW_SHOWHANDLE "1" #define DEF_PANEDWINDOW_WIDTH "" /* * Defaults for panedwindow panes */ #define DEF_PANEDWINDOW_PANE_AFTER "" #define DEF_PANEDWINDOW_PANE_BEFORE "" #define DEF_PANEDWINDOW_PANE_HEIGHT "" #define DEF_PANEDWINDOW_PANE_MINSIZE "0" #define DEF_PANEDWINDOW_PANE_PADX "0" #define DEF_PANEDWINDOW_PANE_PADY "0" #define DEF_PANEDWINDOW_PANE_STICKY "nsew" #define DEF_PANEDWINDOW_PANE_WIDTH "" /* * Defaults for scales: */ #define DEF_SCALE_ACTIVE_BG_COLOR ACTIVE_BG #define DEF_SCALE_ACTIVE_BG_MONO BLACK #define DEF_SCALE_BG_COLOR NORMAL_BG |
︙ | ︙ |
Changes to unix/tkUnixEmbed.c.
1 2 3 4 5 6 7 8 9 10 11 12 13 | /* * tkUnixEmbed.c -- * * This file contains platform-specific procedures for UNIX to provide * basic operations needed for application embedding (where one * application can use as its main window an internal window from * some other application). * * Copyright (c) 1996-1997 Sun Microsystems, Inc. * * See the file "license.terms" for information on usage and redistribution * of this file, and for a DISCLAIMER OF ALL WARRANTIES. * | | | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | /* * tkUnixEmbed.c -- * * This file contains platform-specific procedures for UNIX to provide * basic operations needed for application embedding (where one * application can use as its main window an internal window from * some other application). * * Copyright (c) 1996-1997 Sun Microsystems, Inc. * * See the file "license.terms" for information on usage and redistribution * of this file, and for a DISCLAIMER OF ALL WARRANTIES. * * RCS: @(#) $Id: tkUnixEmbed.c,v 1.3.18.1 2002/06/10 05:38:27 wolfsuit Exp $ */ #include "tkInt.h" #include "tkUnixInt.h" /* * One of the following structures exists for each container in this |
︙ | ︙ | |||
101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 | * if string is bogus. */ Tk_Window tkwin; /* Tk window that does not yet have an * associated X window. */ char *string; /* String identifying an X window to use * for tkwin; must be an integer value. */ { TkWindow *winPtr = (TkWindow *) tkwin; int id, anyError; Window parent; Tk_ErrorHandler handler; Container *containerPtr; XWindowAttributes parentAtts; ThreadSpecificData *tsdPtr = (ThreadSpecificData *) Tcl_GetThreadData(&dataKey, sizeof(ThreadSpecificData)); if (winPtr->window != None) { panic("TkUseWindow: X window already assigned"); } if (Tcl_GetInt(interp, string, &id) != TCL_OK) { return TCL_ERROR; } parent = (Window) id; /* * Tk sets the window colormap to the screen default colormap in * tkWindow.c:AllocWindow. This doesn't work well for embedded * windows. So we override the colormap and visual settings to be * the same as the parent window (which is in the container app). */ | > > > > > > > > > > | 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 | * if string is bogus. */ Tk_Window tkwin; /* Tk window that does not yet have an * associated X window. */ char *string; /* String identifying an X window to use * for tkwin; must be an integer value. */ { TkWindow *winPtr = (TkWindow *) tkwin; TkWindow *usePtr; int id, anyError; Window parent; Tk_ErrorHandler handler; Container *containerPtr; XWindowAttributes parentAtts; ThreadSpecificData *tsdPtr = (ThreadSpecificData *) Tcl_GetThreadData(&dataKey, sizeof(ThreadSpecificData)); if (winPtr->window != None) { panic("TkUseWindow: X window already assigned"); } if (Tcl_GetInt(interp, string, &id) != TCL_OK) { return TCL_ERROR; } parent = (Window) id; usePtr = (TkWindow *) Tk_IdToWindow(winPtr->display, parent); if (usePtr != NULL) { if (!(usePtr->flags & TK_CONTAINER)) { Tcl_AppendResult(interp, "window \"", usePtr->pathName, "\" doesn't have -container option set", (char *) NULL); return TCL_ERROR; } } /* * Tk sets the window colormap to the screen default colormap in * tkWindow.c:AllocWindow. This doesn't work well for embedded * windows. So we override the colormap and visual settings to be * the same as the parent window (which is in the container app). */ |
︙ | ︙ |
Changes to unix/tkUnixEvent.c.
1 2 3 4 5 6 7 8 9 10 11 | /* * tkUnixEvent.c -- * * This file implements an event source for X displays for the * UNIX version of Tk. * * Copyright (c) 1995-1997 Sun Microsystems, Inc. * * See the file "license.terms" for information on usage and redistribution * of this file, and for a DISCLAIMER OF ALL WARRANTIES. * | | | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | /* * tkUnixEvent.c -- * * This file implements an event source for X displays for the * UNIX version of Tk. * * Copyright (c) 1995-1997 Sun Microsystems, Inc. * * See the file "license.terms" for information on usage and redistribution * of this file, and for a DISCLAIMER OF ALL WARRANTIES. * * RCS: @(#) $Id: tkUnixEvent.c,v 1.3.18.2 2002/06/10 05:38:27 wolfsuit Exp $ */ #include "tkInt.h" #include "tkUnixInt.h" #include <signal.h> /* |
︙ | ︙ | |||
35 36 37 38 39 40 41 42 43 44 45 46 47 48 | static void DisplayExitHandler _ANSI_ARGS_(( ClientData clientData)); static void DisplayFileProc _ANSI_ARGS_((ClientData clientData, int flags)); static void DisplaySetupProc _ANSI_ARGS_((ClientData clientData, int flags)); static void TransferXEventsToTcl _ANSI_ARGS_((Display *display)); /* *---------------------------------------------------------------------- * * TkCreateXEventSource -- * | > > > | 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 | static void DisplayExitHandler _ANSI_ARGS_(( ClientData clientData)); static void DisplayFileProc _ANSI_ARGS_((ClientData clientData, int flags)); static void DisplaySetupProc _ANSI_ARGS_((ClientData clientData, int flags)); static void TransferXEventsToTcl _ANSI_ARGS_((Display *display)); #ifdef TK_USE_INPUT_METHODS static void OpenIM _ANSI_ARGS_((TkDisplay *dispPtr)); #endif /* *---------------------------------------------------------------------- * * TkCreateXEventSource -- * |
︙ | ︙ | |||
123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 | TkDisplay *dispPtr; Display *display = XOpenDisplay(display_name); if (display == NULL) { return NULL; } dispPtr = (TkDisplay *) ckalloc(sizeof(TkDisplay)); dispPtr->display = display; Tcl_CreateFileHandler(ConnectionNumber(display), TCL_READABLE, DisplayFileProc, (ClientData) dispPtr); return dispPtr; } /* *---------------------------------------------------------------------- * * TkpCloseDisplay -- * * Cancels notifier callbacks and closes a display. * * Results: * None. * * Side effects: | > > > > | | | > | > > > > > | | | > > > > > > > > > > > > > > | | | | 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 | TkDisplay *dispPtr; Display *display = XOpenDisplay(display_name); if (display == NULL) { return NULL; } dispPtr = (TkDisplay *) ckalloc(sizeof(TkDisplay)); memset(dispPtr, 0, sizeof(TkDisplay)); dispPtr->display = display; #ifdef TK_USE_INPUT_METHODS OpenIM(dispPtr); #endif Tcl_CreateFileHandler(ConnectionNumber(display), TCL_READABLE, DisplayFileProc, (ClientData) dispPtr); return dispPtr; } /* *---------------------------------------------------------------------- * * TkpCloseDisplay -- * * Cancels notifier callbacks and closes a display. * * Results: * None. * * Side effects: * Deallocates the displayPtr and unix-specific resources. * *---------------------------------------------------------------------- */ void TkpCloseDisplay(dispPtr) TkDisplay *dispPtr; { TkSendCleanup(dispPtr); TkFreeXId(dispPtr); TkWmCleanup(dispPtr); #ifdef TK_USE_INPUT_METHODS #if TK_XIM_SPOT if (dispPtr->inputXfs) { XFreeFontSet(dispPtr->display, dispPtr->inputXfs); } #endif #if ! defined(SOLARIS2) || defined(HAVE_X11R6) if (dispPtr->inputMethod) { /* * This causes core dumps on some systems (e.g. Solaris 2.3 as of * 1/6/95), but is OK with X11R6 */ XCloseIM(dispPtr->inputMethod); } #endif #endif if (dispPtr->display != 0) { Tcl_DeleteFileHandler(ConnectionNumber(dispPtr->display)); (void) XSync(dispPtr->display, False); (void) XCloseDisplay(dispPtr->display); } ckfree((char *) dispPtr); } /* *---------------------------------------------------------------------- * * DisplaySetupProc -- |
︙ | ︙ | |||
226 227 228 229 230 231 232 | * * Side effects: * Moves queued X events onto the Tcl event queue. * *---------------------------------------------------------------------- */ | < | 253 254 255 256 257 258 259 260 261 262 263 264 265 266 | * * Side effects: * Moves queued X events onto the Tcl event queue. * *---------------------------------------------------------------------- */ static void TransferXEventsToTcl(display) Display *display; { int numFound; XEvent event; |
︙ | ︙ | |||
281 282 283 284 285 286 287 | for (dispPtr = TkGetDisplayList(); dispPtr != NULL; dispPtr = dispPtr->nextPtr) { XFlush(dispPtr->display); TransferXEventsToTcl(dispPtr->display); } } | < < | 307 308 309 310 311 312 313 314 315 316 317 318 319 320 | for (dispPtr = TkGetDisplayList(); dispPtr != NULL; dispPtr = dispPtr->nextPtr) { XFlush(dispPtr->display); TransferXEventsToTcl(dispPtr->display); } } /* *---------------------------------------------------------------------- * * DisplayFileProc -- * * This procedure implements the file handler for the X connection. |
︙ | ︙ | |||
512 513 514 515 516 517 518 | { XSync(display, False); /* * Transfer events from the X event queue to the Tk event queue. */ TransferXEventsToTcl(display); | | > | > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 536 537 538 539 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557 558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 574 575 576 577 578 579 580 581 582 583 584 585 586 587 588 589 590 591 592 593 594 595 596 597 598 599 600 601 602 603 604 605 606 607 608 609 610 611 612 613 | { XSync(display, False); /* * Transfer events from the X event queue to the Tk event queue. */ TransferXEventsToTcl(display); } #ifdef TK_USE_INPUT_METHODS /* *-------------------------------------------------------------- * * OpenIM -- * * Tries to open an X input method, associated with the * given display. Right now we can only deal with a bare-bones * input style: no preedit, and no status. * * Results: * Stores the input method in dispPtr->inputMethod; if there isn't * a suitable input method, then NULL is stored in dispPtr->inputMethod. * * Side effects: * An input method gets opened. * *-------------------------------------------------------------- */ static void OpenIM(dispPtr) TkDisplay *dispPtr; /* Tk's structure for the display. */ { unsigned short i; XIMStyles *stylePtr; char *modifier_list; if ((modifier_list = XSetLocaleModifiers("")) == NULL) { goto error; } dispPtr->inputMethod = XOpenIM(dispPtr->display, NULL, NULL, NULL); if (dispPtr->inputMethod == NULL) { return; } if ((XGetIMValues(dispPtr->inputMethod, XNQueryInputStyle, &stylePtr, NULL) != NULL) || (stylePtr == NULL)) { goto error; } for (i = 0; i < stylePtr->count_styles; i++) { if (stylePtr->supported_styles[i] #if TK_XIM_SPOT == (XIMPreeditPosition | XIMStatusNothing) #else == (XIMPreeditNothing | XIMStatusNothing) #endif ) { XFree(stylePtr); return; } } XFree(stylePtr); error: if (dispPtr->inputMethod) { /* * This causes core dumps on some systems (e.g. Solaris 2.3 as of * 1/6/95), but is OK with X11R6 */ #if ! defined (SOLARIS2) || defined (HAVE_X11R6) XCloseIM(dispPtr->inputMethod); #endif dispPtr->inputMethod = NULL; } } #endif /* TK_USE_INPUT_METHODS */ |
Changes to unix/tkUnixFont.c.
1 2 3 4 5 6 7 8 9 10 11 | /* * tkUnixFont.c -- * * Contains the Unix implementation of the platform-independant * font package interface. * * Copyright (c) 1996-1997 Sun Microsystems, Inc. * * See the file "license.terms" for information on usage and redistribution * of this file, and for a DISCLAIMER OF ALL WARRANTIES. * | | > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 | /* * tkUnixFont.c -- * * Contains the Unix implementation of the platform-independant * font package interface. * * Copyright (c) 1996-1997 Sun Microsystems, Inc. * * See the file "license.terms" for information on usage and redistribution * of this file, and for a DISCLAIMER OF ALL WARRANTIES. * * RCS: @(#) $Id: tkUnixFont.c,v 1.9.2.1 2002/06/10 05:38:27 wolfsuit Exp $ */ #include "tkUnixInt.h" #include "tkFont.h" #include <netinet/in.h> /* for htons() prototype */ #include <arpa/inet.h> /* inet_ntoa() */ /* * The preferred font encodings. */ static CONST char *encodingList[] = { "iso8859-1", "jis0208", "jis0212", NULL |
︙ | ︙ | |||
193 194 195 196 197 198 199 200 201 202 203 204 205 206 | {NULL, NULL} }; /* * Procedures used only in this file. */ static FontFamily * AllocFontFamily _ANSI_ARGS_((Display *display, XFontStruct *fontStructPtr, int base)); static SubFont * CanUseFallback _ANSI_ARGS_((UnixFont *fontPtr, char *fallbackName, int ch)); static SubFont * CanUseFallbackWithAliases _ANSI_ARGS_(( UnixFont *fontPtr, char *fallbackName, int ch, Tcl_DString *nameTriedPtr)); | > | 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 | {NULL, NULL} }; /* * Procedures used only in this file. */ static void FontPkgCleanup _ANSI_ARGS_((ClientData clientData)); static FontFamily * AllocFontFamily _ANSI_ARGS_((Display *display, XFontStruct *fontStructPtr, int base)); static SubFont * CanUseFallback _ANSI_ARGS_((UnixFont *fontPtr, char *fallbackName, int ch)); static SubFont * CanUseFallbackWithAliases _ANSI_ARGS_(( UnixFont *fontPtr, char *fallbackName, int ch, Tcl_DString *nameTriedPtr)); |
︙ | ︙ | |||
257 258 259 260 261 262 263 264 265 266 267 268 269 270 | int *srcReadPtr, int *dstWrotePtr, int *dstCharsPtr)); /* *------------------------------------------------------------------------- * * TkpFontPkgInit -- * * This procedure is called when an application is created. It * initializes all the structures that are used by the * platform-dependent code on a per application basis. * * Results: | > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 | int *srcReadPtr, int *dstWrotePtr, int *dstCharsPtr)); /* *------------------------------------------------------------------------- * * FontPkgCleanup -- * * This procedure is called when an application is created. It * initializes all the structures that are used by the * platform-dependent code on a per application basis. * * Results: * None. * * Side effects: * Releases thread-specific resources used by font pkg. * *------------------------------------------------------------------------- */ static void FontPkgCleanup(ClientData clientData) { ThreadSpecificData *tsdPtr = (ThreadSpecificData *) Tcl_GetThreadData(&dataKey, sizeof(ThreadSpecificData)); if (tsdPtr->controlFamily.encoding != NULL) { FontFamily *familyPtr = &tsdPtr->controlFamily; int i; Tcl_FreeEncoding(familyPtr->encoding); for (i = 0; i < FONTMAP_PAGES; i++) { if (familyPtr->fontMap[i] != NULL) { ckfree(familyPtr->fontMap[i]); } } tsdPtr->controlFamily.encoding = NULL; } } /* *------------------------------------------------------------------------- * * TkpFontPkgInit -- * * This procedure is called when an application is created. It * initializes all the structures that are used by the * platform-dependent code on a per application basis. * * Results: |
︙ | ︙ | |||
313 314 315 316 317 318 319 320 321 322 323 324 325 326 | type.encodingName = "ucs-2be"; type.toUtfProc = Ucs2beToUtfProc; type.fromUtfProc = UtfToUcs2beProc; type.freeProc = NULL; type.clientData = NULL; type.nullSize = 2; Tcl_CreateEncoding(&type); } } /* *------------------------------------------------------------------------- * * ControlUtfProc -- | > | 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 | type.encodingName = "ucs-2be"; type.toUtfProc = Ucs2beToUtfProc; type.fromUtfProc = UtfToUcs2beProc; type.freeProc = NULL; type.clientData = NULL; type.nullSize = 2; Tcl_CreateEncoding(&type); Tcl_CreateThreadExitHandler(FontPkgCleanup, NULL); } } /* *------------------------------------------------------------------------- * * ControlUtfProc -- |
︙ | ︙ | |||
1110 1111 1112 1113 1114 1115 1116 | int x, y; /* Coordinates at which to place origin of * string when drawing. */ { UnixFont *fontPtr; SubFont *thisSubFontPtr, *lastSubFontPtr; Tcl_DString runString; CONST char *p, *end, *next; | | > > > > > > > > > > > > > > | > | | > > > > | > > > | | | | > > | | | > < < < | < < < < < < < < < < < < < < | < < < < < < < < > > > > | 1151 1152 1153 1154 1155 1156 1157 1158 1159 1160 1161 1162 1163 1164 1165 1166 1167 1168 1169 1170 1171 1172 1173 1174 1175 1176 1177 1178 1179 1180 1181 1182 1183 1184 1185 1186 1187 1188 1189 1190 1191 1192 1193 1194 1195 1196 1197 1198 1199 1200 1201 1202 1203 1204 1205 1206 1207 1208 1209 1210 1211 1212 1213 1214 1215 1216 1217 1218 1219 1220 1221 1222 1223 1224 1225 1226 1227 1228 1229 1230 1231 1232 1233 1234 1235 1236 1237 1238 1239 1240 1241 1242 1243 1244 1245 1246 1247 1248 1249 1250 1251 1252 1253 | int x, y; /* Coordinates at which to place origin of * string when drawing. */ { UnixFont *fontPtr; SubFont *thisSubFontPtr, *lastSubFontPtr; Tcl_DString runString; CONST char *p, *end, *next; int xStart, needWidth, window_width; Tcl_UniChar ch; FontFamily *familyPtr; int rx, ry, width, height, border_width, depth; int do_width; Drawable root; fontPtr = (UnixFont *) tkfont; lastSubFontPtr = &fontPtr->subFontArray[0]; xStart = x; /* * Get the window width so we can abort drawing outside of the window */ if (XGetGeometry(display, drawable, &root, &rx, &ry, &width, &height, &border_width, &depth) == False) { window_width = INT_MAX; } else { window_width = width; } end = source + numBytes; needWidth = fontPtr->font.fa.underline + fontPtr->font.fa.overstrike; for (p = source; p <= end; ) { if (p < end) { next = p + Tcl_UtfToUniChar(p, &ch); thisSubFontPtr = FindSubFontForChar(fontPtr, ch); } else { next = p + 1; thisSubFontPtr = lastSubFontPtr; } if ((thisSubFontPtr != lastSubFontPtr) || (p == end) || (p-source > 200)) { if (p > source) { do_width = (needWidth || (p != end)) ? 1 : 0; familyPtr = lastSubFontPtr->familyPtr; Tcl_UtfToExternalDString(familyPtr->encoding, source, p - source, &runString); if (familyPtr->isTwoByteFont) { XDrawString16(display, drawable, gc, x, y, (XChar2b *) Tcl_DStringValue(&runString), Tcl_DStringLength(&runString) / 2); if (do_width) { x += XTextWidth16(lastSubFontPtr->fontStructPtr, (XChar2b *) Tcl_DStringValue(&runString), Tcl_DStringLength(&runString) / 2); } } else { XDrawString(display, drawable, gc, x, y, Tcl_DStringValue(&runString), Tcl_DStringLength(&runString)); if (do_width) { x += XTextWidth(lastSubFontPtr->fontStructPtr, Tcl_DStringValue(&runString), Tcl_DStringLength(&runString)); } } Tcl_DStringFree(&runString); } lastSubFontPtr = thisSubFontPtr; source = p; XSetFont(display, gc, lastSubFontPtr->fontStructPtr->fid); if (x > window_width) { break; } } p = next; } if (lastSubFontPtr != &fontPtr->subFontArray[0]) { XSetFont(display, gc, fontPtr->subFontArray[0].fontStructPtr->fid); } if (fontPtr->font.fa.underline != 0) { XFillRectangle(display, drawable, gc, xStart, y + fontPtr->underlinePos, (unsigned) (x - xStart), (unsigned) fontPtr->barHeight); } if (fontPtr->font.fa.overstrike != 0) { y -= fontPtr->font.fm.descent + (fontPtr->font.fm.ascent) / 10; XFillRectangle(display, drawable, gc, xStart, y, (unsigned) (x - xStart), (unsigned) fontPtr->barHeight); } } /* *------------------------------------------------------------------------- * * CreateClosestFont -- * * Helper for TkpGetNativeFont() and TkpGetFontFromAttributes(). |
︙ | ︙ |
Changes to unix/tkUnixKey.c.
1 2 3 4 5 6 7 8 9 10 11 | /* * tkUnixKey.c -- * * This file contains routines for dealing with international keyboard * input. * * Copyright (c) 1997 by Sun Microsystems, Inc. * * See the file "license.terms" for information on usage and redistribution * of this file, and for a DISCLAIMER OF ALL WARRANTIES. * | | > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 | /* * tkUnixKey.c -- * * This file contains routines for dealing with international keyboard * input. * * Copyright (c) 1997 by Sun Microsystems, Inc. * * See the file "license.terms" for information on usage and redistribution * of this file, and for a DISCLAIMER OF ALL WARRANTIES. * * RCS: @(#) $Id: tkUnixKey.c,v 1.5.8.1 2002/06/10 05:38:27 wolfsuit Exp $ */ #include "tkInt.h" /* * Prototypes for local procedures defined in this file: */ #ifdef TK_USE_INPUT_METHODS static int caretX = 0, caretY = 0; #endif /* *---------------------------------------------------------------------- * * Tk_SetCaretPos -- * * This enables correct placement of the XIM caret. This is called * by widgets to indicate their cursor placement, and the caret * location is used by TkpGetString to place the XIM caret. * * Results: * None * * Side effects: * None * *---------------------------------------------------------------------- */ void Tk_SetCaretPos(tkwin, x, y, height) Tk_Window tkwin; int x; int y; int height; { #ifdef TK_USE_INPUT_METHODS /* * Use height for best placement of the XIM over-the-spot box. */ caretX = x; caretY = y + height; #endif } /* *---------------------------------------------------------------------- * * TkpGetString -- * * Retrieve the UTF string associated with a keyboard event. |
︙ | ︙ | |||
52 53 54 55 56 57 58 | /* * Overallocate the dstring to the maximum stack amount. */ Tcl_DStringInit(&buf); Tcl_DStringSetLength(&buf, TCL_DSTRING_STATIC_SIZE-1); | | > > > > > > > > > > > > > > > > | 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 | /* * Overallocate the dstring to the maximum stack amount. */ Tcl_DStringInit(&buf); Tcl_DStringSetLength(&buf, TCL_DSTRING_STATIC_SIZE-1); #ifdef TK_USE_INPUT_METHODS if (winPtr->dispPtr->useInputMethods && (winPtr->inputContext != NULL) && (eventPtr->type == KeyPress)) { #if TK_XIM_SPOT XVaNestedList preedit_attr; XPoint spot; #endif len = XmbLookupString(winPtr->inputContext, &eventPtr->xkey, Tcl_DStringValue(&buf), Tcl_DStringLength(&buf), (KeySym *) NULL, &status); /* * If the buffer wasn't big enough, grow the buffer and try again. */ if (status == XBufferOverflow) { Tcl_DStringSetLength(&buf, len); len = XmbLookupString(winPtr->inputContext, &eventPtr->xkey, Tcl_DStringValue(&buf), len, (KeySym *) NULL, &status); } if ((status != XLookupChars) && (status != XLookupBoth)) { len = 0; } #if TK_XIM_SPOT /* * Adjust the XIM caret position. */ spot.x = caretX; spot.y = caretY; preedit_attr = XVaCreateNestedList(0, XNSpotLocation, &spot, NULL); XSetICValues(winPtr->inputContext, XNPreeditAttributes, preedit_attr, NULL); XFree(preedit_attr); #endif } else { len = XLookupString(&eventPtr->xkey, Tcl_DStringValue(&buf), Tcl_DStringLength(&buf), (KeySym *) NULL, (XComposeStatus *) NULL); } #else /* TK_USE_INPUT_METHODS */ len = XLookupString(&eventPtr->xkey, Tcl_DStringValue(&buf), |
︙ | ︙ |
Changes to unix/tkUnixMenu.c.
1 2 3 4 5 6 7 8 9 10 | /* * tkUnixMenu.c -- * * This module implements the UNIX platform-specific features of menus. * * Copyright (c) 1996-1998 by Sun Microsystems, Inc. * * See the file "license.terms" for information on usage and redistribution * of this file, and for a DISCLAIMER OF ALL WARRANTIES. * | | | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | /* * tkUnixMenu.c -- * * This module implements the UNIX platform-specific features of menus. * * Copyright (c) 1996-1998 by Sun Microsystems, Inc. * * See the file "license.terms" for information on usage and redistribution * of this file, and for a DISCLAIMER OF ALL WARRANTIES. * * RCS: @(#) $Id: tkUnixMenu.c,v 1.5.2.2 2002/06/10 05:38:27 wolfsuit Exp $ */ #include "tkPort.h" #include "default.h" #include "tkInt.h" #include "tkUnixInt.h" #include "tkMenu.h" |
︙ | ︙ | |||
703 704 705 706 707 708 709 | int width; /* width of entry. */ int height; /* height of entry. */ { int indicatorSpace = mePtr->indicatorSpace; int activeBorderWidth; int leftEdge; int imageHeight, imageWidth; | | | 703 704 705 706 707 708 709 710 711 712 713 714 715 716 717 | int width; /* width of entry. */ int height; /* height of entry. */ { int indicatorSpace = mePtr->indicatorSpace; int activeBorderWidth; int leftEdge; int imageHeight, imageWidth; int textHeight = 0, textWidth = 0; /* stop GCC warning */ int haveImage = 0, haveText = 0; int imageXOffset = 0, imageYOffset = 0; int textXOffset = 0, textYOffset = 0; Tk_GetPixelsFromObj(NULL, menuPtr->tkwin, menuPtr->activeBorderWidthPtr, &activeBorderWidth); leftEdge = x + indicatorSpace + activeBorderWidth; |
︙ | ︙ | |||
1469 1470 1471 1472 1473 1474 1475 | CONST Tk_FontMetrics *fmPtr; /* The precalculated metrics */ int *widthPtr; /* The resulting width of the label * portion */ int *heightPtr; /* The resulting height of the label * portion */ { TkMenu *menuPtr = mePtr->menuPtr; | | | 1469 1470 1471 1472 1473 1474 1475 1476 1477 1478 1479 1480 1481 1482 1483 | CONST Tk_FontMetrics *fmPtr; /* The precalculated metrics */ int *widthPtr; /* The resulting width of the label * portion */ int *heightPtr; /* The resulting height of the label * portion */ { TkMenu *menuPtr = mePtr->menuPtr; int haveImage = 0; if (mePtr->image != NULL) { Tk_SizeOfImage(mePtr->image, widthPtr, heightPtr); haveImage = 1; } else if (mePtr->bitmapPtr != NULL) { Pixmap bitmap = Tk_GetBitmapFromObj(menuPtr->tkwin, mePtr->bitmapPtr); Tk_SizeOfBitmap(menuPtr->display, bitmap, widthPtr, heightPtr); |
︙ | ︙ |
Changes to unix/tkUnixSelect.c.
1 2 3 4 5 6 7 8 9 10 11 | /* * tkUnixSelect.c -- * * This file contains X specific routines for manipulating * selections. * * Copyright (c) 1995-1997 Sun Microsystems, Inc. * * See the file "license.terms" for information on usage and redistribution * of this file, and for a DISCLAIMER OF ALL WARRANTIES. * | | | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | /* * tkUnixSelect.c -- * * This file contains X specific routines for manipulating * selections. * * Copyright (c) 1995-1997 Sun Microsystems, Inc. * * See the file "license.terms" for information on usage and redistribution * of this file, and for a DISCLAIMER OF ALL WARRANTIES. * * RCS: @(#) $Id: tkUnixSelect.c,v 1.7.2.1 2002/06/10 05:38:27 wolfsuit Exp $ */ #include "tkInt.h" #include "tkSelect.h" typedef struct ConvertInfo { int offset; /* The starting byte offset into the selection |
︙ | ︙ | |||
1193 1194 1195 1196 1197 1198 1199 1200 1201 1202 1203 1204 1205 1206 | srcLen = Tcl_DStringLength(&temp); } else if (numItems == 0) { /* * There is no new data, so we're done. */ retrPtr->result = TCL_OK; goto done; } else { src = propInfo; srcLen = numItems; } /* | > | 1193 1194 1195 1196 1197 1198 1199 1200 1201 1202 1203 1204 1205 1206 1207 | srcLen = Tcl_DStringLength(&temp); } else if (numItems == 0) { /* * There is no new data, so we're done. */ retrPtr->result = TCL_OK; Tcl_Release((ClientData) interp); goto done; } else { src = propInfo; srcLen = numItems; } /* |
︙ | ︙ |
Changes to unix/tkUnixSend.c.
︙ | ︙ | |||
8 9 10 11 12 13 14 | * Copyright (c) 1989-1994 The Regents of the University of California. * Copyright (c) 1994-1996 Sun Microsystems, Inc. * Copyright (c) 1998-1999 by Scriptics Corporation. * * See the file "license.terms" for information on usage and redistribution * of this file, and for a DISCLAIMER OF ALL WARRANTIES. * | | | 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | * Copyright (c) 1989-1994 The Regents of the University of California. * Copyright (c) 1994-1996 Sun Microsystems, Inc. * Copyright (c) 1998-1999 by Scriptics Corporation. * * See the file "license.terms" for information on usage and redistribution * of this file, and for a DISCLAIMER OF ALL WARRANTIES. * * RCS: @(#) $Id: tkUnixSend.c,v 1.4.18.2 2002/06/10 05:38:27 wolfsuit Exp $ */ #include "tkPort.h" #include "tkInt.h" #include "tkUnixInt.h" /* |
︙ | ︙ | |||
1248 1249 1250 1251 1252 1253 1254 1255 1256 1257 1258 1259 1260 1261 | regPtr->modified = 1; p = entry; } } RegClose(regPtr); return TCL_OK; } /* *-------------------------------------------------------------- * * SendInit -- * * This procedure is called to initialize the | > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1248 1249 1250 1251 1252 1253 1254 1255 1256 1257 1258 1259 1260 1261 1262 1263 1264 1265 1266 1267 1268 1269 1270 1271 1272 1273 1274 1275 1276 1277 1278 1279 1280 1281 1282 1283 1284 1285 1286 1287 1288 1289 1290 1291 1292 1293 1294 | regPtr->modified = 1; p = entry; } } RegClose(regPtr); return TCL_OK; } /* *-------------------------------------------------------------- * * TkSendCleanup -- * * This procedure is called to free resources used by the * communication channels for sending commands and * receiving results. * * Results: * None. * * Side effects: * Frees various data structures and windows. * *-------------------------------------------------------------- */ void TkSendCleanup(dispPtr) TkDisplay *dispPtr; { if (dispPtr->commTkwin != NULL) { Tk_DeleteEventHandler(dispPtr->commTkwin, PropertyChangeMask, SendEventProc, (ClientData) dispPtr); #ifdef PURIFY /* Tk_DestroyWindow(dispPtr->commTkwin); */ ckfree((char *) dispPtr->commTkwin); #endif dispPtr->commTkwin = NULL; } } /* *-------------------------------------------------------------- * * SendInit -- * * This procedure is called to initialize the |
︙ | ︙ |
Changes to unix/tkUnixWm.c.
︙ | ︙ | |||
8 9 10 11 12 13 14 | * * Copyright (c) 1991-1994 The Regents of the University of California. * Copyright (c) 1994-1997 Sun Microsystems, Inc. * * See the file "license.terms" for information on usage and redistribution * of this file, and for a DISCLAIMER OF ALL WARRANTIES. * | | | 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | * * Copyright (c) 1991-1994 The Regents of the University of California. * Copyright (c) 1994-1997 Sun Microsystems, Inc. * * See the file "license.terms" for information on usage and redistribution * of this file, and for a DISCLAIMER OF ALL WARRANTIES. * * RCS: @(#) $Id: tkUnixWm.c,v 1.9.2.2 2002/06/10 05:38:27 wolfsuit Exp $ */ #include "tkPort.h" #include "tkInt.h" #include "tkUnixInt.h" #include <errno.h> |
︙ | ︙ | |||
58 59 60 61 62 63 64 | * that is a child of the root window (may * not be window's immediate parent). If * the window isn't reparented, this has the * value None. */ char *title; /* Title to display in window caption. If * NULL, use name of widget. Malloced. */ char *iconName; /* Name to display in icon. Malloced. */ | < < | | < < < | 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 | * that is a child of the root window (may * not be window's immediate parent). If * the window isn't reparented, this has the * value None. */ char *title; /* Title to display in window caption. If * NULL, use name of widget. Malloced. */ char *iconName; /* Name to display in icon. Malloced. */ XWMHints hints; /* Various pieces of information for * window manager. */ char *leaderName; /* Path name of leader of window group * (corresponds to hints.window_group). * Malloc-ed. Note: this field doesn't * get updated if leader is destroyed. */ TkWindow *masterPtr; /* Master window for TRANSIENT_FOR property, * or NULL. */ Tk_Window icon; /* Window to use as icon for this window, * or NULL. */ Tk_Window iconFor; /* Window for which this window is icon, or * NULL if this isn't an icon for anyone. */ int withdrawn; /* Non-zero means window has been withdrawn. */ /* |
︙ | ︙ | |||
346 347 348 349 350 351 352 353 354 355 356 357 358 359 | XEvent *eventPtr)); static void WrapperEventProc _ANSI_ARGS_((ClientData clientData, XEvent *eventPtr)); /* *-------------------------------------------------------------- * * TkWmNewWindow -- * * This procedure is invoked whenever a new top-level * window is created. Its job is to initialize the WmInfo * structure for the window. * * Results: | > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 | XEvent *eventPtr)); static void WrapperEventProc _ANSI_ARGS_((ClientData clientData, XEvent *eventPtr)); /* *-------------------------------------------------------------- * * TkWmCleanup -- * * This procedure is invoked to cleanup remaining wm resources * associated with a display. * * Results: * None. * * Side effects: * All WmInfo structure resources are freed and invalidated. * *-------------------------------------------------------------- */ void TkWmCleanup(dispPtr) TkDisplay *dispPtr; { WmInfo *wmPtr, *nextPtr; for (wmPtr = dispPtr->firstWmPtr; wmPtr != NULL; wmPtr = nextPtr) { /* * We can't assume we have access to winPtr's anymore, so some * cleanup requiring winPtr data is avoided. */ nextPtr = wmPtr->nextPtr; if (wmPtr->title != NULL) { ckfree(wmPtr->title); } if (wmPtr->iconName != NULL) { ckfree(wmPtr->iconName); } if (wmPtr->leaderName != NULL) { ckfree(wmPtr->leaderName); } if (wmPtr->menubar != NULL) { Tk_DestroyWindow(wmPtr->menubar); } if (wmPtr->wrapperPtr != NULL) { Tk_DestroyWindow((Tk_Window) wmPtr->wrapperPtr); } while (wmPtr->protPtr != NULL) { ProtocolHandler *protPtr; protPtr = wmPtr->protPtr; wmPtr->protPtr = protPtr->nextPtr; Tcl_EventuallyFree((ClientData) protPtr, TCL_DYNAMIC); } if (wmPtr->cmdArgv != NULL) { ckfree((char *) wmPtr->cmdArgv); } if (wmPtr->clientMachine != NULL) { ckfree((char *) wmPtr->clientMachine); } ckfree((char *) wmPtr); } } /* *-------------------------------------------------------------- * * TkWmNewWindow -- * * This procedure is invoked whenever a new top-level * window is created. Its job is to initialize the WmInfo * structure for the window. * * Results: |
︙ | ︙ | |||
369 370 371 372 373 374 375 376 377 | TkWmNewWindow(winPtr) TkWindow *winPtr; /* Newly-created top-level window. */ { register WmInfo *wmPtr; TkDisplay *dispPtr = winPtr->dispPtr; wmPtr = (WmInfo *) ckalloc(sizeof(WmInfo)); wmPtr->winPtr = winPtr; wmPtr->reparent = None; | > < < | < < < < < < < < < < < < < < < < | 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 | TkWmNewWindow(winPtr) TkWindow *winPtr; /* Newly-created top-level window. */ { register WmInfo *wmPtr; TkDisplay *dispPtr = winPtr->dispPtr; wmPtr = (WmInfo *) ckalloc(sizeof(WmInfo)); memset(wmPtr, 0, sizeof(WmInfo)); wmPtr->winPtr = winPtr; wmPtr->reparent = None; wmPtr->masterPtr = NULL; wmPtr->hints.flags = InputHint | StateHint; wmPtr->hints.input = True; wmPtr->hints.initial_state = NormalState; wmPtr->hints.icon_pixmap = None; wmPtr->hints.icon_window = None; wmPtr->hints.icon_x = wmPtr->hints.icon_y = 0; wmPtr->hints.icon_mask = None; wmPtr->hints.window_group = None; wmPtr->minWidth = wmPtr->minHeight = 1; /* * Default the maximum dimensions to the size of the display, minus * a guess about how space is needed for window manager decorations. */ wmPtr->widthInc = wmPtr->heightInc = 1; wmPtr->minAspect.x = wmPtr->minAspect.y = 1; wmPtr->maxAspect.x = wmPtr->maxAspect.y = 1; wmPtr->reqGridWidth = wmPtr->reqGridHeight = -1; wmPtr->gravity = NorthWestGravity; wmPtr->width = -1; wmPtr->height = -1; wmPtr->x = winPtr->changes.x; wmPtr->y = winPtr->changes.y; wmPtr->parentWidth = winPtr->changes.width + 2*winPtr->changes.border_width; wmPtr->parentHeight = winPtr->changes.height + 2*winPtr->changes.border_width; wmPtr->configWidth = -1; wmPtr->configHeight = -1; wmPtr->vRoot = None; wmPtr->flags = WM_NEVER_MAPPED; wmPtr->nextPtr = (WmInfo *) dispPtr->firstWmPtr; dispPtr->firstWmPtr = wmPtr; winPtr->wmInfoPtr = wmPtr; UpdateVRootGeometry(wmPtr); |
︙ | ︙ | |||
507 508 509 510 511 512 513 | if (wmPtr->iconName != NULL) { Tcl_UtfToExternalDString(NULL, wmPtr->iconName, -1, &ds); XSetIconName(winPtr->display, wmPtr->wrapperPtr->window, Tcl_DStringValue(&ds)); Tcl_DStringFree(&ds); } | | | | 544 545 546 547 548 549 550 551 552 553 554 555 556 557 558 559 560 | if (wmPtr->iconName != NULL) { Tcl_UtfToExternalDString(NULL, wmPtr->iconName, -1, &ds); XSetIconName(winPtr->display, wmPtr->wrapperPtr->window, Tcl_DStringValue(&ds)); Tcl_DStringFree(&ds); } if (wmPtr->masterPtr != NULL) { XSetTransientForHint(winPtr->display, wmPtr->wrapperPtr->window, wmPtr->masterPtr->wmInfoPtr->wrapperPtr->window); } wmPtr->flags |= WM_UPDATE_SIZE_HINTS; UpdateHints(winPtr); UpdateWmProtocols(wmPtr); if (wmPtr->cmdArgv != NULL) { UpdateCommand(winPtr); |
︙ | ︙ | |||
659 660 661 662 663 664 665 | } if (wmPtr->hints.flags & IconMaskHint) { Tk_FreeBitmap(winPtr->display, wmPtr->hints.icon_mask); } if (wmPtr->leaderName != NULL) { ckfree(wmPtr->leaderName); } | < < < | 696 697 698 699 700 701 702 703 704 705 706 707 708 709 | } if (wmPtr->hints.flags & IconMaskHint) { Tk_FreeBitmap(winPtr->display, wmPtr->hints.icon_mask); } if (wmPtr->leaderName != NULL) { ckfree(wmPtr->leaderName); } if (wmPtr->icon != NULL) { wmPtr2 = ((TkWindow *) wmPtr->icon)->wmInfoPtr; wmPtr2->iconFor = NULL; wmPtr2->withdrawn = 1; } if (wmPtr->iconFor != NULL) { wmPtr2 = ((TkWindow *) wmPtr->iconFor)->wmInfoPtr; |
︙ | ︙ | |||
1040 1041 1042 1043 1044 1045 1046 | } if (wmPtr->iconFor != NULL) { Tcl_AppendResult(interp, "can't deiconify ", argv[2], ": it is an icon for ", Tk_PathName(wmPtr->iconFor), (char *) NULL); return TCL_ERROR; } | | < < < < < < | 1074 1075 1076 1077 1078 1079 1080 1081 1082 1083 1084 1085 1086 1087 1088 | } if (wmPtr->iconFor != NULL) { Tcl_AppendResult(interp, "can't deiconify ", argv[2], ": it is an icon for ", Tk_PathName(wmPtr->iconFor), (char *) NULL); return TCL_ERROR; } (void) TkpWmSetState(winPtr, NormalState); } else if ((c == 'f') && (strncmp(argv[1], "focusmodel", length) == 0) && (length >= 2)) { if ((argc != 3) && (argc != 4)) { Tcl_AppendResult(interp, "wrong # arguments: must be \"", argv[0], " focusmodel window ?active|passive?\"", (char *) NULL); return TCL_ERROR; |
︙ | ︙ | |||
1283 1284 1285 1286 1287 1288 1289 | return TCL_ERROR; } if (Tk_Attributes((Tk_Window) winPtr)->override_redirect) { Tcl_AppendResult(interp, "can't iconify \"", winPtr->pathName, "\": override-redirect flag is set", (char *) NULL); return TCL_ERROR; } | | | < < < < < < < < < < | | | | < < | 1311 1312 1313 1314 1315 1316 1317 1318 1319 1320 1321 1322 1323 1324 1325 1326 1327 1328 1329 1330 1331 1332 1333 1334 1335 1336 1337 1338 1339 1340 | return TCL_ERROR; } if (Tk_Attributes((Tk_Window) winPtr)->override_redirect) { Tcl_AppendResult(interp, "can't iconify \"", winPtr->pathName, "\": override-redirect flag is set", (char *) NULL); return TCL_ERROR; } if (wmPtr->masterPtr != NULL) { Tcl_AppendResult(interp, "can't iconify \"", winPtr->pathName, "\": it is a transient", (char *) NULL); return TCL_ERROR; } if (wmPtr->iconFor != NULL) { Tcl_AppendResult(interp, "can't iconify ", argv[2], ": it is an icon for ", Tk_PathName(wmPtr->iconFor), (char *) NULL); return TCL_ERROR; } if (TkpWmSetState(winPtr, IconicState) == 0) { Tcl_SetResult(interp, "couldn't send iconify message to window manager", TCL_STATIC); return TCL_ERROR; } } else if ((c == 'i') && (strncmp(argv[1], "iconmask", length) == 0) && (length >= 5)) { Pixmap pixmap; if ((argc != 3) && (argc != 4)) { Tcl_AppendResult(interp, "wrong # arguments: must be \"", |
︙ | ︙ | |||
1755 1756 1757 1758 1759 1760 1761 | } else if ((c == 's') && (strncmp(argv[1], "stackorder", length) == 0) && (length >= 2)) { TkWindow **windows, **window_ptr; if ((argc != 3) && (argc != 5)) { Tcl_AppendResult(interp, "wrong # arguments: must be \"", argv[0], | | | 1771 1772 1773 1774 1775 1776 1777 1778 1779 1780 1781 1782 1783 1784 1785 | } else if ((c == 's') && (strncmp(argv[1], "stackorder", length) == 0) && (length >= 2)) { TkWindow **windows, **window_ptr; if ((argc != 3) && (argc != 5)) { Tcl_AppendResult(interp, "wrong # arguments: must be \"", argv[0], " stackorder window ?isabove|isbelow window?\"", (char *) NULL); return TCL_ERROR; } if (argc == 3) { windows = TkWmStackorderToplevel(winPtr); if (windows == NULL) { |
︙ | ︙ | |||
1860 1861 1862 1863 1864 1865 1866 | return TCL_ERROR; } c = argv[3][0]; length = strlen(argv[3]); if ((c == 'n') && (strncmp(argv[3], "normal", length) == 0)) { | | < < < < < < | | < < < < | < < < < < < | > | | < < < < < < < < | < | 1876 1877 1878 1879 1880 1881 1882 1883 1884 1885 1886 1887 1888 1889 1890 1891 1892 1893 1894 1895 1896 1897 1898 1899 1900 1901 1902 1903 1904 1905 1906 1907 1908 1909 1910 1911 1912 1913 1914 1915 1916 1917 1918 1919 | return TCL_ERROR; } c = argv[3][0]; length = strlen(argv[3]); if ((c == 'n') && (strncmp(argv[3], "normal", length) == 0)) { (void) TkpWmSetState(winPtr, NormalState); } else if ((c == 'i') && (strncmp(argv[3], "iconic", length) == 0)) { if (Tk_Attributes((Tk_Window) winPtr)->override_redirect) { Tcl_AppendResult(interp, "can't iconify \"", winPtr->pathName, "\": override-redirect flag is set", (char *) NULL); return TCL_ERROR; } if (wmPtr->masterPtr != NULL) { Tcl_AppendResult(interp, "can't iconify \"", winPtr->pathName, "\": it is a transient", (char *) NULL); return TCL_ERROR; } if (TkpWmSetState(winPtr, IconicState) == 0) { Tcl_SetResult(interp, "couldn't send iconify message to window manager", TCL_STATIC); return TCL_ERROR; } } else if ((c == 'w') && (strncmp(argv[3], "withdrawn", length) == 0)) { if (TkpWmSetState(winPtr, WithdrawnState) == 0) { Tcl_SetResult(interp, "couldn't send withdraw message to window manager", TCL_STATIC); return TCL_ERROR; } } else { Tcl_AppendResult(interp, "bad argument \"", argv[3], "\": must be normal, iconic or withdrawn", (char *) NULL); return TCL_ERROR; } } else { |
︙ | ︙ | |||
1967 1968 1969 1970 1971 1972 1973 | XFree((char *) textProp.value); } Tcl_DStringFree(&ds); } } } else if ((c == 't') && (strncmp(argv[1], "transient", length) == 0) && (length >= 3)) { | | | | | < < < < | | | | | | > > > > > > > > > | | > > > | > | > > > > > > | | > > > | < < < < < < | < | 1959 1960 1961 1962 1963 1964 1965 1966 1967 1968 1969 1970 1971 1972 1973 1974 1975 1976 1977 1978 1979 1980 1981 1982 1983 1984 1985 1986 1987 1988 1989 1990 1991 1992 1993 1994 1995 1996 1997 1998 1999 2000 2001 2002 2003 2004 2005 2006 2007 2008 2009 2010 2011 2012 2013 2014 2015 2016 2017 2018 2019 2020 2021 2022 2023 2024 2025 2026 2027 2028 2029 2030 2031 2032 2033 2034 2035 2036 2037 2038 2039 2040 2041 2042 2043 2044 2045 2046 2047 2048 2049 2050 2051 2052 2053 2054 2055 2056 2057 | XFree((char *) textProp.value); } Tcl_DStringFree(&ds); } } } else if ((c == 't') && (strncmp(argv[1], "transient", length) == 0) && (length >= 3)) { TkWindow *masterPtr = wmPtr->masterPtr; WmInfo *wmPtr2; if ((argc != 3) && (argc != 4)) { Tcl_AppendResult(interp, "wrong # arguments: must be \"", argv[0], " transient window ?master?\"", (char *) NULL); return TCL_ERROR; } if (argc == 3) { if (masterPtr != NULL) { Tcl_SetResult(interp, masterPtr->pathName, TCL_STATIC); } return TCL_OK; } if (argv[3][0] == '\0') { wmPtr->masterPtr = NULL; } else { masterPtr = (TkWindow *) Tk_NameToWindow(interp, argv[3], tkwin); if (masterPtr == NULL) { return TCL_ERROR; } while (!Tk_IsTopLevel(masterPtr)) { /* * Ensure that the master window is actually a Tk toplevel. */ masterPtr = masterPtr->parentPtr; } Tk_MakeWindowExist((Tk_Window) masterPtr); if (wmPtr->iconFor != NULL) { Tcl_AppendResult(interp, "can't make \"", argv[2], "\" a transient: it is an icon for ", Tk_PathName(wmPtr->iconFor), (char *) NULL); return TCL_ERROR; } wmPtr2 = masterPtr->wmInfoPtr; if (wmPtr2->wrapperPtr == NULL) { CreateWrapper(wmPtr2); } if (wmPtr2->iconFor != NULL) { Tcl_AppendResult(interp, "can't make \"", argv[3], "\" a master: it is an icon for ", Tk_PathName(wmPtr2->iconFor), (char *) NULL); return TCL_ERROR; } if (masterPtr == winPtr) { Tcl_AppendResult(interp, "can't make \"", Tk_PathName(winPtr), "\" its own master", (char *) NULL); return TCL_ERROR; } else if (masterPtr != wmPtr->masterPtr) { wmPtr->masterPtr = masterPtr; } } if (!(wmPtr->flags & WM_NEVER_MAPPED)) { Window xwin = (wmPtr->masterPtr == NULL) ? None : wmPtr->masterPtr->wmInfoPtr->wrapperPtr->window; XSetTransientForHint(winPtr->display, wmPtr->wrapperPtr->window, xwin); } } else if ((c == 'w') && (strncmp(argv[1], "withdraw", length) == 0) && (length >= 2)) { if (argc != 3) { Tcl_AppendResult(interp, "wrong # arguments: must be \"", argv[0], " withdraw window\"", (char *) NULL); return TCL_ERROR; } if (wmPtr->iconFor != NULL) { Tcl_AppendResult(interp, "can't withdraw ", argv[2], ": it is an icon for ", Tk_PathName(wmPtr->iconFor), (char *) NULL); return TCL_ERROR; } if (TkpWmSetState(winPtr, WithdrawnState) == 0) { Tcl_SetResult(interp, "couldn't send withdraw message to window manager", TCL_STATIC); return TCL_ERROR; } } else { Tcl_AppendResult(interp, "unknown or ambiguous option \"", argv[1], "\": must be aspect, client, command, deiconify, ", "focusmodel, frame, geometry, grid, group, iconbitmap, ", "iconify, iconmask, iconname, iconposition, ", "iconwindow, maxsize, minsize, overrideredirect, ", "positionfrom, protocol, resizable, sizefrom, stackorder, ", |
︙ | ︙ | |||
2339 2340 2341 2342 2343 2344 2345 | } } wmPtr->configWidth = configEventPtr->width; wmPtr->configHeight = configEventPtr->height; } if (dispPtr->wmTracing) { | | | | > | 2342 2343 2344 2345 2346 2347 2348 2349 2350 2351 2352 2353 2354 2355 2356 2357 2358 2359 2360 2361 | } } wmPtr->configWidth = configEventPtr->width; wmPtr->configHeight = configEventPtr->height; } if (dispPtr->wmTracing) { printf("ConfigureEvent: %s x = %d y = %d, width = %d, height = %d\n", winPtr->pathName, configEventPtr->x, configEventPtr->y, configEventPtr->width, configEventPtr->height); printf(" send_event = %d, serial = %ld (win %p, wrapper %p)\n", configEventPtr->send_event, configEventPtr->serial, winPtr, wrapperPtr); } wrapperPtr->changes.width = configEventPtr->width; wrapperPtr->changes.height = configEventPtr->height; wrapperPtr->changes.border_width = configEventPtr->border_width; wrapperPtr->changes.sibling = configEventPtr->above; wrapperPtr->changes.stack_mode = Above; |
︙ | ︙ | |||
2366 2367 2368 2369 2370 2371 2372 2373 2374 2375 2376 2377 2378 2379 | * information, but ICCCM doesn't require them to do this * under all conditions, and the information provided doesn't * include everything we need here. So, the code below * maintains a bunch of information about the parent window. * If the window hasn't been reparented, we pretend that * there is a parent shrink-wrapped around the window. */ if ((wmPtr->reparent == None) || !ComputeReparentGeometry(wmPtr)) { wmPtr->parentWidth = configEventPtr->width + 2*configEventPtr->border_width; wmPtr->parentHeight = configEventPtr->height + 2*configEventPtr->border_width; wrapperPtr->changes.x = wmPtr->x = configEventPtr->x; | > > > > > > | 2370 2371 2372 2373 2374 2375 2376 2377 2378 2379 2380 2381 2382 2383 2384 2385 2386 2387 2388 2389 | * information, but ICCCM doesn't require them to do this * under all conditions, and the information provided doesn't * include everything we need here. So, the code below * maintains a bunch of information about the parent window. * If the window hasn't been reparented, we pretend that * there is a parent shrink-wrapped around the window. */ if (dispPtr->wmTracing) { printf(" %s parent == %p, above %p\n", winPtr->pathName, (void *) wmPtr->reparent, (void *) configEventPtr->above); } if ((wmPtr->reparent == None) || !ComputeReparentGeometry(wmPtr)) { wmPtr->parentWidth = configEventPtr->width + 2*configEventPtr->border_width; wmPtr->parentHeight = configEventPtr->height + 2*configEventPtr->border_width; wrapperPtr->changes.x = wmPtr->x = configEventPtr->x; |
︙ | ︙ | |||
2480 2481 2482 2483 2484 2485 2486 | numItems); } XFree((char *) virtualRootPtr); } Tk_DeleteErrorHandler(handler); if (dispPtr->wmTracing) { | | | | 2490 2491 2492 2493 2494 2495 2496 2497 2498 2499 2500 2501 2502 2503 2504 2505 | numItems); } XFree((char *) virtualRootPtr); } Tk_DeleteErrorHandler(handler); if (dispPtr->wmTracing) { printf("ReparentEvent: %s (%p) reparented to 0x%x, vRoot = 0x%x\n", wmPtr->winPtr->pathName, wmPtr->winPtr, (unsigned int) reparentEventPtr->parent, (unsigned int) vRoot); } /* * Fetch correct geometry information for the new virtual root. */ |
︙ | ︙ | |||
2523 2524 2525 2526 2527 2528 2529 | * ReparentNotify event coming later). */ handler = Tk_CreateErrorHandler(wrapperPtr->display, -1, -1, -1, (Tk_ErrorProc *) NULL, (ClientData) NULL); wmPtr->reparent = reparentEventPtr->parent; while (1) { | | | | 2533 2534 2535 2536 2537 2538 2539 2540 2541 2542 2543 2544 2545 2546 2547 2548 | * ReparentNotify event coming later). */ handler = Tk_CreateErrorHandler(wrapperPtr->display, -1, -1, -1, (Tk_ErrorProc *) NULL, (ClientData) NULL); wmPtr->reparent = reparentEventPtr->parent; while (1) { if (XQueryTree(wrapperPtr->display, wmPtr->reparent, &dummy2, &ancestor, &children, &dummy) == 0) { Tk_DeleteErrorHandler(handler); goto noReparent; } XFree((char *) children); if ((ancestor == vRoot) || (ancestor == RootWindow(wrapperPtr->display, wrapperPtr->screenNum))) { |
︙ | ︙ | |||
2631 2632 2633 2634 2635 2636 2637 | * * 3. Ignore size changes coming from the window system if we're * about to change the size ourselves but haven't seen the event for * it yet: our size change is supposed to take priority. */ if (!(wmPtr->flags & WM_MOVE_PENDING) | | | | | | | > | | 2641 2642 2643 2644 2645 2646 2647 2648 2649 2650 2651 2652 2653 2654 2655 2656 2657 2658 2659 2660 2661 2662 2663 2664 2665 2666 2667 2668 2669 2670 2671 2672 2673 | * * 3. Ignore size changes coming from the window system if we're * about to change the size ourselves but haven't seen the event for * it yet: our size change is supposed to take priority. */ if (!(wmPtr->flags & WM_MOVE_PENDING) && ((wrapperPtr->changes.x != (x + wmPtr->xInParent)) || (wrapperPtr->changes.y != (y + wmPtr->yInParent)))) { wmPtr->x = x; if (wmPtr->flags & WM_NEGATIVE_X) { wmPtr->x = wmPtr->vRootWidth - (wmPtr->x + wmPtr->parentWidth); } wmPtr->y = y; if (wmPtr->flags & WM_NEGATIVE_Y) { wmPtr->y = wmPtr->vRootHeight - (wmPtr->y + wmPtr->parentHeight); } } wrapperPtr->changes.x = x + wmPtr->xInParent; wrapperPtr->changes.y = y + wmPtr->yInParent; if (dispPtr->wmTracing) { printf("wrapperPtr %p coords %d,%d\n", wrapperPtr, wrapperPtr->changes.x, wrapperPtr->changes.y); printf(" wmPtr %p coords %d,%d, offsets %d %d\n", wmPtr, wmPtr->x, wmPtr->y, wmPtr->xInParent, wmPtr->yInParent); } return 1; } /* *---------------------------------------------------------------------- * |
︙ | ︙ | |||
2984 2985 2986 2987 2988 2989 2990 | */ return; } wmPtr->configWidth = width; wmPtr->configHeight = height; if (winPtr->dispPtr->wmTracing) { | | > | 2995 2996 2997 2998 2999 3000 3001 3002 3003 3004 3005 3006 3007 3008 3009 3010 | */ return; } wmPtr->configWidth = width; wmPtr->configHeight = height; if (winPtr->dispPtr->wmTracing) { printf("UpdateGeometryInfo resizing %p to %d x %d\n", (void *)wmPtr->wrapperPtr->window, width, height); } XResizeWindow(winPtr->display, wmPtr->wrapperPtr->window, (unsigned) width, (unsigned) height); } else if ((wmPtr->menubar != NULL) && ((Tk_Width(wmPtr->menubar) != wmPtr->wrapperPtr->changes.width) || (Tk_Height(wmPtr->menubar) != wmPtr->menuHeight))) { /* |
︙ | ︙ | |||
3380 3381 3382 3383 3384 3385 3386 | printf("WaitForMapNotify giving up on %s\n", winPtr->pathName); } break; } } wmPtr->flags &= ~WM_MOVE_PENDING; if (winPtr->dispPtr->wmTracing) { | | > | 3392 3393 3394 3395 3396 3397 3398 3399 3400 3401 3402 3403 3404 3405 3406 3407 | printf("WaitForMapNotify giving up on %s\n", winPtr->pathName); } break; } } wmPtr->flags &= ~WM_MOVE_PENDING; if (winPtr->dispPtr->wmTracing) { printf("WaitForMapNotify finished with %s (winPtr %p, wmPtr %p)\n", winPtr->pathName, winPtr, wmPtr); } } /* *-------------------------------------------------------------- * * UpdateHints -- |
︙ | ︙ | |||
4194 4195 4196 4197 4198 4199 4200 | Tcl_HashTable *table; /* Maps X id to TkWindow */ { TkWindow *childPtr; Tcl_HashEntry *hPtr; Window wrapper; int newEntry; | | > | 4207 4208 4209 4210 4211 4212 4213 4214 4215 4216 4217 4218 4219 4220 4221 4222 | Tcl_HashTable *table; /* Maps X id to TkWindow */ { TkWindow *childPtr; Tcl_HashEntry *hPtr; Window wrapper; int newEntry; if (Tk_IsMapped(winPtr) && Tk_IsTopLevel(winPtr) && !Tk_IsEmbedded(winPtr)) { wrapper = (winPtr->wmInfoPtr->reparent != None) ? winPtr->wmInfoPtr->reparent : winPtr->wmInfoPtr->wrapperPtr->window; hPtr = Tcl_CreateHashEntry(table, (char *) wrapper, &newEntry); Tcl_SetHashValue(hPtr, winPtr); |
︙ | ︙ | |||
4285 4286 4287 4288 4289 4290 4291 4292 4293 4294 4295 4296 4297 4298 | childWinPtr = (TkWindow *) Tcl_GetHashValue(hPtr); *window_ptr++ = childWinPtr; } } if ((window_ptr - windows) != table.numEntries) panic("num matched toplevel windows does not equal num children"); *window_ptr = NULL; } done: Tcl_DeleteHashTable(&table); return windows; } | > > > | 4299 4300 4301 4302 4303 4304 4305 4306 4307 4308 4309 4310 4311 4312 4313 4314 4315 | childWinPtr = (TkWindow *) Tcl_GetHashValue(hPtr); *window_ptr++ = childWinPtr; } } if ((window_ptr - windows) != table.numEntries) panic("num matched toplevel windows does not equal num children"); *window_ptr = NULL; if (numChildren) { XFree((char *) children); } } done: Tcl_DeleteHashTable(&table); return windows; } |
︙ | ︙ | |||
4332 4333 4334 4335 4336 4337 4338 4339 4340 4341 4342 4343 4344 4345 | int i; int desiredIndex = 0; /* Initialized to stop gcc warnings. */ int ourIndex = 0; /* Initialized to stop gcc warnings. */ unsigned long serial; Tk_ErrorHandler handler; TkWindow *wrapperPtr; changes.stack_mode = aboveBelow; changes.sibling = None; mask = CWStackMode; if (winPtr->window == None) { Tk_MakeWindowExist((Tk_Window) winPtr); } if (winPtr->wmInfoPtr->flags & WM_NEVER_MAPPED) { | > | 4349 4350 4351 4352 4353 4354 4355 4356 4357 4358 4359 4360 4361 4362 4363 | int i; int desiredIndex = 0; /* Initialized to stop gcc warnings. */ int ourIndex = 0; /* Initialized to stop gcc warnings. */ unsigned long serial; Tk_ErrorHandler handler; TkWindow *wrapperPtr; memset(&changes, 0, sizeof(XWindowChanges)); changes.stack_mode = aboveBelow; changes.sibling = None; mask = CWStackMode; if (winPtr->window == None) { Tk_MakeWindowExist((Tk_Window) winPtr); } if (winPtr->wmInfoPtr->flags & WM_NEVER_MAPPED) { |
︙ | ︙ | |||
4478 4479 4480 4481 4482 4483 4484 | * Wait for the reconfiguration to complete. If we don't wait, then * the window may not restack for a while and the application might * observe it before it has restacked. Waiting for the reconfiguration * is tricky if winPtr has been reparented, since the window getting * the event isn't one that Tk owns. */ | < | < < < < < < < < < | < < < | 4496 4497 4498 4499 4500 4501 4502 4503 4504 4505 4506 4507 4508 4509 4510 4511 4512 | * Wait for the reconfiguration to complete. If we don't wait, then * the window may not restack for a while and the application might * observe it before it has restacked. Waiting for the reconfiguration * is tricky if winPtr has been reparented, since the window getting * the event isn't one that Tk owns. */ WaitForConfigureNotify(winPtr, serial); if (window != wrapperPtr->window) { /* * Ignore errors that occur when we are de-selecting events on * window, since it's possible that the window doesn't exist * anymore (see comment above previous call to XSelectInput). */ handler = Tk_CreateErrorHandler(winPtr->display, -1, -1, -1, |
︙ | ︙ | |||
4949 4950 4951 4952 4953 4954 4955 | hPtr = Tcl_CreateHashEntry(&wrapperPtr->dispPtr->winTable, (char *) wrapperPtr->window, &new); Tcl_SetHashValue(hPtr, wrapperPtr); wrapperPtr->mainPtr = winPtr->mainPtr; wrapperPtr->mainPtr->refCount++; wrapperPtr->dirtyAtts = 0; wrapperPtr->dirtyChanges = 0; | < < < | 4954 4955 4956 4957 4958 4959 4960 4961 4962 4963 4964 4965 4966 4967 | hPtr = Tcl_CreateHashEntry(&wrapperPtr->dispPtr->winTable, (char *) wrapperPtr->window, &new); Tcl_SetHashValue(hPtr, wrapperPtr); wrapperPtr->mainPtr = winPtr->mainPtr; wrapperPtr->mainPtr->refCount++; wrapperPtr->dirtyAtts = 0; wrapperPtr->dirtyChanges = 0; wrapperPtr->wmInfoPtr = wmPtr; /* * Reparent the toplevel window inside the wrapper. */ XReparentWindow(wrapperPtr->display, winPtr->window, wrapperPtr->window, |
︙ | ︙ | |||
5263 5264 5265 5266 5267 5268 5269 | XSetCommand(winPtr->display, wmPtr->wrapperPtr->window, cmdArgv, wmPtr->cmdArgc); Tcl_DStringFree(&cmds); ckfree((char *) cmdArgv); ckfree((char *) offsets); } | > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 5265 5266 5267 5268 5269 5270 5271 5272 5273 5274 5275 5276 5277 5278 5279 5280 5281 5282 5283 5284 5285 5286 5287 5288 5289 5290 5291 5292 5293 5294 5295 5296 5297 5298 5299 5300 5301 5302 5303 5304 5305 5306 5307 5308 5309 5310 5311 5312 5313 5314 5315 5316 5317 5318 5319 5320 5321 5322 5323 5324 5325 5326 5327 5328 5329 5330 5331 5332 5333 5334 5335 5336 | XSetCommand(winPtr->display, wmPtr->wrapperPtr->window, cmdArgv, wmPtr->cmdArgc); Tcl_DStringFree(&cmds); ckfree((char *) cmdArgv); ckfree((char *) offsets); } /* *---------------------------------------------------------------------- * * TkpWmSetState -- * * Sets the window manager state for the wrapper window of a * given toplevel window. * * Results: * 0 on error, 1 otherwise * * Side effects: * May minimize, restore, or withdraw a window. * *---------------------------------------------------------------------- */ int TkpWmSetState(winPtr, state) TkWindow *winPtr; /* Toplevel window to operate on. */ int state; /* One of IconicState, NormalState, * or WithdrawnState. */ { WmInfo *wmPtr = winPtr->wmInfoPtr; if (state == WithdrawnState) { wmPtr->hints.initial_state = WithdrawnState; wmPtr->withdrawn = 1; if (wmPtr->flags & WM_NEVER_MAPPED) { return 1; } if (XWithdrawWindow(winPtr->display, wmPtr->wrapperPtr->window, winPtr->screenNum) == 0) { return 0; } WaitForMapNotify(winPtr, 0); } else if (state == NormalState) { wmPtr->hints.initial_state = NormalState; wmPtr->withdrawn = 0; if (wmPtr->flags & WM_NEVER_MAPPED) { return 1; } UpdateHints(winPtr); Tk_MapWindow((Tk_Window) winPtr); } else if (state == IconicState) { wmPtr->hints.initial_state = IconicState; if (wmPtr->flags & WM_NEVER_MAPPED) { return 1; } if (wmPtr->withdrawn) { UpdateHints(winPtr); Tk_MapWindow((Tk_Window) winPtr); wmPtr->withdrawn = 0; } else { if (XIconifyWindow(winPtr->display, wmPtr->wrapperPtr->window, winPtr->screenNum) == 0) { return 0; } WaitForMapNotify(winPtr, 0); } } return 1; } |
Changes to unix/tkUnixXId.c.
︙ | ︙ | |||
13 14 15 16 17 18 19 | * * Copyright (c) 1993 The Regents of the University of California. * Copyright (c) 1994-1997 Sun Microsystems, Inc. * * See the file "license.terms" for information on usage and redistribution * of this file, and for a DISCLAIMER OF ALL WARRANTIES. * | | | 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 | * * Copyright (c) 1993 The Regents of the University of California. * Copyright (c) 1994-1997 Sun Microsystems, Inc. * * See the file "license.terms" for information on usage and redistribution * of this file, and for a DISCLAIMER OF ALL WARRANTIES. * * RCS: @(#) $Id: tkUnixXId.c,v 1.6.2.1 2002/06/10 05:38:27 wolfsuit Exp $ */ /* * The definition below is needed on some systems so that we can access * the resource_alloc field of Display structures in order to replace * the resource allocator. */ |
︙ | ︙ | |||
80 81 82 83 84 85 86 | * display. */ { dispPtr->idStackPtr = NULL; dispPtr->defaultAllocProc = (XID (*) _ANSI_ARGS_((Display *display))) dispPtr->display->resource_alloc; dispPtr->display->resource_alloc = AllocXId; dispPtr->windowStackPtr = NULL; | | > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 | * display. */ { dispPtr->idStackPtr = NULL; dispPtr->defaultAllocProc = (XID (*) _ANSI_ARGS_((Display *display))) dispPtr->display->resource_alloc; dispPtr->display->resource_alloc = AllocXId; dispPtr->windowStackPtr = NULL; dispPtr->idCleanupScheduled = (Tcl_TimerToken) 0; } /* *---------------------------------------------------------------------- * * TkFreeXId -- * * This procedure is called to free resources for the id allocator * for a given display. * * Results: * None. * * Side effects: * Frees the id and window stack pools. * *---------------------------------------------------------------------- */ void TkFreeXId(dispPtr) TkDisplay *dispPtr; /* Tk's information about the * display. */ { TkIdStack *stackPtr, *freePtr; if (dispPtr->idCleanupScheduled) { Tcl_DeleteTimerHandler(dispPtr->idCleanupScheduled); } for (stackPtr = dispPtr->idStackPtr; stackPtr != NULL; ) { freePtr = stackPtr; stackPtr = stackPtr->nextPtr; ckfree((char *) freePtr); } dispPtr->idStackPtr = NULL; for (stackPtr = dispPtr->windowStackPtr; stackPtr != NULL; ) { freePtr = stackPtr; stackPtr = stackPtr->nextPtr; ckfree((char *) freePtr); } dispPtr->windowStackPtr = NULL; } /* *---------------------------------------------------------------------- * * AllocXId -- * |
︙ | ︙ | |||
289 290 291 292 293 294 295 | /* * Schedule a call to WindowIdCleanup if one isn't already * scheduled. */ if (!dispPtr->idCleanupScheduled) { | | | | 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 | /* * Schedule a call to WindowIdCleanup if one isn't already * scheduled. */ if (!dispPtr->idCleanupScheduled) { dispPtr->idCleanupScheduled = Tcl_CreateTimerHandler(100, WindowIdCleanup, (ClientData) dispPtr); } } /* *---------------------------------------------------------------------- * * WindowIdCleanup -- |
︙ | ︙ | |||
324 325 326 327 328 329 330 | { TkDisplay *dispPtr = (TkDisplay *) clientData; int anyEvents, delta; Tk_RestrictProc *oldProc; ClientData oldData; static Tcl_Time timeout = {0, 0}; | | | 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 | { TkDisplay *dispPtr = (TkDisplay *) clientData; int anyEvents, delta; Tk_RestrictProc *oldProc; ClientData oldData; static Tcl_Time timeout = {0, 0}; dispPtr->idCleanupScheduled = (Tcl_TimerToken) 0; /* * See if it's safe to recycle the window ids. It's safe if: * (a) no deletions are in progress. * (b) the server has seen all of the requests up to the last * XDestroyWindow request. * (c) there are no events in the event queue; the only way to |
︙ | ︙ | |||
371 372 373 374 375 376 377 | return; /* * It's still not safe to free up the ids. Try again a bit later. */ tryAgain: | | | | 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 | return; /* * It's still not safe to free up the ids. Try again a bit later. */ tryAgain: dispPtr->idCleanupScheduled = Tcl_CreateTimerHandler(500, WindowIdCleanup, (ClientData) dispPtr); } /* *---------------------------------------------------------------------- * * WindowIdCleanup2 -- * |
︙ | ︙ |
Changes to win/Makefile.in.
1 2 3 4 5 6 | # This file is a Makefile for Tk. If it has the name "Makefile.in" # then it is a template for a Makefile; to generate the actual Makefile, # run "./configure", which is a configuration script generated by the # "autoconf" program (constructs like "@foo@" will get replaced in the # actual Makefile. # | | | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 | # This file is a Makefile for Tk. If it has the name "Makefile.in" # then it is a template for a Makefile; to generate the actual Makefile, # run "./configure", which is a configuration script generated by the # "autoconf" program (constructs like "@foo@" will get replaced in the # actual Makefile. # # RCS: @(#) $Id: Makefile.in,v 1.44.2.2 2002/06/10 05:38:27 wolfsuit Exp $ TCLVERSION = @TCL_VERSION@ VERSION = @TK_VERSION@ #---------------------------------------------------------------- # Things you can change to personalize the Makefile for your own # site (you can make these changes in either Makefile.in or |
︙ | ︙ | |||
315 316 317 318 319 320 321 322 323 324 325 326 327 328 | tkListbox.$(OBJEXT) \ tkMacWinMenu.$(OBJEXT) \ tkMain.$(OBJEXT) \ tkMenu.$(OBJEXT) \ tkMenubutton.$(OBJEXT) \ tkMenuDraw.$(OBJEXT) \ tkMessage.$(OBJEXT) \ tkObj.$(OBJEXT) \ tkOldConfig.$(OBJEXT) \ tkOption.$(OBJEXT) \ tkPack.$(OBJEXT) \ tkPlace.$(OBJEXT) \ tkPointer.$(OBJEXT) \ tkRectOval.$(OBJEXT) \ | > | 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 | tkListbox.$(OBJEXT) \ tkMacWinMenu.$(OBJEXT) \ tkMain.$(OBJEXT) \ tkMenu.$(OBJEXT) \ tkMenubutton.$(OBJEXT) \ tkMenuDraw.$(OBJEXT) \ tkMessage.$(OBJEXT) \ tkPanedWindow.$(OBJEXT) \ tkObj.$(OBJEXT) \ tkOldConfig.$(OBJEXT) \ tkOption.$(OBJEXT) \ tkPack.$(OBJEXT) \ tkPlace.$(OBJEXT) \ tkPointer.$(OBJEXT) \ tkRectOval.$(OBJEXT) \ |
︙ | ︙ | |||
387 388 389 390 391 392 393 | test: binaries $(TKTEST) @TCL_LIBRARY="$(TCL_SRC_DIR_NATIVE)/library"; export TCL_LIBRARY; \ TK_LIBRARY="$(ROOT_DIR_NATIVE)/library"; export TK_LIBRARY; \ PATH="$(PATH):$(TCL_BIN_DIR)"; export PATH; \ ./$(TKTEST) "$(ROOT_DIR_NATIVE)/tests/all.tcl" $(TESTFLAGS) \ | ./$(CAT32) | | | | | | 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 | test: binaries $(TKTEST) @TCL_LIBRARY="$(TCL_SRC_DIR_NATIVE)/library"; export TCL_LIBRARY; \ TK_LIBRARY="$(ROOT_DIR_NATIVE)/library"; export TK_LIBRARY; \ PATH="$(PATH):$(TCL_BIN_DIR)"; export PATH; \ ./$(TKTEST) "$(ROOT_DIR_NATIVE)/tests/all.tcl" $(TESTFLAGS) \ | ./$(CAT32) runtest: binaries $(TKTEST) @TCL_LIBRARY="$(TCL_SRC_DIR_NATIVE)/library"; export TCL_LIBRARY; \ TK_LIBRARY="$(ROOT_DIR_NATIVE)/library"; export TK_LIBRARY; \ PATH="$(PATH):$(TCL_BIN_DIR)"; export PATH; \ ./$(TKTEST) $(TESTFLAGS) $(SCRIPT) # This target can be used to run wish from the build directory # via `make shell` or `make shell SCRIPT=foo.tcl` shell: binaries @TCL_LIBRARY="$(TCL_SRC_DIR_NATIVE)/library"; export TCL_LIBRARY; \ TK_LIBRARY="$(ROOT_DIR_NATIVE)/library"; export TK_LIBRARY; \ PATH="$(PATH):$(TCL_BIN_DIR)"; export PATH; \ ./$(WISH) $(SCRIPT) # This target can be used to run wish inside either gdb or insight gdb: binaries @echo "set env TCL_LIBRARY=$(TCL_SRC_DIR_NATIVE)/library" > gdb.run @echo "set env TK_LIBRARY=$(ROOT_DIR_NATIVE)/library" >> gdb.run PATH="$(PATH):$(TCL_BIN_DIR)"; export PATH; \ gdb ./$(WISH) --command=gdb.run rm gdb.run install: all install-binaries install-libraries install-doc install-demos |
︙ | ︙ |
Changes to win/README.
1 2 3 4 | Tk 8.4 for Windows Originally by Scott Stanton while at Sun Microsystems Labs | | | | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | Tk 8.4 for Windows Originally by Scott Stanton while at Sun Microsystems Labs RCS: @(#) $Id: README,v 1.15.2.1 2002/06/10 05:38:27 wolfsuit Exp $ This is the directory where you configure and compile the Windows version of Tk. This directory also contains source files for Tk that are specific to Microsoft Windows. The rest of this file contains information specific to the Windows version of Tk. Please see the README and win/README files that come with the associated Tcl release for an extensive set of pointers to documentation. You will need to obtain and compile the Tcl release before using the Tk source distrition. If you install the Tk sources next to the Tcl sources, then the Tk Makefiles (e.g., makefile.vc for VC++) will properly locate the necessary Tcl files. Otherwise you may need to edit makefile.vc and adjust the path to Tcl accordingly. Information about compiling for windows is maintained at: http://www.tcl.tk/doc/howto/compile.html |
Changes to win/buildall.vc.bat.
1 | @echo off | | > > > > > > > > > > | | > > | > | > | > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 | @echo off :: This is an example batchfile for building everything. Please :: edit this (or make your own) for your needs and wants using :: the instructions for calling makefile.vc found in makefile.vc :: :: RCS: @(#) $Id: buildall.vc.bat,v 1.2.2.2 2002/06/10 05:38:27 wolfsuit Exp $ echo Sit back and have a cup of coffee while this grinds through ;) echo You asked for *everything*, remember? echo. if "%MSVCDir%" == "" call C:\dev\devstudio60\vc98\bin\vcvars32.bat set INSTALLDIR=C:\progra~1\tcl set TCLDIR=..\..\tcl_head nmake -nologo -f makefile.vc release winhelp OPTS=none if errorlevel 1 goto error nmake -nologo -f makefile.vc release OPTS=static,linkexten if errorlevel 1 goto error nmake -nologo -f makefile.vc core OPTS=static,msvcrt if errorlevel 1 goto error nmake -nologo -f makefile.vc core OPTS=static,threads if errorlevel 1 goto error nmake -nologo -f makefile.vc core OPTS=static,msvcrt,threads if errorlevel 1 goto error nmake -nologo -f makefile.vc release OPTS=threads if errorlevel 1 goto error goto end :error echo *** BOOM! *** :end echo done! pause |
Changes to win/configure.
︙ | ︙ | |||
531 532 533 534 535 536 537 | fi TK_VERSION=8.4 TK_MAJOR_VERSION=8 TK_MINOR_VERSION=4 | | | 531 532 533 534 535 536 537 538 539 540 541 542 543 544 545 | fi TK_VERSION=8.4 TK_MAJOR_VERSION=8 TK_MINOR_VERSION=4 TK_PATCH_LEVEL="a5" VER=$TK_MAJOR_VERSION$TK_MINOR_VERSION #------------------------------------------------------------------------ # Handle the --prefix=... option #------------------------------------------------------------------------ if test "${prefix}" = "NONE"; then |
︙ | ︙ | |||
1335 1336 1337 1338 1339 1340 1341 | MAKE_LIB="\${STLIB_LD} -out:\$@" POST_MAKE_LIB= MAKE_EXE="\${CC} -Fe\$@" LIBPREFIX="" EXTRA_CFLAGS="-YX" CFLAGS_WARNING="-W3" | | | 1335 1336 1337 1338 1339 1340 1341 1342 1343 1344 1345 1346 1347 1348 1349 | MAKE_LIB="\${STLIB_LD} -out:\$@" POST_MAKE_LIB= MAKE_EXE="\${CC} -Fe\$@" LIBPREFIX="" EXTRA_CFLAGS="-YX" CFLAGS_WARNING="-W3" LDFLAGS_DEBUG="-debug:full -debugtype:both" LDFLAGS_OPTIMIZE="-release" # Specify the CC output file names based on the target name CC_OBJNAME="-Fo\$@" CC_EXENAME="-Fe\"\$(shell \$(CYGPATH) '\$@')\"" # Specify linker flags depending on the type of app being |
︙ | ︙ |
Changes to win/configure.in.
1 2 3 4 5 | #! /bin/bash -norc # This file is an input file used by the GNU "autoconf" program to # generate the file "configure", which is run during Tk installation # to configure the system for the local environment. # | | | | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | #! /bin/bash -norc # This file is an input file used by the GNU "autoconf" program to # generate the file "configure", which is run during Tk installation # to configure the system for the local environment. # # RCS: @(#) $Id: configure.in,v 1.36.2.2 2002/06/10 05:38:27 wolfsuit Exp $ AC_INIT(../generic/tk.h) TK_VERSION=8.4 TK_MAJOR_VERSION=8 TK_MINOR_VERSION=4 TK_PATCH_LEVEL="a5" VER=$TK_MAJOR_VERSION$TK_MINOR_VERSION #------------------------------------------------------------------------ # Handle the --prefix=... option #------------------------------------------------------------------------ if test "${prefix}" = "NONE"; then |
︙ | ︙ |
Changes to win/makefile.vc.
|
| > | > > | > > | > > > > | < < | < | | < > > > > | > < | < > > | < > > > > > > > > > > > > > > > > > > > > > | < > | < > > > > | < < | > > | < > > > > | > > > > > | > > > | > | < < > > > > > | < < > > > | < > > > > | > > > > > > > | > | | < < | < > > > > | | > > | < < < < > > > > > > | > > > | > > > > > | < < < > > > | | > > > > < | > | > < > > > > > > > > | < > > > > > > > > > > > > | > > > > | | < | | < < > | | > > | > > | > | | | > > | | > > > | > > > > | | | | | | | | | | | | | | | | | > > | | | | > | > > > > > | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | > | | | | | | | | | | | | | | | | | | | | | | | | > > > | > | > | > | > | > > > > | | > < > | | | | < | | < < | > > | | > | > > > > > > > > > | > > > < | | | | | > < > | < < | > > < | < | | | > > | | > | > < | < > | | < < > > > | | | | > > > | > > > | < > | > | > > | > | | | | > | > > > > | > > > | > | > > > > > | | | | < < > > | | < | < < < | > > > | < < > > > | | | < > | | < < < < < < < < | | | | < < < | > | | | < < < | > | < > | | | | < < | | > > | | | | | | < > | > | | | | > | > | > > > > > > > > > > | < > > > > | > > > > > | > > > > | < > > > | < > | | > > > > > > > > > > > > | > > | > > > > > > > > > > > > | < > > | > > > > > > > > > > > > > > > > | < < | < < | > > > > > > > | > > > | > > > > > > | | > > | | > | > | < > > > < > | | | | | | | | | < < < > | > | > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557 558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 574 575 576 577 578 579 580 581 582 583 584 585 586 587 588 589 590 591 592 593 594 595 596 597 598 599 600 601 602 603 604 605 606 607 608 609 610 611 612 613 614 615 616 617 618 619 620 621 622 623 624 625 626 627 628 629 630 631 632 633 634 635 636 637 638 639 640 641 642 643 644 645 646 647 648 649 650 651 652 653 654 655 656 657 658 659 660 661 662 663 664 665 666 667 668 669 670 671 672 673 674 675 676 677 678 679 680 681 682 683 684 685 686 687 688 689 690 691 692 693 694 695 696 697 698 699 700 701 702 703 704 705 706 707 708 709 710 711 712 713 714 715 716 717 718 719 720 721 722 723 724 725 726 727 728 729 730 731 732 733 734 735 736 737 738 739 740 741 742 743 744 745 746 747 748 749 750 751 752 753 754 755 756 757 758 | #------------------------------------------------------------------------------ # makefile.vc -- # # Microsoft Visual C++ makefile for use with nmake.exe v1.62+ (VC++ 5.0+) # # See the file "license.terms" for information on usage and redistribution # of this file, and for a DISCLAIMER OF ALL WARRANTIES. # # Copyright (c) 1995-1996 Sun Microsystems, Inc. # Copyright (c) 1998-2000 Ajuba Solutions. # Copyright (c) 2001 ActiveState Corporation. # Copyright (c) 2001-2002 David Gravereaux. # #------------------------------------------------------------------------------ # RCS: @(#) $Id: makefile.vc,v 1.42.2.1 2002/06/10 05:38:27 wolfsuit Exp $ #------------------------------------------------------------------------------ !if "$(MSVCDIR)" == "" MSG = ^ You'll need to run vcvars32.bat from Developer Studio, first, to setup^ the environment. Jump to this line to read the new instructions. !error $(MSG) !endif #------------------------------------------------------------------------------ # HOW TO USE this makefile: # # 1) It is now necessary to have MSVCDir set in the environment. This is used # as a check to see if vcvars32.bat had been run prior to running nmake or # during the install of Microsoft Developer Studio, MSVCDir had been set # globally and the PATH adjusted. Either way is valid. # # You'll need to run vcvars32.bat contained in the MsDev's vc(98)/bin # directory to setup the proper environment, if needed, for your current # setup. This is a needed bootstrap requirement and allows the swapping of # different environments to be easier. # # 2) To use the Platform SDK (not expressly needed), run setenv.bat after # vcvars32.bat according to the instructions for it. This can also turn on # the 64-bit compiler, if your SDK has it. # # 3) Targets are: # release -- builds the core, the shell. (default) # core -- Only builds the core. # all -- builds everything. # test -- builds and runs the test suite. # tktest -- just builds the binaries for the test suite. # install -- installs the built binaries and libraries to $(INSTALLDIR) # as the root of the install tree. # console-wish -- builds a console version of wish. # clean -- removes the contents of $(TMP_DIR) # hose -- removes the contents of $(TMP_DIR) and $(OUT_DIR) # genstubs -- rebuilds the Stubs table and support files (dev only). # depend -- Generates an accurate set of source dependancies for this # makefile. Helpful to avoid problems when the sources are # refreshed and you rebuild, but can "overbuild" when common # headers like tkInt.h just get small changes. # winhelp -- builds the windows .hlp file for Tcl from the troff man # files. # # 4) Macros usable on the commandline: # TCLDIR=<path> # Sets the location for where to find the Tcl headers and # libraries. The install point is assumed when not specified. # Tk does need the source directory, though. Tk comes very close # to not needing the sources, but does, in fact, require them. # # INSTALLDIR=<path> # Sets where to install Tcl from the built binaries. # C:\Progra~1\Tcl is assumed when not specified. # # OPTS=static,msvcrt,linkexten,threads,symbols,profile,none # Sets special options for the core. The default is for none. # Any combination of the above may be used (comma separated). # 'none' will over-ride everything to nothing. # # static = Builds a static library of the core instead of a # dll. The shell will be static (and large), as well. # msvcrt = Effects the static option only to switch it from # using libcmt(d) as the C runtime [by default] to # msvcrt(d). This is useful for static embedding # support. # linkexten = Affects the static option only to switch wishXX.exe # to have the dde and reg extension linked inside it. # threads = Turns on full multithreading support. # symbols = Adds symbols for step debugging. # profile = Adds profiling hooks. Map file is assumed. # # STATS=memdbg,compdbg,none # Sets optional memory and bytecode compiler debugging code added # to the core. The default is for none. Any combination of the # above may be used (comma separated). 'none' will over-ride # everything to nothing. # # memdbg = Enables the debugging memory allocator. # compdbg = Enables byte compilation logging. # # MACHINE=(IX86|IA64|ALPHA) # Set the machine type used for the compiler, linker, and # resource compiler. This hook is needed to tell the tools # when alternate platforms are requested. IX86 is the default # when not specified. # # TMP_DIR=<path> # OUT_DIR=<path> # Hooks to allow the intermediate and output directories to be # changed. $(OUT_DIR) is assumed to be # $(BINROOT)\(Release|Debug) based on if symbols are requested. # $(TMP_DIR) will de $(OUT_DIR)\<buildtype> by default. # # TESTPAT=<file> # Reads the tests requested to be run from this file. # # 5) Examples: # # Basic syntax of calling nmake looks like this: # nmake [-nologo] -f makefile.vc [target|macrodef [target|macrodef] [...]] # # Standard (no frills) # c:\tk_src\win\>c:\progra~1\micros~1\vc98\bin\vcvars32.bat # Setting environment for using Microsoft Visual C++ tools. # c:\tk_src\win\>nmake -f makefile.vc release # c:\tk_src\win\>nmake -f makefile.vc install INSTALLDIR=c:\progra~1\tcl # # Building for Win64 # c:\tk_src\win\>c:\progra~1\micros~1\vc98\bin\vcvars32.bat # Setting environment for using Microsoft Visual C++ tools. # c:\tk_src\win\>c:\progra~1\platfo~1\setenv.bat /pre64 /RETAIL # Targeting Windows pre64 RETAIL # c:\tk_src\win\>nmake -f makefile.vc MACHINE=IA64 # #------------------------------------------------------------------------------ #============================================================================== ############################################################################### # //==================================================================\\ # >>[ -> Do not modify below this line. <- ]<< # >>[ Please, use the commandline macros to modify how Tcl is built. ]<< # >>[ If you need more features, send us a patch for more macros. ]<< # \\==================================================================// ############################################################################### #============================================================================== #------------------------------------------------------------------------------ !if !exist("makefile.vc") MSG = ^ You must run this makefile only from the directory it is in.^ Please `cd` to its location first. !error $(MSG) !endif PROJECT = tk !include "rules.vc" _INSTALLDIR = $(INSTALLDIR:/=\) !if !defined(TCLDIR) !if exist($(_INSTALLDIR)\include\tcl.h) TCLINSTALL = 1 _TCLDIR = $(_INSTALLDIR) !else MSG=^ Don't know where tcl.h is. Set the _TCLDIR macro. !error $(MSG) !endif !else _TCLDIR = $(TCLDIR:/=\) !if exist($(_TCLDIR)\include\tcl.h) TCLINSTALL = 1 !elseif exist($(_TCLDIR)\generic\tcl.h) TCLINSTALL = 0 !else MSG =^ Don't know where tcl.h is. the TCLDIR macro doesn't appear correct. !error $(MSG) !endif !endif !if $(TCLINSTALL) !message *** Warning: Tk requires the source distribution of Tcl to build from, !message *** at this time, sorry. Please set the TCLDIR macro to point to the !message *** Tcl sources. !endif STUBPREFIX = $(PROJECT)stub DOTVERSION = 8.4 VERSION = $(DOTVERSION:.=) WISHNAMEPREFIX = wish BINROOT = . ROOT = .. TCLIMPLIBNAME = tcl$(VERSION)$(SUFX).lib TCLLIBNAME = tcl$(VERSION)$(SUFX).$(EXT) TCLSTUBLIBNAME = tclstub$(VERSION).lib TCLREGLIBNAME = tclreg10$(SUFX:t=).lib TCLDDELIBNAME = tcldde12$(SUFX:t=).lib TKIMPLIB = $(OUT_DIR)\$(PROJECT)$(VERSION)$(SUFX).lib TKLIBNAME = $(PROJECT)$(VERSION)$(SUFX).$(EXT) TKLIB = $(OUT_DIR)\$(TKLIBNAME) TKSTUBLIBNAME = $(STUBPREFIX)$(VERSION).lib TKSTUBLIB = $(OUT_DIR)\$(TKSTUBLIBNAME) !if $(TCLINSTALL) TCLSH = $(_INSTALLDIR)\bin\tclsh$(VERSION)$(SUFX).exe TCLSTUBLIB = $(_INSTALLDIR)\lib\$(TCLSTUBLIBNAME) TCLIMPLIB = $(_INSTALLDIR)\lib\$(TCLIMPLIBNAME) TCL_LIBRARY = $(_INSTALLDIR)\lib TCLREGLIB = $(_INSTALLDIR)\lib\$(TCLREGLIBNAME) TCLDDELIB = $(_INSTALLDIR)\lib\$(TCLDDELIBNAME) TCLTMP_DIR = \must\have\tcl\sources\to\build\this\target COFFBASE = \must\have\tcl\sources\to\build\this\target TOOLSDIR = \must\have\tcl\sources\to\build\this\target !else TCLSH = $(_TCLDIR)\win\$(BUILDDIRTOP)\tclsh$(VERSION)$(SUFX).exe TCLSTUBLIB = $(_TCLDIR)\win\$(BUILDDIRTOP)\$(TCLSTUBLIBNAME) TCLIMPLIB = $(_TCLDIR)\win\$(BUILDDIRTOP)\$(TCLIMPLIBNAME) TCL_LIBRARY = $(_TCLDIR)\library TCLREGLIB = $(_TCLDIR)\win\$(BUILDDIRTOP)\$(TCLREGLIBNAME) TCLDDELIB = $(_TCLDIR)\win\$(BUILDDIRTOP)\$(TCLDDELIBNAME) TCLTMP_DIR = $(_TCLDIR)\win\$(TMP_DIR:tk=tcl) COFFBASE = $(_TCLDIR)\win\coffbase.txt TOOLSDIR = $(_TCLDIR)\tools !endif WISH = $(OUT_DIR)\$(WISHNAMEPREFIX)$(VERSION)$(SUFX).exe WISHC = $(OUT_DIR)\$(WISHNAMEPREFIX)c$(VERSION)$(SUFX).exe TKTEST = $(OUT_DIR)\$(PROJECT)test.exe CAT32 = $(OUT_DIR)\cat32.exe RMDIR = .\rmd.bat RM = del LIB_INSTALL_DIR = $(_INSTALLDIR)\lib BIN_INSTALL_DIR = $(_INSTALLDIR)\bin DOC_INSTALL_DIR = $(_INSTALLDIR)\doc SCRIPT_INSTALL_DIR = $(_INSTALLDIR)\lib\$(PROJECT)$(DOTVERSION) INCLUDE_INSTALL_DIR = $(_INSTALLDIR)\include WISHOBJS = \ $(TMP_DIR)\winMain.obj \ !if $(TCL_LINKWITHEXTENSIONS) $(TCLDDELIB) \ $(TCLREGLIB) \ !endif $(TMP_DIR)\wish.res TKTESTOBJS = \ $(TMP_DIR)\tkTest.obj \ $(TMP_DIR)\tkSquare.obj \ $(TMP_DIR)\testMain.obj \ $(TMP_DIR)\tkWinTest.obj \ $(TCLTMP_DIR)\tclThreadTest.obj XLIBOBJS = \ $(TMP_DIR)\xcolors.obj \ $(TMP_DIR)\xdraw.obj \ $(TMP_DIR)\xgc.obj \ $(TMP_DIR)\ximage.obj \ $(TMP_DIR)\xutil.obj TKOBJS = \ $(TMP_DIR)\tkConsole.obj \ $(TMP_DIR)\tkUnixMenubu.obj \ $(TMP_DIR)\tkUnixScale.obj \ $(XLIBOBJS) \ $(TMP_DIR)\tkWin3d.obj \ $(TMP_DIR)\tkWin32Dll.obj \ $(TMP_DIR)\tkWinButton.obj \ $(TMP_DIR)\tkWinClipboard.obj \ $(TMP_DIR)\tkWinColor.obj \ $(TMP_DIR)\tkWinConfig.obj \ $(TMP_DIR)\tkWinCursor.obj \ $(TMP_DIR)\tkWinDialog.obj \ $(TMP_DIR)\tkWinDraw.obj \ $(TMP_DIR)\tkWinEmbed.obj \ $(TMP_DIR)\tkWinFont.obj \ $(TMP_DIR)\tkWinImage.obj \ $(TMP_DIR)\tkWinInit.obj \ $(TMP_DIR)\tkWinKey.obj \ $(TMP_DIR)\tkWinMenu.obj \ $(TMP_DIR)\tkWinPixmap.obj \ $(TMP_DIR)\tkWinPointer.obj \ $(TMP_DIR)\tkWinRegion.obj \ $(TMP_DIR)\tkWinScrlbr.obj \ $(TMP_DIR)\tkWinSend.obj \ $(TMP_DIR)\tkWinWindow.obj \ $(TMP_DIR)\tkWinWm.obj \ $(TMP_DIR)\tkWinX.obj \ $(TMP_DIR)\stubs.obj \ $(TMP_DIR)\tk3d.obj \ $(TMP_DIR)\tkArgv.obj \ $(TMP_DIR)\tkAtom.obj \ $(TMP_DIR)\tkBind.obj \ $(TMP_DIR)\tkBitmap.obj \ $(TMP_DIR)\tkButton.obj \ $(TMP_DIR)\tkCanvArc.obj \ $(TMP_DIR)\tkCanvBmap.obj \ $(TMP_DIR)\tkCanvImg.obj \ $(TMP_DIR)\tkCanvLine.obj \ $(TMP_DIR)\tkCanvPoly.obj \ $(TMP_DIR)\tkCanvPs.obj \ $(TMP_DIR)\tkCanvText.obj \ $(TMP_DIR)\tkCanvUtil.obj \ $(TMP_DIR)\tkCanvWind.obj \ $(TMP_DIR)\tkCanvas.obj \ $(TMP_DIR)\tkClipboard.obj \ $(TMP_DIR)\tkCmds.obj \ $(TMP_DIR)\tkColor.obj \ $(TMP_DIR)\tkConfig.obj \ $(TMP_DIR)\tkCursor.obj \ $(TMP_DIR)\tkEntry.obj \ $(TMP_DIR)\tkError.obj \ $(TMP_DIR)\tkEvent.obj \ $(TMP_DIR)\tkFileFilter.obj \ $(TMP_DIR)\tkFocus.obj \ $(TMP_DIR)\tkFont.obj \ $(TMP_DIR)\tkFrame.obj \ $(TMP_DIR)\tkGC.obj \ $(TMP_DIR)\tkGeometry.obj \ $(TMP_DIR)\tkGet.obj \ $(TMP_DIR)\tkGrab.obj \ $(TMP_DIR)\tkGrid.obj \ $(TMP_DIR)\tkImage.obj \ $(TMP_DIR)\tkImgBmap.obj \ $(TMP_DIR)\tkImgGIF.obj \ $(TMP_DIR)\tkImgPPM.obj \ $(TMP_DIR)\tkImgPhoto.obj \ $(TMP_DIR)\tkImgUtil.obj \ $(TMP_DIR)\tkListbox.obj \ $(TMP_DIR)\tkMacWinMenu.obj \ $(TMP_DIR)\tkMain.obj \ $(TMP_DIR)\tkMenu.obj \ $(TMP_DIR)\tkMenubutton.obj \ $(TMP_DIR)\tkMenuDraw.obj \ $(TMP_DIR)\tkMessage.obj \ $(TMP_DIR)\tkPanedWindow.obj \ $(TMP_DIR)\tkObj.obj \ $(TMP_DIR)\tkOldConfig.obj \ $(TMP_DIR)\tkOption.obj \ $(TMP_DIR)\tkPack.obj \ $(TMP_DIR)\tkPlace.obj \ $(TMP_DIR)\tkPointer.obj \ $(TMP_DIR)\tkRectOval.obj \ $(TMP_DIR)\tkScale.obj \ $(TMP_DIR)\tkScrollbar.obj \ $(TMP_DIR)\tkSelect.obj \ $(TMP_DIR)\tkText.obj \ $(TMP_DIR)\tkTextBTree.obj \ $(TMP_DIR)\tkTextDisp.obj \ $(TMP_DIR)\tkTextImage.obj \ $(TMP_DIR)\tkTextIndex.obj \ $(TMP_DIR)\tkTextMark.obj \ $(TMP_DIR)\tkTextTag.obj \ $(TMP_DIR)\tkTextWind.obj \ $(TMP_DIR)\tkTrig.obj \ $(TMP_DIR)\tkUtil.obj \ $(TMP_DIR)\tkVisual.obj \ $(TMP_DIR)\tkStubInit.obj \ $(TMP_DIR)\tkStubLib.obj \ $(TMP_DIR)\tkWindow.obj \ !if !$(STATIC_BUILD) $(TMP_DIR)\tk.res !endif TKSTUBOBJS = \ $(TMP_DIR)\tkStubLib.obj \ $(TMP_DIR)\tkStubImg.obj WINDIR = $(ROOT)\win GENERICDIR = $(ROOT)\generic XLIBDIR = $(ROOT)\xlib BITMAPDIR = $(ROOT)\bitmaps DOCDIR = $(ROOT)\doc RCDIR = $(WINDIR)\rc !if $(TCLINSTALL) TCL_INCLUDES = -I "$(_TCLDIR)\include" !else TCL_INCLUDES = -I "$(_TCLDIR)\win" -I "$(_TCLDIR)\generic" !endif TK_INCLUDES = -I"$(WINDIR)" -I"$(GENERICDIR)" -I"$(BITMAPDIR)" -I"$(XLIBDIR)" \ $(TCL_INCLUDES) TK_DEFINES = $(OPTDEFINES) #--------------------------------------------------------------------- # Compile flags #--------------------------------------------------------------------- !if $(DEBUG) !if "$(MACHINE)" == "IA64" cdebug = -Od -Zi !else cdebug = -Z7 -Od -WX !endif !else # This cranks the optimization level up. We can't use -02 because sometimes # it causes problems. cdebug = -Oti !endif # declarations common to all compiler options cflags = -nologo -c -W3 -YX -Fp$(TMP_DIR)^\ !if $(PENT_0F_ERRATA) cflags = $(cflags) -QI0f !endif !if $(ITAN_B_ERRATA) cflags = $(cflags) -QIA64_Bx !endif !if $(MSVCRT) crt = -MD$(DBGX) !else crt = -MT$(DBGX) !endif BASE_CLFAGS = $(cdebug) $(cflags) $(crt) $(TK_INCLUDES) TK_CFLAGS = $(BASE_CLFAGS) $(TK_DEFINES) -DUSE_TCL_STUBS CON_CFLAGS = $(cdebug) $(cflags) $(crt) -DCONSOLE WISH_CFLAGS = $(BASE_CLFAGS) $(TK_DEFINES) #--------------------------------------------------------------------- # Link flags #--------------------------------------------------------------------- !if $(DEBUG) ldebug = -debug:full -debugtype:cv !else ldebug = -release -opt:ref -opt:icf,3 !endif # declarations common to all linker options lflags = -nologo -machine:$(MACHINE) $(ldebug) !if $(PROFILE) lflags = $(lflags) -profile !endif !if $(ALIGN98_HACK) && !$(STATIC_BUILD) # align sections for PE size savings. lflags = $(lflags) -opt:nowin98 !else if !$(ALIGN98_HACK) && $(STATIC_BUILD) # align sections for speed in loading by choosing the virtual page size. lflags = $(lflags) -align:4096 !endif !if $(LOIMPACT) lflags = $(lflags) -ws:aggressive !endif dlllflags = $(lflags) -dll conlflags = $(lflags) -subsystem:console guilflags = $(lflags) -subsystem:windows baselibs = kernel32.lib advapi32.lib user32.lib guilibs = $(baselibs) gdi32.lib comdlg32.lib winspool.lib imm32.lib comctl32.lib #--------------------------------------------------------------------- # TkTest flags #--------------------------------------------------------------------- !if "$(TESTPAT)" != "" TESTFLAGS = -file $(TESTPAT) !endif #--------------------------------------------------------------------- # Project specific targets #--------------------------------------------------------------------- release: setup $(TKSTUBLIB) $(WISH) all: release $(CAT32) core: setup $(TKSTUBLIB) $(TKLIB) console-wish : $(WISHC) install: install-binaries install-libraries install-docs tktest: setup $(TKTEST) $(CAT32) test: setup $(TKTEST) $(TKLIB) $(CAT32) set TCL_LIBRARY=$(TCL_LIBRARY) !if $(TCLINSTALL) set PATH=$(_TCLDIR)\bin;$(PATH) !else set PATH=$(_TCLDIR)\win\$(BUILDDIRTOP);$(PATH) !endif !if "$(OS)" == "Windows_NT" || "$(MSVCDIR)" == "IDE" $(TKTEST) $(ROOT)/tests/all.tcl $(TESTFLAGS) | $(CAT32) !else $(TKTEST) $(ROOT)/tests/all.tcl $(TESTFLAGS) | $(CAT32) !endif runtest: setup $(TKTEST) $(TKLIB) $(CAT32) set TCL_LIBRARY=$(TCL_LIBRARY) !if $(TCLINSTALL) set PATH=$(_TCLDIR)\bin;$(PATH) !else set PATH=$(_TCLDIR)\win\$(BUILDDIRTOP);$(PATH) !endif $(TKTEST) rundemo: setup $(TKTEST) $(TKLIB) $(CAT32) set TCL_LIBRARY=$(TCL_LIBRARY) !if $(TCLINSTALL) set PATH=$(_TCLDIR)\bin;$(PATH) !else set PATH=$(_TCLDIR)\win\$(BUILDDIRTOP);$(PATH) !endif $(TKTEST) $(ROOT)\library\demos\widget setup: @if not exist $(OUT_DIR)\nul mkdir $(OUT_DIR) @if not exist $(TMP_DIR)\nul mkdir $(TMP_DIR) !if !$(STATIC_BUILD) $(TKIMPLIB): $(TKLIB) !endif $(TKLIB): $(TKOBJS) !if $(STATIC_BUILD) $(lib32) -nologo -out:$@ @<< $** << !else $(link32) $(dlllflags) -base:@$(COFFBASE),tk -out:$@ $(guilibs) \ $(TCLSTUBLIB) @<< $** << -@del $*.exp !endif $(TKSTUBLIB): $(TKSTUBOBJS) $(lib32) -nologo -out:$@ $** $(WISH): $(WISHOBJS) $(TKIMPLIB) $(link32) $(guilflags) -out:$@ $(guilibs) $(TCLIMPLIB) $** $(WISHC): $(WISHOBJS) $(TKIMPLIB) $(link32) $(conlflags) -out:$@ $(guilibs) $(TCLIMPLIB) $** $(TKTEST): $(TKTESTOBJS) $(TKIMPLIB) $(link32) $(guilflags) -out:$@ $(guilibs) $(TCLIMPLIB) $** $(CAT32): $(_TCLDIR)\win\cat.c $(cc32) $(CON_CFLAGS) -Fo$(TMP_DIR)\ $? $(link32) $(conlflags) -out:$@ -stack:16384 $(TMP_DIR)\cat.obj $(baselibs) install-binaries: @xcopy /i /y "$(WISH)" "$(BIN_INSTALL_DIR)\" !if "$(TKLIB)" != "$(TKIMPLIB)" @xcopy /i /y "$(TKLIB)" "$(BIN_INSTALL_DIR)\" !endif @xcopy /i /y "$(TKIMPLIB)" "$(LIB_INSTALL_DIR)\" @xcopy /i /y "$(TKSTUBLIB)" "$(LIB_INSTALL_DIR)\" install-libraries: @xcopy /i /y "$(GENERICDIR)\tk.h" "$(INCLUDE_INSTALL_DIR)\" @xcopy /i /y "$(GENERICDIR)\tkDecls.h" "$(INCLUDE_INSTALL_DIR)\" @xcopy /i /y "$(GENERICDIR)\tkPlatDecls.h" "$(INCLUDE_INSTALL_DIR)\" @xcopy /i /y "$(GENERICDIR)\tkIntXlibDecls.h" "$(INCLUDE_INSTALL_DIR)\" @xcopy /i /y "$(XLIBDIR)\X11\*.h" "$(INCLUDE_INSTALL_DIR)\X11\" @xcopy /i /y "$(ROOT)\library" "$(SCRIPT_INSTALL_DIR)\" /s /exclude:<< CVS << #--------------------------------------------------------------------- # Regenerate the stubs files. #--------------------------------------------------------------------- genstubs: $(TCLSH) $(_TCLDIR)\tools\genStubs.tcl $(GENERICDIR) \ $(GENERICDIR)\$(PROJECT).decls $(GENERICDIR)\$(PROJECT)Int.decls #--------------------------------------------------------------------- # Generate the makefile depedancies. #--------------------------------------------------------------------- depend: !if !exist($(TCLSH)) @echo Build tclsh first! !else $(TCLSH) $(TOOLSDIR:\=/)/mkdepend.tcl -vc32 -out:"$(OUT_DIR)\depend.mk" \ -passthru:"-DBUILD_tcl $(TK_INCLUDES:"="")" $(GENERICDIR) \ $(COMPATDIR) $(WINDIR) @<< $(TKOBJS) << !endif #--------------------------------------------------------------------- # Regenerate the windows help files. #--------------------------------------------------------------------- HLPBASE = $(PROJECT)$(VERSION) HELPFILE = $(OUT_DIR)\$(HLPBASE).hlp HELPCNT = $(OUT_DIR)\$(HLPBASE).cnt DOCTMP_DIR = $(OUT_DIR)\$(PROJECT)_docs HELPRTF = $(DOCTMP_DIR)\$(PROJECT).rtf MAN2HELP = $(DOCTMP_DIR)\man2help.tcl MAN2HELP2 = $(DOCTMP_DIR)\man2help2.tcl INDEX = $(DOCTMP_DIR)\index.tcl BMP = $(DOCTMP_DIR)\lamp.bmp BMP_NOPATH = lamp.bmp MAN2TCL = $(DOCTMP_DIR)\man2tcl.exe winhelp: docsetup $(HELPFILE) docsetup: @if not exist $(DOCTMP_DIR)\nul mkdir $(DOCTMP_DIR) $(MAN2HELP) $(MAN2HELP2) $(INDEX): $(TOOLSDIR)\$$(@F) copy $(TOOLSDIR)\$(@F) $(@D) $(BMP): copy $(WINDIR)\$(@F) $(@D) $(HELPFILE): $(HELPRTF) $(BMP) cd $(DOCTMP_DIR) start /wait hcrtf.exe -x <<$(PROJECT).hpj [OPTIONS] COMPRESS=12 Hall Zeck LCID=0x409 0x0 0x0 ; English (United States) TITLE=Tk Reference Manual BMROOT=. CNT=$(@B).cnt HLP=$(@B).hlp [FILES] $(PROJECT).rtf [WINDOWS] main="Tcl/Tk Reference Manual",,27648,(r15263976),(r4227327) [CONFIG] BrowseButtons() CreateButton(1, "Web", ExecFile("http://www.tcl.tk")) CreateButton(2, "SF", ExecFile("http://sf.net/projects/tcl")) CreateButton(3, "Wiki", ExecFile("http://wiki.tcl.tk")) CreateButton(4, "FAQ", ExecFile("http://www.purl.org/NET/Tcl-FAQ/")) << cd $(MAKEDIR) copy "$(DOCTMP_DIR)\$(@B).hlp" "$(OUT_DIR)" copy "$(DOCTMP_DIR)\$(@B).cnt" "$(OUT_DIR)" $(MAN2TCL): $(TOOLSDIR)\$$(@B).c $(cc32) -nologo -G4 -ML -O2 -Fo$(@D)\ $(TOOLSDIR)\$(@B).c -link -out:$@ $(HELPRTF): $(MAN2TCL) $(MAN2HELP) $(MAN2HELP2) $(INDEX) $(TCLSH) $(MAN2HELP:\=/) -bitmap $(BMP_NOPATH) $(PROJECT) $(VERSION) $(DOCDIR:\=/) install-docs: !if exist($(HELPFILE)) @xcopy /i /y "$(HELPFILE)" "$(DOC_INSTALL_DIR)\" @xcopy /i /y "$(HELPCNT)" "$(DOC_INSTALL_DIR)\" $(TCLSH) << puts "Installing $(PROJECT)'s helpfile contents into Tcl's ..." set f [open "$(DOC_INSTALL_DIR:\=/)/tcl$(VERSION).cnt" r] while {![eof $$f]} { if {[regexp {:Include $(PROJECT)([0-9]{2}).cnt} [gets $$f] dummy ver]} { if {$$ver == $(VERSION)} { puts "Already installed." exit } else { # do something here logical to remove (or replace) it. puts "$$ver != $(VERSION), unfinished code path, die, die!" exit 1 } } } close $$f set f [open $(DOC_INSTALL_DIR:\=/)/tcl$(VERSION).cnt a] puts $$f {:Include $(HLPBASE).cnt} close $$f << start /wait winhlp32 -g $(DOC_INSTALL_DIR)\tcl$(VERSION).hlp !endif #--------------------------------------------------------------------- # Special case object file targets #--------------------------------------------------------------------- $(TMP_DIR)\testMain.obj: $(WINDIR)\winMain.c !if $(TCL_LINKWITHEXTENSIONS) $(cc32) $(WISH_CFLAGS) -DTK_TEST -DTCL_LINKWITHEXTENSIONS -Fo$@ $? !else $(cc32) $(WISH_CFLAGS) -DTK_TEST -Fo$@ $? !endif $(TMP_DIR)\tkTest.obj: $(GENERICDIR)\tkTest.c $(cc32) $(WISH_CFLAGS) -Fo$@ $? $(TMP_DIR)\tkWinTest.obj: $(WINDIR)\tkWinTest.c $(cc32) $(WISH_CFLAGS) -Fo$@ $? $(TMP_DIR)\tkSquare.obj: $(GENERICDIR)\tkSquare.c $(cc32) $(WISH_CFLAGS) -Fo$@ $? $(TMP_DIR)\winMain.obj: $(WINDIR)\winMain.c !if $(TCL_LINKWITHEXTENSIONS) $(cc32) $(WISH_CFLAGS) -DTCL_LINKWITHEXTENSIONS -Fo$@ $? !else $(cc32) $(WISH_CFLAGS) -Fo$@ $? !endif # The following objects are part of the stub library and should not # be built as DLL objects but none of the symbols should be exported # and no reference made to a C runtime. $(TMP_DIR)\tkStubLib.obj : $(GENERICDIR)\tkStubLib.c $(cc32) $(cdebug) $(cflags) $(TK_INCLUDES) -Zl -DSTATIC_BUILD -Fo$@ $? $(TMP_DIR)\tkStubImg.obj : $(GENERICDIR)\tkStubImg.c $(cc32) $(cdebug) $(cflags) $(TK_INCLUDES) -Zl -DSTATIC_BUILD -Fo$@ $? #--------------------------------------------------------------------- # Dedependency rules #--------------------------------------------------------------------- $(TMP_DIR)\tk.res: \ $(RCDIR)\buttons.bmp \ $(RCDIR)\cursor*.cur \ $(RCDIR)\tk.ico $(GENERICDIR)/default.h: $(WINDIR)/tkWinDefault.h $(GENERICDIR)/tkButton.c: $(GENERICDIR)/default.h $(GENERICDIR)/tkCanvas.c: $(GENERICDIR)/default.h $(GENERICDIR)/tkEntry.c: $(GENERICDIR)/default.h $(GENERICDIR)/tkFrame.c: $(GENERICDIR)/default.h $(GENERICDIR)/tkListbox.c: $(GENERICDIR)/default.h $(GENERICDIR)/tkMenu.c: $(GENERICDIR)/default.h $(GENERICDIR)/tkMenubutton.c: $(GENERICDIR)/default.h $(GENERICDIR)/tkMessage.c: $(GENERICDIR)/default.h $(GENERICDIR)/tkPanedWindow.c: $(GENERICDIR)/default.h $(GENERICDIR)/tkScale.c: $(GENERICDIR)/default.h $(GENERICDIR)/tkScrollbar.c: $(GENERICDIR)/default.h $(GENERICDIR)/tkText.c: $(GENERICDIR)/default.h $(GENERICDIR)/tkTextIndex.c: $(GENERICDIR)/default.h $(GENERICDIR)/tkTextTag.c: $(GENERICDIR)/default.h $(GENERICDIR)/tkText.c: $(GENERICDIR)/tkText.h |
︙ | ︙ | |||
519 520 521 522 523 524 525 | $(GENERICDIR)/tkTextWind.c: $(GENERICDIR)/tkText.h $(GENERICDIR)/tkMacWinMenu.c: $(GENERICDIR)/tkMenu.h $(GENERICDIR)/tkMenu.c: $(GENERICDIR)/tkMenu.h $(GENERICDIR)/tkMenuDraw.c: $(GENERICDIR)/tkMenu.h $(WINDIR)/tkWinMenu.c: $(GENERICDIR)/tkMenu.h | > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 766 767 768 769 770 771 772 773 774 775 776 777 778 779 780 781 782 783 784 785 786 787 788 789 790 791 792 793 794 795 796 797 798 799 800 801 802 803 804 805 806 807 808 809 810 811 812 813 814 815 816 817 818 819 820 821 822 823 824 825 826 827 828 829 830 831 832 | $(GENERICDIR)/tkTextWind.c: $(GENERICDIR)/tkText.h $(GENERICDIR)/tkMacWinMenu.c: $(GENERICDIR)/tkMenu.h $(GENERICDIR)/tkMenu.c: $(GENERICDIR)/tkMenu.h $(GENERICDIR)/tkMenuDraw.c: $(GENERICDIR)/tkMenu.h $(WINDIR)/tkWinMenu.c: $(GENERICDIR)/tkMenu.h !if exist("$(OUT_DIR)\depend.mk") !include "$(OUT_DIR)\depend.mk" !message *** Dependency rules in effect. !else !message *** Dependency rules are not being used. !endif ### add a spacer in the output !message #--------------------------------------------------------------------- # Implicit rules #--------------------------------------------------------------------- {$(XLIBDIR)}.c{$(TMP_DIR)}.obj:: $(cc32) -DBUILD_tk $(TK_CFLAGS) -Fo$(TMP_DIR)\ @<< $< << {$(GENERICDIR)}.c{$(TMP_DIR)}.obj:: $(cc32) -DBUILD_tk $(TK_CFLAGS) -Fo$(TMP_DIR)\ @<< $< << {$(WINDIR)}.c{$(TMP_DIR)}.obj:: $(cc32) -DBUILD_tk $(TK_CFLAGS) -Fo$(TMP_DIR)\ @<< $< << {$(ROOT)\unix}.c{$(TMP_DIR)}.obj:: $(cc32) -DBUILD_tk $(TK_CFLAGS) -Fo$(TMP_DIR)\ @<< $< << {$(RCDIR)}.rc{$(TMP_DIR)}.res: $(rc32) -fo $@ -r -i "$(GENERICDIR)" $(TCL_INCLUDES) \ !if $(DEBUG) -d DEBUG \ !endif !if $(TCL_THREADS) -d TCL_THREADS \ !endif !if $(STATIC_BUILD) -d STATIC_BUILD \ !endif $< #--------------------------------------------------------------------- # Clean up #--------------------------------------------------------------------- clean: -@$(RMDIR) $(TMP_DIR) hose: clean -@$(RMDIR) $(OUT_DIR) .SUFFIXES: .SUFFIXES:.c .rc |
Changes to win/mkd.bat.
1 | @echo off | | | < < < < < < < < < < | > | 1 2 3 4 5 6 7 8 9 10 11 12 13 | @echo off rem RCS: @(#) $Id: mkd.bat,v 1.4.2.1 2002/06/10 05:38:27 wolfsuit Exp $ if exist %1\nul goto end md %1 if errorlevel 1 goto end echo Created directory %1 :end |
Changes to win/nmakehlp.c.
1 2 3 4 5 6 7 8 9 10 11 | /* ---------------------------------------------------------------------------- * nmakehlp.c -- * * This is used to fix limitations within nmake and the environment. * * Copyright (c) 2002 by David Gravereaux. * * See the file "license.terms" for information on usage and redistribution * of this file, and for a DISCLAIMER OF ALL WARRANTIES. * * ---------------------------------------------------------------------------- | | | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | /* ---------------------------------------------------------------------------- * nmakehlp.c -- * * This is used to fix limitations within nmake and the environment. * * Copyright (c) 2002 by David Gravereaux. * * See the file "license.terms" for information on usage and redistribution * of this file, and for a DISCLAIMER OF ALL WARRANTIES. * * ---------------------------------------------------------------------------- * RCS: @(#) $Id: nmakehlp.c,v 1.1.4.2 2002/06/10 05:38:27 wolfsuit Exp $ * ---------------------------------------------------------------------------- */ #include <windows.h> #pragma comment (lib, "user32.lib") #pragma comment (lib, "kernel32.lib") /* protos */ |
︙ | ︙ |
Changes to win/rmd.bat.
1 | @echo off | | | | < < < < | | < | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | @echo off rem RCS: @(#) $Id: rmd.bat,v 1.4.2.1 2002/06/10 05:38:27 wolfsuit Exp $ if not exist %1\nul goto end echo Removing directory %1 if "%OS%" == "Windows_NT" goto winnt deltree /y %1 if errorlevel 1 goto end goto success :winnt rmdir /s /q %1 if errorlevel 1 goto end :success echo Deleted directory %1 :end |
Changes to win/rules.vc.
1 2 3 4 5 6 7 8 9 | #------------------------------------------------------------------------------ # rules.vc -- # # Microsoft Visual C++ makefile include for decoding the commandline # macros. This file does not need editing to build Tcl. # # See the file "license.terms" for information on usage and redistribution # of this file, and for a DISCLAIMER OF ALL WARRANTIES. # | | | > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | > | | | | | | > > > > > > | | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 | #------------------------------------------------------------------------------ # rules.vc -- # # Microsoft Visual C++ makefile include for decoding the commandline # macros. This file does not need editing to build Tcl. # # See the file "license.terms" for information on usage and redistribution # of this file, and for a DISCLAIMER OF ALL WARRANTIES. # # Copyright (c) 2001-2002 David Gravereaux. # #------------------------------------------------------------------------------ # RCS: @(#) $Id: rules.vc,v 1.1.2.2 2002/06/10 05:38:27 wolfsuit Exp $ #------------------------------------------------------------------------------ !ifndef _RULES_VC _RULES_VC = 1 cc32 = $(CC) # built-in default. link32 = link lib32 = lib rc32 = $(RC) # built-in default. !ifndef INSTALLDIR INSTALLDIR = C:\Progra~1\Tcl !endif !ifndef MACHINE MACHINE = IX86 !endif !message =============================================================================== #---------------------------------------------------------- # build the helper app we need to overcome nmake's limiting # environment. #---------------------------------------------------------- !if !exist(nmakehlp.exe) !if [$(cc32) -nologo -ML nmakehlp.c -link -subsystem:console > nul] !endif !endif #---------------------------------------------------------- # Test for compiler features #---------------------------------------------------------- ### test for optimizations !if [nmakehlp -c -Ox] !message *** Compiler has 'Optimizations' OPTIMIZING = 1 !else !message *** Compiler doesn't have 'Optimizations' OPTIMIZING = 0 !endif !if "$(MACHINE)" == "IX86" ### test for pentium errata !if [nmakehlp -c -QI0f] !message *** Compiler has 'Pentium 0x0f fix' PENT_0F_ERRATA = 1 !else !message *** Compiler doesn't have 'Pentium 0x0f fix' PENT_0F_ERRATA = 0 !endif ### test for -align:4096, when align:512 will do. !if [nmakehlp -l -opt:nowin98] !message *** Linker has 'Win98 alignment problem' ALIGN98_HACK = 1 !else !message *** Linker doesn't have 'Win98 alignment problem' ALIGN98_HACK = 0 !endif !else PENT_0F_ERRATA = 0 ALIGN98_HACK = 0 !endif !if "$(MACHINE)" == "IA64" ### test for Itanium errata !if [nmakehlp -c -QIA64_Bx] !message *** Compiler has 'B-stepping errata workarounds' ITAN_B_ERRATA = 1 !else !message *** Compiler doesn't have 'B-stepping errata workarounds' ITAN_B_ERRATA = 0 !endif !else ITAN_B_ERRATA = 0 !endif #---------------------------------------------------------- # Decode the options requested. #---------------------------------------------------------- !if "$(OPTS)" == "" || [nmakehlp -f "$(OPTS)" "none"] STATIC_BUILD = 0 TCL_THREADS = 0 DEBUG = 0 PROFILE = 0 MSVCRT = 0 LOIMPACT = 0 TCL_LINKWITHEXTENSIONS = 0 !else !if [nmakehlp -f $(OPTS) "static"] !message *** Doing static STATIC_BUILD = 1 !else STATIC_BUILD = 0 !endif !if [nmakehlp -f $(OPTS) "msvcrt"] !message *** Doing msvcrt MSVCRT = 1 !else MSVCRT = 0 !endif !if [nmakehlp -f $(OPTS) "linkexten"] !message *** Doing linkexten TCL_LINKWITHEXTENSIONS = 1 !else TCL_LINKWITHEXTENSIONS = 0 !endif !if [nmakehlp -f $(OPTS) "threads"] !message *** Doing threads TCL_THREADS = 1 !else TCL_THREADS = 0 !endif !if [nmakehlp -f $(OPTS) "symbols"] !message *** Doing symbols DEBUG = 1 !else DEBUG = 0 !endif !if [nmakehlp -f $(OPTS) "profile"] !message *** Doing profile PROFILE = 1 !else PROFILE = 0 !endif !if [nmakehlp -f $(OPTS) "loimpact"] !message *** Doing loimpact LOIMPACT = 1 !else LOIMPACT = 0 !endif !endif !if !$(STATIC_BUILD) # Make sure we don't build overly fat DLLs. MSVCRT = 1 # We shouldn't statically put the extensions inside the shell when dynamic. TCL_LINKWITHEXTENSIONS = 0 !endif #---------------------------------------------------------- # Figure-out how to name our intermediate and output directories. # We wouldn't want different builds to use the same .obj files |
︙ | ︙ | |||
136 137 138 139 140 141 142 | !endif !else !ifndef OUT_DIR OUT_DIR = $(TMP_DIR) !endif !endif | < < < < > | | | > > > > > > > > > > > > > | 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 | !endif !else !ifndef OUT_DIR OUT_DIR = $(TMP_DIR) !endif !endif #---------------------------------------------------------- # Decode the statistics requested. #---------------------------------------------------------- !if "$(STATS)" == "" || [nmakehlp -f "$(STATS)" "none"] TCL_MEM_DEBUG = 0 TCL_COMPILE_DEBUG = 0 !else !if [nmakehlp -f $(STATS) "memdbg"] !message *** Doing memdbg TCL_MEM_DEBUG = 1 !else TCL_MEM_DEBUG = 0 !endif !if [nmakehlp -f $(STATS) "compdbg"] !message *** Doing compdbg TCL_COMPILE_DEBUG = 1 !else TCL_COMPILE_DEBUG = 0 !endif !endif #---------------------------------------------------------- # Set our defines armed with our options. #---------------------------------------------------------- OPTDEFINES = !if $(TCL_MEM_DEBUG) OPTDEFINES = -DTCL_MEM_DEBUG !endif !if $(TCL_COMPILE_DEBUG) OPTDEFINES = $(OPTDEFINES) -DTCL_COMPILE_DEBUG -DTCL_COMPILE_STATS !endif !if $(TCL_THREADS) OPTDEFINES = $(OPTDEFINES) -DTCL_THREADS=1 !endif !if $(STATIC_BUILD) OPTDEFINES = $(OPTDEFINES) -DSTATIC_BUILD !endif #---------------------------------------------------------- # Display stats being used. #---------------------------------------------------------- !message *** Intermediate directory will be '$(TMP_DIR)' !message *** Output directory will be '$(OUT_DIR)' !message *** Suffix for binaries will be '$(SUFX)' !message *** Optional defines are '$(OPTDEFINES)' !endif |
Changes to win/tcl.m4.
︙ | ︙ | |||
526 527 528 529 530 531 532 | MAKE_LIB="\${STLIB_LD} -out:\[$]@" POST_MAKE_LIB= MAKE_EXE="\${CC} -Fe\[$]@" LIBPREFIX="" EXTRA_CFLAGS="-YX" CFLAGS_WARNING="-W3" | | | 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 | MAKE_LIB="\${STLIB_LD} -out:\[$]@" POST_MAKE_LIB= MAKE_EXE="\${CC} -Fe\[$]@" LIBPREFIX="" EXTRA_CFLAGS="-YX" CFLAGS_WARNING="-W3" LDFLAGS_DEBUG="-debug:full -debugtype:both" LDFLAGS_OPTIMIZE="-release" # Specify the CC output file names based on the target name CC_OBJNAME="-Fo\[$]@" CC_EXENAME="-Fe\"\$(shell \$(CYGPATH) '\[$]@')\"" # Specify linker flags depending on the type of app being |
︙ | ︙ |
Changes to win/tkWinButton.c.
1 2 3 4 5 6 7 8 9 10 11 | /* * tkWinButton.c -- * * This file implements the Windows specific portion of the button * widgets. * * Copyright (c) 1996-1998 by Sun Microsystems, Inc. * * See the file "license.terms" for information on usage and redistribution * of this file, and for a DISCLAIMER OF ALL WARRANTIES. * | | | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | /* * tkWinButton.c -- * * This file implements the Windows specific portion of the button * widgets. * * Copyright (c) 1996-1998 by Sun Microsystems, Inc. * * See the file "license.terms" for information on usage and redistribution * of this file, and for a DISCLAIMER OF ALL WARRANTIES. * * RCS: @(#) $Id: tkWinButton.c,v 1.12.4.2 2002/06/10 05:38:27 wolfsuit Exp $ */ #define OEMRESOURCE #include "tkWinInt.h" #include "tkButton.h" /* |
︙ | ︙ | |||
701 702 703 704 705 706 707 708 709 710 711 712 713 714 | Tk_Width(tkwin), defaultWidth, butPtr->highlightColorPtr->pixel); TkWinFillRect(dc, Tk_Width(tkwin) - defaultWidth, 0, defaultWidth, Tk_Height(tkwin), butPtr->highlightColorPtr->pixel); TkWinReleaseDrawableDC(pixmap, dc, &state); } /* * Copy the information from the off-screen pixmap onto the screen, * then delete the pixmap. */ XCopyArea(butPtr->display, pixmap, Tk_WindowId(tkwin), | > > > > | 701 702 703 704 705 706 707 708 709 710 711 712 713 714 715 716 717 718 | Tk_Width(tkwin), defaultWidth, butPtr->highlightColorPtr->pixel); TkWinFillRect(dc, Tk_Width(tkwin) - defaultWidth, 0, defaultWidth, Tk_Height(tkwin), butPtr->highlightColorPtr->pixel); TkWinReleaseDrawableDC(pixmap, dc, &state); } if (butPtr->flags & GOT_FOCUS) { Tk_SetCaretPos(tkwin, x, y, 0 /* not used */); } /* * Copy the information from the off-screen pixmap onto the screen, * then delete the pixmap. */ XCopyArea(butPtr->display, pixmap, Tk_WindowId(tkwin), |
︙ | ︙ |
Changes to win/tkWinCursor.c.
1 2 3 4 5 6 7 8 9 10 | /* * tkWinCursor.c -- * * This file contains Win32 specific cursor related routines. * * Copyright (c) 1995 Sun Microsystems, Inc. * * See the file "license.terms" for information on usage and redistribution * of this file, and for a DISCLAIMER OF ALL WARRANTIES. * | | | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | /* * tkWinCursor.c -- * * This file contains Win32 specific cursor related routines. * * Copyright (c) 1995 Sun Microsystems, Inc. * * See the file "license.terms" for information on usage and redistribution * of this file, and for a DISCLAIMER OF ALL WARRANTIES. * * RCS: @(#) $Id: tkWinCursor.c,v 1.4.8.2 2002/06/10 05:38:28 wolfsuit Exp $ */ #include "tkWinInt.h" /* * The following data structure contains the system specific data * necessary to control Windows cursors. |
︙ | ︙ | |||
83 84 85 86 87 88 89 90 91 | Tcl_Interp *interp; /* Interpreter to use for error reporting. */ Tk_Window tkwin; /* Window in which cursor will be used. */ Tk_Uid string; /* Description of cursor. See manual entry * for details on legal syntax. */ { struct CursorName *namePtr; TkWinCursor *cursorPtr; /* | > > > | < | | | > > > < < < | < < < < | < < < < < | > > < < < | | > > > > > > > > > > > > > > > > > > > > > | | | | | 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 | Tcl_Interp *interp; /* Interpreter to use for error reporting. */ Tk_Window tkwin; /* Window in which cursor will be used. */ Tk_Uid string; /* Description of cursor. See manual entry * for details on legal syntax. */ { struct CursorName *namePtr; TkWinCursor *cursorPtr; int argc; CONST char **argv = NULL; /* * All cursor names are valid lists of one element (for * Unix-compatability), even unadorned system cursor names. */ if (Tcl_SplitList(interp, string, &argc, &argv) != TCL_OK) { return NULL; } if (argc != 1) { ckfree((char *) argv); goto badCursorSpec; } cursorPtr = (TkWinCursor *) ckalloc(sizeof(TkWinCursor)); cursorPtr->info.cursor = (Tk_Cursor) cursorPtr; cursorPtr->winCursor = NULL; if (argv[0][0] == '@') { /* * Check for system cursor of type @<filename>, where only * the name is allowed. This accepts any of: * -cursor @/winnt/cursors/globe.ani * -cursor @C:/Winnt/cursors/E_arrow.cur * -cursor {@C:/Program\ Files/Cursors/bart.ani} * -cursor {{@C:/Program Files/Cursors/bart.ani}} * -cursor [list @[file join "C:/Program Files" Cursors bart.ani]] */ if (Tcl_IsSafe(interp)) { Tcl_AppendResult(interp, "can't get cursor from a file in", " a safe interpreter", (char *) NULL); ckfree((char *) argv); ckfree((char *) cursorPtr); return NULL; } cursorPtr->winCursor = LoadCursorFromFile(&(argv[0][1])); cursorPtr->system = 0; } else { /* * Check for the cursor in the system cursor set. */ for (namePtr = cursorNames; namePtr->name != NULL; namePtr++) { if (strcmp(namePtr->name, name[0]) == 0) { /* * It is either a system cursor or one of ours! */ cursorPtr->winCursor = LoadCursor(NULL, namePtr->id); if (cursorPtr->winCursor == NULL) { cursorPtr->winCursor = LoadCursor(Tk_GetHINSTANCE(), name[0]); cursorPtr->system = 0; } else { cursorPtr->system = 1; } } } } ckfree((char *) argv); if (cursorPtr->winCursor == NULL) { badCursorSpec: ckfree((char *) cursorPtr); Tcl_AppendResult(interp, "bad cursor spec \"", string, "\"", (char *) NULL); return NULL; } else { return (TkCursor *) cursorPtr; } } |
︙ | ︙ |
Changes to win/tkWinDefault.h.
1 2 3 4 5 6 7 8 9 10 11 | /* * tkWinDefault.h -- * * This file defines the defaults for all options for all of * the Tk widgets. * * Copyright (c) 1995-1997 Sun Microsystems, Inc. * * See the file "license.terms" for information on usage and redistribution * of this file, and for a DISCLAIMER OF ALL WARRANTIES. * | | | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | /* * tkWinDefault.h -- * * This file defines the defaults for all options for all of * the Tk widgets. * * Copyright (c) 1995-1997 Sun Microsystems, Inc. * * See the file "license.terms" for information on usage and redistribution * of this file, and for a DISCLAIMER OF ALL WARRANTIES. * * RCS: @(#) $Id: tkWinDefault.h,v 1.11.2.2 2002/06/10 05:38:28 wolfsuit Exp $ */ #ifndef _TKWINDEFAULT #define _TKWINDEFAULT /* * The definitions below provide symbolic names for the default colors. |
︙ | ︙ | |||
354 355 356 357 358 359 360 361 362 363 364 365 366 367 | #define DEF_MESSAGE_PADY "-1" #define DEF_MESSAGE_RELIEF "flat" #define DEF_MESSAGE_TAKE_FOCUS "0" #define DEF_MESSAGE_TEXT "" #define DEF_MESSAGE_TEXT_VARIABLE "" #define DEF_MESSAGE_WIDTH "0" /* * Defaults for scales: */ #define DEF_SCALE_ACTIVE_BG_COLOR ACTIVE_BG #define DEF_SCALE_ACTIVE_BG_MONO BLACK #define DEF_SCALE_BG_COLOR NORMAL_BG | > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 | #define DEF_MESSAGE_PADY "-1" #define DEF_MESSAGE_RELIEF "flat" #define DEF_MESSAGE_TAKE_FOCUS "0" #define DEF_MESSAGE_TEXT "" #define DEF_MESSAGE_TEXT_VARIABLE "" #define DEF_MESSAGE_WIDTH "0" /* * Defaults for panedwindows */ #define DEF_PANEDWINDOW_BG_COLOR NORMAL_BG #define DEF_PANEDWINDOW_BG_MONO WHITE #define DEF_PANEDWINDOW_BORDERWIDTH "2" #define DEF_PANEDWINDOW_CURSOR "" #define DEF_PANEDWINDOW_HANDLEPAD "8" #define DEF_PANEDWINDOW_HANDLESIZE "8" #define DEF_PANEDWINDOW_HEIGHT "" #define DEF_PANEDWINDOW_OPAQUERESIZE "0" #define DEF_PANEDWINDOW_ORIENT "horizontal" #define DEF_PANEDWINDOW_RELIEF "flat" #define DEF_PANEDWINDOW_SASHCURSOR "" #define DEF_PANEDWINDOW_SASHPAD "2" #define DEF_PANEDWINDOW_SASHRELIEF "raised" #define DEF_PANEDWINDOW_SASHWIDTH "2" #define DEF_PANEDWINDOW_SHOWHANDLE "0" #define DEF_PANEDWINDOW_WIDTH "" /* * Defaults for panedwindow panes */ #define DEF_PANEDWINDOW_PANE_AFTER "" #define DEF_PANEDWINDOW_PANE_BEFORE "" #define DEF_PANEDWINDOW_PANE_HEIGHT "" #define DEF_PANEDWINDOW_PANE_MINSIZE "0" #define DEF_PANEDWINDOW_PANE_PADX "0" #define DEF_PANEDWINDOW_PANE_PADY "0" #define DEF_PANEDWINDOW_PANE_STICKY "nsew" #define DEF_PANEDWINDOW_PANE_WIDTH "" /* * Defaults for scales: */ #define DEF_SCALE_ACTIVE_BG_COLOR ACTIVE_BG #define DEF_SCALE_ACTIVE_BG_MONO BLACK #define DEF_SCALE_BG_COLOR NORMAL_BG |
︙ | ︙ |
Changes to win/tkWinDialog.c.
1 2 3 4 5 6 7 8 9 10 | /* * tkWinDialog.c -- * * Contains the Windows implementation of the common dialog boxes. * * Copyright (c) 1996-1997 Sun Microsystems, Inc. * * See the file "license.terms" for information on usage and redistribution * of this file, and for a DISCLAIMER OF ALL WARRANTIES. * | | | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | /* * tkWinDialog.c -- * * Contains the Windows implementation of the common dialog boxes. * * Copyright (c) 1996-1997 Sun Microsystems, Inc. * * See the file "license.terms" for information on usage and redistribution * of this file, and for a DISCLAIMER OF ALL WARRANTIES. * * RCS: @(#) $Id: tkWinDialog.c,v 1.22.2.2 2002/06/10 05:38:28 wolfsuit Exp $ * */ #include "tkWinInt.h" #include "tkFileFilter.h" #include <commdlg.h> /* includes common dialog functionality */ |
︙ | ︙ | |||
389 390 391 392 393 394 395 | /* * Set the title string of the dialog. */ ccPtr = (CHOOSECOLOR *) lParam; title = (const char *) ccPtr->lCustData; if ((title != NULL) && (title[0] != '\0')) { | < | | 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 | /* * Set the title string of the dialog. */ ccPtr = (CHOOSECOLOR *) lParam; title = (const char *) ccPtr->lCustData; if ((title != NULL) && (title[0] != '\0')) { (*tkWinProcs->setWindowText)(hDlg, Tcl_WinUtfToTChar(title, -1, &ds)); Tcl_DStringFree(&ds); } if (tsdPtr->debugFlag) { tsdPtr->debugInterp = (Tcl_Interp *) ccPtr->lpTemplateName; Tcl_DoWhenIdle(SetTkDialog, (ClientData) hDlg); } return TRUE; |
︙ | ︙ | |||
492 493 494 495 496 497 498 | ClientData clientData; /* Main window associated with interpreter. */ Tcl_Interp *interp; /* Current interpreter. */ int objc; /* Number of arguments. */ Tcl_Obj *CONST objv[]; /* Argument objects. */ int open; /* 1 to call GetOpenFileName(), 0 to * call GetSaveFileName(). */ { | < > | 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 | ClientData clientData; /* Main window associated with interpreter. */ Tcl_Interp *interp; /* Current interpreter. */ int objc; /* Number of arguments. */ Tcl_Obj *CONST objv[]; /* Argument objects. */ int open; /* 1 to call GetOpenFileName(), 0 to * call GetSaveFileName(). */ { OPENFILENAMEW ofn; WCHAR file[TK_MULTI_MAX_PATH]; int result, winCode, oldMode, i, multi = 0; char *extension, *filter, *title; Tk_Window tkwin; HWND hWnd; Tcl_DString utfFilterString, utfDirString; Tcl_DString extString, filterString, dirString, titleString; Tcl_Encoding unicodeEncoding = TkWinGetUnicodeEncoding(); ThreadSpecificData *tsdPtr = (ThreadSpecificData *) Tcl_GetThreadData(&dataKey, sizeof(ThreadSpecificData)); static CONST char *saveOptionStrings[] = { "-defaultextension", "-filetypes", "-initialdir", "-initialfile", "-parent", "-title", NULL }; static CONST char *openOptionStrings[] = { |
︙ | ︙ | |||
2421 2422 2423 2424 2425 2426 2427 | int Tk_MessageBoxObjCmd(clientData, interp, objc, objv) ClientData clientData; /* Main window associated with interpreter. */ Tcl_Interp *interp; /* Current interpreter. */ int objc; /* Number of arguments. */ Tcl_Obj *CONST objv[]; /* Argument objects. */ { | < > | 2420 2421 2422 2423 2424 2425 2426 2427 2428 2429 2430 2431 2432 2433 2434 2435 2436 2437 2438 2439 2440 | int Tk_MessageBoxObjCmd(clientData, interp, objc, objv) ClientData clientData; /* Main window associated with interpreter. */ Tcl_Interp *interp; /* Current interpreter. */ int objc; /* Number of arguments. */ Tcl_Obj *CONST objv[]; /* Argument objects. */ { Tk_Window tkwin, parent; HWND hWnd; char *message, *title; int defaultBtn, icon, type; int i, oldMode, flags, winCode; Tcl_DString messageString, titleString; Tcl_Encoding unicodeEncoding = TkWinGetUnicodeEncoding(); static CONST char *optionStrings[] = { "-default", "-icon", "-message", "-parent", "-title", "-type", NULL }; enum options { MSG_DEFAULT, MSG_ICON, MSG_MESSAGE, MSG_PARENT, MSG_TITLE, MSG_TYPE |
︙ | ︙ |
Changes to win/tkWinEmbed.c.
1 2 3 4 5 6 7 8 9 10 11 12 13 | /* * tkWinEmbed.c -- * * This file contains platform specific procedures for Windows platforms * to provide basic operations needed for application embedding (where * one application can use as its main window an internal window from * another application). * * Copyright (c) 1996-1997 Sun Microsystems, Inc. * * See the file "license.terms" for information on usage and redistribution * of this file, and for a DISCLAIMER OF ALL WARRANTIES. * | | | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | /* * tkWinEmbed.c -- * * This file contains platform specific procedures for Windows platforms * to provide basic operations needed for application embedding (where * one application can use as its main window an internal window from * another application). * * Copyright (c) 1996-1997 Sun Microsystems, Inc. * * See the file "license.terms" for information on usage and redistribution * of this file, and for a DISCLAIMER OF ALL WARRANTIES. * * RCS: @(#) $Id: tkWinEmbed.c,v 1.4.6.1 2002/06/10 05:38:28 wolfsuit Exp $ */ #include "tkWinInt.h" /* * One of the following structures exists for each container in this |
︙ | ︙ | |||
144 145 146 147 148 149 150 151 152 153 154 155 156 157 | * if string is bogus. */ Tk_Window tkwin; /* Tk window that does not yet have an * associated X window. */ char *string; /* String identifying an X window to use * for tkwin; must be an integer value. */ { TkWindow *winPtr = (TkWindow *) tkwin; int id; HWND hwnd; Container *containerPtr; ThreadSpecificData *tsdPtr = (ThreadSpecificData *) Tcl_GetThreadData(&dataKey, sizeof(ThreadSpecificData)); if (winPtr->window != None) { | > | 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 | * if string is bogus. */ Tk_Window tkwin; /* Tk window that does not yet have an * associated X window. */ char *string; /* String identifying an X window to use * for tkwin; must be an integer value. */ { TkWindow *winPtr = (TkWindow *) tkwin; TkWindow *usePtr; int id; HWND hwnd; Container *containerPtr; ThreadSpecificData *tsdPtr = (ThreadSpecificData *) Tcl_GetThreadData(&dataKey, sizeof(ThreadSpecificData)); if (winPtr->window != None) { |
︙ | ︙ | |||
172 173 174 175 176 177 178 179 180 181 182 183 184 185 | if (!IsWindow(hwnd)) { if (interp != (Tcl_Interp *) NULL) { Tcl_AppendResult(interp, "window \"", string, "\" doesn't exist", (char *) NULL); } return TCL_ERROR; } /* * Store the parent window in the platform private data slot so * TkWmMapWindow can use it when creating the wrapper window. */ winPtr->privatePtr = (struct TkWindowPrivate*) hwnd; | > > > > > > > > > | 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 | if (!IsWindow(hwnd)) { if (interp != (Tcl_Interp *) NULL) { Tcl_AppendResult(interp, "window \"", string, "\" doesn't exist", (char *) NULL); } return TCL_ERROR; } usePtr = (TkWindow *) Tk_HWNDToWindow(hwnd); if (usePtr != NULL) { if (!(usePtr->flags & TK_CONTAINER)) { Tcl_AppendResult(interp, "window \"", usePtr->pathName, "\" doesn't have -container option set", (char *) NULL); return TCL_ERROR; } } /* * Store the parent window in the platform private data slot so * TkWmMapWindow can use it when creating the wrapper window. */ winPtr->privatePtr = (struct TkWindowPrivate*) hwnd; |
︙ | ︙ |
Changes to win/tkWinFont.c.
1 2 3 4 5 6 7 8 9 10 11 12 13 | /* * tkWinFont.c -- * * Contains the Windows implementation of the platform-independant * font package interface. * * Copyright (c) 1994 Software Research Associates, Inc. * Copyright (c) 1995-1997 Sun Microsystems, Inc. * Copyright (c) 1998-1999 by Scriptics Corporation. * * See the file "license.terms" for information on usage and redistribution * of this file, and for a DISCLAIMER OF ALL WARRANTIES. * | | | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | /* * tkWinFont.c -- * * Contains the Windows implementation of the platform-independant * font package interface. * * Copyright (c) 1994 Software Research Associates, Inc. * Copyright (c) 1995-1997 Sun Microsystems, Inc. * Copyright (c) 1998-1999 by Scriptics Corporation. * * See the file "license.terms" for information on usage and redistribution * of this file, and for a DISCLAIMER OF ALL WARRANTIES. * * RCS: @(#) $Id: tkWinFont.c,v 1.14.2.1 2002/06/10 05:38:28 wolfsuit Exp $ */ #include "tkWinInt.h" #include "tkFont.h" /* * The following structure represents a font family. It is assumed that |
︙ | ︙ | |||
176 177 178 179 180 181 182 | } ThreadSpecificData; static Tcl_ThreadDataKey dataKey; /* * Information cached about the system at startup time. */ | < | 176 177 178 179 180 181 182 183 184 185 186 187 188 189 | } ThreadSpecificData; static Tcl_ThreadDataKey dataKey; /* * Information cached about the system at startup time. */ static Tcl_Encoding systemEncoding; /* * Procedures used only in this file. */ static FontFamily * AllocFontFamily(HDC hdc, HFONT hFont, int base); |
︙ | ︙ | |||
244 245 246 247 248 249 250 | *------------------------------------------------------------------------- */ void TkpFontPkgInit( TkMainInfo *mainPtr) /* The application being created. */ { | < | | 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 | *------------------------------------------------------------------------- */ void TkpFontPkgInit( TkMainInfo *mainPtr) /* The application being created. */ { if (TkWinGetPlatformId() == VER_PLATFORM_WIN32_NT) { /* * If running NT, then we will be calling some Unicode functions * explictly. So, even if the Tcl system encoding isn't Unicode, * make sure we convert to/from the Unicode char set. */ systemEncoding = TkWinGetUnicodeEncoding(); } } /* *--------------------------------------------------------------------------- * * TkpGetNativeFont -- |
︙ | ︙ | |||
1078 1079 1080 1081 1082 1083 1084 | fontPtr->pixelSize = tm.tmHeight - tm.tmInternalLeading; fontPtr->numSubFonts = 1; fontPtr->subFontArray = fontPtr->staticSubFonts; InitSubFont(hdc, hFont, 1, &fontPtr->subFontArray[0]); encoding = fontPtr->subFontArray[0].familyPtr->encoding; | | | 1076 1077 1078 1079 1080 1081 1082 1083 1084 1085 1086 1087 1088 1089 1090 | fontPtr->pixelSize = tm.tmHeight - tm.tmInternalLeading; fontPtr->numSubFonts = 1; fontPtr->subFontArray = fontPtr->staticSubFonts; InitSubFont(hdc, hFont, 1, &fontPtr->subFontArray[0]); encoding = fontPtr->subFontArray[0].familyPtr->encoding; if (encoding == TkWinGetUnicodeEncoding()) { GetCharWidthW(hdc, 0, BASE_CHARS - 1, fontPtr->widths); } else { GetCharWidthA(hdc, 0, BASE_CHARS - 1, fontPtr->widths); } Tcl_DStringFree(&faceString); SelectObject(hdc, oldFont); |
︙ | ︙ | |||
1349 1350 1351 1352 1353 1354 1355 | } if (familyPtr->startCount != NULL) { ckfree((char *) familyPtr->startCount); } if (familyPtr->endCount != NULL) { ckfree((char *) familyPtr->endCount); } | | | 1347 1348 1349 1350 1351 1352 1353 1354 1355 1356 1357 1358 1359 1360 1361 | } if (familyPtr->startCount != NULL) { ckfree((char *) familyPtr->startCount); } if (familyPtr->endCount != NULL) { ckfree((char *) familyPtr->endCount); } if (familyPtr->encoding != TkWinGetUnicodeEncoding()) { Tcl_FreeEncoding(familyPtr->encoding); } /* * Delete from list. */ |
︙ | ︙ | |||
1667 1668 1669 1670 1671 1672 1673 | subFontPtr->fontMap[row] = (char *) ckalloc(FONTMAP_BITSPERPAGE / 8); memset(subFontPtr->fontMap[row], 0, FONTMAP_BITSPERPAGE / 8); familyPtr = subFontPtr->familyPtr; encoding = familyPtr->encoding; | | | 1665 1666 1667 1668 1669 1670 1671 1672 1673 1674 1675 1676 1677 1678 1679 | subFontPtr->fontMap[row] = (char *) ckalloc(FONTMAP_BITSPERPAGE / 8); memset(subFontPtr->fontMap[row], 0, FONTMAP_BITSPERPAGE / 8); familyPtr = subFontPtr->familyPtr; encoding = familyPtr->encoding; if (familyPtr->encoding == TkWinGetUnicodeEncoding()) { /* * Font is Unicode. Few fonts are going to have all characters, so * examine the TrueType character existence metrics to determine * what characters actually exist in this font. */ segCount = familyPtr->segCount; |
︙ | ︙ |
Changes to win/tkWinImage.c.
1 2 3 4 5 6 7 8 9 10 | /* * tkWinImage.c -- * * This file contains routines for manipulation full-color images. * * Copyright (c) 1995 Sun Microsystems, Inc. * * See the file "license.terms" for information on usage and redistribution * of this file, and for a DISCLAIMER OF ALL WARRANTIES. * | | | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | /* * tkWinImage.c -- * * This file contains routines for manipulation full-color images. * * Copyright (c) 1995 Sun Microsystems, Inc. * * See the file "license.terms" for information on usage and redistribution * of this file, and for a DISCLAIMER OF ALL WARRANTIES. * * RCS: @(#) $Id: tkWinImage.c,v 1.3.8.1 2002/06/10 05:38:28 wolfsuit Exp $ */ #include "tkWinInt.h" static int DestroyImage _ANSI_ARGS_((XImage* data)); static unsigned long ImageGetPixel _ANSI_ARGS_((XImage *image, int x, int y)); static int PutPixel _ANSI_ARGS_((XImage *image, int x, int y, |
︙ | ︙ | |||
217 218 219 220 221 222 223 | imagePtr->width = width; imagePtr->height = height; imagePtr->xoffset = offset; imagePtr->format = format; imagePtr->data = data; imagePtr->byte_order = LSBFirst; imagePtr->bitmap_unit = 8; | | | 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 | imagePtr->width = width; imagePtr->height = height; imagePtr->xoffset = offset; imagePtr->format = format; imagePtr->data = data; imagePtr->byte_order = LSBFirst; imagePtr->bitmap_unit = 8; imagePtr->bitmap_bit_order = LSBFirst; imagePtr->bitmap_pad = bitmap_pad; imagePtr->bits_per_pixel = depth; imagePtr->depth = depth; /* * Under Windows, bitmap_pad must be on an LONG data-type boundary. */ |
︙ | ︙ |
Changes to win/tkWinInit.c.
1 2 3 4 5 6 7 8 9 10 11 | /* * tkWinInit.c -- * * This file contains Windows-specific interpreter initialization * functions. * * Copyright (c) 1995-1997 Sun Microsystems, Inc. * * See the file "license.terms" for information on usage and redistribution * of this file, and for a DISCLAIMER OF ALL WARRANTIES. * | | | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | /* * tkWinInit.c -- * * This file contains Windows-specific interpreter initialization * functions. * * Copyright (c) 1995-1997 Sun Microsystems, Inc. * * See the file "license.terms" for information on usage and redistribution * of this file, and for a DISCLAIMER OF ALL WARRANTIES. * * RCS: @(#) $Id: tkWinInit.c,v 1.4.8.3 2002/06/10 05:38:28 wolfsuit Exp $ */ #include "tkWinInt.h" /* * The Init script (common to Windows and Unix platforms) is * defined in tkInitScript.h |
︙ | ︙ | |||
121 122 123 124 125 126 127 | */ void TkpDisplayWarning(msg, title) CONST char *msg; /* Message to be displayed. */ CONST char *title; /* Title of warning. */ { | < > | 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 | */ void TkpDisplayWarning(msg, title) CONST char *msg; /* Message to be displayed. */ CONST char *title; /* Title of warning. */ { Tcl_DString msgString, titleString; Tcl_Encoding unicodeEncoding = TkWinGetUnicodeEncoding(); Tcl_UtfToExternalDString(unicodeEncoding, msg, -1, &msgString); Tcl_UtfToExternalDString(unicodeEncoding, title, -1, &titleString); MessageBoxW(NULL, (WCHAR *) Tcl_DStringValue(&msgString), (WCHAR *) Tcl_DStringValue(&titleString), MB_OK | MB_ICONEXCLAMATION | MB_SYSTEMMODAL | MB_SETFOREGROUND | MB_TOPMOST); Tcl_DStringFree(&msgString); Tcl_DStringFree(&titleString); } |
Changes to win/tkWinInt.h.
1 2 3 4 5 6 7 8 9 10 11 12 13 | /* * tkWinInt.h -- * * This file contains declarations that are shared among the * Windows-specific parts of Tk, but aren't used by the rest of * Tk. * * Copyright (c) 1995-1997 Sun Microsystems, Inc. * Copyright (c) 1998-2000 by Scriptics Corporation. * * See the file "license.terms" for information on usage and redistribution * of this file, and for a DISCLAIMER OF ALL WARRANTIES. * | | | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | /* * tkWinInt.h -- * * This file contains declarations that are shared among the * Windows-specific parts of Tk, but aren't used by the rest of * Tk. * * Copyright (c) 1995-1997 Sun Microsystems, Inc. * Copyright (c) 1998-2000 by Scriptics Corporation. * * See the file "license.terms" for information on usage and redistribution * of this file, and for a DISCLAIMER OF ALL WARRANTIES. * * RCS: @(#) $Id: tkWinInt.h,v 1.11.2.2 2002/06/10 05:38:28 wolfsuit Exp $ */ #ifndef _TKWININT #define _TKWININT #ifndef _TKINT #include "tkInt.h" |
︙ | ︙ | |||
188 189 190 191 192 193 194 195 196 197 198 199 | HINSTANCE hInstance, LPVOID lpParam); } TkWinProcs; EXTERN TkWinProcs *tkWinProcs; #undef TCL_STORAGE_CLASS #define TCL_STORAGE_CLASS DLLIMPORT extern Tcl_Encoding TkWinGetKeyInputEncoding _ANSI_ARGS_((void)); #endif /* _TKWININT */ | > > > > > > | 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 | HINSTANCE hInstance, LPVOID lpParam); } TkWinProcs; EXTERN TkWinProcs *tkWinProcs; #undef TCL_STORAGE_CLASS #define TCL_STORAGE_CLASS DLLIMPORT /* * The following allows us to cache these encoding for multiple functions. */ extern Tcl_Encoding TkWinGetKeyInputEncoding _ANSI_ARGS_((void)); extern Tcl_Encoding TkWinGetUnicodeEncoding _ANSI_ARGS_((void)); #endif /* _TKWININT */ |
Changes to win/tkWinTest.c.
1 2 3 4 5 6 7 8 9 10 11 12 13 | /* * tkWinTest.c -- * * Contains commands for platform specific tests for * the Windows platform. * * Copyright (c) 1997 Sun Microsystems, Inc. * Copyright (c) 2000 by Scriptics Corporation. * Copyright (c) 2001 by ActiveState Corporation. * * See the file "license.terms" for information on usage and redistribution * of this file, and for a DISCLAIMER OF ALL WARRANTIES. * | | | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | /* * tkWinTest.c -- * * Contains commands for platform specific tests for * the Windows platform. * * Copyright (c) 1997 Sun Microsystems, Inc. * Copyright (c) 2000 by Scriptics Corporation. * Copyright (c) 2001 by ActiveState Corporation. * * See the file "license.terms" for information on usage and redistribution * of this file, and for a DISCLAIMER OF ALL WARRANTIES. * * RCS: @(#) $Id: tkWinTest.c,v 1.5.2.1 2002/06/10 05:38:28 wolfsuit Exp $ */ #include "tkWinInt.h" HWND tkWinCurrentDialog; /* |
︙ | ︙ | |||
117 118 119 120 121 122 123 | sprintf(msgBuf, "unknown error: %ld", error); msg = msgBuf; } } else { Tcl_Encoding encoding; encoding = Tcl_GetEncoding(NULL, "unicode"); | | < | 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 | sprintf(msgBuf, "unknown error: %ld", error); msg = msgBuf; } } else { Tcl_Encoding encoding; encoding = Tcl_GetEncoding(NULL, "unicode"); msg = Tcl_ExternalToUtfDString(encoding, (char *) wMsgPtr, -1, &ds); Tcl_FreeEncoding(encoding); LocalFree(wMsgPtr); length = Tcl_DStringLength(&ds); /* * Trim the trailing CR/LF from the system message. */ if (msg[length-1] == '\n') { msg[--length] = 0; |
︙ | ︙ |
Changes to win/tkWinWm.c.
︙ | ︙ | |||
8 9 10 11 12 13 14 | * * Copyright (c) 1995-1997 Sun Microsystems, Inc. * Copyright (c) 1998-2000 by Scriptics Corporation. * * See the file "license.terms" for information on usage and redistribution * of this file, and for a DISCLAIMER OF ALL WARRANTIES. * | | | 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | * * Copyright (c) 1995-1997 Sun Microsystems, Inc. * Copyright (c) 1998-2000 by Scriptics Corporation. * * See the file "license.terms" for information on usage and redistribution * of this file, and for a DISCLAIMER OF ALL WARRANTIES. * * RCS: @(#) $Id: tkWinWm.c,v 1.31.2.2 2002/06/10 05:38:28 wolfsuit Exp $ */ #include "tkWinInt.h" /* * Event structure for synthetic activation events. These events are * placed on the event queue whenever a toplevel gets a WM_MOUSEACTIVATE |
︙ | ︙ | |||
3069 3070 3071 3072 3073 3074 3075 | } else if ((c == 's') && (strncmp(argv[1], "stackorder", length) == 0) && (length >= 2)) { TkWindow **windows, **window_ptr; if ((argc != 3) && (argc != 5)) { Tcl_AppendResult(interp, "wrong # arguments: must be \"", argv[0], | | | 3069 3070 3071 3072 3073 3074 3075 3076 3077 3078 3079 3080 3081 3082 3083 | } else if ((c == 's') && (strncmp(argv[1], "stackorder", length) == 0) && (length >= 2)) { TkWindow **windows, **window_ptr; if ((argc != 3) && (argc != 5)) { Tcl_AppendResult(interp, "wrong # arguments: must be \"", argv[0], " stackorder window ?isabove|isbelow window?\"", (char *) NULL); return TCL_ERROR; } if (argc == 3) { windows = TkWmStackorderToplevel(winPtr); if (windows == NULL) { |
︙ | ︙ | |||
3257 3258 3259 3260 3261 3262 3263 3264 3265 3266 3267 3268 3269 3270 | (LPCTSTR) Tcl_DStringValue(&titleString)); Tcl_DStringFree(&titleString); } } } else if ((c == 't') && (strncmp(argv[1], "transient", length) == 0) && (length >= 3)) { TkWindow *masterPtr = wmPtr->masterPtr; if ((argc != 3) && (argc != 4)) { Tcl_AppendResult(interp, "wrong # arguments: must be \"", argv[0], " transient window ?master?\"", (char *) NULL); return TCL_ERROR; } if (argc == 3) { | > | 3257 3258 3259 3260 3261 3262 3263 3264 3265 3266 3267 3268 3269 3270 3271 | (LPCTSTR) Tcl_DStringValue(&titleString)); Tcl_DStringFree(&titleString); } } } else if ((c == 't') && (strncmp(argv[1], "transient", length) == 0) && (length >= 3)) { TkWindow *masterPtr = wmPtr->masterPtr; WmInfo *wmPtr2; if ((argc != 3) && (argc != 4)) { Tcl_AppendResult(interp, "wrong # arguments: must be \"", argv[0], " transient window ?master?\"", (char *) NULL); return TCL_ERROR; } if (argc == 3) { |
︙ | ︙ | |||
3286 3287 3288 3289 3290 3291 3292 | if (argv[3][0] == '\0') { wmPtr->masterPtr = NULL; } else { masterPtr = (TkWindow*) Tk_NameToWindow(interp, argv[3], tkwin); if (masterPtr == NULL) { return TCL_ERROR; } | < < < < | | | | < | | > > > > > > > > > > > > > > > > > > > > > > > > > > | 3287 3288 3289 3290 3291 3292 3293 3294 3295 3296 3297 3298 3299 3300 3301 3302 3303 3304 3305 3306 3307 3308 3309 3310 3311 3312 3313 3314 3315 3316 3317 3318 3319 3320 3321 3322 3323 3324 3325 3326 3327 3328 3329 3330 3331 3332 3333 | if (argv[3][0] == '\0') { wmPtr->masterPtr = NULL; } else { masterPtr = (TkWindow*) Tk_NameToWindow(interp, argv[3], tkwin); if (masterPtr == NULL) { return TCL_ERROR; } while (!(masterPtr->flags & TK_TOP_LEVEL)) { /* * Ensure that the master window is actually a Tk toplevel. */ masterPtr = masterPtr->parentPtr; } Tk_MakeWindowExist((Tk_Window)masterPtr); if (wmPtr->iconFor != NULL) { Tcl_AppendResult(interp, "can't make \"", argv[2], "\" a transient: it is an icon for ", Tk_PathName(wmPtr->iconFor), (char *) NULL); return TCL_ERROR; } wmPtr2 = masterPtr->wmInfoPtr; if (wmPtr2->iconFor != NULL) { Tcl_AppendResult(interp, "can't make \"", argv[3], "\" a master: it is an icon for ", Tk_PathName(wmPtr2->iconFor), (char *) NULL); return TCL_ERROR; } if (masterPtr == winPtr) { Tcl_AppendResult(interp, "can't make \"", Tk_PathName(winPtr), "\" its own master", (char *) NULL); return TCL_ERROR; } else if (masterPtr != wmPtr->masterPtr) { wmPtr->masterPtr = masterPtr; masterPtr->wmInfoPtr->numTransients++; /* * Bind a visibility event handler to the master window, * to ensure that when it is mapped, the children will * have their state set properly. |
︙ | ︙ | |||
4331 4332 4333 4334 4335 4336 4337 | Tcl_HashTable *table; /* Table to maps HWND to TkWindow */ { TkWindow *childPtr; Tcl_HashEntry *hPtr; HWND wrapper; int newEntry; | | > | 4353 4354 4355 4356 4357 4358 4359 4360 4361 4362 4363 4364 4365 4366 4367 4368 | Tcl_HashTable *table; /* Table to maps HWND to TkWindow */ { TkWindow *childPtr; Tcl_HashEntry *hPtr; HWND wrapper; int newEntry; if (Tk_IsMapped(winPtr) && Tk_IsTopLevel(winPtr) && !Tk_IsEmbedded(winPtr)) { wrapper = TkWinGetWrapperWindow((Tk_Window) winPtr); /*fprintf(stderr, "Mapped HWND %d to %x (%s)\n", wrapper, winPtr, winPtr->pathName);*/ hPtr = Tcl_CreateHashEntry(table, (char *) wrapper, &newEntry); |
︙ | ︙ |
Changes to win/tkWinX.c.
1 2 3 4 5 6 7 8 9 10 11 12 | /* * tkWinX.c -- * * This file contains Windows emulation procedures for X routines. * * Copyright (c) 1995-1996 Sun Microsystems, Inc. * Copyright (c) 1994 Software Research Associates, Inc. * Copyright (c) 1998-2000 by Scriptics Corporation. * * See the file "license.terms" for information on usage and redistribution * of this file, and for a DISCLAIMER OF ALL WARRANTIES. * | | > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 | /* * tkWinX.c -- * * This file contains Windows emulation procedures for X routines. * * Copyright (c) 1995-1996 Sun Microsystems, Inc. * Copyright (c) 1994 Software Research Associates, Inc. * Copyright (c) 1998-2000 by Scriptics Corporation. * * See the file "license.terms" for information on usage and redistribution * of this file, and for a DISCLAIMER OF ALL WARRANTIES. * * RCS: @(#) $Id: tkWinX.c,v 1.15.2.2 2002/06/10 05:38:28 wolfsuit Exp $ */ #include "tkWinInt.h" /* * The w32api 1.1 package (included in Mingw 1.1) does not define _WIN32_IE * by default. Define it here to gain access to the InitCommonControlsEx API * in commctrl.h. */ #ifndef _WIN32_IE #define _WIN32_IE 0x0300 #endif #include <commctrl.h> /* * The zmouse.h file includes the definition for WM_MOUSEWHEEL. */ #include <zmouse.h> |
︙ | ︙ | |||
69 70 71 72 73 74 75 76 77 78 79 80 81 82 | static int childClassInitialized; /* Registered child class? */ static WNDCLASS childClass; /* Window class for child windows. */ static int tkPlatformId = 0; /* version of Windows platform */ static Tcl_Encoding keyInputEncoding = NULL;/* The current character * encoding for keyboard input */ static int keyInputCharset = -1; /* The Win32 CHARSET for the keyboard * encoding */ /* * Thread local storage. Notice that now each thread must have its * own TkDisplay structure, since this structure contains most of * the thread-specific date for threads. */ typedef struct ThreadSpecificData { | > | 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 | static int childClassInitialized; /* Registered child class? */ static WNDCLASS childClass; /* Window class for child windows. */ static int tkPlatformId = 0; /* version of Windows platform */ static Tcl_Encoding keyInputEncoding = NULL;/* The current character * encoding for keyboard input */ static int keyInputCharset = -1; /* The Win32 CHARSET for the keyboard * encoding */ static Tcl_Encoding unicodeEncoding = NULL; /* unicode encoding */ /* * Thread local storage. Notice that now each thread must have its * own TkDisplay structure, since this structure contains most of * the thread-specific date for threads. */ typedef struct ThreadSpecificData { |
︙ | ︙ | |||
263 264 265 266 267 268 269 270 271 272 273 274 275 276 | * Clean up our own class. */ if (childClassInitialized) { childClassInitialized = 0; UnregisterClass(TK_WIN_CHILD_CLASS_NAME, hInstance); } /* * And let the window manager clean up its own class(es). */ TkWinWmCleanup(hInstance); } | > > > > > | 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 | * Clean up our own class. */ if (childClassInitialized) { childClassInitialized = 0; UnregisterClass(TK_WIN_CHILD_CLASS_NAME, hInstance); } if (unicodeEncoding != NULL) { Tcl_FreeEncoding(unicodeEncoding); unicodeEncoding = NULL; } /* * And let the window manager clean up its own class(es). */ TkWinWmCleanup(hInstance); } |
︙ | ︙ | |||
370 371 372 373 374 375 376 377 378 379 380 381 382 383 | return tsdPtr->winDisplay; } else { return NULL; } } display = (Display *) ckalloc(sizeof(Display)); display->display_name = (char *) ckalloc(strlen(display_name)+1); strcpy(display->display_name, display_name); display->cursor_font = 1; display->nscreens = 1; display->request = 1; display->qlen = 0; | > > | 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 | return tsdPtr->winDisplay; } else { return NULL; } } display = (Display *) ckalloc(sizeof(Display)); ZeroMemory(display, sizeof(Display)); display->display_name = (char *) ckalloc(strlen(display_name)+1); strcpy(display->display_name, display_name); display->cursor_font = 1; display->nscreens = 1; display->request = 1; display->qlen = 0; |
︙ | ︙ | |||
466 467 468 469 470 471 472 473 474 475 476 477 478 479 | display->screens = screen; display->nscreens = 1; display->default_screen = 0; screen->cmap = XCreateColormap(display, None, screen->root_visual, AllocNone); tsdPtr->winDisplay = (TkDisplay *) ckalloc(sizeof(TkDisplay)); tsdPtr->winDisplay->display = display; tsdPtr->updatingClipboard = FALSE; return tsdPtr->winDisplay; } /* *---------------------------------------------------------------------- | > | 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 | display->screens = screen; display->nscreens = 1; display->default_screen = 0; screen->cmap = XCreateColormap(display, None, screen->root_visual, AllocNone); tsdPtr->winDisplay = (TkDisplay *) ckalloc(sizeof(TkDisplay)); ZeroMemory(tsdPtr->winDisplay, sizeof(TkDisplay)); tsdPtr->winDisplay->display = display; tsdPtr->updatingClipboard = FALSE; return tsdPtr->winDisplay; } /* *---------------------------------------------------------------------- |
︙ | ︙ | |||
812 813 814 815 816 817 818 819 820 821 822 823 824 825 826 827 828 829 830 831 832 833 | if (winPtr == NULL) { return; } } while (otherWinPtr && !(otherWinPtr->flags & TK_TOP_LEVEL)) { otherWinPtr = otherWinPtr->parentPtr; } if (otherWinPtr == winPtr) { return; } event.xany.window = winPtr->window; event.type = (message == WM_SETFOCUS) ? FocusIn : FocusOut; event.xfocus.mode = NotifyNormal; event.xfocus.detail = NotifyNonlinear; break; } case WM_DESTROYCLIPBOARD: if (tsdPtr->updatingClipboard == TRUE) { /* * We want to avoid this event if we are the ones that caused | > > > > > > > > > > > > > > > > > | 832 833 834 835 836 837 838 839 840 841 842 843 844 845 846 847 848 849 850 851 852 853 854 855 856 857 858 859 860 861 862 863 864 865 866 867 868 869 870 | if (winPtr == NULL) { return; } } while (otherWinPtr && !(otherWinPtr->flags & TK_TOP_LEVEL)) { otherWinPtr = otherWinPtr->parentPtr; } /* * Do a catch-all Tk_SetCaretPos here to make sure that the * window receiving focus sets the caret at least once. */ if (message == WM_SETFOCUS) { Tk_SetCaretPos((Tk_Window) winPtr, 0, 0, 0); } if (otherWinPtr == winPtr) { return; } event.xany.window = winPtr->window; event.type = (message == WM_SETFOCUS) ? FocusIn : FocusOut; event.xfocus.mode = NotifyNormal; event.xfocus.detail = NotifyNonlinear; /* * Destroy the caret if we own it. If we are moving to another Tk * window, it will reclaim and reposition it with Tk_SetCaretPos. */ if (message == WM_KILLFOCUS) { DestroyCaret(); } break; } case WM_DESTROYCLIPBOARD: if (tsdPtr->updatingClipboard == TRUE) { /* * We want to avoid this event if we are the ones that caused |
︙ | ︙ | |||
1217 1218 1219 1220 1221 1222 1223 1224 1225 1226 1227 1228 1229 1230 | { return keyInputEncoding; } /* *---------------------------------------------------------------------- * * HandleIMEComposition -- * * This function works around a definciency in some versions * of Windows 2000 to make it possible to entry multi-lingual * characters under all versions of Windows 2000. * * When an Input Method Editor (IME) is ready to send input | > > > > > > > > > > > > > > > > > > > > > > > > > | 1254 1255 1256 1257 1258 1259 1260 1261 1262 1263 1264 1265 1266 1267 1268 1269 1270 1271 1272 1273 1274 1275 1276 1277 1278 1279 1280 1281 1282 1283 1284 1285 1286 1287 1288 1289 1290 1291 1292 | { return keyInputEncoding; } /* *---------------------------------------------------------------------- * * TkWinGetUnicodeEncoding -- * * Returns the cached unicode encoding. * * Results: * The unicode encoding. * * Side effects: * None. * *---------------------------------------------------------------------- */ Tcl_Encoding TkWinGetUnicodeEncoding() { if (unicodeEncoding == NULL) { unicodeEncoding = Tcl_GetEncoding(NULL, "unicode"); } return unicodeEncoding; } /* *---------------------------------------------------------------------- * * HandleIMEComposition -- * * This function works around a definciency in some versions * of Windows 2000 to make it possible to entry multi-lingual * characters under all versions of Windows 2000. * * When an Input Method Editor (IME) is ready to send input |
︙ | ︙ | |||
1254 1255 1256 1257 1258 1259 1260 | * message */ { HIMC hIMC; int i, n; XEvent event; char * buff; TkWindow *winPtr; | | | < < < < < < > | > > | | | > | > > > > > > > > > > > > > > > > > > > > > > > > | 1316 1317 1318 1319 1320 1321 1322 1323 1324 1325 1326 1327 1328 1329 1330 1331 1332 1333 1334 1335 1336 1337 1338 1339 1340 1341 1342 1343 1344 1345 1346 1347 1348 1349 1350 1351 1352 1353 1354 1355 1356 1357 1358 1359 1360 1361 1362 1363 1364 1365 1366 1367 1368 1369 1370 1371 1372 1373 1374 1375 | * message */ { HIMC hIMC; int i, n; XEvent event; char * buff; TkWindow *winPtr; Tcl_Encoding unicodeEncoding = TkWinGetUnicodeEncoding(); BOOL isWinNT = (TkWinGetPlatformId() == VER_PLATFORM_WIN32_NT); if ((lParam & GCS_RESULTSTR) == 0) { /* * Composition is not finished yet. */ return 0; } hIMC = ImmGetContext(hwnd); if (hIMC) { if (isWinNT) { n = ImmGetCompositionStringW(hIMC, GCS_RESULTSTR, NULL, 0); } else { n = ImmGetCompositionStringA(hIMC, GCS_RESULTSTR, NULL, 0); } if ((n > 0) && ((buff = (char *) ckalloc(n)) != NULL)) { if (isWinNT) { n = ImmGetCompositionStringW(hIMC, GCS_RESULTSTR, buff, n); } else { Tcl_DString utfString, unicodeString; n = ImmGetCompositionStringA(hIMC, GCS_RESULTSTR, buff, n); Tcl_DStringInit(&utfString); Tcl_ExternalToUtfDString(keyInputEncoding, buff, n, &utfString); Tcl_UtfToExternalDString(unicodeEncoding, Tcl_DStringValue(&utfString), -1, &unicodeString); i = Tcl_DStringLength(&unicodeString); if (n < i) { /* * Only alloc more space if we need, otherwise just * use what we've created. Don't realloc as that may * copy data we no longer need. */ ckfree((char *) buff); buff = (char *) ckalloc(i); } n = i; memcpy(buff, Tcl_DStringValue(&unicodeString), n); Tcl_DStringFree(&utfString); Tcl_DStringFree(&unicodeString); } /* * Set up the fields pertinent to key event. * * We set send_event to the special value of -2, so that * TkpGetString() in tkWinKey.c knows that trans_chars[] * already contains a UNICODE char and there's no need to |
︙ | ︙ | |||
1332 1333 1334 1335 1336 1337 1338 | } /* *---------------------------------------------------------------------- * * Tk_FreeXId -- * | | | 1416 1417 1418 1419 1420 1421 1422 1423 1424 1425 1426 1427 1428 1429 1430 | } /* *---------------------------------------------------------------------- * * Tk_FreeXId -- * * This interface is not needed under Windows. * * Results: * None. * * Side effects: * None. * |
︙ | ︙ | |||
1463 1464 1465 1466 1467 1468 1469 | TkWinUpdatingClipboard(int mode) { ThreadSpecificData *tsdPtr = (ThreadSpecificData *) Tcl_GetThreadData(&dataKey, sizeof(ThreadSpecificData)); tsdPtr->updatingClipboard = mode; } | > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1547 1548 1549 1550 1551 1552 1553 1554 1555 1556 1557 1558 1559 1560 1561 1562 1563 1564 1565 1566 1567 1568 1569 1570 1571 1572 1573 1574 1575 1576 1577 1578 1579 1580 1581 1582 1583 1584 1585 1586 1587 1588 1589 1590 1591 1592 1593 1594 1595 1596 1597 1598 1599 1600 1601 1602 1603 1604 1605 1606 1607 1608 1609 1610 1611 1612 1613 1614 1615 1616 1617 1618 1619 1620 1621 1622 1623 1624 1625 1626 1627 1628 1629 1630 1631 1632 1633 1634 1635 1636 1637 1638 1639 1640 1641 1642 1643 1644 1645 1646 1647 | TkWinUpdatingClipboard(int mode) { ThreadSpecificData *tsdPtr = (ThreadSpecificData *) Tcl_GetThreadData(&dataKey, sizeof(ThreadSpecificData)); tsdPtr->updatingClipboard = mode; } /* *---------------------------------------------------------------------- * * Tk_SetCaretPos -- * * This enables correct movement of focus in the MS Magnifier, as well * as allowing us to correctly position the IME Window. The following * Win32 APIs are used to work with MS caret: * * CreateCaret DestroyCaret SetCaretPos GetCaretPos * * Only one instance of caret can be active at any time * (e.g. DestroyCaret API does not take any argument such as handle). * Since do-it-right approach requires to track the create/destroy * caret status all the time in a global scope among windows (or * widgets), we just implement this minimal setup to get the job done. * * Results: * None * * Side effects: * Sets the global Windows caret position. * *---------------------------------------------------------------------- */ void Tk_SetCaretPos(Tk_Window tkwin, int x, int y, int height) { static HWND caretHWND = NULL; static int lastX = -1, lastY = -1; Window win; /* * We adjust to the toplevel to get the coords right, as setting * the IME composition window is based on the toplevel hwnd, so * ignore height. */ while (!Tk_IsTopLevel(tkwin)) { x += Tk_X(tkwin); y += Tk_Y(tkwin); tkwin = Tk_Parent(tkwin); if (tkwin == NULL) { return; } } win = Tk_WindowId(tkwin); if (win) { HIMC hIMC; HWND hwnd = Tk_GetHWND(win); if ((hwnd == caretHWND) && (lastX == x) && (lastY == y)) { /* * Prevent processing anything if the values haven't changed. */ return; } lastX = x; lastY = y; if (hwnd != caretHWND) { DestroyCaret(); if (CreateCaret(hwnd, NULL, 0, 0)) { caretHWND = hwnd; } } if (!SetCaretPos(x, y) && CreateCaret(hwnd, NULL, 0, 0)) { caretHWND = hwnd; SetCaretPos(x, y); } /* * The IME composition window should be updated whenever the caret * position is changed because a clause of the composition string may * be converted to the final characters and the other clauses still * stay on the composition window. -- yamamoto */ hIMC = ImmGetContext(hwnd); if (hIMC) { COMPOSITIONFORM cform; cform.dwStyle = CFS_POINT; cform.ptCurrentPos.x = x; cform.ptCurrentPos.y = y; ImmSetCompositionWindow(hIMC, &cform); ImmReleaseContext(hwnd, hIMC); } } } |