Top Banner
16

Cygwin Tcl/Tk - EuroTcl 2018 · Cygwin support for Tcl/Tk Stubs Event loop Conclusion Demo . What is Cygwin ... tclsh86.exe wish86.exe tclsh8.6.exe tcl86.dll libtcl8.6.dll wish8.6.exe

Aug 27, 2018

Download

Documents

phamquynh
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: Cygwin Tcl/Tk - EuroTcl 2018 · Cygwin support for Tcl/Tk Stubs Event loop Conclusion Demo . What is Cygwin ... tclsh86.exe wish86.exe tclsh8.6.exe tcl86.dll libtcl8.6.dll wish8.6.exe
Page 2: Cygwin Tcl/Tk - EuroTcl 2018 · Cygwin support for Tcl/Tk Stubs Event loop Conclusion Demo . What is Cygwin ... tclsh86.exe wish86.exe tclsh8.6.exe tcl86.dll libtcl8.6.dll wish8.6.exe

Cygwin Tcl/Tk:

Windows or UNIX?

Jan Nijtmans

july 7, 2012

Page 3: Cygwin Tcl/Tk - EuroTcl 2018 · Cygwin support for Tcl/Tk Stubs Event loop Conclusion Demo . What is Cygwin ... tclsh86.exe wish86.exe tclsh8.6.exe tcl86.dll libtcl8.6.dll wish8.6.exe

Summary

10 juli 2012 Powerpoint ICT Automatisering 3

What is Cygwin

Build environment

Cygwin support for Tcl/Tk

Stubs

Event loop

Conclusion

Demo

Page 4: Cygwin Tcl/Tk - EuroTcl 2018 · Cygwin support for Tcl/Tk Stubs Event loop Conclusion Demo . What is Cygwin ... tclsh86.exe wish86.exe tclsh8.6.exe tcl86.dll libtcl8.6.dll wish8.6.exe

What is Cygwin

cygwin1.dll

■ licence GPLv3 (with exception) !

mount()

fork()

rebase

X11 (cygx11-6.dll, cygxss-1.dll)

10 juli 2012 Powerpoint ICT Automatisering 4

#### C:\Tcl\etc\fstab ####

C:/Users /Users fat32 binary 0 0

C:/Tcl /Tcl fat32 binary 0 0

Page 5: Cygwin Tcl/Tk - EuroTcl 2018 · Cygwin support for Tcl/Tk Stubs Event loop Conclusion Demo . What is Cygwin ... tclsh86.exe wish86.exe tclsh8.6.exe tcl86.dll libtcl8.6.dll wish8.6.exe

Build environment

For Tcl:

■ gcc-core (3.4.4-999) or gcc4-core (4.5.3-3)

■ make (3.82.90-1)

■ mingw64-i686-gcc-core (4.5.3-6)

For Tk (X11)

■ libXss-devel (1.2.0-1)

■ xinit (1.3.2-1)

Optional

■ zlib-devel (1.2.7-1) (Optional, If you don't want zlib to be built into

Tcl)

■ mingw64-x86_64-gcc-core (4.5.3-6) (Optional, only for win64)

10 juli 2012 Powerpoint ICT Automatisering 5

Page 6: Cygwin Tcl/Tk - EuroTcl 2018 · Cygwin support for Tcl/Tk Stubs Event loop Conclusion Demo . What is Cygwin ... tclsh86.exe wish86.exe tclsh8.6.exe tcl86.dll libtcl8.6.dll wish8.6.exe

How to compile Cygwin/win32 Tcl/Tk 8.6

cd win

configure --prefix=/Tcl (--enable-64bit)

make

cd ../unix

configure --prefix=/Tcl

make

make install

cd ../win

make install

10 juli 2012 Powerpoint ICT Automatisering 6

Tcl + Tk

Tcl + Tk

Tcl + Tk

Page 7: Cygwin Tcl/Tk - EuroTcl 2018 · Cygwin support for Tcl/Tk Stubs Event loop Conclusion Demo . What is Cygwin ... tclsh86.exe wish86.exe tclsh8.6.exe tcl86.dll libtcl8.6.dll wish8.6.exe

win32 configure

#if !defined(_WIN32)

if test –enable-64bit = true

CC = x86_64-w64-mingw32-gcc

else

CC = i686-w64-mingw32-gcc

#endif

TEA modified as well (Thread, Itcl, tdbc)

10 juli 2012 Powerpoint ICT Automatisering 7

Page 8: Cygwin Tcl/Tk - EuroTcl 2018 · Cygwin support for Tcl/Tk Stubs Event loop Conclusion Demo . What is Cygwin ... tclsh86.exe wish86.exe tclsh8.6.exe tcl86.dll libtcl8.6.dll wish8.6.exe

Stubs/TEA

Febr 2012: Cygwin switched from win32 to unix

■ file paths C:\Tcl -> /cygdrive/c/Tcl

■ stub tables

■ struct Tcl_StatBuf

10 juli 2012 Powerpoint ICT Automatisering 8

typedef struct TclPlatStubs {

……

#if defined(__WIN32__) || defined(__CYGWIN__) /* WIN */

TCHAR * (*tcl_WinUtfToTChar) (…...); /* 0 */

char * (*tcl_WinTCharToUtf) (……); /* 1 */

#endif /* WIN */

#ifdef MAC_OSX_TCL /* MACOSX */

int (*tcl_MacOSXOpenBundleResources) (……); /* 0 */

int (*tcl_MacOSXOpenVersionedBundleResources) (…..) /* 1 */

#endif /* MACOSX */

} TclPlatStubs;

Page 9: Cygwin Tcl/Tk - EuroTcl 2018 · Cygwin support for Tcl/Tk Stubs Event loop Conclusion Demo . What is Cygwin ... tclsh86.exe wish86.exe tclsh8.6.exe tcl86.dll libtcl8.6.dll wish8.6.exe

Load dde.dll/reg.dll in cygwin tclsh:

Stub table adaptation

10 juli 2012 Powerpoint ICT Automatisering 9

typedef struct TclIntPlatStubs {

…..

#if !defined(__WIN32__) && !defined(__CYGWIN__) /* UNIX */

…..

TclFile (*tclpCreateTempFile) (…..); /* 9 */

….

#endif /* UNIX */

#if defined(__WIN32__) || defined(__CYGWIN__) /* WIN */

…..

int (*tclWinGetPlatformId) _ANSI_ARGS_(…..); /* 9 */

…..

endif /* WIN */

…..

} TclIntPlatStubs;

Page 10: Cygwin Tcl/Tk - EuroTcl 2018 · Cygwin support for Tcl/Tk Stubs Event loop Conclusion Demo . What is Cygwin ... tclsh86.exe wish86.exe tclsh8.6.exe tcl86.dll libtcl8.6.dll wish8.6.exe

Load tk86.dll in tclsh8.6.exe

If all stub entries are compatible this should be possible

Wrong: tclsh8.6 doesn’t know anything about win32

events.

10 juli 2012 Powerpoint ICT Automatisering 10

tclsh86.exe wish86.exe tclsh8.6.exe

libtcl8.6.dll tcl86.dll

wish8.6.exe

tk86.dll

libtk8.6.dll

cygwin1.dll msvcrt.dll

cygx11-6.dll

Page 11: Cygwin Tcl/Tk - EuroTcl 2018 · Cygwin support for Tcl/Tk Stubs Event loop Conclusion Demo . What is Cygwin ... tclsh86.exe wish86.exe tclsh8.6.exe tcl86.dll libtcl8.6.dll wish8.6.exe

Event loop

Notifier

■ Threaded or not

10 juli 2012 Powerpoint ICT Automatisering 11

Page 12: Cygwin Tcl/Tk - EuroTcl 2018 · Cygwin support for Tcl/Tk Stubs Event loop Conclusion Demo . What is Cygwin ... tclsh86.exe wish86.exe tclsh8.6.exe tcl86.dll libtcl8.6.dll wish8.6.exe

Notifier implementation

UNIX:

■ select()

■ Tcl_ConditionNotify/Tcl_ConditionWait()

Windows:

■ MsgWaitForMultipleObjects()

■ Tcl_ConditionNotify/Tcl_ConditionWait()

Cygwin

■ select()

■ PostMessage/MsgWaitForMultipleObjects()

10 juli 2012 Powerpoint ICT Automatisering 12

Page 13: Cygwin Tcl/Tk - EuroTcl 2018 · Cygwin support for Tcl/Tk Stubs Event loop Conclusion Demo . What is Cygwin ... tclsh86.exe wish86.exe tclsh8.6.exe tcl86.dll libtcl8.6.dll wish8.6.exe

Macro’s vs functions

win32:

■ #define Xfree(data) {if (data) ckfree(data)}

X11:

■ extern int Xfree(void *data);

Macro

10 juli 2012 Powerpoint ICT Automatisering 13

Page 14: Cygwin Tcl/Tk - EuroTcl 2018 · Cygwin support for Tcl/Tk Stubs Event loop Conclusion Demo . What is Cygwin ... tclsh86.exe wish86.exe tclsh8.6.exe tcl86.dll libtcl8.6.dll wish8.6.exe

Conclusion

Cygwin Tcl/Tk: UNIX but with win32 additions

■ registry/dde

■ [tk windowingsystem] = “x11” + “win32”

Cygwin as build environment (gcc/MinGW-w64)

All stub entries equal between win32/Cygwin

Event loop + win32 events

Rebase: give each dll a fixed base

10 juli 2012 Powerpoint ICT Automatisering 14

Page 15: Cygwin Tcl/Tk - EuroTcl 2018 · Cygwin support for Tcl/Tk Stubs Event loop Conclusion Demo . What is Cygwin ... tclsh86.exe wish86.exe tclsh8.6.exe tcl86.dll libtcl8.6.dll wish8.6.exe

Questions?

10 juli 2012 Powerpoint ICT Automatisering 15

Page 16: Cygwin Tcl/Tk - EuroTcl 2018 · Cygwin support for Tcl/Tk Stubs Event loop Conclusion Demo . What is Cygwin ... tclsh86.exe wish86.exe tclsh8.6.exe tcl86.dll libtcl8.6.dll wish8.6.exe